mirror of
https://github.com/flynx/PortableMag.git
synced 2026-01-04 17:51:28 +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)
|
[_] BUG: no drag threshold on excludedElements (TouchSwipe)
|
||||||
| stalled...
|
| stalled...
|
||||||
[_] 75% general todo
|
[_] 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):
|
[_] 0% add two main page themes (global/local applicable):
|
||||||
[_] light
|
[_] light
|
||||||
[_] dark
|
[_] dark
|
||||||
|
|||||||
@ -45,6 +45,7 @@ $(document).ready(function(){
|
|||||||
// setup internal events...
|
// setup internal events...
|
||||||
.on('pageChanged bookmarkAdded bookmarkRemoved bookmarksCleared', saveState)
|
.on('pageChanged bookmarkAdded bookmarkRemoved bookmarksCleared', saveState)
|
||||||
.on('pageChanged', updatePageNumberIndicator)
|
.on('pageChanged', updatePageNumberIndicator)
|
||||||
|
.on('magazineDataLoaded', loadMagazineChrome)
|
||||||
|
|
||||||
// templates...
|
// templates...
|
||||||
.on('pageCreated articleCreated magazineCreated ' +
|
.on('pageCreated articleCreated magazineCreated ' +
|
||||||
@ -118,8 +119,12 @@ $(document).ready(function(){
|
|||||||
|
|
||||||
|
|
||||||
// load state and setup everything that depends on it...
|
// load state and setup everything that depends on it...
|
||||||
|
// XXX load the data with loadJSON()
|
||||||
loadState()
|
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...
|
// set default view...
|
||||||
togglePageView('on')
|
togglePageView('on')
|
||||||
|
|||||||
@ -11,7 +11,7 @@
|
|||||||
// as all events are ahndled by the viewer...
|
// as all events are ahndled by the viewer...
|
||||||
function loadMagazine(mag, position, bookmarks){
|
function loadMagazine(mag, position, bookmarks){
|
||||||
mag = loadMagazineData(mag)
|
mag = loadMagazineData(mag)
|
||||||
loadMagazineChrome(position, bookmarks)
|
loadMagazineUserData(position, bookmarks)
|
||||||
return mag
|
return mag
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -189,9 +189,5 @@ function removePage(page){
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*********************************************************************/
|
/*********************************************************************/
|
||||||
// vim:set ts=4 sw=4 :
|
// vim:set ts=4 sw=4 :
|
||||||
|
|||||||
@ -43,6 +43,7 @@ $(document).ready(function(){
|
|||||||
// setup internal events...
|
// setup internal events...
|
||||||
.on('pageChanged bookmarkAdded bookmarkRemoved bookmarksCleared', saveState)
|
.on('pageChanged bookmarkAdded bookmarkRemoved bookmarksCleared', saveState)
|
||||||
.on('pageChanged', updatePageNumberIndicator)
|
.on('pageChanged', updatePageNumberIndicator)
|
||||||
|
.on('magazineDataLoaded', loadMagazineChrome)
|
||||||
|
|
||||||
// user interactions...
|
// user interactions...
|
||||||
.swipe({
|
.swipe({
|
||||||
@ -106,7 +107,10 @@ $(document).ready(function(){
|
|||||||
// load state and setup everything that depends on it...
|
// load state and setup everything that depends on it...
|
||||||
// XXX load the data with loadJSON()
|
// XXX load the data with loadJSON()
|
||||||
loadState()
|
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...
|
// set default view...
|
||||||
togglePageView('on')
|
togglePageView('on')
|
||||||
|
|||||||
27
magazine.js
27
magazine.js
@ -400,7 +400,7 @@ function goToMagazineCover(){
|
|||||||
return setCurrentPage(0)
|
return setCurrentPage(0)
|
||||||
}
|
}
|
||||||
function goToMagazineEnd(){
|
function goToMagazineEnd(){
|
||||||
return setCurrentPage($('.page').length-1)
|
return setCurrentPage(-1)
|
||||||
}
|
}
|
||||||
function goToArticleCover(){
|
function goToArticleCover(){
|
||||||
// try and get the actual first cover...
|
// try and get the actual first cover...
|
||||||
@ -897,7 +897,7 @@ function buildJSON(export_bookmarks, export_position){
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadJSON(data, ignore_chrome){
|
function loadJSON(data, load_user_data){
|
||||||
function _build(block, elem){
|
function _build(block, elem){
|
||||||
|
|
||||||
// page...
|
// page...
|
||||||
@ -955,8 +955,8 @@ function loadJSON(data, ignore_chrome){
|
|||||||
mag.children('.current.page').removeClass('current')
|
mag.children('.current.page').removeClass('current')
|
||||||
loadMagazineData(mag)
|
loadMagazineData(mag)
|
||||||
|
|
||||||
if(!ignore_chrome){
|
if(load_user_data){
|
||||||
loadMagazineChrome(data.position, data.bookmarks)
|
loadMagazineUserData(data.position, data.bookmarks)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1080,29 +1080,34 @@ function runMagazineTemplates(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************* basic magazine editor ***/
|
/******************************************* basic magazine editor ***/
|
||||||
|
// NOTE: these are mostly needed for loading magazines...
|
||||||
|
|
||||||
// load the data...
|
// load the data...
|
||||||
function loadMagazineData(mag){
|
function loadMagazineData(mag){
|
||||||
removeMagazine()
|
removeMagazine()
|
||||||
mag.appendTo($('.aligner'))
|
mag.appendTo($('.aligner'))
|
||||||
|
$('.viewer').trigger('magazineDataLoaded')
|
||||||
return mag
|
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....
|
// load chrome elements like bookmarks and navigator....
|
||||||
function loadMagazineChrome(position, bookmarks){
|
function loadMagazineUserData(position, bookmarks){
|
||||||
setupBookmarkTouchZones()
|
|
||||||
setupNavigator()
|
|
||||||
if(position){
|
if(position){
|
||||||
setCurrentPage(position)
|
setCurrentPage(position)
|
||||||
}
|
}
|
||||||
if(bookmarks){
|
if(bookmarks){
|
||||||
loadBookmarks(bookmarks != null ? 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?
|
// on removed elements -- unbind and remove or just forget about it?
|
||||||
function removeMagazine(){
|
function removeMagazine(){
|
||||||
$('.magazine').remove()
|
$('.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.
|
* 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
|
// NOTE: the navigator is not live and will need to get regenerated on
|
||||||
// each magazine edit...
|
// 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 ***/
|
/******************************************************* bookmarks ***/
|
||||||
|
|
||||||
function makeBookmarkIndicator(n){
|
function makeBookmarkIndicator(n){
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user