rewrite history, again

This commit is contained in:
rolux 2011-11-09 22:32:54 +00:00
parent f93fd49bd7
commit 8a6f29cd31
11 changed files with 155 additions and 103 deletions

View File

@ -617,6 +617,7 @@
"lists": {},
"mapFind": "",
"mapSelection": "",
"page": "",
"section": "items",
"showAnnotations": true,
"showBrowser": true,

View File

@ -24,6 +24,7 @@ urlpatterns = patterns('',
(r'^api/upload/$', 'archive.views.firefogg_upload'),
(r'^url=(?P<url>.*)$', 'app.views.redirect_url'),
(r'^file/(?P<oshash>.*)$', 'archive.views.lookup_file'),
(r'^api$', include('api.urls')),
(r'^api/$', include('api.urls')),
(r'^resetUI$', 'user.views.reset_ui'),
(r'', include('item.urls')),

View File

@ -6,9 +6,13 @@ pandora.URL = (function() {
var self = {}, that = {};
function getState(keys) {
function getState() {
Ox.Log('GET STATE, UI', pandora.user.ui)
Ox.Log('', 'GET STATE, UI', pandora.user.ui)
if (pandora.user.ui.page) {
return {page: pandora.user.ui.page};
}
var state = {};
@ -45,7 +49,7 @@ pandora.URL = (function() {
);
}
Ox.Log('URL', 'STATE ...', state)
Ox.Log('', 'URL', 'STATE ...', state)
return state;
@ -66,43 +70,7 @@ pandora.URL = (function() {
} else if (state.page) {
if (state.page == 'home') {
// if we're on page load, show screen immediately
pandora.$ui.home = pandora.ui.home()[
!pandora.$ui.appPanel ? 'showScreen' : 'fadeInScreen'
]();
} else if (
Ox.getPositionById(pandora.site.sitePages, state.page) > -1
|| state.page == 'software'
) {
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();
}
} else if (state.page == 'help') {
pandora.$ui.helpDialog = pandora.ui.helpDialog().open();
} else if (['signup', 'signin'].indexOf(state.page) > -1) {
if (pandora.user.level == 'guest') {
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('/');
}
} else if (['preferences', 'signout'].indexOf(state.page) > -1) {
if (pandora.user.level == 'guest') {
pandora.URL.replace('/');
} else if (state.page == 'preferences') {
pandora.ui.preferencesDialog().open();
} else {
pandora.ui.accountSignoutDialog().open();
}
} else if (state.page == 'api') {
document.location.href = '/api/';
}
pandora.UI.set(state);
callback && callback();
} else {
@ -276,6 +244,10 @@ pandora.URL = (function() {
$('.OxDialog:visible').each(function() {
Ox.UI.elements[$(this).data('oxid')].close();
});
if (pandora.$ui.home) {
pandora.UI.set({page: ''});
pandora.$ui.home.fadeOutScreen();
}
if (
pandora.user.ui.item
&& pandora.user.ui.itemView == 'video'
@ -283,10 +255,8 @@ pandora.URL = (function() {
&& pandora.$ui.player.options('fullscreen')
) {
pandora.$ui.player.remove();
//pandora.$ui.player.options({fullscreen: false});
//$('body > .OxVideoPlayer').remove();
}
if (!Ox.isEmpty(e.state)) {
if (e.state && !Ox.isEmpty(e.state)) {
Ox.Log('', 'E.STATE', e.state)
document.title = e.state.title;
setState(e.state);
@ -313,12 +283,15 @@ pandora.URL = (function() {
// sets the URL to the previous URL
that.pop = function() {
self.URL.pop();
self.URL.pop() || that.update();
};
// pushes a new URL (as string or from state)
that.push = function(stateOrURL) {
var state, title = pandora.getPageTitle(), url;
var state,
title = pandora.getPageTitle(stateOrURL)
|| pandora.getDocumentTitle(),
url;
if (Ox.isObject(stateOrURL)) {
state = stateOrURL;
} else {
@ -329,8 +302,11 @@ pandora.URL = (function() {
};
// replaces the current URL (as string or from state)
that.replace = function(stateOrURL) {
var state, title = pandora.getPageTitle(), url;
that.replace = function(stateOrURL, title) {
var state,
title = pandora.getPageTitle(stateOrURL)
|| pandora.getDocumentTitle(),
url;
if (Ox.isObject(stateOrURL)) {
state = stateOrURL;
} else {
@ -368,7 +344,10 @@ pandora.URL = (function() {
action = 'push';
}
state = getState();
self.URL[action](state, pandora.getPageTitle(), '');
self.URL[action](
state,
pandora.getPageTitle(state) || pandora.getDocumentTitle()
);
}
};

View File

@ -58,7 +58,7 @@ pandora.ui.accountDialogOptions = function(action, value) {
title: 'Cancel'
}).bindEvent('click', function() {
pandora.$ui.accountDialog.close();
pandora.URL.update();
pandora.UI.set({page: ''});
});
} else if (type == 'submit') {
return Ox.Button({
@ -74,7 +74,7 @@ pandora.ui.accountDialogOptions = function(action, value) {
title: buttonTitle[type] + '...'
}).bindEvent('click', function() {
if (['signin', 'signup'].indexOf(type) > -1) {
pandora.URL.replace({page: type});
pandora.UI.set({page: type});
} else {
pandora.$ui.accountDialog.options(pandora.ui.accountDialogOptions(type));
}
@ -319,7 +319,7 @@ pandora.ui.accountSignoutDialog = function() {
title: 'Stay Signed In'
}).bindEvent('click', function() {
that.close();
pandora.URL.update();
pandora.UI({page: ''});
}),
Ox.Button({
id: 'signout',

View File

@ -13,6 +13,7 @@ pandora.ui.appPanel = function() {
],
orientation: 'vertical'
});
setPage(pandora.user.ui.page);
that.display = function() {
// fixme: move animation into Ox.App
var animate = $('.OxScreen').length == 0;
@ -27,6 +28,48 @@ pandora.ui.appPanel = function() {
pandora.$ui.appPanel = pandora.ui.appPanel().appendTo(pandora.$ui.body);
return that;
}
that.bindEvent({
pandora_page: function(data) {
setPage(data.value);
}
});
function setPage(page) {
if (page == 'home') {
// if we're on page load, show screen immediately
pandora.$ui.home = pandora.ui.home()[
!pandora.$ui.appPanel ? 'showScreen' : 'fadeInScreen'
]();
} else if (
Ox.getPositionById(pandora.site.sitePages, page) > -1
|| page == 'software'
) {
if (pandora.$ui.siteDialog && pandora.$ui.siteDialog.is(':visible')) {
pandora.$ui.siteDialog.select(page);
} else {
pandora.$ui.siteDialog = pandora.ui.siteDialog(page).open();
}
} else if (page == 'help') {
pandora.$ui.helpDialog = pandora.ui.helpDialog().open();
} else if (['signup', 'signin'].indexOf(page) > -1) {
if (pandora.user.level == 'guest') {
if (pandora.$ui.accountDialog && pandora.$ui.accountDialog.is(':visible')) {
pandora.$ui.accountDialog.options(pandora.ui.accountDialogOptions(page));
} else {
pandora.$ui.accountDialog = pandora.ui.accountDialog(page).open();
}
} else {
pandora.URL.replace('/');
}
} else if (['preferences', 'signout'].indexOf(page) > -1) {
if (pandora.user.level == 'guest') {
pandora.URL.replace('/');
} else if (page == 'preferences') {
pandora.ui.preferencesDialog().open();
} else {
pandora.ui.accountSignoutDialog().open();
}
}
}
return that;
};

View File

@ -3,29 +3,33 @@
pandora.ui.helpDialog = function() {
var content = Ox.Element().css({margin: '16px'}),
that = Ox.Dialog({
buttons: [
Ox.Button({
id: 'close',
title: 'Close'
}).bindEvent({
click: function() {
that.close();
pandora.URL.update();
}
})
],
//closeButton: true,
content: content,
height: Math.round((window.innerHeight - 24) * 0.75),
keys: {
'escape': 'close'
},
//maximizeButton: true,
minHeight: 256,
minWidth: 640,
title: 'Help',
width: Math.round(window.innerWidth * 0.75)
});
buttons: [
Ox.Button({
id: 'close',
title: 'Close'
}).bindEvent({
click: function() {
that.close();
}
})
],
closeButton: true,
content: content,
height: Math.round((window.innerHeight - 24) * 0.75),
keys: {
'escape': 'close'
},
maximizeButton: true,
minHeight: 256,
minWidth: 640,
title: 'Help',
width: Math.round(window.innerWidth * 0.75)
})
.bindEvent({
close: function(data) {
pandora.UI.set({page: ''});
}
});
pandora.api.getPage({name: 'help'}, function(result) {
//content.html(response.data.body);
content.html('Help is coming soon...')

View File

@ -134,7 +134,7 @@ pandora.ui.home = function() {
})
.bindEvent({
click: function() {
pandora.URL.update();
pandora.UI.set({page: ''});
that.fadeOutScreen();
}
})
@ -154,7 +154,7 @@ pandora.ui.home = function() {
})
.bindEvent({
click: function() {
pandora.URL.push('/signup');
pandora.UI.set({page: 'signup'});
that.fadeOutScreen();
}
}),
@ -173,7 +173,7 @@ pandora.ui.home = function() {
})
.bindEvent({
click: function() {
pandora.URL.push('/signin');
pandora.UI.set({page :'signin'});
that.fadeOutScreen();
}
}),
@ -192,7 +192,7 @@ pandora.ui.home = function() {
})
.bindEvent({
click: function() {
pandora.URL.push('/preferences');
pandora.UI.set({page: 'preferences'});
that.fadeOutScreen();
}
}),
@ -211,7 +211,7 @@ pandora.ui.home = function() {
})
.bindEvent({
click: function() {
pandora.URL.push('/about');
pandora.UI.set({page: 'about'});
that.fadeOutScreen();
}
})

View File

@ -11,8 +11,10 @@ pandora.ui.item = function() {
}, pandora.user.ui.itemView == 'info' && pandora.site.capabilities.canEditMetadata[pandora.user.level] ? 0 : -1, function(result) {
if (result.status.code == 200) {
// fixme: can the history state title get updated too?
document.title = pandora.getPageTitle(result.data.title);
// we want to cache the title in any way, so that after closing
// a dialog and getting to this item, the title is correct
var documentTitle = pandora.getDocumentTitle(result.data.title);
document.title = pandora.getPageTitle(document.location.pathname) || documentTitle;
}
/*if (result.status.code != 200) {

View File

@ -230,7 +230,7 @@ pandora.ui.mainMenu = function() {
'home', 'about', 'news', 'tour', 'faq', 'terms', 'rights', 'contact', 'software',
'signup', 'signin', 'signout', 'preferences', 'help'
].indexOf(data.id) > -1) {
pandora.URL.push('/' + data.id);
pandora.UI.set({page: data.id});
} else if ([
'newlist', 'newlistfromselection', 'newsmartlist', 'newsmartlistfromresults'
].indexOf(data.id) > -1) {

View File

@ -112,8 +112,7 @@ pandora.ui.siteDialog = function(section) {
that.options({
title: Ox.getObjectById(tabs, data.selected).title
});
pandora.URL.push({page: data.selected});
//history.pushState({page: data.selected}, '', '/' + data.selected);
pandora.UI.set({page: data.selected});
}
});
@ -125,7 +124,6 @@ pandora.ui.siteDialog = function(section) {
}).bindEvent({
click: function() {
that.close();
pandora.URL.update();
}
})
],
@ -140,6 +138,9 @@ pandora.ui.siteDialog = function(section) {
width: Math.round(window.innerWidth * 0.75),
})
.bindEvent({
close: function(data) {
pandora.UI.set({page: ''});
},
resize: function(data) {
if ($tabPanel.selected() == 'contact') {
pandora.$ui.contactForm.resize();

View File

@ -492,6 +492,25 @@ pandora.getClipsQuery = function() {
return clipsQuery;
};
(function() {
var itemTitles = {};
pandora.getDocumentTitle = function(itemTitle) {
Ox.Log('', 'ITEM TITLES', itemTitles)
if (itemTitle) {
itemTitles[pandora.user.ui.item] = itemTitle
}
var parts = [pandora.site.site.name];
if (!pandora.user.ui.item) {
pandora.user.ui._list && parts.push('List ' + pandora.user.ui._list);
parts.push(Ox.toTitleCase(pandora.user.ui.listView) + ' View');
} else {
parts.push(itemTitles[pandora.user.ui.item] || pandora.user.ui.item);
parts.push(Ox.toTitleCase(pandora.user.ui.itemView) + ' View');
}
return parts.join(' - ');
};
}());
pandora.getFilterSizes = function() {
return Ox.divideInt(
window.innerWidth - pandora.user.ui.showSidebar * pandora.user.ui.sidebarSize - 1, 5
@ -664,24 +683,26 @@ pandora.getMetadataByIdOrName = function(item, view, str, callback) {
}
};
(function() {
var itemTitles = {};
pandora.getPageTitle = function(itemTitle) {
Ox.Log('', 'ITEM TITLES', itemTitles)
if (itemTitle) {
itemTitles[pandora.user.ui.item] = itemTitle
}
var parts = [pandora.site.site.name];
if (!pandora.user.ui.item) {
pandora.user.ui._list && parts.push('List ' + pandora.user.ui._list);
parts.push(Ox.toTitleCase(pandora.user.ui.listView) + ' View');
} else {
parts.push(itemTitles[pandora.user.ui.item] || pandora.user.ui.item);
parts.push(Ox.toTitleCase(pandora.user.ui.itemView) + ' View');
}
return parts.join(' - ');
};
}());
pandora.getPageTitle = function(stateOrURL) {
var pages = Ox.merge([
{id: '', title: ''},
{id: 'help', title: 'Help'},
{id: 'home', title: ''},
{id: 'preferences', title: 'Preferences'},
{id: 'signin', title: 'Sign In'},
{id: 'signout', title: 'Sign Out'},
{id: 'signup', title: 'Sign Up'},
{id: 'software', title: 'Software'}
], pandora.site.sitePages),
page = Ox.getObjectById(
pages,
Ox.isObject(stateOrURL) ? stateOrURL.page : stateOrURL.substr(1)
);
return page
? pandora.site.site.name
+ (page.title ? ' - ' + page.title : '')
: null;
};
pandora.getSortKeyData = function(key) {
return Ox.getObjectById(pandora.site.itemKeys, key)