From cc5ee75564e3bbcf485f9af95c6a43dc6c4abfb3 Mon Sep 17 00:00:00 2001 From: rolux Date: Thu, 13 Feb 2014 15:53:26 +0000 Subject: [PATCH] fix #2302 (Regression: Using find in Manage Favorite/Featured breaks layout) --- static/js/folderBrowser.js | 16 ++++++++++++++-- static/js/folderBrowserList.js | 9 ++++++--- static/js/folderPlaceholder.js | 6 ++++-- static/js/utils.js | 4 ++-- 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/static/js/folderBrowser.js b/static/js/folderBrowser.js index e7c664f6..943077f5 100644 --- a/static/js/folderBrowser.js +++ b/static/js/folderBrowser.js @@ -1,10 +1,15 @@ // vim: et:ts=4:sw=4:sts=4:ft=javascript 'use strict'; pandora.ui.folderBrowser = function(id, section) { - var that = Ox.Element(); + // Yes, we have to wait for the lists init event to decide if it is shown. + // This run-once init handler runs *after* the list's own init handler. + var i = Ox.getIndexById(pandora.site.sectionFolders[section], id), + that = Ox.Element(); + pandora.site.sectionFolders[section][i].hasItems = null; pandora.$ui.folderList[id] = pandora.ui.folderBrowserList(id, section) - .bindEvent({ + .bindEventOnce({ init: function(data) { + pandora.site.sectionFolders[section][i].hasItems = !!data.items; if (data.items) { that.setElement( Ox.SplitPanel({ @@ -15,11 +20,18 @@ pandora.ui.folderBrowser = function(id, section) { }, { element: pandora.$ui.folderList[id] + }, + { + element: Ox.Element().append( + pandora.ui.folderPlaceholder(id, section).updateText('public', true) + ), + size: 0 } ], orientation: 'vertical' }) ); + pandora.resizeFolders(); } else { // if there are no items, then the placeholder is already there pandora.$ui.folderPlaceholder[id].updateText('public'); diff --git a/static/js/folderBrowserList.js b/static/js/folderBrowserList.js index ba0d5c32..f4f94bfa 100644 --- a/static/js/folderBrowserList.js +++ b/static/js/folderBrowserList.js @@ -191,13 +191,16 @@ pandora.ui.folderBrowserList = function(id, section) { init: function(data) { pandora.site.sectionFolders[section][i].items = data.items; pandora.$ui.folder[i].$content.css({ - height: (data.items ? 40 + data.items * 16 : 16) + 'px' + height: 40 + (data.items || 1) * 16 + 'px' }); pandora.$ui.folderList[id].css({ height: 16 + data.items * 16 + 'px' }); - pandora.$ui.folderPlaceholder[id][data.items ? 'hide' : 'show'](); - pandora.resizeFolders(); + pandora.$ui.folderBrowser[id].size(2, data.items ? 0 : 16); + if (Ox.isBoolean(pandora.site.sectionFolders[section][i].hasItems)) { + // hasItems is set, so we're not on first init + pandora.resizeFolders(); + } }, paste: function(data) { if (section == 'items') { diff --git a/static/js/folderPlaceholder.js b/static/js/folderPlaceholder.js index b1b91b48..1f761cb0 100644 --- a/static/js/folderPlaceholder.js +++ b/static/js/folderPlaceholder.js @@ -7,11 +7,13 @@ pandora.ui.folderPlaceholder = function(id, section) { height: '14px', padding: '1px 4px', }); - that.updateText = function(string) { + that.updateText = function(string, isFind) { return that.html( Ox._( string != 'volumes' - ? 'No ' + string + ' ' + (section == 'items' ? 'lists' : section) + ? 'No ' + string + ' ' + + (section == 'items' ? 'lists' : section) + + (isFind ? ' found' : '') : 'No local volumes' ) ); diff --git a/static/js/utils.js b/static/js/utils.js index b4b82ce9..7e031de4 100644 --- a/static/js/utils.js +++ b/static/js/utils.js @@ -1023,7 +1023,7 @@ pandora.getFoldersHeight = function(section) { var height = 0; pandora.site.sectionFolders[section].forEach(function(folder, i) { height += 16 + pandora.user.ui.showFolder[section][folder.id] * ( - !!(folder.showBrowser && folder.items) * 40 + (folder.items || 1) * 16 + !!(folder.showBrowser && folder.hasItems) * 40 + (folder.items || 1) * 16 ); }); return height; @@ -1035,7 +1035,7 @@ pandora.getFoldersWidth = function(section) { if ( pandora.$ui.appPanel && pandora.getFoldersHeight(section) - > window.innerHeight - 20 - 24 -16 - 1 - pandora.getInfoHeight(section) + > window.innerHeight - 20 - 24 - 16 - 1 - pandora.getInfoHeight(section) ) { width -= Ox.UI.SCROLLBAR_SIZE; }