2013-02-02 07:35:17 +04:00
|
|
|
/**********************************************************************
|
|
|
|
|
*
|
|
|
|
|
* Magazine editor actions
|
|
|
|
|
*
|
2013-02-08 21:04:00 +04:00
|
|
|
* XXX do a generic shift left/right add/remove set of function and build
|
|
|
|
|
* selectors around them...
|
2013-02-02 07:35:17 +04:00
|
|
|
*
|
|
|
|
|
**********************************************************************/
|
|
|
|
|
|
2013-02-08 21:04:00 +04:00
|
|
|
/********************************************************* generic ***/
|
|
|
|
|
|
|
|
|
|
// move element to target and atach it at position
|
|
|
|
|
// position can be 'before', 'after' (default), 'prepend' or 'append'
|
|
|
|
|
function moveElementTo(elem, target, position){
|
|
|
|
|
elem
|
|
|
|
|
.detach()
|
2013-02-08 21:09:36 +04:00
|
|
|
[position == 'before'? 'insertBefore'
|
2013-02-08 21:04:00 +04:00
|
|
|
: position == 'append'? 'appendTo'
|
2013-02-08 21:09:36 +04:00
|
|
|
: position == 'prepend'? 'prependTo'
|
|
|
|
|
// the default...
|
|
|
|
|
: 'insertAfter'](target)
|
2013-02-08 21:04:00 +04:00
|
|
|
return elem
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-02-02 07:35:17 +04:00
|
|
|
/************************************************ editor: magazine ***/
|
|
|
|
|
|
|
|
|
|
// NOTE: we do not need to create any event handlers here specifically
|
|
|
|
|
// as all events are ahndled by the viewer...
|
|
|
|
|
function loadMagazine(mag, position, bookmarks){
|
|
|
|
|
mag = loadMagazineData(mag)
|
2013-02-02 08:36:54 +04:00
|
|
|
loadMagazineUserData(position, bookmarks)
|
2013-02-02 07:35:17 +04:00
|
|
|
return mag
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// NOTE: this will, in addition to the magazine itself, will populate with
|
|
|
|
|
// the basic content (cover, article, article cover)
|
|
|
|
|
function createBaseMagazine(title, cover, article){
|
|
|
|
|
removeMagazine()
|
2013-02-09 03:08:48 +04:00
|
|
|
var mag = loadMagazine(createMagazine(title, cover, article), 0, [])
|
2013-02-02 07:35:17 +04:00
|
|
|
return mag
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/************************************************* editor: article ***/
|
|
|
|
|
|
|
|
|
|
function createArticleBefore(article, title){
|
|
|
|
|
if(article == null){
|
|
|
|
|
article = $('.current.page').parents('.article')
|
|
|
|
|
}
|
|
|
|
|
// XXX fill the data...
|
|
|
|
|
var res = createArticle().insertBefore(article)
|
|
|
|
|
setCurrentPage()
|
|
|
|
|
$('.viewer').trigger('articleCreated', res)
|
|
|
|
|
return res
|
|
|
|
|
}
|
|
|
|
|
function createArticleAfter(article, title){
|
|
|
|
|
if(article == null){
|
|
|
|
|
article = $('.current.page').parents('.article')
|
|
|
|
|
}
|
|
|
|
|
// XXX fill the data...
|
|
|
|
|
var res = createArticle().insertAfter(article)
|
|
|
|
|
setCurrentPage()
|
|
|
|
|
$('.viewer').trigger('articleCreated', res)
|
|
|
|
|
return res
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// XXX TEST!
|
|
|
|
|
function shiftArticleLeft(article){
|
|
|
|
|
var articles = $('.article')
|
|
|
|
|
var i = articles.index(article)
|
|
|
|
|
if(i <= 0){
|
|
|
|
|
return article
|
|
|
|
|
}
|
|
|
|
|
var target = $(articles[i-1])
|
|
|
|
|
article
|
|
|
|
|
.detach()
|
|
|
|
|
.insertBefore(target)
|
|
|
|
|
setCurrentPage()
|
|
|
|
|
$('.viewer').trigger('articleMoved', res)
|
|
|
|
|
return res
|
|
|
|
|
}
|
|
|
|
|
// XXX TEST!
|
|
|
|
|
function shiftArticleRight(article){
|
|
|
|
|
var articles = $('.article')
|
|
|
|
|
var i = articles.index(article)
|
|
|
|
|
if(i >= articles.length){
|
|
|
|
|
return article
|
|
|
|
|
}
|
|
|
|
|
var target = $(articles[i+1])
|
|
|
|
|
article
|
|
|
|
|
.detach()
|
|
|
|
|
.insertAfter(target)
|
|
|
|
|
setCurrentPage()
|
|
|
|
|
$('.viewer').trigger('articleMoved', res)
|
|
|
|
|
return res
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function removeArticle(article){
|
|
|
|
|
if(article == null){
|
|
|
|
|
article = $('.current.page').parents('.article')
|
|
|
|
|
}
|
|
|
|
|
article.remove()
|
|
|
|
|
setCurrentPage()
|
|
|
|
|
$('.viewer').trigger('articleRemoved', res)
|
|
|
|
|
return res
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*************************************************** editor: pages ***/
|
|
|
|
|
|
|
|
|
|
function createPageIn(article, template){
|
|
|
|
|
if(article == null){
|
|
|
|
|
article = $('.current.page').parents('.article')
|
|
|
|
|
}
|
|
|
|
|
// no article
|
|
|
|
|
if(article.length == 0){
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
var res = createPage(template).appendTo(article)
|
|
|
|
|
$('.viewer').trigger('pageCreated', res)
|
|
|
|
|
return 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 = createPage(template).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 = createPage(template).insertBefore(page)
|
|
|
|
|
$('.viewer').trigger('pageCreated', res)
|
|
|
|
|
return res
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// NOTE: on negative position this will position the element after the
|
|
|
|
|
// target, e.g. position -1 is the last element, etc.
|
|
|
|
|
// XXX at this point there is no way to move something to either an
|
|
|
|
|
// article or a magazine that do not contain any pages directly...
|
|
|
|
|
// ...add special cases:
|
|
|
|
|
// - if we are moving the page in the direction of an empty article
|
|
|
|
|
// push the page into the article...
|
|
|
|
|
// - if we are moving page 0 left and the magazine has no cover
|
|
|
|
|
// push it to the magazine...
|
|
|
|
|
function movePageTo(page, position){
|
|
|
|
|
if(page == null){
|
|
|
|
|
page = $('.current.page')
|
|
|
|
|
}
|
|
|
|
|
if(position >= $('.page').length){
|
|
|
|
|
position = -1
|
|
|
|
|
}
|
|
|
|
|
var target = getPageAt(position)
|
|
|
|
|
page.detach()
|
|
|
|
|
if(position >= 0){
|
|
|
|
|
page.insertBefore(target)
|
|
|
|
|
} else {
|
|
|
|
|
page.insertAfter(target)
|
|
|
|
|
}
|
2013-03-03 01:18:09 +04:00
|
|
|
setCurrentPage(page)
|
2013-02-02 07:35:17 +04:00
|
|
|
$('.viewer').trigger('pageMoved', page)
|
|
|
|
|
return page
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function shiftPageLeft(page){
|
|
|
|
|
if(page == null){
|
|
|
|
|
page = $('.current.page')
|
|
|
|
|
}
|
|
|
|
|
movePageTo(page, getPageNumber(page)-1)
|
|
|
|
|
return page
|
|
|
|
|
}
|
|
|
|
|
function shiftPageRight(page){
|
|
|
|
|
if(page == null){
|
|
|
|
|
page = $('.current.page')
|
|
|
|
|
}
|
|
|
|
|
movePageTo(page, getPageNumber(page)+2)
|
|
|
|
|
return page
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function removePage(page){
|
|
|
|
|
if(page == null){
|
|
|
|
|
page = $('.current.page')
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var cur = getPageNumber()
|
|
|
|
|
page.remove()
|
|
|
|
|
setCurrentPage(cur)
|
|
|
|
|
$('.viewer').trigger('pageRemoved', page)
|
|
|
|
|
return page
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*********************************************************************/
|
|
|
|
|
// vim:set ts=4 sw=4 :
|