mirror of
https://github.com/flynx/PortableMag.git
synced 2025-11-03 05:20:11 +00:00
split off the navigator code into it's own file...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
5f18f87e74
commit
30083d52a2
@ -13,6 +13,7 @@
|
||||
|
||||
<script src="jli.js"></script>
|
||||
<script src="magazine.js"></script>
|
||||
<script src="navigator.js"></script>
|
||||
|
||||
<!-- configuration, keep this last... -->
|
||||
<script src="keybindings.js"></script>
|
||||
|
||||
163
magazine.js
163
magazine.js
@ -555,163 +555,6 @@ function prevBookmark(){
|
||||
|
||||
|
||||
|
||||
/******************************************************* navigator ***/
|
||||
// NOTE: the navigator is not live and will need to get regenerated on
|
||||
// each magazine edit...
|
||||
|
||||
// NOTE: article indicators will be regenirated on magazine structure
|
||||
// change, so there is no use of linking to actual pages.
|
||||
// ...no need in making this live.
|
||||
function makeArticleIndicator(i, article, width){
|
||||
var bar = $('.navigator .bar')
|
||||
var article = $(article)
|
||||
var n = getPageNumber(article.children('.cover').first())
|
||||
$('<div/>')
|
||||
.prependTo($('.navigator .bar'))
|
||||
.addClass('article')
|
||||
.css({
|
||||
width: width,
|
||||
left: width*n
|
||||
})
|
||||
.swipe({
|
||||
click: function(){
|
||||
setCurrentPage(n)
|
||||
}
|
||||
})
|
||||
return article
|
||||
}
|
||||
|
||||
|
||||
function setupArticleIndicators(W){
|
||||
var articles = $('.magazine .article')
|
||||
// cleanup...
|
||||
clearArticleIndicators()
|
||||
// set article indicator positions...
|
||||
articles.each(function(i, e){
|
||||
return makeArticleIndicator(i, e, W)
|
||||
})
|
||||
}
|
||||
|
||||
function clearArticleIndicators(){
|
||||
$('.navigator .bar .article').remove()
|
||||
}
|
||||
|
||||
|
||||
function setupNavigator(){
|
||||
var bar = $('.navigator .bar')
|
||||
var elems = $('.navigator .indicator, .navigator .article')
|
||||
var pos = $('.navigator .indicator').fadeIn()
|
||||
var pages = $('.page').length
|
||||
var mag = $('.magazine')
|
||||
|
||||
var W = bar.width()/pages
|
||||
|
||||
setupArticleIndicators(W)
|
||||
|
||||
// set navigator element sizes...
|
||||
elems.css({
|
||||
width: W
|
||||
})
|
||||
|
||||
updateNavigator()
|
||||
|
||||
// need to reconstruct indicators...
|
||||
$('.magazine .page .bookmark').each(function(_, e){
|
||||
makeBookmarkIndicator($(e).parents('.page'))
|
||||
})
|
||||
|
||||
// setup event handlers...
|
||||
$('.viewer')
|
||||
.on('pageChanged', function(e, n){updateNavigator(n)})
|
||||
.on('magazineDragging', function(){updateNavigator()})
|
||||
}
|
||||
|
||||
// XXX this needs to unbind events...
|
||||
function clearNavigator(){
|
||||
$('.navigator .indicator').hide()
|
||||
clearBookmarkIndicators()
|
||||
clearArticleIndicators()
|
||||
}
|
||||
|
||||
function resetNavigator(){
|
||||
clearNavigator()
|
||||
setupNavigator()
|
||||
}
|
||||
|
||||
|
||||
function updateNavigator(n){
|
||||
var mag = $('.magazine')
|
||||
var page = $('.page')
|
||||
var bar = $('.navigator .bar')
|
||||
var pos = $('.navigator .indicator')
|
||||
|
||||
var pn = page.length
|
||||
|
||||
var bW = bar.width()
|
||||
var mW = mag.width()
|
||||
var PW = page.width()
|
||||
var pW = bar.width()/pn
|
||||
|
||||
if(n == null){
|
||||
// XXX this behaves erratically if the page is zoomed...
|
||||
var res = (-parseFloat(mag.css('left'))/(mW-PW)) * (bW-pW)
|
||||
} else {
|
||||
res = pW*n
|
||||
}
|
||||
|
||||
// normalize the position...
|
||||
res = res > 0 ? res: 0
|
||||
res = res < (bW-pW) ? res: (bW-pW)
|
||||
|
||||
// set indicator position...
|
||||
pos.css({
|
||||
left: res
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
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 + width*0.75
|
||||
})
|
||||
.attr({
|
||||
page: n
|
||||
})
|
||||
.swipe({
|
||||
click: function(){
|
||||
setCurrentPage(n)
|
||||
}
|
||||
})
|
||||
|
||||
return res
|
||||
}
|
||||
|
||||
function clearBookmarkIndicators(){
|
||||
$('.navigator .bar .bookmark').remove()
|
||||
}
|
||||
function removeBookmarkIndicator(n){
|
||||
$('.navigator .bar .bookmark[page="'+n+'"]').remove()
|
||||
}
|
||||
|
||||
|
||||
// NOTE: this is 1 based page number, the rest of the system is 0 based.
|
||||
function updatePageNumberIndicator(){
|
||||
$('.page-number').text((getPageNumber()+1)+'/'+$('.page').length)
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*********************************************************** state ****
|
||||
*
|
||||
* Local state consists of:
|
||||
@ -969,6 +812,8 @@ JSONMetadata = {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function readMetadata(elem, res, metadata){
|
||||
if(res == null){
|
||||
res = {}
|
||||
@ -1003,6 +848,7 @@ function writeMetadata(elem, res, metadata){
|
||||
return elem
|
||||
}
|
||||
|
||||
|
||||
function buildJSON(export_bookmarks, export_position){
|
||||
function _getContent(_, elem){
|
||||
elem = $(elem)
|
||||
@ -1093,6 +939,8 @@ function loadJSON(data, ignore_chrome){
|
||||
// XXX check version...
|
||||
var version = data['format-version']
|
||||
if(version != JSON_VERSION){
|
||||
// XXX this might be a good spot to add data conversion between
|
||||
// versions...
|
||||
console.warn('WARNING: JSON Format Version Mismatch.')
|
||||
}
|
||||
|
||||
@ -1104,7 +952,6 @@ function loadJSON(data, ignore_chrome){
|
||||
_build(mag, e)
|
||||
})
|
||||
// remove service classes...
|
||||
// XXX should we do this here, on build or in both places...
|
||||
mag.children('.current.page').removeClass('current')
|
||||
loadMagazineData(mag)
|
||||
|
||||
|
||||
164
navigator.js
Executable file
164
navigator.js
Executable file
@ -0,0 +1,164 @@
|
||||
/**********************************************************************
|
||||
*
|
||||
* Navigator
|
||||
*
|
||||
*
|
||||
**********************************************************************/
|
||||
// NOTE: the navigator is not live and will need to get regenerated on
|
||||
// each magazine edit...
|
||||
|
||||
// NOTE: article indicators will be regenirated on magazine structure
|
||||
// change, so there is no use of linking to actual pages.
|
||||
// ...no need in making this live.
|
||||
function makeArticleIndicator(i, article, width){
|
||||
var bar = $('.navigator .bar')
|
||||
var article = $(article)
|
||||
var n = getPageNumber(article.children('.cover').first())
|
||||
$('<div/>')
|
||||
.prependTo($('.navigator .bar'))
|
||||
.addClass('article')
|
||||
.css({
|
||||
width: width,
|
||||
left: width*n
|
||||
})
|
||||
.swipe({
|
||||
click: function(){
|
||||
setCurrentPage(n)
|
||||
}
|
||||
})
|
||||
return article
|
||||
}
|
||||
|
||||
|
||||
function setupArticleIndicators(W){
|
||||
var articles = $('.magazine .article')
|
||||
// cleanup...
|
||||
clearArticleIndicators()
|
||||
// set article indicator positions...
|
||||
articles.each(function(i, e){
|
||||
return makeArticleIndicator(i, e, W)
|
||||
})
|
||||
}
|
||||
|
||||
function clearArticleIndicators(){
|
||||
$('.navigator .bar .article').remove()
|
||||
}
|
||||
|
||||
|
||||
function setupNavigator(){
|
||||
var bar = $('.navigator .bar')
|
||||
var elems = $('.navigator .indicator, .navigator .article')
|
||||
var pos = $('.navigator .indicator').fadeIn()
|
||||
var pages = $('.page').length
|
||||
var mag = $('.magazine')
|
||||
|
||||
var W = bar.width()/pages
|
||||
|
||||
setupArticleIndicators(W)
|
||||
|
||||
// set navigator element sizes...
|
||||
elems.css({
|
||||
width: W
|
||||
})
|
||||
|
||||
updateNavigator()
|
||||
|
||||
// need to reconstruct indicators...
|
||||
$('.magazine .page .bookmark').each(function(_, e){
|
||||
makeBookmarkIndicator($(e).parents('.page'))
|
||||
})
|
||||
|
||||
// setup event handlers...
|
||||
$('.viewer')
|
||||
.on('pageChanged', function(e, n){updateNavigator(n)})
|
||||
.on('magazineDragging', function(){updateNavigator()})
|
||||
}
|
||||
|
||||
// XXX this needs to unbind events...
|
||||
function clearNavigator(){
|
||||
$('.navigator .indicator').hide()
|
||||
clearBookmarkIndicators()
|
||||
clearArticleIndicators()
|
||||
}
|
||||
|
||||
function resetNavigator(){
|
||||
clearNavigator()
|
||||
setupNavigator()
|
||||
}
|
||||
|
||||
|
||||
function updateNavigator(n){
|
||||
var mag = $('.magazine')
|
||||
var page = $('.page')
|
||||
var bar = $('.navigator .bar')
|
||||
var pos = $('.navigator .indicator')
|
||||
|
||||
var pn = page.length
|
||||
|
||||
var bW = bar.width()
|
||||
var mW = mag.width()
|
||||
var PW = page.width()
|
||||
var pW = bar.width()/pn
|
||||
|
||||
if(n == null){
|
||||
// XXX this behaves erratically if the page is zoomed...
|
||||
var res = (-parseFloat(mag.css('left'))/(mW-PW)) * (bW-pW)
|
||||
} else {
|
||||
res = pW*n
|
||||
}
|
||||
|
||||
// normalize the position...
|
||||
res = res > 0 ? res: 0
|
||||
res = res < (bW-pW) ? res: (bW-pW)
|
||||
|
||||
// set indicator position...
|
||||
pos.css({
|
||||
left: res
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
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 + width*0.75
|
||||
})
|
||||
.attr({
|
||||
page: n
|
||||
})
|
||||
.swipe({
|
||||
click: function(){
|
||||
setCurrentPage(n)
|
||||
}
|
||||
})
|
||||
|
||||
return res
|
||||
}
|
||||
|
||||
function clearBookmarkIndicators(){
|
||||
$('.navigator .bar .bookmark').remove()
|
||||
}
|
||||
function removeBookmarkIndicator(n){
|
||||
$('.navigator .bar .bookmark[page="'+n+'"]').remove()
|
||||
}
|
||||
|
||||
|
||||
// NOTE: this is 1 based page number, the rest of the system is 0 based.
|
||||
function updatePageNumberIndicator(){
|
||||
$('.page-number').text((getPageNumber()+1)+'/'+$('.page').length)
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*********************************************************************/
|
||||
// vim:set ts=4 sw=4 :
|
||||
Loading…
x
Reference in New Issue
Block a user