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="jli.js"></script>
|
||||||
<script src="magazine.js"></script>
|
<script src="magazine.js"></script>
|
||||||
|
<script src="navigator.js"></script>
|
||||||
|
<script src="editor.js"></script>
|
||||||
|
|
||||||
<!-- configuration, keep this last... -->
|
<!-- configuration, keep this last... -->
|
||||||
<script src="keybindings.js"></script>
|
<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="jli.js"></script>
|
||||||
<script src="magazine.js"></script>
|
<script src="magazine.js"></script>
|
||||||
<script src="navigator.js"></script>
|
<script src="navigator.js"></script>
|
||||||
|
<!--script src="editor.js"></script-->
|
||||||
|
|
||||||
<!-- configuration, keep this last... -->
|
<!-- configuration, keep this last... -->
|
||||||
<script src="keybindings.js"></script>
|
<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
|
// NOTE: for these to be self-aplicable they must only replace the content
|
||||||
// of the matched elements and not touch the element itself.
|
// of the matched elements and not touch the element itself.
|
||||||
@ -1080,8 +1080,7 @@ function runMagazineTemplates(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************* basic magazine editor ***/
|
||||||
/************************************************ editor: magazine ***/
|
|
||||||
|
|
||||||
// load the data...
|
// load the data...
|
||||||
function loadMagazineData(mag){
|
function loadMagazineData(mag){
|
||||||
@ -1089,6 +1088,8 @@ function loadMagazineData(mag){
|
|||||||
mag.appendTo($('.aligner'))
|
mag.appendTo($('.aligner'))
|
||||||
return mag
|
return mag
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// load chrome elements like bookmarks and navigator....
|
// load chrome elements like bookmarks and navigator....
|
||||||
function loadMagazineChrome(position, bookmarks){
|
function loadMagazineChrome(position, bookmarks){
|
||||||
setupBookmarkTouchZones()
|
setupBookmarkTouchZones()
|
||||||
@ -1104,23 +1105,6 @@ function loadMagazineChrome(position, bookmarks){
|
|||||||
updateView()
|
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
|
// XXX some things get really surprized when this is called, make things
|
||||||
// work with the mag cleared...
|
// 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 :
|
// vim:set ts=4 sw=4 :
|
||||||
|
|||||||
@ -2,6 +2,8 @@
|
|||||||
*
|
*
|
||||||
* Navigator
|
* 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
|
// NOTE: the navigator is not live and will need to get regenerated on
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user