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

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Steur <thomas.steur@googlemail.com>2014-02-16 05:55:58 +0400
committerThomas Steur <thomas.steur@googlemail.com>2014-02-25 04:14:45 +0400
commitbb99f42e0831b9f576885cd2d261e24e91c4cdd1 (patch)
treee0350ae258516dfa002aa4f47a6f870e57978079
parentb97f6f13a2bc6656bdf397fa2c3222a34413b9ff (diff)
some more angular best practices
-rw-r--r--plugins/CoreAdminHome/templates/trackingCodeGenerator.twig12
-rw-r--r--plugins/CoreHome/CoreHome.php23
-rw-r--r--plugins/CoreHome/javascripts/directives/autocompleteMatched.js31
-rw-r--r--plugins/CoreHome/javascripts/directives/directives.js60
-rw-r--r--plugins/CoreHome/javascripts/directives/focusAnywhereButHere.js33
-rw-r--r--plugins/CoreHome/javascripts/directives/ignoreClick.js14
-rw-r--r--plugins/CoreHome/javascripts/filters/filters.js5
-rw-r--r--plugins/CoreHome/javascripts/filters/htmldecode.js12
-rw-r--r--plugins/CoreHome/javascripts/filters/translate.js12
-rw-r--r--plugins/CoreHome/javascripts/piwikApp.js7
-rw-r--r--plugins/CoreHome/javascripts/services/PiwikApi.js (renamed from plugins/CoreHome/javascripts/providers/PiwikApi.js)19
-rw-r--r--plugins/CoreHome/javascripts/services/piwik.js (renamed from plugins/CoreHome/javascripts/providers/piwik.js)3
-rw-r--r--plugins/CoreHome/javascripts/services/services.js8
-rw-r--r--plugins/CoreHome/javascripts/siteselector/directives.js63
-rw-r--r--plugins/CoreHome/javascripts/siteselector/siteSelectorController.js (renamed from plugins/CoreHome/javascripts/siteselector/controller.js)1
-rw-r--r--plugins/CoreHome/javascripts/siteselector/siteSelectorDirectives.js63
-rw-r--r--plugins/CoreHome/javascripts/siteselector/siteSelectorModel.js (renamed from plugins/CoreHome/javascripts/siteselector/providers.js)41
-rw-r--r--plugins/CoreHome/javascripts/siteselector/siteSelectorPartial.html (renamed from plugins/CoreHome/javascripts/siteselector/partial.html)20
-rw-r--r--plugins/UsersManager/templates/index.twig6
-rw-r--r--plugins/UsersManager/templates/userSettings.twig4
-rw-r--r--plugins/Zeitgeist/stylesheets/ui/_siteSelect.less12
21 files changed, 270 insertions, 179 deletions
diff --git a/plugins/CoreAdminHome/templates/trackingCodeGenerator.twig b/plugins/CoreAdminHome/templates/trackingCodeGenerator.twig
index a70f9c40e7..1aadf4a0d2 100644
--- a/plugins/CoreAdminHome/templates/trackingCodeGenerator.twig
+++ b/plugins/CoreAdminHome/templates/trackingCodeGenerator.twig
@@ -30,10 +30,10 @@
<div piwik-site-selector
siteid="{{ idSite }}"
sitename="{{ defaultReportSiteName }}"
- showallsitesitem="false"
- switchsiteonselect="false"
+ show-all-sites-item="false"
+ switch-site-on-select="false"
id="js-tracker-website"
- showselectedsite="true"></div>
+ show-selected-site="true"></div>
<br/><br/><br/>
</div>
@@ -202,10 +202,10 @@
<div piwik-site-selector
siteid="{{ idSite }}"
sitename="{{ defaultReportSiteName }}"
- showallsitesitem="false"
- switchsiteonselect="false"
id="image-tracker-website"
- showselectedsite="true"></div>
+ show-all-sites-item="false"
+ switch-site-on-select="false"
+ show-selected-site="true"></div>
<br/><br/><br/>
</div>
diff --git a/plugins/CoreHome/CoreHome.php b/plugins/CoreHome/CoreHome.php
index 6784cf7a7a..f751a43e37 100644
--- a/plugins/CoreHome/CoreHome.php
+++ b/plugins/CoreHome/CoreHome.php
@@ -90,14 +90,25 @@ class CoreHome extends \Piwik\Plugin
$jsFiles[] = "plugins/CoreHome/javascripts/color_manager.js";
$jsFiles[] = "plugins/CoreHome/javascripts/notification.js";
$jsFiles[] = "plugins/CoreHome/javascripts/notification_parser.js";
- $jsFiles[] = "plugins/CoreHome/javascripts/piwikApp.js";
+
+ $jsFiles[] = "plugins/CoreHome/javascripts/services/services.js";
+ $jsFiles[] = "plugins/CoreHome/javascripts/services/piwik.js";
+ $jsFiles[] = "plugins/CoreHome/javascripts/services/piwikApi.js";
+
$jsFiles[] = "plugins/CoreHome/javascripts/filters/filters.js";
- $jsFiles[] = "plugins/CoreHome/javascripts/providers/PiwikApi.js";
- $jsFiles[] = "plugins/CoreHome/javascripts/providers/piwik.js";
+ $jsFiles[] = "plugins/CoreHome/javascripts/filters/htmldecode.js";
+ $jsFiles[] = "plugins/CoreHome/javascripts/filters/translate.js";
+
$jsFiles[] = "plugins/CoreHome/javascripts/directives/directives.js";
- $jsFiles[] = "plugins/CoreHome/javascripts/siteselector/providers.js";
- $jsFiles[] = "plugins/CoreHome/javascripts/siteselector/controller.js";
- $jsFiles[] = "plugins/CoreHome/javascripts/siteselector/directives.js";
+ $jsFiles[] = "plugins/CoreHome/javascripts/directives/autocompleteMatched.js";
+ $jsFiles[] = "plugins/CoreHome/javascripts/directives/focusAnywhereButHere.js";
+ $jsFiles[] = "plugins/CoreHome/javascripts/directives/ignoreClick.js";
+
+ $jsFiles[] = "plugins/CoreHome/javascripts/piwikApp.js";
+
+ $jsFiles[] = "plugins/CoreHome/javascripts/siteselector/siteSelectorModel.js";
+ $jsFiles[] = "plugins/CoreHome/javascripts/siteselector/siteSelectorController.js";
+ $jsFiles[] = "plugins/CoreHome/javascripts/siteselector/siteSelectorDirectives.js";
}
public function getClientSideTranslationKeys(&$translationKeys)
diff --git a/plugins/CoreHome/javascripts/directives/autocompleteMatched.js b/plugins/CoreHome/javascripts/directives/autocompleteMatched.js
new file mode 100644
index 0000000000..3e17c897f9
--- /dev/null
+++ b/plugins/CoreHome/javascripts/directives/autocompleteMatched.js
@@ -0,0 +1,31 @@
+/*!
+ * Piwik - Web Analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+piwikAppDirectives.directive('piwikAutocompleteMatched', function() {
+ return function(scope, element, attrs) {
+ var searchTerm;
+
+ scope.$watch(attrs.piwikAutocompleteMatched, function(value) {
+ searchTerm = value;
+ updateText();
+ });
+
+ function updateText () {
+ if (!searchTerm || !element) {
+ return;
+ }
+
+ var content = element.text();
+ var startTerm = content.toLowerCase().indexOf(searchTerm);
+ if (-1 !== startTerm) {
+ var word = content.substr(startTerm, searchTerm.length);
+ content = content.replace(word, '<span class="autocompleteMatched">' + word + '</span>');
+ element.html(content);
+ };
+ }
+ };
+}); \ No newline at end of file
diff --git a/plugins/CoreHome/javascripts/directives/directives.js b/plugins/CoreHome/javascripts/directives/directives.js
index 0c6201f753..0107162d9e 100644
--- a/plugins/CoreHome/javascripts/directives/directives.js
+++ b/plugins/CoreHome/javascripts/directives/directives.js
@@ -5,62 +5,4 @@
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
-piwikApp.directive('piwikFocusAnywhereButHere', function($document){
- return {
- restrict: 'A',
- link: function(scope, element, attr, ctrl) {
-
- function onClickOutsideElement (event) {
- if (element.has(event.target).length === 0) {
- scope.$apply(attr.piwikFocusAnywhereButHere);
- }
- }
-
- function onEscapeHandler (event) {
- if (event.which === 27) {
- scope.$apply(attr.piwikFocusAnywhereButHere);
- }
- }
-
- $document.on('keyup', onEscapeHandler);
- $document.on('mouseup', onClickOutsideElement);
- scope.$on('$destroy', function() {
- $document.off('mouseup', onClickOutsideElement);
- $document.off('keyup', onEscapeHandler);
- });
- }
- }
-});
-
-piwikApp.directive('piwikIgnoreClick', function() {
- return function(scope, element, attrs) {
- $(element).click(function(event) {
- event.preventDefault();
- });
- }
-})
-
-piwikApp.directive('piwikAutocompleteMatched', function() {
- return function(scope, element, attrs) {
- var searchTerm;
-
- scope.$watch(attrs.piwikAutocompleteMatched, function(value) {
- searchTerm = value;
- updateText();
- });
-
- function updateText () {
- if (!searchTerm || !element) {
- return;
- }
-
- var content = element.text();
- var startTerm = content.toLowerCase().indexOf(searchTerm);
- if (-1 !== startTerm) {
- var word = content.substr(startTerm, searchTerm.length);
- content = content.replace(word, '<span class="autocompleteMatched">' + word + '</span>');
- element.html(content);
- };
- }
- };
-}); \ No newline at end of file
+var piwikAppDirectives = angular.module('piwikApp.directive', []);
diff --git a/plugins/CoreHome/javascripts/directives/focusAnywhereButHere.js b/plugins/CoreHome/javascripts/directives/focusAnywhereButHere.js
new file mode 100644
index 0000000000..34dac376d0
--- /dev/null
+++ b/plugins/CoreHome/javascripts/directives/focusAnywhereButHere.js
@@ -0,0 +1,33 @@
+/*!
+ * Piwik - Web Analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+piwikAppDirectives.directive('piwikFocusAnywhereButHere', function($document){
+ return {
+ restrict: 'A',
+ link: function(scope, element, attr, ctrl) {
+
+ function onClickOutsideElement (event) {
+ if (element.has(event.target).length === 0) {
+ scope.$apply(attr.piwikFocusAnywhereButHere);
+ }
+ }
+
+ function onEscapeHandler (event) {
+ if (event.which === 27) {
+ scope.$apply(attr.piwikFocusAnywhereButHere);
+ }
+ }
+
+ $document.on('keyup', onEscapeHandler);
+ $document.on('mouseup', onClickOutsideElement);
+ scope.$on('$destroy', function() {
+ $document.off('mouseup', onClickOutsideElement);
+ $document.off('keyup', onEscapeHandler);
+ });
+ }
+ }
+});
diff --git a/plugins/CoreHome/javascripts/directives/ignoreClick.js b/plugins/CoreHome/javascripts/directives/ignoreClick.js
new file mode 100644
index 0000000000..1f2148c13c
--- /dev/null
+++ b/plugins/CoreHome/javascripts/directives/ignoreClick.js
@@ -0,0 +1,14 @@
+/*!
+ * Piwik - Web Analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+piwikAppDirectives.directive('piwikIgnoreClick', function() {
+ return function(scope, element, attrs) {
+ $(element).click(function(event) {
+ event.preventDefault();
+ });
+ }
+}); \ No newline at end of file
diff --git a/plugins/CoreHome/javascripts/filters/filters.js b/plugins/CoreHome/javascripts/filters/filters.js
index f4ebc26774..2a2e1359c5 100644
--- a/plugins/CoreHome/javascripts/filters/filters.js
+++ b/plugins/CoreHome/javascripts/filters/filters.js
@@ -4,14 +4,15 @@
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
+var piwikAppFilters = angular.module('piwikApp.filter', []);
-piwikApp.filter('translate', function() {
+piwikAppFilters.filter('translate', function() {
return function(key) {
return _pk_translate(key);
}
});
-piwikApp.filter('htmldecode', function() {
+piwikAppFilters.filter('htmldecode', function() {
return function(theString) {
return piwikHelper.htmlDecode(theString);
}
diff --git a/plugins/CoreHome/javascripts/filters/htmldecode.js b/plugins/CoreHome/javascripts/filters/htmldecode.js
new file mode 100644
index 0000000000..0bd1215064
--- /dev/null
+++ b/plugins/CoreHome/javascripts/filters/htmldecode.js
@@ -0,0 +1,12 @@
+/*!
+ * Piwik - Web Analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+piwikAppFilters.filter('htmldecode', function() {
+ return function(theString) {
+ return piwikHelper.htmlDecode(theString);
+ }
+});
diff --git a/plugins/CoreHome/javascripts/filters/translate.js b/plugins/CoreHome/javascripts/filters/translate.js
new file mode 100644
index 0000000000..fc3ba3551f
--- /dev/null
+++ b/plugins/CoreHome/javascripts/filters/translate.js
@@ -0,0 +1,12 @@
+/*!
+ * Piwik - Web Analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+piwikAppFilters.filter('translate', function() {
+ return function(key) {
+ return _pk_translate(key);
+ }
+}); \ No newline at end of file
diff --git a/plugins/CoreHome/javascripts/piwikApp.js b/plugins/CoreHome/javascripts/piwikApp.js
index 57376fb346..42d8cc8981 100644
--- a/plugins/CoreHome/javascripts/piwikApp.js
+++ b/plugins/CoreHome/javascripts/piwikApp.js
@@ -1,2 +1,7 @@
-var piwikApp = angular.module('piwikApp', ['ngSanitize']);
+var piwikApp = angular.module('piwikApp', [
+ 'ngSanitize',
+ 'piwikApp.service',
+ 'piwikApp.directive',
+ 'piwikApp.filter'
+]);
var customApp = angular.module('app', []);
diff --git a/plugins/CoreHome/javascripts/providers/PiwikApi.js b/plugins/CoreHome/javascripts/services/PiwikApi.js
index 77a6d4db50..de96f82b09 100644
--- a/plugins/CoreHome/javascripts/providers/PiwikApi.js
+++ b/plugins/CoreHome/javascripts/services/PiwikApi.js
@@ -5,12 +5,13 @@
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
-piwikApp.factory('piwikApi', function ($http, $q, $rootScope, piwik, $window) {
+piwikAppServices.factory('piwikApi', function ($http, $q, $rootScope, piwik, $window) {
var url = 'index.php';
var format = 'json';
var getParams = {};
var postParams = {};
+ var requestHandle = null;
var piwikApi = {};
@@ -39,13 +40,14 @@ piwikApp.factory('piwikApi', function ($http, $q, $rootScope, piwik, $window) {
*/
function send (cacheResult) {
- var deferred = $q.defer();
+ var deferred = requestHandle = $q.defer();
var onError = function (message) {
deferred.reject(message);
+ requestHandle = null;
};
- var onSuccess = function (response) {
+ var onSuccess = function (response) {
if (response && response.result == 'error') {
if (response.message) {
@@ -66,6 +68,7 @@ piwikApp.factory('piwikApi', function ($http, $q, $rootScope, piwik, $window) {
} else {
deferred.resolve(response);
}
+ requestHandle = null;
};
var headers = {'Content-Type': 'application/x-www-form-urlencoded'};
@@ -142,6 +145,16 @@ piwikApp.factory('piwikApi', function ($http, $q, $rootScope, piwik, $window) {
return getParamsToMixin;
};
+ piwikApi.abort = function () {
+ getParams = {};
+ postParams = {};
+
+ if (requestHandle) {
+ requestHandle.resolve();
+ requestHandle = null;
+ }
+ };
+
/**
* Make a reading API request. Response is cached for fast future requests
* @param getParams
diff --git a/plugins/CoreHome/javascripts/providers/piwik.js b/plugins/CoreHome/javascripts/services/piwik.js
index a1b84be81b..e3bed16ada 100644
--- a/plugins/CoreHome/javascripts/providers/piwik.js
+++ b/plugins/CoreHome/javascripts/services/piwik.js
@@ -5,8 +5,9 @@
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
+var piwikAppServices = angular.module('piwikApp.service', []);
-piwikApp.service('piwik', function () {
+piwikAppServices.service('piwik', function () {
piwik.helper = piwikHelper;
piwik.broadcast = broadcast;
diff --git a/plugins/CoreHome/javascripts/services/services.js b/plugins/CoreHome/javascripts/services/services.js
new file mode 100644
index 0000000000..f223aa3ddc
--- /dev/null
+++ b/plugins/CoreHome/javascripts/services/services.js
@@ -0,0 +1,8 @@
+/*!
+ * Piwik - Web Analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+var piwikAppServices = angular.module('piwikApp.service', []);
diff --git a/plugins/CoreHome/javascripts/siteselector/directives.js b/plugins/CoreHome/javascripts/siteselector/directives.js
deleted file mode 100644
index da813538df..0000000000
--- a/plugins/CoreHome/javascripts/siteselector/directives.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/*!
- * Piwik - Web Analytics
- *
- * @link http://piwik.org
- * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */
-
-piwikApp.directive('piwikSiteSelector', function($document, piwik, $filter){
-
- return {
- restrict: 'A',
- // why not directly use camel case and for example site-name? If I remember correct this does not work
- // in all of or required IE versions. Alternative can be to define a namespace attribute and prefix all
- // attributes with piwik, eg. piwik-site-name. Again: Not sure if I remember correct, will have a look
- // later
- scope: {
- showAutocomplete: '=showautocomplete',
- showSelectedSite: '=showselectedsite',
- showAllSitesItem: '=showallsitesitem',
- switchSiteOnSelect: '=switchsiteonselect',
- maxSitenameWidth: '=maxsitenamewidth',
- inputName: '@inputname',
- allSitesText: '@allsitestext',
- allSitesLocation: '@allsiteslocation'
- },
- templateUrl: 'plugins/CoreHome/javascripts/siteselector/partial.html',
- controller: 'SiteSelectorController',
- compile: function (element, attrs) {
- attrs.$addClass('sites_autocomplete');
-
- // define default values
- if (!attrs.allsiteslocation) attrs.allsiteslocation = 'bottom';
- if (!attrs.allsitestext) attrs.allsitestext = $filter('translate')('General_MultiSitesSummary');
- if (!attrs.siteid) attrs.siteid = '';
- if (!attrs.sitename) attrs.sitename = '';
- if (!attrs.inputname) attrs.inputname = '';
- if (!attrs.showautocomplete) attrs.showautocomplete = 'true';
- if (!attrs.showselectedsite) attrs.showselectedsite = 'false';
- if (!attrs.switchsiteonselect) attrs.switchsiteonselect = 'true';
- if (!attrs.showallsitesitem) attrs.showallsitesitem = 'true';
- if (!attrs.maxSitenameWidth) attrs.maxsitenamewidth = '130'; // can be removed?
-
- return function (scope, element, attrs) {
-
- // selectedSite.id|.name is hard-coded but actually the directive should not know about this
- scope.selectedSite.id = attrs.siteid;
- scope.selectedSite.name = attrs.sitename;
-
- scope.$watch('selectedSite.id', function (newValue, oldValue, scope) {
- if (newValue != oldValue) {
- element.attr('siteid', newValue);
- element.trigger('change', scope.selectedSite);
- }
- });
-
- /** use observe to monitor attribute changes
- attrs.$observe('maxsitenamewidth', function(val) {
- // for instance trigger a function or whatever
- }) */
- }
- }
- }
-}); \ No newline at end of file
diff --git a/plugins/CoreHome/javascripts/siteselector/controller.js b/plugins/CoreHome/javascripts/siteselector/siteSelectorController.js
index a2efa8ec91..7e43787c1c 100644
--- a/plugins/CoreHome/javascripts/siteselector/controller.js
+++ b/plugins/CoreHome/javascripts/siteselector/siteSelectorController.js
@@ -8,7 +8,6 @@
piwikApp.controller('SiteSelectorController', function($scope, siteSelectorModel, piwik){
$scope.model = siteSelectorModel;
- $scope.model.loadInitialSites();
$scope.selectedSite = {id: '', name: ''};
$scope.activeSiteId = piwik.idSite;
diff --git a/plugins/CoreHome/javascripts/siteselector/siteSelectorDirectives.js b/plugins/CoreHome/javascripts/siteselector/siteSelectorDirectives.js
new file mode 100644
index 0000000000..cf317d84b9
--- /dev/null
+++ b/plugins/CoreHome/javascripts/siteselector/siteSelectorDirectives.js
@@ -0,0 +1,63 @@
+/*!
+ * Piwik - Web Analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+piwikApp.directive('piwikSiteSelector', function($document, piwik, $filter){
+ var defaults = {
+ 'name': '',
+ 'siteid': piwik.idSite,
+ 'sitename': piwik.siteName,
+ 'all-sites-location': 'bottom',
+ 'all-sites-text': $filter('translate')('General_MultiSitesSummary'),
+ 'show-selected-site': 'false',
+ 'show-all-sites-item': 'true',
+ 'switch-site-on-select': 'true',
+ };
+
+ return {
+ restrict: 'A',
+ scope: {
+ showSelectedSite: '=',
+ showAllSitesItem: '=',
+ switchSiteOnSelect: '=',
+ inputName: '@name',
+ allSitesText: '@',
+ allSitesLocation: '@'
+ },
+ templateUrl: 'plugins/CoreHome/javascripts/siteselector/siteSelectorPartial.html',
+ controller: 'SiteSelectorController',
+ compile: function (element, attrs) {
+ attrs.$addClass('sites_autocomplete');
+
+ for (var index in defaults) {
+ if (!attrs[index]) { attrs[index] = defaults[index]; }
+ }
+
+ return function (scope, element, attrs) {
+
+ // selectedSite.id|.name + model is hard-coded but actually the directive should not know about this
+ scope.selectedSite.id = attrs.siteid;
+ scope.selectedSite.name = attrs.sitename;
+
+ if (!attrs.siteid || !attrs.sitename) {
+ scope.model.loadInitialSites();
+ }
+
+ scope.$watch('selectedSite.id', function (newValue, oldValue, scope) {
+ if (newValue != oldValue) {
+ element.attr('siteid', newValue);
+ element.trigger('change', scope.selectedSite);
+ }
+ });
+
+ /** use observe to monitor attribute changes
+ attrs.$observe('maxsitenamewidth', function(val) {
+ // for instance trigger a function or whatever
+ }) */
+ }
+ }
+ }
+}); \ No newline at end of file
diff --git a/plugins/CoreHome/javascripts/siteselector/providers.js b/plugins/CoreHome/javascripts/siteselector/siteSelectorModel.js
index f936112c1d..109b298bf7 100644
--- a/plugins/CoreHome/javascripts/siteselector/providers.js
+++ b/plugins/CoreHome/javascripts/siteselector/siteSelectorModel.js
@@ -1,6 +1,5 @@
piwikApp.factory('siteSelectorModel', function (piwikApi, $filter) {
- var filterLimit = 10;
var model = {};
model.sites = [];
@@ -8,6 +7,24 @@ piwikApp.factory('siteSelectorModel', function (piwikApi, $filter) {
model.isLoading = false;
model.firstSiteName = '';
+ function fetchAndUpdate(params)
+ {
+ if (model.isLoading) {
+ piwikApi.abort();
+ }
+
+ model.isLoading = true;
+
+ params.filter_limit = 10;
+ params.showColumns = 'name,idsite';
+
+ piwikApi.fetch(params).then(function (response) {
+ model.updateWebsitesList(response);
+ }).finally(function () {
+ model.isLoading = false;
+ });
+ }
+
model.updateWebsitesList = function (websites) {
if (!websites || !websites.length) {
@@ -33,29 +50,17 @@ piwikApp.factory('siteSelectorModel', function (piwikApi, $filter) {
model.loadInitialSites();
return;
}
- model.isLoading = true;
- piwikApi.fetch({
+
+ fetchAndUpdate({
method: 'SitesManager.getPatternMatchSites',
- filter_limit: filterLimit,
pattern: term
- }).then(function (response) {
- model.updateWebsitesList(response);
- }).finally(function () {
- model.isLoading = false;
});
};
model.loadInitialSites = function () {
- model.isLoading = true;
- piwikApi.fetch({
- method: 'SitesManager.getSitesWithAtLeastViewAccess',
- filter_limit: filterLimit,
- showColumns: 'name,idsite'
- }).then(function (response) {
- model.updateWebsitesList(response);
- }).finally(function () {
- model.isLoading = false;
- });
+ fetchAndUpdate({
+ method: 'SitesManager.getSitesWithAtLeastViewAccess'
+ })
}
return model;
diff --git a/plugins/CoreHome/javascripts/siteselector/partial.html b/plugins/CoreHome/javascripts/siteselector/siteSelectorPartial.html
index 197cdb293c..a6e6bfc24a 100644
--- a/plugins/CoreHome/javascripts/siteselector/partial.html
+++ b/plugins/CoreHome/javascripts/siteselector/siteSelectorPartial.html
@@ -1,4 +1,4 @@
-<div ng-class="{'sites_autocomplete--dropdown': (model.hasMultipleWebsites || showAllSitesItem)}">
+<div ng-class="{'sites_autocomplete--dropdown': (model.hasMultipleWebsites || showAllSitesItem || !model.sites.length)}">
<div piwik-focus-anywhere-but-here="view.showSitesList=false" class="custom_select">
<script type="text/ng-template" id="siteselector_allsiteslink.html">
@@ -16,19 +16,13 @@
href="javascript:void(0)"
class="custom_select_main_link"
ng-class="{'loading': model.isLoading}">
- <span ng-bind-html="selectedSite.name || (initialSiteName || model.firstSiteName)"></span>
+ <span ng-bind-html="selectedSite.name || model.firstSiteName">?</span>
</a>
<div ng-show="view.showSitesList" class="custom_select_block">
<div ng-if="allSitesLocation=='top' && showAllSitesItem"
ng-include="'siteselector_allsiteslink.html'"></div>
- <div ng-click="switchSite({idsite: 'all', name: allSitesText})"
- ng-if="allSitesLocation=='top' && showAllSitesItem"
- class="custom_select_all">
- <a href="{{ getUrlAllSites() }}" ng-bind-html="allSitesText"></a>
- </div>
-
<div class="custom_select_container">
<ul class="custom_select_ul_list">
<li ng-click="view.showSitesList=false; switchSite(site)"
@@ -37,10 +31,9 @@
<a piwik-ignore-click href="{{ getUrlForSiteId(site.idsite) }}" piwik-autocomplete-matched="view.searchTerm">{{ site.name }}</a>
</li>
</ul>
- <ul ng-show="!model.sites.length" class="ui-autocomplete ui-front ui-menu ui-widget ui-widget-content ui-corner-all siteSelect">
- <li class="ui-menu-item"
- style="float:none;position:static">
- <a class="ui-corner-all" style="float:none;position:static" tabindex="-1">{{ ('SitesManager_NotFound' | translate) + ' ' + view.searchTerm }}</a>
+ <ul ng-show="!model.sites.length && view.searchTerm" class="ui-autocomplete ui-front ui-menu ui-widget ui-widget-content ui-corner-all siteSelect">
+ <li class="ui-menu-item">
+ <a class="ui-corner-all" tabindex="-1">{{ ('SitesManager_NotFound' | translate) + ' ' + view.searchTerm }}</a>
</li>
</ul>
</div>
@@ -48,7 +41,7 @@
<div ng-if="allSitesLocation=='bottom' && showAllSitesItem"
ng-include="'siteselector_allsiteslink.html'"></div>
- <div class="custom_select_search" ng-show="showAutocomplete">
+ <div class="custom_select_search" ng-show="model.hasMultipleWebsites">
<input type="text"
ng-click="view.searchTerm=''"
ng-model="view.searchTerm"
@@ -60,7 +53,6 @@
ng-show="view.searchTerm"
ng-click="view.searchTerm=''; model.loadInitialSites()"
class="reset"
- style="position: relative; top: 4px; left: -44px; cursor: pointer;"
src="plugins/CoreHome/images/reset_search.png"/>
</div>
</div>
diff --git a/plugins/UsersManager/templates/index.twig b/plugins/UsersManager/templates/index.twig
index 3b19bae88c..e0ba163e63 100644
--- a/plugins/UsersManager/templates/index.twig
+++ b/plugins/UsersManager/templates/index.twig
@@ -16,10 +16,10 @@
<div piwik-site-selector
siteid="{{ idSiteSelected }}"
sitename="{{ defaultReportSiteName }}"
- allsitestext="{{ applyAllSitesText|raw }}"
- allsiteslocation="top"
+ all-sites-text="{{ applyAllSitesText|raw }}"
+ all-sites-location="top"
id="usersManagerSiteSelect"
- switchsiteonselect="false"></div>
+ switch-site-on-select="false"></div>
</section>
</div>
diff --git a/plugins/UsersManager/templates/userSettings.twig b/plugins/UsersManager/templates/userSettings.twig
index 9f07412d91..0f086f5f32 100644
--- a/plugins/UsersManager/templates/userSettings.twig
+++ b/plugins/UsersManager/templates/userSettings.twig
@@ -47,8 +47,8 @@
<div piwik-site-selector
siteid="{{ defaultReportIdSite }}"
sitename="{{ defaultReportSiteName }}"
- switchsiteonselect="false"
- showallsitesitem="false"
+ switch-site-on-select="false"
+ show-all-sites-item="false"
showselectedsite="true"
id="defaultReportSiteSelector"></div>
</fieldset>
diff --git a/plugins/Zeitgeist/stylesheets/ui/_siteSelect.less b/plugins/Zeitgeist/stylesheets/ui/_siteSelect.less
index cd6dd28ff5..806a57684e 100644
--- a/plugins/Zeitgeist/stylesheets/ui/_siteSelect.less
+++ b/plugins/Zeitgeist/stylesheets/ui/_siteSelect.less
@@ -126,6 +126,9 @@
color: #454545;
}
+.sites_autocomplete {
+ width: 165px;
+}
.sites_autocomplete .custom_select_search .but {
vertical-align: top;
@@ -143,6 +146,15 @@
padding-left: 12px;
}
+.custom_selector_container .ui-menu-item,
+.custom_selector_container .ui-menu-item a {
+ float:none;position:static
+}
+
+.custom_select_search .reset {
+ position: relative; top: 4px; left: -44px; cursor: pointer;
+}
+
.custom_select_block {
overflow: hidden;
max-width: inherit