From 5ae81f880dbbd7ab3fc0d223d7a9b4409ae548eb Mon Sep 17 00:00:00 2001 From: dizzy Date: Fri, 19 Nov 2021 06:18:57 -0800 Subject: [Vue] migrate siteselector directive and quick-access directive (#18292) * migrating RateFeature and ReviewLinks + adding AjaxHelper.fetch utility method (all untested) * get ratefeature component to work, modify matomodialog component to use v-model, add event parameters to createAngularAdapter, allow translate to use variadic args or one string array + rebuild * remove ratefeature angularjs files * rebuild + make vue mapping property optional in createANgularJsAdapter * migrate enrichedheadline and get to work * fix test * fix translate * fix another translate issue & migrate contentblock directive * fix anchor links, not including the "/" causes angularjs to fail (also on 4.x-dev) * update expected screenshots * fix ui test * fix some test failures * fix nested transclude issue * remove content block files * fix icon spacing that occurs due to angularjs inserting empty comments in between nodes while vue 3 does not * update some screenshots * update screenshot (actually fixes an alignment issue) * update screenshot * first pass at converting comparisons service/component * get new code to build and load without error in the UI * debugging * getting basic functionaltiy to work * Update _dataTable.twig * fix UI test failure + URL encoding/angularjs issue causing back button to not work * fix order of operations issue * built vue files * using ref in setup() is not needed to access this.$refs * Convert comparisons service angularjs tests to comparison store typescript tests. * migrate piwik-date-picker directive * migrate date range picker component (changed invalid date in input handling to just reset back to the previous date since it was easier in vue to do that) * migrate period-date-picker component (using composition api more when easier for migration) * convert piwik-expand-onclick directive to vue directive * migrate expand on hover directive to vue directive * fix variable reference * build * Add materialize-css @types and migrate piwik-dropdown-menu. * migrate focus-anywhere-but-here directive to vue directive * migrate focus-if directive * migrate menudropdown directive * forgot to remove old files * built vue files * first pass at migrating notification directive, notification service and parts of UI.Notification to Vue * rewrite URL handling to use computed properties in a URL store + do the same for other dependent data in the comparison store to allow vues to subscribe to the properties for changes to global state * fix some tests * some more fixes * more fixes + disallow modifications to MatomoUrl state * get angularjs unit tests to pass + fix a couple more issues * another fix * fix bad merge * self review + fixes * remove old fix as it may not be needed anymore * empty string is not a valid date + do not report invalid date exception just rethrow * update screenshots and try to fix random failure * use jquery $destroy event instead of scope one since the scope one is broadcasted * rangeChange event must be triggered once on mount * initialize startDateText/endDateText correctly * use jquery $destroy event instead of angularjs one * built vue files * fix menudropdown.directive.js reference * load vue in installation/updater & correctly make focusanywherebuthere stateful * correctly implement stateful directives for ExpandOnClick/ExpandOnHover * less tweak (angularjs comment removal) * fix submenu check * quick type fix * load vue in installation workflow * add broadcast.js to Installation workflow + do not fail in pk_translate if no translations are loaded * update expected screenshots (spacing of arrow changed because of angularjs comment no longer being there) * start moving Notification class code to notifications store * fix prop type * fix html escaping * built vue files * get toast and other transitions to work + fix broken toast * move all of notification.js to NotificationStore * wait for angular to be initialized to post events to avoid loading race condition * get scroll to notification to work + get initialization of notification groups to work * correct unmount + remove notifications service file * fix some test failures * re add accidentally removed (?) file * remove no longer needed file * Add CoreHome UMD in CoreUpdater/Installation. * self review * fix type + add default value * remove file from JS list * fix test * fix UI tests * set correct type in users manager notification and allow scope values to be transformed in createAngularAdapter * start migrating siteselector * small addition * migrate rest of site selector code + make some breaking changes to function signatures in createAngularJsAdapter * disable webpack asset size hints/warnings + get siteselector code to build * fixing some bugs * fix some more issues (allow specifing require in createAngularJsAdapter and make AjaxHelper promises abortable) * get npm test to pass * a couple more fixes * remove existing files * convert quick-access directive and use shared code/state with site selector * remove site selector model * fix more issues and get UI tests to pass for quickaccess * remove debugging code / todo * fix initial value * add back a $timeout() * fixing tests, the post blur scope.$apply()s are apparently required for angularjs to function properly * fixing more UI test failures * rebuild * fix vue build * why were these deleted? * remove debug code * fix css class issue + update expected screenshots * rebuild CoreHome * revert styling change * built vue files * get focus-if to work and remove debugging return; * rebuilt vue * should not need to specify type there * built CoreHome * built vue files * apply review feedback * get auto clearing behavior to work in site selector * fix a couple more bugs * rebuild vue * escape htmle entities in site name * tweak Co-authored-by: sgiehl --- plugins/CoreHome/CoreHome.php | 8 +- .../common/directives/autocomplete-matched.js | 2 + .../quick-access/quick-access.controller.js | 90 -- .../quick-access/quick-access.directive.html | 48 - .../quick-access/quick-access.directive.js | 287 ---- .../quick-access/quick-access.directive.less | 65 - .../siteselector/siteselector-model.service.js | 137 -- .../siteselector/siteselector.controller.js | 69 - .../siteselector/siteselector.directive.html | 73 - .../siteselector/siteselector.directive.js | 112 -- .../siteselector/siteselector.directive.less | 185 --- plugins/CoreHome/javascripts/broadcast.js | 73 +- plugins/CoreHome/javascripts/top_controls.js | 8 +- plugins/CoreHome/vue/dist/CoreHome.umd.js | 1614 +++++++++++++++++--- plugins/CoreHome/vue/dist/CoreHome.umd.min.js | 102 +- plugins/CoreHome/vue/src/AjaxHelper/AjaxHelper.ts | 14 +- .../vue/src/MatomoDialog/MatomoDialog.adapter.ts | 8 +- plugins/CoreHome/vue/src/MatomoUrl/MatomoUrl.ts | 12 + .../vue/src/MenuDropdown/MenuDropdown.adapter.ts | 36 + .../vue/src/MenuDropdown/MenuDropdown.less | 94 ++ .../CoreHome/vue/src/MenuDropdown/MenuDropdown.vue | 133 ++ .../vue/src/Menudropdown/Menudropdown.adapter.ts | 36 - .../vue/src/Menudropdown/Menudropdown.less | 94 -- .../CoreHome/vue/src/Menudropdown/Menudropdown.vue | 133 -- .../vue/src/QuickAccess/QuickAccess.adapter.ts | 23 + .../CoreHome/vue/src/QuickAccess/QuickAccess.less | 65 + .../CoreHome/vue/src/QuickAccess/QuickAccess.vue | 465 ++++++ .../CoreHome/vue/src/SiteSelector/AllSitesLink.vue | 36 + .../vue/src/SiteSelector/SiteSelector.adapter.ts | 86 ++ .../vue/src/SiteSelector/SiteSelector.less | 185 +++ .../CoreHome/vue/src/SiteSelector/SiteSelector.vue | 370 +++++ .../CoreHome/vue/src/SiteSelector/SitesStore.ts | 131 ++ plugins/CoreHome/vue/src/createAngularJsAdapter.ts | 19 +- plugins/CoreHome/vue/src/debounce.ts | 19 + plugins/CoreHome/vue/src/index.ts | 9 +- 35 files changed, 3232 insertions(+), 1609 deletions(-) delete mode 100644 plugins/CoreHome/angularjs/quick-access/quick-access.controller.js delete mode 100644 plugins/CoreHome/angularjs/quick-access/quick-access.directive.html delete mode 100644 plugins/CoreHome/angularjs/quick-access/quick-access.directive.js delete mode 100644 plugins/CoreHome/angularjs/quick-access/quick-access.directive.less delete mode 100644 plugins/CoreHome/angularjs/siteselector/siteselector-model.service.js delete mode 100644 plugins/CoreHome/angularjs/siteselector/siteselector.controller.js delete mode 100644 plugins/CoreHome/angularjs/siteselector/siteselector.directive.html delete mode 100644 plugins/CoreHome/angularjs/siteselector/siteselector.directive.js delete mode 100644 plugins/CoreHome/angularjs/siteselector/siteselector.directive.less create mode 100644 plugins/CoreHome/vue/src/MenuDropdown/MenuDropdown.adapter.ts create mode 100644 plugins/CoreHome/vue/src/MenuDropdown/MenuDropdown.less create mode 100644 plugins/CoreHome/vue/src/MenuDropdown/MenuDropdown.vue delete mode 100644 plugins/CoreHome/vue/src/Menudropdown/Menudropdown.adapter.ts delete mode 100644 plugins/CoreHome/vue/src/Menudropdown/Menudropdown.less delete mode 100644 plugins/CoreHome/vue/src/Menudropdown/Menudropdown.vue create mode 100644 plugins/CoreHome/vue/src/QuickAccess/QuickAccess.adapter.ts create mode 100644 plugins/CoreHome/vue/src/QuickAccess/QuickAccess.less create mode 100644 plugins/CoreHome/vue/src/QuickAccess/QuickAccess.vue create mode 100644 plugins/CoreHome/vue/src/SiteSelector/AllSitesLink.vue create mode 100644 plugins/CoreHome/vue/src/SiteSelector/SiteSelector.adapter.ts create mode 100644 plugins/CoreHome/vue/src/SiteSelector/SiteSelector.less create mode 100644 plugins/CoreHome/vue/src/SiteSelector/SiteSelector.vue create mode 100644 plugins/CoreHome/vue/src/SiteSelector/SitesStore.ts create mode 100644 plugins/CoreHome/vue/src/debounce.ts (limited to 'plugins/CoreHome') diff --git a/plugins/CoreHome/CoreHome.php b/plugins/CoreHome/CoreHome.php index 4464aa1cd8..818db16504 100644 --- a/plugins/CoreHome/CoreHome.php +++ b/plugins/CoreHome/CoreHome.php @@ -138,7 +138,7 @@ class CoreHome extends \Piwik\Plugin $stylesheets[] = "plugins/CoreHome/stylesheets/layout.less"; $stylesheets[] = "plugins/CoreHome/vue/src/EnrichedHeadline/EnrichedHeadline.less"; $stylesheets[] = "plugins/CoreHome/vue/src/Notification/Notification.less"; - $stylesheets[] = "plugins/CoreHome/angularjs/quick-access/quick-access.directive.less"; + $stylesheets[] = "plugins/CoreHome/vue/src/QuickAccess/QuickAccess.less"; $stylesheets[] = "plugins/CoreHome/stylesheets/selector.less"; $stylesheets[] = "plugins/CoreHome/angularjs/reporting-page/reportingpage.directive.less"; $stylesheets[] = "plugins/CoreHome/angularjs/report-export/reportexport.popover.less"; @@ -229,9 +229,6 @@ class CoreHome extends \Piwik\Plugin $jsFiles[] = "plugins/CoreHome/angularjs/progressbar/progressbar.directive.js"; $jsFiles[] = "plugins/CoreHome/angularjs/sparkline/sparkline.component.js"; - $jsFiles[] = "plugins/CoreHome/angularjs/siteselector/siteselector-model.service.js"; - $jsFiles[] = "plugins/CoreHome/angularjs/siteselector/siteselector.controller.js"; - $jsFiles[] = "plugins/CoreHome/angularjs/siteselector/siteselector.directive.js"; $jsFiles[] = "plugins/CoreHome/angularjs/content-intro/content-intro.directive.js"; @@ -257,9 +254,6 @@ class CoreHome extends \Piwik\Plugin $jsFiles[] = "plugins/CoreHome/angularjs/reporting-menu/reportingmenu-model.js"; $jsFiles[] = "plugins/CoreHome/angularjs/reporting-menu/reportingmenu.directive.js"; - $jsFiles[] = "plugins/CoreHome/angularjs/quick-access/quick-access.controller.js"; - $jsFiles[] = "plugins/CoreHome/angularjs/quick-access/quick-access.directive.js"; - $jsFiles[] = "plugins/CoreHome/angularjs/content-table/content-table.directive.js"; diff --git a/plugins/CoreHome/angularjs/common/directives/autocomplete-matched.js b/plugins/CoreHome/angularjs/common/directives/autocomplete-matched.js index 867e0c58ec..faad0b04da 100644 --- a/plugins/CoreHome/angularjs/common/directives/autocomplete-matched.js +++ b/plugins/CoreHome/angularjs/common/directives/autocomplete-matched.js @@ -14,6 +14,8 @@ * *
{{ name }}
* + * + * @deprecated */ (function () { angular.module('piwikApp.directive').directive('piwikAutocompleteMatched', piwikAutocompleteMatched); diff --git a/plugins/CoreHome/angularjs/quick-access/quick-access.controller.js b/plugins/CoreHome/angularjs/quick-access/quick-access.controller.js deleted file mode 100644 index f9f28c923c..0000000000 --- a/plugins/CoreHome/angularjs/quick-access/quick-access.controller.js +++ /dev/null @@ -1,90 +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('QuickAccessController', QuickAccessController); - - QuickAccessController.$inject = ['$scope', '$filter', 'siteSelectorModel']; - - function QuickAccessController($scope, $filter, siteSelectorModel){ - - this.menuItems = []; - this.numMenuItems = 0; - this.sitesModel = siteSelectorModel; - - this.onKeypress = function (event) { - var areSearchResultsDisplayed = $scope.search && $scope.search.term && $scope.view && $scope.view.searchActive; - var isTabKey = 9 == event.which; - var isEscKey = 27 == event.which; - - if (38 == event.which) { - $scope.highlightPreviousItem(); - event.preventDefault(); - } else if (40 == event.which) { - $scope.highlightNextItem(); - event.preventDefault(); - } else if (13 == event.which) { - $scope.clickQuickAccessMenuItem(); - } else if (isTabKey && areSearchResultsDisplayed) { - $scope.deactivateSearch(); - } else if (isEscKey && areSearchResultsDisplayed) { - $scope.deactivateSearch(); - } - }; - - this.searchMenu = function (searchTerm) { - searchTerm = searchTerm.toLowerCase(); - - var index = -1; - var menuItemsIndex = {}; - var menuItems = []; - - var moveToCategory = function (i, submenuItem) { - submenuItem = angular.copy(submenuItem); // force rerender of element to prevent weird side effects - submenuItem.menuIndex = ++index; // needed for proper highlighting with arrow keys - - var category = submenuItem.category; - if (!(category in menuItemsIndex)) { - menuItems.push({title: category, items: []}); - menuItemsIndex[category] = menuItems.length - 1; - } - - var indexOfCategory = menuItemsIndex[category]; - menuItems[indexOfCategory].items.push(submenuItem); - }; - - $scope.resetSearchIndex(); - - if ($scope.hasSitesSelector) { - this.sitesModel.searchSite(searchTerm); - } - - var topMenuItems = $filter('filter')($scope.getTopMenuItems(), searchTerm); - var leftMenuItems = $filter('filter')($scope.getLeftMenuItems(), searchTerm); - var segmentItems = $filter('filter')($scope.getSegmentItems(), searchTerm); - - $.each(topMenuItems, moveToCategory); - $.each(leftMenuItems, moveToCategory); - $.each(segmentItems, moveToCategory); - - this.numMenuItems = topMenuItems.length + leftMenuItems.length + segmentItems.length; - this.menuItems = menuItems; - }; - - this.selectSite = function (idsite) { - this.sitesModel.loadSite(idsite); - }; - - this.selectMenuItem = function (index) { - $scope.selectMenuItem(index); - }; - - if (typeof initTopControls !== 'undefined' && initTopControls) { - initTopControls(); - } - - } -})(); diff --git a/plugins/CoreHome/angularjs/quick-access/quick-access.directive.html b/plugins/CoreHome/angularjs/quick-access/quick-access.directive.html deleted file mode 100644 index c28c8f1d1f..0000000000 --- a/plugins/CoreHome/angularjs/quick-access/quick-access.directive.html +++ /dev/null @@ -1,48 +0,0 @@ -
- - - -
diff --git a/plugins/CoreHome/angularjs/quick-access/quick-access.directive.js b/plugins/CoreHome/angularjs/quick-access/quick-access.directive.js deleted file mode 100644 index 7417261c8e..0000000000 --- a/plugins/CoreHome/angularjs/quick-access/quick-access.directive.js +++ /dev/null @@ -1,287 +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 - */ - -/** - * Usage: - *
...
- * Will show dialog once showDialog evaluates to true. - * - * Will execute the "executeMyFunction" function in the current scope once the yes button is pressed. - */ -(function () { - angular.module('piwikApp').directive('piwikQuickAccess', QuickAccessDirective); - - QuickAccessDirective.$inject = ['$rootElement', '$timeout', 'piwik', '$filter']; - - function QuickAccessDirective ($rootElement, $timeout, piwik, $filter) { - - return { - restrict: 'A', - replace: true, - scope: {}, - templateUrl: 'plugins/CoreHome/angularjs/quick-access/quick-access.directive.html?cb=' + piwik.cacheBuster, - controller: 'QuickAccessController', - controllerAs: 'quickAccess', - link: function (scope, element, attrs) { - - var menuIndex = -1; // the menu index is used to identify which element to click - var topMenuItems = []; // cache for top menu items - var leftMenuItems = []; // cache for left menu items - var segmentItems = []; // cache for segment items - var hasSegmentSelector = angular.element('.segmentEditorPanel').length; - scope.hasSitesSelector = angular.element('.top_controls [piwik-siteselector]').length; - - - var translate = $filter('translate'); - var searchAreasTitle = ''; - var searchAreas = [translate('CoreHome_MenuEntries')]; - - if (hasSegmentSelector) { - searchAreas.push(translate('CoreHome_Segments')); - } - - if (scope.hasSitesSelector) { - searchAreas.push(translate('SitesManager_Sites')); - } - - while (searchAreas.length) { - searchAreasTitle += searchAreas.shift(); - if (searchAreas.length >= 2) { - searchAreasTitle += ', '; - } else if (searchAreas.length === 1) { - searchAreasTitle += ' ' + translate('General_And') + ' '; - } - } - - scope.quickAccessTitle = translate('CoreHome_QuickAccessTitle', searchAreasTitle); - - function trim(str) { - if (str) { - return str.replace(/^\s+|\s+$/g,''); - } - return str; - } - - scope.getTopMenuItems = function() - { - if (topMenuItems && topMenuItems.length) { - return topMenuItems; - } - - var category = _pk_translate('CoreHome_Menu'); - - $rootElement.find('nav .sidenav li > a').each(function (index, element) { - var $element = $(element); - - var text = trim($element.text()); - - if (!text) { - text = trim($element.attr('title')); // possibly a icon, use title instead - } - - if (text) { - topMenuItems.push({name: text, index: ++menuIndex, category: category}); - $element.attr('quick_access', menuIndex); - } - }); - - return topMenuItems; - }; - - scope.getLeftMenuItems = function () - { - if (leftMenuItems && leftMenuItems.length) { - return leftMenuItems; - } - - $rootElement.find('#secondNavBar .menuTab').each(function (index, element) { - var $element = angular.element(element); - var category = trim($element.find('> .item').text()); - - if (category && -1 !== category.lastIndexOf("\n")) { - // remove "\n\nMenu" - category = trim(category.substr(0, category.lastIndexOf("\n"))); - } - - $element.find('li .item').each(function (i, element) { - var $element = angular.element(element); - var text = trim($element.text()); - if (text) { - leftMenuItems.push({name: text, category: category, index: ++menuIndex}); - $element.attr('quick_access', menuIndex); - } - }); - - }); - - return leftMenuItems; - }; - - scope.getSegmentItems = function() - { - if (!hasSegmentSelector) { - return []; - } - - if (segmentItems && segmentItems.length) { - return segmentItems; - } - - var category = _pk_translate('CoreHome_Segments'); - - $rootElement.find('.segmentList [data-idsegment]').each(function (index, element) { - var $element = angular.element(element); - var text = trim($element.find('.segname').text()); - - if (text) { - segmentItems.push({name: text, category: category, index: ++menuIndex}); - $element.attr('quick_access', menuIndex); - } - }); - - return segmentItems; - }; - - scope.activateSearch = function() - { - scope.$eval('view.searchActive = true'); - $timeout(function () { - scope.$apply(); - }, 0); - }; - - scope.deactivateSearch = function() - { - scope.$eval('search.term = ""'); - scope.$eval('view.searchActive = false'); - element.find('input').blur(); - $timeout(function () { - scope.$apply(); - }, 0); - }; - - function isElementInViewport(element) { - - var rect = element.getBoundingClientRect(); - - return ( - rect.top >= 0 && - rect.left >= 0 && - rect.bottom <= $(window).height() && - rect.right <= $(window).width() - ); - } - - function getCurrentlySelectedElement(index) - { - var results = element.find('li.result'); - if (results && results.length && results[scope.search.index]) { - return $(results[scope.search.index]); - } - } - - function makeSureSelectedItemIsInViewport() { - var element = getCurrentlySelectedElement(); - - if (element && element[0] && !isElementInViewport(element[0])) { - scrollFirstElementIntoView(element); - } - } - - function scrollFirstElementIntoView(element) - { - if (element && element[0] && element[0].scrollIntoView) { - // make sure search is visible - element[0].scrollIntoView(); - } - } - - scope.highlightPreviousItem = function() - { - if (0 >= (scope.search.index - 1)) { - scope.search.index = 0; - } else { - scope.search.index--; - } - makeSureSelectedItemIsInViewport(); - }; - - scope.resetSearchIndex = function () { - scope.search.index = 0; - makeSureSelectedItemIsInViewport(); - }; - - scope.highlightNextItem = function() - { - var numTotal = element.find('li.result').length; - - if (numTotal <= (scope.search.index + 1)) { - scope.search.index = numTotal - 1; - } else { - scope.search.index++; - } - - makeSureSelectedItemIsInViewport(); - }; - - scope.clickQuickAccessMenuItem = function() - { - var selectedMenuElement = getCurrentlySelectedElement(); - if (selectedMenuElement) { - $timeout(function () { - selectedMenuElement.click(); - }, 20); - } - }; - - scope.selectMenuItem = function(index) - { - var target = $rootElement.find('[quick_access=' + index + ']'); - - if (target && target.length && target[0]) { - scope.deactivateSearch(); - - var actualTarget = target[0]; - - var href = $(actualTarget).attr('href'); - - if (href && href.length > 10 && actualTarget && actualTarget.click) { - try { - actualTarget.click(); - } catch (e) { - $(actualTarget).click(); - } - } else { - $(actualTarget).click(); - } - } - }; - - scope.urlEncode = function(term) - { - return encodeURIComponent(term); - }; - - piwikHelper.registerShortcut('f', _pk_translate('CoreHome_ShortcutSearch'), function(event) { - if (event.altKey) { - return; - } - if (event.preventDefault) { - event.preventDefault(); - } else { - event.returnValue = false; // IE - } - - scrollFirstElementIntoView(element); - - scope.activateSearch(); - }); - - } - }; - } -})(); diff --git a/plugins/CoreHome/angularjs/quick-access/quick-access.directive.less b/plugins/CoreHome/angularjs/quick-access/quick-access.directive.less deleted file mode 100644 index 3bad77b9ba..0000000000 --- a/plugins/CoreHome/angularjs/quick-access/quick-access.directive.less +++ /dev/null @@ -1,65 +0,0 @@ -.quick-access { - position: relative; - - &:hover, - &.expanded, - &.active { - input { - background-color: @theme-color-background-contrast !important; - } - } - li { - font-size: 11px; - } - - li a { - padding: 10px 19px; - display: inline-block; - text-decoration: none; - word-break: break-all; - } - - .icon-search { - position: absolute; - font-size: 14px; - top: 10px; - left: 10px; - - } - input { - width:100%; - height: 100%; - box-shadow: 0 0 !important; - border-radius: 0 !important; - background-color: @theme-color-background-base !important; - font-size: 11px; - &:focus { - outline: none; - } - } - .selected { - background-color: @theme-color-background-tinyContrast !important; - } - .quick-access-category { - text-align: left !important; - font-size: 11px; - padding: 5px 5px 5px 10px; - cursor: pointer; - } - .result { - cursor: pointer; - } - .quick-access-category:hover { - background: none !important; - } - .no-result { - padding: 10px 19px; - cursor: default; - } - .websiteCategory { - cursor: default; - } - li.quick-access-help a { - word-break: break-word; - } -} \ No newline at end of file diff --git a/plugins/CoreHome/angularjs/siteselector/siteselector-model.service.js b/plugins/CoreHome/angularjs/siteselector/siteselector-model.service.js deleted file mode 100644 index 19cc732af5..0000000000 --- a/plugins/CoreHome/angularjs/siteselector/siteselector-model.service.js +++ /dev/null @@ -1,137 +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').factory('siteSelectorModel', siteSelectorModel); - - siteSelectorModel.$inject = ['piwikApi', '$filter', 'piwik', '$q']; - - function siteSelectorModel(piwikApi, $filter, piwik, $q) { - - var initialSites = null; - var limitPromise = null; - - var model = { - sites : [], - hasMultipleWebsites : false, - isLoading : false, - firstSiteName : '', - onlySitesWithAdminAccess: false, - updateWebsitesList: updateWebsitesList, - searchSite: searchSite, - loadSite: loadSite, - loadInitialSites: loadInitialSites, - hasMultipleSites: hasMultipleSites - }; - - return model; - - function updateWebsitesList(sites) { - - if (!sites || !sites.length) { - model.sites = []; - return []; - } - - angular.forEach(sites, function (site) { - if (site.group) site.name = '[' + site.group + '] ' + site.name; - }); - - model.sites = sortSites(sites); - - if (!model.firstSiteName) { - model.firstSiteName = model.sites[0].name; - } - - model.hasMultipleWebsites = model.hasMultipleWebsites || sites.length > 1; - - return model.sites; - } - - function searchSite(term) { - - if (!term) { - loadInitialSites(); - return; - } - - if (model.isLoading) { - if (model.currentRequest) { - model.currentRequest.abort(); - } else if (limitPromise) { - limitPromise.abort(); - limitPromise = null; - } - } - - model.isLoading = true; - - if (!limitPromise) { - limitPromise = piwikApi.fetch({method: 'SitesManager.getNumWebsitesToDisplayPerPage'}); - } - - return limitPromise.then(function (response) { - var limit = response.value; - - var methodToCall = 'SitesManager.getPatternMatchSites'; - if (model.onlySitesWithAdminAccess) { - methodToCall = 'SitesManager.getSitesWithAdminAccess'; - } - - model.currentRequest = piwikApi.fetch({ - method: methodToCall, - limit: limit, - pattern: term - }); - - return model.currentRequest; - }).then(function (response) { - if (angular.isDefined(response)) { - return updateWebsitesList(response); - } - }).finally(function () { - model.isLoading = false; - model.currentRequest = null; - }); - } - - function loadSite(idsite) { - if (idsite == 'all') { - document.location.href = piwikHelper.getCurrentQueryStringWithParametersModified(piwikHelper.getQueryStringFromParameters({ - module: 'MultiSites', - action: 'index', - date: piwik.currentDateString, - period: piwik.period - })); - } else { - piwik.broadcast.propagateNewPage('segment=&idSite=' + idsite, false); - } - } - - function sortSites(websites) - { - return $filter('orderBy')(websites, '+name'); - } - - function loadInitialSites() { - if (initialSites) { - model.sites = initialSites; - var deferred = $q.defer(); - deferred.resolve(); - return deferred.promise; - } - - return searchSite('%').then(function () { - initialSites = model.sites; - model.isInitialized = true - }); - } - - function hasMultipleSites() { - return initialSites && initialSites.length > 1; - } - } -})(); \ No newline at end of file diff --git a/plugins/CoreHome/angularjs/siteselector/siteselector.controller.js b/plugins/CoreHome/angularjs/siteselector/siteselector.controller.js deleted file mode 100644 index 8c5760a295..0000000000 --- a/plugins/CoreHome/angularjs/siteselector/siteselector.controller.js +++ /dev/null @@ -1,69 +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('SiteSelectorController', SiteSelectorController); - - SiteSelectorController.$inject = ['$scope', 'siteSelectorModel', 'piwik', 'AUTOCOMPLETE_MIN_SITES']; - - function SiteSelectorController($scope, siteSelectorModel, piwik, AUTOCOMPLETE_MIN_SITES){ - - $scope.model = siteSelectorModel; - - $scope.model.loadInitialSites().then(function(){ - if (!$scope.selectedSite && !$scope.model.hasMultipleSites() && $scope.model.sites[0]) { - $scope.selectedSite = {id: $scope.model.sites[0].idsite, name: $scope.model.sites[0].name}; - } - }); - - $scope.autocompleteMinSites = AUTOCOMPLETE_MIN_SITES; - $scope.activeSiteId = piwik.idSite; - - $scope.switchSite = function (site, $event) { - - // for Mac OS cmd key needs to be pressed, ctrl key on other systems - var controlKey = navigator.userAgent.indexOf("Mac OS X") !== -1 ? $event.metaKey : $event.ctrlKey; - - if ($event && controlKey && $event.target && $event.target.href) { - window.open($event.target.href, "_blank"); - return; - } - - $scope.selectedSite = {id: site.idsite, name: site.name}; - - if (!$scope.switchSiteOnSelect || $scope.activeSiteId == site.idsite) { - return; - } - - $scope.model.loadSite(site.idsite); - }; - - $scope.getUrlAllSites = function () { - var newParameters = 'module=MultiSites&action=index'; - return piwik.helper.getCurrentQueryStringWithParametersModified(newParameters); - }; - $scope.getUrlForSiteId = function (idSite) { - var idSiteParam = 'idSite=' + idSite; - var newParameters = 'segment=&' + idSiteParam; - var hash = piwik.broadcast.isHashExists() ? piwik.broadcast.getHashFromUrl() : ""; - return piwik.helper.getCurrentQueryStringWithParametersModified(newParameters) + - '#' + piwik.helper.getQueryStringWithParametersModified(hash.substring(1), newParameters); - }; - - piwikHelper.registerShortcut('w', _pk_translate('CoreHome_ShortcutWebsiteSelector'), function(event) { - if (event.altKey) { - return; - } - if (event.preventDefault) { - event.preventDefault(); - } else { - event.returnValue = false; // IE - } - $('.siteSelector .title').trigger('click').focus(); - }); - } - -})(); diff --git a/plugins/CoreHome/angularjs/siteselector/siteselector.directive.html b/plugins/CoreHome/angularjs/siteselector/siteselector.directive.html deleted file mode 100644 index 8954b20426..0000000000 --- a/plugins/CoreHome/angularjs/siteselector/siteselector.directive.html +++ /dev/null @@ -1,73 +0,0 @@ -
- - - - - - - - - ? - {{ placeholder }} - - - - -
diff --git a/plugins/CoreHome/angularjs/siteselector/siteselector.directive.js b/plugins/CoreHome/angularjs/siteselector/siteselector.directive.js deleted file mode 100644 index 945b70c145..0000000000 --- a/plugins/CoreHome/angularjs/siteselector/siteselector.directive.js +++ /dev/null @@ -1,112 +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 - */ - -/** - * Usage: - *
- * - * More advanced example - *
- * - * Within a form - *
- * - * Events: - * Triggers a `change` event on any change - *
- * $('#mySelector').on('change', function (event) { event.id/event.name }) - */ -(function () { - angular.module('piwikApp').directive('piwikSiteselector', piwikSiteselector); - - piwikSiteselector.$inject = ['$document', 'piwik', '$filter', '$timeout']; - - function piwikSiteselector($document, piwik, $filter, $timeout){ - var defaults = { - name: '', - siteid: piwik.idSite, - sitename: piwik.helper.htmlDecode(piwik.siteName), - allSitesLocation: 'bottom', - allSitesText: $filter('translate')('General_MultiSitesSummary'), - showSelectedSite: 'false', - showAllSitesItem: 'true', - switchSiteOnSelect: 'true', - onlySitesWithAdminAccess: 'false' - }; - - return { - restrict: 'A', - scope: { - showSelectedSite: '=', - showAllSitesItem: '=', - switchSiteOnSelect: '=', - onlySitesWithAdminAccess: '=', - inputName: '@name', - allSitesText: '@', - allSitesLocation: '@', - placeholder: '@' - }, - require: "?ngModel", - templateUrl: 'plugins/CoreHome/angularjs/siteselector/siteselector.directive.html?cb=' + piwik.cacheBuster, - controller: 'SiteSelectorController', - compile: function (element, attrs) { - - for (var index in defaults) { - if (attrs[index] === undefined) { - attrs[index] = defaults[index]; - } - } - - return function (scope, element, attrs, ngModel) { - scope.model.onlySitesWithAdminAccess = scope.onlySitesWithAdminAccess; - - if (ngModel) { - ngModel.$setViewValue(scope.selectedSite); - } - - scope.$watch('selectedSite.id', function (newValue, oldValue, scope) { - if (newValue != oldValue) { - element.attr('siteid', newValue); - element.trigger('change', scope.selectedSite); - } - }); - - if (ngModel) { - ngModel.$render = function() { - if (angular.isString(ngModel.$viewValue)) { - scope.selectedSite = JSON.parse(ngModel.$viewValue); - } else { - scope.selectedSite = ngModel.$viewValue; - } - }; - } - - scope.$watch('selectedSite', function (newValue) { - if (ngModel) { - ngModel.$setViewValue(newValue); - } - }); - - scope.$watch('view.showSitesList', function (newValue) { - element.toggleClass('expanded', !! newValue); - }); - - $timeout(function () { - if (attrs.siteid && attrs.sitename) { - scope.selectedSite = {id: attrs.siteid, name: piwik.helper.htmlDecode(attrs.sitename)}; - } - - initTopControls(); - }); - }; - } - }; - } -})(); \ No newline at end of file diff --git a/plugins/CoreHome/angularjs/siteselector/siteselector.directive.less b/plugins/CoreHome/angularjs/siteselector/siteselector.directive.less deleted file mode 100644 index 48700196c2..0000000000 --- a/plugins/CoreHome/angularjs/siteselector/siteselector.directive.less +++ /dev/null @@ -1,185 +0,0 @@ -.autocompleteMatched { - color: #5256BE; - font-weight: bold; -} -.siteSelector { - a.title { - .icon.collapsed.iconHidden { - visibility: visible; - } - - span.placeholder { - color: #9e9e9e; - font-style: italic; - } - } - .dropdown { - min-width: 210px; - } - - .ui-widget.ui-widget-content { - border: none; - } -} - -#content { - .sites_autocomplete { - position: static !important; - height: 36px; - z-index: 99; - vertical-align: middle; - - > .siteSelector { - position: absolute; - z-index: 998; - } - - a.title { - text-decoration: none; - } - } -} - -.siteSelector.expanded { - .loading { - background: url(plugins/Morpheus/images/loading-blue.gif) no-repeat 16% 11px; - } -} - -.siteSelector a.title, -.siteSelector .custom_select_ul_list li a, -.siteSelector .custom_select_all a, -.siteSelector .custom_select_main_link > span { - display: inline-block; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - padding: 0; - color: @theme-color-text; - text-transform: uppercase; - width: 100%; -} - -.siteSelector.piwikSelector a.title { - padding: 10px 15px 11px 13px; - - /*.icon:not(.icon-fixed) { - margin-right: -11px; - }*/ - - > span { - max-width: 161px; - overflow: hidden; - text-overflow: ellipsis; - } - - span { - vertical-align: top; - } -} - -.siteSelector .custom_select_ul_list, -.siteSelector ul.ui-autocomplete { - position: relative; - list-style: none; - line-height: 18px; - padding: 0 0 15px 0; - box-shadow: none !important; -} - -.siteSelector .custom_select_ul_list { - padding: 0 0 5px 0; -} - -.siteSelector .dropdown { - padding-top: 0; -} - -.siteSelector .custom_select_ul_list li a, -.siteSelector .custom_select_all a { - line-height: 18px; - height: auto; - display: block; - text-decoration: none; - padding-left: 5px; -} - -.siteSelector .custom_select_ul_list li a:hover, -.siteSelector .custom_select_all a:hover { - background: @color-silver-l95; -} - -.siteSelector .custom_select_all a { - text-decoration: none; - &:hover { - text-decoration: none; - } -} - -.siteSelector .custom_select_search { - margin: 0 0 8px 0; - height: 33px; - display: block; - white-space: nowrap; - position: relative; - - .inp { - vertical-align: top; - width: 100%; - padding: 7px 6px !important; - border: 1px solid #d0d0d0 !important; - background: transparent !important; - font-size: 11px !important; - color: #454545 !important; - } - .reset { - position: absolute; - top: 8px; - right: 4px; - cursor: pointer; - } -} - -.siteSelector { - width: auto; -} - -.sites_selector_container>.siteSelector { - padding-left: 12px; -} - -.custom_selector_container .ui-menu-item, -.custom_selector_container .ui-menu-item a { - float:none;position:static -} - -.custom_select_block_show { - height: auto; - overflow: visible; - max-width:inherit; -} - -.sites_selector_container { - padding-top: 5px; -} - -.siteSelect a { - white-space: normal; - text-align: left; -} - -.siteSelector.disabled { - a.title { - cursor: default !important; - - .icon { - display: none !important; - } - } - - &.borderedControl { - &:hover { - background-color: @theme-color-background-base!important; - } - } -} \ No newline at end of file diff --git a/plugins/CoreHome/javascripts/broadcast.js b/plugins/CoreHome/javascripts/broadcast.js index de6af9a996..fe3b262b32 100644 --- a/plugins/CoreHome/javascripts/broadcast.js +++ b/plugins/CoreHome/javascripts/broadcast.js @@ -314,7 +314,7 @@ var broadcast = { * @param {array} paramsToRemove Optional parameters to remove from the URL. * @return {void} */ - propagateNewPage: function (str, showAjaxLoading, strHash, paramsToRemove) { + propagateNewPage: function (str, showAjaxLoading, strHash, paramsToRemove, wholeNewUrl) { // abort all existing ajax requests globalAjaxQueue.abort(); @@ -337,61 +337,66 @@ var broadcast = { } var oldUrl = currentSearchStr + currentHashStr; + var newUrl; - // remove all array query params that are currently set. if we don't do this the array parameters we add - // just get added to the existing parameters. - params_vals.forEach(function (param) { + if (!wholeNewUrl) { + // remove all array query params that are currently set. if we don't do this the array parameters we add + // just get added to the existing parameters. + params_vals.forEach(function (param) { if (/\[]=/.test(decodeURIComponent(param))) { - var paramName = decodeURIComponent(param).split('[]=')[0]; - removeParam(paramName); + var paramName = decodeURIComponent(param).split('[]=')[0]; + removeParam(paramName); } - }); + }); - // remove parameters if needed - paramsToRemove.forEach(function (paramName) { + // remove parameters if needed + paramsToRemove.forEach(function (paramName) { removeParam(paramName); - }); + }); - // update/add parameters based on whether the parameter is an array param or not - params_vals.forEach(function (param) { - if(!param.length) { - return; // updating with empty string would destroy some values + // update/add parameters based on whether the parameter is an array param or not + params_vals.forEach(function (param) { + if (!param.length) { + return; // updating with empty string would destroy some values } if (/\[]=/.test(decodeURIComponent(param))) { // array param value - currentSearchStr = broadcast.addArrayParamValue(param, currentSearchStr); + currentSearchStr = broadcast.addArrayParamValue(param, currentSearchStr); - if (currentHashStr.length !== 0) { - currentHashStr = broadcast.addArrayParamValue(param, currentHashStr); - } + if (currentHashStr.length !== 0) { + currentHashStr = broadcast.addArrayParamValue(param, currentHashStr); + } } else { - // update both the current search query and hash string - currentSearchStr = broadcast.updateParamValue(param, currentSearchStr); + // update both the current search query and hash string + currentSearchStr = broadcast.updateParamValue(param, currentSearchStr); - if (currentHashStr.length !== 0) { - currentHashStr = broadcast.updateParamValue(param, currentHashStr); - } + if (currentHashStr.length !== 0) { + currentHashStr = broadcast.updateParamValue(param, currentHashStr); + } } - }); + }); - var updatedUrl = new RegExp('&updated=([0-9]+)'); - var updatedCounter = updatedUrl.exec(currentSearchStr); - if (!updatedCounter) { + var updatedUrl = new RegExp('&updated=([0-9]+)'); + var updatedCounter = updatedUrl.exec(currentSearchStr); + if (!updatedCounter) { currentSearchStr += '&updated=1'; - } else { + } else { updatedCounter = 1 + parseInt(updatedCounter[1]); currentSearchStr = currentSearchStr.replace(new RegExp('(&updated=[0-9]+)'), '&updated=' + updatedCounter); - } + } - if (strHash && currentHashStr.length != 0) { + if (strHash && currentHashStr.length != 0) { var params_hash_vals = strHash.split("&"); for (var i = 0; i < params_hash_vals.length; i++) { - currentHashStr = broadcast.updateParamValue(params_hash_vals[i], currentHashStr); + currentHashStr = broadcast.updateParamValue(params_hash_vals[i], currentHashStr); } - } + } - // Now load the new page. - var newUrl = currentSearchStr + currentHashStr; + // Now load the new page. + newUrl = currentSearchStr + currentHashStr; + } else { + newUrl = wholeNewUrl; + } var $rootScope = piwikHelper.getAngularDependency('$rootScope'); if ($rootScope) { diff --git a/plugins/CoreHome/javascripts/top_controls.js b/plugins/CoreHome/javascripts/top_controls.js index c215e70f0f..f4a793b4b5 100644 --- a/plugins/CoreHome/javascripts/top_controls.js +++ b/plugins/CoreHome/javascripts/top_controls.js @@ -51,7 +51,7 @@ function initTopControls() { } } -//Keyboard controls for Top Controls Calendar through tab and enter. +//Keyboard controls for Top Controls Calendar through tab and enter. $( document ).ready(function() { $('.periodSelector').keydown(function(e){ toggleCalendar(e); @@ -67,7 +67,7 @@ $( document ).ready(function() { }) }); -//Keyboard controls for Top Controls Calendar through tab and enter. +//Keyboard controls for Top Controls Calendar through tab and enter. $( document ).ready(function() { $('.periodSelector').keydown(function(e){ toggleCalendar(e); @@ -85,7 +85,7 @@ $( document ).ready(function() { function toggleCalendar(e){ var calendarOpen = $('.periodSelector').hasClass('expanded'); - + if(e.which==13){ if(calendarOpen){ $('.periodSelector').removeClass('expanded'); @@ -107,4 +107,4 @@ function blockPropegation(){ $('.ui-datepicker-month, .ui-datepicker-year, .periodSelector td a').keydown(function(e){ e.stopPropagation(); }) -} \ No newline at end of file +} diff --git a/plugins/CoreHome/vue/dist/CoreHome.umd.js b/plugins/CoreHome/vue/dist/CoreHome.umd.js index 83a95674b5..a0f4f9060b 100644 --- a/plugins/CoreHome/vue/dist/CoreHome.umd.js +++ b/plugins/CoreHome/vue/dist/CoreHome.umd.js @@ -128,6 +128,7 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__8bbf__; __webpack_require__.r(__webpack_exports__); // EXPORTS +__webpack_require__.d(__webpack_exports__, "debounce", function() { return /* reexport */ debounce; }); __webpack_require__.d(__webpack_exports__, "createAngularJsAdapter", function() { return /* reexport */ createAngularJsAdapter; }); __webpack_require__.d(__webpack_exports__, "activityIndicatorAdapter", function() { return /* reexport */ ActivityIndicator_adapter; }); __webpack_require__.d(__webpack_exports__, "ActivityIndicator", function() { return /* reexport */ ActivityIndicator; }); @@ -158,13 +159,15 @@ __webpack_require__.d(__webpack_exports__, "ExpandOnHover", function() { return __webpack_require__.d(__webpack_exports__, "EnrichedHeadline", function() { return /* reexport */ EnrichedHeadline; }); __webpack_require__.d(__webpack_exports__, "ContentBlock", function() { return /* reexport */ ContentBlock; }); __webpack_require__.d(__webpack_exports__, "Comparisons", function() { return /* reexport */ Comparisons; }); -__webpack_require__.d(__webpack_exports__, "Menudropdown", function() { return /* reexport */ Menudropdown; }); +__webpack_require__.d(__webpack_exports__, "MenuDropdown", function() { return /* reexport */ MenuDropdown; }); __webpack_require__.d(__webpack_exports__, "DatePicker", function() { return /* reexport */ DatePicker; }); __webpack_require__.d(__webpack_exports__, "DateRangePicker", function() { return /* reexport */ DateRangePicker; }); __webpack_require__.d(__webpack_exports__, "PeriodDatePicker", function() { return /* reexport */ PeriodDatePicker; }); __webpack_require__.d(__webpack_exports__, "Notification", function() { return /* reexport */ Notification; }); __webpack_require__.d(__webpack_exports__, "NotificationGroup", function() { return /* reexport */ Notification_NotificationGroup; }); __webpack_require__.d(__webpack_exports__, "NotificationsStore", function() { return /* reexport */ Notifications_store; }); +__webpack_require__.d(__webpack_exports__, "SiteSelector", function() { return /* reexport */ SiteSelector; }); +__webpack_require__.d(__webpack_exports__, "QuickAccess", function() { return /* reexport */ QuickAccess; }); // CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js // This file is imported into lib/wc client bundles. @@ -1101,6 +1104,20 @@ var MatomoUrl_MatomoUrl = /*#__PURE__*/function () { var $location = Matomo_Matomo.helper.getAngularDependency('$location'); $location.search(serializedParams); } + }, { + key: "updateUrl", + value: function updateUrl(params) { + var hashParams = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var serializedParams = typeof params !== 'string' ? this.stringify(params) : params; + var serializedHashParams = typeof hashParams !== 'string' ? this.stringify(hashParams) : hashParams; + var url = "?".concat(serializedParams); + + if (serializedHashParams.length) { + url = "".concat(url, "#?").concat(serializedHashParams); + } + + window.broadcast.propagateNewPage('', undefined, undefined, undefined, url); + } }, { key: "getSearchParam", value: function getSearchParam(paramName) { @@ -1581,7 +1598,7 @@ var AjaxHelper_AjaxHelper = /*#__PURE__*/function () { this.requestHandle = this.buildAjaxCall(); window.globalAjaxQueue.push(this.requestHandle); - return new Promise(function (resolve, reject) { + var result = new Promise(function (resolve, reject) { _this2.requestHandle.then(resolve).fail(function (xhr) { if (xhr.statusText !== 'abort') { console.log("Warning: the ".concat($.param(_this2.getParams), " request failed!")); @@ -1589,6 +1606,14 @@ var AjaxHelper_AjaxHelper = /*#__PURE__*/function () { } }); }); + + result.abort = function () { + if (_this2.requestHandle) { + _this2.requestHandle.abort(); + } + }; + + return result; } /** * Aborts the current request if it is (still) running @@ -2456,6 +2481,7 @@ function toAngularJsCamelCase(arg) { function createAngularJsAdapter(options) { var component = options.component, + require = options.require, _options$scope = options.scope, scope = _options$scope === void 0 ? {} : _options$scope, _options$events = options.events, @@ -2496,10 +2522,11 @@ function createAngularJsAdapter(options) { var adapter = { restrict: restrict, + require: require, scope: noScope ? undefined : angularJsScope, compile: function angularJsAdapterCompile() { return { - post: function angularJsAdapterLink(ngScope, ngElement, ngAttrs) { + post: function angularJsAdapterLink(ngScope, ngElement, ngAttrs, ngController) { var clone = transclude ? ngElement.find("[ng-transclude][counter=".concat(currentTranscludeCounter, "]")) : null; // build the root vue template var rootVueTemplate = ' 1 && arguments[1] !== undefined ? arguments[1] : false; -function Alertvue_type_template_id_c3863ae2_render(_ctx, _cache, $props, $setup, $data, $options) { - 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"])(["alert", Alertvue_type_template_id_c3863ae2_defineProperty({}, "alert-".concat(_ctx.severity), true)]) - }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["renderSlot"])(_ctx.$slots, "default")], 2); -} -// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/Alert/Alert.vue?vue&type=template&id=c3863ae2 + if (!term) { + return this.loadInitialSites(); + } -// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-3!./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/Alert/Alert.vue?vue&type=script&lang=ts + if (this.currentRequest) { + this.currentRequest.abort(); + } -/* harmony default export */ var Alertvue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({ - props: { - severity: { - type: String, - required: true + if (this.limitRequest) { + this.limitRequest.abort(); + this.limitRequest = null; + } + + if (!this.limitRequest) { + this.limitRequest = AjaxHelper_AjaxHelper.fetch({ + method: 'SitesManager.getNumWebsitesToDisplayPerPage' + }); + } + + return this.limitRequest.then(function (response) { + var limit = response.value; + var methodToCall = 'SitesManager.getPatternMatchSites'; + + if (onlySitesWithAdminAccess) { + methodToCall = 'SitesManager.getSitesWithAdminAccess'; + } + + _this3.currentRequest = AjaxHelper_AjaxHelper.fetch({ + method: methodToCall, + limit: limit, + pattern: term + }); + return _this3.currentRequest; + }).then(function (response) { + if (response) { + return _this3.processWebsitesList(response); + } + + return null; + }).finally(function () { + _this3.currentRequest = null; + }); } - } -})); -// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/Alert/Alert.vue?vue&type=script&lang=ts - -// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/Alert/Alert.vue + }, { + key: "processWebsitesList", + value: function processWebsitesList(response) { + var sites = response; + if (!sites || !sites.length) { + return []; + } + sites = sites.map(function (s) { + return SitesStore_objectSpread(SitesStore_objectSpread({}, s), {}, { + name: s.group ? "[".concat(s.group, "] ").concat(s.name) : s.name + }); + }); + sites.sort(function (lhs, rhs) { + if (lhs.name.toLowerCase() < rhs.name.toLowerCase()) { + return -1; + } -Alertvue_type_script_lang_ts.render = Alertvue_type_template_id_c3863ae2_render + return lhs.name.toLowerCase() > rhs.name.toLowerCase() ? 1 : 0; + }); + return sites; + } + }]); -/* harmony default export */ var Alert = (Alertvue_type_script_lang_ts); -// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/Alert/Alert.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 - */ + return SitesStore; +}(); +/* harmony default export */ var SiteSelector_SitesStore = (new SitesStore_SitesStore()); +// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/debounce.ts +var DEFAULT_DEBOUNCE_DELAY = 300; +function debounce(fn) { + var delayInMs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_DEBOUNCE_DELAY; + var timeout; + return function () { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } -/* harmony default export */ var Alert_adapter = (createAngularJsAdapter({ - component: Alert, - scope: { - severity: { - vue: 'severity', - angularJsBind: '@piwikAlert' + if (timeout) { + clearTimeout(timeout); } - }, - directiveName: 'piwikAlert', - transclude: true -})); -// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/CookieHelper/CookieHelper.ts -/* - * General utils for managing cookies in Typescript. - */ -// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types -function setCookie(name, val, seconds) { - var date = new Date(); // set default day to 3 days - if (!seconds) { - // eslint-disable-next-line no-param-reassign - seconds = 3 * 24 * 60 * 1000; - } // Set it expire in n days + timeout = setTimeout(function () { + fn.apply(void 0, args); + }, delayInMs); + }; +} +// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-3!./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=script&lang=ts +function SiteSelectorvue_type_script_lang_ts_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } +function SiteSelectorvue_type_script_lang_ts_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { SiteSelectorvue_type_script_lang_ts_ownKeys(Object(source), true).forEach(function (key) { SiteSelectorvue_type_script_lang_ts_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { SiteSelectorvue_type_script_lang_ts_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } - date.setTime(date.getTime() + seconds); // Set it +function SiteSelectorvue_type_script_lang_ts_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; } - document.cookie = "".concat(name, "=").concat(val, "; expires=").concat(date.toUTCString(), "; path=/"); -} // eslint-disable-next-line consistent-return,@typescript-eslint/explicit-module-boundary-types -function getCookie(name) { - var value = "; ".concat(document.cookie); - var parts = value.split("; ".concat(name, "=")); // if cookie not exist return null - // eslint-disable-next-line eqeqeq - if (parts.length == 2) { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - var data = parts.pop().split(';').shift(); - if (typeof data !== 'undefined') { - return data; - } - } - return null; -} // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types -function deleteCookie(name) { - var date = new Date(); // Set it expire in -1 days - date.setTime(date.getTime() + -1 * 24 * 60 * 60 * 1000); // Set it - document.cookie = "".concat(name, "=; expires=").concat(date.toUTCString(), "; path=/"); -} -// 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/Notification/Notification.vue?vue&type=template&id=e3d12348 -var Notificationvue_type_template_id_e3d12348_hoisted_1 = { - key: 0 -}; -var Notificationvue_type_template_id_e3d12348_hoisted_2 = ["data-notification-instance-id"]; -var Notificationvue_type_template_id_e3d12348_hoisted_3 = { - key: 1 -}; -var Notificationvue_type_template_id_e3d12348_hoisted_4 = { - class: "notification-body" -}; -var Notificationvue_type_template_id_e3d12348_hoisted_5 = ["innerHTML"]; -var Notificationvue_type_template_id_e3d12348_hoisted_6 = { - key: 1 -}; -function Notificationvue_type_template_id_e3d12348_render(_ctx, _cache, $props, $setup, $data, $options) { - return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createBlock"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Transition"], { - name: _ctx.type === 'toast' ? 'slow-fade-out' : undefined, - onAfterLeave: _cache[1] || (_cache[1] = function ($event) { - return _ctx.toastClosed(); - }) - }, { - default: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withCtx"])(function () { - return [!_ctx.deleted ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", Notificationvue_type_template_id_e3d12348_hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Transition"], { - name: _ctx.type === 'toast' ? 'toast-slide-up' : undefined, - appear: "" - }, { - default: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withCtx"])(function () { - return [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Transition"], { + +/* harmony default export */ var SiteSelectorvue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({ + props: { + modelValue: { + Object: Object, + default: { + id: Matomo_Matomo.idSite, + name: Matomo_Matomo.helper.htmlDecode(Matomo_Matomo.siteName) + } + }, + showSelectedSite: { + type: Boolean, + default: false + }, + showAllSitesItem: { + type: Boolean, + default: true + }, + switchSiteOnSelect: { + type: Boolean, + default: true + }, + onlySitesWithAdminAccess: { + type: Boolean, + default: false + }, + name: { + type: String, + default: '' + }, + allSitesText: { + type: String, + default: translate('General_MultiSitesSummary') + }, + allSitesLocation: { + type: String, + default: 'bottom' + }, + placeholder: String + }, + emits: ['update:modelValue', 'blur'], + components: { + AllSitesLink: AllSitesLink + }, + directives: { + FocusAnywhereButHere: FocusAnywhereButHere, + FocusIf: FocusIf + }, + watch: { + modelValue: { + handler: function handler(newValue) { + this.selectedSite = SiteSelectorvue_type_script_lang_ts_objectSpread({}, newValue); + }, + deep: true + } + }, + data: function data() { + return { + searchTerm: '', + activeSiteId: Matomo_Matomo.idSite, + showSitesList: false, + isLoading: false, + sites: [], + selectedSite: { + id: Matomo_Matomo.idSite, + name: Matomo_Matomo.helper.htmlDecode(Matomo_Matomo.siteName) + }, + autocompleteMinSites: parseInt(Matomo_Matomo.config.autocomplete_min_sites, 10) + }; + }, + mounted: function mounted() { + var _this = this; + + window.initTopControls(); + this.loadInitialSites().then(function () { + if ((!_this.selectedSite || !_this.selectedSite.id) && _this.sites[0]) { + _this.selectedSite = { + id: _this.sites[0].idsite, + name: _this.sites[0].name + }; + + _this.$emit('update:modelValue', SiteSelectorvue_type_script_lang_ts_objectSpread({}, _this.selectedSite)); + } + }); + var shortcutTitle = translate('CoreHome_ShortcutWebsiteSelector'); + Matomo_Matomo.helper.registerShortcut('w', shortcutTitle, function (event) { + if (event.altKey) { + return; + } + + if (event.preventDefault) { + event.preventDefault(); + } else { + event.returnValue = false; // IE + } + + _this.$refs.selectorLink.click(); + + _this.$refs.selectorLink.focus(); + }); + }, + created: function created() { + this.onSearchInputKeydown = debounce(this.onSearchInputKeydown.bind(this)); + }, + computed: { + shouldFocusOnSearch: function shouldFocusOnSearch() { + return this.showSitesList && this.autocompleteMinSites <= this.sites.length || this.searchTerm; + }, + selectorLinkTitle: function selectorLinkTitle() { + var _this$selectedSite; + + return this.hasMultipleSites ? translate('CoreHome_ChangeCurrentWebsite', ((_this$selectedSite = this.selectedSite) === null || _this$selectedSite === void 0 ? void 0 : _this$selectedSite.name) || this.firstSiteName) : ''; + }, + hasMultipleSites: function hasMultipleSites() { + return SiteSelector_SitesStore.initialSites.value && SiteSelector_SitesStore.initialSites.value.length > 1; + }, + firstSiteName: function firstSiteName() { + return this.sites && this.sites.length > 0 ? this.sites[0].name : ''; + }, + urlAllSites: function urlAllSites() { + var newQuery = src_MatomoUrl_MatomoUrl.stringify(SiteSelectorvue_type_script_lang_ts_objectSpread(SiteSelectorvue_type_script_lang_ts_objectSpread({}, src_MatomoUrl_MatomoUrl.urlParsed.value), {}, { + module: 'MultiSites', + action: 'index', + date: src_MatomoUrl_MatomoUrl.parsed.value.date, + period: src_MatomoUrl_MatomoUrl.parsed.value.period + })); + return "?".concat(newQuery); + } + }, + methods: { + onAllSitesClick: function onAllSitesClick(event) { + this.switchSite({ + idsite: 'all', + name: this.allSitesText + }, event); + this.showSitesList = false; + }, + switchSite: function switchSite(site, event) { + // for Mac OS cmd key needs to be pressed, ctrl key on other systems + var controlKey = navigator.userAgent.indexOf('Mac OS X') !== -1 ? event.metaKey : event.ctrlKey; + + if (event && controlKey && event.target && event.target.href) { + window.open(event.target.href, '_blank'); + return; + } + + this.selectedSite = { + id: site.idsite, + name: site.name + }; + this.$emit('update:modelValue', SiteSelectorvue_type_script_lang_ts_objectSpread({}, this.selectedSite)); + + if (!this.switchSiteOnSelect || this.activeSiteId === site.idsite) { + return; + } + + SiteSelector_SitesStore.loadSite(site.idsite); + }, + onBlur: function onBlur() { + this.showSitesList = false; + this.$emit('blur'); + }, + onClickSelector: function onClickSelector() { + if (this.hasMultipleSites) { + this.showSitesList = !this.showSitesList; + + if (!this.isLoading && !this.searchTerm) { + this.loadInitialSites(); + } + } + }, + onPressEnter: function onPressEnter(event) { + if (event.key !== 'Enter') { + return; + } + + event.preventDefault(); + this.showSitesList = !this.showSitesList; + + if (this.showSitesList && !this.isLoading) { + this.loadInitialSites(); + } + }, + onSearchInputKeydown: function onSearchInputKeydown() { + var _this2 = this; + + setTimeout(function () { + _this2.searchSite(_this2.searchTerm); + }); + }, + getMatchedSiteName: function getMatchedSiteName(siteName) { + var index = siteName.toUpperCase().indexOf(this.searchTerm.toUpperCase()); + + if (index === -1) { + return Matomo_Matomo.helper.htmlEntities(siteName); + } + + var previousPart = Matomo_Matomo.helper.htmlEntities(siteName.substring(0, index)); + var lastPart = Matomo_Matomo.helper.htmlEntities(siteName.substring(index + this.searchTerm.length)); + return "".concat(previousPart, "").concat(this.searchTerm, "").concat(lastPart); + }, + loadInitialSites: function loadInitialSites() { + var _this3 = this; + + return SiteSelector_SitesStore.loadInitialSites().then(function (sites) { + _this3.sites = sites || []; + }); + }, + searchSite: function searchSite(term) { + var _this4 = this; + + this.isLoading = true; + SiteSelector_SitesStore.searchSite(term, this.onlySitesWithAdminAccess).then(function (sites) { + if (sites) { + _this4.sites = sites; + } + }).finally(function () { + _this4.isLoading = false; + }); + }, + getUrlForSiteId: function getUrlForSiteId(idSite) { + var newQuery = src_MatomoUrl_MatomoUrl.stringify(SiteSelectorvue_type_script_lang_ts_objectSpread(SiteSelectorvue_type_script_lang_ts_objectSpread({}, src_MatomoUrl_MatomoUrl.urlParsed.value), {}, { + segment: '', + idSite: idSite + })); + var newHash = src_MatomoUrl_MatomoUrl.stringify(SiteSelectorvue_type_script_lang_ts_objectSpread(SiteSelectorvue_type_script_lang_ts_objectSpread({}, src_MatomoUrl_MatomoUrl.hashParsed.value), {}, { + segment: '', + idSite: idSite + })); + return "?".concat(newQuery, "#?").concat(newHash); + } + } +})); +// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/SiteSelector/SiteSelector.vue?vue&type=script&lang=ts + +// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/SiteSelector/SiteSelector.vue + + + +SiteSelectorvue_type_script_lang_ts.render = SiteSelectorvue_type_template_id_0804f097_render + +/* harmony default export */ var SiteSelector = (SiteSelectorvue_type_script_lang_ts); +// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/SiteSelector/SiteSelector.adapter.ts +function SiteSelector_adapter_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } + +function SiteSelector_adapter_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { SiteSelector_adapter_ownKeys(Object(source), true).forEach(function (key) { SiteSelector_adapter_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { SiteSelector_adapter_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +function SiteSelector_adapter_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 + */ + + + +/* harmony default export */ var SiteSelector_adapter = (createAngularJsAdapter({ + component: SiteSelector, + require: '?ngModel', + scope: { + showSelectedSite: { + angularJsBind: '=' + }, + showAllSitesItem: { + angularJsBind: '=' + }, + switchSiteOnSelect: { + angularJsBind: '=' + }, + onlySitesWithAdminAccess: { + angularJsBind: '=' + }, + name: { + angularJsBind: '@' + }, + allSitesText: { + angularJsBind: '@' + }, + allSitesLocation: { + angularJsBind: '@' + }, + placeholder: { + angularJsBind: '@' + }, + modelValue: {} + }, + $inject: ['$timeout'], + directiveName: 'piwikSiteselector', + events: { + 'update:modelValue': function updateModelValue(newValue, vm, scope, element, attrs, ngModel) { + if (newValue && !vm.modelValue || !newValue && vm.modelValue || newValue.id !== vm.modelValue.id) { + element.attr('siteid', newValue.id); + element.trigger('change', newValue); + + if (ngModel) { + ngModel.$setViewValue(newValue); + } + } + }, + blur: function blur(event, vm, scope) { + setTimeout(function () { + return scope.$apply(); + }); + } + }, + postCreate: function postCreate(vm, scope, element, attrs, controller, $timeout) { + var ngModel = controller; // setup ng-model mapping + + if (ngModel) { + ngModel.$setViewValue(vm.modelValue); + + ngModel.$render = function () { + if (angular.isString(ngModel.$viewValue)) { + vm.modelValue = JSON.parse(ngModel.$viewValue); + } else { + vm.modelValue = ngModel.$viewValue; + } + }; + } + + $timeout(function () { + if (attrs.siteid && attrs.sitename) { + vm.modelValue = { + id: attrs.siteid, + name: Matomo_Matomo.helper.htmlDecode(attrs.sitename) + }; + ngModel.$setViewValue(SiteSelector_adapter_objectSpread({}, vm.modelValue)); + } + }); + } +})); +// 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/QuickAccess/QuickAccess.vue?vue&type=template&id=d1e03d32 + +var QuickAccessvue_type_template_id_d1e03d32_hoisted_1 = { + ref: "root", + class: "quickAccessInside" +}; +var QuickAccessvue_type_template_id_d1e03d32_hoisted_2 = ["title"]; +var QuickAccessvue_type_template_id_d1e03d32_hoisted_3 = { + class: "dropdown" +}; +var QuickAccessvue_type_template_id_d1e03d32_hoisted_4 = { + class: "no-result" +}; +var QuickAccessvue_type_template_id_d1e03d32_hoisted_5 = ["onClick"]; +var QuickAccessvue_type_template_id_d1e03d32_hoisted_6 = ["onMouseenter", "onClick"]; +var QuickAccessvue_type_template_id_d1e03d32_hoisted_7 = { + class: "quickAccessMatomoSearch" +}; +var QuickAccessvue_type_template_id_d1e03d32_hoisted_8 = ["onMouseenter", "onClick"]; +var QuickAccessvue_type_template_id_d1e03d32_hoisted_9 = ["textContent"]; +var QuickAccessvue_type_template_id_d1e03d32_hoisted_10 = { + class: "quick-access-category helpCategory" +}; +var QuickAccessvue_type_template_id_d1e03d32_hoisted_11 = ["href"]; +function QuickAccessvue_type_template_id_d1e03d32_render(_ctx, _cache, $props, $setup, $data, $options) { + var _directive_focus_if = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveDirective"])("focus-if"); + + var _directive_focus_anywhere_but_here = Object(external_commonjs_vue_commonjs2_vue_root_Vue_["resolveDirective"])("focus-anywhere-but-here"); + + 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", QuickAccessvue_type_template_id_d1e03d32_hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", { + class: "icon-search", + onMouseenter: _cache[0] || (_cache[0] = function ($event) { + return _ctx.searchActive = true; + }) + }, null, 544), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], !(_ctx.searchTerm || _ctx.searchActive)]]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("input", { + class: "s", + onKeydown: _cache[1] || (_cache[1] = function ($event) { + return _ctx.onKeypress($event); + }), + onFocus: _cache[2] || (_cache[2] = function ($event) { + return _ctx.searchActive = true; + }), + "onUpdate:modelValue": _cache[3] || (_cache[3] = function ($event) { + return _ctx.searchTerm = $event; + }), + type: "text", + tabindex: "2", + title: _ctx.quickAccessTitle + }, null, 40, QuickAccessvue_type_template_id_d1e03d32_hoisted_2), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vModelText"], _ctx.searchTerm], [_directive_focus_if, {}, _ctx.searchActive]]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", QuickAccessvue_type_template_id_d1e03d32_hoisted_3, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("ul", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("li", QuickAccessvue_type_template_id_d1e03d32_hoisted_4, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_SearchNoResults')), 1)], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], !(_ctx.numMenuItems > 0 || _ctx.sites.length)]]), (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.menuItems, function (subcategory) { + return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("ul", { + key: subcategory.title + }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("li", { + class: "quick-access-category", + onClick: function onClick($event) { + _ctx.searchTerm = subcategory.title; + + _ctx.searchMenu(_ctx.searchTerm); + } + }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(subcategory.title), 9, QuickAccessvue_type_template_id_d1e03d32_hoisted_5), (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"])(subcategory.items, function (submenuEntry) { + return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("li", { + class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])(["result", { + selected: submenuEntry.menuIndex === _ctx.searchIndex + }]), + onMouseenter: function onMouseenter($event) { + return _ctx.searchIndex = submenuEntry.menuIndex; + }, + onClick: function onClick($event) { + return _ctx.selectMenuItem(submenuEntry.index); + }, + key: submenuEntry.index + }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(submenuEntry.name.trim()), 1)], 42, QuickAccessvue_type_template_id_d1e03d32_hoisted_6); + }), 128))]); + }), 128)), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("ul", QuickAccessvue_type_template_id_d1e03d32_hoisted_7, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("li", { + class: "quick-access-category websiteCategory" + }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('SitesManager_Sites')), 513), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.hasSitesSelector && _ctx.sites.length || _ctx.isLoading]]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withDirectives"])(Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("li", { + class: "no-result" + }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('MultiSites_LoadingWebsites')), 513), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.hasSitesSelector && _ctx.isLoading]]), (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", { + class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])(["result", { + selected: _ctx.numMenuItems + index === _ctx.searchIndex + }]), + onMouseenter: function onMouseenter($event) { + return _ctx.searchIndex = _ctx.numMenuItems + index; + }, + onClick: function onClick($event) { + return _ctx.selectSite(site.idsite); + }, + key: site.idsite + }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { + textContent: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(site.name) + }, null, 8, QuickAccessvue_type_template_id_d1e03d32_hoisted_9)], 42, QuickAccessvue_type_template_id_d1e03d32_hoisted_8)), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.hasSitesSelector && !_ctx.isLoading]]); + }), 128))]), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("ul", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("li", QuickAccessvue_type_template_id_d1e03d32_hoisted_10, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('General_HelpResources')), 1), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("li", { + class: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["normalizeClass"])([{ + selected: _ctx.searchIndex === 'help' + }, "quick-access-help"]), + onMouseenter: _cache[4] || (_cache[4] = function ($event) { + return _ctx.searchIndex = 'help'; + }) + }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("a", { + href: "https://matomo.org?s=".concat(encodeURIComponent(_ctx.searchTerm)), + target: "_blank" + }, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.translate('CoreHome_SearchOnMatomo', _ctx.searchTerm)), 9, QuickAccessvue_type_template_id_d1e03d32_hoisted_11)], 34)])], 512), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.searchTerm && _ctx.searchActive]])], 512)), [[_directive_focus_anywhere_but_here, { + blur: _ctx.onBlur + }]]); +} +// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/QuickAccess/QuickAccess.vue?vue&type=template&id=d1e03d32 + +// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-3!./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/QuickAccess/QuickAccess.vue?vue&type=script&lang=ts +function QuickAccessvue_type_script_lang_ts_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } + +function QuickAccessvue_type_script_lang_ts_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { QuickAccessvue_type_script_lang_ts_ownKeys(Object(source), true).forEach(function (key) { QuickAccessvue_type_script_lang_ts_defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { QuickAccessvue_type_script_lang_ts_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } + +function QuickAccessvue_type_script_lang_ts_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; } + + + + + + + + + +function isElementInViewport(element) { + var rect = element.getBoundingClientRect(); + return rect.top >= 0 && rect.left >= 0 && rect.bottom <= window.$(window).height() && rect.right <= window.$(window).width(); +} + +function scrollFirstElementIntoView(element) { + if (element && element.scrollIntoView) { + // make sure search is visible + element.scrollIntoView(); + } +} + +/* harmony default export */ var QuickAccessvue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({ + props: {}, + directives: { + FocusAnywhereButHere: FocusAnywhereButHere, + FocusIf: FocusIf + }, + watch: { + searchActive: function searchActive(newValue) { + var classes = this.$refs.root.parentElement.classList; + classes.toggle('active', newValue); + classes.toggle('expanded', newValue); + } + }, + mounted: function mounted() { + var _this = this; + + // TODO: temporary, remove after angularjs is removed. + // this is currently needed since angularjs will render a div, then vue will render a div + // within it, but the top controls and CSS expect to have certain CSS classes in the root + // element. + // same applies to above watch for searchActive() + this.$refs.root.parentElement.classList.add('quick-access', 'piwikSelector'); + + if (typeof window.initTopControls !== 'undefined' && window.initTopControls) { + window.initTopControls(); + } + + Matomo_Matomo.helper.registerShortcut('f', translate('CoreHome_ShortcutSearch'), function (event) { + if (event.altKey) { + return; + } + + event.preventDefault(); + scrollFirstElementIntoView(_this.$refs.root); + + _this.activateSearch(); + }); + }, + data: function data() { + var hasSegmentSelector = !!document.querySelector('.segmentEditorPanel'); + return { + menuItems: [], + numMenuItems: 0, + searchActive: false, + searchTerm: '', + searchIndex: 0, + menuIndexCounter: -1, + topMenuItems: null, + leftMenuItems: null, + segmentItems: null, + hasSegmentSelector: hasSegmentSelector, + sites: [], + isLoading: false + }; + }, + created: function created() { + this.searchMenu = debounce(this.searchMenu.bind(this)); + }, + computed: { + hasSitesSelector: function hasSitesSelector() { + return !!document.querySelector('.top_controls [piwik-siteselector]'); + }, + quickAccessTitle: function quickAccessTitle() { + var searchAreasTitle = ''; + var searchAreas = [translate('CoreHome_MenuEntries')]; + + if (this.hasSegmentSelector) { + searchAreas.push(translate('CoreHome_Segments')); + } + + if (this.hasSitesSelector) { + searchAreas.push(translate('SitesManager_Sites')); + } + + while (searchAreas.length) { + searchAreasTitle += searchAreas.shift(); + + if (searchAreas.length >= 2) { + searchAreasTitle += ', '; + } else if (searchAreas.length === 1) { + searchAreasTitle += " ".concat(translate('General_And'), " "); + } + } + + return translate('CoreHome_QuickAccessTitle', searchAreasTitle); + } + }, + emits: ['itemSelected', 'blur'], + methods: { + onKeypress: function onKeypress(event) { + var _this2 = this; + + var areSearchResultsDisplayed = this.searchTerm && this.searchActive; + var isTabKey = event.which === 9; + var isEscKey = event.which === 27; + + if (event.which === 38) { + this.highlightPreviousItem(); + event.preventDefault(); + } else if (event.which === 40) { + this.highlightNextItem(); + event.preventDefault(); + } else if (event.which === 13) { + this.clickQuickAccessMenuItem(); + } else if (isTabKey && areSearchResultsDisplayed) { + this.deactivateSearch(); + } else if (isEscKey && areSearchResultsDisplayed) { + this.deactivateSearch(); + } else { + setTimeout(function () { + _this2.searchActive = true; + + _this2.searchMenu(_this2.searchTerm); + }); + } + }, + highlightPreviousItem: function highlightPreviousItem() { + if (this.searchIndex - 1 < 0) { + this.searchIndex = 0; + } else { + this.searchIndex -= 1; + } + + this.makeSureSelectedItemIsInViewport(); + }, + highlightNextItem: function highlightNextItem() { + var numTotal = this.$refs.root.querySelectorAll('li.result').length; + + if (numTotal <= this.searchIndex + 1) { + this.searchIndex = numTotal - 1; + } else { + this.searchIndex += 1; + } + + this.makeSureSelectedItemIsInViewport(); + }, + clickQuickAccessMenuItem: function clickQuickAccessMenuItem() { + var _this3 = this; + + var selectedMenuElement = this.getCurrentlySelectedElement(); + + if (selectedMenuElement) { + setTimeout(function () { + selectedMenuElement.click(); + + _this3.$emit('itemSelected', selectedMenuElement); + }, 20); + } + }, + deactivateSearch: function deactivateSearch() { + this.searchTerm = ''; + this.searchActive = false; + this.$refs.root.querySelector('input').blur(); + }, + makeSureSelectedItemIsInViewport: function makeSureSelectedItemIsInViewport() { + var element = this.getCurrentlySelectedElement(); + + if (element && !isElementInViewport(element)) { + scrollFirstElementIntoView(element); + } + }, + getCurrentlySelectedElement: function getCurrentlySelectedElement() { + var results = this.$refs.root.querySelectorAll('li.result'); + + if (results && results.length && results.item(this.searchIndex)) { + return results.item(this.searchIndex); + } + + return null; + }, + searchMenu: function searchMenu(unprocessedSearchTerm) { + var _this4 = this; + + var searchTerm = unprocessedSearchTerm.toLowerCase(); + var index = -1; + var menuItemsIndex = {}; + var menuItems = []; + + var moveToCategory = function moveToCategory(theSubmenuItem) { + // force rerender of element to prevent weird side effects + var submenuItem = QuickAccessvue_type_script_lang_ts_objectSpread({}, theSubmenuItem); // needed for proper highlighting with arrow keys + + + index += 1; + submenuItem.menuIndex = index; + var category = submenuItem.category; + + if (!(category in menuItemsIndex)) { + menuItems.push({ + title: category, + items: [] + }); + menuItemsIndex[category] = menuItems.length - 1; + } + + var indexOfCategory = menuItemsIndex[category]; + menuItems[indexOfCategory].items.push(submenuItem); + }; + + this.resetSearchIndex(); + + if (this.hasSitesSelector) { + this.isLoading = true; + SiteSelector_SitesStore.searchSite(searchTerm).then(function (sites) { + _this4.sites = sites; + }).finally(function () { + _this4.isLoading = false; + }); + } + + var menuItemMatches = function menuItemMatches(i) { + return i.name.toLowerCase().indexOf(searchTerm) !== -1 || i.category.toLowerCase().indexOf(searchTerm) !== -1; + }; // get the menu items on first search since this component can be mounted + // before the menus are + + + if (this.topMenuItems === null) { + this.topMenuItems = this.getTopMenuItems(); + } + + if (this.leftMenuItems === null) { + this.leftMenuItems = this.getLeftMenuItems(); + } + + if (this.segmentItems === null) { + this.segmentItems = this.getSegmentItems(); + } + + var topMenuItems = this.topMenuItems.filter(menuItemMatches); + var leftMenuItems = this.leftMenuItems.filter(menuItemMatches); + var segmentItems = this.segmentItems.filter(menuItemMatches); + topMenuItems.forEach(moveToCategory); + leftMenuItems.forEach(moveToCategory); + segmentItems.forEach(moveToCategory); + this.numMenuItems = topMenuItems.length + leftMenuItems.length + segmentItems.length; + this.menuItems = menuItems; + }, + resetSearchIndex: function resetSearchIndex() { + this.searchIndex = 0; + this.makeSureSelectedItemIsInViewport(); + }, + selectSite: function selectSite(idSite) { + SiteSelector_SitesStore.loadSite(idSite); + }, + selectMenuItem: function selectMenuItem(index) { + var target = document.querySelector("[quick_access='".concat(index, "']")); + + if (target) { + this.deactivateSearch(); + var href = target.getAttribute('href'); + + if (href && href.length > 10 && target && target.click) { + try { + target.click(); + } catch (e) { + window.$(target).click(); + } + } else { + // not sure why jquery is used here and above, but only sometimes. keeping for BC. + window.$(target).click(); + } + } + }, + onBlur: function onBlur() { + this.searchActive = false; + this.$emit('blur'); + }, + activateSearch: function activateSearch() { + this.searchActive = true; + }, + getTopMenuItems: function getTopMenuItems() { + var _this5 = this; + + var category = translate('CoreHome_Menu'); + var topMenuItems = []; + document.querySelectorAll('nav .sidenav li > a').forEach(function (element) { + var text = element.textContent.trim(); + + if (!text) { + text = element.getAttribute('title').trim(); // possibly a icon, use title instead + } + + if (text) { + topMenuItems.push({ + name: text, + index: _this5.menuIndexCounter += 1, + category: category + }); + element.setAttribute('quick_access', "".concat(_this5.menuIndexCounter)); + } + }); + return topMenuItems; + }, + getLeftMenuItems: function getLeftMenuItems() { + var _this6 = this; + + var leftMenuItems = []; + document.querySelectorAll('#secondNavBar .menuTab').forEach(function (element) { + var category = window.$(element).find('> .item').text().trim(); + + if (category && category.lastIndexOf('\n') !== -1) { + // remove "\n\nMenu" + category = category.substr(0, category.lastIndexOf('\n')).trim(); + } + + window.$(element).find('li .item').each(function (i, subElement) { + var text = subElement.textContent.trim(); + + if (text) { + leftMenuItems.push({ + name: text, + category: category, + index: _this6.menuIndexCounter += 1 + }); + subElement.setAttribute('quick_access', "".concat(_this6.menuIndexCounter)); + } + }); + }); + return leftMenuItems; + }, + getSegmentItems: function getSegmentItems() { + var _this7 = this; + + if (!this.hasSegmentSelector) { + return []; + } + + var category = translate('CoreHome_Segments'); + var segmentItems = []; + document.querySelectorAll('.segmentList [data-idsegment]').forEach(function (element) { + var text = element.querySelector('.segname').textContent.trim(); + + if (text) { + segmentItems.push({ + name: text, + category: category, + index: _this7.menuIndexCounter += 1 + }); + element.setAttribute('quick_access', "".concat(_this7.menuIndexCounter)); + } + }); + return segmentItems; + } + } +})); +// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/QuickAccess/QuickAccess.vue?vue&type=script&lang=ts + +// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/QuickAccess/QuickAccess.vue + + + +QuickAccessvue_type_script_lang_ts.render = QuickAccessvue_type_template_id_d1e03d32_render + +/* harmony default export */ var QuickAccess = (QuickAccessvue_type_script_lang_ts); +// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/QuickAccess/QuickAccess.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 QuickAccess_adapter = (createAngularJsAdapter({ + component: QuickAccess, + directiveName: 'piwikQuickAccess', + events: { + itemSelected: function itemSelected(event, vm, scope, elem, attrs, controller, $timeout) { + $timeout(); + }, + blur: function blur(event, vm, scope) { + setTimeout(function () { + return scope.$apply(); + }); + } + } +})); +// 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/ActivityIndicator/ActivityIndicator.vue?vue&type=template&id=6af4d064 + +var ActivityIndicatorvue_type_template_id_6af4d064_hoisted_1 = { + class: "loadingPiwik" +}; + +var ActivityIndicatorvue_type_template_id_6af4d064_hoisted_2 = /*#__PURE__*/Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("img", { + src: "plugins/Morpheus/images/loading-blue.gif", + alt: "" +}, null, -1); + +function ActivityIndicatorvue_type_template_id_6af4d064_render(_ctx, _cache, $props, $setup, $data, $options) { + 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", ActivityIndicatorvue_type_template_id_6af4d064_hoisted_1, [ActivityIndicatorvue_type_template_id_6af4d064_hoisted_2, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("span", null, Object(external_commonjs_vue_commonjs2_vue_root_Vue_["toDisplayString"])(_ctx.loadingMessage), 1)], 512)), [[external_commonjs_vue_commonjs2_vue_root_Vue_["vShow"], _ctx.loading]]); +} +// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.vue?vue&type=template&id=6af4d064 + +// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-3!./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/ActivityIndicator/ActivityIndicator.vue?vue&type=script&lang=ts + + +/* harmony default export */ var ActivityIndicatorvue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({ + props: { + loading: { + type: Boolean, + required: true, + default: false + }, + loadingMessage: { + type: String, + required: false, + default: translate('General_LoadingData') + } + } +})); +// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.vue?vue&type=script&lang=ts + +// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.vue + + + +ActivityIndicatorvue_type_script_lang_ts.render = ActivityIndicatorvue_type_template_id_6af4d064_render + +/* harmony default export */ var ActivityIndicator = (ActivityIndicatorvue_type_script_lang_ts); +// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/ActivityIndicator/ActivityIndicator.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 ActivityIndicator_adapter = (createAngularJsAdapter({ + component: ActivityIndicator, + scope: { + loading: { + vue: 'loading', + angularJsBind: '<' + }, + loadingMessage: { + vue: 'loadingMessage', + angularJsBind: '<', + default: function _default() { + return translate('General_LoadingData'); + } + } + }, + $inject: [], + directiveName: 'piwikActivityIndicator' +})); +// 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/Alert/Alert.vue?vue&type=template&id=c3863ae2 +function Alertvue_type_template_id_c3863ae2_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; } + + +function Alertvue_type_template_id_c3863ae2_render(_ctx, _cache, $props, $setup, $data, $options) { + 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"])(["alert", Alertvue_type_template_id_c3863ae2_defineProperty({}, "alert-".concat(_ctx.severity), true)]) + }, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["renderSlot"])(_ctx.$slots, "default")], 2); +} +// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/Alert/Alert.vue?vue&type=template&id=c3863ae2 + +// CONCATENATED MODULE: ./node_modules/@vue/cli-plugin-typescript/node_modules/cache-loader/dist/cjs.js??ref--14-0!./node_modules/@vue/cli-plugin-typescript/node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader??ref--14-3!./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/Alert/Alert.vue?vue&type=script&lang=ts + +/* harmony default export */ var Alertvue_type_script_lang_ts = (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["defineComponent"])({ + props: { + severity: { + type: String, + required: true + } + } +})); +// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/Alert/Alert.vue?vue&type=script&lang=ts + +// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/Alert/Alert.vue + + + +Alertvue_type_script_lang_ts.render = Alertvue_type_template_id_c3863ae2_render + +/* harmony default export */ var Alert = (Alertvue_type_script_lang_ts); +// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/Alert/Alert.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 Alert_adapter = (createAngularJsAdapter({ + component: Alert, + scope: { + severity: { + vue: 'severity', + angularJsBind: '@piwikAlert' + } + }, + directiveName: 'piwikAlert', + transclude: true +})); +// CONCATENATED MODULE: ./plugins/CoreHome/vue/src/CookieHelper/CookieHelper.ts +/* + * General utils for managing cookies in Typescript. + */ +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types +function setCookie(name, val, seconds) { + var date = new Date(); // set default day to 3 days + + if (!seconds) { + // eslint-disable-next-line no-param-reassign + seconds = 3 * 24 * 60 * 1000; + } // Set it expire in n days + + + date.setTime(date.getTime() + seconds); // Set it + + document.cookie = "".concat(name, "=").concat(val, "; expires=").concat(date.toUTCString(), "; path=/"); +} // eslint-disable-next-line consistent-return,@typescript-eslint/explicit-module-boundary-types + +function getCookie(name) { + var value = "; ".concat(document.cookie); + var parts = value.split("; ".concat(name, "=")); // if cookie not exist return null + // eslint-disable-next-line eqeqeq + + if (parts.length == 2) { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + var data = parts.pop().split(';').shift(); + + if (typeof data !== 'undefined') { + return data; + } + } + + return null; +} // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types + +function deleteCookie(name) { + var date = new Date(); // Set it expire in -1 days + + date.setTime(date.getTime() + -1 * 24 * 60 * 60 * 1000); // Set it + + document.cookie = "".concat(name, "=; expires=").concat(date.toUTCString(), "; path=/"); +} +// 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/Notification/Notification.vue?vue&type=template&id=e3d12348 + +var Notificationvue_type_template_id_e3d12348_hoisted_1 = { + key: 0 +}; +var Notificationvue_type_template_id_e3d12348_hoisted_2 = ["data-notification-instance-id"]; +var Notificationvue_type_template_id_e3d12348_hoisted_3 = { + key: 1 +}; +var Notificationvue_type_template_id_e3d12348_hoisted_4 = { + class: "notification-body" +}; +var Notificationvue_type_template_id_e3d12348_hoisted_5 = ["innerHTML"]; +var Notificationvue_type_template_id_e3d12348_hoisted_6 = { + key: 1 +}; +function Notificationvue_type_template_id_e3d12348_render(_ctx, _cache, $props, $setup, $data, $options) { + return Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createBlock"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Transition"], { + name: _ctx.type === 'toast' ? 'slow-fade-out' : undefined, + onAfterLeave: _cache[1] || (_cache[1] = function ($event) { + return _ctx.toastClosed(); + }) + }, { + default: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withCtx"])(function () { + return [!_ctx.deleted ? (Object(external_commonjs_vue_commonjs2_vue_root_Vue_["openBlock"])(), Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementBlock"])("div", Notificationvue_type_template_id_e3d12348_hoisted_1, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Transition"], { + name: _ctx.type === 'toast' ? 'toast-slide-up' : undefined, + appear: "" + }, { + default: Object(external_commonjs_vue_commonjs2_vue_root_Vue_["withCtx"])(function () { + return [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createElementVNode"])("div", null, [Object(external_commonjs_vue_commonjs2_vue_root_Vue_["createVNode"])(external_commonjs_vue_commonjs2_vue_root_Vue_["Transition"], { name: _ctx.animate ? 'fade-in' : undefined, appear: "" }, { @@ -5550,6 +6795,11 @@ NotificationGroupvue_type_script_lang_ts.render = NotificationGroupvue_type_temp + + + + + diff --git a/plugins/CoreHome/vue/dist/CoreHome.umd.min.js b/plugins/CoreHome/vue/dist/CoreHome.umd.min.js index 3ef044bf58..0edd13cf44 100644 --- a/plugins/CoreHome/vue/dist/CoreHome.umd.min.js +++ b/plugins/CoreHome/vue/dist/CoreHome.umd.min.js @@ -1,151 +1,151 @@ -(function(e,t){"object"===typeof exports&&"object"===typeof module?module.exports=t(require("vue")):"function"===typeof define&&define.amd?define([],t):"object"===typeof exports?exports["CoreHome"]=t(require("vue")):e["CoreHome"]=t(e["Vue"])})("undefined"!==typeof self?self:this,(function(e){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var a=t[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},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 r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)n.d(r,a,function(t){return e[t]}.bind(null,a));return r},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/CoreHome/vue/dist/",n(n.s="fae3")}({2342:function(e,t,n){"use strict"; +(function(e,t){"object"===typeof exports&&"object"===typeof module?module.exports=t(require("vue")):"function"===typeof define&&define.amd?define([],t):"object"===typeof exports?exports["CoreHome"]=t(require("vue")):e["CoreHome"]=t(e["Vue"])})("undefined"!==typeof self?self:this,(function(e){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},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 r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},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/CoreHome/vue/dist/",n(n.s="fae3")}({2342:function(e,t,n){"use strict"; /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */window.hasBlockedContent=!1},"8bbf":function(t,n){t.exports=e},fae3:function(e,t,n){"use strict";if(n.r(t),n.d(t,"createAngularJsAdapter",(function(){return wt})),n.d(t,"activityIndicatorAdapter",(function(){return yr})),n.d(t,"ActivityIndicator",(function(){return br})),n.d(t,"translate",(function(){return C})),n.d(t,"alertAdapter",(function(){return Dr})),n.d(t,"AjaxHelper",(function(){return Ne})),n.d(t,"setCookie",(function(){return Cr})),n.d(t,"getCookie",(function(){return Sr})),n.d(t,"deleteCookie",(function(){return Pr})),n.d(t,"MatomoUrl",(function(){return ke})),n.d(t,"Matomo",(function(){return D})),n.d(t,"Periods",(function(){return p})),n.d(t,"Day",(function(){return z})),n.d(t,"Week",(function(){return X})),n.d(t,"Month",(function(){return re})),n.d(t,"Year",(function(){return se})),n.d(t,"Range",(function(){return R})),n.d(t,"format",(function(){return S})),n.d(t,"getToday",(function(){return P})),n.d(t,"parseDate",(function(){return E})),n.d(t,"todayIsInRange",(function(){return T})),n.d(t,"Dropdown",(function(){return Be})),n.d(t,"FocusAnywhereButHere",(function(){return Re})),n.d(t,"FocusIf",(function(){return Je})),n.d(t,"MatomoDialog",(function(){return ut})),n.d(t,"ExpandOnClick",(function(){return Xe})),n.d(t,"ExpandOnHover",(function(){return ot})),n.d(t,"EnrichedHeadline",(function(){return Mt})),n.d(t,"ContentBlock",(function(){return qt})),n.d(t,"Comparisons",(function(){return Nn})),n.d(t,"Menudropdown",(function(){return zn})),n.d(t,"DatePicker",(function(){return rr})),n.d(t,"DateRangePicker",(function(){return sr})),n.d(t,"PeriodDatePicker",(function(){return fr})),n.d(t,"Notification",(function(){return Fr})),n.d(t,"NotificationGroup",(function(){return Xr})),n.d(t,"NotificationsStore",(function(){return zr})),"undefined"!==typeof window){var r=window.document.currentScript,a=r&&r.src.match(/(.+\/)[^/]+\.js(\?.*)?$/);a&&(n.p=a[1])}n("2342");var o=n("8bbf");function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n1?t-1:0),r=1;r1?t-1:0),r=1;r1?t-1:0),r=1;r1?t-1:0),r=1;r1?t-1:0),r=1;r1?t-1:0),r=1;r=e[0]&&P()<=e[1])}function x(e,t){return A(e)||H(e,t)||N(e,t)||I()}function I(){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 N(e,t){if(e){if("string"===typeof e)return B(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)?B(e,t):void 0}}function B(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=e[0]&&E()<=e[1])}function I(e,t){return A(e)||M(e,t)||N(e,t)||x()}function x(){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 N(e,t){if(e){if("string"===typeof e)return B(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)?B(e,t):void 0}}function B(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&void 0!==arguments[1]?arguments[1]:"day";if(/^previous/.test(t)){var r=e.getLastNRange(n,"2").startDate;return e.getLastNRange(n,t.substring(8),r)}if(/^last/.test(t))return e.getLastNRange(n,t.substring(4));var a=decodeURIComponent(t).split(",");return new e(E(a[0]),E(a[1]),n)}},{key:"getDisplayText",value:function(){return C("General_DateRangeInPeriodList")}}]),e}();function U(){return{getAllLabels:p.getAllLabels.bind(p),isRecognizedPeriod:p.isRecognizedPeriod.bind(p),get:p.get.bind(p),parse:p.parse.bind(p),parseDate:E,format:S,RangePeriod:R,todayIsInRange:T}}function _(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function J(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:"day";if(/^previous/.test(t)){var r=e.getLastNRange(n,"2").startDate;return e.getLastNRange(n,t.substring(8),r)}if(/^last/.test(t))return e.getLastNRange(n,t.substring(4));var i=decodeURIComponent(t).split(",");return new e(P(i[0]),P(i[1]),n)}},{key:"getDisplayText",value:function(){return D("General_DateRangeInPeriodList")}}]),e}();function R(){return{getAllLabels:f.getAllLabels.bind(f),isRecognizedPeriod:f.isRecognizedPeriod.bind(f),get:f.get.bind(f),parse:f.parse.bind(f),parseDate:P,format:C,RangePeriod:_,todayIsInRange:T}}function U(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function q(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n="string"!==typeof e?this.stringify(e):e,r="string"!==typeof t?this.stringify(t):t,i="?".concat(n);r.length&&(i="".concat(i,"#?").concat(r)),window.broadcast.propagateNewPage("",void 0,void 0,void 0,i)}},{key:"getSearchParam",value:function(e){var t=window.location.href.split("#"),n=new RegExp("".concat(e,"(\\[]|=)"));if(t&&t[1]&&n.test(decodeURIComponent(t[1]))){var r=window.broadcast.getValueFromHash(e,window.location.href);if(r||"date"!==e&&"period"!==e&&"idSite"!==e)return r}return window.broadcast.getValueFromUrl(e,window.location.search)}},{key:"stringify",value:function(e){return $.param(e).replace(/%5B%5D/g,"[]")}},{key:"updatePeriodParamsFromUrl",value:function(){var e=this.getSearchParam("date"),t=this.getSearchParam("period");if(be(t,e)&&(ve.period!==t||ve.currentDateString!==e)){ve.period=t;var n=f.parse(t,e).getDateRange();ve.startDateString=C(n[0]),ve.endDateString=C(n[1]),ve.updateDateInTitle(e,t),"range"===ve.period&&(e="".concat(ve.startDateString,",").concat(ve.endDateString)),ve.currentDateString=e}}},{key:"setUrlQuery",value:function(e){this.urlQuery.value=e.replace(/^\?/,"")}},{key:"setHashQuery",value:function(e){this.hashQuery.value=e.replace(/^[#/?]+/,"")}}]),e}(),we=new ye,Oe=we; /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later */ -function Oe(){var e={getSearchParam:ke.getSearchParam.bind(ke)};return e} +function ke(){var e={getSearchParam:Oe.getSearchParam.bind(Oe)};return e} /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later */ -function je(){return D}function De(e,t){t.$oldEmit=t.$emit,t.$emit=function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r1?n-1:0),a=1;a1?t-1:0),r=1;r1?n-1:0),i=1;i=0;e-=1)this[e]&&4!==this[e].readyState||this.splice(e,1)},window.globalAjaxQueue.push=function(){for(var e,t=arguments.length,n=new Array(t),r=0;r1&&void 0!==arguments[1]?arguments[1]:{},r=new e;return n.withTokenInUrl&&r.withTokenInUrl(),r.setFormat("json"),r.addParams(Se({module:"API",format:"json"},t),"get"),n.postParams&&r.addParams(n.postParams,"post"),r.send()}}]),e}();function $e(){return globalAjaxQueue}window.ajaxHelper=Ne,angular.module("piwikApp.service").service("globalAjaxQueue",$e); + */function xe(e,t){if("abort"!==t)if("undefined"!==typeof Piwik_Popover){var n=$("#loadingError");Piwik_Popover.isOpen()&&e&&500===e.status?e&&500===e.status&&$(document.body).html(piwikHelper.escape(e.responseText)):n.show()}else console.log("Request failed: ".concat(e.responseText))}ve.updatePeriodParamsFromUrl=we.updatePeriodParamsFromUrl.bind(we),ke.$inject=[],angular.module("piwikApp.service").service("piwikUrl",ke),window.angular.module("piwikApp.service").service("piwik",Se),je.$inject=["piwik","$rootScope"],window.angular.module("piwikApp.service").run(je),window.globalAjaxQueue=[],window.globalAjaxQueue.active=0,window.globalAjaxQueue.clean=function(){for(var e=this.length;e>=0;e-=1)this[e]&&4!==this[e].readyState||this.splice(e,1)},window.globalAjaxQueue.push=function(){for(var e,t=arguments.length,n=new Array(t),r=0;r1&&void 0!==arguments[1]?arguments[1]:{},r=new e;return n.withTokenInUrl&&r.withTokenInUrl(),r.setFormat("json"),r.addParams(Ce({module:"API",format:"json"},t),"get"),n.postParams&&r.addParams(n.postParams,"post"),r.send()}}]),e}();function Be(){return globalAjaxQueue}window.ajaxHelper=Ne,angular.module("piwikApp.service").service("globalAjaxQueue",Be); /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */var Be={mounted:function(e,t){var n={};$(e).addClass("matomo-dropdown-menu");var r=!!$(e).parent().closest(".dropdown-content").length;r&&(n={hover:!0},$(e).addClass("submenu"),$(t.value.activates).addClass("submenu-dropdown-content"),$(e).parents(".dropdown-content").addClass("submenu-container")),$(e).dropdown(n)}}; + */var Me={mounted:function(e,t){var n={};$(e).addClass("matomo-dropdown-menu");var r=!!$(e).parent().closest(".dropdown-content").length;r&&(n={hover:!0},$(e).addClass("submenu"),$(t.value.activates).addClass("submenu-dropdown-content"),$(e).parents(".dropdown-content").addClass("submenu-container")),$(e).dropdown(n)}}; /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */function He(e){return{restrict:"A",link:function(t,n,r){var a={instance:null,value:{activates:$("#".concat(r.activates))[0]},oldValue:null,modifiers:{},dir:{}};e((function(){Be.mounted(n[0],a)}))}}} + */function Ae(e){return{restrict:"A",link:function(t,n,r){var i={instance:null,value:{activates:$("#".concat(r.activates))[0]},oldValue:null,modifiers:{},dir:{}};e((function(){Me.mounted(n[0],i)}))}}} /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later */ -function Ae(e,t,n){var r=t.value.isMouseDown&&t.value.hasScrolled;t.value.isMouseDown=!1,t.value.hasScrolled=!1,r||e.contains(n.target)||t.value&&t.value.blur()}function Me(e,t){t.value.hasScrolled=!0}function Fe(e,t){t.value.isMouseDown=!0,t.value.hasScrolled=!1}function Ve(e,t,n){27===n.which&&setTimeout((function(){t.value.isMouseDown=!1,t.value.hasScrolled=!1,t.value.blur&&t.value.blur()}),0)}He.$inject=["$timeout"],angular.module("piwikApp").directive("piwikDropdownMenu",He);var Le=document.documentElement,Re={mounted:function(e,t){t.value.isMouseDown=!1,t.value.hasScrolled=!1,t.value.onEscapeHandler=Ve.bind(null,e,t),t.value.onMouseDown=Fe.bind(null,e,t),t.value.onClickOutsideElement=Ae.bind(null,e,t),t.value.onScroll=Me.bind(null,e,t),Le.addEventListener("keyup",t.value.onEscapeHandler),Le.addEventListener("mousedown",t.value.onMouseDown),Le.addEventListener("mouseup",t.value.onClickOutsideElement),Le.addEventListener("scroll",t.value.onScroll)},unmounted:function(e,t){Le.removeEventListener("keyup",t.value.onEscapeHandler),Le.removeEventListener("mousedown",t.value.onMouseDown),Le.removeEventListener("mouseup",t.value.onClickOutsideElement),Le.removeEventListener("scroll",t.value.onScroll)}}; +function $e(e,t,n){var r=t.value.isMouseDown&&t.value.hasScrolled;t.value.isMouseDown=!1,t.value.hasScrolled=!1,r||e.contains(n.target)||t.value&&t.value.blur()}function Ve(e,t){t.value.hasScrolled=!0}function Le(e,t){t.value.isMouseDown=!0,t.value.hasScrolled=!1}function He(e,t,n){27===n.which&&setTimeout((function(){t.value.isMouseDown=!1,t.value.hasScrolled=!1,t.value.blur&&t.value.blur()}),0)}Ae.$inject=["$timeout"],angular.module("piwikApp").directive("piwikDropdownMenu",Ae);var Fe=document.documentElement,_e={mounted:function(e,t){t.value.isMouseDown=!1,t.value.hasScrolled=!1,t.value.onEscapeHandler=He.bind(null,e,t),t.value.onMouseDown=Le.bind(null,e,t),t.value.onClickOutsideElement=$e.bind(null,e,t),t.value.onScroll=Ve.bind(null,e,t),Fe.addEventListener("keyup",t.value.onEscapeHandler),Fe.addEventListener("mousedown",t.value.onMouseDown),Fe.addEventListener("mouseup",t.value.onClickOutsideElement),Fe.addEventListener("scroll",t.value.onScroll)},unmounted:function(e,t){Fe.removeEventListener("keyup",t.value.onEscapeHandler),Fe.removeEventListener("mousedown",t.value.onMouseDown),Fe.removeEventListener("mouseup",t.value.onClickOutsideElement),Fe.removeEventListener("scroll",t.value.onScroll)}}; /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later */ -function Ue(){return{restrict:"A",link:function(e,t,n){var r={instance:null,value:{blur:function(){setTimeout((function(){e.$apply(n.piwikFocusAnywhereButHere)}),0)}},oldValue:null,modifiers:{},dir:{}};Re.mounted(t[0],r),t.on("$destroy",(function(){return Re.unmounted(t[0],r)}))}}} +function Re(){return{restrict:"A",link:function(e,t,n){var r={instance:null,value:{blur:function(){setTimeout((function(){e.$apply(n.piwikFocusAnywhereButHere)}),0)}},oldValue:null,modifiers:{},dir:{}};_e.mounted(t[0],r),t.on("$destroy",(function(){return _e.unmounted(t[0],r)}))}}} /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later */ -function _e(e,t){t.arg&&setTimeout((function(){e.focus(),t.value.afterFocus&&t.value.afterFocus()}),5)}Ue.$inject=[],angular.module("piwikApp.directive").directive("piwikFocusAnywhereButHere",Ue);var Je={mounted:function(e,t){_e(e,t)},updated:function(e,t){_e(e,t)}}; +function Ue(e,t){t.arg&&setTimeout((function(){e.focus(),t.value.afterFocus&&t.value.afterFocus()}),5)}Re.$inject=[],angular.module("piwikApp.directive").directive("piwikFocusAnywhereButHere",Re);var qe={mounted:function(e,t){Ue(e,t)},updated:function(e,t){Ue(e,t)}}; /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */function Ge(){return{restrict:"A",link:function(e,t,n){e.$watch(n.piwikFocusIf,(function(n){var r={instance:null,arg:n?"1":void 0,value:{afterFocus:function(){return e.$apply()}},oldValue:null,modifiers:{},dir:{}};Je.updated(t[0],r)}))}}} + */function Je(){return{restrict:"A",link:function(e,t,n){e.$watch(n.piwikFocusIf,(function(n){var r={instance:null,arg:n?"1":void 0,value:{afterFocus:function(){return e.$apply()}},oldValue:null,modifiers:{},dir:{}};qe.updated(t[0],r)}))}}} /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later */ -function qe(e){e.classList.toggle("expanded");var t=e.querySelector(".dropdown.positionInViewport");t&&D.helper.setMarginLeftToBeInViewport(t)}function ze(e,t,n){var r=t.value.isMouseDown&&t.value.hasScrolled;t.value.isMouseDown=!1,t.value.hasScrolled=!1,r||e.contains(n.target)||e.classList.remove("expanded")}function Qe(e){e.value.hasScrolled=!0}function Ye(e){e.value.isMouseDown=!0,e.value.hasScrolled=!1}function We(e,t,n){27===n.which&&(t.value.isMouseDown=!1,t.value.hasScrolled=!1,e.classList.remove("expanded"))}angular.module("piwikApp.directive").directive("piwikFocusIf",Ge);var Ke=document.documentElement,Xe={mounted:function(e,t){t.value.isMouseDown=!1,t.value.hasScrolled=!1,t.value.onExpand=qe.bind(null,e),t.value.onEscapeHandler=We.bind(null,e,t),t.value.onMouseDown=Ye.bind(null,t),t.value.onClickOutsideElement=ze.bind(null,e,t),t.value.onScroll=Qe.bind(null,t),t.value.expander.addEventListener("click",t.value.onExpand),Ke.addEventListener("keyup",t.value.onEscapeHandler),Ke.addEventListener("mousedown",t.value.onMouseDown),Ke.addEventListener("mouseup",t.value.onClickOutsideElement),Ke.addEventListener("scroll",t.value.onScroll)},unmounted:function(e,t){t.value.expander.removeEventListener("click",t.value.onExpand),Ke.removeEventListener("keyup",t.value.onEscapeHandler),Ke.removeEventListener("mousedown",t.value.onMouseDown),Ke.removeEventListener("mouseup",t.value.onClickOutsideElement),Ke.removeEventListener("scroll",t.value.onScroll)}}; +function Ge(e){e.classList.toggle("expanded");var t=e.querySelector(".dropdown.positionInViewport");t&&j.helper.setMarginLeftToBeInViewport(t)}function ze(e,t,n){var r=t.value.isMouseDown&&t.value.hasScrolled;t.value.isMouseDown=!1,t.value.hasScrolled=!1,r||e.contains(n.target)||e.classList.remove("expanded")}function Qe(e){e.value.hasScrolled=!0}function Ke(e){e.value.isMouseDown=!0,e.value.hasScrolled=!1}function We(e,t,n){27===n.which&&(t.value.isMouseDown=!1,t.value.hasScrolled=!1,e.classList.remove("expanded"))}angular.module("piwikApp.directive").directive("piwikFocusIf",Je);var Ye=document.documentElement,Xe={mounted:function(e,t){t.value.isMouseDown=!1,t.value.hasScrolled=!1,t.value.onExpand=Ge.bind(null,e),t.value.onEscapeHandler=We.bind(null,e,t),t.value.onMouseDown=Ke.bind(null,t),t.value.onClickOutsideElement=ze.bind(null,e,t),t.value.onScroll=Qe.bind(null,t),t.value.expander.addEventListener("click",t.value.onExpand),Ye.addEventListener("keyup",t.value.onEscapeHandler),Ye.addEventListener("mousedown",t.value.onMouseDown),Ye.addEventListener("mouseup",t.value.onClickOutsideElement),Ye.addEventListener("scroll",t.value.onScroll)},unmounted:function(e,t){t.value.expander.removeEventListener("click",t.value.onExpand),Ye.removeEventListener("keyup",t.value.onEscapeHandler),Ye.removeEventListener("mousedown",t.value.onMouseDown),Ye.removeEventListener("mouseup",t.value.onClickOutsideElement),Ye.removeEventListener("scroll",t.value.onScroll)}}; /*! * Matomo - free/libre analytics platform * @@ -159,111 +159,129 @@ function Ze(){return{restrict:"A",link:function(e,t){var n={instance:null,value: * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later */ -function et(e){e.classList.add("expanded");var t=e.querySelector(".dropdown.positionInViewport");t&&D.helper.setMarginLeftToBeInViewport(t)}function tt(e){e.classList.remove("expanded")}function nt(e,t){e.contains(t.target)||e.classList.remove("expanded")}function rt(e,t){27===t.which&&e.classList.remove("expanded")}Ze.$inject=[],angular.module("piwikApp").directive("piwikExpandOnClick",Ze);var at=document.documentElement,ot={mounted:function(e,t){t.value.onMouseEnter=et.bind(null,e),t.value.onMouseLeave=tt.bind(null,e),t.value.onClickOutsideElement=nt.bind(null,e),t.value.onEscapeHandler=rt.bind(null,e),t.value.expander.addEventListener("mouseenter",t.value.onMouseEnter),e.addEventListener("mouseleave",t.value.onMouseLeave),at.addEventListener("keyup",t.value.onEscapeHandler),at.addEventListener("mouseup",t.value.onClickOutsideElement)},unmounted:function(e,t){t.value.expander.removeEventListener("mouseenter",t.value.onMouseEnter),e.removeEventListener("mouseleave",t.value.onMouseLeave),document.removeEventListener("keyup",t.value.onEscapeHandler),document.removeEventListener("mouseup",t.value.onClickOutsideElement)}}; +function et(e){e.classList.add("expanded");var t=e.querySelector(".dropdown.positionInViewport");t&&j.helper.setMarginLeftToBeInViewport(t)}function tt(e){e.classList.remove("expanded")}function nt(e,t){e.contains(t.target)||e.classList.remove("expanded")}function rt(e,t){27===t.which&&e.classList.remove("expanded")}Ze.$inject=[],angular.module("piwikApp").directive("piwikExpandOnClick",Ze);var it=document.documentElement,at={mounted:function(e,t){t.value.onMouseEnter=et.bind(null,e),t.value.onMouseLeave=tt.bind(null,e),t.value.onClickOutsideElement=nt.bind(null,e),t.value.onEscapeHandler=rt.bind(null,e),t.value.expander.addEventListener("mouseenter",t.value.onMouseEnter),e.addEventListener("mouseleave",t.value.onMouseLeave),it.addEventListener("keyup",t.value.onEscapeHandler),it.addEventListener("mouseup",t.value.onClickOutsideElement)},unmounted:function(e,t){t.value.expander.removeEventListener("mouseenter",t.value.onMouseEnter),e.removeEventListener("mouseleave",t.value.onMouseLeave),document.removeEventListener("keyup",t.value.onEscapeHandler),document.removeEventListener("mouseup",t.value.onClickOutsideElement)}}; /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later */ -function it(){return{restrict:"A",link:function(e,t){var n={instance:null,value:{expander:t.find(".title").first()[0]},oldValue:null,modifiers:{},dir:{}};ot.mounted(t[0],n),t.on("$destroy",(function(){return ot.unmounted(t[0],n)}))}}}it.$inject=[],angular.module("piwikApp").directive("piwikExpandOnHover",it);var ct={ref:"root"};function st(e,t,n,r,a,i){return Object(o["withDirectives"])((Object(o["openBlock"])(),Object(o["createElementBlock"])("div",ct,[Object(o["renderSlot"])(e.$slots,"default")],512)),[[o["vShow"],e.modelValue]])}var lt=Object(o["defineComponent"])({props:{modelValue:{type:Boolean,required:!0},element:{type:HTMLElement,required:!1}},emits:["yes","no","closeEnd","close","validation","update:modelValue"],activated:function(){this.$emit("update:modelValue",!1)},watch:{modelValue:function(e,t){var n=this;if(e){var r=this.element||this.$refs.root.firstElementChild;D.helper.modalConfirm(r,{yes:function(){n.$emit("yes")},no:function(){n.$emit("no")},validation:function(){n.$emit("validation")}},{onCloseEnd:function(){n.element||n.$refs.root.appendChild(r),n.$emit("update:modelValue",!1),n.$emit("closeEnd")}})}else!1===e&&!0===t&&this.$emit("close")}}});lt.render=st;var ut=lt;function dt(e,t){return vt(e)||ht(e,t)||ft(e,t)||pt()}function pt(){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 ft(e,t){if(e){if("string"===typeof e)return mt(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)?mt(e,t):void 0}}function mt(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n')),c}return Object.entries(r).forEach((function(e){var t=dt(e,2),n=t[0],r=t[1];r.vue||(r.vue=n),r.angularJsBind&&(v[n]=r.angularJsBind)})),g.$inject=c||[],angular.module("piwikApp").directive(s,g),g} + */var gt=0;function bt(e){return e.substring(0,1).toLowerCase()+e.substring(1).replace(/[A-Z]/g,(function(e){return"-".concat(e.toLowerCase())}))}function yt(e){return e.substring(0,1).toLowerCase()+e.substring(1).replace(/-([a-z])/g,(function(e,t){return t.toUpperCase()}))}function wt(e){var t=e.component,n=e.require,r=e.scope,i=void 0===r?{}:r,o=e.events,c=void 0===o?{}:o,s=e.$inject,l=e.directiveName,u=e.transclude,d=e.mountPointFactory,f=e.postCreate,p=e.noScope,m=e.restrict,h=void 0===m?"A":m,v=gt;u&&(gt+=1);var g={};function b(){for(var e=arguments.length,r=new Array(e),o=0;o')),s}return Object.entries(i).forEach((function(e){var t=dt(e,2),n=t[0],r=t[1];r.vue||(r.vue=n),r.angularJsBind&&(g[n]=r.angularJsBind)})),b.$inject=s||[],angular.module("piwikApp").directive(l,b),b} /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */wt({component:ut,scope:{show:{vue:"modelValue",default:!1},element:{default:function(e,t){return t[0]}}},events:{yes:function(e,t,n,r){r.yes&&(t.$eval(r.yes),setTimeout((function(){t.$apply()}),0))},no:function(e,t,n,r){r.no&&(t.$eval(r.no),setTimeout((function(){t.$apply()}),0))},validation:function(e,t,n,r){r.no&&(t.$eval(r.no),setTimeout((function(){t.$apply()}),0))},close:function(e,t,n,r){r.close&&(t.$eval(r.close),setTimeout((function(){t.$apply()}),0))},"update:modelValue":function(e,t,n,r,a){setTimeout((function(){t.$apply(a(r.piwikDialog).assign(t,e))}),0)}},$inject:["$parse"],directiveName:"piwikDialog",transclude:!0,mountPointFactory:function(e,t){var n=$('
');return n.appendTo(t),n[0]},postCreate:function(e,t,n,r){t.$watch(r.piwikDialog,(function(t,n){n!==t&&(e.modelValue=t||!1)}))},noScope:!0});var kt={key:0,class:"title",tabindex:"6"},Ot=["href","title"],jt={class:"iconsBar"},Dt=["href","title"],Ct=Object(o["createElementVNode"])("span",{class:"icon-help"},null,-1),St=[Ct],Pt=["title"],Et=Object(o["createElementVNode"])("span",{class:"icon-info"},null,-1),Tt=[Et],xt={class:"ratingIcons"},It={class:"inlineHelp"},Nt=["innerHTML"],$t=["href"];function Bt(e,t,n,r,a,i){var c=Object(o["resolveComponent"])("RateFeature");return Object(o["openBlock"])(),Object(o["createElementBlock"])("div",{class:"enrichedHeadline",onMouseenter:t[1]||(t[1]=function(t){return e.showIcons=!0}),onMouseleave:t[2]||(t[2]=function(t){return e.showIcons=!1}),ref:"root"},[e.editUrl?Object(o["createCommentVNode"])("",!0):(Object(o["openBlock"])(),Object(o["createElementBlock"])("div",kt,[Object(o["renderSlot"])(e.$slots,"default")])),e.editUrl?(Object(o["openBlock"])(),Object(o["createElementBlock"])("a",{key:1,class:"title",href:e.editUrl,title:e.translate("CoreHome_ClickToEditX",e.$sanitize(e.actualFeatureName))},[Object(o["renderSlot"])(e.$slots,"default")],8,Ot)):Object(o["createCommentVNode"])("",!0),Object(o["withDirectives"])(Object(o["createElementVNode"])("span",jt,[e.helpUrl&&!e.actualInlineHelp?(Object(o["openBlock"])(),Object(o["createElementBlock"])("a",{key:0,rel:"noreferrer noopener",target:"_blank",class:"helpIcon",href:e.helpUrl,title:e.translate("CoreHome_ExternalHelp")},St,8,Dt)):Object(o["createCommentVNode"])("",!0),e.actualInlineHelp?(Object(o["openBlock"])(),Object(o["createElementBlock"])("a",{key:1,onClick:t[0]||(t[0]=function(t){return e.showInlineHelp=!e.showInlineHelp}),class:Object(o["normalizeClass"])(["helpIcon",{active:e.showInlineHelp}]),title:e.translate(e.reportGenerated?"General_HelpReport":"General_Help")},Tt,10,Pt)):Object(o["createCommentVNode"])("",!0),Object(o["createElementVNode"])("div",xt,[Object(o["createVNode"])(c,{title:e.actualFeatureName},null,8,["title"])])],512),[[o["vShow"],e.showIcons||e.showInlineHelp]]),Object(o["withDirectives"])(Object(o["createElementVNode"])("div",It,[Object(o["createElementVNode"])("div",{innerHTML:e.$sanitize(e.actualInlineHelp)},null,8,Nt),e.helpUrl?(Object(o["openBlock"])(),Object(o["createElementBlock"])("a",{key:0,rel:"noreferrer noopener",target:"_blank",class:"readMore",href:e.helpUrl},Object(o["toDisplayString"])(e.translate("General_MoreDetails")),9,$t)):Object(o["createCommentVNode"])("",!0)],512),[[o["vShow"],e.showInlineHelp]])],544)}var Ht=Object(o["defineAsyncComponent"])((function(){return new Promise((function(e){window.$(document).ready((function(){e(window.Feedback.RateFeature)}))}))})),At=Object(o["defineComponent"])({props:{helpUrl:{type:String,default:""},editUrl:{type:String,default:""},reportGenerated:String,featureName:String,inlineHelp:String},components:{RateFeature:Ht},data:function(){return{showIcons:!1,showInlineHelp:!1,actualFeatureName:this.featureName,actualInlineHelp:this.inlineHelp}},watch:{inlineHelp:function(e){this.actualInlineHelp=e},featureName:function(e){this.actualFeatureName=e}},mounted:function(){var e=this,t=this.$refs.root;setTimeout((function(){if(!e.actualInlineHelp){var n=t.querySelector(".title .inlineHelp");if(!n&&t.parentElement.nextElementSibling&&(n=t.parentElement.nextElementSibling.querySelector(".reportDocumentation")),n){var r=n.getAttribute("data-content").trim();r.length&&(e.actualInlineHelp="

".concat(r,"

"),setTimeout((function(){return n.remove()}),0))}}e.actualFeatureName||(e.actualFeatureName=t.querySelector(".title").textContent),e.reportGenerated&&p.parse(D.period,D.currentDateString).containsToday()&&window.$(t.querySelector(".report-generated")).tooltip({track:!0,content:e.reportGenerated,items:"div",show:!1,hide:!1})}))}});At.render=Bt;var Mt=At,Ft=(wt({component:Mt,scope:{helpUrl:{angularJsBind:"@"},editUrl:{angularJsBind:"@"},reportGenerated:{angularJsBind:"@?"},featureName:{angularJsBind:"@"},inlineHelp:{angularJsBind:"@?"}},directiveName:"piwikEnrichedHeadline",transclude:!0}),{class:"card",ref:"root"}),Vt={class:"card-content"},Lt={key:0,class:"card-title"},Rt={key:1,class:"card-title"},Ut={ref:"content"}; + */wt({component:ut,scope:{show:{vue:"modelValue",default:!1},element:{default:function(e,t){return t[0]}}},events:{yes:function(e,t,n,r,i){i.yes&&(n.$eval(i.yes),setTimeout((function(){n.$apply()}),0))},no:function(e,t,n,r,i){i.no&&(n.$eval(i.no),setTimeout((function(){n.$apply()}),0))},validation:function(e,t,n,r,i){i.no&&(n.$eval(i.no),setTimeout((function(){n.$apply()}),0))},close:function(e,t,n,r){r.close&&(t.$eval(r.close),setTimeout((function(){t.$apply()}),0))},"update:modelValue":function(e,t,n,r,i,a,o){setTimeout((function(){n.$apply(o(i.piwikDialog).assign(n,e))}),0)}},$inject:["$parse"],directiveName:"piwikDialog",transclude:!0,mountPointFactory:function(e,t){var n=$('
');return n.appendTo(t),n[0]},postCreate:function(e,t,n,r){t.$watch(r.piwikDialog,(function(t,n){n!==t&&(e.modelValue=t||!1)}))},noScope:!0});var Ot={key:0,class:"title",tabindex:"6"},kt=["href","title"],St={class:"iconsBar"},jt=["href","title"],Dt=Object(a["createElementVNode"])("span",{class:"icon-help"},null,-1),Ct=[Dt],Et=["title"],Pt=Object(a["createElementVNode"])("span",{class:"icon-info"},null,-1),Tt=[Pt],It={class:"ratingIcons"},xt={class:"inlineHelp"},Nt=["innerHTML"],Bt=["href"];function Mt(e,t,n,r,i,o){var c=Object(a["resolveComponent"])("RateFeature");return Object(a["openBlock"])(),Object(a["createElementBlock"])("div",{class:"enrichedHeadline",onMouseenter:t[1]||(t[1]=function(t){return e.showIcons=!0}),onMouseleave:t[2]||(t[2]=function(t){return e.showIcons=!1}),ref:"root"},[e.editUrl?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Ot,[Object(a["renderSlot"])(e.$slots,"default")])),e.editUrl?(Object(a["openBlock"])(),Object(a["createElementBlock"])("a",{key:1,class:"title",href:e.editUrl,title:e.translate("CoreHome_ClickToEditX",e.$sanitize(e.actualFeatureName))},[Object(a["renderSlot"])(e.$slots,"default")],8,kt)):Object(a["createCommentVNode"])("",!0),Object(a["withDirectives"])(Object(a["createElementVNode"])("span",St,[e.helpUrl&&!e.actualInlineHelp?(Object(a["openBlock"])(),Object(a["createElementBlock"])("a",{key:0,rel:"noreferrer noopener",target:"_blank",class:"helpIcon",href:e.helpUrl,title:e.translate("CoreHome_ExternalHelp")},Ct,8,jt)):Object(a["createCommentVNode"])("",!0),e.actualInlineHelp?(Object(a["openBlock"])(),Object(a["createElementBlock"])("a",{key:1,onClick:t[0]||(t[0]=function(t){return e.showInlineHelp=!e.showInlineHelp}),class:Object(a["normalizeClass"])(["helpIcon",{active:e.showInlineHelp}]),title:e.translate(e.reportGenerated?"General_HelpReport":"General_Help")},Tt,10,Et)):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("div",It,[Object(a["createVNode"])(c,{title:e.actualFeatureName},null,8,["title"])])],512),[[a["vShow"],e.showIcons||e.showInlineHelp]]),Object(a["withDirectives"])(Object(a["createElementVNode"])("div",xt,[Object(a["createElementVNode"])("div",{innerHTML:e.$sanitize(e.actualInlineHelp)},null,8,Nt),e.helpUrl?(Object(a["openBlock"])(),Object(a["createElementBlock"])("a",{key:0,rel:"noreferrer noopener",target:"_blank",class:"readMore",href:e.helpUrl},Object(a["toDisplayString"])(e.translate("General_MoreDetails")),9,Bt)):Object(a["createCommentVNode"])("",!0)],512),[[a["vShow"],e.showInlineHelp]])],544)}var At=Object(a["defineAsyncComponent"])((function(){return new Promise((function(e){window.$(document).ready((function(){e(window.Feedback.RateFeature)}))}))})),$t=Object(a["defineComponent"])({props:{helpUrl:{type:String,default:""},editUrl:{type:String,default:""},reportGenerated:String,featureName:String,inlineHelp:String},components:{RateFeature:At},data:function(){return{showIcons:!1,showInlineHelp:!1,actualFeatureName:this.featureName,actualInlineHelp:this.inlineHelp}},watch:{inlineHelp:function(e){this.actualInlineHelp=e},featureName:function(e){this.actualFeatureName=e}},mounted:function(){var e=this,t=this.$refs.root;setTimeout((function(){if(!e.actualInlineHelp){var n=t.querySelector(".title .inlineHelp");if(!n&&t.parentElement.nextElementSibling&&(n=t.parentElement.nextElementSibling.querySelector(".reportDocumentation")),n){var r=n.getAttribute("data-content").trim();r.length&&(e.actualInlineHelp="

".concat(r,"

"),setTimeout((function(){return n.remove()}),0))}}e.actualFeatureName||(e.actualFeatureName=t.querySelector(".title").textContent),e.reportGenerated&&f.parse(j.period,j.currentDateString).containsToday()&&window.$(t.querySelector(".report-generated")).tooltip({track:!0,content:e.reportGenerated,items:"div",show:!1,hide:!1})}))}});$t.render=Mt;var Vt=$t,Lt=(wt({component:Vt,scope:{helpUrl:{angularJsBind:"@"},editUrl:{angularJsBind:"@"},reportGenerated:{angularJsBind:"@?"},featureName:{angularJsBind:"@"},inlineHelp:{angularJsBind:"@?"}},directiveName:"piwikEnrichedHeadline",transclude:!0}),{class:"card",ref:"root"}),Ht={class:"card-content"},Ft={key:0,class:"card-title"},_t={key:1,class:"card-title"},Rt={ref:"content"}; /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */function _t(e,t,n,r,a,i){var c=Object(o["resolveComponent"])("EnrichedHeadline");return Object(o["openBlock"])(),Object(o["createElementBlock"])("div",Ft,[Object(o["createElementVNode"])("div",Vt,[!e.contentTitle||e.actualFeature||e.helpUrl||e.actualHelpText?Object(o["createCommentVNode"])("",!0):(Object(o["openBlock"])(),Object(o["createElementBlock"])("h2",Lt,Object(o["toDisplayString"])(e.contentTitle),1)),e.contentTitle&&(e.actualFeature||e.helpUrl||e.actualHelpText)?(Object(o["openBlock"])(),Object(o["createElementBlock"])("h2",Rt,[Object(o["createVNode"])(c,{"feature-name":e.actualFeature,"help-url":e.helpUrl,"inline-help":e.actualHelpText},{default:Object(o["withCtx"])((function(){return[Object(o["createTextVNode"])(Object(o["toDisplayString"])(e.contentTitle),1)]})),_:1},8,["feature-name","help-url","inline-help"])])):Object(o["createCommentVNode"])("",!0),Object(o["createElementVNode"])("div",Ut,[Object(o["renderSlot"])(e.$slots,"default")],512)])],512)}var Jt=null,Gt=Object(o["defineComponent"])({props:{contentTitle:String,feature:String,helpUrl:String,helpText:String,anchor:String},components:{EnrichedHeadline:Mt},data:function(){return{actualFeature:this.feature,actualHelpText:this.helpText}},watch:{feature:function(e){this.actualFeature=e},helpText:function(e){this.actualHelpText=e}},mounted:function(){var e,t=this,n=this.$refs,r=n.root,a=n.content;if(this.anchor){var o=document.createElement("a");o.id=this.anchor,r.parentElement.prepend(o)}if(setTimeout((function(){var e=a.querySelector(".contentHelp");e&&(t.actualHelpText=e.innerHTML,e.remove())}),0),!this.actualFeature||!0!==this.actualFeature&&"true"!==this.actualFeature||(this.actualFeature=this.contentTitle),null===Jt&&(Jt=document.querySelector("#content.admin")),Jt&&(e=Jt.offsetTop),e||0===e){var i=r.closest("[piwik-widget-loader]"),c=i?i.offsetTop:r.offsetTop;c-e<17&&(r.style.marginTop=0)}}});Gt.render=_t;var qt=Gt; + */function Ut(e,t,n,r,i,o){var c=Object(a["resolveComponent"])("EnrichedHeadline");return Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Lt,[Object(a["createElementVNode"])("div",Ht,[!e.contentTitle||e.actualFeature||e.helpUrl||e.actualHelpText?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("h2",Ft,Object(a["toDisplayString"])(e.contentTitle),1)),e.contentTitle&&(e.actualFeature||e.helpUrl||e.actualHelpText)?(Object(a["openBlock"])(),Object(a["createElementBlock"])("h2",_t,[Object(a["createVNode"])(c,{"feature-name":e.actualFeature,"help-url":e.helpUrl,"inline-help":e.actualHelpText},{default:Object(a["withCtx"])((function(){return[Object(a["createTextVNode"])(Object(a["toDisplayString"])(e.contentTitle),1)]})),_:1},8,["feature-name","help-url","inline-help"])])):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("div",Rt,[Object(a["renderSlot"])(e.$slots,"default")],512)])],512)}var qt=null,Jt=Object(a["defineComponent"])({props:{contentTitle:String,feature:String,helpUrl:String,helpText:String,anchor:String},components:{EnrichedHeadline:Vt},data:function(){return{actualFeature:this.feature,actualHelpText:this.helpText}},watch:{feature:function(e){this.actualFeature=e},helpText:function(e){this.actualHelpText=e}},mounted:function(){var e,t=this,n=this.$refs,r=n.root,i=n.content;if(this.anchor){var a=document.createElement("a");a.id=this.anchor,r.parentElement.prepend(a)}if(setTimeout((function(){var e=i.querySelector(".contentHelp");e&&(t.actualHelpText=e.innerHTML,e.remove())}),0),!this.actualFeature||!0!==this.actualFeature&&"true"!==this.actualFeature||(this.actualFeature=this.contentTitle),null===qt&&(qt=document.querySelector("#content.admin")),qt&&(e=qt.offsetTop),e||0===e){var o=r.closest("[piwik-widget-loader]"),c=o?o.offsetTop:r.offsetTop;c-e<17&&(r.style.marginTop=0)}}});Jt.render=Ut;var Gt=Jt; /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */wt({component:qt,scope:{contentTitle:{angularJsBind:"@"},feature:{angularJsBind:"@"},helpUrl:{angularJsBind:"@"},helpText:{angularJsBind:"@"},anchor:{angularJsBind:"@?"}},directiveName:"piwikContentBlock",transclude:!0});function zt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Qt(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n1||this.periodComparisons.value.length>1)}},{key:"isComparingPeriods",value:function(){return this.getPeriodComparisons().length>1}},{key:"getSegmentComparisons",value:function(){return this.isComparisonEnabled()?this.segmentComparisons.value:[]}},{key:"getPeriodComparisons",value:function(){return this.isComparisonEnabled()?this.periodComparisons.value:[]}},{key:"getSeriesColor",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=this.getComparisonSeriesIndex(t.index,e.index)%pn;if(0===n)return this.colors["series".concat(r)];var a=n%fn;return this.colors["series".concat(r,"-shade").concat(a)]}},{key:"getSeriesColorName",value:function(e,t){var n="series".concat(e%pn);return t>0&&(n+="-shade".concat(t%fn)),n}},{key:"isComparisonEnabled",value:function(){return this.isEnabled.value}},{key:"getIndividualComparisonRowIndices",value:function(e){var t=this.getSegmentComparisons().length,n=e%t,r=Math.floor(e/t);return{segmentIndex:n,periodIndex:r}}},{key:"getComparisonSeriesIndex",value:function(e,t){var n=this.getSegmentComparisons().length;return e*n+t}},{key:"getAllComparisonSeries",value:function(){var e=this,t=[],n=0;return this.getPeriodComparisons().forEach((function(r){e.getSegmentComparisons().forEach((function(a){t.push({index:n,params:cn(cn({},a.params),r.params),color:e.colors["series".concat(n)]}),n+=1}))})),t}},{key:"removeSegmentComparison",value:function(e){if(!this.isComparisonEnabled())throw new Error("Comparison disabled.");var t=Zt(this.segmentComparisons.value);t.splice(e,1);var n={};0===e&&(n.segment=t[0].params.segment),this.updateQueryParamsFromComparisons(t,this.periodComparisons.value,n)}},{key:"addSegmentComparison",value:function(e){if(!this.isComparisonEnabled())throw new Error("Comparison disabled.");var t=this.segmentComparisons.value.concat([{params:e,index:-1,title:""}]);this.updateQueryParamsFromComparisons(t,this.periodComparisons.value)}},{key:"updateQueryParamsFromComparisons",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r={},a={},o=!1,i=!1;e.forEach((function(e){o?r[e.params.segment]=!0:o=!0})),t.forEach((function(e){i?a["".concat(e.params.period,"|").concat(e.params.date)]=!0:i=!0}));var c=[],s=[];Object.keys(a).forEach((function(e){var t=e.split("|");c.push(t[0]),s.push(t[1])}));var l={compareSegments:Object.keys(r),comparePeriods:c,compareDates:s};if(D.helper.isAngularRenderingThePage()){var u=ke.hashParsed.value,d=cn(cn(cn({},u),l),n);return delete d["compareSegments[]"],delete d["comparePeriods[]"],delete d["compareDates[]"],void(JSON.stringify(d)!==JSON.stringify(u)&&ke.updateHash(d))}var p=[];["compareSegments","comparePeriods","compareDates"].forEach((function(e){l[e].length||p.push(e)}));var f=ke.stringify(n),m=ke.stringify(l);window.broadcast.propagateNewPage(f,void 0,m,p)}},{key:"getAllSeriesColors",value:function(){var e=D.ColorManager;if(!e)return[];for(var t=[],n=0;n"+decodeURIComponent(t.params.segment)},[Object(o["createElementVNode"])("a",{target:"_blank",href:e.getUrlToSegment(t.params.segment)},Object(o["toDisplayString"])(t.title),9,wn)],8,yn),(Object(o["openBlock"])(!0),Object(o["createElementBlock"])(o["Fragment"],null,Object(o["renderList"])(e.periodComparisons,(function(n){return Object(o["openBlock"])(),Object(o["createElementBlock"])("div",{class:"comparison-period",key:n.index,title:e.getComparisonTooltip(t,n)},[Object(o["createElementVNode"])("span",{class:"comparison-dot",style:Object(o["normalizeStyle"])({"background-color":e.getSeriesColor(t,n)})},null,4),Object(o["createElementVNode"])("span",On,Object(o["toDisplayString"])(n.title)+" ("+Object(o["toDisplayString"])(e.getComparisonPeriodType(n))+") ",1)],8,kn)})),128)),e.segmentComparisons.length>1?(Object(o["openBlock"])(),Object(o["createElementBlock"])("a",{key:0,class:"remove-button",onClick:function(t){return e.removeSegmentComparison(n)}},[Object(o["createElementVNode"])("span",{class:"icon icon-close",title:e.translate("General_ClickToRemoveComp")},null,8,Dn)],8,jn)):Object(o["createCommentVNode"])("",!0)])})),128)),Object(o["createElementVNode"])("div",Cn,[Object(o["createElementVNode"])("img",{src:"plugins/Morpheus/images/loading-blue.gif",alt:e.translate("General_LoadingData")},null,8,Sn),Object(o["createTextVNode"])(" "+Object(o["toDisplayString"])(e.translate("General_LoadingData")),1)])],512)):Object(o["createCommentVNode"])("",!0)}function En(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Tn(e){for(var t=1;t"))},show:{delay:200,duration:200},hide:!1})},onComparisonsChanged:function(){var e=this;if(this.comparisonTooltips=null,vn.isComparing()){var t=vn.getPeriodComparisons(),n=vn.getSegmentComparisons();Ne.fetch({method:"API.getProcessedReport",apiModule:"VisitsSummary",apiAction:"get",compare:"1",compareSegments:ke.getSearchParam("compareSegments"),comparePeriods:ke.getSearchParam("comparePeriods"),compareDates:ke.getSearchParam("compareDates"),format_metrics:"1"}).then((function(r){e.comparisonTooltips={},t.forEach((function(t){e.comparisonTooltips[t.index]={},n.forEach((function(n){var a=e.generateComparisonTooltip(r,t,n);e.comparisonTooltips[t.index][n.index]=a}))}))}))}},generateComparisonTooltip:function(e,t,n){if(!e.reportData.comparisons)return"";var r=vn.getComparisonSeriesIndex(t.index,0),a=e.reportData.comparisons[r],o=vn.getComparisonSeriesIndex(t.index,n.index),i=e.reportData.comparisons[o],c=e.reportData.comparisons[n.index],s='
',l=(i.nb_visits/a.nb_visits*100).toFixed(2);return l="".concat(l,"%"),s+=C("General_ComparisonCardTooltip1",["'".concat(i.compareSegmentPretty,"'"),i.comparePeriodPretty,l,i.nb_visits.toString(),a.nb_visits.toString()]),t.index>0&&(s+="

",s+=C("General_ComparisonCardTooltip2",[i.nb_visits_change.toString(),c.compareSegmentPretty,c.comparePeriodPretty])),s+="
",s}},updated:function(){var e=this;setTimeout((function(){return e.setUpTooltips()}))},mounted:function(){var e=this;D.on("piwikComparisonsChanged",(function(){e.onComparisonsChanged()})),this.onComparisonsChanged(),setTimeout((function(){return e.setUpTooltips()}))},beforeUnmount:function(){try{window.$(this.refs.root).tooltip("destroy")}catch(e){}}});In.render=Pn;var Nn=In; + */var fn=8,pn=3;function mn(e){return e?e instanceof Array?e:[e]:[]}var hn=function(){function e(){var t=this;sn(this,e),dn(this,"privateState",Object(a["reactive"])({comparisonsDisabledFor:[]})),dn(this,"state",Object(a["readonly"])(this.privateState)),dn(this,"colors",{}),dn(this,"segmentComparisons",Object(a["computed"])((function(){return t.parseSegmentComparisons()}))),dn(this,"periodComparisons",Object(a["computed"])((function(){return t.parsePeriodComparisons()}))),dn(this,"isEnabled",Object(a["computed"])((function(){return t.checkEnabledForCurrentPage()}))),this.loadComparisonsDisabledFor(),$((function(){t.colors=t.getAllSeriesColors()})),Object(a["watch"])((function(){return t.getComparisons()}),(function(){return j.postEvent("piwikComparisonsChanged")}),{deep:!0})}return un(e,[{key:"getComparisons",value:function(){return this.getSegmentComparisons().concat(this.getPeriodComparisons())}},{key:"isComparing",value:function(){return this.isComparisonEnabled()&&(this.segmentComparisons.value.length>1||this.periodComparisons.value.length>1)}},{key:"isComparingPeriods",value:function(){return this.getPeriodComparisons().length>1}},{key:"getSegmentComparisons",value:function(){return this.isComparisonEnabled()?this.segmentComparisons.value:[]}},{key:"getPeriodComparisons",value:function(){return this.isComparisonEnabled()?this.periodComparisons.value:[]}},{key:"getSeriesColor",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=this.getComparisonSeriesIndex(t.index,e.index)%fn;if(0===n)return this.colors["series".concat(r)];var i=n%pn;return this.colors["series".concat(r,"-shade").concat(i)]}},{key:"getSeriesColorName",value:function(e,t){var n="series".concat(e%fn);return t>0&&(n+="-shade".concat(t%pn)),n}},{key:"isComparisonEnabled",value:function(){return this.isEnabled.value}},{key:"getIndividualComparisonRowIndices",value:function(e){var t=this.getSegmentComparisons().length,n=e%t,r=Math.floor(e/t);return{segmentIndex:n,periodIndex:r}}},{key:"getComparisonSeriesIndex",value:function(e,t){var n=this.getSegmentComparisons().length;return e*n+t}},{key:"getAllComparisonSeries",value:function(){var e=this,t=[],n=0;return this.getPeriodComparisons().forEach((function(r){e.getSegmentComparisons().forEach((function(i){t.push({index:n,params:cn(cn({},i.params),r.params),color:e.colors["series".concat(n)]}),n+=1}))})),t}},{key:"removeSegmentComparison",value:function(e){if(!this.isComparisonEnabled())throw new Error("Comparison disabled.");var t=Zt(this.segmentComparisons.value);t.splice(e,1);var n={};0===e&&(n.segment=t[0].params.segment),this.updateQueryParamsFromComparisons(t,this.periodComparisons.value,n)}},{key:"addSegmentComparison",value:function(e){if(!this.isComparisonEnabled())throw new Error("Comparison disabled.");var t=this.segmentComparisons.value.concat([{params:e,index:-1,title:""}]);this.updateQueryParamsFromComparisons(t,this.periodComparisons.value)}},{key:"updateQueryParamsFromComparisons",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r={},i={},a=!1,o=!1;e.forEach((function(e){a?r[e.params.segment]=!0:a=!0})),t.forEach((function(e){o?i["".concat(e.params.period,"|").concat(e.params.date)]=!0:o=!0}));var c=[],s=[];Object.keys(i).forEach((function(e){var t=e.split("|");c.push(t[0]),s.push(t[1])}));var l={compareSegments:Object.keys(r),comparePeriods:c,compareDates:s};if(j.helper.isAngularRenderingThePage()){var u=Oe.hashParsed.value,d=cn(cn(cn({},u),l),n);return delete d["compareSegments[]"],delete d["comparePeriods[]"],delete d["compareDates[]"],void(JSON.stringify(d)!==JSON.stringify(u)&&Oe.updateHash(d))}var f=[];["compareSegments","comparePeriods","compareDates"].forEach((function(e){l[e].length||f.push(e)}));var p=Oe.stringify(n),m=Oe.stringify(l);window.broadcast.propagateNewPage(p,void 0,m,f)}},{key:"getAllSeriesColors",value:function(){var e=j.ColorManager;if(!e)return[];for(var t=[],n=0;n"+decodeURIComponent(t.params.segment)},[Object(a["createElementVNode"])("a",{target:"_blank",href:e.getUrlToSegment(t.params.segment)},Object(a["toDisplayString"])(t.title),9,wn)],8,yn),(Object(a["openBlock"])(!0),Object(a["createElementBlock"])(a["Fragment"],null,Object(a["renderList"])(e.periodComparisons,(function(n){return Object(a["openBlock"])(),Object(a["createElementBlock"])("div",{class:"comparison-period",key:n.index,title:e.getComparisonTooltip(t,n)},[Object(a["createElementVNode"])("span",{class:"comparison-dot",style:Object(a["normalizeStyle"])({"background-color":e.getSeriesColor(t,n)})},null,4),Object(a["createElementVNode"])("span",kn,Object(a["toDisplayString"])(n.title)+" ("+Object(a["toDisplayString"])(e.getComparisonPeriodType(n))+") ",1)],8,On)})),128)),e.segmentComparisons.length>1?(Object(a["openBlock"])(),Object(a["createElementBlock"])("a",{key:0,class:"remove-button",onClick:function(t){return e.removeSegmentComparison(n)}},[Object(a["createElementVNode"])("span",{class:"icon icon-close",title:e.translate("General_ClickToRemoveComp")},null,8,jn)],8,Sn)):Object(a["createCommentVNode"])("",!0)])})),128)),Object(a["createElementVNode"])("div",Dn,[Object(a["createElementVNode"])("img",{src:"plugins/Morpheus/images/loading-blue.gif",alt:e.translate("General_LoadingData")},null,8,Cn),Object(a["createTextVNode"])(" "+Object(a["toDisplayString"])(e.translate("General_LoadingData")),1)])],512)):Object(a["createCommentVNode"])("",!0)}function Pn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Tn(e){for(var t=1;t"))},show:{delay:200,duration:200},hide:!1})},onComparisonsChanged:function(){var e=this;if(this.comparisonTooltips=null,vn.isComparing()){var t=vn.getPeriodComparisons(),n=vn.getSegmentComparisons();Ne.fetch({method:"API.getProcessedReport",apiModule:"VisitsSummary",apiAction:"get",compare:"1",compareSegments:Oe.getSearchParam("compareSegments"),comparePeriods:Oe.getSearchParam("comparePeriods"),compareDates:Oe.getSearchParam("compareDates"),format_metrics:"1"}).then((function(r){e.comparisonTooltips={},t.forEach((function(t){e.comparisonTooltips[t.index]={},n.forEach((function(n){var i=e.generateComparisonTooltip(r,t,n);e.comparisonTooltips[t.index][n.index]=i}))}))}))}},generateComparisonTooltip:function(e,t,n){if(!e.reportData.comparisons)return"";var r=vn.getComparisonSeriesIndex(t.index,0),i=e.reportData.comparisons[r],a=vn.getComparisonSeriesIndex(t.index,n.index),o=e.reportData.comparisons[a],c=e.reportData.comparisons[n.index],s='
',l=(o.nb_visits/i.nb_visits*100).toFixed(2);return l="".concat(l,"%"),s+=D("General_ComparisonCardTooltip1",["'".concat(o.compareSegmentPretty,"'"),o.comparePeriodPretty,l,o.nb_visits.toString(),i.nb_visits.toString()]),t.index>0&&(s+="

",s+=D("General_ComparisonCardTooltip2",[o.nb_visits_change.toString(),c.compareSegmentPretty,c.comparePeriodPretty])),s+="
",s}},updated:function(){var e=this;setTimeout((function(){return e.setUpTooltips()}))},mounted:function(){var e=this;j.on("piwikComparisonsChanged",(function(){e.onComparisonsChanged()})),this.onComparisonsChanged(),setTimeout((function(){return e.setUpTooltips()}))},beforeUnmount:function(){try{window.$(this.refs.root).tooltip("destroy")}catch(e){}}});xn.render=En;var Nn=xn; /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */function $n(){return vn}$n.$inject=[],angular.module("piwikApp.service").factory("piwikComparisonsService",$n);wt({component:Nn,directiveName:"piwikComparisons",restrict:"E"});var Bn={ref:"root",class:"menuDropdown"},Hn=["title"],An=["innerHTML"],Mn=Object(o["createElementVNode"])("span",{class:"icon-arrow-bottom"},null,-1),Fn={class:"items"},Vn={key:0,class:"search"},Ln=["placeholder"],Rn=["title"],Un=["title"];function _n(e,t,n,r,a,i){var c=Object(o["resolveDirective"])("focus-if"),s=Object(o["resolveDirective"])("focus-anywhere-but-here");return Object(o["withDirectives"])((Object(o["openBlock"])(),Object(o["createElementBlock"])("div",Bn,[Object(o["createElementVNode"])("span",{class:"title",onClick:t[0]||(t[0]=function(t){return e.showItems=!e.showItems}),title:e.tooltip},[Object(o["createElementVNode"])("span",{innerHTML:e.$sanitize(this.actualMenuTitle)},null,8,An),Mn],8,Hn),Object(o["withDirectives"])(Object(o["createElementVNode"])("div",Fn,[e.showSearch&&e.showItems?(Object(o["openBlock"])(),Object(o["createElementBlock"])("div",Vn,[Object(o["withDirectives"])(Object(o["createElementVNode"])("input",{type:"text","onUpdate:modelValue":t[1]||(t[1]=function(t){return e.searchTerm=t}),onKeydown:t[2]||(t[2]=function(t){return e.onSearchTermKeydown(t)}),placeholder:e.translate("General_Search")},null,40,Ln),[[o["vModelText"],e.searchTerm],[c,{},e.showItems]]),Object(o["withDirectives"])(Object(o["createElementVNode"])("img",{class:"search_ico",src:"plugins/Morpheus/images/search_ico.png",title:e.translate("General_Search")},null,8,Rn),[[o["vShow"],!e.searchTerm]]),Object(o["withDirectives"])(Object(o["createElementVNode"])("img",{onClick:t[3]||(t[3]=function(t){e.searchTerm="",e.searchItems("")}),class:"reset",src:"plugins/CoreHome/images/reset_search.png",title:e.translate("General_Clear")},null,8,Un),[[o["vShow"],e.searchTerm]])])):Object(o["createCommentVNode"])("",!0),Object(o["createElementVNode"])("div",{onClick:t[4]||(t[4]=function(t){return e.selectItem(t)})},[Object(o["renderSlot"])(e.$slots,"default")])],512),[[o["vShow"],e.showItems]])],512)),[[s,{blur:e.lostFocus}]])}var Jn=window,Gn=Jn.$,qn=Object(o["defineComponent"])({props:{menuTitle:String,tooltip:String,showSearch:Boolean,menuTitleChangeOnClick:String},directives:{FocusAnywhereButHere:Re,FocusIf:Je},emits:["afterSelect"],watch:{menuTitle:function(){this.actualMenuTitle=this.menuTitle}},data:function(){return{showItems:!1,searchTerm:"",actualMenuTitle:this.menuTitle}},methods:{lostFocus:function(){this.showItems=!1},selectItem:function(e){var t=e.target.classList;!t.contains("item")||t.contains("disabled")||t.contains("separator")||(!1!==this.menuTitleChangeOnClick&&(this.actualMenuTitle=e.target.textContent.replace(/[\u0000-\u2666]/g,(function(e){return"&#".concat(e.charCodeAt(0),";")}))),this.showItems=!1,Gn(this.$slots.default()).find(".item").removeClass("active"),t.add("active"),this.$emit("afterSelect"))},onSearchTermKeydown:function(){var e=this;setTimeout((function(){e.searchItems(e.searchTerm)}))},searchItems:function(e){var t=e.toLowerCase();Gn(this.$refs.root).find(".item").each((function(e,n){var r=Gn(n);-1===r.text().toLowerCase().indexOf(t)?r.hide():r.show()}))}}});qn.render=_n;var zn=qn,Qn=(wt({component:zn,scope:{menuTitle:{angularJsBind:"@"},tooltip:{angularJsBind:"@"},showSearch:{angularJsBind:"="},menuTitleChangeOnClick:{angularJsBind:"="}},directiveName:"piwikMenudropdown",transclude:!0,events:{"after-select":function(e,t){setTimeout((function(){t.$apply()}),0)}}}),{ref:"root"}); + */function Bn(){return vn}Bn.$inject=[],angular.module("piwikApp.service").factory("piwikComparisonsService",Bn);wt({component:Nn,directiveName:"piwikComparisons",restrict:"E"});var Mn={ref:"root",class:"menuDropdown"},An=["title"],$n=["innerHTML"],Vn=Object(a["createElementVNode"])("span",{class:"icon-arrow-bottom"},null,-1),Ln={class:"items"},Hn={key:0,class:"search"},Fn=["placeholder"],_n=["title"],Rn=["title"];function Un(e,t,n,r,i,o){var c=Object(a["resolveDirective"])("focus-if"),s=Object(a["resolveDirective"])("focus-anywhere-but-here");return Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Mn,[Object(a["createElementVNode"])("span",{class:"title",onClick:t[0]||(t[0]=function(t){return e.showItems=!e.showItems}),title:e.tooltip},[Object(a["createElementVNode"])("span",{innerHTML:e.$sanitize(this.actualMenuTitle)},null,8,$n),Vn],8,An),Object(a["withDirectives"])(Object(a["createElementVNode"])("div",Ln,[e.showSearch&&e.showItems?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Hn,[Object(a["withDirectives"])(Object(a["createElementVNode"])("input",{type:"text","onUpdate:modelValue":t[1]||(t[1]=function(t){return e.searchTerm=t}),onKeydown:t[2]||(t[2]=function(t){return e.onSearchTermKeydown(t)}),placeholder:e.translate("General_Search")},null,40,Fn),[[a["vModelText"],e.searchTerm],[c,{},e.showItems]]),Object(a["withDirectives"])(Object(a["createElementVNode"])("img",{class:"search_ico",src:"plugins/Morpheus/images/search_ico.png",title:e.translate("General_Search")},null,8,_n),[[a["vShow"],!e.searchTerm]]),Object(a["withDirectives"])(Object(a["createElementVNode"])("img",{onClick:t[3]||(t[3]=function(t){e.searchTerm="",e.searchItems("")}),class:"reset",src:"plugins/CoreHome/images/reset_search.png",title:e.translate("General_Clear")},null,8,Rn),[[a["vShow"],e.searchTerm]])])):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("div",{onClick:t[4]||(t[4]=function(t){return e.selectItem(t)})},[Object(a["renderSlot"])(e.$slots,"default")])],512),[[a["vShow"],e.showItems]])],512)),[[s,{blur:e.lostFocus}]])}var qn=window,Jn=qn.$,Gn=Object(a["defineComponent"])({props:{menuTitle:String,tooltip:String,showSearch:Boolean,menuTitleChangeOnClick:String},directives:{FocusAnywhereButHere:_e,FocusIf:qe},emits:["afterSelect"],watch:{menuTitle:function(){this.actualMenuTitle=this.menuTitle}},data:function(){return{showItems:!1,searchTerm:"",actualMenuTitle:this.menuTitle}},methods:{lostFocus:function(){this.showItems=!1},selectItem:function(e){var t=e.target.classList;!t.contains("item")||t.contains("disabled")||t.contains("separator")||(!1!==this.menuTitleChangeOnClick&&(this.actualMenuTitle=e.target.textContent.replace(/[\u0000-\u2666]/g,(function(e){return"&#".concat(e.charCodeAt(0),";")}))),this.showItems=!1,Jn(this.$slots.default()).find(".item").removeClass("active"),t.add("active"),this.$emit("afterSelect"))},onSearchTermKeydown:function(){var e=this;setTimeout((function(){e.searchItems(e.searchTerm)}))},searchItems:function(e){var t=e.toLowerCase();Jn(this.$refs.root).find(".item").each((function(e,n){var r=Jn(n);-1===r.text().toLowerCase().indexOf(t)?r.hide():r.show()}))}}});Gn.render=Un;var zn=Gn,Qn=(wt({component:zn,scope:{menuTitle:{angularJsBind:"@"},tooltip:{angularJsBind:"@"},showSearch:{angularJsBind:"="},menuTitleChangeOnClick:{angularJsBind:"="}},directiveName:"piwikMenudropdown",transclude:!0,events:{"after-select":function(e,t){setTimeout((function(){t.$apply()}),0)}}}),{ref:"root"}); /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */function Yn(e,t,n,r,a,i){return Object(o["openBlock"])(),Object(o["createElementBlock"])("div",Qn,null,512)}function Wn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Kn(e){for(var t=1;t=e.selectedDateStart&&n<=e.selectedDateEnd?t.addClass("ui-datepicker-current-period"):t.removeClass("ui-datepicker-current-period"),e.highlightedDateStart&&e.highlightedDateEnd&&n>=e.highlightedDateStart&&n<=e.highlightedDateEnd){var a=r.length?r:t;a.addClass("ui-state-hover")}else t.removeClass("ui-state-hover"),r.removeClass("ui-state-hover")}function a(e,t,n){if(e.hasClass("ui-datepicker-other-month"))return i(e,t,n);var r=parseInt(e.children("a,span").text(),10);return new Date(n,t,r)}function i(e,t,n){var r,o=e.parent(),i=o.children("td");if(o.is(":first-child")){var c=o.children("td:not(.ui-datepicker-other-month)").first();return r=a(c,t,n),r.setDate(i.index(e)-i.index(c)+1),r}var s=o.children("td:not(.ui-datepicker-other-month)").last();return r=a(s,t,n),r.setDate(r.getDate()+i.index(e)-i.index(s)),r}function c(){var e=tr(n.value),t=e.find("td[data-month]"),r=parseInt(t.attr("data-month"),10),a=parseInt(t.attr("data-year"),10);return[r,a]}function s(){var e=tr(n.value),t=e.find(".ui-datepicker-calendar"),o=c(),i=t.find("td"),s=i.first(),l=a(s,o[0],o[1]);i.each((function(){r(tr(this),l),l.setDate(l.getDate()+1)}))}function l(){var t=e.viewDate;if(!t)return!1;if(!(t instanceof Date))try{t=E(t)}catch(o){return!1}var r=tr(n.value),a=c();return(a[0]!==t.getMonth()||a[1]!==t.getFullYear())&&(r.datepicker("setDate",t),!0)}function u(){var e=tr(n.value);e.find("td[data-event]").off("click"),e.find(".ui-state-active").removeClass("ui-state-active"),e.find(".ui-datepicker-current-day").removeClass("ui-datepicker-current-day"),e.find(".ui-datepicker-prev,.ui-datepicker-next").attr("href","")}function d(){var t=tr(n.value),r=e.stepMonths||Zn;if(t.datepicker("option","stepMonths")===r)return!1;var a=tr(".ui-datepicker-month",t).val(),o=tr(".ui-datepicker-year",t).val();return t.datepicker("option","stepMonths",r).datepicker("setDate",new Date(o,a)),u(),!0}function p(){var t=tr(n.value);t.find(".ui-datepicker-month").attr("disabled",e.disableMonthDropdown)}function f(){if(tr(this).hasClass("ui-state-hover")){var e=tr(this).parent(),t=e.parent();e.is(":first-child")?t.find("a").first().click():t.find("a").last().click()}}function m(){p(),s()}return Object(o["watch"])((function(){return Kn({},e)}),(function(e,t){var n=!1;["selectedDateStart","selectedDateEnd","highlightedDateStart","highlightedDateEnd"].forEach((function(r){n||(!e[r]&&t[r]&&(n=!0),e[r]&&!t[r]&&(n=!0),e[r]&&t[r]&&e[r].getTime()!==t[r].getTime()&&(n=!0))})),e.viewDate!==t.viewDate&&l()&&(n=!0),e.stepMonths!==t.stepMonths&&d(),e.enableDisableMonthDropdown!==t.enableDisableMonthDropdown&&p(),n&&s()})),Object(o["onMounted"])((function(){var r=tr(n.value),o=e.options||{},i=Kn(Kn(Kn({},D.getBaseDatePickerOptions()),o),{},{onChangeMonthYear:function(){setTimeout((function(){u()}))}});r.datepicker(i),r.on("mouseover","tbody td a",(function(e){e.originalEvent&&s()})),r.on("mouseenter","tbody td",(function(){var e=c(),n=tr(this),r=a(n,e[0],e[1]);t.emit("cellHover",{date:r,$cell:n})})),r.on("mouseout","tbody td a",(function(){s()})),r.on("mouseleave","table",(function(){return t.emit("cellHoverLeave")})).on("mouseenter","thead",(function(){return t.emit("cellHoverLeave")})),r.on("click","tbody td.ui-datepicker-other-month",(function(){return f()})),r.on("click",(function(e){e.preventDefault();var t=tr(e.target).closest("a");(t.is(".ui-datepicker-next")||t.is(".ui-datepicker-prev"))&&m()})),r.on("click","td[data-month]",(function(e){var n=tr(e.target).closest("td"),r=parseInt(n.attr("data-month"),10),a=parseInt(n.attr("data-year"),10),o=parseInt(n.children("a,span").text(),10);t.emit("dateSelect",{date:new Date(a,r,o)})}));var h=d();l(),p(),h||u(),s()})),{root:n}}});nr.render=Yn;var rr=nr,ar=(wt({component:rr,scope:{selectedDateStart:{angularJsBind:"<"},selectedDateEnd:{angularJsBind:"<"},highlightedDateStart:{angularJsBind:"<"},highlightedDateEnd:{angularJsBind:"<"},viewDate:{angularJsBind:"<"},stepMonths:{angularJsBind:"<"},disableMonthDropdown:{angularJsBind:"<"},options:{angularJsBind:"<"},cellHover:{angularJsBind:"&"},cellHoverLeave:{angularJsBind:"&"},dateSelect:{angularJsBind:"&"}},directiveName:"piwikDatePicker",events:{"cell-hover":function(e,t,n,r,a){a()},"cell-hover-leave":function(e,t,n,r,a){a()},"date-select":function(e,t,n,r,a){a()}},$inject:["$timeout"]}),{id:"calendarRangeFrom"}),or={id:"calendarRangeTo"}; + */function Kn(e,t,n,r,i,o){return Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Qn,null,512)}function Wn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Yn(e){for(var t=1;t=e.selectedDateStart&&n<=e.selectedDateEnd?t.addClass("ui-datepicker-current-period"):t.removeClass("ui-datepicker-current-period"),e.highlightedDateStart&&e.highlightedDateEnd&&n>=e.highlightedDateStart&&n<=e.highlightedDateEnd){var i=r.length?r:t;i.addClass("ui-state-hover")}else t.removeClass("ui-state-hover"),r.removeClass("ui-state-hover")}function i(e,t,n){if(e.hasClass("ui-datepicker-other-month"))return o(e,t,n);var r=parseInt(e.children("a,span").text(),10);return new Date(n,t,r)}function o(e,t,n){var r,a=e.parent(),o=a.children("td");if(a.is(":first-child")){var c=a.children("td:not(.ui-datepicker-other-month)").first();return r=i(c,t,n),r.setDate(o.index(e)-o.index(c)+1),r}var s=a.children("td:not(.ui-datepicker-other-month)").last();return r=i(s,t,n),r.setDate(r.getDate()+o.index(e)-o.index(s)),r}function c(){var e=tr(n.value),t=e.find("td[data-month]"),r=parseInt(t.attr("data-month"),10),i=parseInt(t.attr("data-year"),10);return[r,i]}function s(){var e=tr(n.value),t=e.find(".ui-datepicker-calendar"),a=c(),o=t.find("td"),s=o.first(),l=i(s,a[0],a[1]);o.each((function(){r(tr(this),l),l.setDate(l.getDate()+1)}))}function l(){var t=e.viewDate;if(!t)return!1;if(!(t instanceof Date))try{t=P(t)}catch(a){return!1}var r=tr(n.value),i=c();return(i[0]!==t.getMonth()||i[1]!==t.getFullYear())&&(r.datepicker("setDate",t),!0)}function u(){var e=tr(n.value);e.find("td[data-event]").off("click"),e.find(".ui-state-active").removeClass("ui-state-active"),e.find(".ui-datepicker-current-day").removeClass("ui-datepicker-current-day"),e.find(".ui-datepicker-prev,.ui-datepicker-next").attr("href","")}function d(){var t=tr(n.value),r=e.stepMonths||Zn;if(t.datepicker("option","stepMonths")===r)return!1;var i=tr(".ui-datepicker-month",t).val(),a=tr(".ui-datepicker-year",t).val();return t.datepicker("option","stepMonths",r).datepicker("setDate",new Date(a,i)),u(),!0}function f(){var t=tr(n.value);t.find(".ui-datepicker-month").attr("disabled",e.disableMonthDropdown)}function p(){if(tr(this).hasClass("ui-state-hover")){var e=tr(this).parent(),t=e.parent();e.is(":first-child")?t.find("a").first().click():t.find("a").last().click()}}function m(){f(),s()}return Object(a["watch"])((function(){return Yn({},e)}),(function(e,t){var n=!1;["selectedDateStart","selectedDateEnd","highlightedDateStart","highlightedDateEnd"].forEach((function(r){n||(!e[r]&&t[r]&&(n=!0),e[r]&&!t[r]&&(n=!0),e[r]&&t[r]&&e[r].getTime()!==t[r].getTime()&&(n=!0))})),e.viewDate!==t.viewDate&&l()&&(n=!0),e.stepMonths!==t.stepMonths&&d(),e.enableDisableMonthDropdown!==t.enableDisableMonthDropdown&&f(),n&&s()})),Object(a["onMounted"])((function(){var r=tr(n.value),a=e.options||{},o=Yn(Yn(Yn({},j.getBaseDatePickerOptions()),a),{},{onChangeMonthYear:function(){setTimeout((function(){u()}))}});r.datepicker(o),r.on("mouseover","tbody td a",(function(e){e.originalEvent&&s()})),r.on("mouseenter","tbody td",(function(){var e=c(),n=tr(this),r=i(n,e[0],e[1]);t.emit("cellHover",{date:r,$cell:n})})),r.on("mouseout","tbody td a",(function(){s()})),r.on("mouseleave","table",(function(){return t.emit("cellHoverLeave")})).on("mouseenter","thead",(function(){return t.emit("cellHoverLeave")})),r.on("click","tbody td.ui-datepicker-other-month",(function(){return p()})),r.on("click",(function(e){e.preventDefault();var t=tr(e.target).closest("a");(t.is(".ui-datepicker-next")||t.is(".ui-datepicker-prev"))&&m()})),r.on("click","td[data-month]",(function(e){var n=tr(e.target).closest("td"),r=parseInt(n.attr("data-month"),10),i=parseInt(n.attr("data-year"),10),a=parseInt(n.children("a,span").text(),10);t.emit("dateSelect",{date:new Date(i,r,a)})}));var h=d();l(),f(),h||u(),s()})),{root:n}}});nr.render=Kn;var rr=nr,ir=(wt({component:rr,scope:{selectedDateStart:{angularJsBind:"<"},selectedDateEnd:{angularJsBind:"<"},highlightedDateStart:{angularJsBind:"<"},highlightedDateEnd:{angularJsBind:"<"},viewDate:{angularJsBind:"<"},stepMonths:{angularJsBind:"<"},disableMonthDropdown:{angularJsBind:"<"},options:{angularJsBind:"<"},cellHover:{angularJsBind:"&"},cellHoverLeave:{angularJsBind:"&"},dateSelect:{angularJsBind:"&"}},directiveName:"piwikDatePicker",events:{"cell-hover":function(e,t,n,r,i){i()},"cell-hover-leave":function(e,t,n,r,i){i()},"date-select":function(e,t,n,r,i){i()}},$inject:["$timeout"]}),{id:"calendarRangeFrom"}),ar={id:"calendarRangeTo"}; /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */function ir(e,t,n,r,a,i){var c=Object(o["resolveComponent"])("DatePicker");return Object(o["openBlock"])(),Object(o["createElementBlock"])(o["Fragment"],null,[Object(o["createElementVNode"])("div",ar,[Object(o["createElementVNode"])("h6",null,[Object(o["createTextVNode"])(Object(o["toDisplayString"])(e.translate("General_DateRangeFrom"))+" ",1),Object(o["withDirectives"])(Object(o["createElementVNode"])("input",{type:"text",id:"inputCalendarFrom",name:"inputCalendarFrom",class:"browser-default","onUpdate:modelValue":t[0]||(t[0]=function(t){return e.startDateText=t}),onChange:t[1]||(t[1]=function(t){return e.onRangeInputChanged("from",t)}),onKeyup:t[2]||(t[2]=function(t){return e.handleEnterPress(t)})},null,544),[[o["vModelText"],e.startDateText]])]),Object(o["createVNode"])(c,{id:"calendarFrom","view-date":e.startDate,"selected-date-start":e.fromPickerSelectedDates[0],"selected-date-end":e.fromPickerSelectedDates[1],"highlighted-date-start":e.fromPickerHighlightedDates[0],"highlighted-date-end":e.fromPickerHighlightedDates[1],onDateSelect:t[3]||(t[3]=function(t){return e.setStartRangeDate(t.date)}),onCellHover:t[4]||(t[4]=function(t){return e.fromPickerHighlightedDates=e.getNewHighlightedDates(t.date,t.$cell)}),onCellHoverLeave:t[5]||(t[5]=function(t){return e.fromPickerHighlightedDates=[null,null]})},null,8,["view-date","selected-date-start","selected-date-end","highlighted-date-start","highlighted-date-end"])]),Object(o["createElementVNode"])("div",or,[Object(o["createElementVNode"])("h6",null,[Object(o["createTextVNode"])(Object(o["toDisplayString"])(e.translate("General_DateRangeTo"))+" ",1),Object(o["withDirectives"])(Object(o["createElementVNode"])("input",{type:"text",id:"inputCalendarTo",name:"inputCalendarTo",class:"browser-default","onUpdate:modelValue":t[6]||(t[6]=function(t){return e.endDateText=t}),onChange:t[7]||(t[7]=function(t){return e.onRangeInputChanged("to",t)}),onKeyup:t[8]||(t[8]=function(t){return e.handleEnterPress(t)})},null,544),[[o["vModelText"],e.endDateText]])]),Object(o["createVNode"])(c,{id:"calendarTo","view-date":e.endDate,"selected-date-start":e.toPickerSelectedDates[0],"selected-date-end":e.toPickerSelectedDates[1],"highlighted-date-start":e.toPickerHighlightedDates[0],"highlighted-date-end":e.toPickerHighlightedDates[1],onDateSelect:t[9]||(t[9]=function(t){return e.setEndRangeDate(t.date)}),onCellHover:t[10]||(t[10]=function(t){return e.toPickerHighlightedDates=e.getNewHighlightedDates(t.date,t.$cell)}),onCellHoverLeave:t[11]||(t[11]=function(t){return e.toPickerHighlightedDates=[null,null]})},null,8,["view-date","selected-date-start","selected-date-end","highlighted-date-start","highlighted-date-end"])])],64)}var cr=Object(o["defineComponent"])({props:{startDate:String,endDate:String},components:{DatePicker:rr},data:function(){var e=null;try{e=E(this.startDate)}catch(n){}var t=null;try{t=E(this.endDate)}catch(n){}return{fromPickerSelectedDates:[e,e],toPickerSelectedDates:[t,t],fromPickerHighlightedDates:[null,null],toPickerHighlightedDates:[null,null],startDateText:this.startDate,endDateText:this.endDate}},emits:["rangeChange","submit"],watch:{startDate:function(){this.startDateText=this.startDate,this.setStartRangeDateFromStr(this.startDate)},endDate:function(){this.endDateText=this.endDate,this.setEndRangeDateFromStr(this.endDate)}},mounted:function(){this.rangeChanged()},methods:{setStartRangeDate:function(e){this.fromPickerSelectedDates=[e,e],this.rangeChanged()},setEndRangeDate:function(e){this.toPickerSelectedDates=[e,e],this.rangeChanged()},onRangeInputChanged:function(e,t){"from"===e?this.setStartRangeDateFromStr(t.target.value):this.setEndRangeDateFromStr(t.target.value)},getNewHighlightedDates:function(e,t){return t.hasClass("ui-datepicker-unselectable")?null:[e,e]},handleEnterPress:function(e){13===e.keyCode&&this.$emit("submit",{start:this.startDate,end:this.endDate})},setStartRangeDateFromStr:function(e){var t;try{t=E(e)}catch(n){this.startDateText=this.startDate}t&&(this.fromPickerSelectedDates=[t,t]),this.rangeChanged()},setEndRangeDateFromStr:function(e){var t;try{t=E(e)}catch(n){this.endDateText=this.endDate}t&&(this.toPickerSelectedDates=[t,t]),this.rangeChanged()},rangeChanged:function(){this.$emit("rangeChange",{start:S(this.fromPickerSelectedDates[0]),end:S(this.toPickerSelectedDates[0])})}}});cr.render=ir;var sr=cr; + */function or(e,t,n,r,i,o){var c=Object(a["resolveComponent"])("DatePicker");return Object(a["openBlock"])(),Object(a["createElementBlock"])(a["Fragment"],null,[Object(a["createElementVNode"])("div",ir,[Object(a["createElementVNode"])("h6",null,[Object(a["createTextVNode"])(Object(a["toDisplayString"])(e.translate("General_DateRangeFrom"))+" ",1),Object(a["withDirectives"])(Object(a["createElementVNode"])("input",{type:"text",id:"inputCalendarFrom",name:"inputCalendarFrom",class:"browser-default","onUpdate:modelValue":t[0]||(t[0]=function(t){return e.startDateText=t}),onChange:t[1]||(t[1]=function(t){return e.onRangeInputChanged("from",t)}),onKeyup:t[2]||(t[2]=function(t){return e.handleEnterPress(t)})},null,544),[[a["vModelText"],e.startDateText]])]),Object(a["createVNode"])(c,{id:"calendarFrom","view-date":e.startDate,"selected-date-start":e.fromPickerSelectedDates[0],"selected-date-end":e.fromPickerSelectedDates[1],"highlighted-date-start":e.fromPickerHighlightedDates[0],"highlighted-date-end":e.fromPickerHighlightedDates[1],onDateSelect:t[3]||(t[3]=function(t){return e.setStartRangeDate(t.date)}),onCellHover:t[4]||(t[4]=function(t){return e.fromPickerHighlightedDates=e.getNewHighlightedDates(t.date,t.$cell)}),onCellHoverLeave:t[5]||(t[5]=function(t){return e.fromPickerHighlightedDates=[null,null]})},null,8,["view-date","selected-date-start","selected-date-end","highlighted-date-start","highlighted-date-end"])]),Object(a["createElementVNode"])("div",ar,[Object(a["createElementVNode"])("h6",null,[Object(a["createTextVNode"])(Object(a["toDisplayString"])(e.translate("General_DateRangeTo"))+" ",1),Object(a["withDirectives"])(Object(a["createElementVNode"])("input",{type:"text",id:"inputCalendarTo",name:"inputCalendarTo",class:"browser-default","onUpdate:modelValue":t[6]||(t[6]=function(t){return e.endDateText=t}),onChange:t[7]||(t[7]=function(t){return e.onRangeInputChanged("to",t)}),onKeyup:t[8]||(t[8]=function(t){return e.handleEnterPress(t)})},null,544),[[a["vModelText"],e.endDateText]])]),Object(a["createVNode"])(c,{id:"calendarTo","view-date":e.endDate,"selected-date-start":e.toPickerSelectedDates[0],"selected-date-end":e.toPickerSelectedDates[1],"highlighted-date-start":e.toPickerHighlightedDates[0],"highlighted-date-end":e.toPickerHighlightedDates[1],onDateSelect:t[9]||(t[9]=function(t){return e.setEndRangeDate(t.date)}),onCellHover:t[10]||(t[10]=function(t){return e.toPickerHighlightedDates=e.getNewHighlightedDates(t.date,t.$cell)}),onCellHoverLeave:t[11]||(t[11]=function(t){return e.toPickerHighlightedDates=[null,null]})},null,8,["view-date","selected-date-start","selected-date-end","highlighted-date-start","highlighted-date-end"])])],64)}var cr=Object(a["defineComponent"])({props:{startDate:String,endDate:String},components:{DatePicker:rr},data:function(){var e=null;try{e=P(this.startDate)}catch(n){}var t=null;try{t=P(this.endDate)}catch(n){}return{fromPickerSelectedDates:[e,e],toPickerSelectedDates:[t,t],fromPickerHighlightedDates:[null,null],toPickerHighlightedDates:[null,null],startDateText:this.startDate,endDateText:this.endDate}},emits:["rangeChange","submit"],watch:{startDate:function(){this.startDateText=this.startDate,this.setStartRangeDateFromStr(this.startDate)},endDate:function(){this.endDateText=this.endDate,this.setEndRangeDateFromStr(this.endDate)}},mounted:function(){this.rangeChanged()},methods:{setStartRangeDate:function(e){this.fromPickerSelectedDates=[e,e],this.rangeChanged()},setEndRangeDate:function(e){this.toPickerSelectedDates=[e,e],this.rangeChanged()},onRangeInputChanged:function(e,t){"from"===e?this.setStartRangeDateFromStr(t.target.value):this.setEndRangeDateFromStr(t.target.value)},getNewHighlightedDates:function(e,t){return t.hasClass("ui-datepicker-unselectable")?null:[e,e]},handleEnterPress:function(e){13===e.keyCode&&this.$emit("submit",{start:this.startDate,end:this.endDate})},setStartRangeDateFromStr:function(e){var t;try{t=P(e)}catch(n){this.startDateText=this.startDate}t&&(this.fromPickerSelectedDates=[t,t]),this.rangeChanged()},setEndRangeDateFromStr:function(e){var t;try{t=P(e)}catch(n){this.endDateText=this.endDate}t&&(this.toPickerSelectedDates=[t,t]),this.rangeChanged()},rangeChanged:function(){this.$emit("rangeChange",{start:C(this.fromPickerSelectedDates[0]),end:C(this.toPickerSelectedDates[0])})}}});cr.render=or;var sr=cr; /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */wt({component:sr,scope:{startDate:{angularJsBind:"<"},endDate:{angularJsBind:"<"},rangeChange:{angularJsBind:"&"},submit:{angularJsBind:"&"}},directiveName:"piwikDateRangePicker",restrict:"E"});function lr(e,t,n,r,a,i){var c=Object(o["resolveComponent"])("DatePicker");return Object(o["openBlock"])(),Object(o["createBlock"])(c,{"selected-date-start":e.selectedDates[0],"selected-date-end":e.selectedDates[1],"highlighted-date-start":e.highlightedDates[0],"highlighted-date-end":e.highlightedDates[1],"view-date":e.viewDate,"step-months":"year"===e.period?12:1,"disable-month-dropdown":"year"===e.period,onCellHover:t[0]||(t[0]=function(t){return e.onHoverNormalCell(t.date,t.$cell)}),onCellHoverLeave:t[1]||(t[1]=function(t){return e.onHoverLeaveNormalCells()}),onDateSelect:t[2]||(t[2]=function(t){return e.onDateSelected(t.date)})},null,8,["selected-date-start","selected-date-end","highlighted-date-start","highlighted-date-end","view-date","step-months","disable-month-dropdown"])}var ur=new Date(D.minDateYear,D.minDateMonth-1,D.minDateDay),dr=new Date(D.maxDateYear,D.maxDateMonth-1,D.maxDateDay),pr=Object(o["defineComponent"])({props:{period:String,date:[String,Date]},components:{DatePicker:rr},emits:["select"],setup:function(e,t){var n=Object(o["ref"])(e.date),r=Object(o["ref"])([null,null]),a=Object(o["ref"])([null,null]);function i(t){var n=p.get(e.period).parse(t).getDateRange();return n[0]=urn[1]?n[1]:dr,n}function c(t,n){var r=tdr,o=n.hasClass("ui-datepicker-other-month")&&("month"===e.period||"day"===e.period);a.value=r||o?[null,null]:i(t)}function s(){a.value=[null,null]}function l(e){t.emit("select",{date:e})}function u(){e.period&&e.date?r.value=i(e.date):r.value=[null,null]}return Object(o["watch"])(e,u),u(),{selectedDates:r,highlightedDates:a,viewDate:n,onHoverNormalCell:c,onHoverLeaveNormalCells:s,onDateSelected:l}}});pr.render=lr;var fr=pr,mr=(wt({component:fr,scope:{period:{angularJsBind:"<"},date:{angularJsBind:"<"},select:{angularJsBind:"&"}},directiveName:"piwikPeriodDatePicker",restrict:"E"}),{class:"loadingPiwik"}),hr=Object(o["createElementVNode"])("img",{src:"plugins/Morpheus/images/loading-blue.gif",alt:""},null,-1); + */wt({component:sr,scope:{startDate:{angularJsBind:"<"},endDate:{angularJsBind:"<"},rangeChange:{angularJsBind:"&"},submit:{angularJsBind:"&"}},directiveName:"piwikDateRangePicker",restrict:"E"});function lr(e,t,n,r,i,o){var c=Object(a["resolveComponent"])("DatePicker");return Object(a["openBlock"])(),Object(a["createBlock"])(c,{"selected-date-start":e.selectedDates[0],"selected-date-end":e.selectedDates[1],"highlighted-date-start":e.highlightedDates[0],"highlighted-date-end":e.highlightedDates[1],"view-date":e.viewDate,"step-months":"year"===e.period?12:1,"disable-month-dropdown":"year"===e.period,onCellHover:t[0]||(t[0]=function(t){return e.onHoverNormalCell(t.date,t.$cell)}),onCellHoverLeave:t[1]||(t[1]=function(t){return e.onHoverLeaveNormalCells()}),onDateSelect:t[2]||(t[2]=function(t){return e.onDateSelected(t.date)})},null,8,["selected-date-start","selected-date-end","highlighted-date-start","highlighted-date-end","view-date","step-months","disable-month-dropdown"])}var ur=new Date(j.minDateYear,j.minDateMonth-1,j.minDateDay),dr=new Date(j.maxDateYear,j.maxDateMonth-1,j.maxDateDay),fr=Object(a["defineComponent"])({props:{period:String,date:[String,Date]},components:{DatePicker:rr},emits:["select"],setup:function(e,t){var n=Object(a["ref"])(e.date),r=Object(a["ref"])([null,null]),i=Object(a["ref"])([null,null]);function o(t){var n=f.get(e.period).parse(t).getDateRange();return n[0]=urn[1]?n[1]:dr,n}function c(t,n){var r=tdr,a=n.hasClass("ui-datepicker-other-month")&&("month"===e.period||"day"===e.period);i.value=r||a?[null,null]:o(t)}function s(){i.value=[null,null]}function l(e){t.emit("select",{date:e})}function u(){e.period&&e.date?r.value=o(e.date):r.value=[null,null]}return Object(a["watch"])(e,u),u(),{selectedDates:r,highlightedDates:i,viewDate:n,onHoverNormalCell:c,onHoverLeaveNormalCells:s,onDateSelected:l}}});fr.render=lr;var pr=fr,mr=(wt({component:pr,scope:{period:{angularJsBind:"<"},date:{angularJsBind:"<"},select:{angularJsBind:"&"}},directiveName:"piwikPeriodDatePicker",restrict:"E"}),["value","name"]),hr=["title"],vr=["textContent"],gr={key:1,class:"placeholder"},br={class:"dropdown"},yr={class:"custom_select_search"},wr=["placeholder"],Or={key:0},kr={class:"custom_select_container"},Sr=["onClick"],jr=["innerHTML","href","title"],Dr={class:"ui-autocomplete ui-front ui-menu ui-widget ui-widget-content ui-corner-all\n siteSelect"},Cr={class:"ui-menu-item"},Er={class:"ui-corner-all",tabindex:"-1"},Pr={key:1}; /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */function vr(e,t,n,r,a,i){return Object(o["withDirectives"])((Object(o["openBlock"])(),Object(o["createElementBlock"])("div",mr,[hr,Object(o["createElementVNode"])("span",null,Object(o["toDisplayString"])(e.loadingMessage),1)],512)),[[o["vShow"],e.loading]])}var gr=Object(o["defineComponent"])({props:{loading:{type:Boolean,required:!0,default:!1},loadingMessage:{type:String,required:!1,default:C("General_LoadingData")}}});gr.render=vr;var br=gr,yr=wt({component:br,scope:{loading:{vue:"loading",angularJsBind:"<"},loadingMessage:{vue:"loadingMessage",angularJsBind:"<",default:function(){return C("General_LoadingData")}}},$inject:[],directiveName:"piwikActivityIndicator"}); + */function Tr(e,t,n,r,i,o){var c,s,l,u,d=Object(a["resolveComponent"])("AllSitesLink"),f=Object(a["resolveDirective"])("focus-if"),p=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===(c=e.selectedSite)||void 0===c?void 0:c.id,name:e.name},null,8,mr)):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!==(s=e.selectedSite)&&void 0!==s&&s.name||!e.placeholder?(Object(a["openBlock"])(),Object(a["createElementBlock"])("span",{key:0,textContent:Object(a["toDisplayString"])((null===(l=e.selectedSite)||void 0===l?void 0:l.name)||e.firstSiteName)},null,8,vr)):Object(a["createCommentVNode"])("",!0),null!==(u=e.selectedSite)&&void 0!==u&&u.name||!e.placeholder?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("span",gr,Object(a["toDisplayString"])(e.placeholder),1))])],42,hr),Object(a["withDirectives"])(Object(a["createElementVNode"])("div",br,[Object(a["withDirectives"])(Object(a["createElementVNode"])("div",yr,[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}),onKeydown:t[4]||(t[4]=function(t){return e.onSearchInputKeydown()}),tabindex:"4",class:"websiteSearch inp browser-default",placeholder:e.translate("General_Search")},null,40,wr),[[a["vModelText"],e.searchTerm],[f,{},e.shouldFocusOnSearch]]),Object(a["withDirectives"])(Object(a["createElementVNode"])("img",{title:"Clear",onClick:t[5]||(t[5]=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",Or,[Object(a["createVNode"])(d,{href:e.urlAllSites,"all-sites-text":e.allSitesText,onClick:t[6]||(t[6]=function(t){return e.onAllSitesClick(t)})},null,8,["href","all-sites-text"])])):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("div",kr,[Object(a["createElementVNode"])("ul",{class:"custom_select_ul_list",onClick:t[8]||(t[8]=function(t){return e.showSitesList=!1})},[(Object(a["openBlock"])(!0),Object(a["createElementBlock"])(a["Fragment"],null,Object(a["renderList"])(e.sites,(function(n){return Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("li",{onClick:function(t){return e.switchSite(n,t)},key:n.idsite},[Object(a["createElementVNode"])("a",{onClick:t[7]||(t[7]=function(e){return e.preventDefault()}),innerHTML:e.$sanitize(e.getMatchedSiteName(n.name)),tabindex:"4",href:e.getUrlForSiteId(n.idsite),title:n.name},null,8,jr)],8,Sr)),[[a["vShow"],!(!e.showSelectedSite&&e.activeSiteId===n.idsite)]])})),128))]),Object(a["withDirectives"])(Object(a["createElementVNode"])("ul",Dr,[Object(a["createElementVNode"])("li",Cr,[Object(a["createElementVNode"])("a",Er,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",Pr,[Object(a["createVNode"])(d,{href:e.urlAllSites,"all-sites-text":e.allSitesText,onClick:t[9]||(t[9]=function(t){return e.onAllSitesClick(t)})},null,8,["href","all-sites-text"])])):Object(a["createCommentVNode"])("",!0)],512),[[a["vShow"],e.showSitesList]])],2)),[[p,{blur:e.onBlur}]])}var Ir=["innerHTML","href"];function xr(e,t,n,r,i,o){var c=this;return Object(a["openBlock"])(),Object(a["createElementBlock"])("div",{onClick:t[1]||(t[1]=function(e){return c.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,Ir)])}var Nr=Object(a["defineComponent"])({props:{href:String,allSitesText:String},emits:["click"],methods:{onClick:function(e){this.$emit("click",e)}}});Nr.render=xr;var Br=Nr;function Mr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ar(e){for(var t=1;t1&&void 0!==arguments[1]&&arguments[1];return e?(this.currentRequest&&this.currentRequest.abort(),this.limitRequest&&(this.limitRequest.abort(),this.limitRequest=null),this.limitRequest||(this.limitRequest=Ne.fetch({method:"SitesManager.getNumWebsitesToDisplayPerPage"})),this.limitRequest.then((function(r){var i=r.value,a="SitesManager.getPatternMatchSites";return n&&(a="SitesManager.getSitesWithAdminAccess"),t.currentRequest=Ne.fetch({method:a,limit:i,pattern:e}),t.currentRequest})).then((function(e){return e?t.processWebsitesList(e):null})).finally((function(){t.currentRequest=null}))):this.loadInitialSites()}},{key:"processWebsitesList",value:function(e){var t=e;return t&&t.length?(t=t.map((function(e){return Ar(Ar({},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:0})),t):[]}}]),e}(),_r=new Fr,Rr=300;function Ur(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Rr;return function(){for(var r=arguments.length,i=new Array(r),a=0;a1},firstSiteName:function(){return this.sites&&this.sites.length>0?this.sites[0].name:""},urlAllSites:function(){var e=Oe.stringify(Jr(Jr({},Oe.urlParsed.value),{},{module:"MultiSites",action:"index",date:Oe.parsed.value.date,period:Oe.parsed.value.period}));return"?".concat(e)}},methods:{onAllSitesClick:function(e){this.switchSite({idsite:"all",name:this.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.selectedSite={id:e.idsite,name:e.name},this.$emit("update:modelValue",Jr({},this.selectedSite)),this.switchSiteOnSelect&&this.activeSiteId!==e.idsite&&_r.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())},onSearchInputKeydown:function(){var e=this;setTimeout((function(){e.searchSite(e.searchTerm)}))},getMatchedSiteName:function(e){var t=e.toUpperCase().indexOf(this.searchTerm.toUpperCase());if(-1===t)return j.helper.htmlEntities(e);var n=j.helper.htmlEntities(e.substring(0,t)),r=j.helper.htmlEntities(e.substring(t+this.searchTerm.length));return"".concat(n,'').concat(this.searchTerm,"").concat(r)},loadInitialSites:function(){var e=this;return _r.loadInitialSites().then((function(t){e.sites=t||[]}))},searchSite:function(e){var t=this;this.isLoading=!0,_r.searchSite(e,this.onlySitesWithAdminAccess).then((function(e){e&&(t.sites=e)})).finally((function(){t.isLoading=!1}))},getUrlForSiteId:function(e){var t=Oe.stringify(Jr(Jr({},Oe.urlParsed.value),{},{segment:"",idSite:e})),n=Oe.stringify(Jr(Jr({},Oe.hashParsed.value),{},{segment:"",idSite:e}));return"?".concat(t,"#?").concat(n)}}});zr.render=Tr;var Qr=zr;function Kr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Wr(e){for(var t=1;t0||e.sites.length)]]),(Object(a["openBlock"])(!0),Object(a["createElementBlock"])(a["Fragment"],null,Object(a["renderList"])(e.menuItems,(function(t){return Object(a["openBlock"])(),Object(a["createElementBlock"])("ul",{key:t.title},[Object(a["createElementVNode"])("li",{class:"quick-access-category",onClick:function(n){e.searchTerm=t.title,e.searchMenu(e.searchTerm)}},Object(a["toDisplayString"])(t.title),9,ni),(Object(a["openBlock"])(!0),Object(a["createElementBlock"])(a["Fragment"],null,Object(a["renderList"])(t.items,(function(t){return Object(a["openBlock"])(),Object(a["createElementBlock"])("li",{class:Object(a["normalizeClass"])(["result",{selected:t.menuIndex===e.searchIndex}]),onMouseenter:function(n){return e.searchIndex=t.menuIndex},onClick:function(n){return e.selectMenuItem(t.index)},key:t.index},[Object(a["createElementVNode"])("a",null,Object(a["toDisplayString"])(t.name.trim()),1)],42,ri)})),128))])})),128)),Object(a["createElementVNode"])("ul",ii,[Object(a["withDirectives"])(Object(a["createElementVNode"])("li",{class:"quick-access-category websiteCategory"},Object(a["toDisplayString"])(e.translate("SitesManager_Sites")),513),[[a["vShow"],e.hasSitesSelector&&e.sites.length||e.isLoading]]),Object(a["withDirectives"])(Object(a["createElementVNode"])("li",{class:"no-result"},Object(a["toDisplayString"])(e.translate("MultiSites_LoadingWebsites")),513),[[a["vShow"],e.hasSitesSelector&&e.isLoading]]),(Object(a["openBlock"])(!0),Object(a["createElementBlock"])(a["Fragment"],null,Object(a["renderList"])(e.sites,(function(t,n){return Object(a["withDirectives"])((Object(a["openBlock"])(),Object(a["createElementBlock"])("li",{class:Object(a["normalizeClass"])(["result",{selected:e.numMenuItems+n===e.searchIndex}]),onMouseenter:function(t){return e.searchIndex=e.numMenuItems+n},onClick:function(n){return e.selectSite(t.idsite)},key:t.idsite},[Object(a["createElementVNode"])("a",{textContent:Object(a["toDisplayString"])(t.name)},null,8,oi)],42,ai)),[[a["vShow"],e.hasSitesSelector&&!e.isLoading]])})),128))]),Object(a["createElementVNode"])("ul",null,[Object(a["createElementVNode"])("li",ci,Object(a["toDisplayString"])(e.translate("General_HelpResources")),1),Object(a["createElementVNode"])("li",{class:Object(a["normalizeClass"])([{selected:"help"===e.searchIndex},"quick-access-help"]),onMouseenter:t[4]||(t[4]=function(t){return e.searchIndex="help"})},[Object(a["createElementVNode"])("a",{href:"https://matomo.org?s=".concat(encodeURIComponent(e.searchTerm)),target:"_blank"},Object(a["toDisplayString"])(e.translate("CoreHome_SearchOnMatomo",e.searchTerm)),9,si)],34)])],512),[[a["vShow"],e.searchTerm&&e.searchActive]])],512)),[[s,{blur:e.onBlur}]])}function ui(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function di(e){for(var t=1;t=0&&t.left>=0&&t.bottom<=window.$(window).height()&&t.right<=window.$(window).width()}function mi(e){e&&e.scrollIntoView&&e.scrollIntoView()}var hi=Object(a["defineComponent"])({props:{},directives:{FocusAnywhereButHere:_e,FocusIf:qe},watch:{searchActive:function(e){var t=this.$refs.root.parentElement.classList;t.toggle("active",e),t.toggle("expanded",e)}},mounted:function(){var e=this;this.$refs.root.parentElement.classList.add("quick-access","piwikSelector"),"undefined"!==typeof window.initTopControls&&window.initTopControls&&window.initTopControls(),j.helper.registerShortcut("f",D("CoreHome_ShortcutSearch"),(function(t){t.altKey||(t.preventDefault(),mi(e.$refs.root),e.activateSearch())}))},data:function(){var e=!!document.querySelector(".segmentEditorPanel");return{menuItems:[],numMenuItems:0,searchActive:!1,searchTerm:"",searchIndex:0,menuIndexCounter:-1,topMenuItems:null,leftMenuItems:null,segmentItems:null,hasSegmentSelector:e,sites:[],isLoading:!1}},created:function(){this.searchMenu=Ur(this.searchMenu.bind(this))},computed:{hasSitesSelector:function(){return!!document.querySelector(".top_controls [piwik-siteselector]")},quickAccessTitle:function(){var e="",t=[D("CoreHome_MenuEntries")];this.hasSegmentSelector&&t.push(D("CoreHome_Segments")),this.hasSitesSelector&&t.push(D("SitesManager_Sites"));while(t.length)e+=t.shift(),t.length>=2?e+=", ":1===t.length&&(e+=" ".concat(D("General_And")," "));return D("CoreHome_QuickAccessTitle",e)}},emits:["itemSelected","blur"],methods:{onKeypress:function(e){var t=this,n=this.searchTerm&&this.searchActive,r=9===e.which,i=27===e.which;38===e.which?(this.highlightPreviousItem(),e.preventDefault()):40===e.which?(this.highlightNextItem(),e.preventDefault()):13===e.which?this.clickQuickAccessMenuItem():r&&n||i&&n?this.deactivateSearch():setTimeout((function(){t.searchActive=!0,t.searchMenu(t.searchTerm)}))},highlightPreviousItem:function(){this.searchIndex-1<0?this.searchIndex=0:this.searchIndex-=1,this.makeSureSelectedItemIsInViewport()},highlightNextItem:function(){var e=this.$refs.root.querySelectorAll("li.result").length;e<=this.searchIndex+1?this.searchIndex=e-1:this.searchIndex+=1,this.makeSureSelectedItemIsInViewport()},clickQuickAccessMenuItem:function(){var e=this,t=this.getCurrentlySelectedElement();t&&setTimeout((function(){t.click(),e.$emit("itemSelected",t)}),20)},deactivateSearch:function(){this.searchTerm="",this.searchActive=!1,this.$refs.root.querySelector("input").blur()},makeSureSelectedItemIsInViewport:function(){var e=this.getCurrentlySelectedElement();e&&!pi(e)&&mi(e)},getCurrentlySelectedElement:function(){var e=this.$refs.root.querySelectorAll("li.result");return e&&e.length&&e.item(this.searchIndex)?e.item(this.searchIndex):null},searchMenu:function(e){var t=this,n=e.toLowerCase(),r=-1,i={},a=[],o=function(e){var t=di({},e);r+=1,t.menuIndex=r;var n=t.category;n in i||(a.push({title:n,items:[]}),i[n]=a.length-1);var o=i[n];a[o].items.push(t)};this.resetSearchIndex(),this.hasSitesSelector&&(this.isLoading=!0,_r.searchSite(n).then((function(e){t.sites=e})).finally((function(){t.isLoading=!1})));var c=function(e){return-1!==e.name.toLowerCase().indexOf(n)||-1!==e.category.toLowerCase().indexOf(n)};null===this.topMenuItems&&(this.topMenuItems=this.getTopMenuItems()),null===this.leftMenuItems&&(this.leftMenuItems=this.getLeftMenuItems()),null===this.segmentItems&&(this.segmentItems=this.getSegmentItems());var s=this.topMenuItems.filter(c),l=this.leftMenuItems.filter(c),u=this.segmentItems.filter(c);s.forEach(o),l.forEach(o),u.forEach(o),this.numMenuItems=s.length+l.length+u.length,this.menuItems=a},resetSearchIndex:function(){this.searchIndex=0,this.makeSureSelectedItemIsInViewport()},selectSite:function(e){_r.loadSite(e)},selectMenuItem:function(e){var t=document.querySelector("[quick_access='".concat(e,"']"));if(t){this.deactivateSearch();var n=t.getAttribute("href");if(n&&n.length>10&&t&&t.click)try{t.click()}catch(r){window.$(t).click()}else window.$(t).click()}},onBlur:function(){this.searchActive=!1,this.$emit("blur")},activateSearch:function(){this.searchActive=!0},getTopMenuItems:function(){var e=this,t=D("CoreHome_Menu"),n=[];return document.querySelectorAll("nav .sidenav li > a").forEach((function(r){var i=r.textContent.trim();i||(i=r.getAttribute("title").trim()),i&&(n.push({name:i,index:e.menuIndexCounter+=1,category:t}),r.setAttribute("quick_access","".concat(e.menuIndexCounter)))})),n},getLeftMenuItems:function(){var e=this,t=[];return document.querySelectorAll("#secondNavBar .menuTab").forEach((function(n){var r=window.$(n).find("> .item").text().trim();r&&-1!==r.lastIndexOf("\n")&&(r=r.substr(0,r.lastIndexOf("\n")).trim()),window.$(n).find("li .item").each((function(n,i){var a=i.textContent.trim();a&&(t.push({name:a,category:r,index:e.menuIndexCounter+=1}),i.setAttribute("quick_access","".concat(e.menuIndexCounter)))}))})),t},getSegmentItems:function(){var e=this;if(!this.hasSegmentSelector)return[];var t=D("CoreHome_Segments"),n=[];return document.querySelectorAll(".segmentList [data-idsegment]").forEach((function(r){var i=r.querySelector(".segname").textContent.trim();i&&(n.push({name:i,category:t,index:e.menuIndexCounter+=1}),r.setAttribute("quick_access","".concat(e.menuIndexCounter)))})),n}}});hi.render=li;var vi=hi,gi=(wt({component:vi,directiveName:"piwikQuickAccess",events:{itemSelected:function(e,t,n,r,i,a,o){o()},blur:function(e,t,n){setTimeout((function(){return n.$apply()}))}}}),{class:"loadingPiwik"}),bi=Object(a["createElementVNode"])("img",{src:"plugins/Morpheus/images/loading-blue.gif",alt:""},null,-1); /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later - */wt({component:Fr,scope:{notificationId:{angularJsBind:"@?"},title:{angularJsBind:"@?notificationTitle"},context:{angularJsBind:"@?"},type:{angularJsBind:"@?"},noclear:{angularJsBind:"@?",transform:function(e){return!!e}},toastLength:{angularJsBind:"@?"}},directiveName:"piwikNotification",transclude:!0});function Vr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Lr(e){for(var t=1;t',data:function(){return{group:t}}});a.config.globalProperties.$sanitize=window.vueSanitize,a.config.globalProperties.translate=C,a.component("NotificationGroup",r),a.mount(n[0])}}},{key:"checkMessage",value:function(e){if(!e)throw new Error("No message given, cannot display notification")}}]),e}(),qr=new Gr,zr=qr;$((function(){return qr.parseNotificationDivs()})), + */function Si(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ji(e,t,n,r,i,o){return Object(a["openBlock"])(),Object(a["createElementBlock"])("div",{class:Object(a["normalizeClass"])(["alert",Si({},"alert-".concat(e.severity),!0)])},[Object(a["renderSlot"])(e.$slots,"default")],2)}var Di=Object(a["defineComponent"])({props:{severity:{type:String,required:!0}}});Di.render=ji;var Ci=Di,Ei=wt({component:Ci,scope:{severity:{vue:"severity",angularJsBind:"@piwikAlert"}},directiveName:"piwikAlert",transclude:!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 Pi(e,t,n){var r=new Date;n||(n=432e4),r.setTime(r.getTime()+n),document.cookie="".concat(e,"=").concat(t,"; expires=").concat(r.toUTCString(),"; path=/")}function Ti(e){var t="; ".concat(document.cookie),n=t.split("; ".concat(e,"="));if(2==n.length){var r=n.pop().split(";").shift();if("undefined"!==typeof r)return r}return null}function Ii(e){var t=new Date;t.setTime(t.getTime()+-864e5),document.cookie="".concat(e,"=; expires=").concat(t.toUTCString(),"; path=/")}var xi={key:0},Ni=["data-notification-instance-id"],Bi={key:1},Mi={class:"notification-body"},Ai=["innerHTML"],$i={key:1};function Vi(e,t,n,r,i,o){return Object(a["openBlock"])(),Object(a["createBlock"])(a["Transition"],{name:"toast"===e.type?"slow-fade-out":void 0,onAfterLeave:t[1]||(t[1]=function(t){return e.toastClosed()})},{default:Object(a["withCtx"])((function(){return[e.deleted?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",xi,[Object(a["createVNode"])(a["Transition"],{name:"toast"===e.type?"toast-slide-up":void 0,appear:""},{default:Object(a["withCtx"])((function(){return[Object(a["createElementVNode"])("div",null,[Object(a["createVNode"])(a["Transition"],{name:e.animate?"fade-in":void 0,appear:""},{default:Object(a["withCtx"])((function(){return[Object(a["createElementVNode"])("div",{class:Object(a["normalizeClass"])(["notification system",e.cssClasses]),style:Object(a["normalizeStyle"])(e.style),ref:"root","data-notification-instance-id":e.notificationInstanceId},[e.canClose?(Object(a["openBlock"])(),Object(a["createElementBlock"])("button",{key:0,type:"button",class:"close","data-dismiss":"alert",onClick:t[0]||(t[0]=function(t){return e.closeNotification(t)})}," × ")):Object(a["createCommentVNode"])("",!0),e.title?(Object(a["openBlock"])(),Object(a["createElementBlock"])("strong",Bi,Object(a["toDisplayString"])(e.title),1)):Object(a["createCommentVNode"])("",!0),Object(a["createElementVNode"])("div",Mi,[e.message?(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",{key:0,innerHTML:e.$sanitize(e.message)},null,8,Ai)):Object(a["createCommentVNode"])("",!0),e.message?Object(a["createCommentVNode"])("",!0):(Object(a["openBlock"])(),Object(a["createElementBlock"])("div",$i,[Object(a["renderSlot"])(e.$slots,"default")]))])],14,Ni)]})),_:3},8,["name"])])]})),_:3},8,["name"])]))]})),_:3},8,["name"])}var Li=window,Hi=Li.$,Fi=Object(a["defineComponent"])({props:{notificationId:String,notificationInstanceId:String,title:String,context:String,type:String,noclear:Boolean,toastLength:{type:Number,default:12e3},style:[String,Object],animate:Boolean,message:String,cssClass:String},computed:{cssClasses:function(){var e={};return this.context&&(e["notification-".concat(this.context)]=!0),this.cssClass&&(e[this.cssClass]=!0),e},canClose:function(){return"persistent"===this.type||!this.noclear}},emits:["closed"],data:function(){return{deleted:!1}},mounted:function(){var e=this,t=function(){setTimeout((function(){e.deleted=!0}),e.toastLength)};"toast"===this.type&&t(),this.style&&Hi(this.$refs.root).css(this.style)},methods:{toastClosed:function(){var e=this;Object(a["nextTick"])((function(){e.$emit("closed")}))},closeNotification:function(e){var t=this;this.canClose&&e&&e.target&&(this.deleted=!0,Object(a["nextTick"])((function(){t.$emit("closed")}))),this.markNotificationAsRead()},markNotificationAsRead:function(){this.notificationId&&Ne.fetch({module:"CoreHome",action:"markNotificationAsRead"},{postParams:{notificationId:this.notificationId}})}}});Fi.render=Vi;var _i=Fi; +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */wt({component:_i,scope:{notificationId:{angularJsBind:"@?"},title:{angularJsBind:"@?notificationTitle"},context:{angularJsBind:"@?"},type:{angularJsBind:"@?"},noclear:{angularJsBind:"@?",transform:function(e){return!!e}},toastLength:{angularJsBind:"@?"}},directiveName:"piwikNotification",transclude:!0});function Ri(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ui(e){for(var t=1;t',data:function(){return{group:t}}});i.config.globalProperties.$sanitize=window.vueSanitize,i.config.globalProperties.translate=D,i.component("NotificationGroup",r),i.mount(n[0])}}},{key:"checkMessage",value:function(e){if(!e)throw new Error("No message given, cannot display notification")}}]),e}(),Ki=new Qi,Wi=Ki;$((function(){return Ki.parseNotificationDivs()})), /*! * Matomo - free/libre analytics platform * * @link https://matomo.org * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later */ -angular.module("piwikApp").factory("notifications",(function(){return zr}));var Qr={class:"notification-group"},Yr=["innerHTML"];function Wr(e,t,n,r,a,i){var c=Object(o["resolveComponent"])("Notification");return Object(o["openBlock"])(),Object(o["createElementBlock"])("div",Qr,[(Object(o["openBlock"])(!0),Object(o["createElementBlock"])(o["Fragment"],null,Object(o["renderList"])(e.notifications,(function(t,n){return Object(o["openBlock"])(),Object(o["createBlock"])(c,{key:t.id||"no-id-".concat(n),"notification-id":t.id,title:t.title,context:t.context,type:t.type,noclear:t.noclear,"toast-length":t.toastLength,style:Object(o["normalizeStyle"])(t.style),animate:t.animate,message:t.message,"notification-instance-id":t.notificationInstanceId,"css-class":t.class,onClosed:function(n){return e.removeNotification(t.id)}},{default:Object(o["withCtx"])((function(){return[Object(o["createElementVNode"])("div",{innerHTML:e.$sanitize(t.message)},null,8,Yr)]})),_:2},1032,["notification-id","title","context","type","noclear","toast-length","style","animate","message","notification-instance-id","css-class","onClosed"])})),128))])}var Kr=Object(o["defineComponent"])({props:{group:String},components:{Notification:Fr},computed:{notifications:function(){var e=this;return zr.state.notifications.filter((function(t){return e.group?e.group===t.group:!t.group}))}},methods:{removeNotification:function(e){zr.remove(e)}}});Kr.render=Wr;var Xr=Kr; +angular.module("piwikApp").factory("notifications",(function(){return Wi}));var Yi={class:"notification-group"},Xi=["innerHTML"];function Zi(e,t,n,r,i,o){var c=Object(a["resolveComponent"])("Notification");return Object(a["openBlock"])(),Object(a["createElementBlock"])("div",Yi,[(Object(a["openBlock"])(!0),Object(a["createElementBlock"])(a["Fragment"],null,Object(a["renderList"])(e.notifications,(function(t,n){return Object(a["openBlock"])(),Object(a["createBlock"])(c,{key:t.id||"no-id-".concat(n),"notification-id":t.id,title:t.title,context:t.context,type:t.type,noclear:t.noclear,"toast-length":t.toastLength,style:Object(a["normalizeStyle"])(t.style),animate:t.animate,message:t.message,"notification-instance-id":t.notificationInstanceId,"css-class":t.class,onClosed:function(n){return e.removeNotification(t.id)}},{default:Object(a["withCtx"])((function(){return[Object(a["createElementVNode"])("div",{innerHTML:e.$sanitize(t.message)},null,8,Xi)]})),_:2},1032,["notification-id","title","context","type","noclear","toast-length","style","animate","message","notification-instance-id","css-class","onClosed"])})),128))])}var ea=Object(a["defineComponent"])({props:{group:String},components:{Notification:_i},computed:{notifications:function(){var e=this;return Wi.state.notifications.filter((function(t){return e.group?e.group===t.group:!t.group}))}},methods:{removeNotification:function(e){Wi.remove(e)}}});ea.render=Zi;var ta=ea; /*! * Matomo - free/libre analytics platform * diff --git a/plugins/CoreHome/vue/src/AjaxHelper/AjaxHelper.ts b/plugins/CoreHome/vue/src/AjaxHelper/AjaxHelper.ts index f128ae6c32..a3965760b8 100644 --- a/plugins/CoreHome/vue/src/AjaxHelper/AjaxHelper.ts +++ b/plugins/CoreHome/vue/src/AjaxHelper/AjaxHelper.ts @@ -346,7 +346,7 @@ export default class AjaxHelper { // eslint-disable-line /** * Send the request */ - send(): Promise { + send(): AbortablePromise { if ($(this.errorElement).length) { $(this.errorElement).hide(); } @@ -358,7 +358,7 @@ export default class AjaxHelper { // eslint-disable-line this.requestHandle = this.buildAjaxCall(); window.globalAjaxQueue.push(this.requestHandle); - return new Promise((resolve, reject) => { + const result: AbortablePromise = new Promise((resolve, reject) => { this.requestHandle!.then(resolve).fail((xhr: jqXHR) => { if (xhr.statusText !== 'abort') { console.log(`Warning: the ${$.param(this.getParams)} request failed!`); @@ -366,7 +366,15 @@ export default class AjaxHelper { // eslint-disable-line reject(xhr); } }); - }); + }) as AbortablePromise; + + result.abort = () => { + if (this.requestHandle) { + this.requestHandle.abort(); + } + }; + + return result; } /** diff --git a/plugins/CoreHome/vue/src/MatomoDialog/MatomoDialog.adapter.ts b/plugins/CoreHome/vue/src/MatomoDialog/MatomoDialog.adapter.ts index ee03ce55c7..cd5965d1c6 100644 --- a/plugins/CoreHome/vue/src/MatomoDialog/MatomoDialog.adapter.ts +++ b/plugins/CoreHome/vue/src/MatomoDialog/MatomoDialog.adapter.ts @@ -22,19 +22,19 @@ export default createAngularJsAdapter<[IParseService]>({ }, }, events: { - yes: ($event, scope, element, attrs) => { + yes: ($event, vm, scope, element, attrs) => { if (attrs.yes) { scope.$eval(attrs.yes); setTimeout(() => { scope.$apply(); }, 0); } }, - no: ($event, scope, element, attrs) => { + no: ($event, vm, scope, element, attrs) => { if (attrs.no) { scope.$eval(attrs.no); setTimeout(() => { scope.$apply(); }, 0); } }, - validation: ($event, scope, element, attrs) => { + validation: ($event, vm, scope, element, attrs) => { if (attrs.no) { scope.$eval(attrs.no); setTimeout(() => { scope.$apply(); }, 0); @@ -46,7 +46,7 @@ export default createAngularJsAdapter<[IParseService]>({ setTimeout(() => { scope.$apply(); }, 0); } }, - 'update:modelValue': (newValue, scope, element, attrs, $parse: IParseService) => { + 'update:modelValue': (newValue, vm, scope, element, attrs, controller, $parse: IParseService) => { setTimeout(() => { scope.$apply($parse(attrs.piwikDialog).assign(scope, newValue)); }, 0); diff --git a/plugins/CoreHome/vue/src/MatomoUrl/MatomoUrl.ts b/plugins/CoreHome/vue/src/MatomoUrl/MatomoUrl.ts index 11eec228a8..02580be10a 100644 --- a/plugins/CoreHome/vue/src/MatomoUrl/MatomoUrl.ts +++ b/plugins/CoreHome/vue/src/MatomoUrl/MatomoUrl.ts @@ -68,6 +68,18 @@ class MatomoUrl { $location.search(serializedParams); } + updateUrl(params: QueryParameters|string, hashParams: QueryParameters|string = {}) { + const serializedParams: string = typeof params !== 'string' ? this.stringify(params) : params; + const serializedHashParams: string = typeof hashParams !== 'string' ? this.stringify(hashParams) : hashParams; + + let url = `?${serializedParams}`; + if (serializedHashParams.length) { + url = `${url}#?${serializedHashParams}`; + } + + window.broadcast.propagateNewPage('', undefined, undefined, undefined, url); + } + getSearchParam(paramName: string): string { const hash = window.location.href.split('#'); diff --git a/plugins/CoreHome/vue/src/MenuDropdown/MenuDropdown.adapter.ts b/plugins/CoreHome/vue/src/MenuDropdown/MenuDropdown.adapter.ts new file mode 100644 index 0000000000..9fc8ae8e13 --- /dev/null +++ b/plugins/CoreHome/vue/src/MenuDropdown/MenuDropdown.adapter.ts @@ -0,0 +1,36 @@ +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +import createAngularJsAdapter from '../createAngularJsAdapter'; +import MenuDropdown from './MenuDropdown.vue'; + +export default createAngularJsAdapter({ + component: MenuDropdown, + scope: { + menuTitle: { + angularJsBind: '@', + }, + tooltip: { + angularJsBind: '@', + }, + showSearch: { + angularJsBind: '=', + }, + menuTitleChangeOnClick: { + angularJsBind: '=', + }, + }, + directiveName: 'piwikMenudropdown', + transclude: true, + events: { + 'after-select': ($event, scope) => { + setTimeout(() => { + scope.$apply(); + }, 0); + }, + }, +}); diff --git a/plugins/CoreHome/vue/src/MenuDropdown/MenuDropdown.less b/plugins/CoreHome/vue/src/MenuDropdown/MenuDropdown.less new file mode 100644 index 0000000000..2a04d675df --- /dev/null +++ b/plugins/CoreHome/vue/src/MenuDropdown/MenuDropdown.less @@ -0,0 +1,94 @@ + +.menuDropdown { + display: inline-block; + padding-right: 14px; + + .title { + position: relative; + cursor: pointer; + } + + .icon-arrow-bottom { + margin-left: 4px; + } + + .items { + z-index: 200; + position: absolute; + border: 1px solid @color-silver-l80; + background: @theme-color-background-contrast; + max-height: 400px; + overflow-y: auto; + overflow-x: hidden; + padding: 0 !important; + + .search { + margin: 15px 6px 10px 6px; + display: block; + + .search_ico { + position: absolute; + right: 25px; + top: 27px; + margin: 0px; + left: initial; + } + .reset { + position: absolute; + top: 25px; + cursor: pointer; + margin: 0px; + right: 25px; + left: initial; + } + + input { + margin: 0px; + width: 100%; + + &::-ms-clear { + display: none; + } + } + } + + .item { + display: block; + color: @theme-color-text !important; + text-decoration: none !important; + padding: 12px 25px 12px 6px !important; + font-size: 11px; + float: none; + text-align: left; + line-height: 16px; + + &:hover { + background: @theme-color-background-tinyContrast; + } + + &.active { + background-color: @theme-color-background-tinyContrast; + } + + &.category { + color: @theme-color-text-light !important + } + + &.separator { + padding: 0px !important; + border-bottom: 0px; + margin: 0px; + } + + &.separator, + &.disabled { + opacity: 0.5; + cursor: default; + + &:hover { + background: @theme-color-background-base; + } + } + } + } +} diff --git a/plugins/CoreHome/vue/src/MenuDropdown/MenuDropdown.vue b/plugins/CoreHome/vue/src/MenuDropdown/MenuDropdown.vue new file mode 100644 index 0000000000..fdd26bfdba --- /dev/null +++ b/plugins/CoreHome/vue/src/MenuDropdown/MenuDropdown.vue @@ -0,0 +1,133 @@ + + + + + diff --git a/plugins/CoreHome/vue/src/Menudropdown/Menudropdown.adapter.ts b/plugins/CoreHome/vue/src/Menudropdown/Menudropdown.adapter.ts deleted file mode 100644 index f56616f54d..0000000000 --- a/plugins/CoreHome/vue/src/Menudropdown/Menudropdown.adapter.ts +++ /dev/null @@ -1,36 +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 - */ - -import createAngularJsAdapter from '../createAngularJsAdapter'; -import Menudropdown from './Menudropdown.vue'; - -export default createAngularJsAdapter({ - component: Menudropdown, - scope: { - menuTitle: { - angularJsBind: '@', - }, - tooltip: { - angularJsBind: '@', - }, - showSearch: { - angularJsBind: '=', - }, - menuTitleChangeOnClick: { - angularJsBind: '=', - }, - }, - directiveName: 'piwikMenudropdown', - transclude: true, - events: { - 'after-select': ($event, scope) => { - setTimeout(() => { - scope.$apply(); - }, 0); - }, - }, -}); diff --git a/plugins/CoreHome/vue/src/Menudropdown/Menudropdown.less b/plugins/CoreHome/vue/src/Menudropdown/Menudropdown.less deleted file mode 100644 index 2a04d675df..0000000000 --- a/plugins/CoreHome/vue/src/Menudropdown/Menudropdown.less +++ /dev/null @@ -1,94 +0,0 @@ - -.menuDropdown { - display: inline-block; - padding-right: 14px; - - .title { - position: relative; - cursor: pointer; - } - - .icon-arrow-bottom { - margin-left: 4px; - } - - .items { - z-index: 200; - position: absolute; - border: 1px solid @color-silver-l80; - background: @theme-color-background-contrast; - max-height: 400px; - overflow-y: auto; - overflow-x: hidden; - padding: 0 !important; - - .search { - margin: 15px 6px 10px 6px; - display: block; - - .search_ico { - position: absolute; - right: 25px; - top: 27px; - margin: 0px; - left: initial; - } - .reset { - position: absolute; - top: 25px; - cursor: pointer; - margin: 0px; - right: 25px; - left: initial; - } - - input { - margin: 0px; - width: 100%; - - &::-ms-clear { - display: none; - } - } - } - - .item { - display: block; - color: @theme-color-text !important; - text-decoration: none !important; - padding: 12px 25px 12px 6px !important; - font-size: 11px; - float: none; - text-align: left; - line-height: 16px; - - &:hover { - background: @theme-color-background-tinyContrast; - } - - &.active { - background-color: @theme-color-background-tinyContrast; - } - - &.category { - color: @theme-color-text-light !important - } - - &.separator { - padding: 0px !important; - border-bottom: 0px; - margin: 0px; - } - - &.separator, - &.disabled { - opacity: 0.5; - cursor: default; - - &:hover { - background: @theme-color-background-base; - } - } - } - } -} diff --git a/plugins/CoreHome/vue/src/Menudropdown/Menudropdown.vue b/plugins/CoreHome/vue/src/Menudropdown/Menudropdown.vue deleted file mode 100644 index fdd26bfdba..0000000000 --- a/plugins/CoreHome/vue/src/Menudropdown/Menudropdown.vue +++ /dev/null @@ -1,133 +0,0 @@ - - - - - diff --git a/plugins/CoreHome/vue/src/QuickAccess/QuickAccess.adapter.ts b/plugins/CoreHome/vue/src/QuickAccess/QuickAccess.adapter.ts new file mode 100644 index 0000000000..2818deff0a --- /dev/null +++ b/plugins/CoreHome/vue/src/QuickAccess/QuickAccess.adapter.ts @@ -0,0 +1,23 @@ +/*! + * 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 from '../createAngularJsAdapter'; +import QuickAccess from './QuickAccess.vue'; + +export default createAngularJsAdapter<[ITimeoutService]>({ + component: QuickAccess, + directiveName: 'piwikQuickAccess', + events: { + itemSelected(event, vm, scope, elem, attrs, controller, $timeout: ITimeoutService) { + $timeout(); + }, + blur(event, vm, scope) { + setTimeout(() => scope.$apply()); + }, + }, +}); diff --git a/plugins/CoreHome/vue/src/QuickAccess/QuickAccess.less b/plugins/CoreHome/vue/src/QuickAccess/QuickAccess.less new file mode 100644 index 0000000000..3bad77b9ba --- /dev/null +++ b/plugins/CoreHome/vue/src/QuickAccess/QuickAccess.less @@ -0,0 +1,65 @@ +.quick-access { + position: relative; + + &:hover, + &.expanded, + &.active { + input { + background-color: @theme-color-background-contrast !important; + } + } + li { + font-size: 11px; + } + + li a { + padding: 10px 19px; + display: inline-block; + text-decoration: none; + word-break: break-all; + } + + .icon-search { + position: absolute; + font-size: 14px; + top: 10px; + left: 10px; + + } + input { + width:100%; + height: 100%; + box-shadow: 0 0 !important; + border-radius: 0 !important; + background-color: @theme-color-background-base !important; + font-size: 11px; + &:focus { + outline: none; + } + } + .selected { + background-color: @theme-color-background-tinyContrast !important; + } + .quick-access-category { + text-align: left !important; + font-size: 11px; + padding: 5px 5px 5px 10px; + cursor: pointer; + } + .result { + cursor: pointer; + } + .quick-access-category:hover { + background: none !important; + } + .no-result { + padding: 10px 19px; + cursor: default; + } + .websiteCategory { + cursor: default; + } + li.quick-access-help a { + word-break: break-word; + } +} \ No newline at end of file diff --git a/plugins/CoreHome/vue/src/QuickAccess/QuickAccess.vue b/plugins/CoreHome/vue/src/QuickAccess/QuickAccess.vue new file mode 100644 index 0000000000..20c8588fc3 --- /dev/null +++ b/plugins/CoreHome/vue/src/QuickAccess/QuickAccess.vue @@ -0,0 +1,465 @@ + + + + + diff --git a/plugins/CoreHome/vue/src/SiteSelector/AllSitesLink.vue b/plugins/CoreHome/vue/src/SiteSelector/AllSitesLink.vue new file mode 100644 index 0000000000..548a697403 --- /dev/null +++ b/plugins/CoreHome/vue/src/SiteSelector/AllSitesLink.vue @@ -0,0 +1,36 @@ + + + + + diff --git a/plugins/CoreHome/vue/src/SiteSelector/SiteSelector.adapter.ts b/plugins/CoreHome/vue/src/SiteSelector/SiteSelector.adapter.ts new file mode 100644 index 0000000000..b3438d2bb7 --- /dev/null +++ b/plugins/CoreHome/vue/src/SiteSelector/SiteSelector.adapter.ts @@ -0,0 +1,86 @@ +/*! + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +import { INgModelController, ITimeoutService } from 'angular'; +import createAngularJsAdapter from '../createAngularJsAdapter'; +import SiteSelector from './SiteSelector.vue'; +import Matomo from '../Matomo/Matomo'; + +export default createAngularJsAdapter<[ITimeoutService]>({ + component: SiteSelector, + require: '?ngModel', + scope: { + showSelectedSite: { + angularJsBind: '=', + }, + showAllSitesItem: { + angularJsBind: '=', + }, + switchSiteOnSelect: { + angularJsBind: '=', + }, + onlySitesWithAdminAccess: { + angularJsBind: '=', + }, + name: { + angularJsBind: '@', + }, + allSitesText: { + angularJsBind: '@', + }, + allSitesLocation: { + angularJsBind: '@', + }, + placeholder: { + angularJsBind: '@', + }, + modelValue: {}, + }, + $inject: ['$timeout'], + directiveName: 'piwikSiteselector', + events: { + 'update:modelValue': (newValue, vm, scope, element, attrs, ngModel) => { + if ((newValue && !vm.modelValue) + || (!newValue && vm.modelValue) + || newValue.id !== vm.modelValue.id + ) { + element.attr('siteid', newValue.id); + element.trigger('change', newValue); + + if (ngModel) { + ngModel.$setViewValue(newValue); + } + } + }, + blur(event, vm, scope) { + setTimeout(() => scope.$apply()); + }, + }, + postCreate(vm, scope, element, attrs, controller, $timeout: ITimeoutService) { + const ngModel = controller as INgModelController; + + // setup ng-model mapping + if (ngModel) { + ngModel.$setViewValue(vm.modelValue); + + ngModel.$render = () => { + if (angular.isString(ngModel.$viewValue)) { + vm.modelValue = JSON.parse(ngModel.$viewValue); + } else { + vm.modelValue = ngModel.$viewValue; + } + }; + } + + $timeout(() => { + if (attrs.siteid && attrs.sitename) { + vm.modelValue = { id: attrs.siteid, name: Matomo.helper.htmlDecode(attrs.sitename) }; + ngModel.$setViewValue({ ...vm.modelValue }); + } + }); + }, +}); diff --git a/plugins/CoreHome/vue/src/SiteSelector/SiteSelector.less b/plugins/CoreHome/vue/src/SiteSelector/SiteSelector.less new file mode 100644 index 0000000000..48700196c2 --- /dev/null +++ b/plugins/CoreHome/vue/src/SiteSelector/SiteSelector.less @@ -0,0 +1,185 @@ +.autocompleteMatched { + color: #5256BE; + font-weight: bold; +} +.siteSelector { + a.title { + .icon.collapsed.iconHidden { + visibility: visible; + } + + span.placeholder { + color: #9e9e9e; + font-style: italic; + } + } + .dropdown { + min-width: 210px; + } + + .ui-widget.ui-widget-content { + border: none; + } +} + +#content { + .sites_autocomplete { + position: static !important; + height: 36px; + z-index: 99; + vertical-align: middle; + + > .siteSelector { + position: absolute; + z-index: 998; + } + + a.title { + text-decoration: none; + } + } +} + +.siteSelector.expanded { + .loading { + background: url(plugins/Morpheus/images/loading-blue.gif) no-repeat 16% 11px; + } +} + +.siteSelector a.title, +.siteSelector .custom_select_ul_list li a, +.siteSelector .custom_select_all a, +.siteSelector .custom_select_main_link > span { + display: inline-block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + padding: 0; + color: @theme-color-text; + text-transform: uppercase; + width: 100%; +} + +.siteSelector.piwikSelector a.title { + padding: 10px 15px 11px 13px; + + /*.icon:not(.icon-fixed) { + margin-right: -11px; + }*/ + + > span { + max-width: 161px; + overflow: hidden; + text-overflow: ellipsis; + } + + span { + vertical-align: top; + } +} + +.siteSelector .custom_select_ul_list, +.siteSelector ul.ui-autocomplete { + position: relative; + list-style: none; + line-height: 18px; + padding: 0 0 15px 0; + box-shadow: none !important; +} + +.siteSelector .custom_select_ul_list { + padding: 0 0 5px 0; +} + +.siteSelector .dropdown { + padding-top: 0; +} + +.siteSelector .custom_select_ul_list li a, +.siteSelector .custom_select_all a { + line-height: 18px; + height: auto; + display: block; + text-decoration: none; + padding-left: 5px; +} + +.siteSelector .custom_select_ul_list li a:hover, +.siteSelector .custom_select_all a:hover { + background: @color-silver-l95; +} + +.siteSelector .custom_select_all a { + text-decoration: none; + &:hover { + text-decoration: none; + } +} + +.siteSelector .custom_select_search { + margin: 0 0 8px 0; + height: 33px; + display: block; + white-space: nowrap; + position: relative; + + .inp { + vertical-align: top; + width: 100%; + padding: 7px 6px !important; + border: 1px solid #d0d0d0 !important; + background: transparent !important; + font-size: 11px !important; + color: #454545 !important; + } + .reset { + position: absolute; + top: 8px; + right: 4px; + cursor: pointer; + } +} + +.siteSelector { + width: auto; +} + +.sites_selector_container>.siteSelector { + padding-left: 12px; +} + +.custom_selector_container .ui-menu-item, +.custom_selector_container .ui-menu-item a { + float:none;position:static +} + +.custom_select_block_show { + height: auto; + overflow: visible; + max-width:inherit; +} + +.sites_selector_container { + padding-top: 5px; +} + +.siteSelect a { + white-space: normal; + text-align: left; +} + +.siteSelector.disabled { + a.title { + cursor: default !important; + + .icon { + display: none !important; + } + } + + &.borderedControl { + &:hover { + background-color: @theme-color-background-base!important; + } + } +} \ No newline at end of file diff --git a/plugins/CoreHome/vue/src/SiteSelector/SiteSelector.vue b/plugins/CoreHome/vue/src/SiteSelector/SiteSelector.vue new file mode 100644 index 0000000000..52884f6815 --- /dev/null +++ b/plugins/CoreHome/vue/src/SiteSelector/SiteSelector.vue @@ -0,0 +1,370 @@ + + + + + diff --git a/plugins/CoreHome/vue/src/SiteSelector/SitesStore.ts b/plugins/CoreHome/vue/src/SiteSelector/SitesStore.ts new file mode 100644 index 0000000000..655803843c --- /dev/null +++ b/plugins/CoreHome/vue/src/SiteSelector/SitesStore.ts @@ -0,0 +1,131 @@ +/*! + * 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, computed, readonly } from 'vue'; +import AjaxHelper from '../AjaxHelper/AjaxHelper'; +import MatomoUrl from '../MatomoUrl/MatomoUrl'; + +export interface Site { + idsite: string; + name: string; +} + +interface SitesStoreState { + initialSites: Site[]|null; + isInitialized: boolean; +} + +class SitesStore { + private state = reactive({ + initialSites: [], + isInitialized: false, + }); + + private currentRequest: AbortablePromise; + + private limitRequest: AbortablePromise; + + public readonly initialSites = computed(() => readonly(this.state.initialSites)); + + loadInitialSites(): Promise { + if (this.state.isInitialized) { + return Promise.resolve(readonly(this.state.initialSites)); + } + + return this.searchSite('%').then((sites) => { + this.state.isInitialized = true; + this.state.initialSites = sites; + return readonly(sites); + }); + } + + loadSite(idSite: number|string): void { + if (idSite === 'all') { + MatomoUrl.updateUrl({ + ...MatomoUrl.urlParsed.value, + module: 'MultiSites', + action: 'index', + date: MatomoUrl.parsed.value.date, + period: MatomoUrl.parsed.value.period, + }); + } else { + MatomoUrl.updateUrl({ + ...MatomoUrl.parsed.value, + segment: '', + idSite, + }); + } + } + + searchSite(term, onlySitesWithAdminAccess = false): Promise { + if (!term) { + return this.loadInitialSites(); + } + + if (this.currentRequest) { + this.currentRequest.abort(); + } + + if (this.limitRequest) { + this.limitRequest.abort(); + this.limitRequest = null; + } + + if (!this.limitRequest) { + this.limitRequest = AjaxHelper.fetch({ method: 'SitesManager.getNumWebsitesToDisplayPerPage' }); + } + + return this.limitRequest.then((response) => { + const limit = response.value; + + let methodToCall = 'SitesManager.getPatternMatchSites'; + if (onlySitesWithAdminAccess) { + methodToCall = 'SitesManager.getSitesWithAdminAccess'; + } + + this.currentRequest = AjaxHelper.fetch({ + method: methodToCall, + limit, + pattern: term, + }); + + return this.currentRequest; + }).then((response) => { + if (response) { + return this.processWebsitesList(response); + } + + return null; + }).finally(() => { + this.currentRequest = null; + }); + } + + private processWebsitesList(response) { + let sites = response; + + if (!sites || !sites.length) { + return []; + } + + sites = sites.map((s) => ({ + ...s, + name: s.group ? `[${s.group}] ${s.name}` : s.name, + })); + + sites.sort((lhs, rhs) => { + if (lhs.name.toLowerCase() < rhs.name.toLowerCase()) { + return -1; + } + return lhs.name.toLowerCase() > rhs.name.toLowerCase() ? 1 : 0; + }); + + return sites; + } +} + +export default new SitesStore(); diff --git a/plugins/CoreHome/vue/src/createAngularJsAdapter.ts b/plugins/CoreHome/vue/src/createAngularJsAdapter.ts index b28ee95d33..d1806e84b5 100644 --- a/plugins/CoreHome/vue/src/createAngularJsAdapter.ts +++ b/plugins/CoreHome/vue/src/createAngularJsAdapter.ts @@ -31,9 +31,11 @@ type AdapterFunction = ( type EventAdapterFunction = ( $event: any, // eslint-disable-line + vm: ComponentPublicInstance, scope: ng.IScope, element: ng.IAugmentedJQuery, attrs: ng.IAttributes, + otherController: ng.IControllerService, ...injected: InjectTypes, ) => R; @@ -42,6 +44,7 @@ type PostCreateFunction = ( scope: ng.IScope, element: ng.IAugmentedJQuery, attrs: ng.IAttributes, + otherController: ng.IControllerService, ...injected: InjectTypes, ) => R; @@ -63,6 +66,7 @@ function toAngularJsCamelCase(arg: string): string { export default function createAngularJsAdapter(options: { component: ComponentType, + require?: string, scope?: ScopeMapping, directiveName: string, events?: EventMapping, @@ -75,6 +79,7 @@ export default function createAngularJsAdapter(options: { }): ng.IDirectiveFactory { const { component, + require, scope = {}, events = {}, $inject, @@ -104,6 +109,7 @@ export default function createAngularJsAdapter(options: { function angularJsAdapter(...injectedServices: InjectTypes) { const adapter: ng.IDirective = { restrict, + require, scope: noScope ? undefined : angularJsScope, compile: function angularJsAdapterCompile() { return { @@ -111,6 +117,7 @@ export default function createAngularJsAdapter(options: { ngScope: ng.IScope, ngElement: ng.IAugmentedJQuery, ngAttrs: ng.IAttributes, + ngController: ng.IControllerService, ) { const clone = transclude ? ngElement.find(`[ng-transclude][counter=${currentTranscludeCounter}]`) : null; @@ -173,7 +180,15 @@ export default function createAngularJsAdapter(options: { } if (events[name]) { - events[name]($event, ngScope, ngElement, ngAttrs, ...injectedServices); + events[name]( + $event, + this, + ngScope, + ngElement, + ngAttrs, + ngController, + ...injectedServices, + ); } }, }, @@ -213,7 +228,7 @@ export default function createAngularJsAdapter(options: { } if (postCreate) { - postCreate(vm, ngScope, ngElement, ngAttrs, ...injectedServices); + postCreate(vm, ngScope, ngElement, ngAttrs, ngController, ...injectedServices); } ngElement.on('$destroy', () => { diff --git a/plugins/CoreHome/vue/src/debounce.ts b/plugins/CoreHome/vue/src/debounce.ts new file mode 100644 index 0000000000..b92fe93a62 --- /dev/null +++ b/plugins/CoreHome/vue/src/debounce.ts @@ -0,0 +1,19 @@ +interface Callable { + (...args: unknown[]): void; +} + +const DEFAULT_DEBOUNCE_DELAY = 300; + +export default function debounce(fn: F, delayInMs = DEFAULT_DEBOUNCE_DELAY): F { + let timeout: ReturnType; + + return (...args: Parameters) => { + if (timeout) { + clearTimeout(timeout); + } + + timeout = setTimeout(() => { + fn(...args); + }, delayInMs); + }; +} diff --git a/plugins/CoreHome/vue/src/index.ts b/plugins/CoreHome/vue/src/index.ts index baaada6b9a..aade352c11 100644 --- a/plugins/CoreHome/vue/src/index.ts +++ b/plugins/CoreHome/vue/src/index.ts @@ -24,11 +24,14 @@ import './MatomoDialog/MatomoDialog.adapter'; import './EnrichedHeadline/EnrichedHeadline.adapter'; import './ContentBlock/ContentBlock.adapter'; import './Comparisons/Comparisons.adapter'; -import './Menudropdown/Menudropdown.adapter'; +import './MenuDropdown/MenuDropdown.adapter'; import './DatePicker/DatePicker.adapter'; import './DateRangePicker/DateRangePicker.adapter'; import './PeriodDatePicker/PeriodDatePicker.adapter'; +import './SiteSelector/SiteSelector.adapter'; +import './QuickAccess/QuickAccess.adapter'; +export { default as debounce } from './debounce'; export { default as createAngularJsAdapter } from './createAngularJsAdapter'; export { default as activityIndicatorAdapter } from './ActivityIndicator/ActivityIndicator.adapter'; export { default as ActivityIndicator } from './ActivityIndicator/ActivityIndicator.vue'; @@ -48,8 +51,10 @@ export { default as ExpandOnHover } from './ExpandOnHover/ExpandOnHover'; export { default as EnrichedHeadline } from './EnrichedHeadline/EnrichedHeadline.vue'; export { default as ContentBlock } from './ContentBlock/ContentBlock.vue'; export { default as Comparisons } from './Comparisons/Comparisons.vue'; -export { default as Menudropdown } from './Menudropdown/Menudropdown.vue'; +export { default as MenuDropdown } from './MenuDropdown/MenuDropdown.vue'; export { default as DatePicker } from './DatePicker/DatePicker.vue'; export { default as DateRangePicker } from './DateRangePicker/DateRangePicker.vue'; export { default as PeriodDatePicker } from './PeriodDatePicker/PeriodDatePicker.vue'; export * from './Notification'; +export { default as SiteSelector } from './SiteSelector/SiteSelector.vue'; +export { default as QuickAccess } from './QuickAccess/QuickAccess.vue'; -- cgit v1.2.3