mirror of
https://github.com/flynx/PortableMag.git
synced 2025-10-29 11:10:08 +00:00
significant refactoring and reorganization...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
58418a1bff
commit
0600d0febe
2
TODO.otl
2
TODO.otl
@ -6,6 +6,8 @@
|
||||
[_] BUG: no drag threshold on excludedElements (TouchSwipe)
|
||||
| stalled...
|
||||
[_] 75% general todo
|
||||
[_] BUG: as on android before, on loading from json view does not reach cur page...
|
||||
| likely due to animation/transition stopping for some reason....
|
||||
[_] 0% add two main page themes (global/local applicable):
|
||||
[_] light
|
||||
[_] dark
|
||||
|
||||
@ -45,6 +45,7 @@ $(document).ready(function(){
|
||||
// setup internal events...
|
||||
.on('pageChanged bookmarkAdded bookmarkRemoved bookmarksCleared', saveState)
|
||||
.on('pageChanged', updatePageNumberIndicator)
|
||||
.on('magazineDataLoaded', loadMagazineChrome)
|
||||
|
||||
// templates...
|
||||
.on('pageCreated articleCreated magazineCreated ' +
|
||||
@ -118,8 +119,12 @@ $(document).ready(function(){
|
||||
|
||||
|
||||
// load state and setup everything that depends on it...
|
||||
// XXX load the data with loadJSON()
|
||||
loadState()
|
||||
loadMagazineChrome()
|
||||
// need to call this once per whole page load....
|
||||
setupNavigator()
|
||||
// XXX STUB, needed untill we load everything frim JSON...
|
||||
$('.viewer').trigger('magazineDataLoaded')
|
||||
|
||||
// set default view...
|
||||
togglePageView('on')
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
// as all events are ahndled by the viewer...
|
||||
function loadMagazine(mag, position, bookmarks){
|
||||
mag = loadMagazineData(mag)
|
||||
loadMagazineChrome(position, bookmarks)
|
||||
loadMagazineUserData(position, bookmarks)
|
||||
return mag
|
||||
}
|
||||
|
||||
@ -189,9 +189,5 @@ function removePage(page){
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*********************************************************************/
|
||||
// vim:set ts=4 sw=4 :
|
||||
|
||||
@ -43,6 +43,7 @@ $(document).ready(function(){
|
||||
// setup internal events...
|
||||
.on('pageChanged bookmarkAdded bookmarkRemoved bookmarksCleared', saveState)
|
||||
.on('pageChanged', updatePageNumberIndicator)
|
||||
.on('magazineDataLoaded', loadMagazineChrome)
|
||||
|
||||
// user interactions...
|
||||
.swipe({
|
||||
@ -106,7 +107,10 @@ $(document).ready(function(){
|
||||
// load state and setup everything that depends on it...
|
||||
// XXX load the data with loadJSON()
|
||||
loadState()
|
||||
loadMagazineChrome()
|
||||
// need to call this once per whole page load....
|
||||
setupNavigator()
|
||||
// XXX STUB, needed untill we load everything frim JSON...
|
||||
$('.viewer').trigger('magazineDataLoaded')
|
||||
|
||||
// set default view...
|
||||
togglePageView('on')
|
||||
|
||||
27
magazine.js
27
magazine.js
@ -400,7 +400,7 @@ function goToMagazineCover(){
|
||||
return setCurrentPage(0)
|
||||
}
|
||||
function goToMagazineEnd(){
|
||||
return setCurrentPage($('.page').length-1)
|
||||
return setCurrentPage(-1)
|
||||
}
|
||||
function goToArticleCover(){
|
||||
// try and get the actual first cover...
|
||||
@ -897,7 +897,7 @@ function buildJSON(export_bookmarks, export_position){
|
||||
return res
|
||||
}
|
||||
|
||||
function loadJSON(data, ignore_chrome){
|
||||
function loadJSON(data, load_user_data){
|
||||
function _build(block, elem){
|
||||
|
||||
// page...
|
||||
@ -955,8 +955,8 @@ function loadJSON(data, ignore_chrome){
|
||||
mag.children('.current.page').removeClass('current')
|
||||
loadMagazineData(mag)
|
||||
|
||||
if(!ignore_chrome){
|
||||
loadMagazineChrome(data.position, data.bookmarks)
|
||||
if(load_user_data){
|
||||
loadMagazineUserData(data.position, data.bookmarks)
|
||||
}
|
||||
}
|
||||
|
||||
@ -1080,29 +1080,34 @@ function runMagazineTemplates(){
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************* basic magazine editor ***/
|
||||
// NOTE: these are mostly needed for loading magazines...
|
||||
|
||||
// load the data...
|
||||
function loadMagazineData(mag){
|
||||
removeMagazine()
|
||||
mag.appendTo($('.aligner'))
|
||||
$('.viewer').trigger('magazineDataLoaded')
|
||||
return mag
|
||||
}
|
||||
|
||||
// NOTE: this needs to be called once per magazine load...
|
||||
function loadMagazineChrome(){
|
||||
setupBookmarkTouchZones()
|
||||
runMagazineTemplates()
|
||||
updateView()
|
||||
$('.viewer').trigger('magazineChromeLoaded')
|
||||
}
|
||||
|
||||
// load chrome elements like bookmarks and navigator....
|
||||
function loadMagazineChrome(position, bookmarks){
|
||||
setupBookmarkTouchZones()
|
||||
setupNavigator()
|
||||
function loadMagazineUserData(position, bookmarks){
|
||||
if(position){
|
||||
setCurrentPage(position)
|
||||
}
|
||||
if(bookmarks){
|
||||
loadBookmarks(bookmarks != null ? bookmarks : [])
|
||||
}
|
||||
runMagazineTemplates()
|
||||
// XXX do we need to cover this with a splash???
|
||||
updateView()
|
||||
}
|
||||
|
||||
|
||||
@ -1113,7 +1118,7 @@ function loadMagazineChrome(position, bookmarks){
|
||||
// on removed elements -- unbind and remove or just forget about it?
|
||||
function removeMagazine(){
|
||||
$('.magazine').remove()
|
||||
clearNavigator()
|
||||
$('.viewer').trigger('magazineRemoved')
|
||||
}
|
||||
|
||||
|
||||
|
||||
174
navigator.js
174
navigator.js
@ -6,6 +6,95 @@
|
||||
* TODO make the bar (indicator) clickable -- go to this point.
|
||||
*
|
||||
**********************************************************************/
|
||||
|
||||
function setupNavigator(skip_events){
|
||||
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'))
|
||||
})
|
||||
|
||||
// XXX make these run only once...
|
||||
if(!skip_events){
|
||||
// setup event handlers...
|
||||
$('.viewer')
|
||||
// basic functions...
|
||||
.on('pageChanged', function(e, n){updateNavigator(n)})
|
||||
.on('magazineDragging', function(){updateNavigator()})
|
||||
// bookmarks...
|
||||
.on('bookmarksCleared', clearBookmarkIndicators)
|
||||
.on('bookmarkAdded', function(_, n){makeBookmarkIndicator(n)})
|
||||
.on('bookmarkRemoved', function(_, n){removeBookmarkIndicator(n)})
|
||||
// editor specific events...
|
||||
.on('pageCreated articleCreated magazineCreated ' +
|
||||
'pageMoved articleMoved pageRemoved articleRemoved', resetNavigator)
|
||||
// lifecycle events...
|
||||
.on('magazineDataLoaded', resetNavigator)
|
||||
.on('magazineRemoved', clearNavigator)
|
||||
}
|
||||
}
|
||||
|
||||
// XXX this needs to unbind events...
|
||||
function clearNavigator(){
|
||||
$('.navigator .indicator').hide()
|
||||
clearBookmarkIndicators()
|
||||
clearArticleIndicators()
|
||||
}
|
||||
|
||||
function resetNavigator(){
|
||||
clearNavigator()
|
||||
setupNavigator(skip_events=true)
|
||||
}
|
||||
|
||||
|
||||
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
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
// NOTE: the navigator is not live and will need to get regenerated on
|
||||
// each magazine edit...
|
||||
|
||||
@ -47,91 +136,6 @@ function clearArticleIndicators(){
|
||||
}
|
||||
|
||||
|
||||
function setupNavigator(skip_events){
|
||||
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'))
|
||||
})
|
||||
|
||||
if(!skip_events){
|
||||
// setup event handlers...
|
||||
$('.viewer')
|
||||
// basic functions...
|
||||
.on('pageChanged', function(e, n){updateNavigator(n)})
|
||||
.on('magazineDragging', function(){updateNavigator()})
|
||||
// bookmarks...
|
||||
.on('bookmarksCleared', clearBookmarkIndicators)
|
||||
.on('bookmarkAdded', function(_, n){makeBookmarkIndicator(n)})
|
||||
.on('bookmarkRemoved', function(_, n){removeBookmarkIndicator(n)})
|
||||
// editor specific events...
|
||||
.on('pageCreated articleCreated magazineCreated', resetNavigator)
|
||||
.on('pageMoved articleMoved', resetNavigator)
|
||||
.on('pageRemoved articleRemoved', resetNavigator)
|
||||
}
|
||||
}
|
||||
|
||||
// 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
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************* bookmarks ***/
|
||||
|
||||
function makeBookmarkIndicator(n){
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user