diff --git a/build-config/RequireJS_config_common.js b/build-config/RequireJS_config_common.js index e7142f22a..864b1d870 100644 --- a/build-config/RequireJS_config_common.js +++ b/build-config/RequireJS_config_common.js @@ -56,8 +56,8 @@ require.config({ 'hogan': process._RJS_rootDir(3) + '/node_modules/hogan.js/dist/hogan-3.0.2.amd',// version number in file name! :( - 'jath': - process._RJS_rootDir(3) + '/node_modules/jath/jath', + 'jxpath': + process._RJS_rootDir(3) + '/node_modules/jquery-xpath/jquery.xpath', 'spin': process._RJS_rootDir(3) + '/node_modules/spin.js/spin', @@ -103,8 +103,8 @@ require.config({ keymaster : { exports: 'key' }, - jath : { - exports: 'Jath' + jxpath : { + exports: 'JXPath' }, spin : { exports: 'Spinner' diff --git a/build-config/RequireJS_config_multiple-bundles_external-libs.js b/build-config/RequireJS_config_multiple-bundles_external-libs.js index 8a4c71ece..62e214ab7 100644 --- a/build-config/RequireJS_config_multiple-bundles_external-libs.js +++ b/build-config/RequireJS_config_multiple-bundles_external-libs.js @@ -23,7 +23,7 @@ require.config({ { name: "readium-external-libs", create: true, - include: ["jath", "bootstrap", "bootstrapA11y", "hammerjs", "hogan", "jquery_hammer", "keymaster", "screenfull", "spin", + include: ["jxpath", "bootstrap", "bootstrapA11y", "hammerjs", "hogan", "jquery_hammer", "keymaster", "screenfull", "spin", "mime-types", "zip", "zip-ext", "zip-fs", "cryptoJs/sha1", "cryptoJs/core", 'jquery', 'underscore', 'URIjs', 'punycode', 'SecondLevelDomains', 'IPv6', diff --git a/package.json b/package.json index e33821916..332c17b3d 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ }, "devDependencies": { "keymaster": "danielweck/keymaster", - "jath": "danielweck/jath", + "jquery-xpath": "latest", "mathjax-single-file": "danielweck/MathJax-single-file", "bootstrap": "3.x", "bootstrap-accessibility-plugin": "paypal/bootstrap-accessibility-plugin", diff --git a/package/package_base.cson b/package/package_base.cson index 7ccf3110c..851df3dee 100644 --- a/package/package_base.cson +++ b/package/package_base.cson @@ -125,9 +125,12 @@ devDependencies: "keymaster": 'danielweck/keymaster' #"jath": 'latest' - "jath": 'danielweck/jath' + #"jath": 'danielweck/jath' + # "libxmljs" node-gyp python < v3 :( - #"jquery-xpath": 'latest' + + "jquery-xpath": 'latest' + #"jquery-xpath": 'ilinsky/jquery-xpath' "mathjax-single-file": 'danielweck/MathJax-single-file' diff --git a/src/js/PackageParser.js b/src/js/PackageParser.js index bc1f37f4c..41dfe223f 100644 --- a/src/js/PackageParser.js +++ b/src/js/PackageParser.js @@ -1,54 +1,83 @@ -define(['jath'], function(Jath){ - Jath.resolver = function( prefix ) { + +define(['jquery', 'jxpath'], function($, JXPath){ + var resolver = function( prefix ) { var mappings = { def: "http://www.idpf.org/2007/opf", dc: "http://purl.org/dc/elements/1.1/" }; return mappings[ prefix ]; - } - - var jathTemplate = { - - metadata: { - id: "//def:metadata/dc:identifier", - epub_version: "//def:package/@version", - title: "//def:metadata/dc:title", - author: "//def:metadata/dc:creator", - publisher: "//def:metadata/dc:publisher", - description: "//def:metadata/dc:description", - rights: "//def:metadata/dc:rights", - language: "//def:metadata/dc:language", - pubdate: "//def:metadata/dc:date", - modified_date: "//def:metadata/def:meta[@property='dcterms:modified']", - layout: "//def:metadata/def:meta[@property='rendition:layout']", - spread: "//def:metadata/def:meta[@property='rendition:spread']", - orientation: "//def:metadata/def:meta[@property='rendition:orientation']", - ncx: "//def:spine/@toc", - page_prog_dir: "//def:spine/@page-progression-direction", - active_class: "//def:metadata/def:meta[@property='media:active-class']" - }, - - manifest: [ "//def:item", { - id: "@id", - href: "@href", - media_type: "@media-type", - properties: "@properties", - media_overlay: "@media-overlay" - } ], - - spine: [ "//def:itemref", { idref: "@idref", properties: "@properties", linear: "@linear" } ], - - bindings: ["//def:bindings/def:mediaType", { - handler: "@handler", - media_type: "@media-type" - } ] - }; PackageParser = { parsePackageDom : function(data){ - var jsonObj = Jath.parse(jathTemplate, data); + + var jsonObj = { + + metadata: { + id: $.xpath(data, "//def:metadata/dc:identifier", resolver).text(), + epub_version: $.xpath(data, "//def:package/@version", resolver).val(), + title: $.xpath(data, "//def:metadata/dc:title", resolver).text(), + author: $.xpath(data, "//def:metadata/dc:creator", resolver).text(), + publisher: $.xpath(data, "//def:metadata/dc:publisher", resolver).text(), + description: $.xpath(data, "//def:metadata/dc:description", resolver).text(), + rights: $.xpath(data, "//def:metadata/dc:rights", resolver).text(), + language: $.xpath(data, "//def:metadata/dc:language", resolver).text(), + pubdate: $.xpath(data, "//def:metadata/dc:date", resolver).text(), + modified_date: $.xpath(data, "//def:metadata/def:meta[@property='dcterms:modified']", resolver).text(), + layout: $.xpath(data, "//def:metadata/def:meta[@property='rendition:layout']", resolver).text(), + spread: $.xpath(data, "//def:metadata/def:meta[@property='rendition:spread']", resolver).text(), + orientation: $.xpath(data, "//def:metadata/def:meta[@property='rendition:orientation']", resolver).text(), + ncx: $.xpath(data, "//def:spine/@toc", resolver).val(), + page_prog_dir: $.xpath(data, "//def:spine/@page-progression-direction", resolver).val(), + active_class: $.xpath(data, "//def:metadata/def:meta[@property='media:active-class']", resolver).text() + } +/* UNUSED + manifest: + (function() { + var array = []; + $.xpath(data, "//def:item", resolver).each(function(item) { + array.push({ + id: $.xpath(item, "@id", resolver).val(), + href: $.xpath(item, "@href", resolver).val(), + media_type: $.xpath(item, "@media-type", resolver).val(), + properties: $.xpath(item, "@properties", resolver).val(), + media_overlay: $.xpath(item, "@media-overlay", resolver).val() + }); + }); + return array; + })(), + + spine: + (function() { + var array = []; + $.xpath(data, "//def:itemref", resolver).each(function(item) { + array.push({ + idref: $.xpath(item, "@idref", resolver).val(), + properties: $.xpath(item, "@properties", resolver).val(), + linear: $.xpath(item, "@linear", resolver).val() + }); + }); + return array; + })(), + + bindings: + (function() { + var array = []; + $.xpath(data, "//def:bindings/def:mediaType", resolver).each(function(item) { + array.push({ + handler: $.xpath(item, "@handler", resolver).val(), + media_type: $.xpath(item, "@media-type", resolver).val() + }); + }); + return array; + })() +*/ + }; + jsonObj = jsonObj.metadata; + +//console.debug(JSON.stringify(jsonObj)); + jsonObj.coverHref = PackageParser.getCoverHref(data); return jsonObj; },