diff --git a/CHANGELOG.md b/CHANGELOG.md index b3295b5..6bb5c08 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ * [FIX] Fix issues hitting esc in md editor #257 * [CHANGE] Remove confirm prompt when closing office document #258 * [FIX] Hide spinner only after all running requests have been completed #119 +* [CHANGE] Sort share consumers, allow scrolling #264 ## 3.2.8 **Maintainer**: balloon-team \ @@ -47,28 +48,28 @@ ## 3.2.4 **Maintainer**: balloon-team \ -**Date**: Fri Jun 28 09:41:04 CEST 2019 +**Date**: Fri Jun 28 09:41:04 CEST 2019 * [FIX] Android soft navigation bar overlaps content (action bar) #239 ## 3.2.3 **Maintainer**: balloon-team \ -**Date**: Wed Jun 26 13:45:04 CEST 2019 +**Date**: Wed Jun 26 13:45:04 CEST 2019 * [FIX] Removed css revision from css load url ## 3.2.2 **Maintainer**: balloon-team \ -**Date**: Wed Jun 26 13:45:04 CEST 2019 +**Date**: Wed Jun 26 13:45:04 CEST 2019 Test release ## 3.2.1 **Maintainer**: balloon-team \ -**Date**: Wed Jun 26 12:16:04 CEST 2019 +**Date**: Wed Jun 26 12:16:04 CEST 2019 * [FIX] Two browser reloads are necessary after new release has been deployed #234 * [FIX] Too many assets in precache-manifest #232 @@ -76,7 +77,7 @@ Test release ## 3.2.0 **Maintainer**: balloon-team \ -**Date**: Tue Jun 25 07:41:04 CEST 2019 +**Date**: Tue Jun 25 07:41:04 CEST 2019 * [FIX] Reset view bar when menu is changed #224 * [FIX] Avoid doubled text in file handler chooser #225 @@ -158,7 +159,7 @@ Test release * [FEATURE] Search over event log #143 * [CHANGE] Only display search result after a search occured #198 * [FIX] Use fake password field for external storage to avoid autocomplete #76 -* [CHANGE] alternative tipps icon #70 +* [CHANGE] alternative tipps icon #70 * [FIX] Infinite scroll on event log is truly infinite #214 * [FIX] add burl form url input on new line #216 * [FIX] Typo in search menu #208 diff --git a/src/lib/core.js b/src/lib/core.js index 089d505..a881815 100755 --- a/src/lib/core.js +++ b/src/lib/core.js @@ -5504,9 +5504,14 @@ var balloon = { success: function(data) { $share_name.val(data.name); + data.acl.sort(function(a,b) { + if(a.role.name === b.role.name) return 0; + return a.role.name > b.role.name ? 1 : -1; + }); + for(var i in data.acl) { var consumer = data.acl[i]; - balloon._addShareConsumer(consumer, acl); + balloon._addShareConsumer(consumer, acl, false, false); } balloon.prepareShareWindow(node, acl); @@ -5601,7 +5606,7 @@ var balloon = { role: data.data[0] } - acl = balloon._addShareConsumer(role, acl, true); + acl = balloon._addShareConsumer(role, acl, true, true); } }); @@ -5623,7 +5628,7 @@ var balloon = { role: data.data[0] } - acl = balloon._addShareConsumer(role, acl, true); + acl = balloon._addShareConsumer(role, acl, true, true); } }); } @@ -5631,7 +5636,7 @@ var balloon = { balloon._userAndGroupAutocomplete($share_consumer_search, true, function(item) { selected = true; - balloon._addShareConsumer(item, acl, true); + balloon._addShareConsumer(item, acl, true, true); }); $fs_share_win.find('#fs-share-window-toggle-consumers a').off('click').on('click', function() { @@ -5872,7 +5877,7 @@ var balloon = { * @param Array acl * @return object */ - _addShareConsumer: function(item, acl, scrollToItem) { + _addShareConsumer: function(item, acl, scrollToItem, sort) { var $fs_share_win_consumers = $('#fs-share-window-consumers'); var $fs_share_win_consumers_ul = $fs_share_win_consumers.find('> ul'); @@ -5895,7 +5900,7 @@ var balloon = { var icon = item.type === 'group' ? 'group' : 'person'; var $consumer = $( - '
  • '+ + '
  • '+ ''+ ''+name+''+ '
  • ' @@ -5945,13 +5950,18 @@ var balloon = { $consumer.append($consumer_privilege); - $fs_share_win_consumers_ul.append($consumer); + if(sort) { + balloon._insertToSortedList($fs_share_win_consumers_ul, $consumer, 'name'); + } else { + $fs_share_win_consumers_ul.append($consumer); + } $fs_share_win_consumers.show(); balloon._setToggleConsumersVisibility(acl); if(scrollToItem) { - $fs_share_win_consumers_ul.animate({scrollTop: $fs_share_win_consumers_ul.prop('scrollHeight')}, 250); + var newScrollTop = $consumer.offset().top - $fs_share_win_consumers.offset().top + $fs_share_win_consumers_ul.scrollTop() + $fs_share_win_consumers_ul.animate({scrollTop: newScrollTop}, 250); } $('#fs-share-window').data('kendoBalloonWindow').center(); @@ -5980,6 +5990,56 @@ var balloon = { return acl; }, + _insertToSortedList: function($list, $el, dataAttr) { + var curItems = $list.children().map(function() { + var $this = $(this); + return {string: $this.data(dataAttr), id: $this.attr('id')}; + }); + + var position = findInsertPosition($el.data(dataAttr), curItems); + + if(position === 0) { + $list.prepend($el); + } else if(position >= curItems.length) { + $list.append($el); + } else { + $el.insertAfter('#' + curItems[position-1].id); + } + + function findInsertPosition(value, array, startVal, endVal) { + var length = array.length; + var start = typeof(startVal) != 'undefined' ? startVal : 0; + var end = typeof(endVal) != 'undefined' ? endVal : length - 1; + var m = start + Math.floor((end - start)/2); + + if(length == 0){ + return 0; + } + + if(value > array[end].string){ + return end + 1; + } + + if(value < array[start].string) { + return start; + } + + if(start >= end){ + return end; + } + + if(value < array[m].string) { + return findInsertPosition(value, array, start, m - 1); + } + + if(value > array[m].string) { + return findInsertPosition(value, array, m + 1, end); + } + + return m+1; + } + }, + /** * Remove a share consumer from list * diff --git a/src/themes/default/scss/modals/_fsShare.scss b/src/themes/default/scss/modals/_fsShare.scss index 6c25bbb..d959fab 100644 --- a/src/themes/default/scss/modals/_fsShare.scss +++ b/src/themes/default/scss/modals/_fsShare.scss @@ -101,7 +101,7 @@ $sidePadding: 30px; display: block; width: 100%; max-height: $maxDisplayed * 31px + 1px; - overflow-y: hidden; + overflow-y: auto; overflow-x: hidden; & > li {