summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMorris Jobke <hey@morrisjobke.de>2017-02-21 17:07:07 -0600
committerMorris Jobke <hey@morrisjobke.de>2017-02-21 17:07:07 -0600
commit3284efd1996854df0252d3e40574759e698b812d (patch)
tree74fae0ecd3340c1d3fa09bc53763ae427a0455ff
parent869ea38ffe77e92b9a5651fe07020b4035d1f1d3 (diff)
downloadnextcloud-server-3284efd1996854df0252d3e40574759e698b812d.tar.gz
nextcloud-server-3284efd1996854df0252d3e40574759e698b812d.zip
Improve the UX for sharing settings
* shows a info when list is potentially truncated * shows a warning when characters length is not enough Signed-off-by: Morris Jobke <hey@morrisjobke.de>
-rw-r--r--core/css/share.scss5
-rw-r--r--core/js/sharedialogview.js52
-rw-r--r--lib/private/Template/JSConfigHelper.php4
3 files changed, 52 insertions, 9 deletions
diff --git a/core/css/share.scss b/core/css/share.scss
index 8852ad2748e..6d98dc74945 100644
--- a/core/css/share.scss
+++ b/core/css/share.scss
@@ -78,6 +78,11 @@
}
}
+.ui-autocomplete .autocomplete-note {
+ padding: 5px 10px;
+ color: rgba(0, 0, 0, .3);
+}
+
#shareWithList {
list-style-type: none;
padding: 8px;
diff --git a/core/js/sharedialogview.js b/core/js/sharedialogview.js
index 60cd97fb572..bbc40c9c8d4 100644
--- a/core/js/sharedialogview.js
+++ b/core/js/sharedialogview.js
@@ -130,18 +130,46 @@
},
autocompleteHandler: function (search, response) {
- var view = this;
- var $loading = this.$el.find('.shareWithLoading');
+ var $shareWithField = $('.shareWithField'),
+ view = this,
+ $loading = this.$el.find('.shareWithLoading'),
+ $remoteShareInfo = this.$el.find('.shareWithRemoteInfo');
+
+ var count = oc_config['sharing.minSearchStringLength'];
+ if (search.term.trim().length < count) {
+ var title = n('core',
+ 'At least {count} character are needed for autocompletion',
+ 'At least {count} characters are needed for autocompletion',
+ count,
+ { count: count }
+ );
+ $shareWithField.addClass('error')
+ .attr('data-original-title', title)
+ .tooltip('hide')
+ .tooltip({
+ placement: 'bottom',
+ trigger: 'manual'
+ })
+ .tooltip('fixTitle')
+ .tooltip('show');
+ response();
+ return;
+ }
+
$loading.removeClass('hidden');
$loading.addClass('inlineblock');
- var $remoteShareInfo = this.$el.find('.shareWithRemoteInfo');
$remoteShareInfo.addClass('hidden');
+
+ $shareWithField.removeClass('error')
+ .tooltip('hide');
+
+ var perPage = 200;
$.get(
OC.linkToOCS('apps/files_sharing/api/v1') + 'sharees',
{
format: 'json',
search: search.term.trim(),
- perPage: 200,
+ perPage: perPage,
itemType: view.model.get('itemType')
},
function (result) {
@@ -232,16 +260,24 @@
var suggestions = users.concat(groups).concat(remotes).concat(emails).concat(lookup);
if (suggestions.length > 0) {
- $('.shareWithField').removeClass('error')
- .tooltip('hide')
+ $shareWithField
.autocomplete("option", "autoFocus", true);
+
response(suggestions);
+
+ // show a notice that the list is truncated
+ // this is the case if one of the search results is at least as long as the max result config option
+ if(Math.min(perPage, oc_config['sharing.maxAutocompleteResults']) <= Math.max(users.length, groups.length, remotes.length, emails.length, lookup.length)) {
+ var message = t('core', 'This list is maybe truncated - please refine your search term to see more results.');
+ $('.ui-autocomplete').append('<li class="autocomplete-note">' + message + '</li>');
+ }
+
} else {
- var title = t('core', 'No users or groups found for {search}', {search: $('.shareWithField').val()});
+ var title = t('core', 'No users or groups found for {search}', {search: $shareWithField.val()});
if (!view.configModel.get('allowGroupSharing')) {
title = t('core', 'No users found for {search}', {search: $('.shareWithField').val()});
}
- $('.shareWithField').addClass('error')
+ $shareWithField.addClass('error')
.attr('data-original-title', title)
.tooltip('hide')
.tooltip({
diff --git a/lib/private/Template/JSConfigHelper.php b/lib/private/Template/JSConfigHelper.php
index 1c241989fd2..7a4e8415e7d 100644
--- a/lib/private/Template/JSConfigHelper.php
+++ b/lib/private/Template/JSConfigHelper.php
@@ -206,7 +206,9 @@ class JSConfigHelper {
'versionstring' => \OC_Util::getVersionString(),
'enable_avatars' => true, // here for legacy reasons - to not crash existing code that relies on this value
'lost_password_link'=> $this->config->getSystemValue('lost_password_link', null),
- 'modRewriteWorking' => (\OC::$server->getConfig()->getSystemValue('htaccess.IgnoreFrontController', false) === true || getenv('front_controller_active') === 'true'),
+ 'modRewriteWorking' => ($this->config->getSystemValue('htaccess.IgnoreFrontController', false) === true || getenv('front_controller_active') === 'true'),
+ 'sharing.maxAutocompleteResults' => $this->config->getSystemValue('sharing.maxAutocompleteResults', 0),
+ 'sharing.minSearchStringLength' => $this->config->getSystemValue('sharing.minSearchStringLength', 0),
]),
"oc_appconfig" => json_encode([
'core' => [