[Pkg-owncloud-commits] [owncloud] 110/258: Add select2 cache for complete group list

David Prévot taffit at moszumanska.debian.org
Sat Oct 11 17:22:26 UTC 2014


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository owncloud.

commit c16c680e3218cde36ddb7cc46508c92d35241a8e
Author: Vincent Petry <pvince81 at owncloud.com>
Date:   Thu Sep 11 11:12:44 2014 +0200

    Add select2 cache for complete group list
    
    To avoid making a server request every time the dropdown opens, the
    whole list of groups are cached (from the last request):
    
    Whenever the user types in a search term it will still send server
    requests.
---
 settings/js/settings.js | 62 +++++++++++++++++++++++++++++++------------------
 1 file changed, 39 insertions(+), 23 deletions(-)

diff --git a/settings/js/settings.js b/settings/js/settings.js
index 6e44c47..13c56a8 100644
--- a/settings/js/settings.js
+++ b/settings/js/settings.js
@@ -5,6 +5,9 @@
  */
 OC.Settings = OC.Settings || {};
 OC.Settings = _.extend(OC.Settings, {
+
+	_cachedGroups: null,
+
 	/**
 	 * Setup selection box for group selection.
 	 *
@@ -16,6 +19,7 @@ OC.Settings = _.extend(OC.Settings, {
 	 * @param [extraOptions] extra options hash to pass to select2
 	 */
 	setupGroupsSelect: function($elements, extraOptions) {
+		var self = this;
 		if ($elements.length > 0) {
 			// note: settings are saved through a "change" event registered
 			// on all input fields
@@ -24,33 +28,45 @@ OC.Settings = _.extend(OC.Settings, {
 				allowClear: true,
 				multiple: true,
 				separator: '|',
-				ajax: {
-					url: OC.generateUrl('/settings/ajax/grouplist'),
-					dataType: 'json',
-					quietMillis: 100,
-					data: function (term) {
-						return {
-							pattern: term, //search term
+				query: _.debounce(function(query) {
+					var queryData = {};
+					if (self._cachedGroups && query.term === '') {
+						query.callback({results: self._cachedGroups});
+						return;
+					}
+					if (query.term !== '') {
+						queryData = {
+							pattern: query.term,
+							filterGroups: 1
 						};
-					},
-					results: function (data) {
-						if (data.status === "success") {
-							var results = [];
+					}
+					$.ajax({
+						url: OC.generateUrl('/settings/ajax/grouplist'),
+						data: queryData,
+						dataType: 'json',
+						success: function(data) {
+							if (data.status === "success") {
+								var results = [];
 
-							// add groups
-							$.each(data.data.adminGroups, function(i, group) {
-								results.push({id:group.id, displayname:group.name});
-							});
-							$.each(data.data.groups, function(i, group) {
-								results.push({id:group.id, displayname:group.name});
-							});
+								// add groups
+								$.each(data.data.adminGroups, function(i, group) {
+									results.push({id:group.id, displayname:group.name});
+								});
+								$.each(data.data.groups, function(i, group) {
+									results.push({id:group.id, displayname:group.name});
+								});
 
-							return {results: results};
-						} else {
-							//FIXME add error handling
+								if (query.term === '') {
+									// cache full list
+									self._cachedGroups = results;
+								}
+								query.callback({results: results});
+							} else {
+								//FIXME add error handling
+							}
 						}
-					}
-				},
+					});
+				}, 100, true),
 				id: function(element) {
 					return element.id;
 				},

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud.git



More information about the Pkg-owncloud-commits mailing list