diff options
Diffstat (limited to 'settings/js/admin.js')
-rw-r--r-- | settings/js/admin.js | 90 |
1 files changed, 56 insertions, 34 deletions
diff --git a/settings/js/admin.js b/settings/js/admin.js index 56dc1b98716..d38c770a28a 100644 --- a/settings/js/admin.js +++ b/settings/js/admin.js @@ -1,38 +1,60 @@ var SharingGroupList = { - applyMultipleSelect: function(element) { - var checked = []; - if ($(element).hasClass('groupsselect')) { - if (element.data('userGroups')) { - checked = element.data('userGroups'); - } - var checkHandeler = function(group) { - $.post(OC.filePath('settings', 'ajax', 'excludegroups.php'), - {changedGroup: group, selectedGroups: JSON.stringify(checked)}, - function() {}); - }; - - - var addGroup = function(select, group) { - $(this).each(function(index, element) { - if ($(element).find('option[value="' + group + '"]').length === 0 && - select.data('msid') !== $(element).data('msid')) { - $(element).append('<option value="' + escapeHTML(group) + '">' + - escapeHTML(group) + '</option>'); + setupGroupsSelect: function($elements) { + if ($elements.length > 0) { + // note: settings are saved through a "change" event registered + // on all input fields + $elements.select2({ + placeholder: t('core', 'Groups'), + allowClear: true, + multiple: true, + ajax: { + url: OC.generateUrl('/settings/ajax/grouplist'), + dataType: 'json', + quietMillis: 100, + data: function (term) { + return { + pattern: term, //search term + }; + }, + results: 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}); + }); + + return {results: results}; + } else { + //FIXME add error handling + } } - }); - }; - - var label = null; - element.multiSelect({ - createCallback: addGroup, - createText: label, - selectedFirst: true, - checked: checked, - oncheck: checkHandeler, - onuncheck: checkHandeler, - minWidth: 100 + }, + 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 element.displayname; + }, + formatSelection: function (element) { + return element.displayname; + } }); - } } }; @@ -57,8 +79,8 @@ $(document).ready(function(){ } - $('select#excludedGroups[multiple]').each(function (index, element) { - SharingGroupList.applyMultipleSelect($(element)); + $('#excludedGroups').each(function (index, element) { + SharingGroupList.setupGroupsSelect($(element)); }); |