diff options
author | Lukas Reschke <lukas@owncloud.com> | 2014-09-19 16:50:56 +0200 |
---|---|---|
committer | Lukas Reschke <lukas@owncloud.com> | 2014-09-19 16:50:56 +0200 |
commit | fed81001770236d02c6990ffebc6d9fdd980b5b9 (patch) | |
tree | b58f92fc318bc87c69dfbbafbcdacf9944217d3a /settings/js/settings.js | |
parent | fb033cce980ba58b64eed0cd0882c31021f43df0 (diff) | |
parent | 71776e307f16a43d806ee0fe3142ed1a1c0d7d6f (diff) | |
download | nextcloud-server-fed81001770236d02c6990ffebc6d9fdd980b5b9.tar.gz nextcloud-server-fed81001770236d02c6990ffebc6d9fdd980b5b9.zip |
Merge pull request #10968 from owncloud/admin-groupsselect2
Use select2 for the groups excluded from sharing in admin page
Diffstat (limited to 'settings/js/settings.js')
-rw-r--r-- | settings/js/settings.js | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/settings/js/settings.js b/settings/js/settings.js new file mode 100644 index 00000000000..13c56a8f53a --- /dev/null +++ b/settings/js/settings.js @@ -0,0 +1,98 @@ +/** + * Copyright (c) 2014, Vincent Petry <pvince81@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or later. + * See the COPYING-README file. + */ +OC.Settings = OC.Settings || {}; +OC.Settings = _.extend(OC.Settings, { + + _cachedGroups: null, + + /** + * Setup selection box for group selection. + * + * Values need to be separated by a pipe "|" character. + * (mostly because a comma is more likely to be used + * for groups) + * + * @param $elements jQuery element (hidden input) to setup select2 on + * @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 + $elements.select2(_.extend({ + placeholder: t('core', 'Groups'), + allowClear: true, + multiple: true, + separator: '|', + 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 + }; + } + $.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}); + }); + + 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; + }, + initSelection: function(element, callback) { + var selection = + _.map(($(element).val() || []).split('|').sort(), + function(groupName) { + return { + id: groupName, + displayname: groupName + }; + }); + callback(selection); + }, + formatResult: function (element) { + return escapeHTML(element.displayname); + }, + formatSelection: function (element) { + return escapeHTML(element.displayname); + }, + escapeMarkup: function(m) { + // prevent double markup escape + return m; + } + }, extraOptions || {})); + } + } +}); + |