diff --git a/static/js/pandora/pandora.js b/static/js/pandora/pandora.js index c323a877..9e6e9960 100644 --- a/static/js/pandora/pandora.js +++ b/static/js/pandora/pandora.js @@ -261,9 +261,15 @@ pandora.getListData = function() { return false; } }); - data = pandora.$ui.folderList[folder].value(pandora.user.ui.list); + // the one case where folder is undefinded is when on page load + // the folderLists call getListData to determine which list is selected + if (folder) { + Ox.print('gLD f', folder) + data = pandora.$ui.folderList[folder].value(pandora.user.ui.list); + data.editable = data.user == pandora.user.username && data.type == 'static'; + data.folder = folder; + } } - data.editable = data.user == pandora.user.username && data.type == 'static'; return data; }; diff --git a/static/js/pandora/ui/folderBrowserList.js b/static/js/pandora/ui/folderBrowserList.js index d8de5785..11074fc4 100644 --- a/static/js/pandora/ui/folderBrowserList.js +++ b/static/js/pandora/ui/folderBrowserList.js @@ -141,8 +141,7 @@ pandora.ui.folderBrowserList = function(id) { }), callback); }, pageLength: 1000, - // fixme: select if previously selected - // selected: pandora.user.ui.list ? [pandora.user.ui.list] : [], + selected: pandora.getListData().folder == id ? [pandora.user.ui.list] : [], sort: [ {key: 'name', operator: '+'} ] diff --git a/static/js/pandora/ui/folders.js b/static/js/pandora/ui/folders.js index a2ca9b60..312e5cc6 100644 --- a/static/js/pandora/ui/folders.js +++ b/static/js/pandora/ui/folders.js @@ -15,6 +15,7 @@ pandora.ui.folders = function() { pandora.$ui.findListElement = {}; pandora.$ui.findListSelect = {}; pandora.$ui.findListInput = {}; + pandora.$ui.manageListsButton = {}; if (pandora.user.ui.section == 'items') { pandora.site.sectionFolders.items.forEach(function(folder, i) { var extras; @@ -26,10 +27,12 @@ pandora.ui.folders = function() { items: [ { id: 'new', title: 'New List...' }, { id: 'newfromselection', title: 'New List from Current Selection...', disabled: true }, + {}, { id: 'newsmart', title: 'New Smart List...' }, { id: 'newfromresults', title: 'New Smart List from Current Results...', disabled: true }, {}, - { id: 'addselection', title: 'Add Selection to List...' } + { id: 'copyselection', title: 'Copy Selection to List...' }, + { id: 'moveselection', title: 'Move Selection to List...' } ], max: 0, min: 0, @@ -38,15 +41,15 @@ pandora.ui.folders = function() { }) .bindEvent({ click: function(event, data) { - var $list = pandora.$ui.folderList[folder.id], - id; + var $list = pandora.$ui.folderList[folder.id]; + // fixme: duplicated if (data.id == 'new' || data.id == 'newsmart') { pandora.api.addList({ name: 'Untitled', status: 'private', type: data.id == 'new' ? 'static' : 'smart' }, function(result) { - id = result.data.id; + var id = result.data.id; pandora.UI.set(['lists', id].join('|'), pandora.site.user.ui.lists['']); // fixme: necessary? pandora.URL.set('?find=list:' + id) Ox.Request.clearCache(); // fixme: remove @@ -66,7 +69,7 @@ pandora.ui.folders = function() { if (pandora.user.level == 'guest') { extras = [infoButton('Favorite Lists', 'To browse and subscribe to shared lists from other users, please sign up or sign in.')]; } else { - extras = [Ox.Button({ + extras = [pandora.$ui.manageListsButton['favorite'] = Ox.Button({ selectable: true, style: 'symbol', title: 'Edit', @@ -82,6 +85,21 @@ pandora.ui.folders = function() { pandora.$ui.folderBrowser.favorite = pandora.ui.folderBrowser('favorite') ); } else { + listData = pandora.getListData(); + if ( + pandora.$ui.folderList.favorite.options('selected').length + && !listData.subscribed + ) { + // the selected list in the favorite browser is not in the favorite folder + pandora.$ui.folderList.favorite.options({selected: []}); + if (Ox.getObjectById(pandora.site.sectionFolders.items, 'featured').showBrowser) { + // but in the featured browser + pandora.$ui.folderList.featured.options({selected: [listData.id]}); + } else { + // and nowhere else + pandora.URL.set('?find='); + } + } pandora.$ui.folderBrowser.favorite.replaceWith( pandora.$ui.folderList.favorite = pandora.ui.folderList('favorite') ); @@ -94,7 +112,7 @@ pandora.ui.folders = function() { if (pandora.user.level != 'admin') { extras = [infoButton('Featured Lists', 'Featured lists are selected public lists, picked by the ' + pandora.site.site.name + ' staff.')]; } else { - extras = [Ox.Button({ + extras = [pandora.$ui.manageListsButton['featured'] = Ox.Button({ selectable: true, style: 'symbol', title: 'Edit', @@ -103,12 +121,33 @@ pandora.ui.folders = function() { }) .bindEvent({ change: function(event, data) { + var listData; Ox.Request.clearCache(); // fixme: remove pandora.site.sectionFolders.items[i].showBrowser = !pandora.site.sectionFolders.items[i].showBrowser; if (pandora.site.sectionFolders.items[i].showBrowser) { pandora.$ui.folderList.featured.replaceWith( - pandora.$ui.folderBrowser.featured = pandora.ui.folderBrowser('featured')); + pandora.$ui.folderBrowser.featured = pandora.ui.folderBrowser('featured') + ); } else { + listData = pandora.getListData(); + Ox.print('FEATURED', listData) + if ( + pandora.$ui.folderList.featured.options('selected').length + && listData.status != 'featured' + ) { + // the selected list in the featured browser is not in the featured folder + pandora.$ui.folderList.featured.options({selected: []}); + if (listData.user == pandora.user.username) { + // but in the personal folder + pandora.$ui.folderList.personal.options({selected: [listData.id]}); + } else if (Ox.getObjectById(pandora.site.sectionFolders.items, 'favorite').showBrowser) { + // but in the favorite browser + pandora.$ui.folderList.favorite.options({selected: [listData.id]}); + } else { + // and nowhere else + pandora.URL.set('?find='); + } + } pandora.$ui.folderBrowser.featured.replaceWith( pandora.$ui.folderList.featured = pandora.ui.folderList('featured') ); diff --git a/static/js/pandora/ui/foldersList.js b/static/js/pandora/ui/foldersList.js index 9b4a45c0..d0ccbe00 100644 --- a/static/js/pandora/ui/foldersList.js +++ b/static/js/pandora/ui/foldersList.js @@ -229,7 +229,8 @@ pandora.ui.folderList = function(id) { max: 1, min: 0, pageLength: 1000, - sort: [{key: 'position', operator: '+'}], + selected: pandora.getListData().folder == id ? [pandora.user.ui.list] : [], + sort: [{key: 'position', operator: '+'}], sortable: id != 'featured' || pandora.user.level == 'admin' }) .css({ @@ -238,6 +239,45 @@ pandora.ui.folderList = function(id) { width: pandora.user.ui.sidebarWidth + 'px', }) .bindEvent({ + add: function(event) { + // fixme: this is duplicated, + // see folder collapse panel menu handler + var i = ['personal', 'favorite', 'featured'].indexOf(id); + if (id == 'personal') { + if (event.keys == '' || event.keys == 'alt') { + pandora.api.addList({ + name: 'Untitled', + status: 'private', + type: event.keys == '' ? 'static' : 'smart' + }, function(result) { + var id = result.data.id; + pandora.UI.set(['lists', id].join('|'), pandora.site.user.ui.lists['']); // fixme: necessary? + pandora.URL.set('?find=list:' + id) + Ox.Request.clearCache(); // fixme: remove + that.reloadList().bindEventOnce({ + load: function(event, data) { + that.gainFocus() + .options({selected: [id]}) + .editCell(id, 'name'); + } + }); + }); + } + } else if (id == 'favorite' || (id == 'featured' && pandora.user.level == 'admin')) { + // this makes the button trigger a change event, + // which is already being handled in folders.js + pandora.$ui.manageListsButton[id].options({selected: true}); + /* + if (!pandora.site.sectionFolders.items[i].showBrowser) { + pandora.site.sectionFolders.items[i].showBrowser = true; + pandora.$ui.manageListsButton[id].options({selected: true}); + pandora.$ui.folderList[id].replaceWith( + pandora.$ui.folderBrowser[id] = pandora.ui.folderBrowser(id) + ); + } + */ + } + }, click: function(event, data) { var $list = pandora.$ui.folderList[id]; if (data.key == 'type') { @@ -256,6 +296,7 @@ pandora.ui.folderList = function(id) { } }, 'delete': function(event, data) { + // fixme: add a confirmation dialog var $list = pandora.$ui.folderList[id]; pandora.URL.set('?find='); $list.options({selected: []}); @@ -316,9 +357,9 @@ pandora.ui.folderList = function(id) { }, select: function(event, data) { if (data.ids.length) { - $.each(pandora.$ui.folderList, function(id_, $list) { + Ox.forEach(pandora.$ui.folderList, function($list, id_) { id != id_ && $list.options('selected', []); - }) + }); pandora.URL.set('?find=' + (id == 'volumes' ? 'volume' : 'list') + ':' + data.ids[0]); } else { pandora.URL.set('?find=');