Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordizzy <diosmosis@users.noreply.github.com>2022-02-02 17:47:20 +0300
committerGitHub <noreply@github.com>2022-02-02 17:47:20 +0300
commit974511bb495e9b9b36585743dad39b17bb35d9bb (patch)
tree2b2d5b07c7e451fc0a93f775f8ffd2db61726fcf
parentf20c4cbed3de7f3fcc49810d5721b257d5a56d43 (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>
-rw-r--r--plugins/CoreHome/vue/dist/CoreHome.umd.js62
-rw-r--r--plugins/CoreHome/vue/dist/CoreHome.umd.min.js4
-rw-r--r--plugins/CoreHome/vue/src/SiteSelector/Site.ts8
-rw-r--r--plugins/CoreHome/vue/src/SiteSelector/SiteSelector.vue12
-rw-r--r--plugins/CorePluginsAdmin/vue/dist/CorePluginsAdmin.umd.js63
-rw-r--r--plugins/CorePluginsAdmin/vue/dist/CorePluginsAdmin.umd.min.js2
-rw-r--r--plugins/CorePluginsAdmin/vue/src/GroupedSettings/GroupedSetting.vue14
-rw-r--r--plugins/CorePluginsAdmin/vue/src/PluginSettings/PluginSettings.vue13
-rw-r--r--plugins/CorePluginsAdmin/vue/src/PluginSettings/Setting.ts14
-rw-r--r--plugins/CorePluginsAdmin/vue/src/PluginSettings/SettingsForSinglePlugin.ts15
-rw-r--r--plugins/CorePluginsAdmin/vue/src/index.ts2
-rw-r--r--plugins/IntranetMeasurable/tests/UI/expected-screenshots/IntranetMeasurable_intranet_create.png4
-rw-r--r--plugins/SitesManager/SitesManager.php4
-rw-r--r--plugins/SitesManager/angularjs/sites-manager/edit-trigger.directive.js30
-rw-r--r--plugins/SitesManager/angularjs/sites-manager/multiline-field.directive.html6
-rw-r--r--plugins/SitesManager/angularjs/sites-manager/multiline-field.directive.js49
-rw-r--r--plugins/SitesManager/angularjs/sites-manager/sites-manager-site.controller.js230
-rw-r--r--plugins/SitesManager/angularjs/sites-manager/sites-manager-type-model.js65
-rw-r--r--plugins/SitesManager/angularjs/sites-manager/sites-manager.controller.js4
-rw-r--r--plugins/SitesManager/stylesheets/SitesManager.less4
-rw-r--r--plugins/SitesManager/templates/dialogs/dialogs.html1
-rw-r--r--plugins/SitesManager/templates/dialogs/remove-dialog.html9
-rw-r--r--plugins/SitesManager/templates/sites-list/site-fields.html113
-rw-r--r--plugins/SitesManager/templates/sites-list/sites-list.html14
-rw-r--r--plugins/SitesManager/tests/UI/expected-screenshots/SitesManager_site_edit_url.png4
-rw-r--r--plugins/SitesManager/vue/dist/SitesManager.umd.js1069
-rw-r--r--plugins/SitesManager/vue/dist/SitesManager.umd.min.js33
-rw-r--r--plugins/SitesManager/vue/dist/umd.metadata.json6
-rw-r--r--plugins/SitesManager/vue/src/CurrencyStore/CurrencyStore.ts35
-rw-r--r--plugins/SitesManager/vue/src/SiteFields/SiteFields.adapter.ts98
-rw-r--r--plugins/SitesManager/vue/src/SiteFields/SiteFields.vue502
-rw-r--r--plugins/SitesManager/vue/src/SiteTypesStore/SiteType.ts19
-rw-r--r--plugins/SitesManager/vue/src/SiteTypesStore/SiteTypesStore.adapter.ts41
-rw-r--r--plugins/SitesManager/vue/src/SiteTypesStore/SiteTypesStore.ts73
-rw-r--r--plugins/SitesManager/vue/src/TimezoneStore/TimezoneStore.ts53
-rw-r--r--plugins/SitesManager/vue/src/index.ts15
-rw-r--r--tests/UI/expected-screenshots/MeasurableManager_add_measurable_view.png4
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