added basic persistent bookmarks ...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2013-01-28 17:14:47 +04:00
parent 1110c1d195
commit a022c11743
2 changed files with 80 additions and 5 deletions

View File

@ -271,8 +271,8 @@ body {
.navigator .bar .indicator {
position: absolute;
/* set this to the percentage of a page from magazine length */
width: 1%;
min-width: 10px;
width: 1%;
height: 100%;
}
.navigator .bar .article {
@ -301,6 +301,22 @@ body {
-ms-transition: none;
transition: none;
}
.navigator .bar .bookmark {
position: absolute;
font-size: 0px;
width: 5px;
height: 5px;
top: -250%;
background: red;
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-o-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
}
/* splash screen. used to hide loading and aligning elements */
.splash {

View File

@ -78,6 +78,9 @@ function getPageNumber(page){
return $('.page').index(page)
}
function getPageAt(n){
return $($('.page')[n])
}
/************************************************** event handlers ***/
@ -315,7 +318,7 @@ function setCurrentPage(n, offset, width){
var cur = $('.current.page')
n = $('.page').index(cur)
} else if(typeof(n) == typeof(1)) {
var cur = $($('.page')[n])
var cur = getPageAt(n)
} else {
var cur = $(n)
n = $('.page').index(cur)
@ -504,10 +507,14 @@ function saveURLState(){
// local storage state managers...
function loadStorageState(){
return parseInt($.jStorage.get('current_page', 0))
return {
current_page: parseInt($.jStorage.get('current_page', 0)),
bookmarks: $.jStorage.get('bookmarks', [])
}
}
function saveStorageState(){
$.jStorage.set('current_page', getPageNumber())
$.jStorage.set('bookmarks', getBookmarkList())
}
@ -526,11 +533,13 @@ function dumpJSONState(){
// generic state managers...
function loadState(){
var n = loadURLState()
var state = loadStorageState()
if(n != null){
setCurrentPage(n)
} else {
setCurrentPage(loadStorageState())
setCurrentPage(state.current_page)
}
loadBookmarks(state.bookmarks)
}
function saveState(){
saveURLState()
@ -562,7 +571,7 @@ function _makeArticleIndicator(i, article, width){
function setupArticleIndicators(W){
var articles = $('.magazine .article')
// cleanup...
$('.indicator .bar .article').remove()
$('.navigator .bar .article').remove()
// set article indicator positions...
articles.each(function(i, e){
return _makeArticleIndicator(i, e, W)
@ -626,6 +635,56 @@ function updateNavigator(n){
}
// XXX store bookmarks in a seporate place...
// NOTE: this depends on the indicator bar...
function makeBookmarkIndicator(n){
if(n == null){
n = getPageNumber()
} else if(typeof(n) != typeof(1)){
n = getPageNumber(n)
}
var bar = $('.navigator .bar')
var pages = $('.page').length
var width = bar.width()/pages
var res = $('<div/>')
.prependTo($('.navigator .bar'))
.addClass('bookmark')
.css({
left: width*n
})
.attr({
page: n
})
.click(function(){
setCurrentPage(n)
})
// XXX should this be here???
saveState()
return res
}
function loadBookmarks(lst){
$(lst).each(function(i, e){makeBookmarkIndicator(e)})
}
function getBookmarkList(){
var res = []
$('.navigator .bar .bookmark').each(function(_, e){res.push(parseInt($(e).attr('page')))})
return res
}
function clearBookmarkIndicators(){
$('.navigator .bar .bookmark').remove()
}
// XXX move this to actions...
function nextBookmark(){
// XXX
}
function prevBookmark(){
// XXX
}
/********************************************************** editor ***/