diff --git a/src/_h5ai/client/css/inc/topbar.less b/src/_h5ai/client/css/inc/topbar.less index 9b5577a7..3c5eae01 100644 --- a/src/_h5ai/client/css/inc/topbar.less +++ b/src/_h5ai/client/css/inc/topbar.less @@ -3,6 +3,7 @@ position: fixed; z-index: 5; width: 100%; + height: 30px; left: 0; top: 0; .vert-gradient(rgb(241,241,241), rgb(228,228,228)); diff --git a/src/_h5ai/client/css/inc/tree.less b/src/_h5ai/client/css/inc/tree.less index 0d369fdd..75d0a7d8 100644 --- a/src/_h5ai/client/css/inc/tree.less +++ b/src/_h5ai/client/css/inc/tree.less @@ -93,6 +93,11 @@ margin: 0; padding: 0 0 0 24px; } + .summary { + margin: 0 0 0 24px; + color: #999; + font-style: italic; + } .current { > a, > a:active, > a:visited { background-color: rgba(255,255,255,0.5); diff --git a/src/_h5ai/client/js/inc/ext/crumb.js b/src/_h5ai/client/js/inc/ext/crumb.js index dd631d41..d48fa005 100644 --- a/src/_h5ai/client/js/inc/ext/crumb.js +++ b/src/_h5ai/client/js/inc/ext/crumb.js @@ -82,6 +82,9 @@ modulejs.define('ext/crumb', ['_', '$', 'core/settings', 'core/resource', 'core/ _.each(crumb, function (e) { $ul.append(update(e)); + + // needed by aai + // e.fetchStatus(function (e) { update(e); }); }); event.sub('entry.created', onContentChanged); diff --git a/src/_h5ai/client/js/inc/ext/tree.js b/src/_h5ai/client/js/inc/ext/tree.js index 5f0b8a92..7271b752 100644 --- a/src/_h5ai/client/js/inc/ext/tree.js +++ b/src/_h5ai/client/js/inc/ext/tree.js @@ -3,7 +3,8 @@ modulejs.define('ext/tree', ['_', '$', 'core/settings', 'core/resource', 'core/e var settings = _.extend({ enabled: false, - slide: true + slide: true, + maxSubfolders: 50 }, allsettings.tree), template = '<div class="entry">' + @@ -75,10 +76,17 @@ modulejs.define('ext/tree', ['_', '$', 'core/settings', 'core/resource', 'core/e // does it have subfolders? if (subfolders.length) { - var $ul = $('<ul class="content"/>').appendTo($html); + var $ul = $('<ul class="content"/>').appendTo($html), + counter = 0; _.each(subfolders, function (e) { - $('<li />').append(update(e)).appendTo($ul); + counter += 1; + if (counter <= settings.maxSubfolders) { + $('<li/>').append(update(e)).appendTo($ul); + } }); + if (subfolders.length > settings.maxSubfolders) { + $('<li class="summary">… ' + (subfolders.length - settings.maxSubfolders) + ' more subfolders</li>').appendTo($ul); + } if (!entry.isContentVisible) { $ul.hide(); } @@ -232,9 +240,11 @@ modulejs.define('ext/tree', ['_', '$', 'core/settings', 'core/resource', 'core/e }); event.sub('ready', adjustSpacing); - event.sub('entry.changed', onContentChanged); - event.sub('entry.created', onContentChanged); - event.sub('entry.removed', onContentChanged); + + // strong negative performance impact in aai mode + // event.sub('entry.changed', onContentChanged); + // event.sub('entry.created', onContentChanged); + // event.sub('entry.removed', onContentChanged); $(window).on('resize', function () { diff --git a/src/_h5ai/client/js/inc/view/extended.js b/src/_h5ai/client/js/inc/view/extended.js index 42e81263..e531df9f 100644 --- a/src/_h5ai/client/js/inc/view/extended.js +++ b/src/_h5ai/client/js/inc/view/extended.js @@ -4,7 +4,9 @@ modulejs.define('view/extended', ['_', '$', 'core/settings', 'core/resource', 'c var settings = _.extend({ modes: ['details', 'icons'], setParentFolderLabels: false, - binaryPrefix: false + binaryPrefix: false, + maxFolders: 16, + delay: 2000 }, allsettings.view), template = '<li class="entry">' + @@ -111,9 +113,6 @@ modulejs.define('view/extended', ['_', '$', 'core/settings', 'core/resource', 'c _.each(entry.content, function (e) { $ul.append(update(e)); - - // needed by aai - e.fetchStatus(function (e) { update(e); }); }); $extended.append($ul); @@ -154,6 +153,20 @@ modulejs.define('view/extended', ['_', '$', 'core/settings', 'core/resource', 'c }); } }); + + + // needed by aai + if (_.size(entry.content) <= settings.maxFolders) { + + _.each(entry.content, function (e) { + + if (e.isFolder() && e.status === null) { + setTimeout(function () { + e.fetchStatus(function (e) { update(e); }); + }, settings.delay); + } + }); + } }; init(entry); diff --git a/src/_h5ai/conf/options.json b/src/_h5ai/conf/options.json index cdd8ebb5..511341ef 100644 --- a/src/_h5ai/conf/options.json +++ b/src/_h5ai/conf/options.json @@ -33,16 +33,20 @@ Options The user selected view mode is also stored local in modern browsers so that it will be persistent. - Set parent folder labels to real folder names. - Binary prefix set to true uses 1024B=1KiB when formatting - file sizes (see http://en.wikipedia.org/wiki/Binary_prefix). + - setParentFolderLabels [all]: set parent folder labels to real folder names + - binaryPrefix [all]: set to true uses 1024B=1KiB when formatting file sizes + (see http://en.wikipedia.org/wiki/Binary_prefix) + - indexFiles [php]: consider folder with those files as non {{pkg.name}} folders + - ignore [php]: don't list items matching these regular expressions + - maxFolders [aai]: max folders to trigger folder status checks */ "view": { "modes": ["details", "list", "grid", "icons"], "setParentFolderLabels": true, "binaryPrefix": false, "indexFiles": ["index.html", "index.htm", "index.php"], - "ignore": ["^\\.", "^_{{pkg.name}}"] + "ignore": ["^\\.", "^_{{pkg.name}}"], + "maxFolders": 16 }, @@ -274,7 +278,7 @@ Options }, /* [php] - Show thumbnails for image files. Needs the "/_h5ai/cache" folder to be + Show thumbnails for image files. Needs the "/_{{pkg.name}}/cache" folder to be writable for the web Server. - img thumbnails depend on PHP-GD - mov thumbnails depend on ffmpeg @@ -303,6 +307,7 @@ Options */ "tree": { "enabled": true, - "slide": true + "slide": true, + "maxSubfolders": 50 } }