From bac9d68f3448b83c68ad3ea4027c2b741bd6b11b Mon Sep 17 00:00:00 2001 From: "Alex A. Naanou" Date: Thu, 31 Jan 2013 05:38:38 +0400 Subject: [PATCH] added page construction and moving + added more defaults to setCurrentPage(..)... Signed-off-by: Alex A. Naanou --- editor.html | 6 ++- magazine.js | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 125 insertions(+), 5 deletions(-) diff --git a/editor.html b/editor.html index b9aa64c..dfb903e 100755 --- a/editor.html +++ b/editor.html @@ -47,6 +47,10 @@ $(document).ready(function(){ .on('bookmarkAdded', function(_, n){makeBookmarkIndicator(n)}) .on('bookmarkRemoved', function(_, n){removeBookmarkIndicator(n)}) + // editor specific events... + .on('pageCreated articleCreated magazineCreated', resetNavigator) + .on('pageMoved articleMoved', resetNavigator) + // user interactions... .swipe({ swipeStatus: swipeHandler, @@ -170,7 +174,7 @@ CKEDITOR.on('instanceCreated', function(evt){
diff --git a/magazine.js b/magazine.js index b17a01e..bea847d 100755 --- a/magazine.js +++ b/magazine.js @@ -87,8 +87,13 @@ function getPageNumber(page){ } +// NOTE: negative values will yield results from the tail... function getPageAt(n){ - return $($('.page')[n]) + var page = $('.page') + if(n < 0){ + n = page.length + n + } + return $(page[n]) } @@ -327,11 +332,36 @@ function fitNPages(n, fit_to_content){ // - page element // NOTE: this will fire a 'pageChanged(n)' event on the viewer each time // it is called... +// NOTE: this now supports negative indexes to count pages from the end... function setCurrentPage(n, offset, width){ + var page = $('.page') if(n == null){ var cur = $('.current.page') - n = $('.page').index(cur) + // no current page... + // try to land on the magazine cover... + if(cur.length == 0){ + cur = $('.magazine > .cover') + } + // try the first cover... + if(cur.length == 0){ + cur = $('.cover.page') + } + // try first page... + if(cur.length == 0){ + cur = page.first() + } + // no pages to work with... + if(cur.length == 0){ + return + } + n = page.index(cur) } else if(typeof(n) == typeof(1)) { + // invalid n... + if(n >= page.length){ + n = page.length-1 + } else if(-n > page.length){ + n = 0 + } var cur = getPageAt(n) } else { var cur = $(n) @@ -575,6 +605,11 @@ function setupNavigator(){ }) updateNavigator() + + // need to reconstruct indicators... + $('.magazine .page .bookmark').each(function(_, e){ + makeBookmarkIndicator($(e).parents('.page')) + }) // setup event handlers... $('.viewer') @@ -583,11 +618,17 @@ function setupNavigator(){ } function clearNavigator(){ + // XXX this needs to unbind events... $('.navigator .indicator').hide() clearBookmarkIndicators() clearArticleIndicators() } +function resetNavigator(){ + clearNavigator() + setupNavigator() +} + function updateNavigator(n){ var mag = $('.magazine') @@ -854,7 +895,10 @@ function createMagazine(){ // XXX create article (magazine, title, position)... // - article // - cover -function createArticle(magazine, title){ +function createArticleBefore(article, title){ + // XXX +} +function createArticleAfter(article, title){ // XXX } @@ -862,8 +906,80 @@ function createArticle(magazine, title){ // XXX create page (article, template, position)... // - page // - content -function createPage(article, template){ +function createPageIn(article, template){ // XXX + $('.viewer').trigger('pageCreated', res) +} +// XXX the next two are almost identical... +// XXX prevent this from working outside of an article.... +function createPageAfter(page, template){ + if(page == null){ + page = $('.current.page') + } + + var res = $('
') + .addClass('page') + .append($('
') + .addClass('content') + .text('Page')) + .insertAfter(page) + + $('.viewer').trigger('pageCreated', res) + + return res +} +// XXX prevent this from working outside of an article.... +function createPageBefore(page, template){ + if(page == null){ + page = $('.current.page') + } + + var res = $('
') + .addClass('page') + .append($('
') + .addClass('content') + .text('Page')) + .insertBefore(page) + + $('.viewer').trigger('pageCreated', res) + + return res +} +// XXX make this push pages between articles... +function pushPageLeft(page){ + if(page == null){ + page = $('.current.page') + } + var prev = page.prev() + if(prev.length == 0){ + return page + } + page + .detach() + .insertBefore(prev) + setCurrentPage() + + $('.viewer').trigger('pageMoved', page) + + return page +} +// XXX make this push pages between articles... +function pushPageRight(page){ + if(page == null){ + page = $('.current.page') + } + var next = page.next() + if(next.length == 0){ + return page + } + page + .detach() + .insertAfter(next) + setCurrentPage() + + $('.viewer').trigger('pageMoved', page) + + return page }