From f93fd49bd7ef51f9a04be5d051d6768723d6c88d Mon Sep 17 00:00:00 2001 From: rolux Date: Wed, 9 Nov 2011 17:37:44 +0000 Subject: [PATCH] fix bugs with dialogs that represent multiple URLs, and history --- static/js/pandora/URL.js | 38 ++++++++++++++++++++------------- static/js/pandora/account.js | 28 +++++++++++++----------- static/js/pandora/helpDialog.js | 6 ++---- static/js/pandora/listDialog.js | 3 ++- static/js/pandora/siteDialog.js | 34 +++++++++++++---------------- static/js/pandora/utils.js | 9 +------- 6 files changed, 58 insertions(+), 60 deletions(-) diff --git a/static/js/pandora/URL.js b/static/js/pandora/URL.js index 092ccb8e..1ed860ae 100644 --- a/static/js/pandora/URL.js +++ b/static/js/pandora/URL.js @@ -75,7 +75,7 @@ pandora.URL = (function() { Ox.getPositionById(pandora.site.sitePages, state.page) > -1 || state.page == 'software' ) { - if (pandora.$ui.siteDialog) { + if (pandora.$ui.siteDialog && pandora.$ui.siteDialog.is(':visible')) { pandora.$ui.siteDialog.select(state.page); } else { pandora.$ui.siteDialog = pandora.ui.siteDialog(state.page).open(); @@ -84,7 +84,11 @@ pandora.URL = (function() { pandora.$ui.helpDialog = pandora.ui.helpDialog().open(); } else if (['signup', 'signin'].indexOf(state.page) > -1) { if (pandora.user.level == 'guest') { - pandora.$ui.accountDialog = pandora.ui.accountDialog(state.page).open(); + if (pandora.$ui.accountDialog && pandora.$ui.accountDialog.is(':visible')) { + pandora.$ui.accountDialog.options(pandora.ui.accountDialogOptions(state.page)); + } else { + pandora.$ui.accountDialog = pandora.ui.accountDialog(state.page).open(); + } } else { pandora.URL.replace('/'); } @@ -270,15 +274,17 @@ pandora.URL = (function() { Ox.Request.cancel(); self.isPopState = true; $('.OxDialog:visible').each(function() { - Ox.UI.elements[$(this).data('oxid')].close().remove(); + Ox.UI.elements[$(this).data('oxid')].close(); }); if ( pandora.user.ui.item && pandora.user.ui.itemView == 'video' + && pandora.$ui.player && pandora.$ui.player.options('fullscreen') ) { + pandora.$ui.player.remove(); //pandora.$ui.player.options({fullscreen: false}); - $('body > .OxVideoPlayer').remove(); + //$('body > .OxVideoPlayer').remove(); } if (!Ox.isEmpty(e.state)) { Ox.Log('', 'E.STATE', e.state) @@ -311,24 +317,26 @@ pandora.URL = (function() { }; // pushes a new URL (as string or from state) - that.push = function(url) { - if (url) { - self.URL.push(null, pandora.getPageTitle(), url, setState); + that.push = function(stateOrURL) { + var state, title = pandora.getPageTitle(), url; + if (Ox.isObject(stateOrURL)) { + state = stateOrURL; } else { - // fixme - //alert('DO YOU REALLY WANT TO CALL PUSH WITHOUT URL?') - //self.URL.push(getState()); + url = stateOrURL; } + self.URL.push(state, title, url, setState); return that; }; // replaces the current URL (as string or from state) - that.replace = function(url) { - if (url) { - self.URL.replace(null, pandora.getPageTitle(), url, setState) + that.replace = function(stateOrURL) { + var state, title = pandora.getPageTitle(), url; + if (Ox.isObject(stateOrURL)) { + state = stateOrURL; } else { - self.URL.replace(getState()); + url = stateOrURL; } + self.URL.replace(state, title, url, setState); return that; }; @@ -360,7 +368,7 @@ pandora.URL = (function() { action = 'push'; } state = getState(); - self.URL[action](state, pandora.getPageTitle(), state); + self.URL[action](state, pandora.getPageTitle(), ''); } }; diff --git a/static/js/pandora/account.js b/static/js/pandora/account.js index 0ac81fc0..a60dfda6 100644 --- a/static/js/pandora/account.js +++ b/static/js/pandora/account.js @@ -7,6 +7,7 @@ pandora.ui.accountDialog = function(action) { fixedSize: true, height: 192, id: 'accountDialog', + removeOnClose: true, width: 432 }, pandora.ui.accountDialogOptions(action))) .bindEvent({ @@ -56,7 +57,7 @@ pandora.ui.accountDialogOptions = function(action, value) { id: 'cancel' + Ox.toTitleCase(action), title: 'Cancel' }).bindEvent('click', function() { - pandora.$ui.accountDialog.close().remove(); + pandora.$ui.accountDialog.close(); pandora.URL.update(); }); } else if (type == 'submit') { @@ -72,13 +73,12 @@ pandora.ui.accountDialogOptions = function(action, value) { id: type, title: buttonTitle[type] + '...' }).bindEvent('click', function() { - pandora.$ui.accountDialog.options(pandora.ui.accountDialogOptions(type)); - pandora.$ui.accountForm.find('input')[0].focus(); if (['signin', 'signup'].indexOf(type) > -1) { - // fixme: similar problem as in siteDialog, - // the URL controller should handle this - history.replaceState({}, '', '/' + type); + pandora.URL.replace({page: type}); + } else { + pandora.$ui.accountDialog.options(pandora.ui.accountDialogOptions(type)); } + pandora.$ui.accountForm.find('input.OxInput')[0].focus(); }); } } @@ -147,7 +147,7 @@ pandora.ui.accountForm = function(action, value) { if (action == 'signin') { pandora.api.signin(data, function(result) { if (!result.data.errors) { - pandora.$ui.accountDialog.close().remove(); + pandora.$ui.accountDialog.close(); pandora.signin(result.data); } else { pandora.$ui.accountDialog.enableButtons(); @@ -157,7 +157,7 @@ pandora.ui.accountForm = function(action, value) { } else if (action == 'signup') { pandora.api.signup(data, function(result) { if (!result.data.errors) { - pandora.$ui.accountDialog.close().remove(); + pandora.$ui.accountDialog.close(); pandora.signin(result.data); pandora.ui.accountWelcomeDialog().open(); } else { @@ -181,7 +181,7 @@ pandora.ui.accountForm = function(action, value) { } else if (action == 'resetAndSignin') { pandora.api.resetPassword(data, function(result) { if (!result.data.errors) { - pandora.$ui.accountDialog.close().remove(); + pandora.$ui.accountDialog.close(); pandora.signin(result.data); } else { pandora.$ui.accountDialog.enableButtons(); @@ -318,14 +318,14 @@ pandora.ui.accountSignoutDialog = function() { id: 'stay', title: 'Stay Signed In' }).bindEvent('click', function() { - that.close().remove(); + that.close(); pandora.URL.update(); }), Ox.Button({ id: 'signout', title: 'Sign Out' }).bindEvent('click', function() { - that.close().remove(); + that.close(); pandora.api.signout({}, function(result) { pandora.signout(result.data); }); @@ -345,6 +345,7 @@ pandora.ui.accountSignoutDialog = function() { fixedSize: true, height: 128, keys: {enter: 'signout', escape: 'stay'}, + removeOnClose: true, title: 'Sign Out', width: 304 }); @@ -358,7 +359,7 @@ pandora.ui.accountWelcomeDialog = function() { id: 'preferences', title: 'Preferences...' }).bindEvent('click', function() { - that.close().remove(); + that.close(); pandora.$ui.preferencesDialog = pandora.ui.preferencesDialog().open(); }), {}, @@ -366,7 +367,7 @@ pandora.ui.accountWelcomeDialog = function() { id: 'close', title: 'Close' }).bindEvent('click', function() { - that.close().remove(); + that.close(); }) ], content: Ox.Element() @@ -383,6 +384,7 @@ pandora.ui.accountWelcomeDialog = function() { fixedSize: true, height: 128, keys: {enter: 'close', escape: 'close'}, + removeOnClose: true, title: 'Welcome to ' + pandora.site.site.name, width: 304 }); diff --git a/static/js/pandora/helpDialog.js b/static/js/pandora/helpDialog.js index 07c80299..c74d2a12 100644 --- a/static/js/pandora/helpDialog.js +++ b/static/js/pandora/helpDialog.js @@ -9,10 +9,8 @@ pandora.ui.helpDialog = function() { title: 'Close' }).bindEvent({ click: function() { - that.close().remove(); - //fixme: this should be using URL.push / UI.set - //but that currenlty causes a reload - history.pushState({}, '', '/'); + that.close(); + pandora.URL.update(); } }) ], diff --git a/static/js/pandora/listDialog.js b/static/js/pandora/listDialog.js index cb4b9157..61d63b54 100644 --- a/static/js/pandora/listDialog.js +++ b/static/js/pandora/listDialog.js @@ -94,7 +94,7 @@ pandora.ui.listDialog = function(section) { }) .bindEvent({ click: function() { - $dialog.close().remove(); + $dialog.close(); } }) ], @@ -104,6 +104,7 @@ pandora.ui.listDialog = function(section) { minWidth: width, height: 312, // keys: {enter: 'save', escape: 'cancel'}, + removeOnClose: true, title: 'List - ' + listData.name, width: width }); diff --git a/static/js/pandora/siteDialog.js b/static/js/pandora/siteDialog.js index f635546e..ff454090 100644 --- a/static/js/pandora/siteDialog.js +++ b/static/js/pandora/siteDialog.js @@ -5,12 +5,10 @@ pandora.ui.siteDialog = function(section) { var tabs = Ox.merge( - Ox.clone(pandora.site.sitePages), + Ox.clone(pandora.site.sitePages, true), [{id: 'software', title: 'Software'}] ); - //Ox.getObjectById(tabs, section).selected = true; - tabs[Ox.getPositionById(tabs, section)].selected = true; - //Ox.print('SITE DIALOG', section, Ox.getObjectById(tabs, section), Ox.getObjectById(tabs, section).selected) + Ox.getObjectById(tabs, section).selected = true; var $tabPanel = Ox.TabPanel({ content: function(id) { var $content = Ox.Element().css({padding: '16px', overflowY: 'auto'}); @@ -82,8 +80,6 @@ pandora.ui.siteDialog = function(section) { + 'Legal Action' ) .appendTo($column); - }) - pandora.site.rightsLevels.forEach(function(rightsLevel) { }); } }); @@ -113,34 +109,34 @@ pandora.ui.siteDialog = function(section) { }) .bindEvent({ change: function(data) { - $dialog.options({ + that.options({ title: Ox.getObjectById(tabs, data.selected).title }); - //pandora.URL.replace('/' + data.selected); - //fixme: this should be using URL.push / UI.set - //but that currenlty causes another dialog to be opened - history.pushState({/*page: data.selected*/}, '', '/' + data.selected); + pandora.URL.push({page: data.selected}); + //history.pushState({page: data.selected}, '', '/' + data.selected); } }); - var $dialog = Ox.Dialog({ + + var that = Ox.Dialog({ buttons: [ Ox.Button({ id: 'close', title: 'Close' }).bindEvent({ click: function() { - $dialog.close().remove(); + that.close(); pandora.URL.update(); } }) ], - //closeButton: true, + closeButton: true, content: $tabPanel, height: Math.round((window.innerHeight - 24) * 0.75), - //maximizeButton: true, + maximizeButton: true, minHeight: 256, minWidth: 688, // 16 + 256 + 16 + 384 + 16 - title: 'About', + removeOnClose: true, + title: Ox.getObjectById(tabs, section).title, width: Math.round(window.innerWidth * 0.75), }) .bindEvent({ @@ -151,11 +147,11 @@ pandora.ui.siteDialog = function(section) { } }); - $dialog.select = function(id) { + that.select = function(id) { $tabPanel.select(id); - return $dialog; + return that; }; - return $dialog; + return that; }; diff --git a/static/js/pandora/utils.js b/static/js/pandora/utils.js index d44273ad..b2537b6f 100644 --- a/static/js/pandora/utils.js +++ b/static/js/pandora/utils.js @@ -856,15 +856,9 @@ pandora.resizeFolders = function() { }; pandora.resizeWindow = function() { + // FIXME: a lot of this throws errors on load pandora.$ui.leftPanel.size(2, pandora.getInfoHeight(true)); pandora.resizeFolders(); - /* - var infoHeight = pandora.getInfoHeight(true); - pandora.$ui.leftPanel.size(2, infoHeight); - !pandora.user.ui.showInfo && pandora.$ui.leftPanel.css({bottom: -infoHeight}); - pandora.resizeFolders(); - pandora.$ui.info.resizeInfo(); - */ if (!pandora.user.ui.item) { pandora.resizeFilters(pandora.$ui.rightPanel.width()); if (pandora.user.ui.listView == 'clips') { @@ -893,7 +887,6 @@ pandora.resizeWindow = function() { pandora.$ui.list.size(); } } else { - //Ox.Log('', 'pandora.$ui.window.resize'); pandora.$ui.browser.scrollToSelection(); if (pandora.user.ui.itemView == 'info') { pandora.$ui.item.resize();