diff options
author | dizzy <diosmosis@users.noreply.github.com> | 2022-02-02 17:47:20 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-02 17:47:20 +0300 |
commit | 974511bb495e9b9b36585743dad39b17bb35d9bb (patch) | |
tree | 2b2d5b07c7e451fc0a93f775f8ffd2db61726fcf | |
parent | f20c4cbed3de7f3fcc49810d5721b257d5a56d43 (diff) |
[Vue] convert sites manager single site template/controller to vue component (#18562)
* migrate select-on-focus directive and start migrating report-export directive
* finish migrating report export directive & popover component + create reusable function to create vue app and add globals to it
* rebuild vue
* remove angularjs files and move less contents to vue dir
* migrate sparkline component
* migrate progressbar component
* migrate content intro & content table directives
* rebuild vue
* migrate piwik-ajax-form component to vue
* migrate popover handler directive to service class
* migrate dropdownbutton directive though it does not seem to be in use
* migrate show sensitive data directive
* build vue
* built vue files
* fix function signature
* fix vue warning
* fix ajax request race condition
* rebuild vue
* add new notification type "help" so the help notification is not cleared when clearing transient notifications
* fix some bugs and tests
* update screenshot
* update screenshot & fix a test
* allow using unminified jquery ui + fix bug in last fix
* fix error when enrichedheadline is used in modal
* add polyfill min.js
* remove two todos
* fix widget url logic
* update some screenshots and fix sanitization/escape issue
* update screenshots
* rebuild vue
* fix url location updating regression in MatomoUrl.updateLocation use
* submodule
* update screenshots and fix possible error in json parse
* built vue files
* Merge branch 'vue-period-selector-regression' into vue-reporting-menu
* rebuild vue
* use correct variable
* rebuild vue
* fix widget url logic
* segment parameter can be undefined now for some reason
* fix ngmodel binding in siteselector adapter (for last time hopefully)
* the original site selector only set the first site to the first site in the initial sites query if there was only one site in the entire matomo instance
* fix sitesmanager ui test failure
* fix usersettings test failure
* rebuild vue
* more siteselector tweaks.
* build CoreHome
* more siteselector tweaks.
* another siteselector issue
* update screenshots
* update screenshot and try to fix random failure
* fix some issues in widget.vue when containerid is specified
* fix couple tests
* fix several test failures
* fix string concat
* fix test failure
* extra change
* fix last change and random failure
* styling fix
* fix last fix
* real fix this time
* fix stray request
* proper fix
* update build files
* try to fix random failure
* do not submit form
* check for api errors in promise chain in ajaxhelper.ts
* force a digest after a location change
* use proper abortcontroller method instead of promise hack, have to add new polyfill + try to fix random test failure
* some UI test fixes
* fix some report export issues
* several save button fixes + make replace approximation in createAngularJsAdapter better
* fix sparkline
* apply after manual click triggering in savebutton
* css fixes and piwik-content-table was never applied by angularjs in installtion
* rebuild vue
* add names to divs so they can still be queried as they were in angularjs
* rebuild vue
* rebuild vue
* now that format_metrics checkbox works, need to check it
* small delay before processing first popover
* fix dropdown class/directive name
* fix overlay test
* remove unintended changes
* remove unintended changes
* migrate archiving controller
* do not do a passthrough transpile of vue typescript, and fix many typescript errors in existing code
* more typescript fixes
* even more fixes
* workarounds to fix recursive typing issues
* get corehome to build w/ full typescript build and output type definitions to local dir
* get outputted typings to be used when compiling other plugins and fix typescript issues in CorePluginsAdmin
* readd corehome umd
* fix typescript errors in ExampleVue plugin
* fix feedback typescript errors
* rebuild
* migrate branding controller and get to build
* fix issues and get to work
* rebuild
* fix notification scroll
* migrate smtp settings controller in coreadminhome
* get to work
* migrate js tracking code generator and get to build
* migrate image tracking code generator and get to build
* get to work in UI
* get UI tests to pass locally
* forgot to add files + rebuild vue
* update screenshots
* Show a summary of new features (#18065)
* Added "What is new" notification display, populated by a new event
* Removed test example event hook
* Added support for applying a link attribute to menu items, fixes layout issue for mobile with html menu items
* Updated UI test screenshots
* Revert accidental edit
* Hide the "What's new" icon if there are no new features to show
* Changed to use changes.json, track user last viewed, added ui test
* Fix UserManager unit tests broken by new ts_changes_viewed user field
* Moved getChanges to separate helper class, added unit test, added user view access check
* Updated to add new changes table and populate only on plugin update/install
* Added missing fixture class, updated UI screenshots
* Updated matomo font to add ringing bell and new releases icons
* Fix for integration test
* Reworked class structure, removed unnecessary angular directive, merged templates, other tidy ups
* built vue files
* built vue files
* Added null user check, missing table exception handling, show plugin name in change title, better handling of missing change fields
* Added sample changes file, moved UserChanges db code to changes model, added return type hints, better db error code handling, various other improvements
* Revert accidental UI screenshot commit
* Fix for incorrect link name parameter in sample changes, switched back to using $db->query for INSERT IGNORE
* Integration test fix, UI screenshot updates
* Test fix
* Added link styling, show CoreHome changes without plugin prefix in title
* Update UI test screenshot
* Added styles to the popover, added event for filtering changes
* Test fix
* UI test screenshot updates
Co-authored-by: sgiehl <stefan@matomo.org>
Co-authored-by: bx80 <bx80@users.noreply.github.com>
* Update test translation (#18531)
update a test failed XML
* updates all submodules (#18541)
Co-authored-by: diosmosis <diosmosis@users.noreply.github.com>
* Translations update from Hosted Weblate (#18529)
* Translated using Weblate (Greek)
Currently translated at 100.0% (162 of 162 strings)
Translation: Matomo/Plugin CoreAdminHome
Translate-URL: https://hosted.weblate.org/projects/matomo/plugin-coreadminhome/el/
[ci skip]
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Vasilis Lourdas <dev@lourdas.eu>
* Translated using Weblate (Chinese (Simplified))
Currently translated at 83.9% (136 of 162 strings)
Translation: Matomo/Plugin CoreAdminHome
Translate-URL: https://hosted.weblate.org/projects/matomo/plugin-coreadminhome/zh_Hans/
[ci skip]
Translated using Weblate (Chinese (Simplified))
Currently translated at 99.6% (620 of 622 strings)
Translation: Matomo/Matomo Base
Translate-URL: https://hosted.weblate.org/projects/matomo/matomo-base/zh_Hans/
[ci skip]
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: 刘韬 <lyuutau@outlook.com>
* Update translation files
Updated by "Squash Git commits" hook in Weblate.
Translation: Matomo/Plugin CoreAdminHome
Translate-URL: https://hosted.weblate.org/projects/matomo/plugin-coreadminhome/
[ci skip]
Co-authored-by: Vasilis Lourdas <dev@lourdas.eu>
Co-authored-by: 刘韬 <lyuutau@outlook.com>
* [Vue] migrate report export directive and popover (#18440)
* update files
* sidenav start
* make getRef a utility method
* tweak
* add return type
* finish converting side-nav directive
* starting on reporting menu conversion
* remove unused properties
* convert reporting pages service
* migrate report metadata store
* remove angularjs files
* migrating reporting pages store
* make store adapters more immutable
* get service adapters to work
* fix a UI test
* another html fix
* migrate most of reporting menu directive and model
* Use themed font family for input forms to override materialize.css styling
* rebuild vue
* add a missing div
* ui test fixes
* update styling
* get to build
* get to load in the UI w/o error
* clone result of functions
* fix compile issue
* migrate widget loader and get to load in UI
* rebuild vue
* migrate widgetcontainer
* migrate widget bydimension container
* migrate widget + add tooltips directive
* quick fix
* Updating version to 4.6.0
* loading in page
* update expected screenshot
* add wait just in case travis is slow
* fix ordering bug
* add another wait
* rebuild vue
* css tweak
* fix some bugs and tests
* undo screenshot changes
* Menus test passing locally
* [Vue] date picker viewDate property is not kept up to date (#18385)
* viewDate ref is not kept up to date
* rebuild corehome
* reporting menu subcategory items are meant to be normal links
* update some screenshots
* use innerText instead of text() since angularjs maintains newlines in HTML that vue does not add
* trigger angularjs digest after ajaxhelper request
* rebuild vue
* update screenshots, fix bug in link generation in reporting menu and allow syncing multiple screenshot regexes at a time
* undo box-shadow change for UI tests
* fix more issues & update more tests
* update some screenshots
* fix some tests
* rebuild CoreHome
* quick fix
* built vue files
* fix angularjs issue
* add comment
* update umd files
* 4.6.1-rc1
* 4.6.1
* fix field array title
* apply some pr feedback
* apply more pr feedback
* another fix
* tweak
* fix ng-change not executed before ng-model
* fix another set of issues
* fix another issue
* rebuild vue
* better ng-change/ng-model fix
* update some screenshots
* rebuild vue
* remove some TODOs
* initiate initial ng-change ONLY for site selectors where this behavior applies
* emit/broadcast on correct scope in wrapper
* rebuild vue
* fix some issues
* couple more fixes
* fix another title issue
* rebuild vue
* do not report on ajax errors in notifications if not logged in
* migrate reporting page and model
* rebuild vue
* create sites selector model adapter
* fix siteselector vue bug, initial site is only set if there is just one site available
* rebuild vue
* migrate plugin settings directive
* remove TODO
* migrate plugin filter directive
* migrate two more plugins directives
* migrate save button
* fix a bunch of bugs
* fix another widget bug
* allow change event name between angularjs and vue
* rebuild vue
* migrate plugin form directive
* get to work
* migrate select-on-focus directive and start migrating report-export directive
* finish migrating report export directive & popover component + create reusable function to create vue app and add globals to it
* rebuild vue
* remove angularjs files and move less contents to vue dir
* built vue files
* fix function signature
* fix vue warning
* fix ajax request race condition
* rebuild vue
* add new notification type "help" so the help notification is not cleared when clearing transient notifications
* fix some bugs and tests
* update screenshot
* update screenshot & fix a test
* allow using unminified jquery ui + fix bug in last fix
* fix error when enrichedheadline is used in modal
* add polyfill min.js
* remove two todos
* fix widget url logic
* update some screenshots and fix sanitization/escape issue
* update screenshots
* rebuild vue
* fix url location updating regression in MatomoUrl.updateLocation use
* submodule
* update screenshots and fix possible error in json parse
* built vue files
* Merge branch 'vue-period-selector-regression' into vue-reporting-menu
* rebuild vue
* use correct variable
* rebuild vue
* fix widget url logic
* segment parameter can be undefined now for some reason
* fix ngmodel binding in siteselector adapter (for last time hopefully)
* the original site selector only set the first site to the first site in the initial sites query if there was only one site in the entire matomo instance
* fix sitesmanager ui test failure
* fix usersettings test failure
* rebuild vue
* more siteselector tweaks.
* build CoreHome
* more siteselector tweaks.
* another siteselector issue
* update screenshots
* update screenshot and try to fix random failure
* fix some issues in widget.vue when containerid is specified
* fix couple tests
* fix several test failures
* fix string concat
* fix test failure
* extra change
* fix last change and random failure
* styling fix
* fix last fix
* real fix this time
* fix stray request
* proper fix
* update build files
* try to fix random failure
* do not submit form
* check for api errors in promise chain in ajaxhelper.ts
* force a digest after a location change
* use proper abortcontroller method instead of promise hack, have to add new polyfill + try to fix random test failure
* some UI test fixes
* fix some report export issues
* several save button fixes + make replace approximation in createAngularJsAdapter better
* apply after manual click triggering in savebutton
* add names to divs so they can still be queried as they were in angularjs
* rebuild vue
* now that format_metrics checkbox works, need to check it
* fix unintended changes
* updated expected screenshots
* update two more
* go back to previous format_metrics behavior in popover
Co-authored-by: Justin Velluppillai <justin@innocraft.com>
Co-authored-by: justinvelluppillai <justinvelluppillai@users.noreply.github.com>
Co-authored-by: Matthieu Aubry <mattab@users.noreply.github.com>
* [Vue] remove support in vue for FormField.allSettings (#18542)
* deprecate support in vue for FormField.allSettings since deep watching the property doesnt quite work
* built vue files
* update screenshots
* update screenshot
* Show a summary of new features (#18065)
* Added "What is new" notification display, populated by a new event
* Removed test example event hook
* Added support for applying a link attribute to menu items, fixes layout issue for mobile with html menu items
* Updated UI test screenshots
* Revert accidental edit
* Hide the "What's new" icon if there are no new features to show
* Changed to use changes.json, track user last viewed, added ui test
* Fix UserManager unit tests broken by new ts_changes_viewed user field
* Moved getChanges to separate helper class, added unit test, added user view access check
* Updated to add new changes table and populate only on plugin update/install
* Added missing fixture class, updated UI screenshots
* Updated matomo font to add ringing bell and new releases icons
* Fix for integration test
* Reworked class structure, removed unnecessary angular directive, merged templates, other tidy ups
* built vue files
* built vue files
* Added null user check, missing table exception handling, show plugin name in change title, better handling of missing change fields
* Added sample changes file, moved UserChanges db code to changes model, added return type hints, better db error code handling, various other improvements
* Revert accidental UI screenshot commit
* Fix for incorrect link name parameter in sample changes, switched back to using $db->query for INSERT IGNORE
* Integration test fix, UI screenshot updates
* Test fix
* Added link styling, show CoreHome changes without plugin prefix in title
* Update UI test screenshot
* Added styles to the popover, added event for filtering changes
* Test fix
* UI test screenshot updates
Co-authored-by: sgiehl <stefan@matomo.org>
Co-authored-by: bx80 <bx80@users.noreply.github.com>
* Update test translation (#18531)
update a test failed XML
* updates all submodules (#18541)
Co-authored-by: diosmosis <diosmosis@users.noreply.github.com>
* Translations update from Hosted Weblate (#18529)
* Translated using Weblate (Greek)
Currently translated at 100.0% (162 of 162 strings)
Translation: Matomo/Plugin CoreAdminHome
Translate-URL: https://hosted.weblate.org/projects/matomo/plugin-coreadminhome/el/
[ci skip]
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Vasilis Lourdas <dev@lourdas.eu>
* Translated using Weblate (Chinese (Simplified))
Currently translated at 83.9% (136 of 162 strings)
Translation: Matomo/Plugin CoreAdminHome
Translate-URL: https://hosted.weblate.org/projects/matomo/plugin-coreadminhome/zh_Hans/
[ci skip]
Translated using Weblate (Chinese (Simplified))
Currently translated at 99.6% (620 of 622 strings)
Translation: Matomo/Matomo Base
Translate-URL: https://hosted.weblate.org/projects/matomo/matomo-base/zh_Hans/
[ci skip]
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: 刘韬 <lyuutau@outlook.com>
* Update translation files
Updated by "Squash Git commits" hook in Weblate.
Translation: Matomo/Plugin CoreAdminHome
Translate-URL: https://hosted.weblate.org/projects/matomo/plugin-coreadminhome/
[ci skip]
Co-authored-by: Vasilis Lourdas <dev@lourdas.eu>
Co-authored-by: 刘韬 <lyuutau@outlook.com>
* [Vue] migrate report export directive and popover (#18440)
* update files
* sidenav start
* make getRef a utility method
* tweak
* add return type
* finish converting side-nav directive
* starting on reporting menu conversion
* remove unused properties
* convert reporting pages service
* migrate report metadata store
* remove angularjs files
* migrating reporting pages store
* make store adapters more immutable
* get service adapters to work
* fix a UI test
* another html fix
* migrate most of reporting menu directive and model
* Use themed font family for input forms to override materialize.css styling
* rebuild vue
* add a missing div
* ui test fixes
* update styling
* get to build
* get to load in the UI w/o error
* clone result of functions
* fix compile issue
* migrate widget loader and get to load in UI
* rebuild vue
* migrate widgetcontainer
* migrate widget bydimension container
* migrate widget + add tooltips directive
* quick fix
* Updating version to 4.6.0
* loading in page
* update expected screenshot
* add wait just in case travis is slow
* fix ordering bug
* add another wait
* rebuild vue
* css tweak
* fix some bugs and tests
* undo screenshot changes
* Menus test passing locally
* [Vue] date picker viewDate property is not kept up to date (#18385)
* viewDate ref is not kept up to date
* rebuild corehome
* reporting menu subcategory items are meant to be normal links
* update some screenshots
* use innerText instead of text() since angularjs maintains newlines in HTML that vue does not add
* trigger angularjs digest after ajaxhelper request
* rebuild vue
* update screenshots, fix bug in link generation in reporting menu and allow syncing multiple screenshot regexes at a time
* undo box-shadow change for UI tests
* fix more issues & update more tests
* update some screenshots
* fix some tests
* rebuild CoreHome
* quick fix
* built vue files
* fix angularjs issue
* add comment
* update umd files
* 4.6.1-rc1
* 4.6.1
* fix field array title
* apply some pr feedback
* apply more pr feedback
* another fix
* tweak
* fix ng-change not executed before ng-model
* fix another set of issues
* fix another issue
* rebuild vue
* better ng-change/ng-model fix
* update some screenshots
* rebuild vue
* remove some TODOs
* initiate initial ng-change ONLY for site selectors where this behavior applies
* emit/broadcast on correct scope in wrapper
* rebuild vue
* fix some issues
* couple more fixes
* fix another title issue
* rebuild vue
* do not report on ajax errors in notifications if not logged in
* migrate reporting page and model
* rebuild vue
* create sites selector model adapter
* fix siteselector vue bug, initial site is only set if there is just one site available
* rebuild vue
* migrate plugin settings directive
* remove TODO
* migrate plugin filter directive
* migrate two more plugins directives
* migrate save button
* fix a bunch of bugs
* fix another widget bug
* allow change event name between angularjs and vue
* rebuild vue
* migrate plugin form directive
* get to work
* migrate select-on-focus directive and start migrating report-export directive
* finish migrating report export directive & popover component + create reusable function to create vue app and add globals to it
* rebuild vue
* remove angularjs files and move less contents to vue dir
* built vue files
* fix function signature
* fix vue warning
* fix ajax request race condition
* rebuild vue
* add new notification type "help" so the help notification is not cleared when clearing transient notifications
* fix some bugs and tests
* update screenshot
* update screenshot & fix a test
* allow using unminified jquery ui + fix bug in last fix
* fix error when enrichedheadline is used in modal
* add polyfill min.js
* remove two todos
* fix widget url logic
* update some screenshots and fix sanitization/escape issue
* update screenshots
* rebuild vue
* fix url location updating regression in MatomoUrl.updateLocation use
* submodule
* update screenshots and fix possible error in json parse
* built vue files
* Merge branch 'vue-period-selector-regression' into vue-reporting-menu
* rebuild vue
* use correct variable
* rebuild vue
* fix widget url logic
* segment parameter can be undefined now for some reason
* fix ngmodel binding in siteselector adapter (for last time hopefully)
* the original site selector only set the first site to the first site in the initial sites query if there was only one site in the entire matomo instance
* fix sitesmanager ui test failure
* fix usersettings test failure
* rebuild vue
* more siteselector tweaks.
* build CoreHome
* more siteselector tweaks.
* another siteselector issue
* update screenshots
* update screenshot and try to fix random failure
* fix some issues in widget.vue when containerid is specified
* fix couple tests
* fix several test failures
* fix string concat
* fix test failure
* extra change
* fix last change and random failure
* styling fix
* fix last fix
* real fix this time
* fix stray request
* proper fix
* update build files
* try to fix random failure
* do not submit form
* check for api errors in promise chain in ajaxhelper.ts
* force a digest after a location change
* use proper abortcontroller method instead of promise hack, have to add new polyfill + try to fix random test failure
* some UI test fixes
* fix some report export issues
* several save button fixes + make replace approximation in createAngularJsAdapter better
* apply after manual click triggering in savebutton
* add names to divs so they can still be queried as they were in angularjs
* rebuild vue
* now that format_metrics checkbox works, need to check it
* fix unintended changes
* updated expected screenshots
* update two more
* go back to previous format_metrics behavior in popover
Co-authored-by: Justin Velluppillai <justin@innocraft.com>
Co-authored-by: justinvelluppillai <justinvelluppillai@users.noreply.github.com>
Co-authored-by: Matthieu Aubry <mattab@users.noreply.github.com>
* [Vue] remove support in vue for FormField.allSettings (#18542)
* deprecate support in vue for FormField.allSettings since deep watching the property doesnt quite work
* built vue files
* update screenshots
* update screenshot
* fix tests
* rebuild
* rebuild
* order plugins by dependencies in vue:build and fix warning in corehome build
* built vue files
* built vue files
* remove unused imports
* built vue files
* remove multilinefield component, fieldtextareaarray does the same thing
* edit-trigger is not used anywhere
* migrate sitetypes model to store
* do not load nonexistant files
* remove reference nonexistant files
* start converting sitefields component
* more work on sitefields component
* undo submodule change
* rebuild
* get sitesmanager to build
* get SiteFields component to work in UI
* datepicker does not format times
* export other stores
* fix some typing issues and rebuild
* add more comma delimited props to list + remove controller JS
* rebuild
* remove TODOs
* fix bug and rebuild
* fix bug and rebuild
* fix issue
* fix issues and rebuild
* fix ui test
* fix UI test failure
* fixing some issues
* complete fixes
* fix some more issues
* fix ui test failures
* another fix
* fix delete dialog
* more fixes
* fix another ui test + update other UI tests
* in groupedsetting handle templateFile property for angularjs BC
* rebuild vue
* fix view tracking code link
Co-authored-by: Ben Burgess <88810029+bx80@users.noreply.github.com>
Co-authored-by: sgiehl <stefan@matomo.org>
Co-authored-by: bx80 <bx80@users.noreply.github.com>
Co-authored-by: Peter Zhang <peter@innocraft.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Weblate (bot) <hosted@weblate.org>
Co-authored-by: Vasilis Lourdas <dev@lourdas.eu>
Co-authored-by: 刘韬 <lyuutau@outlook.com>
Co-authored-by: Justin Velluppillai <justin@innocraft.com>
Co-authored-by: justinvelluppillai <justinvelluppillai@users.noreply.github.com>
Co-authored-by: Matthieu Aubry <mattab@users.noreply.github.com>
37 files changed, 2096 insertions, 598 deletions
diff --git a/plugins/CoreHome/vue/dist/CoreHome.umd.js b/plugins/CoreHome/vue/dist/CoreHome.umd.js index 95359a1312..1919248421 100644 --- a/plugins/CoreHome/vue/dist/CoreHome.umd.js +++ b/plugins/CoreHome/vue/dist/CoreHome.umd.js @@ -5622,44 +5622,44 @@ PeriodDatePickervue_type_script_lang_ts.render = PeriodDatePickervue_type_templa directiveName: 'piwikPeriodDatePicker', restrict: 'E' })); -// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CoreHome/vue/src/SiteSelector/SiteSelector.vue?vue&type=template&id=b60531fc +// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CoreHome/vue/src/SiteSelector/SiteSelector.vue?vue&type=template&id=e9b88206 -var SiteSelectorvue_type_template_id_b60531fc_hoisted_1 = ["value", "name"]; -var SiteSelectorvue_type_template_id_b60531fc_hoisted_2 = ["title"]; -var SiteSelectorvue_type_template_id_b60531fc_hoisted_3 = ["textContent"]; -var SiteSelectorvue_type_template_id_b60531fc_hoisted_4 = { +var SiteSelectorvue_type_template_id_e9b88206_hoisted_1 = ["value", "name"]; +var SiteSelectorvue_type_template_id_e9b88206_hoisted_2 = ["title"]; +var SiteSelectorvue_type_template_id_e9b88206_hoisted_3 = ["textContent"]; +var SiteSelectorvue_type_template_id_e9b88206_hoisted_4 = { key: 1, class: "placeholder" }; -var SiteSelectorvue_type_template_id_b60531fc_hoisted_5 = { +var SiteSelectorvue_type_template_id_e9b88206_hoisted_5 = { class: "dropdown" }; -var SiteSelectorvue_type_template_id_b60531fc_hoisted_6 = { +var SiteSelectorvue_type_template_id_e9b88206_hoisted_6 = { class: "custom_select_search" }; -var SiteSelectorvue_type_template_id_b60531fc_hoisted_7 = ["placeholder"]; -var SiteSelectorvue_type_template_id_b60531fc_hoisted_8 = { +var SiteSelectorvue_type_template_id_e9b88206_hoisted_7 = ["placeholder"]; +var SiteSelectorvue_type_template_id_e9b88206_hoisted_8 = { key: 0 }; -var SiteSelectorvue_type_template_id_b60531fc_hoisted_9 = { +var SiteSelectorvue_type_template_id_e9b88206_hoisted_9 = { class: "custom_select_container" }; -var SiteSelectorvue_type_template_id_b60531fc_hoisted_10 = ["onClick"]; -var SiteSelectorvue_type_template_id_b60531fc_hoisted_11 = ["innerHTML", "href", "title"]; -var SiteSelectorvue_type_template_id_b60531fc_hoisted_12 = { +var SiteSelectorvue_type_template_id_e9b88206_hoisted_10 = ["onClick"]; +var SiteSelectorvue_type_template_id_e9b88206_hoisted_11 = ["innerHTML", "href", "title"]; +var SiteSelectorvue_type_template_id_e9b88206_hoisted_12 = { class: "ui-autocomplete ui-front ui-menu ui-widget ui-widget-content ui-corner-all\n siteSelect" }; -var SiteSelectorvue_type_template_id_b60531fc_hoisted_13 = { +var SiteSelectorvue_type_template_id_e9b88206_hoisted_13 = { class: "ui-menu-item" }; -var SiteSelectorvue_type_template_id_b60531fc_hoisted_14 = { +var SiteSelectorvue_type_template_id_e9b88206_hoisted_14 = { class: "ui-corner-all", tabindex: "-1" }; var _hoisted_15 = { key: 1 }; -function SiteSelectorvue_type_template_id_b60531fc_render(_ctx, _cache, $props, $setup, $data, $options) { +function SiteSelectorvue_type_template_id_e9b88206_render(_ctx, _cache, $props, $setup, $data, $options) { var _ctx$modelValue, _ctx$modelValue2, _ctx$modelValue3, _ctx$modelValue4; var _component_AllSitesLink = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("AllSitesLink"); @@ -5678,7 +5678,7 @@ function SiteSelectorvue_type_template_id_b60531fc_render(_ctx, _cache, $props, type: "hidden", value: (_ctx$modelValue = _ctx.modelValue) === null || _ctx$modelValue === void 0 ? void 0 : _ctx$modelValue.id, name: _ctx.name - }, null, 8, SiteSelectorvue_type_template_id_b60531fc_hoisted_1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { + }, null, 8, SiteSelectorvue_type_template_id_e9b88206_hoisted_1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { ref: "selectorLink", onClick: _cache[0] || (_cache[0] = function () { return _ctx.onClickSelector && _ctx.onClickSelector.apply(_ctx, arguments); @@ -5700,7 +5700,7 @@ function SiteSelectorvue_type_template_id_b60531fc_render(_ctx, _cache, $props, }, null, 2), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, [(_ctx$modelValue2 = _ctx.modelValue) !== null && _ctx$modelValue2 !== void 0 && _ctx$modelValue2.name || !_ctx.placeholder ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("span", { key: 0, textContent: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(((_ctx$modelValue3 = _ctx.modelValue) === null || _ctx$modelValue3 === void 0 ? void 0 : _ctx$modelValue3.name) || _ctx.firstSiteName) - }, null, 8, SiteSelectorvue_type_template_id_b60531fc_hoisted_3)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), !((_ctx$modelValue4 = _ctx.modelValue) !== null && _ctx$modelValue4 !== void 0 && _ctx$modelValue4.name) && _ctx.placeholder ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("span", SiteSelectorvue_type_template_id_b60531fc_hoisted_4, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.placeholder), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])], 42, SiteSelectorvue_type_template_id_b60531fc_hoisted_2), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", SiteSelectorvue_type_template_id_b60531fc_hoisted_5, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", SiteSelectorvue_type_template_id_b60531fc_hoisted_6, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", { + }, null, 8, SiteSelectorvue_type_template_id_e9b88206_hoisted_3)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), !((_ctx$modelValue4 = _ctx.modelValue) !== null && _ctx$modelValue4 !== void 0 && _ctx$modelValue4.name) && _ctx.placeholder ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("span", SiteSelectorvue_type_template_id_e9b88206_hoisted_4, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.placeholder), 1)) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])], 42, SiteSelectorvue_type_template_id_e9b88206_hoisted_2), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", SiteSelectorvue_type_template_id_e9b88206_hoisted_5, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", SiteSelectorvue_type_template_id_e9b88206_hoisted_6, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", { type: "text", onClick: _cache[2] || (_cache[2] = function ($event) { _ctx.searchTerm = ''; @@ -5713,7 +5713,7 @@ function SiteSelectorvue_type_template_id_b60531fc_render(_ctx, _cache, $props, tabindex: "4", class: "websiteSearch inp browser-default", placeholder: _ctx.translate('General_Search') - }, null, 8, SiteSelectorvue_type_template_id_b60531fc_hoisted_7), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vModelText"], _ctx.searchTerm], [_directive_focus_if, {}, _ctx.shouldFocusOnSearch]]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("img", { + }, null, 8, SiteSelectorvue_type_template_id_e9b88206_hoisted_7), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vModelText"], _ctx.searchTerm], [_directive_focus_if, {}, _ctx.shouldFocusOnSearch]]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("img", { title: "Clear", onClick: _cache[4] || (_cache[4] = function ($event) { _ctx.searchTerm = ''; @@ -5722,13 +5722,13 @@ function SiteSelectorvue_type_template_id_b60531fc_render(_ctx, _cache, $props, }), class: "reset", src: "plugins/CoreHome/images/reset_search.png" - }, null, 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.searchTerm]])], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.autocompleteMinSites <= _ctx.sites.length || _ctx.searchTerm]]), _ctx.allSitesLocation === 'top' && _ctx.showAllSitesItem ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", SiteSelectorvue_type_template_id_b60531fc_hoisted_8, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_AllSitesLink, { + }, null, 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.searchTerm]])], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.autocompleteMinSites <= _ctx.sites.length || _ctx.searchTerm]]), _ctx.allSitesLocation === 'top' && _ctx.showAllSitesItem ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", SiteSelectorvue_type_template_id_e9b88206_hoisted_8, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_AllSitesLink, { href: _ctx.urlAllSites, "all-sites-text": _ctx.allSitesText, onClick: _cache[5] || (_cache[5] = function ($event) { return _ctx.onAllSitesClick($event); }) - }, null, 8, ["href", "all-sites-text"])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", SiteSelectorvue_type_template_id_b60531fc_hoisted_9, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("ul", { + }, null, 8, ["href", "all-sites-text"])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", SiteSelectorvue_type_template_id_e9b88206_hoisted_9, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("ul", { class: "custom_select_ul_list", onClick: _cache[7] || (_cache[7] = function ($event) { return _ctx.showSitesList = false; @@ -5736,7 +5736,9 @@ function SiteSelectorvue_type_template_id_b60531fc_render(_ctx, _cache, $props, }, [(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Fragment"], null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["renderList"])(_ctx.sites, function (site, index) { return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])((Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("li", { onClick: function onClick($event) { - return _ctx.switchSite(site, $event); + return _ctx.switchSite(Object.assign(Object.assign({}, site), {}, { + id: site.idsite + }), $event); }, key: index }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { @@ -5747,8 +5749,8 @@ function SiteSelectorvue_type_template_id_b60531fc_render(_ctx, _cache, $props, tabindex: "4", href: _ctx.getUrlForSiteId(site.idsite), title: site.name - }, null, 8, SiteSelectorvue_type_template_id_b60531fc_hoisted_11)], 8, SiteSelectorvue_type_template_id_b60531fc_hoisted_10)), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], !(!_ctx.showSelectedSite && _ctx.activeSiteId === site.idsite)]]); - }), 128))]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("ul", SiteSelectorvue_type_template_id_b60531fc_hoisted_12, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("li", SiteSelectorvue_type_template_id_b60531fc_hoisted_13, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", SiteSelectorvue_type_template_id_b60531fc_hoisted_14, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_NotFound') + ' ' + _ctx.searchTerm), 1)])], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], !_ctx.sites.length && _ctx.searchTerm]])]), _ctx.allSitesLocation === 'bottom' && _ctx.showAllSitesItem ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", _hoisted_15, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_AllSitesLink, { + }, null, 8, SiteSelectorvue_type_template_id_e9b88206_hoisted_11)], 8, SiteSelectorvue_type_template_id_e9b88206_hoisted_10)), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], !(!_ctx.showSelectedSite && _ctx.activeSiteId === site.idsite)]]); + }), 128))]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("ul", SiteSelectorvue_type_template_id_e9b88206_hoisted_12, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("li", SiteSelectorvue_type_template_id_e9b88206_hoisted_13, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", SiteSelectorvue_type_template_id_e9b88206_hoisted_14, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_NotFound') + ' ' + _ctx.searchTerm), 1)])], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], !_ctx.sites.length && _ctx.searchTerm]])]), _ctx.allSitesLocation === 'bottom' && _ctx.showAllSitesItem ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", _hoisted_15, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_AllSitesLink, { href: _ctx.urlAllSites, "all-sites-text": _ctx.allSitesText, onClick: _cache[8] || (_cache[8] = function ($event) { @@ -5758,7 +5760,7 @@ function SiteSelectorvue_type_template_id_b60531fc_render(_ctx, _cache, $props, blur: _ctx.onBlur }]]); } -// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/SiteSelector/SiteSelector.vue?vue&type=template&id=b60531fc +// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/SiteSelector/SiteSelector.vue?vue&type=template&id=e9b88206 // CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CoreHome/vue/src/SiteSelector/AllSitesLink.vue?vue&type=template&id=45607d28 @@ -6131,7 +6133,7 @@ function debounce(fn) { }, onAllSitesClick: function onAllSitesClick(event) { this.switchSite({ - idsite: 'all', + id: 'all', name: this.$props.allSitesText }, event); this.showSitesList = false; @@ -6146,15 +6148,15 @@ function debounce(fn) { } this.$emit('update:modelValue', { - id: site.idsite, + id: site.id, name: site.name }); - if (!this.switchSiteOnSelect || this.activeSiteId === site.idsite) { + if (!this.switchSiteOnSelect || this.activeSiteId === site.id) { return; } - SiteSelector_SitesStore.loadSite(site.idsite); + SiteSelector_SitesStore.loadSite(site.id); }, onBlur: function onBlur() { this.showSitesList = false; @@ -6235,7 +6237,7 @@ function debounce(fn) { -SiteSelectorvue_type_script_lang_ts.render = SiteSelectorvue_type_template_id_b60531fc_render +SiteSelectorvue_type_script_lang_ts.render = SiteSelectorvue_type_template_id_e9b88206_render /* harmony default export */ var SiteSelector = (SiteSelectorvue_type_script_lang_ts); // CONCATENATED MODULE: ./plugins/CoreHome/vue/src/SiteSelector/SiteSelector.adapter.ts diff --git a/plugins/CoreHome/vue/dist/CoreHome.umd.min.js b/plugins/CoreHome/vue/dist/CoreHome.umd.min.js index 3ef4e2495e..7404ab573e 100644 --- a/plugins/CoreHome/vue/dist/CoreHome.umd.min.js +++ b/plugins/CoreHome/vue/dist/CoreHome.umd.min.js @@ -324,13 +324,13 @@ function pn(e){return{restrict:"A",priority:10,link:function(t,n,r){var i={insta * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */function ki(e,t,n,r,i,o){var l,c,s,u,d=Object(a["resolveComponent"])("AllSitesLink"),p=Object(a["resolveDirective"])("focus-if"),m=Object(a["resolveDirective"])("focus-anywhere-but-here");return Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("div",{class:Object(a["normalizeClass"])(["siteSelector piwikSelector borderedControl",{expanded:e.showSitesList,disabled:!e.hasMultipleSites}])},[e.name?(Object(a["openBlock"])(),Object(a["createElementBlock"])("input",{key:0,type:"hidden",value:null===(l=e.modelValue)||void 0===l?void 0:l.id,name:e.name},null,8,ci)):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("a",{ref:"selectorLink",onClick:t[0]||(t[0]=function(){return e.onClickSelector&&e.onClickSelector.apply(e,arguments)}),onKeydown:t[1]||(t[1]=function(t){return e.onPressEnter(t)}),href:"javascript:void(0)",class:Object(a["normalizeClass"])([{loading:e.isLoading},"title"]),tabindex:"4",title:e.selectorLinkTitle},[Object(a["createElementVNode"])("span",{class:Object(a["normalizeClass"])(["icon icon-arrow-bottom",{iconHidden:e.isLoading,collapsed:!e.showSitesList}])},null,2),Object(a["createElementVNode"])("span",null,[null!==(c=e.modelValue)&&void 0!==c&&c.name||!e.placeholder?(Object(a["openBlock"])(),Object(a["createElementBlock"])("span",{key:0,textContent:Object(a["toDisplayString"])((null===(s=e.modelValue)||void 0===s?void 0:s.name)||e.firstSiteName)},null,8,ui)):Object(a["createCommentVNode"])("",!0),null!==(u=e.modelValue)&&void 0!==u&&u.name||!e.placeholder?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("span",di,Object(a["toDisplayString"])(e.placeholder),1))])],42,si),Object(a["withDirectives"])(Object(a["createElementVNode"])("div",pi,[Object(a["withDirectives"])(Object(a["createElementVNode"])("div",mi,[Object(a["withDirectives"])(Object(a["createElementVNode"])("input",{type:"text",onClick:t[2]||(t[2]=function(t){e.searchTerm="",e.loadInitialSites()}),"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.searchTerm=t}),tabindex:"4",class:"websiteSearch inp browser-default",placeholder:e.translate("General_Search")},null,8,fi),[[a["vModelText"],e.searchTerm],[p,{},e.shouldFocusOnSearch]]),Object(a["withDirectives"])(Object(a["createElementVNode"])("img",{title:"Clear",onClick:t[4]||(t[4]=function(t){e.searchTerm="",e.loadInitialSites()}),class:"reset",src:"plugins/CoreHome/images/reset_search.png"},null,512),[[a["vShow"],e.searchTerm]])],512),[[a["vShow"],e.autocompleteMinSites<=e.sites.length||e.searchTerm]]),"top"===e.allSitesLocation&&e.showAllSitesItem?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",hi,[Object(a["createVNode"])(d,{href:e.urlAllSites,"all-sites-text":e.allSitesText,onClick:t[5]||(t[5]=function(t){return e.onAllSitesClick(t)})},null,8,["href","all-sites-text"])])):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("div",gi,[Object(a["createElementVNode"])("ul",{class:"custom_select_ul_list",onClick:t[7]||(t[7]=function(t){return e.showSitesList=!1})},[(Object(a["openBlock"])(!0),Object(a["createElementBlock"])(a["Fragment"],null,Object(a["renderList"])(e.sites,(function(n,r){return Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("li",{onClick:function(t){return e.switchSite(n,t)},key:r},[Object(a["createElementVNode"])("a",{onClick:t[6]||(t[6]=function(e){return e.preventDefault()}),innerHTML:e.$sanitize(e.getMatchedSiteName(n.name)),tabindex:"4",href:e.getUrlForSiteId(n.idsite),title:n.name},null,8,bi)],8,vi)),[[a["vShow"],!(!e.showSelectedSite&&e.activeSiteId===n.idsite)]])})),128))]),Object(a["withDirectives"])(Object(a["createElementVNode"])("ul",yi,[Object(a["createElementVNode"])("li",wi,[Object(a["createElementVNode"])("a",Oi,Object(a["toDisplayString"])(e.translate("SitesManager_NotFound")+" "+e.searchTerm),1)])],512),[[a["vShow"],!e.sites.length&&e.searchTerm]])]),"bottom"===e.allSitesLocation&&e.showAllSitesItem?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",ji,[Object(a["createVNode"])(d,{href:e.urlAllSites,"all-sites-text":e.allSitesText,onClick:t[8]||(t[8]=function(t){return e.onAllSitesClick(t)})},null,8,["href","all-sites-text"])])):Object(a["createCommentVNode"])("",!0)],512),[[a["vShow"],e.showSitesList]])],2)),[[m,{blur:e.onBlur}]])}var Si=["innerHTML","href"];function Ci(e,t,n,r,i,o){var l=this;return Object(a["openBlock"])(),Object(a["createElementBlock"])("div",{onClick:t[1]||(t[1]=function(e){return l.onClick(e)}),class:"custom_select_all"},[Object(a["createElementVNode"])("a",{onClick:t[0]||(t[0]=function(e){return e.preventDefault()}),innerHTML:e.$sanitize(e.allSitesText),tabindex:"4",href:e.href},null,8,Si)])}var Ei=Object(a["defineComponent"])({props:{href:String,allSitesText:String},emits:["click"],methods:{onClick:function(e){this.$emit("click",e)}}});Ei.render=Ci;var Di=Ei;function Pi(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Vi(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Ni(e,t,n){return t&&Vi(e.prototype,t),n&&Vi(e,n),e}function Ti(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e} + */function ki(e,t,n,r,i,o){var l,c,s,u,d=Object(a["resolveComponent"])("AllSitesLink"),p=Object(a["resolveDirective"])("focus-if"),m=Object(a["resolveDirective"])("focus-anywhere-but-here");return Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("div",{class:Object(a["normalizeClass"])(["siteSelector piwikSelector borderedControl",{expanded:e.showSitesList,disabled:!e.hasMultipleSites}])},[e.name?(Object(a["openBlock"])(),Object(a["createElementBlock"])("input",{key:0,type:"hidden",value:null===(l=e.modelValue)||void 0===l?void 0:l.id,name:e.name},null,8,ci)):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("a",{ref:"selectorLink",onClick:t[0]||(t[0]=function(){return e.onClickSelector&&e.onClickSelector.apply(e,arguments)}),onKeydown:t[1]||(t[1]=function(t){return e.onPressEnter(t)}),href:"javascript:void(0)",class:Object(a["normalizeClass"])([{loading:e.isLoading},"title"]),tabindex:"4",title:e.selectorLinkTitle},[Object(a["createElementVNode"])("span",{class:Object(a["normalizeClass"])(["icon icon-arrow-bottom",{iconHidden:e.isLoading,collapsed:!e.showSitesList}])},null,2),Object(a["createElementVNode"])("span",null,[null!==(c=e.modelValue)&&void 0!==c&&c.name||!e.placeholder?(Object(a["openBlock"])(),Object(a["createElementBlock"])("span",{key:0,textContent:Object(a["toDisplayString"])((null===(s=e.modelValue)||void 0===s?void 0:s.name)||e.firstSiteName)},null,8,ui)):Object(a["createCommentVNode"])("",!0),null!==(u=e.modelValue)&&void 0!==u&&u.name||!e.placeholder?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("span",di,Object(a["toDisplayString"])(e.placeholder),1))])],42,si),Object(a["withDirectives"])(Object(a["createElementVNode"])("div",pi,[Object(a["withDirectives"])(Object(a["createElementVNode"])("div",mi,[Object(a["withDirectives"])(Object(a["createElementVNode"])("input",{type:"text",onClick:t[2]||(t[2]=function(t){e.searchTerm="",e.loadInitialSites()}),"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.searchTerm=t}),tabindex:"4",class:"websiteSearch inp browser-default",placeholder:e.translate("General_Search")},null,8,fi),[[a["vModelText"],e.searchTerm],[p,{},e.shouldFocusOnSearch]]),Object(a["withDirectives"])(Object(a["createElementVNode"])("img",{title:"Clear",onClick:t[4]||(t[4]=function(t){e.searchTerm="",e.loadInitialSites()}),class:"reset",src:"plugins/CoreHome/images/reset_search.png"},null,512),[[a["vShow"],e.searchTerm]])],512),[[a["vShow"],e.autocompleteMinSites<=e.sites.length||e.searchTerm]]),"top"===e.allSitesLocation&&e.showAllSitesItem?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",hi,[Object(a["createVNode"])(d,{href:e.urlAllSites,"all-sites-text":e.allSitesText,onClick:t[5]||(t[5]=function(t){return e.onAllSitesClick(t)})},null,8,["href","all-sites-text"])])):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("div",gi,[Object(a["createElementVNode"])("ul",{class:"custom_select_ul_list",onClick:t[7]||(t[7]=function(t){return e.showSitesList=!1})},[(Object(a["openBlock"])(!0),Object(a["createElementBlock"])(a["Fragment"],null,Object(a["renderList"])(e.sites,(function(n,r){return Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("li",{onClick:function(t){return e.switchSite(Object.assign(Object.assign({},n),{},{id:n.idsite}),t)},key:r},[Object(a["createElementVNode"])("a",{onClick:t[6]||(t[6]=function(e){return e.preventDefault()}),innerHTML:e.$sanitize(e.getMatchedSiteName(n.name)),tabindex:"4",href:e.getUrlForSiteId(n.idsite),title:n.name},null,8,bi)],8,vi)),[[a["vShow"],!(!e.showSelectedSite&&e.activeSiteId===n.idsite)]])})),128))]),Object(a["withDirectives"])(Object(a["createElementVNode"])("ul",yi,[Object(a["createElementVNode"])("li",wi,[Object(a["createElementVNode"])("a",Oi,Object(a["toDisplayString"])(e.translate("SitesManager_NotFound")+" "+e.searchTerm),1)])],512),[[a["vShow"],!e.sites.length&&e.searchTerm]])]),"bottom"===e.allSitesLocation&&e.showAllSitesItem?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",ji,[Object(a["createVNode"])(d,{href:e.urlAllSites,"all-sites-text":e.allSitesText,onClick:t[8]||(t[8]=function(t){return e.onAllSitesClick(t)})},null,8,["href","all-sites-text"])])):Object(a["createCommentVNode"])("",!0)],512),[[a["vShow"],e.showSitesList]])],2)),[[m,{blur:e.onBlur}]])}var Si=["innerHTML","href"];function Ci(e,t,n,r,i,o){var l=this;return Object(a["openBlock"])(),Object(a["createElementBlock"])("div",{onClick:t[1]||(t[1]=function(e){return l.onClick(e)}),class:"custom_select_all"},[Object(a["createElementVNode"])("a",{onClick:t[0]||(t[0]=function(e){return e.preventDefault()}),innerHTML:e.$sanitize(e.allSitesText),tabindex:"4",href:e.href},null,8,Si)])}var Ei=Object(a["defineComponent"])({props:{href:String,allSitesText:String},emits:["click"],methods:{onClick:function(e){this.$emit("click",e)}}});Ei.render=Ci;var Di=Ei;function Pi(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Vi(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function Ni(e,t,n){return t&&Vi(e.prototype,t),n&&Vi(e,n),e}function Ti(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e} /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */var Ai=function(){function e(){var t=this;Pi(this,e),Ti(this,"state",Object(a["reactive"])({initialSites:[],isInitialized:!1})),Ti(this,"currentRequestAbort",null),Ti(this,"limitRequest",void 0),Ti(this,"initialSites",Object(a["computed"])((function(){return Object(a["readonly"])(t.state.initialSites)})))}return Ni(e,[{key:"loadInitialSites",value:function(){var e=this;return this.state.isInitialized?Promise.resolve(Object(a["readonly"])(this.state.initialSites)):this.searchSite("%").then((function(t){return e.state.isInitialized=!0,null!==t&&(e.state.initialSites=t),t}))}},{key:"loadSite",value:function(e){"all"===e?Ce.updateUrl(Object.assign(Object.assign({},Ce.urlParsed.value),{},{module:"MultiSites",action:"index",date:Ce.parsed.value.date,period:Ce.parsed.value.period})):Ce.updateUrl(Object.assign(Object.assign({},Ce.urlParsed.value),{},{segment:"",idSite:e}),Object.assign(Object.assign({},Ce.hashParsed.value),{},{segment:"",idSite:e}))}},{key:"searchSite",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return e?(this.currentRequestAbort&&this.currentRequestAbort.abort(),this.limitRequest||(this.limitRequest=Je.fetch({method:"SitesManager.getNumWebsitesToDisplayPerPage"})),this.limitRequest.then((function(r){var i=r.value,a="SitesManager.getPatternMatchSites";return n&&(a="SitesManager.getSitesWithAdminAccess"),t.currentRequestAbort=new AbortController,Je.fetch({method:a,limit:i,pattern:e},{abortController:t.currentRequestAbort})})).then((function(e){return e?t.processWebsitesList(e):null})).finally((function(){t.currentRequestAbort=null}))):this.loadInitialSites()}},{key:"processWebsitesList",value:function(e){var t=e;return t&&t.length?(t=t.map((function(e){return Object.assign(Object.assign({},e),{},{name:e.group?"[".concat(e.group,"] ").concat(e.name):e.name})})),t.sort((function(e,t){return e.name.toLowerCase()<t.name.toLowerCase()?-1:e.name.toLowerCase()>t.name.toLowerCase()?1:0})),t):[]}}]),e}(),xi=new Ai,Ii=300;function Bi(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Ii;return function(){for(var r=this,i=arguments.length,a=new Array(i),o=0;o<i;o++)a[o]=arguments[o];t&&clearTimeout(t),t=setTimeout((function(){e.call.apply(e,[r].concat(a))}),n)}}var Li=Object(a["defineComponent"])({props:{modelValue:{type:Object,default:function(e){return e.modelValue?e.modelValue:S.idSite?{id:S.idSite,name:S.helper.htmlDecode(S.siteName)}:void 0}},showSelectedSite:{type:Boolean,default:!1},showAllSitesItem:{type:Boolean,default:!0},switchSiteOnSelect:{type:Boolean,default:!0},onlySitesWithAdminAccess:{type:Boolean,default:!1},name:{type:String,default:""},allSitesText:{type:String,default:C("General_MultiSitesSummary")},allSitesLocation:{type:String,default:"bottom"},placeholder:String},emits:["update:modelValue","blur"],components:{AllSitesLink:Di},directives:{FocusAnywhereButHere:Pt,FocusIf:Tt},watch:{searchTerm:function(){this.onSearchTermChanged()}},data:function(){return{searchTerm:"",activeSiteId:"".concat(S.idSite),showSitesList:!1,isLoading:!1,sites:[],autocompleteMinSites:parseInt(S.config.autocomplete_min_sites,10)}},created:function(){this.searchSite=Bi(this.searchSite)},mounted:function(){var e=this;window.initTopControls(),this.loadInitialSites().then((function(){e.modelValue&&e.modelValue.id||e.hasMultipleSites||!e.sites[0]||e.$emit("update:modelValue",{id:e.sites[0].idsite,name:e.sites[0].name})}));var t=C("CoreHome_ShortcutWebsiteSelector");S.helper.registerShortcut("w",t,(function(t){if(!t.altKey){t.preventDefault?t.preventDefault():t.returnValue=!1;var n=e.$refs.selectorLink;n&&(n.click(),n.focus())}}))},computed:{shouldFocusOnSearch:function(){return this.showSitesList&&this.autocompleteMinSites<=this.sites.length||this.searchTerm},selectorLinkTitle:function(){var e;return this.hasMultipleSites?C("CoreHome_ChangeCurrentWebsite",(null===(e=this.modelValue)||void 0===e?void 0:e.name)||this.firstSiteName):""},hasMultipleSites:function(){return xi.initialSites.value&&xi.initialSites.value.length>1},firstSiteName:function(){var e=xi.initialSites.value;return e&&e.length>0?e[0].name:""},urlAllSites:function(){var e=Ce.stringify(Object.assign(Object.assign({},Ce.urlParsed.value),{},{module:"MultiSites",action:"index",date:Ce.parsed.value.date,period:Ce.parsed.value.period}));return"?".concat(e)}},methods:{onSearchTermChanged:function(){this.searchTerm?(this.isLoading=!0,this.searchSite(this.searchTerm)):(this.isLoading=!1,this.loadInitialSites())},onAllSitesClick:function(e){this.switchSite({idsite:"all",name:this.$props.allSitesText},e),this.showSitesList=!1},switchSite:function(e,t){var n=-1!==navigator.userAgent.indexOf("Mac OS X")?t.metaKey:t.ctrlKey;t&&n&&t.target&&t.target.href?window.open(t.target.href,"_blank"):(this.$emit("update:modelValue",{id:e.idsite,name:e.name}),this.switchSiteOnSelect&&this.activeSiteId!==e.idsite&&xi.loadSite(e.idsite))},onBlur:function(){this.showSitesList=!1,this.$emit("blur")},onClickSelector:function(){this.hasMultipleSites&&(this.showSitesList=!this.showSitesList,this.isLoading||this.searchTerm||this.loadInitialSites())},onPressEnter:function(e){"Enter"===e.key&&(e.preventDefault(),this.showSitesList=!this.showSitesList,this.showSitesList&&!this.isLoading&&this.loadInitialSites())},getMatchedSiteName:function(e){var t=e.toUpperCase().indexOf(this.searchTerm.toUpperCase());if(-1===t||this.isLoading)return S.helper.htmlEntities(e);var n=S.helper.htmlEntities(e.substring(0,t)),r=S.helper.htmlEntities(e.substring(t+this.searchTerm.length));return"".concat(n,'<span class="autocompleteMatched">').concat(this.searchTerm,"</span>").concat(r)},loadInitialSites:function(){var e=this;return xi.loadInitialSites().then((function(t){e.sites=t||[]}))},searchSite:function(e){var t=this;this.isLoading=!0,xi.searchSite(e,this.onlySitesWithAdminAccess).then((function(n){e===t.searchTerm&&n&&(t.sites=n)})).finally((function(){t.isLoading=!1}))},getUrlForSiteId:function(e){var t=Ce.stringify(Object.assign(Object.assign({},Ce.urlParsed.value),{},{segment:"",idSite:e})),n=Ce.stringify(Object.assign(Object.assign({},Ce.hashParsed.value),{},{segment:"",idSite:e}));return"?".concat(t,"#?").concat(n)}}});Li.render=ki;var Mi=Li; + */var Ai=function(){function e(){var t=this;Pi(this,e),Ti(this,"state",Object(a["reactive"])({initialSites:[],isInitialized:!1})),Ti(this,"currentRequestAbort",null),Ti(this,"limitRequest",void 0),Ti(this,"initialSites",Object(a["computed"])((function(){return Object(a["readonly"])(t.state.initialSites)})))}return Ni(e,[{key:"loadInitialSites",value:function(){var e=this;return this.state.isInitialized?Promise.resolve(Object(a["readonly"])(this.state.initialSites)):this.searchSite("%").then((function(t){return e.state.isInitialized=!0,null!==t&&(e.state.initialSites=t),t}))}},{key:"loadSite",value:function(e){"all"===e?Ce.updateUrl(Object.assign(Object.assign({},Ce.urlParsed.value),{},{module:"MultiSites",action:"index",date:Ce.parsed.value.date,period:Ce.parsed.value.period})):Ce.updateUrl(Object.assign(Object.assign({},Ce.urlParsed.value),{},{segment:"",idSite:e}),Object.assign(Object.assign({},Ce.hashParsed.value),{},{segment:"",idSite:e}))}},{key:"searchSite",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return e?(this.currentRequestAbort&&this.currentRequestAbort.abort(),this.limitRequest||(this.limitRequest=Je.fetch({method:"SitesManager.getNumWebsitesToDisplayPerPage"})),this.limitRequest.then((function(r){var i=r.value,a="SitesManager.getPatternMatchSites";return n&&(a="SitesManager.getSitesWithAdminAccess"),t.currentRequestAbort=new AbortController,Je.fetch({method:a,limit:i,pattern:e},{abortController:t.currentRequestAbort})})).then((function(e){return e?t.processWebsitesList(e):null})).finally((function(){t.currentRequestAbort=null}))):this.loadInitialSites()}},{key:"processWebsitesList",value:function(e){var t=e;return t&&t.length?(t=t.map((function(e){return Object.assign(Object.assign({},e),{},{name:e.group?"[".concat(e.group,"] ").concat(e.name):e.name})})),t.sort((function(e,t){return e.name.toLowerCase()<t.name.toLowerCase()?-1:e.name.toLowerCase()>t.name.toLowerCase()?1:0})),t):[]}}]),e}(),xi=new Ai,Ii=300;function Bi(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Ii;return function(){for(var r=this,i=arguments.length,a=new Array(i),o=0;o<i;o++)a[o]=arguments[o];t&&clearTimeout(t),t=setTimeout((function(){e.call.apply(e,[r].concat(a))}),n)}}var Li=Object(a["defineComponent"])({props:{modelValue:{type:Object,default:function(e){return e.modelValue?e.modelValue:S.idSite?{id:S.idSite,name:S.helper.htmlDecode(S.siteName)}:void 0}},showSelectedSite:{type:Boolean,default:!1},showAllSitesItem:{type:Boolean,default:!0},switchSiteOnSelect:{type:Boolean,default:!0},onlySitesWithAdminAccess:{type:Boolean,default:!1},name:{type:String,default:""},allSitesText:{type:String,default:C("General_MultiSitesSummary")},allSitesLocation:{type:String,default:"bottom"},placeholder:String},emits:["update:modelValue","blur"],components:{AllSitesLink:Di},directives:{FocusAnywhereButHere:Pt,FocusIf:Tt},watch:{searchTerm:function(){this.onSearchTermChanged()}},data:function(){return{searchTerm:"",activeSiteId:"".concat(S.idSite),showSitesList:!1,isLoading:!1,sites:[],autocompleteMinSites:parseInt(S.config.autocomplete_min_sites,10)}},created:function(){this.searchSite=Bi(this.searchSite)},mounted:function(){var e=this;window.initTopControls(),this.loadInitialSites().then((function(){e.modelValue&&e.modelValue.id||e.hasMultipleSites||!e.sites[0]||e.$emit("update:modelValue",{id:e.sites[0].idsite,name:e.sites[0].name})}));var t=C("CoreHome_ShortcutWebsiteSelector");S.helper.registerShortcut("w",t,(function(t){if(!t.altKey){t.preventDefault?t.preventDefault():t.returnValue=!1;var n=e.$refs.selectorLink;n&&(n.click(),n.focus())}}))},computed:{shouldFocusOnSearch:function(){return this.showSitesList&&this.autocompleteMinSites<=this.sites.length||this.searchTerm},selectorLinkTitle:function(){var e;return this.hasMultipleSites?C("CoreHome_ChangeCurrentWebsite",(null===(e=this.modelValue)||void 0===e?void 0:e.name)||this.firstSiteName):""},hasMultipleSites:function(){return xi.initialSites.value&&xi.initialSites.value.length>1},firstSiteName:function(){var e=xi.initialSites.value;return e&&e.length>0?e[0].name:""},urlAllSites:function(){var e=Ce.stringify(Object.assign(Object.assign({},Ce.urlParsed.value),{},{module:"MultiSites",action:"index",date:Ce.parsed.value.date,period:Ce.parsed.value.period}));return"?".concat(e)}},methods:{onSearchTermChanged:function(){this.searchTerm?(this.isLoading=!0,this.searchSite(this.searchTerm)):(this.isLoading=!1,this.loadInitialSites())},onAllSitesClick:function(e){this.switchSite({id:"all",name:this.$props.allSitesText},e),this.showSitesList=!1},switchSite:function(e,t){var n=-1!==navigator.userAgent.indexOf("Mac OS X")?t.metaKey:t.ctrlKey;t&&n&&t.target&&t.target.href?window.open(t.target.href,"_blank"):(this.$emit("update:modelValue",{id:e.id,name:e.name}),this.switchSiteOnSelect&&this.activeSiteId!==e.id&&xi.loadSite(e.id))},onBlur:function(){this.showSitesList=!1,this.$emit("blur")},onClickSelector:function(){this.hasMultipleSites&&(this.showSitesList=!this.showSitesList,this.isLoading||this.searchTerm||this.loadInitialSites())},onPressEnter:function(e){"Enter"===e.key&&(e.preventDefault(),this.showSitesList=!this.showSitesList,this.showSitesList&&!this.isLoading&&this.loadInitialSites())},getMatchedSiteName:function(e){var t=e.toUpperCase().indexOf(this.searchTerm.toUpperCase());if(-1===t||this.isLoading)return S.helper.htmlEntities(e);var n=S.helper.htmlEntities(e.substring(0,t)),r=S.helper.htmlEntities(e.substring(t+this.searchTerm.length));return"".concat(n,'<span class="autocompleteMatched">').concat(this.searchTerm,"</span>").concat(r)},loadInitialSites:function(){var e=this;return xi.loadInitialSites().then((function(t){e.sites=t||[]}))},searchSite:function(e){var t=this;this.isLoading=!0,xi.searchSite(e,this.onlySitesWithAdminAccess).then((function(n){e===t.searchTerm&&n&&(t.sites=n)})).finally((function(){t.isLoading=!1}))},getUrlForSiteId:function(e){var t=Ce.stringify(Object.assign(Object.assign({},Ce.urlParsed.value),{},{segment:"",idSite:e})),n=Ce.stringify(Object.assign(Object.assign({},Ce.hashParsed.value),{},{segment:"",idSite:e}));return"?".concat(t,"#?").concat(n)}}});Li.render=ki;var Mi=Li; /*! * Matomo - free/libre analytics platform * diff --git a/plugins/CoreHome/vue/src/SiteSelector/Site.ts b/plugins/CoreHome/vue/src/SiteSelector/Site.ts index dbe384c29d..aa67a90c24 100644 --- a/plugins/CoreHome/vue/src/SiteSelector/Site.ts +++ b/plugins/CoreHome/vue/src/SiteSelector/Site.ts @@ -8,8 +8,16 @@ interface Site { idsite: string; name: string; + type: string; group?: string; + timezone: string; currency?: string; + timezone_name: string; + currency_name?: string; + alias_urls: string[]; + excluded_ips: string; + excluded_parameters: string; + excluded_user_agents: string; } export default Site; diff --git a/plugins/CoreHome/vue/src/SiteSelector/SiteSelector.vue b/plugins/CoreHome/vue/src/SiteSelector/SiteSelector.vue index 603a8ba5ca..f05d59a7b0 100644 --- a/plugins/CoreHome/vue/src/SiteSelector/SiteSelector.vue +++ b/plugins/CoreHome/vue/src/SiteSelector/SiteSelector.vue @@ -79,7 +79,7 @@ @click="showSitesList = false" > <li - @click="switchSite(site, $event)" + @click="switchSite({ ...site, id: site.idsite }, $event)" v-show="!(!showSelectedSite && activeSiteId === site.idsite)" v-for="(site, index) in sites" :key="index" @@ -278,10 +278,10 @@ export default defineComponent({ } }, onAllSitesClick(event: MouseEvent) { - this.switchSite({ idsite: 'all', name: this.$props.allSitesText }, event); + this.switchSite({ id: 'all', name: this.$props.allSitesText }, event); this.showSitesList = false; }, - switchSite(site: Site, event: KeyboardEvent|MouseEvent) { + switchSite(site: SiteRef, event: KeyboardEvent|MouseEvent) { // for Mac OS cmd key needs to be pressed, ctrl key on other systems const controlKey = navigator.userAgent.indexOf('Mac OS X') !== -1 ? event.metaKey : event.ctrlKey; @@ -290,13 +290,13 @@ export default defineComponent({ return; } - this.$emit('update:modelValue', { id: site.idsite, name: site.name }); + this.$emit('update:modelValue', { id: site.id, name: site.name }); - if (!this.switchSiteOnSelect || this.activeSiteId === site.idsite) { + if (!this.switchSiteOnSelect || this.activeSiteId === site.id) { return; } - SitesStore.loadSite(site.idsite); + SitesStore.loadSite(site.id); }, onBlur() { this.showSitesList = false; diff --git a/plugins/CorePluginsAdmin/vue/dist/CorePluginsAdmin.umd.js b/plugins/CorePluginsAdmin/vue/dist/CorePluginsAdmin.umd.js index e1dc60e54a..3a16347077 100644 --- a/plugins/CorePluginsAdmin/vue/dist/CorePluginsAdmin.umd.js +++ b/plugins/CorePluginsAdmin/vue/dist/CorePluginsAdmin.umd.js @@ -2483,29 +2483,29 @@ function handleJsonValue(value, varType, uiControl) { } } })); -// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/PluginSettings/PluginSettings.vue?vue&type=template&id=79754e8b +// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/PluginSettings/PluginSettings.vue?vue&type=template&id=a4ce6500 -var PluginSettingsvue_type_template_id_79754e8b_hoisted_1 = { +var PluginSettingsvue_type_template_id_a4ce6500_hoisted_1 = { class: "pluginSettings", ref: "root" }; -var PluginSettingsvue_type_template_id_79754e8b_hoisted_2 = ["id"]; -var PluginSettingsvue_type_template_id_79754e8b_hoisted_3 = { +var PluginSettingsvue_type_template_id_a4ce6500_hoisted_2 = ["id"]; +var PluginSettingsvue_type_template_id_a4ce6500_hoisted_3 = { class: "card-content" }; -var PluginSettingsvue_type_template_id_79754e8b_hoisted_4 = ["id"]; -var PluginSettingsvue_type_template_id_79754e8b_hoisted_5 = ["onClick", "disabled", "value"]; -var PluginSettingsvue_type_template_id_79754e8b_hoisted_6 = { +var PluginSettingsvue_type_template_id_a4ce6500_hoisted_4 = ["id"]; +var PluginSettingsvue_type_template_id_a4ce6500_hoisted_5 = ["onClick", "disabled", "value"]; +var PluginSettingsvue_type_template_id_a4ce6500_hoisted_6 = { class: "confirm-password-modal modal" }; -var PluginSettingsvue_type_template_id_79754e8b_hoisted_7 = { +var PluginSettingsvue_type_template_id_a4ce6500_hoisted_7 = { class: "modal-content" }; -var PluginSettingsvue_type_template_id_79754e8b_hoisted_8 = { +var PluginSettingsvue_type_template_id_a4ce6500_hoisted_8 = { class: "modal-footer" }; -var PluginSettingsvue_type_template_id_79754e8b_hoisted_9 = ["disabled"]; -function PluginSettingsvue_type_template_id_79754e8b_render(_ctx, _cache, $props, $setup, $data, $options) { +var PluginSettingsvue_type_template_id_a4ce6500_hoisted_9 = ["disabled"]; +function PluginSettingsvue_type_template_id_a4ce6500_render(_ctx, _cache, $props, $setup, $data, $options) { var _this = this; var _component_GroupedSettings = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("GroupedSettings"); @@ -2514,15 +2514,15 @@ function PluginSettingsvue_type_template_id_79754e8b_render(_ctx, _cache, $props var _component_Field = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("Field"); - return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", PluginSettingsvue_type_template_id_79754e8b_hoisted_1, [(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Fragment"], null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["renderList"])(_ctx.settingsPerPlugin, function (settings) { + return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", PluginSettingsvue_type_template_id_a4ce6500_hoisted_1, [(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Fragment"], null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["renderList"])(_ctx.settingsPerPlugin, function (settings) { return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", { class: "card", id: "".concat(settings.pluginName, "PluginSettings"), key: "".concat(settings.pluginName, "PluginSettings") - }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PluginSettingsvue_type_template_id_79754e8b_hoisted_3, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h2", { + }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PluginSettingsvue_type_template_id_a4ce6500_hoisted_3, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h2", { class: "card-title", id: settings.pluginName - }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(settings.title), 9, PluginSettingsvue_type_template_id_79754e8b_hoisted_4), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_GroupedSettings, { + }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(settings.title), 9, PluginSettingsvue_type_template_id_a4ce6500_hoisted_4), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_GroupedSettings, { "group-name": settings.pluginName, settings: settings.settings, "all-setting-values": _ctx.settingValues, @@ -2537,10 +2537,10 @@ function PluginSettingsvue_type_template_id_79754e8b_render(_ctx, _cache, $props disabled: _ctx.isLoading, class: "pluginsSettingsSubmit btn", value: _ctx.translate('General_Save') - }, null, 8, PluginSettingsvue_type_template_id_79754e8b_hoisted_5), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_ActivityIndicator, { + }, null, 8, PluginSettingsvue_type_template_id_a4ce6500_hoisted_5), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_ActivityIndicator, { loading: _ctx.isLoading || _ctx.isSaving[settings.pluginName] - }, null, 8, ["loading"])])], 8, PluginSettingsvue_type_template_id_79754e8b_hoisted_2); - }), 128)), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PluginSettingsvue_type_template_id_79754e8b_hoisted_6, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PluginSettingsvue_type_template_id_79754e8b_hoisted_7, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h2", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_ConfirmWithPassword')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { + }, null, 8, ["loading"])])], 8, PluginSettingsvue_type_template_id_a4ce6500_hoisted_2); + }), 128)), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PluginSettingsvue_type_template_id_a4ce6500_hoisted_6, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PluginSettingsvue_type_template_id_a4ce6500_hoisted_7, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h2", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('UsersManager_ConfirmWithPassword')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { modelValue: _ctx.passwordConfirmation, "onUpdate:modelValue": _cache[0] || (_cache[0] = function ($event) { return _ctx.passwordConfirmation = $event; @@ -2550,7 +2550,7 @@ function PluginSettingsvue_type_template_id_79754e8b_render(_ctx, _cache, $props autocomplete: false, "full-width": true, title: _ctx.translate('UsersManager_YourCurrentPassword') - }, null, 8, ["modelValue", "title"])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PluginSettingsvue_type_template_id_79754e8b_hoisted_8, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { + }, null, 8, ["modelValue", "title"])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", PluginSettingsvue_type_template_id_a4ce6500_hoisted_8, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { href: "", class: "modal-action modal-close btn", disabled: !_ctx.passwordConfirmation ? 'disabled' : undefined, @@ -2559,7 +2559,7 @@ function PluginSettingsvue_type_template_id_79754e8b_render(_ctx, _cache, $props _ctx.save(_this.settingsToSave); }) - }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Yes')), 9, PluginSettingsvue_type_template_id_79754e8b_hoisted_9), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { + }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Yes')), 9, PluginSettingsvue_type_template_id_a4ce6500_hoisted_9), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { href: "", class: "modal-action modal-close modal-no", onClick: _cache[2] || (_cache[2] = function ($event) { @@ -2567,7 +2567,7 @@ function PluginSettingsvue_type_template_id_79754e8b_render(_ctx, _cache, $props }) }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_No')), 1)])])], 512); } -// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/PluginSettings/PluginSettings.vue?vue&type=template&id=79754e8b +// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/PluginSettings/PluginSettings.vue?vue&type=template&id=a4ce6500 // CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/GroupedSettings/GroupedSettings.vue?vue&type=template&id=063fbf22 @@ -2592,9 +2592,9 @@ function GroupedSettingsvue_type_template_id_063fbf22_render(_ctx, _cache, $prop } // CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/GroupedSettings/GroupedSettings.vue?vue&type=template&id=063fbf22 -// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/GroupedSettings/GroupedSetting.vue?vue&type=template&id=916027be +// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/GroupedSettings/GroupedSetting.vue?vue&type=template&id=17c12cc8 -function GroupedSettingvue_type_template_id_916027be_render(_ctx, _cache, $props, $setup, $data, $options) { +function GroupedSettingvue_type_template_id_17c12cc8_render(_ctx, _cache, $props, $setup, $data, $options) { var _component_FormField = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("FormField"); return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])((Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_FormField, { @@ -2602,14 +2602,15 @@ function GroupedSettingvue_type_template_id_916027be_render(_ctx, _cache, $props "onUpdate:modelValue": _cache[0] || (_cache[0] = function ($event) { return _ctx.changeValue($event); }), - "form-field": _ctx.setting + "form-field": _ctx.settingWithComponent }, null, 8, ["model-value", "form-field"])], 512)), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.showField]]); } -// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/GroupedSettings/GroupedSetting.vue?vue&type=template&id=916027be +// CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/GroupedSettings/GroupedSetting.vue?vue&type=template&id=17c12cc8 // CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-2!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/GroupedSettings/GroupedSetting.vue?vue&type=script&lang=ts + // TODO: have to use angularjs here until there's an expression evaluating alternative var conditionScope; @@ -2630,6 +2631,16 @@ var conditionScope; }, emits: ['update:modelValue'], computed: { + // bc for angularjs field that uses templateFile + settingWithComponent: function settingWithComponent() { + if (this.setting.templateFile) { + return Object.assign(Object.assign({}, this.setting), {}, { + component: FieldAngularJsTemplate + }); + } + + return this.setting; + }, showField: function showField() { var condition = this.setting.condition; @@ -2657,7 +2668,7 @@ var conditionScope; -GroupedSettingvue_type_script_lang_ts.render = GroupedSettingvue_type_template_id_916027be_render +GroupedSettingvue_type_script_lang_ts.render = GroupedSettingvue_type_template_id_17c12cc8_render /* harmony default export */ var GroupedSetting = (GroupedSettingvue_type_script_lang_ts); // CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-2!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/CorePluginsAdmin/vue/src/GroupedSettings/GroupedSettings.vue?vue&type=script&lang=ts @@ -2927,7 +2938,7 @@ var _window = window, -PluginSettingsvue_type_script_lang_ts.render = PluginSettingsvue_type_template_id_79754e8b_render +PluginSettingsvue_type_script_lang_ts.render = PluginSettingsvue_type_template_id_a4ce6500_render /* harmony default export */ var PluginSettings = (PluginSettingsvue_type_script_lang_ts); // CONCATENATED MODULE: ./plugins/CorePluginsAdmin/vue/src/PluginSettings/PluginSettings.adapter.ts diff --git a/plugins/CorePluginsAdmin/vue/dist/CorePluginsAdmin.umd.min.js b/plugins/CorePluginsAdmin/vue/dist/CorePluginsAdmin.umd.min.js index 16dc26171d..45319f5778 100644 --- a/plugins/CorePluginsAdmin/vue/dist/CorePluginsAdmin.umd.min.js +++ b/plugins/CorePluginsAdmin/vue/dist/CorePluginsAdmin.umd.min.js @@ -16,7 +16,7 @@ * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */function Xt(e,t,n){if("string"===typeof e&&e&&("array"===t||"multituple"===n||"field-array"===n||"multiselect"===n||"site"===n)){var o=JSON.parse(e);return"site"===n&&(o.name=i["Matomo"].helper.htmlDecode(o.name)),o}return"checkbox"===n&&"array"!==t?Object(i["transformAngularJsBoolAttr"])(e):e}Object(i["createAngularJsAdapter"])({component:Qt,require:"?ngModel",scope:{uicontrol:{angularJsBind:"@"},name:{angularJsBind:"@"},value:{vue:"modelValue",angularJsBind:"@",transform:function(e,t,n){return Xt(e,n.varType,n.uicontrol)}},default:{vue:"defaultValue",angularJsBind:"@"},options:{angularJsBind:"="},description:{angularJsBind:"@"},introduction:{angularJsBind:"@"},title:{angularJsBind:"@"},inlineHelp:{angularJsBind:"@"},disabled:{angularJsBind:"=",transform:i["transformAngularJsBoolAttr"]},uiControlAttributes:{angularJsBind:"="},uiControlOptions:{angularJsBind:"="},autocomplete:{angularJsBind:"@",transform:i["transformAngularJsBoolAttr"]},condition:{angularJsBind:"@",transform:function(e,t,n){if(e)return function(t){return n.$eval(e,t)}}},varType:{angularJsBind:"@"},autofocus:{angularJsBind:"@",transform:i["transformAngularJsBoolAttr"]},tabindex:{angularJsBind:"@",transform:i["transformAngularJsIntAttr"]},fullWidth:{angularJsBind:"@",transform:i["transformAngularJsBoolAttr"]},maxlength:{angularJsBind:"@",transform:i["transformAngularJsIntAttr"]},required:{angularJsBind:"@",transform:i["transformAngularJsBoolAttr"]},placeholder:{angularJsBind:"@"},rows:{angularJsBind:"@",transform:i["transformAngularJsIntAttr"]},min:{angularJsBind:"@",transform:i["transformAngularJsIntAttr"]},max:{angularJsBind:"@",transform:i["transformAngularJsIntAttr"]},component:{angularJsBind:"<",transform:function(e,t,n){if(e){if(n.templateFile)return Object(l["shallowRef"])(qt);var o=e.plugin,r=e.name;if(!o||!r)throw new Error("Invalid component property given to piwik-field directive, must be {plugin: '...',name: '...'}");return Object(l["shallowRef"])(Object(i["useExternalPluginComponent"])(o,r))}}}},directiveName:"piwikField",$inject:["$timeout"],events:{"update:modelValue":function(e,t,n,o,r,i,l){var a=i?i.$viewValue:n.value;e!==a&&l((function(){i?(i.$setViewValue(e),i.$render()):n.value=e}))}},postCreate:function(e,t,n,o,r){var a=r;if(a){if(a.$render=function(){Object(l["nextTick"])((function(){e.modelValue=Object(i["removeAngularJsSpecificProperties"])(a.$viewValue)}))},"undefined"!==typeof t.value){var u=Xt(t.value,t.varType,t.uicontrol);a.$setViewValue(u)}else a.$setViewValue(e.modelValue);"site"===t.uicontrol&&a.$viewValue&&setTimeout((function(){a.$setViewValue(Object.assign({},a.$viewValue))}))}else t.$watch("value",(function(n){if(n!==e.modelValue){var o=Xt(n,t.varType,t.uicontrol);Object(l["nextTick"])((function(){e.modelValue=o}))}}))}});var en,tn={class:"pluginSettings",ref:"root"},nn=["id"],on={class:"card-content"},rn=["id"],ln=["onClick","disabled","value"],an={class:"confirm-password-modal modal"},un={class:"modal-content"},cn={class:"modal-footer"},sn=["disabled"];function dn(e,t,n,o,r,i){var a=this,u=Object(l["resolveComponent"])("GroupedSettings"),c=Object(l["resolveComponent"])("ActivityIndicator"),s=Object(l["resolveComponent"])("Field");return Object(l["openBlock"])(),Object(l["createElementBlock"])("div",tn,[(Object(l["openBlock"])(!0),Object(l["createElementBlock"])(l["Fragment"],null,Object(l["renderList"])(e.settingsPerPlugin,(function(t){return Object(l["openBlock"])(),Object(l["createElementBlock"])("div",{class:"card",id:"".concat(t.pluginName,"PluginSettings"),key:"".concat(t.pluginName,"PluginSettings")},[Object(l["createElementVNode"])("div",on,[Object(l["createElementVNode"])("h2",{class:"card-title",id:t.pluginName},Object(l["toDisplayString"])(t.title),9,rn),Object(l["createVNode"])(u,{"group-name":t.pluginName,settings:t.settings,"all-setting-values":e.settingValues,onChange:function(n){return e.settingValues["".concat(t.pluginName,".").concat(n.name)]=n.value}},null,8,["group-name","settings","all-setting-values","onChange"]),Object(l["createElementVNode"])("input",{type:"button",onClick:function(n){return e.saveSetting(t.pluginName)},disabled:e.isLoading,class:"pluginsSettingsSubmit btn",value:e.translate("General_Save")},null,8,ln),Object(l["createVNode"])(c,{loading:e.isLoading||e.isSaving[t.pluginName]},null,8,["loading"])])],8,nn)})),128)),Object(l["createElementVNode"])("div",an,[Object(l["createElementVNode"])("div",un,[Object(l["createElementVNode"])("h2",null,Object(l["toDisplayString"])(e.translate("UsersManager_ConfirmWithPassword")),1),Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(s,{modelValue:e.passwordConfirmation,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.passwordConfirmation=t}),uicontrol:"password",name:"currentUserPassword",autocomplete:!1,"full-width":!0,title:e.translate("UsersManager_YourCurrentPassword")},null,8,["modelValue","title"])])]),Object(l["createElementVNode"])("div",cn,[Object(l["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",disabled:e.passwordConfirmation?void 0:"disabled",onClick:t[1]||(t[1]=function(t){t.preventDefault(),e.save(a.settingsToSave)})},Object(l["toDisplayString"])(e.translate("General_Yes")),9,sn),Object(l["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[2]||(t[2]=function(e){return e.preventDefault()})},Object(l["toDisplayString"])(e.translate("General_No")),1)])])],512)}function mn(e,t,n,o,r,i){var a=Object(l["resolveComponent"])("GroupedSetting");return Object(l["openBlock"])(!0),Object(l["createElementBlock"])(l["Fragment"],null,Object(l["renderList"])(e.settings,(function(t){return Object(l["openBlock"])(),Object(l["createElementBlock"])("div",{key:"".concat(e.groupName,".").concat(t.name)},[Object(l["createVNode"])(a,{"model-value":e.allSettingValues["".concat(e.groupName,".").concat(t.name)],"onUpdate:modelValue":function(n){return e.$emit("change",{name:t.name,value:n})},setting:t,"condition-values":e.settingValues},null,8,["model-value","onUpdate:modelValue","setting","condition-values"])])})),128)}function fn(e,t,n,o,r,i){var a=Object(l["resolveComponent"])("FormField");return Object(l["withDirectives"])((Object(l["openBlock"])(),Object(l["createElementBlock"])("div",null,[Object(l["createVNode"])(a,{"model-value":e.modelValue,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.changeValue(t)}),"form-field":e.setting},null,8,["model-value","form-field"])],512)),[[l["vShow"],e.showField]])}var pn=Object(l["defineComponent"])({props:{setting:{type:Object,required:!0},modelValue:null,conditionValues:{type:Object,required:!0}},components:{FormField:It},emits:["update:modelValue"],computed:{showField:function(){var e=this.setting.condition;if(!e)return!0;if(!en){var t=i["Matomo"].helper.getAngularDependency("$rootScope");en=t.$new(!0)}return en.$eval(e,this.conditionValues)}},methods:{changeValue:function(e){this.$emit("update:modelValue",e)}}});pn.render=fn;var bn=pn;function vn(e,t){return jn(e)||yn(e,t)||gn(e,t)||hn()}function hn(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function gn(e,t){if(e){if("string"===typeof e)return On(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?On(e,t):void 0}}function On(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}function yn(e,t){var n=null==e?null:"undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var o,r,i=[],l=!0,a=!1;try{for(n=n.call(e);!(l=(o=n.next()).done);l=!0)if(i.push(o.value),t&&i.length===t)break}catch(u){a=!0,r=u}finally{try{l||null==n["return"]||n["return"]()}finally{if(a)throw r}}return i}}function jn(e){if(Array.isArray(e))return e}var Vn=Object(l["defineComponent"])({props:{groupName:String,settings:{type:Array,required:!0},allSettingValues:{type:Object,required:!0}},emits:["change"],components:{GroupedSetting:bn},computed:{settingValues:function(){var e=this,t=Object.entries(this.allSettingValues).filter((function(t){var n=vn(t,1),o=n[0];if(e.groupName){var r=o.split("."),i=vn(r,1),l=i[0];if(l!==e.groupName)return!1}return!0})).map((function(t){var n=vn(t,2),o=n[0],r=n[1];return e.groupName?[o.split(".")[1],r]:[o,r]}));return Object.fromEntries(t)}}});Vn.render=mn;var wn=Vn;function Cn(e,t){return Bn(e)||Fn(e,t)||kn(e,t)||Sn()}function Sn(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function kn(e,t){if(e){if("string"===typeof e)return An(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?An(e,t):void 0}}function An(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}function Fn(e,t){var n=null==e?null:"undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var o,r,i=[],l=!0,a=!1;try{for(n=n.call(e);!(l=(o=n.next()).done);l=!0)if(i.push(o.value),t&&i.length===t)break}catch(u){a=!0,r=u}finally{try{l||null==n["return"]||n["return"]()}finally{if(a)throw r}}return i}}function Bn(e){if(Array.isArray(e))return e}var En=window,xn=En.$,Nn=Object(l["defineComponent"])({props:{mode:String},components:{ActivityIndicator:i["ActivityIndicator"],Field:Qt,GroupedSettings:wn},data:function(){return{isLoading:!0,isSaving:{},passwordConfirmation:"",settingsToSave:null,settingsPerPlugin:[],settingValues:{}}},created:function(){var e=this;i["AjaxHelper"].fetch({method:this.apiMethod}).then((function(t){e.isLoading=!1,e.settingsPerPlugin=t,t.forEach((function(t){t.settings.forEach((function(n){e.settingValues["".concat(t.pluginName,".").concat(n.name)]=n.value}))})),window.anchorLinkFix.scrollToAnchorInUrl(),e.addSectionsToTableOfContents()})).catch((function(){e.isLoading=!1}))},computed:{apiMethod:function(){return"admin"===this.mode?"CorePluginsAdmin.getSystemSettings":"CorePluginsAdmin.getUserSettings"},saveApiMethod:function(){return"admin"===this.mode?"CorePluginsAdmin.setSystemSettings":"CorePluginsAdmin.setUserSettings"}},methods:{addSectionsToTableOfContents:function(){var e=xn("#generalSettingsTOC");if(e.length){var t=this.settingsPerPlugin;t.forEach((function(t){var n=t.pluginName,o=t.settings;n&&("CoreAdminHome"===n&&o?o.filter((function(e){return e.introduction})).forEach((function(t){e.append('<a href="#/'.concat(n,'PluginSettings">').concat(t.introduction,"</a> "))})):e.append('<a href="#/'.concat(n,'">').concat(n.replace(/([A-Z])/g," $1").trim(),"</a> ")))}))}},saveSetting:function(e){"admin"===this.mode?this.showPasswordConfirmModal(e):this.save(e)},showPasswordConfirmModal:function(e){var t=this;this.settingsToSave=e;var n=this.$refs.root,o=xn(n),r=function(n){var r=n.keyCode?n.keyCode:n.which;13===r&&(o.find(".confirm-password-modal").modal("close"),t.save(e))};o.find(".confirm-password-modal").modal({dismissible:!1,onOpenEnd:function(){var e=".modal.open #currentUserPassword";xn(e).focus(),xn(e).off("keypress").keypress(r)}}).modal("open")},save:function(e){var t=this,n=this.saveApiMethod;this.isSaving[e]=!0;var o=this.getValuesForPlugin(e);i["AjaxHelper"].post({method:n},{settingValues:o,passwordConfirmation:this.passwordConfirmation}).then((function(){t.isSaving[e]=!1;var n=i["NotificationsStore"].show({message:Object(i["translate"])("CoreAdminHome_PluginSettingsSaveSuccess"),id:"generalSettings",context:"success",type:"transient"});i["NotificationsStore"].scrollToNotification(n)})).catch((function(){t.isSaving[e]=!1})),this.passwordConfirmation="",this.settingsToSave=null},getValuesForPlugin:function(e){var t={};return t[e]||(t[e]=[]),Object.entries(this.settingValues).forEach((function(n){var o=Cn(n,2),r=o[0],i=o[1],l=r.split("."),a=Cn(l,2),u=a[0],c=a[1];if(u===e){var s=i;!1===s?s="0":!0===s&&(s="1"),t[u].push({name:c,value:s})}})),t}}});Nn.render=dn;var Tn=Nn,$n=(Object(i["createAngularJsAdapter"])({component:Tn,scope:{mode:{angularJsBind:"@"}},directiveName:"piwikPluginSettings"}),window),Mn=$n.$; + */function Xt(e,t,n){if("string"===typeof e&&e&&("array"===t||"multituple"===n||"field-array"===n||"multiselect"===n||"site"===n)){var o=JSON.parse(e);return"site"===n&&(o.name=i["Matomo"].helper.htmlDecode(o.name)),o}return"checkbox"===n&&"array"!==t?Object(i["transformAngularJsBoolAttr"])(e):e}Object(i["createAngularJsAdapter"])({component:Qt,require:"?ngModel",scope:{uicontrol:{angularJsBind:"@"},name:{angularJsBind:"@"},value:{vue:"modelValue",angularJsBind:"@",transform:function(e,t,n){return Xt(e,n.varType,n.uicontrol)}},default:{vue:"defaultValue",angularJsBind:"@"},options:{angularJsBind:"="},description:{angularJsBind:"@"},introduction:{angularJsBind:"@"},title:{angularJsBind:"@"},inlineHelp:{angularJsBind:"@"},disabled:{angularJsBind:"=",transform:i["transformAngularJsBoolAttr"]},uiControlAttributes:{angularJsBind:"="},uiControlOptions:{angularJsBind:"="},autocomplete:{angularJsBind:"@",transform:i["transformAngularJsBoolAttr"]},condition:{angularJsBind:"@",transform:function(e,t,n){if(e)return function(t){return n.$eval(e,t)}}},varType:{angularJsBind:"@"},autofocus:{angularJsBind:"@",transform:i["transformAngularJsBoolAttr"]},tabindex:{angularJsBind:"@",transform:i["transformAngularJsIntAttr"]},fullWidth:{angularJsBind:"@",transform:i["transformAngularJsBoolAttr"]},maxlength:{angularJsBind:"@",transform:i["transformAngularJsIntAttr"]},required:{angularJsBind:"@",transform:i["transformAngularJsBoolAttr"]},placeholder:{angularJsBind:"@"},rows:{angularJsBind:"@",transform:i["transformAngularJsIntAttr"]},min:{angularJsBind:"@",transform:i["transformAngularJsIntAttr"]},max:{angularJsBind:"@",transform:i["transformAngularJsIntAttr"]},component:{angularJsBind:"<",transform:function(e,t,n){if(e){if(n.templateFile)return Object(l["shallowRef"])(qt);var o=e.plugin,r=e.name;if(!o||!r)throw new Error("Invalid component property given to piwik-field directive, must be {plugin: '...',name: '...'}");return Object(l["shallowRef"])(Object(i["useExternalPluginComponent"])(o,r))}}}},directiveName:"piwikField",$inject:["$timeout"],events:{"update:modelValue":function(e,t,n,o,r,i,l){var a=i?i.$viewValue:n.value;e!==a&&l((function(){i?(i.$setViewValue(e),i.$render()):n.value=e}))}},postCreate:function(e,t,n,o,r){var a=r;if(a){if(a.$render=function(){Object(l["nextTick"])((function(){e.modelValue=Object(i["removeAngularJsSpecificProperties"])(a.$viewValue)}))},"undefined"!==typeof t.value){var u=Xt(t.value,t.varType,t.uicontrol);a.$setViewValue(u)}else a.$setViewValue(e.modelValue);"site"===t.uicontrol&&a.$viewValue&&setTimeout((function(){a.$setViewValue(Object.assign({},a.$viewValue))}))}else t.$watch("value",(function(n){if(n!==e.modelValue){var o=Xt(n,t.varType,t.uicontrol);Object(l["nextTick"])((function(){e.modelValue=o}))}}))}});var en,tn={class:"pluginSettings",ref:"root"},nn=["id"],on={class:"card-content"},rn=["id"],ln=["onClick","disabled","value"],an={class:"confirm-password-modal modal"},un={class:"modal-content"},cn={class:"modal-footer"},sn=["disabled"];function dn(e,t,n,o,r,i){var a=this,u=Object(l["resolveComponent"])("GroupedSettings"),c=Object(l["resolveComponent"])("ActivityIndicator"),s=Object(l["resolveComponent"])("Field");return Object(l["openBlock"])(),Object(l["createElementBlock"])("div",tn,[(Object(l["openBlock"])(!0),Object(l["createElementBlock"])(l["Fragment"],null,Object(l["renderList"])(e.settingsPerPlugin,(function(t){return Object(l["openBlock"])(),Object(l["createElementBlock"])("div",{class:"card",id:"".concat(t.pluginName,"PluginSettings"),key:"".concat(t.pluginName,"PluginSettings")},[Object(l["createElementVNode"])("div",on,[Object(l["createElementVNode"])("h2",{class:"card-title",id:t.pluginName},Object(l["toDisplayString"])(t.title),9,rn),Object(l["createVNode"])(u,{"group-name":t.pluginName,settings:t.settings,"all-setting-values":e.settingValues,onChange:function(n){return e.settingValues["".concat(t.pluginName,".").concat(n.name)]=n.value}},null,8,["group-name","settings","all-setting-values","onChange"]),Object(l["createElementVNode"])("input",{type:"button",onClick:function(n){return e.saveSetting(t.pluginName)},disabled:e.isLoading,class:"pluginsSettingsSubmit btn",value:e.translate("General_Save")},null,8,ln),Object(l["createVNode"])(c,{loading:e.isLoading||e.isSaving[t.pluginName]},null,8,["loading"])])],8,nn)})),128)),Object(l["createElementVNode"])("div",an,[Object(l["createElementVNode"])("div",un,[Object(l["createElementVNode"])("h2",null,Object(l["toDisplayString"])(e.translate("UsersManager_ConfirmWithPassword")),1),Object(l["createElementVNode"])("div",null,[Object(l["createVNode"])(s,{modelValue:e.passwordConfirmation,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.passwordConfirmation=t}),uicontrol:"password",name:"currentUserPassword",autocomplete:!1,"full-width":!0,title:e.translate("UsersManager_YourCurrentPassword")},null,8,["modelValue","title"])])]),Object(l["createElementVNode"])("div",cn,[Object(l["createElementVNode"])("a",{href:"",class:"modal-action modal-close btn",disabled:e.passwordConfirmation?void 0:"disabled",onClick:t[1]||(t[1]=function(t){t.preventDefault(),e.save(a.settingsToSave)})},Object(l["toDisplayString"])(e.translate("General_Yes")),9,sn),Object(l["createElementVNode"])("a",{href:"",class:"modal-action modal-close modal-no",onClick:t[2]||(t[2]=function(e){return e.preventDefault()})},Object(l["toDisplayString"])(e.translate("General_No")),1)])])],512)}function mn(e,t,n,o,r,i){var a=Object(l["resolveComponent"])("GroupedSetting");return Object(l["openBlock"])(!0),Object(l["createElementBlock"])(l["Fragment"],null,Object(l["renderList"])(e.settings,(function(t){return Object(l["openBlock"])(),Object(l["createElementBlock"])("div",{key:"".concat(e.groupName,".").concat(t.name)},[Object(l["createVNode"])(a,{"model-value":e.allSettingValues["".concat(e.groupName,".").concat(t.name)],"onUpdate:modelValue":function(n){return e.$emit("change",{name:t.name,value:n})},setting:t,"condition-values":e.settingValues},null,8,["model-value","onUpdate:modelValue","setting","condition-values"])])})),128)}function fn(e,t,n,o,r,i){var a=Object(l["resolveComponent"])("FormField");return Object(l["withDirectives"])((Object(l["openBlock"])(),Object(l["createElementBlock"])("div",null,[Object(l["createVNode"])(a,{"model-value":e.modelValue,"onUpdate:modelValue":t[0]||(t[0]=function(t){return e.changeValue(t)}),"form-field":e.settingWithComponent},null,8,["model-value","form-field"])],512)),[[l["vShow"],e.showField]])}var pn=Object(l["defineComponent"])({props:{setting:{type:Object,required:!0},modelValue:null,conditionValues:{type:Object,required:!0}},components:{FormField:It},emits:["update:modelValue"],computed:{settingWithComponent:function(){return this.setting.templateFile?Object.assign(Object.assign({},this.setting),{},{component:qt}):this.setting},showField:function(){var e=this.setting.condition;if(!e)return!0;if(!en){var t=i["Matomo"].helper.getAngularDependency("$rootScope");en=t.$new(!0)}return en.$eval(e,this.conditionValues)}},methods:{changeValue:function(e){this.$emit("update:modelValue",e)}}});pn.render=fn;var bn=pn;function vn(e,t){return jn(e)||yn(e,t)||gn(e,t)||hn()}function hn(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function gn(e,t){if(e){if("string"===typeof e)return On(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?On(e,t):void 0}}function On(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}function yn(e,t){var n=null==e?null:"undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var o,r,i=[],l=!0,a=!1;try{for(n=n.call(e);!(l=(o=n.next()).done);l=!0)if(i.push(o.value),t&&i.length===t)break}catch(u){a=!0,r=u}finally{try{l||null==n["return"]||n["return"]()}finally{if(a)throw r}}return i}}function jn(e){if(Array.isArray(e))return e}var Vn=Object(l["defineComponent"])({props:{groupName:String,settings:{type:Array,required:!0},allSettingValues:{type:Object,required:!0}},emits:["change"],components:{GroupedSetting:bn},computed:{settingValues:function(){var e=this,t=Object.entries(this.allSettingValues).filter((function(t){var n=vn(t,1),o=n[0];if(e.groupName){var r=o.split("."),i=vn(r,1),l=i[0];if(l!==e.groupName)return!1}return!0})).map((function(t){var n=vn(t,2),o=n[0],r=n[1];return e.groupName?[o.split(".")[1],r]:[o,r]}));return Object.fromEntries(t)}}});Vn.render=mn;var wn=Vn;function Cn(e,t){return Bn(e)||Fn(e,t)||kn(e,t)||Sn()}function Sn(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function kn(e,t){if(e){if("string"===typeof e)return An(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?An(e,t):void 0}}function An(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n<t;n++)o[n]=e[n];return o}function Fn(e,t){var n=null==e?null:"undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var o,r,i=[],l=!0,a=!1;try{for(n=n.call(e);!(l=(o=n.next()).done);l=!0)if(i.push(o.value),t&&i.length===t)break}catch(u){a=!0,r=u}finally{try{l||null==n["return"]||n["return"]()}finally{if(a)throw r}}return i}}function Bn(e){if(Array.isArray(e))return e}var En=window,xn=En.$,Nn=Object(l["defineComponent"])({props:{mode:String},components:{ActivityIndicator:i["ActivityIndicator"],Field:Qt,GroupedSettings:wn},data:function(){return{isLoading:!0,isSaving:{},passwordConfirmation:"",settingsToSave:null,settingsPerPlugin:[],settingValues:{}}},created:function(){var e=this;i["AjaxHelper"].fetch({method:this.apiMethod}).then((function(t){e.isLoading=!1,e.settingsPerPlugin=t,t.forEach((function(t){t.settings.forEach((function(n){e.settingValues["".concat(t.pluginName,".").concat(n.name)]=n.value}))})),window.anchorLinkFix.scrollToAnchorInUrl(),e.addSectionsToTableOfContents()})).catch((function(){e.isLoading=!1}))},computed:{apiMethod:function(){return"admin"===this.mode?"CorePluginsAdmin.getSystemSettings":"CorePluginsAdmin.getUserSettings"},saveApiMethod:function(){return"admin"===this.mode?"CorePluginsAdmin.setSystemSettings":"CorePluginsAdmin.setUserSettings"}},methods:{addSectionsToTableOfContents:function(){var e=xn("#generalSettingsTOC");if(e.length){var t=this.settingsPerPlugin;t.forEach((function(t){var n=t.pluginName,o=t.settings;n&&("CoreAdminHome"===n&&o?o.filter((function(e){return e.introduction})).forEach((function(t){e.append('<a href="#/'.concat(n,'PluginSettings">').concat(t.introduction,"</a> "))})):e.append('<a href="#/'.concat(n,'">').concat(n.replace(/([A-Z])/g," $1").trim(),"</a> ")))}))}},saveSetting:function(e){"admin"===this.mode?this.showPasswordConfirmModal(e):this.save(e)},showPasswordConfirmModal:function(e){var t=this;this.settingsToSave=e;var n=this.$refs.root,o=xn(n),r=function(n){var r=n.keyCode?n.keyCode:n.which;13===r&&(o.find(".confirm-password-modal").modal("close"),t.save(e))};o.find(".confirm-password-modal").modal({dismissible:!1,onOpenEnd:function(){var e=".modal.open #currentUserPassword";xn(e).focus(),xn(e).off("keypress").keypress(r)}}).modal("open")},save:function(e){var t=this,n=this.saveApiMethod;this.isSaving[e]=!0;var o=this.getValuesForPlugin(e);i["AjaxHelper"].post({method:n},{settingValues:o,passwordConfirmation:this.passwordConfirmation}).then((function(){t.isSaving[e]=!1;var n=i["NotificationsStore"].show({message:Object(i["translate"])("CoreAdminHome_PluginSettingsSaveSuccess"),id:"generalSettings",context:"success",type:"transient"});i["NotificationsStore"].scrollToNotification(n)})).catch((function(){t.isSaving[e]=!1})),this.passwordConfirmation="",this.settingsToSave=null},getValuesForPlugin:function(e){var t={};return t[e]||(t[e]=[]),Object.entries(this.settingValues).forEach((function(n){var o=Cn(n,2),r=o[0],i=o[1],l=r.split("."),a=Cn(l,2),u=a[0],c=a[1];if(u===e){var s=i;!1===s?s="0":!0===s&&(s="1"),t[u].push({name:c,value:s})}})),t}}});Nn.render=dn;var Tn=Nn,$n=(Object(i["createAngularJsAdapter"])({component:Tn,scope:{mode:{angularJsBind:"@"}},directiveName:"piwikPluginSettings"}),window),Mn=$n.$; /*! * Matomo - free/libre analytics platform * diff --git a/plugins/CorePluginsAdmin/vue/src/GroupedSettings/GroupedSetting.vue b/plugins/CorePluginsAdmin/vue/src/GroupedSettings/GroupedSetting.vue index d4e019c331..075903db2a 100644 --- a/plugins/CorePluginsAdmin/vue/src/GroupedSettings/GroupedSetting.vue +++ b/plugins/CorePluginsAdmin/vue/src/GroupedSettings/GroupedSetting.vue @@ -9,7 +9,7 @@ <FormField :model-value="modelValue" @update:model-value="changeValue($event)" - :form-field="setting" + :form-field="settingWithComponent" /> </div> </template> @@ -19,6 +19,7 @@ import { defineComponent } from 'vue'; import { IScope } from 'angular'; import { Matomo } from 'CoreHome'; import FormField from '../FormField/FormField.vue'; +import FieldAngularJsTemplate from '../FormField/FieldAngularJsTemplate.vue'; // TODO: have to use angularjs here until there's an expression evaluating alternative let conditionScope: IScope; @@ -40,6 +41,17 @@ export default defineComponent({ }, emits: ['update:modelValue'], computed: { + // bc for angularjs field that uses templateFile + settingWithComponent() { + if (this.setting.templateFile) { + return { + ...this.setting, + component: FieldAngularJsTemplate, + }; + } + + return this.setting; + }, showField() { const condition = this.setting.condition as string; if (!condition) { diff --git a/plugins/CorePluginsAdmin/vue/src/PluginSettings/PluginSettings.vue b/plugins/CorePluginsAdmin/vue/src/PluginSettings/PluginSettings.vue index 2e5fa64203..8f35adae0b 100644 --- a/plugins/CorePluginsAdmin/vue/src/PluginSettings/PluginSettings.vue +++ b/plugins/CorePluginsAdmin/vue/src/PluginSettings/PluginSettings.vue @@ -77,21 +77,12 @@ import { } from 'CoreHome'; import KeyPressEvent = JQuery.KeyPressEvent; import Field from '../Field/Field.vue'; +import Setting from './Setting'; +import SettingsForSinglePlugin from './SettingsForSinglePlugin'; import GroupedSettings from '../GroupedSettings/GroupedSettings.vue'; const { $ } = window; -interface Setting { - name: string; - value: unknown; - introduction?: string; -} - -interface SettingsForSinglePlugin { - pluginName: string; - settings: Setting[]; -} - interface PluginSettingsState { isLoading: boolean; isSaving: Record<string, boolean>; diff --git a/plugins/CorePluginsAdmin/vue/src/PluginSettings/Setting.ts b/plugins/CorePluginsAdmin/vue/src/PluginSettings/Setting.ts new file mode 100644 index 0000000000..6f661eff41 --- /dev/null +++ b/plugins/CorePluginsAdmin/vue/src/PluginSettings/Setting.ts @@ -0,0 +1,14 @@ +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +interface Setting { + name: string; + value: any; // eslint-disable-line + introduction?: string; +} + +export default Setting; diff --git a/plugins/CorePluginsAdmin/vue/src/PluginSettings/SettingsForSinglePlugin.ts b/plugins/CorePluginsAdmin/vue/src/PluginSettings/SettingsForSinglePlugin.ts new file mode 100644 index 0000000000..515635709e --- /dev/null +++ b/plugins/CorePluginsAdmin/vue/src/PluginSettings/SettingsForSinglePlugin.ts @@ -0,0 +1,15 @@ +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +import Setting from './Setting'; + +interface SettingsForSinglePlugin { + pluginName: string; + settings: Setting[]; +} + +export default SettingsForSinglePlugin; diff --git a/plugins/CorePluginsAdmin/vue/src/index.ts b/plugins/CorePluginsAdmin/vue/src/index.ts index 1c8330632b..69a0a88434 100644 --- a/plugins/CorePluginsAdmin/vue/src/index.ts +++ b/plugins/CorePluginsAdmin/vue/src/index.ts @@ -15,6 +15,8 @@ import './Form/Form.adapter'; export { default as FormField } from './FormField/FormField.vue'; export { default as Field } from './Field/Field.vue'; +export { default as Setting } from './PluginSettings/Setting'; +export { default as SettingsForSinglePlugin } from './PluginSettings/SettingsForSinglePlugin'; export { default as PluginSettings } from './PluginSettings/PluginSettings.vue'; export { default as PluginFilter } from './Plugins/PluginFilter'; export { default as PluginManagement } from './Plugins/PluginManagement'; diff --git a/plugins/IntranetMeasurable/tests/UI/expected-screenshots/IntranetMeasurable_intranet_create.png b/plugins/IntranetMeasurable/tests/UI/expected-screenshots/IntranetMeasurable_intranet_create.png index 060b6eca41..0376c5bc8c 100644 --- a/plugins/IntranetMeasurable/tests/UI/expected-screenshots/IntranetMeasurable_intranet_create.png +++ b/plugins/IntranetMeasurable/tests/UI/expected-screenshots/IntranetMeasurable_intranet_create.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f96fc9c2c0aaec0dd0264b6c24e09c40da7d2b3b17b218584b8e8bdf1d109e0e -size 301800 +oid sha256:d6a1a763044d093551dfa0ce23175812cb07f8a2c488d15423e0e435416fb9e5 +size 301789 diff --git a/plugins/SitesManager/SitesManager.php b/plugins/SitesManager/SitesManager.php index 2b4746c326..ba575ae21b 100644 --- a/plugins/SitesManager/SitesManager.php +++ b/plugins/SitesManager/SitesManager.php @@ -170,12 +170,8 @@ class SitesManager extends \Piwik\Plugin $jsFiles[] = "plugins/SitesManager/angularjs/sites-manager/api-helper.service.js"; $jsFiles[] = "plugins/SitesManager/angularjs/sites-manager/api-site.service.js"; $jsFiles[] = "plugins/SitesManager/angularjs/sites-manager/api-core.service.js"; - $jsFiles[] = "plugins/SitesManager/angularjs/sites-manager/sites-manager-type-model.js"; $jsFiles[] = "plugins/SitesManager/angularjs/sites-manager/sites-manager-admin-sites-model.js"; - $jsFiles[] = "plugins/SitesManager/angularjs/sites-manager/multiline-field.directive.js"; - $jsFiles[] = "plugins/SitesManager/angularjs/sites-manager/edit-trigger.directive.js"; $jsFiles[] = "plugins/SitesManager/angularjs/sites-manager/sites-manager.controller.js"; - $jsFiles[] = "plugins/SitesManager/angularjs/sites-manager/sites-manager-site.controller.js"; } /** diff --git a/plugins/SitesManager/angularjs/sites-manager/edit-trigger.directive.js b/plugins/SitesManager/angularjs/sites-manager/edit-trigger.directive.js deleted file mode 100644 index bde4f308f6..0000000000 --- a/plugins/SitesManager/angularjs/sites-manager/edit-trigger.directive.js +++ /dev/null @@ -1,30 +0,0 @@ -/*! - * Matomo - free/libre analytics platform - * - * @link https://matomo.org - * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */ -(function () { - angular.module('piwikApp').directive('sitesManagerEditTrigger', sitesManagerEditTrigger); - - function sitesManagerEditTrigger() { - - return { - restrict: 'A', - link: function (scope, element) { - - element.bind('click', function(){ - - if(!scope.site.editMode) - scope.$apply(scope.editSite()); - }); - - scope.$watch('site.editMode', function() { - - element.toggleClass('editable-site-field', !scope.site.editMode); - }); - } - }; - } - -})(); diff --git a/plugins/SitesManager/angularjs/sites-manager/multiline-field.directive.html b/plugins/SitesManager/angularjs/sites-manager/multiline-field.directive.html deleted file mode 100644 index 2e1bf44bf7..0000000000 --- a/plugins/SitesManager/angularjs/sites-manager/multiline-field.directive.html +++ /dev/null @@ -1,6 +0,0 @@ -<textarea - cols="{{ cols }}" - rows="{{ rows }}" - ng-model="field.value" - ng-change="onChange()"> -</textarea> diff --git a/plugins/SitesManager/angularjs/sites-manager/multiline-field.directive.js b/plugins/SitesManager/angularjs/sites-manager/multiline-field.directive.js deleted file mode 100644 index 6561be83ac..0000000000 --- a/plugins/SitesManager/angularjs/sites-manager/multiline-field.directive.js +++ /dev/null @@ -1,49 +0,0 @@ -/*! - * Matomo - free/libre analytics platform - * - * @link https://matomo.org - * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */ -(function () { - angular.module('piwikApp').directive('sitesManagerMultilineField', sitesManagerMultilineField); - - function sitesManagerMultilineField() { - - return { - restrict: 'A', - replace: true, - scope: { - managedValue: '=field', - rows: '@?', - cols: '@?' - }, - templateUrl: 'plugins/SitesManager/angularjs/sites-manager/multiline-field.directive.html?cb=' + piwik.cacheBuster, - link: function (scope) { - - var separator = '\n'; - - var init = function () { - - scope.field = {}; - scope.onChange = updateManagedScopeValue; - - scope.$watch('managedValue', updateInputValue); - }; - - var updateManagedScopeValue = function () { - scope.managedValue = scope.field.value.trim().split(separator); - }; - - var updateInputValue = function () { - - if(angular.isUndefined(scope.managedValue)) - return; - - scope.field.value = scope.managedValue.join(separator); - }; - - init(); - } - }; - } -})(); diff --git a/plugins/SitesManager/angularjs/sites-manager/sites-manager-site.controller.js b/plugins/SitesManager/angularjs/sites-manager/sites-manager-site.controller.js deleted file mode 100644 index 3794c6e9e4..0000000000 --- a/plugins/SitesManager/angularjs/sites-manager/sites-manager-site.controller.js +++ /dev/null @@ -1,230 +0,0 @@ -/*! - * Matomo - free/libre analytics platform - * - * @link https://matomo.org - * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */ -(function () { - angular.module('piwikApp').controller('SitesManagerSiteController', SitesManagerSiteController); - - SitesManagerSiteController.$inject = ['$scope', '$filter', 'sitesManagerApiHelper', 'sitesManagerTypeModel', 'piwikApi', '$timeout']; - - function SitesManagerSiteController($scope, $filter, sitesManagerApiHelper, sitesManagerTypeModel, piwikApi, $timeout) { - - var translate = $filter('translate'); - - var updateView = function () { - $timeout(function () { - $('.editingSite').find('select').material_select(); - Materialize.updateTextFields(); - }); - } - - var init = function () { - - initModel(); - initActions(); - - $scope.site.isLoading = true; - sitesManagerTypeModel.fetchTypeById($scope.site.type).then(function (type) { - $scope.site.isLoading = false; - - if (type) { - $scope.currentType = type; - $scope.howToSetupUrl = type.howToSetupUrl; - $scope.isInternalSetupUrl = '?' === ('' + type.howToSetupUrl).substr(0, 1); - $scope.typeSettings = type.settings; - - if (isSiteNew()) { - $scope.measurableSettings = angular.copy(type.settings); - } - } else { - $scope.currentType = {name: $scope.site.type}; - } - - var forcedEditSiteId = sitesManagerTypeModel.getEditSiteIdParameter(); - if (forcedEditSiteId && $scope.site.idsite == forcedEditSiteId) { - editSite(); - } - }); - }; - - var initActions = function () { - - $scope.editSite = editSite; - $scope.saveSite = saveSite; - $scope.openDeleteDialog = openDeleteDialog; - $scope.site['delete'] = deleteSite; - }; - - var initModel = function() { - - if (isSiteNew()) { - initNewSite(); - } else { - $scope.site.excluded_ips = sitesManagerApiHelper.commaDelimitedFieldToArray($scope.site.excluded_ips); - $scope.site.excluded_parameters = sitesManagerApiHelper.commaDelimitedFieldToArray($scope.site.excluded_parameters); - $scope.site.excluded_user_agents = sitesManagerApiHelper.commaDelimitedFieldToArray($scope.site.excluded_user_agents); - $scope.site.sitesearch_keyword_parameters = sitesManagerApiHelper.commaDelimitedFieldToArray($scope.site.sitesearch_keyword_parameters); - $scope.site.sitesearch_category_parameters = sitesManagerApiHelper.commaDelimitedFieldToArray($scope.site.sitesearch_category_parameters); - } - - $scope.site.removeDialog = {}; - - updateView(); - }; - - var editSite = function () { - $scope.site.editMode = true; - - $scope.measurableSettings = []; - $scope.site.isLoading = true; - piwikApi.fetch({method: 'SitesManager.getSiteSettings', idSite: $scope.site.idsite}).then(function (settings) { - $scope.measurableSettings = settings; - $scope.site.isLoading = false; - }, function () { - $scope.site.isLoading = false; - }); - - updateView(); - }; - - var saveSite = function() { - - var values = { - siteName: $scope.site.name, - timezone: $scope.site.timezone, - currency: $scope.site.currency, - type: $scope.site.type, - settingValues: {} - }; - - var isNewSite = isSiteNew(); - - var apiMethod = 'SitesManager.addSite'; - if (!isNewSite) { - apiMethod = 'SitesManager.updateSite'; - values.idSite = $scope.site.idsite; - } - - angular.forEach($scope.measurableSettings, function (settings) { - if (!values['settingValues'][settings.pluginName]) { - values['settingValues'][settings.pluginName] = []; - } - - angular.forEach(settings.settings, function (setting) { - var value = setting.value; - if (value === false) { - value = '0'; - } else if (value === true) { - value = '1'; - } - if (angular.isArray(value) && setting.uiControl == 'textarea') { - var newValue = []; - angular.forEach(value, function (val) { - // as they are line separated we cannot trim them in the view - if (val) { - newValue.push(val); - } - }); - value = newValue; - } - - values['settingValues'][settings.pluginName].push({ - name: setting.name, - value: value - }); - }); - }); - - piwikApi.post({method: apiMethod}, values).then(function (response) { - $scope.site.editMode = false; - - var UI = require('piwik/UI'); - var notification = new UI.Notification(); - - var message = _pk_translate('SitesManager_WebsiteUpdated'); - if (isNewSite) { - message = _pk_translate('SitesManager_WebsiteCreated'); - } - - notification.show(message, {context: 'success', id: 'websitecreated'}); - notification.scrollToNotification(); - - if (!$scope.site.idsite && response && response.value) { - $scope.site.idsite = response.value; - } - - angular.forEach(values.settingValues, function (settings, pluginName) { - angular.forEach(settings, function (setting) { - if (setting.name === 'urls') { - $scope.site.alias_urls = setting.value; - } else { - $scope.site[setting.name] = setting.value; - } - }); - }); - - sitesManagerTypeModel.removeEditSiteIdParameterFromHash(); - }); - }; - - var isSiteNew = function() { - return angular.isUndefined($scope.site.idsite); - }; - - var initNewSite = function() { - $scope.site.editMode = true; - $scope.site.timezone = $scope.globalSettings.defaultTimezone; - $scope.site.currency = $scope.globalSettings.defaultCurrency; - - if ($scope.typeSettings) { - // we do not want to manipulate initial type settings - $scope.measurableSettings = angular.copy($scope.typeSettings); - } - }; - - var openDeleteDialog = function() { - - $scope.site.removeDialog.title = translate('SitesManager_DeleteConfirm', '"' + $scope.site.name + '" (idSite = ' + $scope.site.idsite + ')'); - $scope.site.removeDialog.show = true; - }; - - var deleteSite = function() { - var redirectParams = $scope.redirectParams; - - // if the current idSite in the URL is the site we're deleting, then we have to make to change it. otherwise, - // if a user goes to another page, the invalid idSite may cause a fatal error. - if (broadcast.getValueFromUrl('idSite') == $scope.site.idsite) { - var sites = $scope.adminSites.sites; - - var otherSite; - for (var i = 0; i !== sites.length; ++i) { - if (sites[i].idsite != $scope.site.idsite) { - otherSite = sites[i]; - break; - } - } - - if (otherSite) { - redirectParams = $.extend({}, redirectParams, { idSite: otherSite.idsite }); - } - } - - var ajaxHandler = new ajaxHelper(); - - ajaxHandler.addParams({ - idSite: $scope.site.idsite, - module: 'API', - format: 'json', - method: 'SitesManager.deleteSite' - }, 'GET'); - - ajaxHandler.redirectOnSuccess(redirectParams); - ajaxHandler.setLoadingElement(); - ajaxHandler.send(); - }; - - init(); - } -})(); diff --git a/plugins/SitesManager/angularjs/sites-manager/sites-manager-type-model.js b/plugins/SitesManager/angularjs/sites-manager/sites-manager-type-model.js deleted file mode 100644 index 78b59975b6..0000000000 --- a/plugins/SitesManager/angularjs/sites-manager/sites-manager-type-model.js +++ /dev/null @@ -1,65 +0,0 @@ -/** - * Model for Sites Manager. Fetches only sites one has at least Admin permission. - */ -(function () { - angular.module('piwikApp').factory('sitesManagerTypeModel', sitesManagerTypeModel); - - sitesManagerTypeModel.$inject = ['piwikApi']; - - function sitesManagerTypeModel(piwikApi) - { - var typesPromise = null; - - var model = { - typesById: {}, - fetchTypeById: fetchTypeById, - fetchAvailableTypes: fetchAvailableTypes, - hasMultipleTypes: hasMultipleTypes, - removeEditSiteIdParameterFromHash: removeEditSiteIdParameterFromHash, - getEditSiteIdParameter: getEditSiteIdParameter - }; - - return model; - - function getEditSiteIdParameter() { - var search = String(window.location.hash).substr('#/'.length); - var searchParams = piwik.helper.getArrayFromQueryString(search); - if (searchParams.editsiteid && $.isNumeric(searchParams.editsiteid)) { - return searchParams.editsiteid; - } - } - function removeEditSiteIdParameterFromHash() { - window.location.hash = window.location.hash.replace(/editsiteid=\d+/g, ''); - } - - function hasMultipleTypes(typeId) - { - return fetchAvailableTypes().then(function (types) { - return types && types.length > 1; - }); - } - - function fetchTypeById(typeId) - { - return fetchAvailableTypes().then(function () { - return model.typesById[typeId]; - }); - } - - function fetchAvailableTypes() - { - if (!typesPromise) { - typesPromise = piwikApi.fetch({method: 'API.getAvailableMeasurableTypes', filter_limit: '-1'}).then(function (types) { - - angular.forEach(types, function (type) { - model.typesById[type.id] = type; - }); - - return types; - }); - } - - return typesPromise; - } - } -})(); diff --git a/plugins/SitesManager/angularjs/sites-manager/sites-manager.controller.js b/plugins/SitesManager/angularjs/sites-manager/sites-manager.controller.js index 891835b928..32cebbff4c 100644 --- a/plugins/SitesManager/angularjs/sites-manager/sites-manager.controller.js +++ b/plugins/SitesManager/angularjs/sites-manager/sites-manager.controller.js @@ -229,7 +229,6 @@ }; var cancelEditSite = function (site) { - site.editMode = false; var idSite = site.idsite; if (idSite) { @@ -239,7 +238,8 @@ siteElement[0].scrollIntoView(); } } - sitesManagerTypeModel.removeEditSiteIdParameterFromHash(); + + $scope.adminSites.sites = $scope.adminSites.sites.filter(function (s) { return !!s.idsite; }); }; var lookupCurrentEditSite = function () { diff --git a/plugins/SitesManager/stylesheets/SitesManager.less b/plugins/SitesManager/stylesheets/SitesManager.less index 0651e40ef4..6f7e0f16a0 100644 --- a/plugins/SitesManager/stylesheets/SitesManager.less +++ b/plugins/SitesManager/stylesheets/SitesManager.less @@ -49,6 +49,10 @@ .editingSiteFooter { padding: 15px; margin: 0 -15px -15px; + + > button { + margin-left: 3.5px; + } } } } diff --git a/plugins/SitesManager/templates/dialogs/dialogs.html b/plugins/SitesManager/templates/dialogs/dialogs.html deleted file mode 100644 index e50578ebbc..0000000000 --- a/plugins/SitesManager/templates/dialogs/dialogs.html +++ /dev/null @@ -1 +0,0 @@ -<div ng-include="'plugins/SitesManager/templates/dialogs/remove-dialog.html'"></div> diff --git a/plugins/SitesManager/templates/dialogs/remove-dialog.html b/plugins/SitesManager/templates/dialogs/remove-dialog.html deleted file mode 100644 index 43f9f836ca..0000000000 --- a/plugins/SitesManager/templates/dialogs/remove-dialog.html +++ /dev/null @@ -1,9 +0,0 @@ -<div class="ui-confirm" piwik-dialog="site.removeDialog.show" yes="site.delete()"> - - <h2>{{ site.removeDialog.title }}</h2> - - <p>{{ 'SitesManager_DeleteSiteExplanation'|translate }}</p> - - <input type="button" value="{{ 'General_Yes'|translate }}" role="yes"/> - <input type="button" value="{{ 'General_No'|translate }}" role="no" /> -</div> diff --git a/plugins/SitesManager/templates/sites-list/site-fields.html b/plugins/SitesManager/templates/sites-list/site-fields.html deleted file mode 100644 index 7a63b6a918..0000000000 --- a/plugins/SitesManager/templates/sites-list/site-fields.html +++ /dev/null @@ -1,113 +0,0 @@ -<div class="site card hoverable" idsite="{{ site.idsite }}" type="{{ site.type }}" ng-class="{'editingSite': site.editMode==true}"> -<div class="card-content"> - - <div class="row" ng-if="!site.editMode"> - - <div class="col m3"> - <h4>{{ site.name }}</h4> - <ul> - <li><span class="title">{{ 'General_Id'|translate }}:</span> {{ site.idsite }}</li> - <li ng-show="availableTypes.length > 1"><span class="title">{{ 'SitesManager_Type'|translate }}:</span> {{ currentType.name }}</li> - <li ng-show="site.idsite && howToSetupUrl"> - <a target="{{ isInternalSetupUrl ? '_self' : '_blank' }}" title="{{ 'SitesManager_ShowTrackingTag'|translate }}" - ng-href="{{ howToSetupUrl }}{{ isInternalSetupUrl ? '&idSite=' + site.idsite + '&period=' + period + '&date=' + date +'&updated=false' : ''}}"> - {{ 'SitesManager_ShowTrackingTag'|translate }} - </a> - </li> - </ul> - </div> - <div class="col m4"> - <ul> - <li><span class="title">{{ 'SitesManager_Timezone'|translate }}:</span> {{ site.timezone_name }}</li> - <li><span class="title">{{ 'SitesManager_Currency'|translate }}:</span> {{ site.currency_name }}</li> - <li ng-show="site.ecommerce == 1"> - <span class="title">{{ 'Goals_Ecommerce'|translate }}:</span> {{ 'General_Yes'|translate }} - </li> - <li ng-show="site.sitesearch == 1"> - <span class="title">{{ 'Actions_SubmenuSitesearch'|translate }}:</span> {{ 'General_Yes'|translate }} - </li> - </ul> - </div> - <div class="col m4"> - <ul> - <li> - <span class="title">{{ 'SitesManager_Urls'|translate }}</span>: - <span ng-repeat="url in site.alias_urls"> - <a target=_blank rel="noreferrer noopener" ng-href="{{ url }}">{{ url }}{{$last ? '' : ', '}}</a> - </span> - </li> - <li ng-show="site.excluded_ips.length"> - <span class="title">{{ 'SitesManager_ExcludedIps'|translate }}:</span> - {{ site.excluded_ips.join(', ') }} - </li> - <li ng-show="site.excluded_parameters.length"> - <span class="title">{{ 'SitesManager_ExcludedParameters'|translate }}:</span> - {{ site.excluded_parameters.join(', ') }} - </li> - <li ng-if="site.excluded_user_agents.length"> - <span class="title">{{ 'SitesManager_ExcludedUserAgents'|translate }}:</span> - {{ site.excluded_user_agents.join(', ') }} - </li> - </ul> - </div> - <div class="col m1 text-right"> - <ul> - <li> - <button class="table-action" ng-click="editSite()" title="{{ 'General_Edit'|translate }}"> - <span class="icon-edit"></span> - </button> - </li> - <li> - <button class="table-action" ng-show="site.idsite" ng-click="openDeleteDialog()" title="{{ 'General_Delete'|translate }}"> - <span class="icon-delete"></span> - </button> - </li> - </ul> - </div> - - </div> - - <div ng-if="site.editMode"> - - <div class="form-group row"> - <div class="col s12 m6 input-field"> - <input type="text" ng-model="site.name" maxlength="90" placeholder="{{ 'General_Name'|translate }}" /> - <label>{{ 'General_Name'|translate }}</label> - </div> - <div class="col s12 m6"></div> - </div> - - <div piwik-activity-indicator loading="site.isLoading"></div> - - <div ng-repeat="settingsPerPlugin in measurableSettings"> - <div ng-repeat="setting in settingsPerPlugin.settings"> - <div piwik-form-field="setting" all-settings="settingsPerPlugin.settings"></div> - </div> - </div> - - <div piwik-field uicontrol="select" name="currency" - ng-model="site.currency" - data-title="{{ 'SitesManager_Currency'|translate }}" - inline-help="{{ 'SitesManager_CurrencySymbolWillBeUsedForGoals' | translate }}" - options='currencies'> - </div> - - <div piwik-field uicontrol="select" name="timezone" - ng-model="site.timezone" - data-title="{{ 'SitesManager_Timezone'|translate }}" - inline-help="#timezoneHelpText" - options='timezones'> - </div> - - <div id="timezoneHelpText" class="inline-help-node"> - <div ng-include="'plugins/SitesManager/templates/help/timezone-help.html'"></div> - </div> - - <div class="editingSiteFooter"> - <input ng-show="!site.isLoading" type="submit" class="btn" value="{{ 'General_Save' | translate }}" ng-click="saveSite()"/> - <button class="btn btn-link" ng-click="cancelEditSite(site)">{{ 'General_Cancel' | translate:'':'' }}</button> - </div> - - </div> -</div> -</div> diff --git a/plugins/SitesManager/templates/sites-list/sites-list.html b/plugins/SitesManager/templates/sites-list/sites-list.html index 4ff9256b19..6a0d9227e3 100644 --- a/plugins/SitesManager/templates/sites-list/sites-list.html +++ b/plugins/SitesManager/templates/sites-list/sites-list.html @@ -1,13 +1,15 @@ <div class="sitesManagerList"> - <div ng-repeat="site in adminSites.sites" ng-include="'plugins/SitesManager/templates/dialogs/dialogs.html?cb=' + cacheBuster"></div> - <p ng-if="adminSites.searchTerm && 0 === adminSites.sites.length && !adminSites.isLoading"> {{ 'SitesManager_NotFound'|translate }} <strong>{{ adminSites.searchTerm }}</strong> </p> - <div ng-controller="SitesManagerSiteController" ng-repeat="site in adminSites.sites" - ng-include="'plugins/SitesManager/templates/sites-list/site-fields.html?cb=' + cacheBuster"> - </div> - + <div + ng-repeat="site in adminSites.sites" + matomo-site-fields + site="site" + timezone-support-enabled="timezoneSupportEnabled" + utc-time="utcTime" + global-settings="globalSettings" + ></div> </div> diff --git a/plugins/SitesManager/tests/UI/expected-screenshots/SitesManager_site_edit_url.png b/plugins/SitesManager/tests/UI/expected-screenshots/SitesManager_site_edit_url.png index 0dca054ecb..a79bb81a2f 100644 --- a/plugins/SitesManager/tests/UI/expected-screenshots/SitesManager_site_edit_url.png +++ b/plugins/SitesManager/tests/UI/expected-screenshots/SitesManager_site_edit_url.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3e0350c0722f80f1f34f543e33983ef1b76f2e94f762b66564b325de0ace4340 -size 331773 +oid sha256:f346b6766c2b1712a249c8d7732ac00406c15a291875282773a88c2959e34286 +size 331766 diff --git a/plugins/SitesManager/vue/dist/SitesManager.umd.js b/plugins/SitesManager/vue/dist/SitesManager.umd.js new file mode 100644 index 0000000000..adc5fc99e5 --- /dev/null +++ b/plugins/SitesManager/vue/dist/SitesManager.umd.js @@ -0,0 +1,1069 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(require("CoreHome"), require("vue"), require("CorePluginsAdmin")); + else if(typeof define === 'function' && define.amd) + define(["CoreHome", , "CorePluginsAdmin"], factory); + else if(typeof exports === 'object') + exports["SitesManager"] = factory(require("CoreHome"), require("vue"), require("CorePluginsAdmin")); + else + root["SitesManager"] = factory(root["CoreHome"], root["Vue"], root["CorePluginsAdmin"]); +})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE__19dc__, __WEBPACK_EXTERNAL_MODULE__8bbf__, __WEBPACK_EXTERNAL_MODULE_a5a2__) { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = "plugins/SitesManager/vue/dist/"; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = "fae3"); +/******/ }) +/************************************************************************/ +/******/ ({ + +/***/ "19dc": +/***/ (function(module, exports) { + +module.exports = __WEBPACK_EXTERNAL_MODULE__19dc__; + +/***/ }), + +/***/ "8bbf": +/***/ (function(module, exports) { + +module.exports = __WEBPACK_EXTERNAL_MODULE__8bbf__; + +/***/ }), + +/***/ "a5a2": +/***/ (function(module, exports) { + +module.exports = __WEBPACK_EXTERNAL_MODULE_a5a2__; + +/***/ }), + +/***/ "fae3": +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +// ESM COMPAT FLAG +__webpack_require__.r(__webpack_exports__); + +// EXPORTS +__webpack_require__.d(__webpack_exports__, "SiteTypesStore", function() { return /* reexport */ src_SiteTypesStore_SiteTypesStore; }); +__webpack_require__.d(__webpack_exports__, "SiteFields", function() { return /* reexport */ SiteFields; }); +__webpack_require__.d(__webpack_exports__, "CurrencyStore", function() { return /* reexport */ src_CurrencyStore_CurrencyStore; }); +__webpack_require__.d(__webpack_exports__, "TimezoneStore", function() { return /* reexport */ src_TimezoneStore_TimezoneStore; }); + +// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js +// This file is imported into lib/wc client bundles. + +if (typeof window !== 'undefined') { + var currentScript = window.document.currentScript + if (false) { var getCurrentScript; } + + var src = currentScript && currentScript.src.match(/(.+\/)[^/]+\.js(\?.*)?$/) + if (src) { + __webpack_require__.p = src[1] // eslint-disable-line + } +} + +// Indicate to webpack that this file can be concatenated +/* harmony default export */ var setPublicPath = (null); + +// EXTERNAL MODULE: external "CoreHome" +var external_CoreHome_ = __webpack_require__("19dc"); + +// EXTERNAL MODULE: external {"commonjs":"vue","commonjs2":"vue","root":"Vue"} +var external_commonjs_vue_commonjs2_vue_root_Vue_ = __webpack_require__("8bbf"); + +// CONCATENATED MODULE: ./plugins/SitesManager/vue/src/SiteTypesStore/SiteTypesStore.ts +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + + +var _window = window, + $ = _window.$; + +var SiteTypesStore_SiteTypesStore = /*#__PURE__*/function () { + function SiteTypesStore() { + var _this = this; + + _classCallCheck(this, SiteTypesStore); + + _defineProperty(this, "state", Object(external_commonjs_vue_commonjs2_vue_root_Vue_["reactive"])({ + typesById: {} + })); + + _defineProperty(this, "typesById", Object(external_commonjs_vue_commonjs2_vue_root_Vue_["computed"])(function () { + return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["readonly"])(_this.state).typesById; + })); + + _defineProperty(this, "types", Object(external_commonjs_vue_commonjs2_vue_root_Vue_["computed"])(function () { + return Object.values(_this.typesById.value); + })); + + _defineProperty(this, "response", void 0); + + this.fetchAvailableTypes(); + } + + _createClass(SiteTypesStore, [{ + key: "fetchAvailableTypes", + value: function fetchAvailableTypes() { + var _this2 = this; + + if (this.response) { + return Promise.resolve(this.response); + } + + this.response = external_CoreHome_["AjaxHelper"].fetch({ + method: 'API.getAvailableMeasurableTypes', + filter_limit: '-1' + }).then(function (types) { + types.forEach(function (type) { + _this2.state.typesById[type.id] = type; + }); + return _this2.types.value; + }); + return this.response; + } + }, { + key: "getEditSiteIdParameter", + value: function getEditSiteIdParameter() { + var editsiteid = external_CoreHome_["MatomoUrl"].hashParsed.value.editsiteid; + + if (editsiteid && $.isNumeric(editsiteid)) { + return editsiteid; + } + + return undefined; + } + }, { + key: "removeEditSiteIdParameterFromHash", + value: function removeEditSiteIdParameterFromHash() { + var params = Object.assign({}, external_CoreHome_["MatomoUrl"].hashParsed.value); + delete params.editsiteid; + external_CoreHome_["MatomoUrl"].updateHash(params); + } + }]); + + return SiteTypesStore; +}(); + +/* harmony default export */ var src_SiteTypesStore_SiteTypesStore = (Object(external_CoreHome_["lazyInitSingleton"])(SiteTypesStore_SiteTypesStore)); +// CONCATENATED MODULE: ./plugins/SitesManager/vue/src/SiteTypesStore/SiteTypesStore.adapter.ts +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + + + +function sitesManagerTypeModelAdapter() { + return { + get typesById() { + return Object(external_CoreHome_["clone"])(src_SiteTypesStore_SiteTypesStore.typesById.value); + }, + + fetchTypeById: function fetchTypeById(typeId) { + var _this = this; + + return src_SiteTypesStore_SiteTypesStore.fetchAvailableTypes().then(function () { + return Object(external_CoreHome_["cloneThenApply"])(_this.typesById[typeId]); + }); + }, + fetchAvailableTypes: function fetchAvailableTypes() { + return src_SiteTypesStore_SiteTypesStore.fetchAvailableTypes().then(function (types) { + return Object(external_CoreHome_["cloneThenApply"])(types); + }); + }, + hasMultipleTypes: function hasMultipleTypes() { + return src_SiteTypesStore_SiteTypesStore.fetchAvailableTypes().then(function (types) { + return types && Object.keys(types).length > 1; + }); + }, + removeEditSiteIdParameterFromHash: src_SiteTypesStore_SiteTypesStore.removeEditSiteIdParameterFromHash.bind(src_SiteTypesStore_SiteTypesStore), + getEditSiteIdParameter: src_SiteTypesStore_SiteTypesStore.getEditSiteIdParameter.bind(src_SiteTypesStore_SiteTypesStore) + }; +} + +window.angular.module('piwikApp.service').factory('sitesManagerTypeModel', sitesManagerTypeModelAdapter); +// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-babel/node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/templateLoader.js??ref--6!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/SitesManager/vue/src/SiteFields/SiteFields.vue?vue&type=template&id=0cf86fbc + +var _hoisted_1 = ["idsite", "type"]; +var _hoisted_2 = { + class: "card-content" +}; +var _hoisted_3 = { + key: 0, + class: "row" +}; +var _hoisted_4 = { + class: "col m3" +}; +var _hoisted_5 = { + class: "title" +}; +var _hoisted_6 = { + class: "title" +}; +var _hoisted_7 = ["target", "title", "href"]; +var _hoisted_8 = { + class: "col m4" +}; +var _hoisted_9 = { + class: "title" +}; +var _hoisted_10 = { + class: "title" +}; +var _hoisted_11 = { + class: "title" +}; +var _hoisted_12 = { + class: "title" +}; +var _hoisted_13 = { + class: "col m4" +}; +var _hoisted_14 = { + class: "title" +}; + +var _hoisted_15 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(": "); + +var _hoisted_16 = ["href"]; +var _hoisted_17 = { + key: 0 +}; +var _hoisted_18 = { + class: "title" +}; +var _hoisted_19 = { + key: 1 +}; +var _hoisted_20 = { + class: "title" +}; +var _hoisted_21 = { + key: 2 +}; +var _hoisted_22 = { + class: "title" +}; +var _hoisted_23 = { + class: "col m1 text-right" +}; +var _hoisted_24 = ["title"]; + +var _hoisted_25 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { + class: "icon-edit" +}, null, -1); + +var _hoisted_26 = [_hoisted_25]; +var _hoisted_27 = ["title"]; + +var _hoisted_28 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { + class: "icon-delete" +}, null, -1); + +var _hoisted_29 = [_hoisted_28]; +var _hoisted_30 = { + key: 1 +}; +var _hoisted_31 = { + class: "form-group row" +}; +var _hoisted_32 = { + class: "col s12 m6 input-field" +}; +var _hoisted_33 = ["placeholder"]; + +var _hoisted_34 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", { + class: "col s12 m6" +}, null, -1); + +var _hoisted_35 = { + id: "timezoneHelpText", + class: "inline-help-node" +}; +var _hoisted_36 = { + key: 0 +}; + +var _hoisted_37 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); + +var _hoisted_38 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("br", null, null, -1); + +var _hoisted_39 = { + class: "editingSiteFooter" +}; +var _hoisted_40 = ["value"]; +var _hoisted_41 = { + class: "ui-confirm" +}; +var _hoisted_42 = ["value"]; +var _hoisted_43 = ["value"]; +function render(_ctx, _cache, $props, $setup, $data, $options) { + var _ctx$theSite$excluded, + _ctx$theSite$excluded2, + _ctx$theSite$excluded3, + _this = this; + + var _component_ActivityIndicator = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("ActivityIndicator"); + + var _component_GroupedSettings = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("GroupedSettings"); + + var _component_Field = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("Field"); + + var _component_MatomoDialog = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveComponent"])("MatomoDialog"); + + return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", { + class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])(["site card hoverable", { + 'editingSite': !!_ctx.editMode + }]), + idsite: _ctx.theSite.idsite, + type: _ctx.theSite.type + }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_2, [!_ctx.editMode ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", _hoisted_3, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_4, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h4", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.theSite.name), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("ul", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("li", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", _hoisted_5, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Id')) + ":", 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.theSite.idsite), 1)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("li", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", _hoisted_6, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_Type')) + ":", 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.currentType.name), 1)], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.availableTypes.length > 1]]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("li", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { + target: _ctx.isInternalSetupUrl ? '_self' : '_blank', + title: _ctx.translate('SitesManager_ShowTrackingTag'), + href: _ctx.setupUrl + }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_ShowTrackingTag')), 9, _hoisted_7)], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.theSite.idsite && _ctx.howToSetupUrl]])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_8, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("ul", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("li", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", _hoisted_9, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_Timezone')) + ":", 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.theSite.timezone_name), 1)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("li", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", _hoisted_10, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_Currency')) + ":", 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.theSite.currency_name), 1)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("li", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", _hoisted_11, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Goals_Ecommerce')) + ":", 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Yes')), 1)], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.theSite.ecommerce === 1 || _ctx.theSite.ecommerce === '1']]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("li", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", _hoisted_12, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('Actions_SubmenuSitesearch')) + ":", 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Yes')), 1)], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.theSite.sitesearch === 1 || _ctx.theSite.sitesearch === '1']])])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_13, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("ul", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("li", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", _hoisted_14, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_Urls')), 1), _hoisted_15, (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Fragment"], null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["renderList"])(_ctx.theSite.alias_urls, function (url, index) { + return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("span", { + key: url + }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { + target: "_blank", + rel: "noreferrer noopener", + href: url + }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(url) + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(index === _ctx.theSite.alias_urls.length - 1 ? '' : ', '), 9, _hoisted_16)]); + }), 128))]), (_ctx$theSite$excluded = _ctx.theSite.excluded_ips) !== null && _ctx$theSite$excluded !== void 0 && _ctx$theSite$excluded.length ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("li", _hoisted_17, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", _hoisted_18, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_ExcludedIps')) + ":", 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.theSite.excluded_ips.split(/\s*,\s*/g).join(', ')), 1)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), (_ctx$theSite$excluded2 = _ctx.theSite.excluded_parameters) !== null && _ctx$theSite$excluded2 !== void 0 && _ctx$theSite$excluded2.length ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("li", _hoisted_19, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", _hoisted_20, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_ExcludedParameters')) + ":", 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.theSite.excluded_parameters.split(/\s*,\s*/g).join(', ')), 1)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), (_ctx$theSite$excluded3 = _ctx.theSite.excluded_user_agents) !== null && _ctx$theSite$excluded3 !== void 0 && _ctx$theSite$excluded3.length ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("li", _hoisted_21, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", _hoisted_22, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_ExcludedUserAgents')) + ":", 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.theSite.excluded_user_agents.split(/\s*,\s*/g).join(', ')), 1)])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_23, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("ul", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("li", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("button", { + class: "table-action", + onClick: _cache[0] || (_cache[0] = function ($event) { + return _ctx.editSite(); + }), + title: _ctx.translate('General_Edit') + }, _hoisted_26, 8, _hoisted_24)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("li", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("button", { + class: "table-action", + onClick: _cache[1] || (_cache[1] = function ($event) { + return _this.showRemoveDialog = true; + }), + title: _ctx.translate('General_Delete') + }, _hoisted_29, 8, _hoisted_27), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.theSite.idsite]])])])])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), _ctx.editMode ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", _hoisted_30, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_31, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_32, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", { + type: "text", + "onUpdate:modelValue": _cache[2] || (_cache[2] = function ($event) { + return _ctx.theSite.name = $event; + }), + maxlength: "90", + placeholder: _ctx.translate('General_Name') + }, null, 8, _hoisted_33), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vModelText"], _ctx.theSite.name]]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("label", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Name')), 1)]), _hoisted_34]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_ActivityIndicator, { + loading: _ctx.isLoading + }, null, 8, ["loading"]), (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Fragment"], null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["renderList"])(_ctx.measurableSettings, function (settingsPerPlugin) { + return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", { + key: settingsPerPlugin.pluginName + }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_GroupedSettings, { + "group-name": settingsPerPlugin.pluginName, + settings: settingsPerPlugin.settings, + "all-setting-values": _ctx.settingValues, + onChange: function onChange($event) { + return _ctx.settingValues["".concat(settingsPerPlugin.pluginName, ".").concat($event.name)] = $event.value; + } + }, null, 8, ["group-name", "settings", "all-setting-values", "onChange"])]); + }), 128)), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { + uicontrol: "select", + name: "currency", + modelValue: _ctx.theSite.currency, + "onUpdate:modelValue": _cache[3] || (_cache[3] = function ($event) { + return _ctx.theSite.currency = $event; + }), + title: _ctx.translate('SitesManager_Currency'), + "inline-help": _ctx.translate('SitesManager_CurrencySymbolWillBeUsedForGoals'), + options: _ctx.currencies + }, null, 8, ["modelValue", "title", "inline-help", "options"]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_Field, { + uicontrol: "select", + name: "timezone", + modelValue: _ctx.theSite.timezone, + "onUpdate:modelValue": _cache[4] || (_cache[4] = function ($event) { + return _ctx.theSite.timezone = $event; + }), + title: _ctx.translate('SitesManager_Timezone'), + "inline-help": '#timezoneHelpText', + options: _ctx.timezones + }, null, 8, ["modelValue", "title", "options"]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_35, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [!_ctx.timezoneSupportEnabled ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("span", _hoisted_36, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_AdvancedTimezoneSupportNotFound')) + " ", 1), _hoisted_37])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.utcTimeIs) + " ", 1), _hoisted_38, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createTextVNode"])(" " + Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_ChangingYourTimezoneWillOnlyAffectDataForward')), 1)])]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_39, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", { + type: "submit", + class: "btn", + value: _ctx.translate('General_Save'), + onClick: _cache[5] || (_cache[5] = function ($event) { + return _ctx.saveSite(); + }) + }, null, 8, _hoisted_40), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], !_ctx.isLoading]]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("button", { + class: "btn btn-link", + onClick: _cache[6] || (_cache[6] = function ($event) { + return _ctx.cancelEditSite(_ctx.site); + }) + }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_Cancel', '', '')), 1)])])) : Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createCommentVNode"])("", true)]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(_component_MatomoDialog, { + modelValue: _ctx.showRemoveDialog, + "onUpdate:modelValue": _cache[7] || (_cache[7] = function ($event) { + return _ctx.showRemoveDialog = $event; + }), + onYes: _cache[8] || (_cache[8] = function ($event) { + return _ctx.deleteSite(); + }) + }, { + default: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withCtx"])(function () { + return [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", _hoisted_41, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("h2", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.removeDialogTitle), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("p", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_DeleteSiteExplanation')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", { + type: "button", + value: _ctx.translate('General_Yes'), + role: "yes" + }, null, 8, _hoisted_42), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", { + type: "button", + value: _ctx.translate('General_No'), + role: "no" + }, null, 8, _hoisted_43)])]; + }), + _: 1 + }, 8, ["modelValue"])], 10, _hoisted_1); +} +// CONCATENATED MODULE: ./plugins/SitesManager/vue/src/SiteFields/SiteFields.vue?vue&type=template&id=0cf86fbc + +// EXTERNAL MODULE: external "CorePluginsAdmin" +var external_CorePluginsAdmin_ = __webpack_require__("a5a2"); + +// CONCATENATED MODULE: ./plugins/SitesManager/vue/src/TimezoneStore/TimezoneStore.ts +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + +function TimezoneStore_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function TimezoneStore_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function TimezoneStore_createClass(Constructor, protoProps, staticProps) { if (protoProps) TimezoneStore_defineProperties(Constructor.prototype, protoProps); if (staticProps) TimezoneStore_defineProperties(Constructor, staticProps); return Constructor; } + +function TimezoneStore_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + + + +var TimezoneStore_TimezoneStore = /*#__PURE__*/function () { + function TimezoneStore() { + var _this = this; + + TimezoneStore_classCallCheck(this, TimezoneStore); + + TimezoneStore_defineProperty(this, "privateState", Object(external_commonjs_vue_commonjs2_vue_root_Vue_["reactive"])({ + timezones: [] + })); + + TimezoneStore_defineProperty(this, "timezones", Object(external_commonjs_vue_commonjs2_vue_root_Vue_["computed"])(function () { + return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["readonly"])(_this.privateState).timezones; + })); + + this.fetchTimezones(); + } + + TimezoneStore_createClass(TimezoneStore, [{ + key: "fetchTimezones", + value: function fetchTimezones() { + var _this2 = this; + + external_CoreHome_["AjaxHelper"].fetch({ + method: 'SitesManager.getTimezonesList' + }).then(function (grouped) { + var flattened = []; + Object.entries(grouped).forEach(function (_ref) { + var _ref2 = _slicedToArray(_ref, 2), + group = _ref2[0], + timezonesGroup = _ref2[1]; + + Object.entries(timezonesGroup).forEach(function (_ref3) { + var _ref4 = _slicedToArray(_ref3, 2), + label = _ref4[0], + code = _ref4[1]; + + flattened.push({ + group: group, + label: label, + code: code + }); + }); + }); + _this2.privateState.timezones = flattened; + }); + } + }]); + + return TimezoneStore; +}(); + +/* harmony default export */ var src_TimezoneStore_TimezoneStore = (Object(external_CoreHome_["lazyInitSingleton"])(TimezoneStore_TimezoneStore)); +// CONCATENATED MODULE: ./plugins/SitesManager/vue/src/CurrencyStore/CurrencyStore.ts +function CurrencyStore_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function CurrencyStore_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function CurrencyStore_createClass(Constructor, protoProps, staticProps) { if (protoProps) CurrencyStore_defineProperties(Constructor.prototype, protoProps); if (staticProps) CurrencyStore_defineProperties(Constructor, staticProps); return Constructor; } + +function CurrencyStore_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + + + +var CurrencyStore_CurrencyStore = /*#__PURE__*/function () { + function CurrencyStore() { + var _this = this; + + CurrencyStore_classCallCheck(this, CurrencyStore); + + CurrencyStore_defineProperty(this, "privateState", Object(external_commonjs_vue_commonjs2_vue_root_Vue_["reactive"])({ + currencies: {} + })); + + CurrencyStore_defineProperty(this, "currencies", Object(external_commonjs_vue_commonjs2_vue_root_Vue_["computed"])(function () { + return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["readonly"])(_this.privateState).currencies; + })); + + this.fetchCurrencies(); + } + + CurrencyStore_createClass(CurrencyStore, [{ + key: "fetchCurrencies", + value: function fetchCurrencies() { + var _this2 = this; + + external_CoreHome_["AjaxHelper"].fetch({ + method: 'SitesManager.getCurrencyList' + }).then(function (currencies) { + _this2.privateState.currencies = currencies; + }); + } + }]); + + return CurrencyStore; +}(); + +/* harmony default export */ var src_CurrencyStore_CurrencyStore = (Object(external_CoreHome_["lazyInitSingleton"])(CurrencyStore_CurrencyStore)); +// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-2!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist??ref--0-1!./plugins/SitesManager/vue/src/SiteFields/SiteFields.vue?vue&type=script&lang=ts +function SiteFieldsvue_type_script_lang_ts_slicedToArray(arr, i) { return SiteFieldsvue_type_script_lang_ts_arrayWithHoles(arr) || SiteFieldsvue_type_script_lang_ts_iterableToArrayLimit(arr, i) || SiteFieldsvue_type_script_lang_ts_unsupportedIterableToArray(arr, i) || SiteFieldsvue_type_script_lang_ts_nonIterableRest(); } + +function SiteFieldsvue_type_script_lang_ts_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function SiteFieldsvue_type_script_lang_ts_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return SiteFieldsvue_type_script_lang_ts_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return SiteFieldsvue_type_script_lang_ts_arrayLikeToArray(o, minLen); } + +function SiteFieldsvue_type_script_lang_ts_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function SiteFieldsvue_type_script_lang_ts_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function SiteFieldsvue_type_script_lang_ts_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + + + + + +var timezoneOptions = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["computed"])(function () { + return src_TimezoneStore_TimezoneStore.timezones.value.map(function (_ref) { + var group = _ref.group, + label = _ref.label, + code = _ref.code; + return { + group: group, + key: label, + value: code + }; + }); +}); + +function isSiteNew(site) { + return typeof site.idsite === 'undefined'; +} + +/* harmony default export */ var SiteFieldsvue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({ + props: { + site: { + type: Object, + required: true + }, + timezoneSupportEnabled: { + type: Boolean + }, + utcTime: { + type: Date, + required: true + }, + globalSettings: { + type: Object, + required: true + } + }, + data: function data() { + return { + isLoading: false, + editMode: false, + theSite: Object.assign({}, this.site), + measurableSettings: [], + settingValues: {}, + showRemoveDialog: false + }; + }, + components: { + MatomoDialog: external_CoreHome_["MatomoDialog"], + Field: external_CorePluginsAdmin_["Field"], + GroupedSettings: external_CorePluginsAdmin_["GroupedSettings"], + ActivityIndicator: external_CoreHome_["ActivityIndicator"] + }, + emits: ['delete', 'cancelEditSite', 'save'], + created: function created() { + this.onSiteChanged(); + }, + watch: { + site: function site() { + this.onSiteChanged(); + }, + measurableSettings: function measurableSettings(settings) { + if (!settings.length) { + return; + } + + var settingValues = {}; + settings.forEach(function (settingsForPlugin) { + settingsForPlugin.settings.forEach(function (setting) { + settingValues["".concat(settingsForPlugin.pluginName, ".").concat(setting.name)] = setting.value; + }); + }); + this.settingValues = settingValues; + } + }, + methods: { + onSiteChanged: function onSiteChanged() { + var site = this.site; + this.theSite = Object.assign({}, site); + var isNew = isSiteNew(site); + + if (isNew) { + var globalSettings = this.globalSettings; + this.theSite.timezone = globalSettings.defaultTimezone; + this.theSite.currency = globalSettings.defaultCurrency; + } + + var forcedEditSiteId = src_SiteTypesStore_SiteTypesStore.getEditSiteIdParameter(); + + if (isNew || forcedEditSiteId && "".concat(site.idsite) === forcedEditSiteId) { + this.editSite(); + } + }, + editSite: function editSite() { + var _this = this; + + this.editMode = true; + this.measurableSettings = []; + + if (isSiteNew(this.theSite)) { + if (!this.currentType) { + return; + } + + this.measurableSettings = this.currentType.settings || []; + return; + } + + this.isLoading = true; + external_CoreHome_["AjaxHelper"].fetch({ + method: 'SitesManager.getSiteSettings', + idSite: this.theSite.idsite + }).then(function (settings) { + _this.measurableSettings = settings; + }).finally(function () { + _this.isLoading = false; + }); + }, + saveSite: function saveSite() { + var _this2 = this; + + var values = { + siteName: this.theSite.name, + timezone: this.theSite.timezone, + currency: this.theSite.currency, + type: this.theSite.type, + settingValues: {} + }; + var isNew = isSiteNew(this.theSite); + var apiMethod = 'SitesManager.addSite'; + + if (!isNew) { + apiMethod = 'SitesManager.updateSite'; + values.idSite = this.theSite.idsite; + } // process measurable settings + + + Object.entries(this.settingValues).forEach(function (_ref2) { + var _ref3 = SiteFieldsvue_type_script_lang_ts_slicedToArray(_ref2, 2), + fullName = _ref3[0], + fieldValue = _ref3[1]; + + var _fullName$split = fullName.split('.'), + _fullName$split2 = SiteFieldsvue_type_script_lang_ts_slicedToArray(_fullName$split, 2), + pluginName = _fullName$split2[0], + name = _fullName$split2[1]; + + var settingValues = values.settingValues; + + if (!settingValues[pluginName]) { + settingValues[pluginName] = []; + } + + var value = fieldValue; + + if (fieldValue === false) { + value = '0'; + } else if (fieldValue === true) { + value = '1'; + } else if (Array.isArray(fieldValue)) { + value = fieldValue.filter(function (x) { + return !!x; + }); + } + + settingValues[pluginName].push({ + name: name, + value: value + }); + }); + external_CoreHome_["AjaxHelper"].post({ + method: apiMethod + }, values).then(function (response) { + _this2.editMode = false; + + if (!_this2.theSite.idsite && response && response.value) { + _this2.theSite.idsite = response.value; + } + + var notificationId = external_CoreHome_["NotificationsStore"].show({ + message: isNew ? Object(external_CoreHome_["translate"])('SitesManager_WebsiteCreated') : Object(external_CoreHome_["translate"])('SitesManager_WebsiteUpdated'), + context: 'success', + id: 'websitecreated', + type: 'transient' + }); + external_CoreHome_["NotificationsStore"].scrollToNotification(notificationId); + src_SiteTypesStore_SiteTypesStore.removeEditSiteIdParameterFromHash(); + + _this2.$emit('save', { + site: _this2.theSite, + settingValues: values.settingValues + }); + }); + }, + cancelEditSite: function cancelEditSite(site) { + this.editMode = false; + src_SiteTypesStore_SiteTypesStore.removeEditSiteIdParameterFromHash(); + this.$emit('cancelEditSite', site); + }, + deleteSite: function deleteSite() { + var _this3 = this; + + external_CoreHome_["AjaxHelper"].fetch({ + idSite: this.theSite.idsite, + module: 'API', + format: 'json', + method: 'SitesManager.deleteSite' + }).then(function () { + _this3.$emit('delete', _this3.theSite); + }); + } + }, + computed: { + availableTypes: function availableTypes() { + return src_SiteTypesStore_SiteTypesStore.types.value; + }, + setupUrl: function setupUrl() { + var site = this.theSite; + var suffix = ''; + var connector = ''; + + if (this.isInternalSetupUrl) { + suffix = external_CoreHome_["MatomoUrl"].stringify({ + idSite: site.idsite, + period: external_CoreHome_["MatomoUrl"].parsed.value.period, + date: external_CoreHome_["MatomoUrl"].parsed.value.date, + updated: 'false' + }); + connector = this.howToSetupUrl.indexOf('?') === -1 ? '?' : '&'; + } + + return "".concat(this.howToSetupUrl).concat(connector).concat(suffix); + }, + utcTimeIs: function utcTimeIs() { + var utcTime = this.utcTime; + + var formatTimePart = function formatTimePart(n) { + return n.toString().padStart(2, '0'); + }; + + var hours = formatTimePart(utcTime.getHours()); + var minutes = formatTimePart(utcTime.getMinutes()); + var seconds = formatTimePart(utcTime.getSeconds()); + var date = "".concat(Object(external_CoreHome_["format"])(this.utcTime), " ").concat(hours, ":").concat(minutes, ":").concat(seconds); + return Object(external_CoreHome_["translate"])('SitesManager_UTCTimeIs', date); + }, + timezones: function timezones() { + return timezoneOptions.value; + }, + currencies: function currencies() { + return src_CurrencyStore_CurrencyStore.currencies.value; + }, + currentType: function currentType() { + var site = this.site; + var type = src_SiteTypesStore_SiteTypesStore.typesById.value[site.type]; + + if (!type) { + return { + name: site.type + }; + } + + return type; + }, + howToSetupUrl: function howToSetupUrl() { + var type = this.currentType; + + if (!type) { + return undefined; + } + + return type.howToSetupUrl; + }, + isInternalSetupUrl: function isInternalSetupUrl() { + var howToSetupUrl = this.howToSetupUrl; + + if (!howToSetupUrl) { + return false; + } + + return "".concat(howToSetupUrl).substring(0, 1) === '?'; + }, + removeDialogTitle: function removeDialogTitle() { + return Object(external_CoreHome_["translate"])('SitesManager_DeleteConfirm', "\"".concat(this.theSite.name, "\" (idSite = ").concat(this.theSite.idsite, ")")); + } + } +})); +// CONCATENATED MODULE: ./plugins/SitesManager/vue/src/SiteFields/SiteFields.vue?vue&type=script&lang=ts + +// CONCATENATED MODULE: ./plugins/SitesManager/vue/src/SiteFields/SiteFields.vue + + + +SiteFieldsvue_type_script_lang_ts.render = render + +/* harmony default export */ var SiteFields = (SiteFieldsvue_type_script_lang_ts); +// CONCATENATED MODULE: ./plugins/SitesManager/vue/src/SiteFields/SiteFields.adapter.ts +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + + +/* harmony default export */ var SiteFields_adapter = (Object(external_CoreHome_["createAngularJsAdapter"])({ + component: SiteFields, + scope: { + site: { + angularJsBind: '<' + }, + timezoneSupportEnabled: { + angularJsBind: '<' + }, + utcTime: { + angularJsBind: '<' + }, + globalSettings: { + angularJsBind: '<' + } + }, + directiveName: 'matomoSiteFields', + $inject: ['$timeout'], + events: { + cancelEditSite: function cancelEditSite(site, vm, scope) { + scope.$parent.cancelEditSite(site); + }, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + delete: function _delete(site, vm, scope) { + var redirectParams = scope.redirectParams; // if the current idSite in the URL is the site we're deleting, then we have to make to + // change it. otherwise, if a user goes to another page, the invalid idSite may cause + // a fatal error. + + if (external_CoreHome_["MatomoUrl"].urlParsed.value.idSite === site.idsite) { + var sites = scope.adminSites.sites; + var otherSite = sites.find(function (s) { + return s.idsite !== site.idsite; + }); + + if (otherSite) { + redirectParams = Object.assign(Object.assign({}, redirectParams), {}, { + idSite: otherSite.idsite + }); + } + } + + external_CoreHome_["MatomoUrl"].updateUrl(Object.assign(Object.assign({}, external_CoreHome_["MatomoUrl"].urlParsed.value), {}, { + redirectParams: redirectParams + }), external_CoreHome_["MatomoUrl"].hashParsed.value); + }, + save: function save(_ref, vm, // eslint-disable-next-line @typescript-eslint/no-explicit-any + scope, element, attrs, controller, $timeout) { + var site = _ref.site, + settingValues = _ref.settingValues; + var texttareaArrayParams = ['excluded_ips', 'excluded_parameters', 'excluded_user_agents', 'sitesearch_keyword_parameters', 'sitesearch_category_parameters']; + var newSite = Object.assign({}, site); + Object.values(settingValues).forEach(function (settings) { + settings.forEach(function (setting) { + if (setting.name === 'urls') { + newSite.alias_urls = setting.value; + } else if (texttareaArrayParams.indexOf(setting.name) !== -1) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + newSite[setting.name] = setting.value.join(', '); + } else { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + newSite[setting.name] = setting.value; + } + }); + }); + window.$.extend(scope.site, newSite); + $timeout(); + vm.site = newSite; + } + } +})); +// CONCATENATED MODULE: ./plugins/SitesManager/vue/src/index.ts +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + + + + + + +// CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/entry-lib-no-default.js + + + + +/***/ }) + +/******/ }); +}); +//# sourceMappingURL=SitesManager.umd.js.map
\ No newline at end of file diff --git a/plugins/SitesManager/vue/dist/SitesManager.umd.min.js b/plugins/SitesManager/vue/dist/SitesManager.umd.min.js new file mode 100644 index 0000000000..efcc80b604 --- /dev/null +++ b/plugins/SitesManager/vue/dist/SitesManager.umd.min.js @@ -0,0 +1,33 @@ +(function(e,t){"object"===typeof exports&&"object"===typeof module?module.exports=t(require("CoreHome"),require("vue"),require("CorePluginsAdmin")):"function"===typeof define&&define.amd?define(["CoreHome",,"CorePluginsAdmin"],t):"object"===typeof exports?exports["SitesManager"]=t(require("CoreHome"),require("vue"),require("CorePluginsAdmin")):e["SitesManager"]=t(e["CoreHome"],e["Vue"],e["CorePluginsAdmin"])})("undefined"!==typeof self?self:this,(function(e,t,n){return function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="plugins/SitesManager/vue/dist/",n(n.s="fae3")}({"19dc":function(t,n){t.exports=e},"8bbf":function(e,n){e.exports=t},a5a2:function(e,t){e.exports=n},fae3:function(e,t,n){"use strict";if(n.r(t),n.d(t,"SiteTypesStore",(function(){return p})),n.d(t,"SiteFields",(function(){return Ae})),n.d(t,"CurrencyStore",(function(){return Ve})),n.d(t,"TimezoneStore",(function(){return ge})),"undefined"!==typeof window){var i=window.document.currentScript,r=i&&i.src.match(/(.+\/)[^/]+\.js(\?.*)?$/);r&&(n.p=r[1])}var a=n("19dc"),o=n("8bbf");function l(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function s(e,t,n){return t&&c(e.prototype,t),n&&c(e,n),e}function u(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e} +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */var d=window,m=d.$,b=function(){function e(){var t=this;l(this,e),u(this,"state",Object(o["reactive"])({typesById:{}})),u(this,"typesById",Object(o["computed"])((function(){return Object(o["readonly"])(t.state).typesById}))),u(this,"types",Object(o["computed"])((function(){return Object.values(t.typesById.value)}))),u(this,"response",void 0),this.fetchAvailableTypes()}return s(e,[{key:"fetchAvailableTypes",value:function(){var e=this;return this.response?Promise.resolve(this.response):(this.response=a["AjaxHelper"].fetch({method:"API.getAvailableMeasurableTypes",filter_limit:"-1"}).then((function(t){return t.forEach((function(t){e.state.typesById[t.id]=t})),e.types.value})),this.response)}},{key:"getEditSiteIdParameter",value:function(){var e=a["MatomoUrl"].hashParsed.value.editsiteid;if(e&&m.isNumeric(e))return e}},{key:"removeEditSiteIdParameterFromHash",value:function(){var e=Object.assign({},a["MatomoUrl"].hashParsed.value);delete e.editsiteid,a["MatomoUrl"].updateHash(e)}}]),e}(),p=Object(a["lazyInitSingleton"])(b); +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ +function f(){return{get typesById(){return Object(a["clone"])(p.typesById.value)},fetchTypeById:function(e){var t=this;return p.fetchAvailableTypes().then((function(){return Object(a["cloneThenApply"])(t.typesById[e])}))},fetchAvailableTypes:function(){return p.fetchAvailableTypes().then((function(e){return Object(a["cloneThenApply"])(e)}))},hasMultipleTypes:function(){return p.fetchAvailableTypes().then((function(e){return e&&Object.keys(e).length>1}))},removeEditSiteIdParameterFromHash:p.removeEditSiteIdParameterFromHash.bind(p),getEditSiteIdParameter:p.getEditSiteIdParameter.bind(p)}}window.angular.module("piwikApp.service").factory("sitesManagerTypeModel",f);var h=["idsite","type"],j={class:"card-content"},g={key:0,class:"row"},S={class:"col m3"},y={class:"title"},O={class:"title"},v=["target","title","href"],E={class:"col m4"},V={class:"title"},N={class:"title"},T={class:"title"},w={class:"title"},_={class:"col m4"},M={class:"title"},x=Object(o["createTextVNode"])(": "),k=["href"],D={key:0},C={class:"title"},A={key:1},I={class:"title"},B={key:2},P={class:"title"},U={class:"col m1 text-right"},z=["title"],H=Object(o["createElementVNode"])("span",{class:"icon-edit"},null,-1),F=[H],G=["title"],$=Object(o["createElementVNode"])("span",{class:"icon-delete"},null,-1),q=[$],L={key:1},J={class:"form-group row"},Y={class:"col s12 m6 input-field"},R=["placeholder"],W=Object(o["createElementVNode"])("div",{class:"col s12 m6"},null,-1),K={id:"timezoneHelpText",class:"inline-help-node"},Q={key:0},X=Object(o["createElementVNode"])("br",null,null,-1),Z=Object(o["createElementVNode"])("br",null,null,-1),ee={class:"editingSiteFooter"},te=["value"],ne={class:"ui-confirm"},ie=["value"],re=["value"];function ae(e,t,n,i,r,a){var l,c,s,u=this,d=Object(o["resolveComponent"])("ActivityIndicator"),m=Object(o["resolveComponent"])("GroupedSettings"),b=Object(o["resolveComponent"])("Field"),p=Object(o["resolveComponent"])("MatomoDialog");return Object(o["openBlock"])(),Object(o["createElementBlock"])("div",{class:Object(o["normalizeClass"])(["site card hoverable",{editingSite:!!e.editMode}]),idsite:e.theSite.idsite,type:e.theSite.type},[Object(o["createElementVNode"])("div",j,[e.editMode?Object(o["createCommentVNode"])("",!0):(Object(o["openBlock"])(),Object(o["createElementBlock"])("div",g,[Object(o["createElementVNode"])("div",S,[Object(o["createElementVNode"])("h4",null,Object(o["toDisplayString"])(e.theSite.name),1),Object(o["createElementVNode"])("ul",null,[Object(o["createElementVNode"])("li",null,[Object(o["createElementVNode"])("span",y,Object(o["toDisplayString"])(e.translate("General_Id"))+":",1),Object(o["createTextVNode"])(" "+Object(o["toDisplayString"])(e.theSite.idsite),1)]),Object(o["withDirectives"])(Object(o["createElementVNode"])("li",null,[Object(o["createElementVNode"])("span",O,Object(o["toDisplayString"])(e.translate("SitesManager_Type"))+":",1),Object(o["createTextVNode"])(" "+Object(o["toDisplayString"])(e.currentType.name),1)],512),[[o["vShow"],e.availableTypes.length>1]]),Object(o["withDirectives"])(Object(o["createElementVNode"])("li",null,[Object(o["createElementVNode"])("a",{target:e.isInternalSetupUrl?"_self":"_blank",title:e.translate("SitesManager_ShowTrackingTag"),href:e.setupUrl},Object(o["toDisplayString"])(e.translate("SitesManager_ShowTrackingTag")),9,v)],512),[[o["vShow"],e.theSite.idsite&&e.howToSetupUrl]])])]),Object(o["createElementVNode"])("div",E,[Object(o["createElementVNode"])("ul",null,[Object(o["createElementVNode"])("li",null,[Object(o["createElementVNode"])("span",V,Object(o["toDisplayString"])(e.translate("SitesManager_Timezone"))+":",1),Object(o["createTextVNode"])(" "+Object(o["toDisplayString"])(e.theSite.timezone_name),1)]),Object(o["createElementVNode"])("li",null,[Object(o["createElementVNode"])("span",N,Object(o["toDisplayString"])(e.translate("SitesManager_Currency"))+":",1),Object(o["createTextVNode"])(" "+Object(o["toDisplayString"])(e.theSite.currency_name),1)]),Object(o["withDirectives"])(Object(o["createElementVNode"])("li",null,[Object(o["createElementVNode"])("span",T,Object(o["toDisplayString"])(e.translate("Goals_Ecommerce"))+":",1),Object(o["createTextVNode"])(" "+Object(o["toDisplayString"])(e.translate("General_Yes")),1)],512),[[o["vShow"],1===e.theSite.ecommerce||"1"===e.theSite.ecommerce]]),Object(o["withDirectives"])(Object(o["createElementVNode"])("li",null,[Object(o["createElementVNode"])("span",w,Object(o["toDisplayString"])(e.translate("Actions_SubmenuSitesearch"))+":",1),Object(o["createTextVNode"])(" "+Object(o["toDisplayString"])(e.translate("General_Yes")),1)],512),[[o["vShow"],1===e.theSite.sitesearch||"1"===e.theSite.sitesearch]])])]),Object(o["createElementVNode"])("div",_,[Object(o["createElementVNode"])("ul",null,[Object(o["createElementVNode"])("li",null,[Object(o["createElementVNode"])("span",M,Object(o["toDisplayString"])(e.translate("SitesManager_Urls")),1),x,(Object(o["openBlock"])(!0),Object(o["createElementBlock"])(o["Fragment"],null,Object(o["renderList"])(e.theSite.alias_urls,(function(t,n){return Object(o["openBlock"])(),Object(o["createElementBlock"])("span",{key:t},[Object(o["createElementVNode"])("a",{target:"_blank",rel:"noreferrer noopener",href:t},Object(o["toDisplayString"])(t)+Object(o["toDisplayString"])(n===e.theSite.alias_urls.length-1?"":", "),9,k)])})),128))]),null!==(l=e.theSite.excluded_ips)&&void 0!==l&&l.length?(Object(o["openBlock"])(),Object(o["createElementBlock"])("li",D,[Object(o["createElementVNode"])("span",C,Object(o["toDisplayString"])(e.translate("SitesManager_ExcludedIps"))+":",1),Object(o["createTextVNode"])(" "+Object(o["toDisplayString"])(e.theSite.excluded_ips.split(/\s*,\s*/g).join(", ")),1)])):Object(o["createCommentVNode"])("",!0),null!==(c=e.theSite.excluded_parameters)&&void 0!==c&&c.length?(Object(o["openBlock"])(),Object(o["createElementBlock"])("li",A,[Object(o["createElementVNode"])("span",I,Object(o["toDisplayString"])(e.translate("SitesManager_ExcludedParameters"))+":",1),Object(o["createTextVNode"])(" "+Object(o["toDisplayString"])(e.theSite.excluded_parameters.split(/\s*,\s*/g).join(", ")),1)])):Object(o["createCommentVNode"])("",!0),null!==(s=e.theSite.excluded_user_agents)&&void 0!==s&&s.length?(Object(o["openBlock"])(),Object(o["createElementBlock"])("li",B,[Object(o["createElementVNode"])("span",P,Object(o["toDisplayString"])(e.translate("SitesManager_ExcludedUserAgents"))+":",1),Object(o["createTextVNode"])(" "+Object(o["toDisplayString"])(e.theSite.excluded_user_agents.split(/\s*,\s*/g).join(", ")),1)])):Object(o["createCommentVNode"])("",!0)])]),Object(o["createElementVNode"])("div",U,[Object(o["createElementVNode"])("ul",null,[Object(o["createElementVNode"])("li",null,[Object(o["createElementVNode"])("button",{class:"table-action",onClick:t[0]||(t[0]=function(t){return e.editSite()}),title:e.translate("General_Edit")},F,8,z)]),Object(o["createElementVNode"])("li",null,[Object(o["withDirectives"])(Object(o["createElementVNode"])("button",{class:"table-action",onClick:t[1]||(t[1]=function(e){return u.showRemoveDialog=!0}),title:e.translate("General_Delete")},q,8,G),[[o["vShow"],e.theSite.idsite]])])])])])),e.editMode?(Object(o["openBlock"])(),Object(o["createElementBlock"])("div",L,[Object(o["createElementVNode"])("div",J,[Object(o["createElementVNode"])("div",Y,[Object(o["withDirectives"])(Object(o["createElementVNode"])("input",{type:"text","onUpdate:modelValue":t[2]||(t[2]=function(t){return e.theSite.name=t}),maxlength:"90",placeholder:e.translate("General_Name")},null,8,R),[[o["vModelText"],e.theSite.name]]),Object(o["createElementVNode"])("label",null,Object(o["toDisplayString"])(e.translate("General_Name")),1)]),W]),Object(o["createVNode"])(d,{loading:e.isLoading},null,8,["loading"]),(Object(o["openBlock"])(!0),Object(o["createElementBlock"])(o["Fragment"],null,Object(o["renderList"])(e.measurableSettings,(function(t){return Object(o["openBlock"])(),Object(o["createElementBlock"])("div",{key:t.pluginName},[Object(o["createVNode"])(m,{"group-name":t.pluginName,settings:t.settings,"all-setting-values":e.settingValues,onChange:function(n){return e.settingValues["".concat(t.pluginName,".").concat(n.name)]=n.value}},null,8,["group-name","settings","all-setting-values","onChange"])])})),128)),Object(o["createVNode"])(b,{uicontrol:"select",name:"currency",modelValue:e.theSite.currency,"onUpdate:modelValue":t[3]||(t[3]=function(t){return e.theSite.currency=t}),title:e.translate("SitesManager_Currency"),"inline-help":e.translate("SitesManager_CurrencySymbolWillBeUsedForGoals"),options:e.currencies},null,8,["modelValue","title","inline-help","options"]),Object(o["createVNode"])(b,{uicontrol:"select",name:"timezone",modelValue:e.theSite.timezone,"onUpdate:modelValue":t[4]||(t[4]=function(t){return e.theSite.timezone=t}),title:e.translate("SitesManager_Timezone"),"inline-help":"#timezoneHelpText",options:e.timezones},null,8,["modelValue","title","options"]),Object(o["createElementVNode"])("div",K,[Object(o["createElementVNode"])("div",null,[e.timezoneSupportEnabled?Object(o["createCommentVNode"])("",!0):(Object(o["openBlock"])(),Object(o["createElementBlock"])("span",Q,[Object(o["createTextVNode"])(Object(o["toDisplayString"])(e.translate("SitesManager_AdvancedTimezoneSupportNotFound"))+" ",1),X])),Object(o["createTextVNode"])(" "+Object(o["toDisplayString"])(e.utcTimeIs)+" ",1),Z,Object(o["createTextVNode"])(" "+Object(o["toDisplayString"])(e.translate("SitesManager_ChangingYourTimezoneWillOnlyAffectDataForward")),1)])]),Object(o["createElementVNode"])("div",ee,[Object(o["withDirectives"])(Object(o["createElementVNode"])("input",{type:"submit",class:"btn",value:e.translate("General_Save"),onClick:t[5]||(t[5]=function(t){return e.saveSite()})},null,8,te),[[o["vShow"],!e.isLoading]]),Object(o["createElementVNode"])("button",{class:"btn btn-link",onClick:t[6]||(t[6]=function(t){return e.cancelEditSite(e.site)})},Object(o["toDisplayString"])(e.translate("General_Cancel","","")),1)])])):Object(o["createCommentVNode"])("",!0)]),Object(o["createVNode"])(p,{modelValue:e.showRemoveDialog,"onUpdate:modelValue":t[7]||(t[7]=function(t){return e.showRemoveDialog=t}),onYes:t[8]||(t[8]=function(t){return e.deleteSite()})},{default:Object(o["withCtx"])((function(){return[Object(o["createElementVNode"])("div",ne,[Object(o["createElementVNode"])("h2",null,Object(o["toDisplayString"])(e.removeDialogTitle),1),Object(o["createElementVNode"])("p",null,Object(o["toDisplayString"])(e.translate("SitesManager_DeleteSiteExplanation")),1),Object(o["createElementVNode"])("input",{type:"button",value:e.translate("General_Yes"),role:"yes"},null,8,ie),Object(o["createElementVNode"])("input",{type:"button",value:e.translate("General_No"),role:"no"},null,8,re)])]})),_:1},8,["modelValue"])],10,h)}var oe=n("a5a2");function le(e,t){return me(e)||de(e,t)||se(e,t)||ce()}function ce(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function se(e,t){if(e){if("string"===typeof e)return ue(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ue(e,t):void 0}}function ue(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=new Array(t);n<t;n++)i[n]=e[n];return i}function de(e,t){var n=null==e?null:"undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var i,r,a=[],o=!0,l=!1;try{for(n=n.call(e);!(o=(i=n.next()).done);o=!0)if(a.push(i.value),t&&a.length===t)break}catch(c){l=!0,r=c}finally{try{o||null==n["return"]||n["return"]()}finally{if(l)throw r}}return a}}function me(e){if(Array.isArray(e))return e}function be(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function pe(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function fe(e,t,n){return t&&pe(e.prototype,t),n&&pe(e,n),e}function he(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e} +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */var je=function(){function e(){var t=this;be(this,e),he(this,"privateState",Object(o["reactive"])({timezones:[]})),he(this,"timezones",Object(o["computed"])((function(){return Object(o["readonly"])(t.privateState).timezones}))),this.fetchTimezones()}return fe(e,[{key:"fetchTimezones",value:function(){var e=this;a["AjaxHelper"].fetch({method:"SitesManager.getTimezonesList"}).then((function(t){var n=[];Object.entries(t).forEach((function(e){var t=le(e,2),i=t[0],r=t[1];Object.entries(r).forEach((function(e){var t=le(e,2),r=t[0],a=t[1];n.push({group:i,label:r,code:a})}))})),e.privateState.timezones=n}))}}]),e}(),ge=Object(a["lazyInitSingleton"])(je);function Se(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function ye(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function Oe(e,t,n){return t&&ye(e.prototype,t),n&&ye(e,n),e}function ve(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e} +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */var Ee=function(){function e(){var t=this;Se(this,e),ve(this,"privateState",Object(o["reactive"])({currencies:{}})),ve(this,"currencies",Object(o["computed"])((function(){return Object(o["readonly"])(t.privateState).currencies}))),this.fetchCurrencies()}return Oe(e,[{key:"fetchCurrencies",value:function(){var e=this;a["AjaxHelper"].fetch({method:"SitesManager.getCurrencyList"}).then((function(t){e.privateState.currencies=t}))}}]),e}(),Ve=Object(a["lazyInitSingleton"])(Ee);function Ne(e,t){return xe(e)||Me(e,t)||we(e,t)||Te()}function Te(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function we(e,t){if(e){if("string"===typeof e)return _e(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_e(e,t):void 0}}function _e(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=new Array(t);n<t;n++)i[n]=e[n];return i}function Me(e,t){var n=null==e?null:"undefined"!==typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var i,r,a=[],o=!0,l=!1;try{for(n=n.call(e);!(o=(i=n.next()).done);o=!0)if(a.push(i.value),t&&a.length===t)break}catch(c){l=!0,r=c}finally{try{o||null==n["return"]||n["return"]()}finally{if(l)throw r}}return a}}function xe(e){if(Array.isArray(e))return e}var ke=Object(o["computed"])((function(){return ge.timezones.value.map((function(e){var t=e.group,n=e.label,i=e.code;return{group:t,key:n,value:i}}))}));function De(e){return"undefined"===typeof e.idsite}var Ce=Object(o["defineComponent"])({props:{site:{type:Object,required:!0},timezoneSupportEnabled:{type:Boolean},utcTime:{type:Date,required:!0},globalSettings:{type:Object,required:!0}},data:function(){return{isLoading:!1,editMode:!1,theSite:Object.assign({},this.site),measurableSettings:[],settingValues:{},showRemoveDialog:!1}},components:{MatomoDialog:a["MatomoDialog"],Field:oe["Field"],GroupedSettings:oe["GroupedSettings"],ActivityIndicator:a["ActivityIndicator"]},emits:["delete","cancelEditSite","save"],created:function(){this.onSiteChanged()},watch:{site:function(){this.onSiteChanged()},measurableSettings:function(e){if(e.length){var t={};e.forEach((function(e){e.settings.forEach((function(n){t["".concat(e.pluginName,".").concat(n.name)]=n.value}))})),this.settingValues=t}}},methods:{onSiteChanged:function(){var e=this.site;this.theSite=Object.assign({},e);var t=De(e);if(t){var n=this.globalSettings;this.theSite.timezone=n.defaultTimezone,this.theSite.currency=n.defaultCurrency}var i=p.getEditSiteIdParameter();(t||i&&"".concat(e.idsite)===i)&&this.editSite()},editSite:function(){var e=this;if(this.editMode=!0,this.measurableSettings=[],De(this.theSite)){if(!this.currentType)return;this.measurableSettings=this.currentType.settings||[]}else this.isLoading=!0,a["AjaxHelper"].fetch({method:"SitesManager.getSiteSettings",idSite:this.theSite.idsite}).then((function(t){e.measurableSettings=t})).finally((function(){e.isLoading=!1}))},saveSite:function(){var e=this,t={siteName:this.theSite.name,timezone:this.theSite.timezone,currency:this.theSite.currency,type:this.theSite.type,settingValues:{}},n=De(this.theSite),i="SitesManager.addSite";n||(i="SitesManager.updateSite",t.idSite=this.theSite.idsite),Object.entries(this.settingValues).forEach((function(e){var n=Ne(e,2),i=n[0],r=n[1],a=i.split("."),o=Ne(a,2),l=o[0],c=o[1],s=t.settingValues;s[l]||(s[l]=[]);var u=r;!1===r?u="0":!0===r?u="1":Array.isArray(r)&&(u=r.filter((function(e){return!!e}))),s[l].push({name:c,value:u})})),a["AjaxHelper"].post({method:i},t).then((function(i){e.editMode=!1,!e.theSite.idsite&&i&&i.value&&(e.theSite.idsite=i.value);var r=a["NotificationsStore"].show({message:n?Object(a["translate"])("SitesManager_WebsiteCreated"):Object(a["translate"])("SitesManager_WebsiteUpdated"),context:"success",id:"websitecreated",type:"transient"});a["NotificationsStore"].scrollToNotification(r),p.removeEditSiteIdParameterFromHash(),e.$emit("save",{site:e.theSite,settingValues:t.settingValues})}))},cancelEditSite:function(e){this.editMode=!1,p.removeEditSiteIdParameterFromHash(),this.$emit("cancelEditSite",e)},deleteSite:function(){var e=this;a["AjaxHelper"].fetch({idSite:this.theSite.idsite,module:"API",format:"json",method:"SitesManager.deleteSite"}).then((function(){e.$emit("delete",e.theSite)}))}},computed:{availableTypes:function(){return p.types.value},setupUrl:function(){var e=this.theSite,t="",n="";return this.isInternalSetupUrl&&(t=a["MatomoUrl"].stringify({idSite:e.idsite,period:a["MatomoUrl"].parsed.value.period,date:a["MatomoUrl"].parsed.value.date,updated:"false"}),n=-1===this.howToSetupUrl.indexOf("?")?"?":"&"),"".concat(this.howToSetupUrl).concat(n).concat(t)},utcTimeIs:function(){var e=this.utcTime,t=function(e){return e.toString().padStart(2,"0")},n=t(e.getHours()),i=t(e.getMinutes()),r=t(e.getSeconds()),o="".concat(Object(a["format"])(this.utcTime)," ").concat(n,":").concat(i,":").concat(r);return Object(a["translate"])("SitesManager_UTCTimeIs",o)},timezones:function(){return ke.value},currencies:function(){return Ve.currencies.value},currentType:function(){var e=this.site,t=p.typesById.value[e.type];return t||{name:e.type}},howToSetupUrl:function(){var e=this.currentType;if(e)return e.howToSetupUrl},isInternalSetupUrl:function(){var e=this.howToSetupUrl;return!!e&&"?"==="".concat(e).substring(0,1)},removeDialogTitle:function(){return Object(a["translate"])("SitesManager_DeleteConfirm",'"'.concat(this.theSite.name,'" (idSite = ').concat(this.theSite.idsite,")"))}}});Ce.render=ae;var Ae=Ce; +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */Object(a["createAngularJsAdapter"])({component:Ae,scope:{site:{angularJsBind:"<"},timezoneSupportEnabled:{angularJsBind:"<"},utcTime:{angularJsBind:"<"},globalSettings:{angularJsBind:"<"}},directiveName:"matomoSiteFields",$inject:["$timeout"],events:{cancelEditSite:function(e,t,n){n.$parent.cancelEditSite(e)},delete:function(e,t,n){var i=n.redirectParams;if(a["MatomoUrl"].urlParsed.value.idSite===e.idsite){var r=n.adminSites.sites,o=r.find((function(t){return t.idsite!==e.idsite}));o&&(i=Object.assign(Object.assign({},i),{},{idSite:o.idsite}))}a["MatomoUrl"].updateUrl(Object.assign(Object.assign({},a["MatomoUrl"].urlParsed.value),{},{redirectParams:i}),a["MatomoUrl"].hashParsed.value)},save:function(e,t,n,i,r,a,o){var l=e.site,c=e.settingValues,s=["excluded_ips","excluded_parameters","excluded_user_agents","sitesearch_keyword_parameters","sitesearch_category_parameters"],u=Object.assign({},l);Object.values(c).forEach((function(e){e.forEach((function(e){"urls"===e.name?u.alias_urls=e.value:-1!==s.indexOf(e.name)?u[e.name]=e.value.join(", "):u[e.name]=e.value}))})),window.$.extend(n.site,u),o(),t.site=u}}})}})})); +//# sourceMappingURL=SitesManager.umd.min.js.map
\ No newline at end of file diff --git a/plugins/SitesManager/vue/dist/umd.metadata.json b/plugins/SitesManager/vue/dist/umd.metadata.json new file mode 100644 index 0000000000..6eb1c55162 --- /dev/null +++ b/plugins/SitesManager/vue/dist/umd.metadata.json @@ -0,0 +1,6 @@ +{ + "dependsOn": [ + "CorePluginsAdmin", + "CoreHome" + ] +}
\ No newline at end of file diff --git a/plugins/SitesManager/vue/src/CurrencyStore/CurrencyStore.ts b/plugins/SitesManager/vue/src/CurrencyStore/CurrencyStore.ts new file mode 100644 index 0000000000..e8a594ba83 --- /dev/null +++ b/plugins/SitesManager/vue/src/CurrencyStore/CurrencyStore.ts @@ -0,0 +1,35 @@ +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +import { reactive, readonly, computed } from 'vue'; +import { AjaxHelper, lazyInitSingleton } from 'CoreHome'; + +interface CurrencyStoreState { + currencies: Record<string, string>; +} + +class CurrencyStore { + private privateState = reactive<CurrencyStoreState>({ + currencies: {}, + }); + + readonly currencies = computed(() => readonly(this.privateState).currencies); + + constructor() { + this.fetchCurrencies(); + } + + private fetchCurrencies() { + AjaxHelper.fetch<CurrencyStoreState['currencies']>({ + method: 'SitesManager.getCurrencyList', + }).then((currencies) => { + this.privateState.currencies = currencies; + }); + } +} + +export default lazyInitSingleton(CurrencyStore); diff --git a/plugins/SitesManager/vue/src/SiteFields/SiteFields.adapter.ts b/plugins/SitesManager/vue/src/SiteFields/SiteFields.adapter.ts new file mode 100644 index 0000000000..76638453ab --- /dev/null +++ b/plugins/SitesManager/vue/src/SiteFields/SiteFields.adapter.ts @@ -0,0 +1,98 @@ +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +import { ITimeoutService } from 'angular'; +import { createAngularJsAdapter, Site, MatomoUrl } from 'CoreHome'; +import { Setting } from 'CorePluginsAdmin'; +import SiteFields from './SiteFields.vue'; + +export default createAngularJsAdapter<[ITimeoutService]>({ + component: SiteFields, + scope: { + site: { + angularJsBind: '<', + }, + timezoneSupportEnabled: { + angularJsBind: '<', + }, + utcTime: { + angularJsBind: '<', + }, + globalSettings: { + angularJsBind: '<', + }, + }, + directiveName: 'matomoSiteFields', + $inject: ['$timeout'], + events: { + cancelEditSite(site: Site, vm, scope: any) { + scope.$parent.cancelEditSite(site); + }, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + delete(site: Site, vm, scope: any) { + let { redirectParams } = scope; + + // if the current idSite in the URL is the site we're deleting, then we have to make to + // change it. otherwise, if a user goes to another page, the invalid idSite may cause + // a fatal error. + if (MatomoUrl.urlParsed.value.idSite === site.idsite) { + const sites = scope.adminSites.sites as Site[]; + const otherSite = sites.find((s) => s.idsite !== site.idsite); + + if (otherSite) { + redirectParams = { ...redirectParams, idSite: otherSite.idsite }; + } + } + + MatomoUrl.updateUrl( + { + ...MatomoUrl.urlParsed.value, + redirectParams, + }, + MatomoUrl.hashParsed.value, + ); + }, + save( + { site, settingValues }: { site: Site, settingValues: Record<string, Setting[]> }, + vm, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + scope: any, + element, + attrs, + controller, + $timeout, + ) { + const texttareaArrayParams = [ + 'excluded_ips', + 'excluded_parameters', + 'excluded_user_agents', + 'sitesearch_keyword_parameters', + 'sitesearch_category_parameters', + ]; + + const newSite: Site = { ...site }; + Object.values(settingValues).forEach((settings) => { + settings.forEach((setting) => { + if (setting.name === 'urls') { + newSite.alias_urls = setting.value as string[]; + } else if (texttareaArrayParams.indexOf(setting.name) !== -1) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (newSite as any)[setting.name] = (setting.value as string[]).join(', '); + } else { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (newSite as any)[setting.name] = setting.value; + } + }); + }); + + window.$.extend(scope.site, newSite); + $timeout(); + + vm.site = newSite; + }, + }, +}); diff --git a/plugins/SitesManager/vue/src/SiteFields/SiteFields.vue b/plugins/SitesManager/vue/src/SiteFields/SiteFields.vue new file mode 100644 index 0000000000..cc375d9c8c --- /dev/null +++ b/plugins/SitesManager/vue/src/SiteFields/SiteFields.vue @@ -0,0 +1,502 @@ +<!-- + Matomo - free/libre analytics platform + @link https://matomo.org + @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later +--> + +<template> + <div + class="site card hoverable" + :idsite="theSite.idsite" + :type="theSite.type" + :class="{ 'editingSite': !!editMode }" + > + <div class="card-content"> + <div class="row" v-if="!editMode"> + <div class="col m3"> + <h4>{{ theSite.name }}</h4> + <ul> + <li><span class="title">{{ translate('General_Id') }}:</span> {{ theSite.idsite }}</li> + <li v-show="availableTypes.length > 1"> + <span class="title">{{ translate('SitesManager_Type') }}:</span> + {{ currentType.name }} + </li> + <li v-show="theSite.idsite && howToSetupUrl"> + <a + :target="isInternalSetupUrl ? '_self' : '_blank'" + :title="translate('SitesManager_ShowTrackingTag')" + :href="setupUrl" + > + {{ translate('SitesManager_ShowTrackingTag') }} + </a> + </li> + </ul> + </div> + <div class="col m4"> + <ul> + <li> + <span class="title">{{ translate('SitesManager_Timezone') }}:</span> + {{ theSite.timezone_name }} + </li> + <li> + <span class="title">{{ translate('SitesManager_Currency') }}:</span> + {{ theSite.currency_name }} + </li> + <li v-show="theSite.ecommerce === 1 || theSite.ecommerce === '1'"> + <span class="title">{{ translate('Goals_Ecommerce') }}:</span> + {{ translate('General_Yes') }} + </li> + <li v-show="theSite.sitesearch === 1 || theSite.sitesearch === '1'"> + <span class="title">{{ translate('Actions_SubmenuSitesearch') }}:</span> + {{ translate('General_Yes') }} + </li> + </ul> + </div> + <div class="col m4"> + <ul> + <li> + <span class="title">{{ translate('SitesManager_Urls') }}</span>: + <span v-for="(url, index) in theSite.alias_urls" :key="url"> + <a target=_blank rel="noreferrer noopener" :href="url"> + {{ url }}{{ index === theSite.alias_urls.length - 1 ? '' : ', ' }} + </a> + </span> + </li> + <li v-if="theSite.excluded_ips?.length"> + <span class="title">{{ translate('SitesManager_ExcludedIps') }}:</span> + {{ theSite.excluded_ips.split(/\s*,\s*/g).join(', ') }} + </li> + <li v-if="theSite.excluded_parameters?.length"> + <span class="title">{{ translate('SitesManager_ExcludedParameters') }}:</span> + {{ theSite.excluded_parameters.split(/\s*,\s*/g).join(', ') }} + </li> + <li v-if="theSite.excluded_user_agents?.length"> + <span class="title">{{ translate('SitesManager_ExcludedUserAgents') }}:</span> + {{ theSite.excluded_user_agents.split(/\s*,\s*/g).join(', ') }} + </li> + </ul> + </div> + <div class="col m1 text-right"> + <ul> + <li> + <button + class="table-action" + @click="editSite()" + :title="translate('General_Edit')" + > + <span class="icon-edit"></span> + </button> + </li> + <li> + <button + class="table-action" + v-show="theSite.idsite" + @click="this.showRemoveDialog = true" + :title="translate('General_Delete')" + > + <span class="icon-delete"></span> + </button> + </li> + </ul> + </div> + </div> + + <div v-if="editMode"> + + <div class="form-group row"> + <div class="col s12 m6 input-field"> + <input + type="text" + v-model="theSite.name" + maxlength="90" + :placeholder="translate('General_Name')" + /> + <label>{{ translate('General_Name') }}</label> + </div> + <div class="col s12 m6"></div> + </div> + + <ActivityIndicator :loading="isLoading"/> + + <div v-for="settingsPerPlugin in measurableSettings" :key="settingsPerPlugin.pluginName"> + <GroupedSettings + :group-name="settingsPerPlugin.pluginName" + :settings="settingsPerPlugin.settings" + :all-setting-values="settingValues" + @change="settingValues[`${settingsPerPlugin.pluginName}.${$event.name}`] = $event.value" + /> + </div> + + <Field + uicontrol="select" + name="currency" + v-model="theSite.currency" + :title="translate('SitesManager_Currency')" + :inline-help="translate('SitesManager_CurrencySymbolWillBeUsedForGoals')" + :options="currencies" + /> + + <Field + uicontrol="select" + name="timezone" + v-model="theSite.timezone" + :title="translate('SitesManager_Timezone')" + :inline-help="'#timezoneHelpText'" + :options="timezones" + /> + + <div id="timezoneHelpText" class="inline-help-node"> + <div> + <span v-if="!timezoneSupportEnabled"> + {{ translate('SitesManager_AdvancedTimezoneSupportNotFound') }} + <br/> + </span> + + {{ utcTimeIs }} + <br/> + {{ translate('SitesManager_ChangingYourTimezoneWillOnlyAffectDataForward') }} + </div> + </div> + + <div class="editingSiteFooter"> + <input + v-show="!isLoading" + type="submit" + class="btn" + :value="translate('General_Save')" + @click="saveSite()" + /> + <button + class="btn btn-link" + @click="cancelEditSite(site)" + > + {{ translate('General_Cancel', '', '') }} + </button> + </div> + + </div> + </div> + + <MatomoDialog + v-model="showRemoveDialog" + @yes="deleteSite()" + > + <div class="ui-confirm"> + <h2>{{ removeDialogTitle }}</h2> + + <p>{{ translate('SitesManager_DeleteSiteExplanation') }}</p> + + <input type="button" :value="translate('General_Yes')" role="yes"/> + <input type="button" :value="translate('General_No')" role="no" /> + </div> + </MatomoDialog> + </div> +</template> + +<script lang="ts"> +import { computed, DeepReadonly, defineComponent } from 'vue'; +import { + Site, + MatomoUrl, + ActivityIndicator, + format, + translate, + MatomoDialog, + AjaxHelper, + NotificationsStore, +} from 'CoreHome'; +import { + Field, + GroupedSettings, + SettingsForSinglePlugin, + Setting, +} from 'CorePluginsAdmin'; +import TimezoneStore from '../TimezoneStore/TimezoneStore'; +import CurrencyStore from '../CurrencyStore/CurrencyStore'; +import SiteTypesStore from '../SiteTypesStore/SiteTypesStore'; +import SiteType from '../SiteTypesStore/SiteType'; + +interface SiteFieldsState { + isLoading: boolean; + editMode: boolean; + theSite: Site; + measurableSettings: DeepReadonly<SettingsForSinglePlugin[]>; + settingValues: Record<string, unknown>; + showRemoveDialog: boolean; +} + +interface CreateEditSiteResponse { + value: string; +} + +const timezoneOptions = computed( + () => TimezoneStore.timezones.value.map(({ group, label, code }) => ({ + group, + key: label, + value: code, + })), +); + +function isSiteNew(site: Site) { + return typeof site.idsite === 'undefined'; +} + +export default defineComponent({ + props: { + site: { + type: Object, + required: true, + }, + timezoneSupportEnabled: { + type: Boolean, + }, + utcTime: { + type: Date, + required: true, + }, + globalSettings: { + type: Object, + required: true, + }, + }, + data(): SiteFieldsState { + return { + isLoading: false, + editMode: false, + theSite: { ...(this.site as Site) }, + measurableSettings: [], + settingValues: {}, + showRemoveDialog: false, + }; + }, + components: { + MatomoDialog, + Field, + GroupedSettings, + ActivityIndicator, + }, + emits: ['delete', 'cancelEditSite', 'save'], + created() { + this.onSiteChanged(); + }, + watch: { + site() { + this.onSiteChanged(); + }, + measurableSettings(settings: SettingsForSinglePlugin[]) { + if (!settings.length) { + return; + } + + const settingValues: Record<string, unknown> = {}; + settings.forEach((settingsForPlugin) => { + settingsForPlugin.settings.forEach((setting) => { + settingValues[`${settingsForPlugin.pluginName}.${setting.name}`] = setting.value; + }); + }); + this.settingValues = settingValues; + }, + }, + methods: { + onSiteChanged() { + const site = this.site as Site; + + this.theSite = { ...site }; + + const isNew = isSiteNew(site); + + if (isNew) { + const globalSettings = this.globalSettings as Record<string, string>; + this.theSite.timezone = globalSettings.defaultTimezone; + this.theSite.currency = globalSettings.defaultCurrency; + } + + const forcedEditSiteId = SiteTypesStore.getEditSiteIdParameter(); + if (isNew + || (forcedEditSiteId && `${site.idsite}` === forcedEditSiteId) + ) { + this.editSite(); + } + }, + editSite() { + this.editMode = true; + + this.measurableSettings = []; + + if (isSiteNew(this.theSite)) { + if (!this.currentType) { + return; + } + + this.measurableSettings = this.currentType.settings || []; + return; + } + + this.isLoading = true; + AjaxHelper.fetch<SettingsForSinglePlugin[]>({ + method: 'SitesManager.getSiteSettings', + idSite: this.theSite.idsite, + }).then((settings) => { + this.measurableSettings = settings; + }).finally(() => { + this.isLoading = false; + }); + }, + saveSite() { + const values: Record<string, unknown> = { + siteName: this.theSite.name, + timezone: this.theSite.timezone, + currency: this.theSite.currency, + type: this.theSite.type, + settingValues: {} as Record<string, Setting[]>, + }; + + const isNew = isSiteNew(this.theSite); + + let apiMethod = 'SitesManager.addSite'; + if (!isNew) { + apiMethod = 'SitesManager.updateSite'; + values.idSite = this.theSite.idsite; + } + + // process measurable settings + Object.entries(this.settingValues).forEach(([fullName, fieldValue]) => { + const [pluginName, name] = fullName.split('.'); + + const settingValues = values.settingValues as Record<string, Setting[]>; + if (!settingValues[pluginName]) { + settingValues[pluginName] = []; + } + + let value = fieldValue; + if (fieldValue === false) { + value = '0'; + } else if (fieldValue === true) { + value = '1'; + } else if (Array.isArray(fieldValue)) { + value = fieldValue.filter((x) => !!x); + } + + settingValues[pluginName].push({ + name, + value, + }); + }); + + AjaxHelper.post<CreateEditSiteResponse>( + { + method: apiMethod, + }, + values, + ).then((response) => { + this.editMode = false; + + if (!this.theSite.idsite && response && response.value) { + this.theSite.idsite = response.value; + } + + const notificationId = NotificationsStore.show({ + message: isNew + ? translate('SitesManager_WebsiteCreated') + : translate('SitesManager_WebsiteUpdated'), + context: 'success', + id: 'websitecreated', + type: 'transient', + }); + NotificationsStore.scrollToNotification(notificationId); + + SiteTypesStore.removeEditSiteIdParameterFromHash(); + + this.$emit('save', { site: this.theSite, settingValues: values.settingValues }); + }); + }, + cancelEditSite(site: Site) { + this.editMode = false; + + SiteTypesStore.removeEditSiteIdParameterFromHash(); + + this.$emit('cancelEditSite', site); + }, + deleteSite() { + AjaxHelper.fetch({ + idSite: this.theSite.idsite, + module: 'API', + format: 'json', + method: 'SitesManager.deleteSite', + }).then(() => { + this.$emit('delete', this.theSite); + }); + }, + }, + computed: { + availableTypes() { + return SiteTypesStore.types.value; + }, + setupUrl() { + const site = this.theSite as Site; + + let suffix = ''; + let connector = ''; + if (this.isInternalSetupUrl) { + suffix = MatomoUrl.stringify({ + idSite: site.idsite, + period: MatomoUrl.parsed.value.period, + date: MatomoUrl.parsed.value.date, + updated: 'false', + }); + + connector = this.howToSetupUrl!.indexOf('?') === -1 ? '?' : '&'; + } + return `${this.howToSetupUrl}${connector}${suffix}`; + }, + utcTimeIs() { + const utcTime = this.utcTime as Date; + + const formatTimePart = (n: number) => n.toString().padStart(2, '0'); + + const hours = formatTimePart(utcTime.getHours()); + const minutes = formatTimePart(utcTime.getMinutes()); + const seconds = formatTimePart(utcTime.getSeconds()); + + const date = `${format(this.utcTime)} ${hours}:${minutes}:${seconds}`; + return translate('SitesManager_UTCTimeIs', date); + }, + timezones() { + return timezoneOptions.value; + }, + currencies() { + return CurrencyStore.currencies.value; + }, + currentType(): DeepReadonly<SiteType> { + const site = this.site as Site; + const type = SiteTypesStore.typesById.value[site.type]; + if (!type) { + return { name: site.type } as SiteType; + } + return type; + }, + howToSetupUrl() { + const type = this.currentType; + if (!type) { + return undefined; + } + + return type.howToSetupUrl; + }, + isInternalSetupUrl() { + const { howToSetupUrl } = this; + if (!howToSetupUrl) { + return false; + } + + return (`${howToSetupUrl}`).substring(0, 1) === '?'; + }, + removeDialogTitle() { + return translate( + 'SitesManager_DeleteConfirm', + `"${this.theSite.name}" (idSite = ${this.theSite.idsite})`, + ); + }, + }, +}); +</script> diff --git a/plugins/SitesManager/vue/src/SiteTypesStore/SiteType.ts b/plugins/SitesManager/vue/src/SiteTypesStore/SiteType.ts new file mode 100644 index 0000000000..32457cd4d5 --- /dev/null +++ b/plugins/SitesManager/vue/src/SiteTypesStore/SiteType.ts @@ -0,0 +1,19 @@ +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +import { + SettingsForSinglePlugin, +} from 'CorePluginsAdmin'; + +interface SiteType { + id: string; + name: string; + howToSetupUrl?: string; + settings?: SettingsForSinglePlugin[]; +} + +export default SiteType; diff --git a/plugins/SitesManager/vue/src/SiteTypesStore/SiteTypesStore.adapter.ts b/plugins/SitesManager/vue/src/SiteTypesStore/SiteTypesStore.adapter.ts new file mode 100644 index 0000000000..7f3c2ac706 --- /dev/null +++ b/plugins/SitesManager/vue/src/SiteTypesStore/SiteTypesStore.adapter.ts @@ -0,0 +1,41 @@ +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +import { DeepReadonly } from 'vue'; +import { cloneThenApply, clone } from 'CoreHome'; +import SiteTypesStore from './SiteTypesStore'; +import SiteType from './SiteType'; + +function sitesManagerTypeModelAdapter() { + return { + get typesById() { + return clone(SiteTypesStore.typesById.value); + }, + fetchTypeById(typeId: string): Promise<DeepReadonly<SiteType>> { + return SiteTypesStore.fetchAvailableTypes().then( + () => cloneThenApply(this.typesById[typeId]), + ); + }, + fetchAvailableTypes(): ReturnType<typeof SiteTypesStore['fetchAvailableTypes']> { + return SiteTypesStore.fetchAvailableTypes().then((types) => cloneThenApply(types)); + }, + hasMultipleTypes(): Promise<boolean> { + return SiteTypesStore.fetchAvailableTypes().then( + (types) => types && Object.keys(types).length > 1, + ); + }, + removeEditSiteIdParameterFromHash: + SiteTypesStore.removeEditSiteIdParameterFromHash.bind(SiteTypesStore), + getEditSiteIdParameter: + SiteTypesStore.getEditSiteIdParameter.bind(SiteTypesStore), + }; +} + +window.angular.module('piwikApp.service').factory( + 'sitesManagerTypeModel', + sitesManagerTypeModelAdapter, +); diff --git a/plugins/SitesManager/vue/src/SiteTypesStore/SiteTypesStore.ts b/plugins/SitesManager/vue/src/SiteTypesStore/SiteTypesStore.ts new file mode 100644 index 0000000000..e21e7d4e7d --- /dev/null +++ b/plugins/SitesManager/vue/src/SiteTypesStore/SiteTypesStore.ts @@ -0,0 +1,73 @@ +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +import { + reactive, + readonly, + computed, +} from 'vue'; +import { AjaxHelper, MatomoUrl, lazyInitSingleton } from 'CoreHome'; +import SiteType from './SiteType'; + +interface SiteTypesStoreState { + typesById: Record<string, SiteType>; +} + +type AvailableTypesResponse = SiteType[]; + +const { $ } = window; + +class SiteTypesStore { + private state = reactive<SiteTypesStoreState>({ + typesById: {}, + }); + + public readonly typesById = computed(() => readonly(this.state).typesById); + + public readonly types = computed(() => Object.values(this.typesById.value)); + + private response?: Promise<SiteTypesStore['types']['value']>; + + constructor() { + this.fetchAvailableTypes(); + } + + public fetchAvailableTypes(): Promise<SiteTypesStore['types']['value']> { + if (this.response) { + return Promise.resolve(this.response); + } + + this.response = AjaxHelper.fetch<AvailableTypesResponse>({ + method: 'API.getAvailableMeasurableTypes', + filter_limit: '-1', + }).then((types) => { + types.forEach((type) => { + this.state.typesById[type.id] = type; + }); + + return this.types.value; + }); + + return this.response; + } + + public getEditSiteIdParameter(): string|undefined { + const editsiteid = MatomoUrl.hashParsed.value.editsiteid as string; + if (editsiteid && $.isNumeric(editsiteid)) { + return editsiteid; + } + return undefined; + } + + public removeEditSiteIdParameterFromHash(): void { + const params = { ...MatomoUrl.hashParsed.value }; + delete params.editsiteid; + MatomoUrl.updateHash(params); + } +} + +export default lazyInitSingleton(SiteTypesStore); diff --git a/plugins/SitesManager/vue/src/TimezoneStore/TimezoneStore.ts b/plugins/SitesManager/vue/src/TimezoneStore/TimezoneStore.ts new file mode 100644 index 0000000000..f13da0bc8d --- /dev/null +++ b/plugins/SitesManager/vue/src/TimezoneStore/TimezoneStore.ts @@ -0,0 +1,53 @@ +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +import { reactive, readonly, computed } from 'vue'; +import { AjaxHelper, lazyInitSingleton } from 'CoreHome'; + +interface Timezone { + group: string; + label: string; + code: string; +} + +interface TimezoneStoreState { + timezones: Timezone[]; +} + +type GetTimezoneListResponse = Record<string, Record<string, string>>; + +class TimezoneStore { + private privateState = reactive<TimezoneStoreState>({ + timezones: [], + }); + + readonly timezones = computed(() => readonly(this.privateState).timezones); + + constructor() { + this.fetchTimezones(); + } + + private fetchTimezones() { + AjaxHelper.fetch<GetTimezoneListResponse>({ + method: 'SitesManager.getTimezonesList', + }).then((grouped) => { + const flattened: Timezone[] = []; + Object.entries(grouped).forEach(([group, timezonesGroup]) => { + Object.entries(timezonesGroup).forEach(([label, code]) => { + flattened.push({ + group, + label, + code, + }); + }); + }); + this.privateState.timezones = flattened; + }); + } +} + +export default lazyInitSingleton(TimezoneStore); diff --git a/plugins/SitesManager/vue/src/index.ts b/plugins/SitesManager/vue/src/index.ts new file mode 100644 index 0000000000..b14d6d93a2 --- /dev/null +++ b/plugins/SitesManager/vue/src/index.ts @@ -0,0 +1,15 @@ +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +import './SiteTypesStore/SiteTypesStore.adapter'; +import './SiteFields/SiteFields.adapter'; + +export { default as SiteType } from './SiteTypesStore/SiteType'; +export { default as SiteTypesStore } from './SiteTypesStore/SiteTypesStore'; +export { default as SiteFields } from './SiteFields/SiteFields.vue'; +export { default as CurrencyStore } from './CurrencyStore/CurrencyStore'; +export { default as TimezoneStore } from './TimezoneStore/TimezoneStore'; diff --git a/tests/UI/expected-screenshots/MeasurableManager_add_measurable_view.png b/tests/UI/expected-screenshots/MeasurableManager_add_measurable_view.png index 11964d63f0..0287f98efe 100644 --- a/tests/UI/expected-screenshots/MeasurableManager_add_measurable_view.png +++ b/tests/UI/expected-screenshots/MeasurableManager_add_measurable_view.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2365513514dd729ace3d8f957ed252b443cd652645d3b2e286c166dbcc14e51f -size 488893 +oid sha256:09eed6808102baf5b62fabbe5cb071dc8601c7d72c9144a4c6fbf8149f5e4aa7 +size 488887 |