mirror of
https://github.com/flynx/PortableMag.git
synced 2025-10-29 11:10:08 +00:00
split off the editor functions into it's own file...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
348b0269b9
commit
58418a1bff
@ -15,6 +15,8 @@
|
||||
|
||||
<script src="jli.js"></script>
|
||||
<script src="magazine.js"></script>
|
||||
<script src="navigator.js"></script>
|
||||
<script src="editor.js"></script>
|
||||
|
||||
<!-- configuration, keep this last... -->
|
||||
<script src="keybindings.js"></script>
|
||||
|
||||
197
editor.js
Executable file
197
editor.js
Executable file
@ -0,0 +1,197 @@
|
||||
/**********************************************************************
|
||||
*
|
||||
* Magazine editor actions
|
||||
*
|
||||
*
|
||||
**********************************************************************/
|
||||
|
||||
/************************************************ 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)
|
||||
loadMagazineChrome(position, bookmarks)
|
||||
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()
|
||||
var mag = loadMagazine(createMagazine(title, cover, article))
|
||||
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)
|
||||
}
|
||||
setCurrentPage()
|
||||
$('.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 :
|
||||
@ -14,6 +14,7 @@
|
||||
<script src="jli.js"></script>
|
||||
<script src="magazine.js"></script>
|
||||
<script src="navigator.js"></script>
|
||||
<!--script src="editor.js"></script-->
|
||||
|
||||
<!-- configuration, keep this last... -->
|
||||
<script src="keybindings.js"></script>
|
||||
|
||||
188
magazine.js
188
magazine.js
@ -1017,7 +1017,7 @@ function createCoverPage(data){
|
||||
|
||||
|
||||
|
||||
/*********************************************** editor: templates ***/
|
||||
/******************************************************* templates ***/
|
||||
|
||||
// NOTE: for these to be self-aplicable they must only replace the content
|
||||
// of the matched elements and not touch the element itself.
|
||||
@ -1080,8 +1080,7 @@ function runMagazineTemplates(){
|
||||
}
|
||||
|
||||
|
||||
|
||||
/************************************************ editor: magazine ***/
|
||||
/******************************************* basic magazine editor ***/
|
||||
|
||||
// load the data...
|
||||
function loadMagazineData(mag){
|
||||
@ -1089,6 +1088,8 @@ function loadMagazineData(mag){
|
||||
mag.appendTo($('.aligner'))
|
||||
return mag
|
||||
}
|
||||
|
||||
|
||||
// load chrome elements like bookmarks and navigator....
|
||||
function loadMagazineChrome(position, bookmarks){
|
||||
setupBookmarkTouchZones()
|
||||
@ -1104,23 +1105,6 @@ function loadMagazineChrome(position, bookmarks){
|
||||
updateView()
|
||||
}
|
||||
|
||||
// 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)
|
||||
loadMagazineChrome(position, bookmarks)
|
||||
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()
|
||||
var mag = loadMagazine(createMagazine(title, cover, article))
|
||||
return mag
|
||||
}
|
||||
|
||||
|
||||
// XXX some things get really surprized when this is called, make things
|
||||
// work with the mag cleared...
|
||||
@ -1134,169 +1118,5 @@ function removeMagazine(){
|
||||
|
||||
|
||||
|
||||
/************************************************* 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)
|
||||
}
|
||||
setCurrentPage()
|
||||
$('.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 :
|
||||
|
||||
@ -2,6 +2,8 @@
|
||||
*
|
||||
* Navigator
|
||||
*
|
||||
* TODO make indicator dragable
|
||||
* TODO make the bar (indicator) clickable -- go to this point.
|
||||
*
|
||||
**********************************************************************/
|
||||
// NOTE: the navigator is not live and will need to get regenerated on
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user