added unknown page handling and basic metadata handling to JSON serialization...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2013-02-01 17:02:14 +04:00
parent a16126f084
commit 46c47fd963

View File

@ -911,12 +911,16 @@ function resetState(){
* ], * ],
* // this is optional... * // this is optional...
* position: <page-number> * position: <page-number>
* // XXX urls are not yet supported...
* url: <URL>,
* pages: [ * pages: [
* // root <page>... * // root <page>...
* { * {
* type: 'page' | 'cover', * type: 'page' | 'cover',
* // classes set on the page element... * // classes set on the page element...
* class: [...] * class: [...]
* // XXX urls are not yet supported...
* url: <URL>,
* content: <page-content> * content: <page-content>
* }, * },
* *
@ -925,6 +929,8 @@ function resetState(){
* type: 'article', * type: 'article',
* // classes set on the article element... * // classes set on the article element...
* class: [...] * class: [...]
* // XXX urls are not yet supported...
* url: <URL>,
* pages: [ * pages: [
* <page>, * <page>,
* ... * ...
@ -944,20 +950,42 @@ function resetState(){
function buildJSON(export_bookmarks, export_position){ function buildJSON(export_bookmarks, export_position){
function _getContent(_, elem){ function _getContent(_, elem){
elem = $(elem) elem = $(elem)
// page...
if(elem.hasClass('page')){ if(elem.hasClass('page')){
return { var res = {
type: elem.hasClass('cover') ? 'cover' : 'page', type: elem.hasClass('cover') ? 'cover' : 'page',
'class': elem.attr('class'), 'class': elem.attr('class'),
content: elem.children('.content')[0].outerHTML content: elem.children('.content')[0].outerHTML
} }
// article...
} else if(elem.hasClass('article')){ } else if(elem.hasClass('article')){
return { var res = {
type: 'article', type: 'article',
'class': elem.attr('class'), 'class': elem.attr('class'),
pages: elem.children('.page').map(_getContent).toArray() pages: elem.children('.page').map(_getContent).toArray()
} }
// other...
} else {
var res = {
type: 'raw-html',
'class': elem.attr('class'),
content: elem.html()
} }
} }
// metadata...
if(elem.attr('authors')){
// NOTE: this might look odd, but we are using JS .map instead
// of the jQuery .map, and they have different signatures...
// ...(index, elem) in jQuery vs. (elem, index) in JS.
res.authors = $(elem.attr('authors').split(',')).map(function(e){return e.trim()})
}
// XXX more metadata...
// XXX
return res
}
var res = { var res = {
title: $('.magazine').attr('title'), title: $('.magazine').attr('title'),
// this can contain pages or arrays... // this can contain pages or arrays...
@ -973,25 +1001,35 @@ function buildJSON(export_bookmarks, export_position){
function loadJSON(data, ignore_chrome){ function loadJSON(data, ignore_chrome){
function _build(block, elem){ function _build(block, elem){
if(elem.type == 'page'){ if(elem.type == 'page'){
createPage(elem.content) var res = createPage(elem.content)
.addClass(elem['class']) .addClass(elem['class'])
.appendTo(block) .appendTo(block)
} else if(elem.type == 'cover'){ } else if(elem.type == 'cover'){
createCoverPage(elem.content) var res = createCoverPage(elem.content)
.addClass(elem['class']) .addClass(elem['class'])
.appendTo(block) .appendTo(block)
} else if(elem.type == 'article') { } else if(elem.type == 'article') {
// buiold an article... // buiold an article...
var article = createEmptyArticle() var res = createEmptyArticle()
.addClass(elem['class']) .addClass(elem['class'])
.appendTo(block) .appendTo(block)
// populate article with pages... // populate article with pages...
$(elem.pages).each(function(_, e){ $(elem.pages).each(function(_, e){
_build(article, e) _build(res, e)
}) })
} else if(elem.type == 'article') {
var res = createPage(elem.content)
.addClass(elem['class'])
.appendTo(block)
} }
// metadata...
if(elem.authors){
res.attr('authors', elem.authors.join(', '))
}
// XXX more metadata...
// XXX
} }
var mag = createEmptyMagazine(data.title) var mag = createEmptyMagazine(data.title)
$(data.pages).each(function(_, e){ $(data.pages).each(function(_, e){