mirror of
https://github.com/futurepress/epub.js.git
synced 2025-10-04 15:09:16 +02:00
Load chapter contents via ajax, document.write into iframe
This commit is contained in:
parent
2b88e706d2
commit
c8239d90d8
18 changed files with 404 additions and 179 deletions
115
build/epub.js
115
build/epub.js
|
@ -2185,7 +2185,7 @@ global.RSVP = requireModule('rsvp');
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var EPUBJS = EPUBJS || {};
|
var EPUBJS = EPUBJS || {};
|
||||||
EPUBJS.VERSION = "0.2.5";
|
EPUBJS.VERSION = "0.2.7";
|
||||||
|
|
||||||
EPUBJS.plugins = EPUBJS.plugins || {};
|
EPUBJS.plugins = EPUBJS.plugins || {};
|
||||||
|
|
||||||
|
@ -3040,8 +3040,8 @@ EPUBJS.Book.prototype.displayChapter = function(chap, end, deferred){
|
||||||
|
|
||||||
defer.resolve(book.renderer);
|
defer.resolve(book.renderer);
|
||||||
|
|
||||||
if(!book.settings.fromStorage &&
|
if(book.settings.fromStorage === false &&
|
||||||
!book.settings.contained) {
|
book.settings.contained === false) {
|
||||||
book.preloadNextChapter();
|
book.preloadNextChapter();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3334,7 +3334,7 @@ EPUBJS.Book.prototype.fromStorage = function(stored) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if(this.store && this.settings.fromStorage && stored === false){
|
if(this.store && this.settings.fromStorage && stored === false){
|
||||||
this.settings.fromStorage = true;
|
this.settings.fromStorage = false;
|
||||||
this.store.off("offline");
|
this.store.off("offline");
|
||||||
this.renderer.removeHook("beforeChapterDisplay", hooks, true);
|
this.renderer.removeHook("beforeChapterDisplay", hooks, true);
|
||||||
this.store = false;
|
this.store = false;
|
||||||
|
@ -3343,13 +3343,15 @@ EPUBJS.Book.prototype.fromStorage = function(stored) {
|
||||||
this.store = new EPUBJS.Storage(this.settings.storage);
|
this.store = new EPUBJS.Storage(this.settings.storage);
|
||||||
this.store.on("offline", function (offline) {
|
this.store.on("offline", function (offline) {
|
||||||
if (!offline) {
|
if (!offline) {
|
||||||
this.offline = true;
|
// Online
|
||||||
this.settings.fromStorage = true;
|
this.offline = false;
|
||||||
|
this.settings.fromStorage = false;
|
||||||
this.renderer.removeHook("beforeChapterDisplay", hooks, true);
|
this.renderer.removeHook("beforeChapterDisplay", hooks, true);
|
||||||
this.trigger("book:online");
|
this.trigger("book:online");
|
||||||
} else {
|
} else {
|
||||||
this.offline = false;
|
// Offline
|
||||||
this.settings.fromStorage = false;
|
this.offline = true;
|
||||||
|
this.settings.fromStorage = true;
|
||||||
this.renderer.registerHook("beforeChapterDisplay", hooks, true);
|
this.renderer.registerHook("beforeChapterDisplay", hooks, true);
|
||||||
this.trigger("book:offline");
|
this.trigger("book:offline");
|
||||||
}
|
}
|
||||||
|
@ -3576,7 +3578,7 @@ EPUBJS.Chapter.prototype.load = function(_store){
|
||||||
var promise;
|
var promise;
|
||||||
// if(this.store && (!this.book.online || this.book.contained))
|
// if(this.store && (!this.book.online || this.book.contained))
|
||||||
if(store){
|
if(store){
|
||||||
promise = store.getXml(this.href);
|
promise = store.getXml(this.absolute);
|
||||||
}else{
|
}else{
|
||||||
promise = EPUBJS.core.request(this.absolute, 'xml');
|
promise = EPUBJS.core.request(this.absolute, 'xml');
|
||||||
}
|
}
|
||||||
|
@ -3598,7 +3600,7 @@ EPUBJS.Chapter.prototype.render = function(_store){
|
||||||
var head = doc.head;
|
var head = doc.head;
|
||||||
var base = doc.createElement("base");
|
var base = doc.createElement("base");
|
||||||
|
|
||||||
base.setAttribute("href", window.location.origin + this.absolute);
|
base.setAttribute("href", this.absolute);
|
||||||
head.insertBefore(base, head.firstChild);
|
head.insertBefore(base, head.firstChild);
|
||||||
contents = serializer.serializeToString(doc);
|
contents = serializer.serializeToString(doc);
|
||||||
|
|
||||||
|
@ -3834,6 +3836,7 @@ EPUBJS.Chapter.prototype.textSprint = function(root, func) {
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
var EPUBJS = EPUBJS || {};
|
var EPUBJS = EPUBJS || {};
|
||||||
EPUBJS.core = {};
|
EPUBJS.core = {};
|
||||||
|
|
||||||
|
@ -6061,21 +6064,20 @@ EPUBJS.Render.Iframe.prototype.create = function(){
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the source of the iframe with the given URL string
|
* Sets the source of the iframe with the given URL string
|
||||||
* Takes: URL string
|
* Takes: Document Contents String
|
||||||
* Returns: promise with document element
|
* Returns: promise with document element
|
||||||
*/
|
*/
|
||||||
EPUBJS.Render.Iframe.prototype.load = function(url){
|
EPUBJS.Render.Iframe.prototype.load = function(contents, url){
|
||||||
var render = this,
|
var render = this,
|
||||||
deferred = new RSVP.defer();
|
deferred = new RSVP.defer();
|
||||||
|
|
||||||
// Reset the scroll position
|
|
||||||
render.leftPos = 0;
|
|
||||||
|
|
||||||
if(this.window) {
|
if(this.window) {
|
||||||
this.unload();
|
this.unload();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.iframe.onload = function(e) {
|
this.iframe.onload = function(e) {
|
||||||
|
var title;
|
||||||
|
|
||||||
render.document = render.iframe.contentDocument;
|
render.document = render.iframe.contentDocument;
|
||||||
render.docEl = render.document.documentElement;
|
render.docEl = render.document.documentElement;
|
||||||
render.headEl = render.document.head;
|
render.headEl = render.document.head;
|
||||||
|
@ -6084,6 +6086,10 @@ EPUBJS.Render.Iframe.prototype.load = function(url){
|
||||||
|
|
||||||
render.window.addEventListener("resize", render.resized.bind(render), false);
|
render.window.addEventListener("resize", render.resized.bind(render), false);
|
||||||
|
|
||||||
|
// Reset the scroll position
|
||||||
|
render.leftPos = 0;
|
||||||
|
render.setLeft(0);
|
||||||
|
|
||||||
//-- Clear Margins
|
//-- Clear Margins
|
||||||
if(render.bodyEl) {
|
if(render.bodyEl) {
|
||||||
render.bodyEl.style.margin = "0";
|
render.bodyEl.style.margin = "0";
|
||||||
|
@ -6098,6 +6104,11 @@ EPUBJS.Render.Iframe.prototype.load = function(url){
|
||||||
render.docEl.style.right = "0";
|
render.docEl.style.right = "0";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(typeof render.window.history.pushState != "undefined") {
|
||||||
|
title = render.headEl.querySelector('title');
|
||||||
|
render.window.history.pushState(null, title ? title.textContent : '', url);
|
||||||
|
}
|
||||||
|
|
||||||
deferred.resolve(render.docEl);
|
deferred.resolve(render.docEl);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -6109,7 +6120,17 @@ EPUBJS.Render.Iframe.prototype.load = function(url){
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
this.iframe.contentWindow.location.replace(url);
|
// this.iframe.contentWindow.location.replace(url);
|
||||||
|
this.document = this.iframe.contentDocument;
|
||||||
|
|
||||||
|
if(!this.document) {
|
||||||
|
deferred.reject(new Error("No Document Available"));
|
||||||
|
return deferred;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.document.open();
|
||||||
|
this.document.write(contents);
|
||||||
|
this.document.close();
|
||||||
|
|
||||||
return deferred.promise;
|
return deferred.promise;
|
||||||
};
|
};
|
||||||
|
@ -6293,6 +6314,7 @@ EPUBJS.Render.Iframe.prototype.unload = function(){
|
||||||
|
|
||||||
//-- Enable binding events to Render
|
//-- Enable binding events to Render
|
||||||
RSVP.EventTarget.mixin(EPUBJS.Render.Iframe.prototype);
|
RSVP.EventTarget.mixin(EPUBJS.Render.Iframe.prototype);
|
||||||
|
|
||||||
EPUBJS.Renderer = function(renderMethod, hidden) {
|
EPUBJS.Renderer = function(renderMethod, hidden) {
|
||||||
// Dom events to listen for
|
// Dom events to listen for
|
||||||
this.listenedEvents = ["keydown", "keyup", "keypressed", "mouseup", "mousedown", "click"];
|
this.listenedEvents = ["keydown", "keyup", "keypressed", "mouseup", "mousedown", "click"];
|
||||||
|
@ -6399,8 +6421,8 @@ EPUBJS.Renderer.prototype.displayChapter = function(chapter, globalLayout){
|
||||||
}
|
}
|
||||||
this._moving = true;
|
this._moving = true;
|
||||||
// Get the url string from the chapter (may be from storage)
|
// Get the url string from the chapter (may be from storage)
|
||||||
return chapter.url().
|
return chapter.render().
|
||||||
then(function(url) {
|
then(function(contents) {
|
||||||
|
|
||||||
// Unload the previous chapter listener
|
// Unload the previous chapter listener
|
||||||
if(this.currentChapter) {
|
if(this.currentChapter) {
|
||||||
|
@ -6425,7 +6447,7 @@ EPUBJS.Renderer.prototype.displayChapter = function(chapter, globalLayout){
|
||||||
this.currentChapterCfiBase = chapter.cfiBase;
|
this.currentChapterCfiBase = chapter.cfiBase;
|
||||||
|
|
||||||
this.layoutSettings = this.reconcileLayoutSettings(globalLayout, chapter.properties);
|
this.layoutSettings = this.reconcileLayoutSettings(globalLayout, chapter.properties);
|
||||||
return this.load(url);
|
return this.load(contents, chapter.href);
|
||||||
|
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
|
|
||||||
|
@ -7512,7 +7534,7 @@ EPUBJS.Renderer.prototype.replaceWithStored = function(query, attr, func, callba
|
||||||
_uri = EPUBJS.core.uri(this.currentChapter.absolute),
|
_uri = EPUBJS.core.uri(this.currentChapter.absolute),
|
||||||
_chapterBase = _uri.base,
|
_chapterBase = _uri.base,
|
||||||
_attr = attr,
|
_attr = attr,
|
||||||
_wait = 2000,
|
_wait = 5,
|
||||||
progress = function(url, full, count) {
|
progress = function(url, full, count) {
|
||||||
_newUrls[full] = url;
|
_newUrls[full] = url;
|
||||||
},
|
},
|
||||||
|
@ -7556,14 +7578,15 @@ EPUBJS.Renderer.prototype.replaceWithStored = function(query, attr, func, callba
|
||||||
if(query == "link[href]" && link.getAttribute("rel") !== "stylesheet") {
|
if(query == "link[href]" && link.getAttribute("rel") !== "stylesheet") {
|
||||||
//-- Only Stylesheet links seem to have a load events, just continue others
|
//-- Only Stylesheet links seem to have a load events, just continue others
|
||||||
done(url, full);
|
done(url, full);
|
||||||
|
} else {
|
||||||
|
timeout = setTimeout(function(){
|
||||||
|
done(url, full);
|
||||||
|
}, _wait);
|
||||||
}
|
}
|
||||||
|
|
||||||
link.setAttribute(_attr, url);
|
link.setAttribute(_attr, url);
|
||||||
|
|
||||||
//-- If elements never fire Load Event, should continue anyways
|
|
||||||
timeout = setTimeout(function(){
|
|
||||||
done(url, full);
|
|
||||||
}, _wait);
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -7666,9 +7689,7 @@ EPUBJS.replace.links = function(_store, full, done, link){
|
||||||
if(link.getAttribute("rel") === "stylesheet") {
|
if(link.getAttribute("rel") === "stylesheet") {
|
||||||
EPUBJS.replace.stylesheets(_store, full).then(function(url, full){
|
EPUBJS.replace.stylesheets(_store, full).then(function(url, full){
|
||||||
// done
|
// done
|
||||||
setTimeout(function(){
|
|
||||||
done(url, full);
|
done(url, full);
|
||||||
}, 5); //-- Allow for css to apply before displaying chapter
|
|
||||||
}, function(reason) {
|
}, function(reason) {
|
||||||
// we were unable to replace the style sheets
|
// we were unable to replace the style sheets
|
||||||
done(null);
|
done(null);
|
||||||
|
@ -7824,18 +7845,35 @@ EPUBJS.Storage.prototype.getText = function(url){
|
||||||
|
|
||||||
return EPUBJS.core.request(url, 'arraybuffer', this.withCredentials)
|
return EPUBJS.core.request(url, 'arraybuffer', this.withCredentials)
|
||||||
.then(function(buffer){
|
.then(function(buffer){
|
||||||
|
|
||||||
if(this.offline){
|
if(this.offline){
|
||||||
this.offline = false;
|
this.offline = false;
|
||||||
this.trigger("offline", false);
|
this.trigger("offline", false);
|
||||||
}
|
}
|
||||||
localforage.setItem(encodedUrl, buffer);
|
localforage.setItem(encodedUrl, buffer);
|
||||||
return url;
|
return buffer;
|
||||||
}.bind(this))
|
}.bind(this))
|
||||||
|
.then(function(data) {
|
||||||
|
var deferred = new RSVP.defer();
|
||||||
|
var mimeType = EPUBJS.core.getMimeType(url);
|
||||||
|
var blob = new Blob([data], {type : mimeType});
|
||||||
|
var reader = new FileReader();
|
||||||
|
reader.addEventListener("loadend", function() {
|
||||||
|
deferred.resolve(reader.result);
|
||||||
|
});
|
||||||
|
reader.readAsText(blob, mimeType);
|
||||||
|
return deferred.promise;
|
||||||
|
})
|
||||||
.catch(function() {
|
.catch(function() {
|
||||||
|
|
||||||
var deferred = new RSVP.defer();
|
var deferred = new RSVP.defer();
|
||||||
var entry = localforage.getItem(encodedUrl);
|
var entry = localforage.getItem(encodedUrl);
|
||||||
|
|
||||||
|
if(!this.offline){
|
||||||
|
this.offline = true;
|
||||||
|
this.trigger("offline", true);
|
||||||
|
}
|
||||||
|
|
||||||
if(!entry) {
|
if(!entry) {
|
||||||
deferred.reject({
|
deferred.reject({
|
||||||
message : "File not found in the storage: " + url,
|
message : "File not found in the storage: " + url,
|
||||||
|
@ -7918,12 +7956,30 @@ EPUBJS.Storage.prototype.getXml = function(url){
|
||||||
this.trigger("offline", false);
|
this.trigger("offline", false);
|
||||||
}
|
}
|
||||||
localforage.setItem(encodedUrl, buffer);
|
localforage.setItem(encodedUrl, buffer);
|
||||||
return url;
|
return buffer;
|
||||||
}.bind(this))
|
}.bind(this))
|
||||||
|
.then(function(data) {
|
||||||
|
var deferred = new RSVP.defer();
|
||||||
|
var mimeType = EPUBJS.core.getMimeType(url);
|
||||||
|
var blob = new Blob([data], {type : mimeType});
|
||||||
|
var reader = new FileReader();
|
||||||
|
reader.addEventListener("loadend", function() {
|
||||||
|
var parser = new DOMParser();
|
||||||
|
var doc = parser.parseFromString(reader.result, "text/xml");
|
||||||
|
deferred.resolve(doc);
|
||||||
|
});
|
||||||
|
reader.readAsText(blob, mimeType);
|
||||||
|
return deferred.promise;
|
||||||
|
})
|
||||||
.catch(function() {
|
.catch(function() {
|
||||||
var deferred = new RSVP.defer();
|
var deferred = new RSVP.defer();
|
||||||
var entry = localforage.getItem(encodedUrl);
|
var entry = localforage.getItem(encodedUrl);
|
||||||
|
|
||||||
|
if(!this.offline){
|
||||||
|
this.offline = true;
|
||||||
|
this.trigger("offline", true);
|
||||||
|
}
|
||||||
|
|
||||||
if(!entry) {
|
if(!entry) {
|
||||||
deferred.reject({
|
deferred.reject({
|
||||||
message : "File not found in the storage: " + url,
|
message : "File not found in the storage: " + url,
|
||||||
|
@ -7938,7 +7994,7 @@ EPUBJS.Storage.prototype.getXml = function(url){
|
||||||
var reader = new FileReader();
|
var reader = new FileReader();
|
||||||
reader.addEventListener("loadend", function() {
|
reader.addEventListener("loadend", function() {
|
||||||
var parser = new DOMParser();
|
var parser = new DOMParser();
|
||||||
var doc = parser.parseFromString(text, "text/xml");
|
var doc = parser.parseFromString(reader.result, "text/xml");
|
||||||
deferred.resolve(doc);
|
deferred.resolve(doc);
|
||||||
});
|
});
|
||||||
reader.readAsText(blob, mimeType);
|
reader.readAsText(blob, mimeType);
|
||||||
|
@ -7959,6 +8015,7 @@ EPUBJS.Storage.prototype.failed = function(error){
|
||||||
};
|
};
|
||||||
|
|
||||||
RSVP.EventTarget.mixin(EPUBJS.Storage.prototype);
|
RSVP.EventTarget.mixin(EPUBJS.Storage.prototype);
|
||||||
|
|
||||||
EPUBJS.Unarchiver = function(url){
|
EPUBJS.Unarchiver = function(url){
|
||||||
|
|
||||||
this.checkRequirements();
|
this.checkRequirements();
|
||||||
|
|
File diff suppressed because one or more lines are too long
8
build/epub.min.js
vendored
8
build/epub.min.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -2184,7 +2184,7 @@ global.RSVP = requireModule('rsvp');
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var EPUBJS = EPUBJS || {};
|
var EPUBJS = EPUBJS || {};
|
||||||
EPUBJS.VERSION = "0.2.5";
|
EPUBJS.VERSION = "0.2.7";
|
||||||
|
|
||||||
EPUBJS.plugins = EPUBJS.plugins || {};
|
EPUBJS.plugins = EPUBJS.plugins || {};
|
||||||
|
|
||||||
|
@ -3039,8 +3039,8 @@ EPUBJS.Book.prototype.displayChapter = function(chap, end, deferred){
|
||||||
|
|
||||||
defer.resolve(book.renderer);
|
defer.resolve(book.renderer);
|
||||||
|
|
||||||
if(!book.settings.fromStorage &&
|
if(book.settings.fromStorage === false &&
|
||||||
!book.settings.contained) {
|
book.settings.contained === false) {
|
||||||
book.preloadNextChapter();
|
book.preloadNextChapter();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3333,7 +3333,7 @@ EPUBJS.Book.prototype.fromStorage = function(stored) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if(this.store && this.settings.fromStorage && stored === false){
|
if(this.store && this.settings.fromStorage && stored === false){
|
||||||
this.settings.fromStorage = true;
|
this.settings.fromStorage = false;
|
||||||
this.store.off("offline");
|
this.store.off("offline");
|
||||||
this.renderer.removeHook("beforeChapterDisplay", hooks, true);
|
this.renderer.removeHook("beforeChapterDisplay", hooks, true);
|
||||||
this.store = false;
|
this.store = false;
|
||||||
|
@ -3342,13 +3342,15 @@ EPUBJS.Book.prototype.fromStorage = function(stored) {
|
||||||
this.store = new EPUBJS.Storage(this.settings.storage);
|
this.store = new EPUBJS.Storage(this.settings.storage);
|
||||||
this.store.on("offline", function (offline) {
|
this.store.on("offline", function (offline) {
|
||||||
if (!offline) {
|
if (!offline) {
|
||||||
this.offline = true;
|
// Online
|
||||||
this.settings.fromStorage = true;
|
this.offline = false;
|
||||||
|
this.settings.fromStorage = false;
|
||||||
this.renderer.removeHook("beforeChapterDisplay", hooks, true);
|
this.renderer.removeHook("beforeChapterDisplay", hooks, true);
|
||||||
this.trigger("book:online");
|
this.trigger("book:online");
|
||||||
} else {
|
} else {
|
||||||
this.offline = false;
|
// Offline
|
||||||
this.settings.fromStorage = false;
|
this.offline = true;
|
||||||
|
this.settings.fromStorage = true;
|
||||||
this.renderer.registerHook("beforeChapterDisplay", hooks, true);
|
this.renderer.registerHook("beforeChapterDisplay", hooks, true);
|
||||||
this.trigger("book:offline");
|
this.trigger("book:offline");
|
||||||
}
|
}
|
||||||
|
@ -3575,7 +3577,7 @@ EPUBJS.Chapter.prototype.load = function(_store){
|
||||||
var promise;
|
var promise;
|
||||||
// if(this.store && (!this.book.online || this.book.contained))
|
// if(this.store && (!this.book.online || this.book.contained))
|
||||||
if(store){
|
if(store){
|
||||||
promise = store.getXml(this.href);
|
promise = store.getXml(this.absolute);
|
||||||
}else{
|
}else{
|
||||||
promise = EPUBJS.core.request(this.absolute, 'xml');
|
promise = EPUBJS.core.request(this.absolute, 'xml');
|
||||||
}
|
}
|
||||||
|
@ -3597,7 +3599,7 @@ EPUBJS.Chapter.prototype.render = function(_store){
|
||||||
var head = doc.head;
|
var head = doc.head;
|
||||||
var base = doc.createElement("base");
|
var base = doc.createElement("base");
|
||||||
|
|
||||||
base.setAttribute("href", window.location.origin + this.absolute);
|
base.setAttribute("href", this.absolute);
|
||||||
head.insertBefore(base, head.firstChild);
|
head.insertBefore(base, head.firstChild);
|
||||||
contents = serializer.serializeToString(doc);
|
contents = serializer.serializeToString(doc);
|
||||||
|
|
||||||
|
@ -3833,6 +3835,7 @@ EPUBJS.Chapter.prototype.textSprint = function(root, func) {
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
var EPUBJS = EPUBJS || {};
|
var EPUBJS = EPUBJS || {};
|
||||||
EPUBJS.core = {};
|
EPUBJS.core = {};
|
||||||
|
|
||||||
|
@ -6060,21 +6063,20 @@ EPUBJS.Render.Iframe.prototype.create = function(){
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the source of the iframe with the given URL string
|
* Sets the source of the iframe with the given URL string
|
||||||
* Takes: URL string
|
* Takes: Document Contents String
|
||||||
* Returns: promise with document element
|
* Returns: promise with document element
|
||||||
*/
|
*/
|
||||||
EPUBJS.Render.Iframe.prototype.load = function(url){
|
EPUBJS.Render.Iframe.prototype.load = function(contents, url){
|
||||||
var render = this,
|
var render = this,
|
||||||
deferred = new RSVP.defer();
|
deferred = new RSVP.defer();
|
||||||
|
|
||||||
// Reset the scroll position
|
|
||||||
render.leftPos = 0;
|
|
||||||
|
|
||||||
if(this.window) {
|
if(this.window) {
|
||||||
this.unload();
|
this.unload();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.iframe.onload = function(e) {
|
this.iframe.onload = function(e) {
|
||||||
|
var title;
|
||||||
|
|
||||||
render.document = render.iframe.contentDocument;
|
render.document = render.iframe.contentDocument;
|
||||||
render.docEl = render.document.documentElement;
|
render.docEl = render.document.documentElement;
|
||||||
render.headEl = render.document.head;
|
render.headEl = render.document.head;
|
||||||
|
@ -6083,6 +6085,10 @@ EPUBJS.Render.Iframe.prototype.load = function(url){
|
||||||
|
|
||||||
render.window.addEventListener("resize", render.resized.bind(render), false);
|
render.window.addEventListener("resize", render.resized.bind(render), false);
|
||||||
|
|
||||||
|
// Reset the scroll position
|
||||||
|
render.leftPos = 0;
|
||||||
|
render.setLeft(0);
|
||||||
|
|
||||||
//-- Clear Margins
|
//-- Clear Margins
|
||||||
if(render.bodyEl) {
|
if(render.bodyEl) {
|
||||||
render.bodyEl.style.margin = "0";
|
render.bodyEl.style.margin = "0";
|
||||||
|
@ -6097,6 +6103,11 @@ EPUBJS.Render.Iframe.prototype.load = function(url){
|
||||||
render.docEl.style.right = "0";
|
render.docEl.style.right = "0";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(typeof render.window.history.pushState != "undefined") {
|
||||||
|
title = render.headEl.querySelector('title');
|
||||||
|
render.window.history.pushState(null, title ? title.textContent : '', url);
|
||||||
|
}
|
||||||
|
|
||||||
deferred.resolve(render.docEl);
|
deferred.resolve(render.docEl);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -6108,7 +6119,17 @@ EPUBJS.Render.Iframe.prototype.load = function(url){
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
this.iframe.contentWindow.location.replace(url);
|
// this.iframe.contentWindow.location.replace(url);
|
||||||
|
this.document = this.iframe.contentDocument;
|
||||||
|
|
||||||
|
if(!this.document) {
|
||||||
|
deferred.reject(new Error("No Document Available"));
|
||||||
|
return deferred;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.document.open();
|
||||||
|
this.document.write(contents);
|
||||||
|
this.document.close();
|
||||||
|
|
||||||
return deferred.promise;
|
return deferred.promise;
|
||||||
};
|
};
|
||||||
|
@ -6292,6 +6313,7 @@ EPUBJS.Render.Iframe.prototype.unload = function(){
|
||||||
|
|
||||||
//-- Enable binding events to Render
|
//-- Enable binding events to Render
|
||||||
RSVP.EventTarget.mixin(EPUBJS.Render.Iframe.prototype);
|
RSVP.EventTarget.mixin(EPUBJS.Render.Iframe.prototype);
|
||||||
|
|
||||||
EPUBJS.Renderer = function(renderMethod, hidden) {
|
EPUBJS.Renderer = function(renderMethod, hidden) {
|
||||||
// Dom events to listen for
|
// Dom events to listen for
|
||||||
this.listenedEvents = ["keydown", "keyup", "keypressed", "mouseup", "mousedown", "click"];
|
this.listenedEvents = ["keydown", "keyup", "keypressed", "mouseup", "mousedown", "click"];
|
||||||
|
@ -6398,8 +6420,8 @@ EPUBJS.Renderer.prototype.displayChapter = function(chapter, globalLayout){
|
||||||
}
|
}
|
||||||
this._moving = true;
|
this._moving = true;
|
||||||
// Get the url string from the chapter (may be from storage)
|
// Get the url string from the chapter (may be from storage)
|
||||||
return chapter.url().
|
return chapter.render().
|
||||||
then(function(url) {
|
then(function(contents) {
|
||||||
|
|
||||||
// Unload the previous chapter listener
|
// Unload the previous chapter listener
|
||||||
if(this.currentChapter) {
|
if(this.currentChapter) {
|
||||||
|
@ -6424,7 +6446,7 @@ EPUBJS.Renderer.prototype.displayChapter = function(chapter, globalLayout){
|
||||||
this.currentChapterCfiBase = chapter.cfiBase;
|
this.currentChapterCfiBase = chapter.cfiBase;
|
||||||
|
|
||||||
this.layoutSettings = this.reconcileLayoutSettings(globalLayout, chapter.properties);
|
this.layoutSettings = this.reconcileLayoutSettings(globalLayout, chapter.properties);
|
||||||
return this.load(url);
|
return this.load(contents, chapter.href);
|
||||||
|
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
|
|
||||||
|
@ -7511,7 +7533,7 @@ EPUBJS.Renderer.prototype.replaceWithStored = function(query, attr, func, callba
|
||||||
_uri = EPUBJS.core.uri(this.currentChapter.absolute),
|
_uri = EPUBJS.core.uri(this.currentChapter.absolute),
|
||||||
_chapterBase = _uri.base,
|
_chapterBase = _uri.base,
|
||||||
_attr = attr,
|
_attr = attr,
|
||||||
_wait = 2000,
|
_wait = 5,
|
||||||
progress = function(url, full, count) {
|
progress = function(url, full, count) {
|
||||||
_newUrls[full] = url;
|
_newUrls[full] = url;
|
||||||
},
|
},
|
||||||
|
@ -7555,14 +7577,15 @@ EPUBJS.Renderer.prototype.replaceWithStored = function(query, attr, func, callba
|
||||||
if(query == "link[href]" && link.getAttribute("rel") !== "stylesheet") {
|
if(query == "link[href]" && link.getAttribute("rel") !== "stylesheet") {
|
||||||
//-- Only Stylesheet links seem to have a load events, just continue others
|
//-- Only Stylesheet links seem to have a load events, just continue others
|
||||||
done(url, full);
|
done(url, full);
|
||||||
|
} else {
|
||||||
|
timeout = setTimeout(function(){
|
||||||
|
done(url, full);
|
||||||
|
}, _wait);
|
||||||
}
|
}
|
||||||
|
|
||||||
link.setAttribute(_attr, url);
|
link.setAttribute(_attr, url);
|
||||||
|
|
||||||
//-- If elements never fire Load Event, should continue anyways
|
|
||||||
timeout = setTimeout(function(){
|
|
||||||
done(url, full);
|
|
||||||
}, _wait);
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -7665,9 +7688,7 @@ EPUBJS.replace.links = function(_store, full, done, link){
|
||||||
if(link.getAttribute("rel") === "stylesheet") {
|
if(link.getAttribute("rel") === "stylesheet") {
|
||||||
EPUBJS.replace.stylesheets(_store, full).then(function(url, full){
|
EPUBJS.replace.stylesheets(_store, full).then(function(url, full){
|
||||||
// done
|
// done
|
||||||
setTimeout(function(){
|
|
||||||
done(url, full);
|
done(url, full);
|
||||||
}, 5); //-- Allow for css to apply before displaying chapter
|
|
||||||
}, function(reason) {
|
}, function(reason) {
|
||||||
// we were unable to replace the style sheets
|
// we were unable to replace the style sheets
|
||||||
done(null);
|
done(null);
|
||||||
|
@ -7823,18 +7844,35 @@ EPUBJS.Storage.prototype.getText = function(url){
|
||||||
|
|
||||||
return EPUBJS.core.request(url, 'arraybuffer', this.withCredentials)
|
return EPUBJS.core.request(url, 'arraybuffer', this.withCredentials)
|
||||||
.then(function(buffer){
|
.then(function(buffer){
|
||||||
|
|
||||||
if(this.offline){
|
if(this.offline){
|
||||||
this.offline = false;
|
this.offline = false;
|
||||||
this.trigger("offline", false);
|
this.trigger("offline", false);
|
||||||
}
|
}
|
||||||
localforage.setItem(encodedUrl, buffer);
|
localforage.setItem(encodedUrl, buffer);
|
||||||
return url;
|
return buffer;
|
||||||
}.bind(this))
|
}.bind(this))
|
||||||
|
.then(function(data) {
|
||||||
|
var deferred = new RSVP.defer();
|
||||||
|
var mimeType = EPUBJS.core.getMimeType(url);
|
||||||
|
var blob = new Blob([data], {type : mimeType});
|
||||||
|
var reader = new FileReader();
|
||||||
|
reader.addEventListener("loadend", function() {
|
||||||
|
deferred.resolve(reader.result);
|
||||||
|
});
|
||||||
|
reader.readAsText(blob, mimeType);
|
||||||
|
return deferred.promise;
|
||||||
|
})
|
||||||
.catch(function() {
|
.catch(function() {
|
||||||
|
|
||||||
var deferred = new RSVP.defer();
|
var deferred = new RSVP.defer();
|
||||||
var entry = localforage.getItem(encodedUrl);
|
var entry = localforage.getItem(encodedUrl);
|
||||||
|
|
||||||
|
if(!this.offline){
|
||||||
|
this.offline = true;
|
||||||
|
this.trigger("offline", true);
|
||||||
|
}
|
||||||
|
|
||||||
if(!entry) {
|
if(!entry) {
|
||||||
deferred.reject({
|
deferred.reject({
|
||||||
message : "File not found in the storage: " + url,
|
message : "File not found in the storage: " + url,
|
||||||
|
@ -7917,12 +7955,30 @@ EPUBJS.Storage.prototype.getXml = function(url){
|
||||||
this.trigger("offline", false);
|
this.trigger("offline", false);
|
||||||
}
|
}
|
||||||
localforage.setItem(encodedUrl, buffer);
|
localforage.setItem(encodedUrl, buffer);
|
||||||
return url;
|
return buffer;
|
||||||
}.bind(this))
|
}.bind(this))
|
||||||
|
.then(function(data) {
|
||||||
|
var deferred = new RSVP.defer();
|
||||||
|
var mimeType = EPUBJS.core.getMimeType(url);
|
||||||
|
var blob = new Blob([data], {type : mimeType});
|
||||||
|
var reader = new FileReader();
|
||||||
|
reader.addEventListener("loadend", function() {
|
||||||
|
var parser = new DOMParser();
|
||||||
|
var doc = parser.parseFromString(reader.result, "text/xml");
|
||||||
|
deferred.resolve(doc);
|
||||||
|
});
|
||||||
|
reader.readAsText(blob, mimeType);
|
||||||
|
return deferred.promise;
|
||||||
|
})
|
||||||
.catch(function() {
|
.catch(function() {
|
||||||
var deferred = new RSVP.defer();
|
var deferred = new RSVP.defer();
|
||||||
var entry = localforage.getItem(encodedUrl);
|
var entry = localforage.getItem(encodedUrl);
|
||||||
|
|
||||||
|
if(!this.offline){
|
||||||
|
this.offline = true;
|
||||||
|
this.trigger("offline", true);
|
||||||
|
}
|
||||||
|
|
||||||
if(!entry) {
|
if(!entry) {
|
||||||
deferred.reject({
|
deferred.reject({
|
||||||
message : "File not found in the storage: " + url,
|
message : "File not found in the storage: " + url,
|
||||||
|
@ -7937,7 +7993,7 @@ EPUBJS.Storage.prototype.getXml = function(url){
|
||||||
var reader = new FileReader();
|
var reader = new FileReader();
|
||||||
reader.addEventListener("loadend", function() {
|
reader.addEventListener("loadend", function() {
|
||||||
var parser = new DOMParser();
|
var parser = new DOMParser();
|
||||||
var doc = parser.parseFromString(text, "text/xml");
|
var doc = parser.parseFromString(reader.result, "text/xml");
|
||||||
deferred.resolve(doc);
|
deferred.resolve(doc);
|
||||||
});
|
});
|
||||||
reader.readAsText(blob, mimeType);
|
reader.readAsText(blob, mimeType);
|
||||||
|
@ -7958,6 +8014,7 @@ EPUBJS.Storage.prototype.failed = function(error){
|
||||||
};
|
};
|
||||||
|
|
||||||
RSVP.EventTarget.mixin(EPUBJS.Storage.prototype);
|
RSVP.EventTarget.mixin(EPUBJS.Storage.prototype);
|
||||||
|
|
||||||
EPUBJS.Unarchiver = function(url){
|
EPUBJS.Unarchiver = function(url){
|
||||||
|
|
||||||
this.checkRequirements();
|
this.checkRequirements();
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -8,5 +8,5 @@
|
||||||
"hooks/default/transculsions.js"
|
"hooks/default/transculsions.js"
|
||||||
],
|
],
|
||||||
"names": [],
|
"names": [],
|
||||||
"mappings": "AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC9JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A"
|
"mappings": "AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"
|
||||||
}
|
}
|
File diff suppressed because one or more lines are too long
|
@ -10,7 +10,7 @@
|
||||||
<link rel="stylesheet" href="basic.css">
|
<link rel="stylesheet" href="basic.css">
|
||||||
|
|
||||||
<!-- EPUBJS Renderer -->
|
<!-- EPUBJS Renderer -->
|
||||||
<script src="../build/epub.min.js"></script>
|
<script src="../build/epub.js"></script>
|
||||||
|
|
||||||
<!-- Zip JS -->
|
<!-- Zip JS -->
|
||||||
<script src="../build/libs/zip.min.js"></script>
|
<script src="../build/libs/zip.min.js"></script>
|
||||||
|
|
File diff suppressed because one or more lines are too long
115
reader/js/epub.min.js
vendored
115
reader/js/epub.min.js
vendored
|
@ -2185,7 +2185,7 @@ global.RSVP = requireModule('rsvp');
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var EPUBJS = EPUBJS || {};
|
var EPUBJS = EPUBJS || {};
|
||||||
EPUBJS.VERSION = "0.2.5";
|
EPUBJS.VERSION = "0.2.7";
|
||||||
|
|
||||||
EPUBJS.plugins = EPUBJS.plugins || {};
|
EPUBJS.plugins = EPUBJS.plugins || {};
|
||||||
|
|
||||||
|
@ -3040,8 +3040,8 @@ EPUBJS.Book.prototype.displayChapter = function(chap, end, deferred){
|
||||||
|
|
||||||
defer.resolve(book.renderer);
|
defer.resolve(book.renderer);
|
||||||
|
|
||||||
if(!book.settings.fromStorage &&
|
if(book.settings.fromStorage === false &&
|
||||||
!book.settings.contained) {
|
book.settings.contained === false) {
|
||||||
book.preloadNextChapter();
|
book.preloadNextChapter();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3334,7 +3334,7 @@ EPUBJS.Book.prototype.fromStorage = function(stored) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if(this.store && this.settings.fromStorage && stored === false){
|
if(this.store && this.settings.fromStorage && stored === false){
|
||||||
this.settings.fromStorage = true;
|
this.settings.fromStorage = false;
|
||||||
this.store.off("offline");
|
this.store.off("offline");
|
||||||
this.renderer.removeHook("beforeChapterDisplay", hooks, true);
|
this.renderer.removeHook("beforeChapterDisplay", hooks, true);
|
||||||
this.store = false;
|
this.store = false;
|
||||||
|
@ -3343,13 +3343,15 @@ EPUBJS.Book.prototype.fromStorage = function(stored) {
|
||||||
this.store = new EPUBJS.Storage(this.settings.storage);
|
this.store = new EPUBJS.Storage(this.settings.storage);
|
||||||
this.store.on("offline", function (offline) {
|
this.store.on("offline", function (offline) {
|
||||||
if (!offline) {
|
if (!offline) {
|
||||||
this.offline = true;
|
// Online
|
||||||
this.settings.fromStorage = true;
|
this.offline = false;
|
||||||
|
this.settings.fromStorage = false;
|
||||||
this.renderer.removeHook("beforeChapterDisplay", hooks, true);
|
this.renderer.removeHook("beforeChapterDisplay", hooks, true);
|
||||||
this.trigger("book:online");
|
this.trigger("book:online");
|
||||||
} else {
|
} else {
|
||||||
this.offline = false;
|
// Offline
|
||||||
this.settings.fromStorage = false;
|
this.offline = true;
|
||||||
|
this.settings.fromStorage = true;
|
||||||
this.renderer.registerHook("beforeChapterDisplay", hooks, true);
|
this.renderer.registerHook("beforeChapterDisplay", hooks, true);
|
||||||
this.trigger("book:offline");
|
this.trigger("book:offline");
|
||||||
}
|
}
|
||||||
|
@ -3576,7 +3578,7 @@ EPUBJS.Chapter.prototype.load = function(_store){
|
||||||
var promise;
|
var promise;
|
||||||
// if(this.store && (!this.book.online || this.book.contained))
|
// if(this.store && (!this.book.online || this.book.contained))
|
||||||
if(store){
|
if(store){
|
||||||
promise = store.getXml(this.href);
|
promise = store.getXml(this.absolute);
|
||||||
}else{
|
}else{
|
||||||
promise = EPUBJS.core.request(this.absolute, 'xml');
|
promise = EPUBJS.core.request(this.absolute, 'xml');
|
||||||
}
|
}
|
||||||
|
@ -3598,7 +3600,7 @@ EPUBJS.Chapter.prototype.render = function(_store){
|
||||||
var head = doc.head;
|
var head = doc.head;
|
||||||
var base = doc.createElement("base");
|
var base = doc.createElement("base");
|
||||||
|
|
||||||
base.setAttribute("href", window.location.origin + this.absolute);
|
base.setAttribute("href", this.absolute);
|
||||||
head.insertBefore(base, head.firstChild);
|
head.insertBefore(base, head.firstChild);
|
||||||
contents = serializer.serializeToString(doc);
|
contents = serializer.serializeToString(doc);
|
||||||
|
|
||||||
|
@ -3834,6 +3836,7 @@ EPUBJS.Chapter.prototype.textSprint = function(root, func) {
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
var EPUBJS = EPUBJS || {};
|
var EPUBJS = EPUBJS || {};
|
||||||
EPUBJS.core = {};
|
EPUBJS.core = {};
|
||||||
|
|
||||||
|
@ -6061,21 +6064,20 @@ EPUBJS.Render.Iframe.prototype.create = function(){
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the source of the iframe with the given URL string
|
* Sets the source of the iframe with the given URL string
|
||||||
* Takes: URL string
|
* Takes: Document Contents String
|
||||||
* Returns: promise with document element
|
* Returns: promise with document element
|
||||||
*/
|
*/
|
||||||
EPUBJS.Render.Iframe.prototype.load = function(url){
|
EPUBJS.Render.Iframe.prototype.load = function(contents, url){
|
||||||
var render = this,
|
var render = this,
|
||||||
deferred = new RSVP.defer();
|
deferred = new RSVP.defer();
|
||||||
|
|
||||||
// Reset the scroll position
|
|
||||||
render.leftPos = 0;
|
|
||||||
|
|
||||||
if(this.window) {
|
if(this.window) {
|
||||||
this.unload();
|
this.unload();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.iframe.onload = function(e) {
|
this.iframe.onload = function(e) {
|
||||||
|
var title;
|
||||||
|
|
||||||
render.document = render.iframe.contentDocument;
|
render.document = render.iframe.contentDocument;
|
||||||
render.docEl = render.document.documentElement;
|
render.docEl = render.document.documentElement;
|
||||||
render.headEl = render.document.head;
|
render.headEl = render.document.head;
|
||||||
|
@ -6084,6 +6086,10 @@ EPUBJS.Render.Iframe.prototype.load = function(url){
|
||||||
|
|
||||||
render.window.addEventListener("resize", render.resized.bind(render), false);
|
render.window.addEventListener("resize", render.resized.bind(render), false);
|
||||||
|
|
||||||
|
// Reset the scroll position
|
||||||
|
render.leftPos = 0;
|
||||||
|
render.setLeft(0);
|
||||||
|
|
||||||
//-- Clear Margins
|
//-- Clear Margins
|
||||||
if(render.bodyEl) {
|
if(render.bodyEl) {
|
||||||
render.bodyEl.style.margin = "0";
|
render.bodyEl.style.margin = "0";
|
||||||
|
@ -6098,6 +6104,11 @@ EPUBJS.Render.Iframe.prototype.load = function(url){
|
||||||
render.docEl.style.right = "0";
|
render.docEl.style.right = "0";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(typeof render.window.history.pushState != "undefined") {
|
||||||
|
title = render.headEl.querySelector('title');
|
||||||
|
render.window.history.pushState(null, title ? title.textContent : '', url);
|
||||||
|
}
|
||||||
|
|
||||||
deferred.resolve(render.docEl);
|
deferred.resolve(render.docEl);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -6109,7 +6120,17 @@ EPUBJS.Render.Iframe.prototype.load = function(url){
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
this.iframe.contentWindow.location.replace(url);
|
// this.iframe.contentWindow.location.replace(url);
|
||||||
|
this.document = this.iframe.contentDocument;
|
||||||
|
|
||||||
|
if(!this.document) {
|
||||||
|
deferred.reject(new Error("No Document Available"));
|
||||||
|
return deferred;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.document.open();
|
||||||
|
this.document.write(contents);
|
||||||
|
this.document.close();
|
||||||
|
|
||||||
return deferred.promise;
|
return deferred.promise;
|
||||||
};
|
};
|
||||||
|
@ -6293,6 +6314,7 @@ EPUBJS.Render.Iframe.prototype.unload = function(){
|
||||||
|
|
||||||
//-- Enable binding events to Render
|
//-- Enable binding events to Render
|
||||||
RSVP.EventTarget.mixin(EPUBJS.Render.Iframe.prototype);
|
RSVP.EventTarget.mixin(EPUBJS.Render.Iframe.prototype);
|
||||||
|
|
||||||
EPUBJS.Renderer = function(renderMethod, hidden) {
|
EPUBJS.Renderer = function(renderMethod, hidden) {
|
||||||
// Dom events to listen for
|
// Dom events to listen for
|
||||||
this.listenedEvents = ["keydown", "keyup", "keypressed", "mouseup", "mousedown", "click"];
|
this.listenedEvents = ["keydown", "keyup", "keypressed", "mouseup", "mousedown", "click"];
|
||||||
|
@ -6399,8 +6421,8 @@ EPUBJS.Renderer.prototype.displayChapter = function(chapter, globalLayout){
|
||||||
}
|
}
|
||||||
this._moving = true;
|
this._moving = true;
|
||||||
// Get the url string from the chapter (may be from storage)
|
// Get the url string from the chapter (may be from storage)
|
||||||
return chapter.url().
|
return chapter.render().
|
||||||
then(function(url) {
|
then(function(contents) {
|
||||||
|
|
||||||
// Unload the previous chapter listener
|
// Unload the previous chapter listener
|
||||||
if(this.currentChapter) {
|
if(this.currentChapter) {
|
||||||
|
@ -6425,7 +6447,7 @@ EPUBJS.Renderer.prototype.displayChapter = function(chapter, globalLayout){
|
||||||
this.currentChapterCfiBase = chapter.cfiBase;
|
this.currentChapterCfiBase = chapter.cfiBase;
|
||||||
|
|
||||||
this.layoutSettings = this.reconcileLayoutSettings(globalLayout, chapter.properties);
|
this.layoutSettings = this.reconcileLayoutSettings(globalLayout, chapter.properties);
|
||||||
return this.load(url);
|
return this.load(contents, chapter.href);
|
||||||
|
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
|
|
||||||
|
@ -7512,7 +7534,7 @@ EPUBJS.Renderer.prototype.replaceWithStored = function(query, attr, func, callba
|
||||||
_uri = EPUBJS.core.uri(this.currentChapter.absolute),
|
_uri = EPUBJS.core.uri(this.currentChapter.absolute),
|
||||||
_chapterBase = _uri.base,
|
_chapterBase = _uri.base,
|
||||||
_attr = attr,
|
_attr = attr,
|
||||||
_wait = 2000,
|
_wait = 5,
|
||||||
progress = function(url, full, count) {
|
progress = function(url, full, count) {
|
||||||
_newUrls[full] = url;
|
_newUrls[full] = url;
|
||||||
},
|
},
|
||||||
|
@ -7556,14 +7578,15 @@ EPUBJS.Renderer.prototype.replaceWithStored = function(query, attr, func, callba
|
||||||
if(query == "link[href]" && link.getAttribute("rel") !== "stylesheet") {
|
if(query == "link[href]" && link.getAttribute("rel") !== "stylesheet") {
|
||||||
//-- Only Stylesheet links seem to have a load events, just continue others
|
//-- Only Stylesheet links seem to have a load events, just continue others
|
||||||
done(url, full);
|
done(url, full);
|
||||||
|
} else {
|
||||||
|
timeout = setTimeout(function(){
|
||||||
|
done(url, full);
|
||||||
|
}, _wait);
|
||||||
}
|
}
|
||||||
|
|
||||||
link.setAttribute(_attr, url);
|
link.setAttribute(_attr, url);
|
||||||
|
|
||||||
//-- If elements never fire Load Event, should continue anyways
|
|
||||||
timeout = setTimeout(function(){
|
|
||||||
done(url, full);
|
|
||||||
}, _wait);
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -7666,9 +7689,7 @@ EPUBJS.replace.links = function(_store, full, done, link){
|
||||||
if(link.getAttribute("rel") === "stylesheet") {
|
if(link.getAttribute("rel") === "stylesheet") {
|
||||||
EPUBJS.replace.stylesheets(_store, full).then(function(url, full){
|
EPUBJS.replace.stylesheets(_store, full).then(function(url, full){
|
||||||
// done
|
// done
|
||||||
setTimeout(function(){
|
|
||||||
done(url, full);
|
done(url, full);
|
||||||
}, 5); //-- Allow for css to apply before displaying chapter
|
|
||||||
}, function(reason) {
|
}, function(reason) {
|
||||||
// we were unable to replace the style sheets
|
// we were unable to replace the style sheets
|
||||||
done(null);
|
done(null);
|
||||||
|
@ -7824,18 +7845,35 @@ EPUBJS.Storage.prototype.getText = function(url){
|
||||||
|
|
||||||
return EPUBJS.core.request(url, 'arraybuffer', this.withCredentials)
|
return EPUBJS.core.request(url, 'arraybuffer', this.withCredentials)
|
||||||
.then(function(buffer){
|
.then(function(buffer){
|
||||||
|
|
||||||
if(this.offline){
|
if(this.offline){
|
||||||
this.offline = false;
|
this.offline = false;
|
||||||
this.trigger("offline", false);
|
this.trigger("offline", false);
|
||||||
}
|
}
|
||||||
localforage.setItem(encodedUrl, buffer);
|
localforage.setItem(encodedUrl, buffer);
|
||||||
return url;
|
return buffer;
|
||||||
}.bind(this))
|
}.bind(this))
|
||||||
|
.then(function(data) {
|
||||||
|
var deferred = new RSVP.defer();
|
||||||
|
var mimeType = EPUBJS.core.getMimeType(url);
|
||||||
|
var blob = new Blob([data], {type : mimeType});
|
||||||
|
var reader = new FileReader();
|
||||||
|
reader.addEventListener("loadend", function() {
|
||||||
|
deferred.resolve(reader.result);
|
||||||
|
});
|
||||||
|
reader.readAsText(blob, mimeType);
|
||||||
|
return deferred.promise;
|
||||||
|
})
|
||||||
.catch(function() {
|
.catch(function() {
|
||||||
|
|
||||||
var deferred = new RSVP.defer();
|
var deferred = new RSVP.defer();
|
||||||
var entry = localforage.getItem(encodedUrl);
|
var entry = localforage.getItem(encodedUrl);
|
||||||
|
|
||||||
|
if(!this.offline){
|
||||||
|
this.offline = true;
|
||||||
|
this.trigger("offline", true);
|
||||||
|
}
|
||||||
|
|
||||||
if(!entry) {
|
if(!entry) {
|
||||||
deferred.reject({
|
deferred.reject({
|
||||||
message : "File not found in the storage: " + url,
|
message : "File not found in the storage: " + url,
|
||||||
|
@ -7918,12 +7956,30 @@ EPUBJS.Storage.prototype.getXml = function(url){
|
||||||
this.trigger("offline", false);
|
this.trigger("offline", false);
|
||||||
}
|
}
|
||||||
localforage.setItem(encodedUrl, buffer);
|
localforage.setItem(encodedUrl, buffer);
|
||||||
return url;
|
return buffer;
|
||||||
}.bind(this))
|
}.bind(this))
|
||||||
|
.then(function(data) {
|
||||||
|
var deferred = new RSVP.defer();
|
||||||
|
var mimeType = EPUBJS.core.getMimeType(url);
|
||||||
|
var blob = new Blob([data], {type : mimeType});
|
||||||
|
var reader = new FileReader();
|
||||||
|
reader.addEventListener("loadend", function() {
|
||||||
|
var parser = new DOMParser();
|
||||||
|
var doc = parser.parseFromString(reader.result, "text/xml");
|
||||||
|
deferred.resolve(doc);
|
||||||
|
});
|
||||||
|
reader.readAsText(blob, mimeType);
|
||||||
|
return deferred.promise;
|
||||||
|
})
|
||||||
.catch(function() {
|
.catch(function() {
|
||||||
var deferred = new RSVP.defer();
|
var deferred = new RSVP.defer();
|
||||||
var entry = localforage.getItem(encodedUrl);
|
var entry = localforage.getItem(encodedUrl);
|
||||||
|
|
||||||
|
if(!this.offline){
|
||||||
|
this.offline = true;
|
||||||
|
this.trigger("offline", true);
|
||||||
|
}
|
||||||
|
|
||||||
if(!entry) {
|
if(!entry) {
|
||||||
deferred.reject({
|
deferred.reject({
|
||||||
message : "File not found in the storage: " + url,
|
message : "File not found in the storage: " + url,
|
||||||
|
@ -7938,7 +7994,7 @@ EPUBJS.Storage.prototype.getXml = function(url){
|
||||||
var reader = new FileReader();
|
var reader = new FileReader();
|
||||||
reader.addEventListener("loadend", function() {
|
reader.addEventListener("loadend", function() {
|
||||||
var parser = new DOMParser();
|
var parser = new DOMParser();
|
||||||
var doc = parser.parseFromString(text, "text/xml");
|
var doc = parser.parseFromString(reader.result, "text/xml");
|
||||||
deferred.resolve(doc);
|
deferred.resolve(doc);
|
||||||
});
|
});
|
||||||
reader.readAsText(blob, mimeType);
|
reader.readAsText(blob, mimeType);
|
||||||
|
@ -7959,6 +8015,7 @@ EPUBJS.Storage.prototype.failed = function(error){
|
||||||
};
|
};
|
||||||
|
|
||||||
RSVP.EventTarget.mixin(EPUBJS.Storage.prototype);
|
RSVP.EventTarget.mixin(EPUBJS.Storage.prototype);
|
||||||
|
|
||||||
EPUBJS.Unarchiver = function(url){
|
EPUBJS.Unarchiver = function(url){
|
||||||
|
|
||||||
this.checkRequirements();
|
this.checkRequirements();
|
||||||
|
|
File diff suppressed because one or more lines are too long
16
src/book.js
16
src/book.js
|
@ -789,8 +789,8 @@ EPUBJS.Book.prototype.displayChapter = function(chap, end, deferred){
|
||||||
|
|
||||||
defer.resolve(book.renderer);
|
defer.resolve(book.renderer);
|
||||||
|
|
||||||
if(!book.settings.fromStorage &&
|
if(book.settings.fromStorage === false &&
|
||||||
!book.settings.contained) {
|
book.settings.contained === false) {
|
||||||
book.preloadNextChapter();
|
book.preloadNextChapter();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1083,7 +1083,7 @@ EPUBJS.Book.prototype.fromStorage = function(stored) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if(this.store && this.settings.fromStorage && stored === false){
|
if(this.store && this.settings.fromStorage && stored === false){
|
||||||
this.settings.fromStorage = true;
|
this.settings.fromStorage = false;
|
||||||
this.store.off("offline");
|
this.store.off("offline");
|
||||||
this.renderer.removeHook("beforeChapterDisplay", hooks, true);
|
this.renderer.removeHook("beforeChapterDisplay", hooks, true);
|
||||||
this.store = false;
|
this.store = false;
|
||||||
|
@ -1092,13 +1092,15 @@ EPUBJS.Book.prototype.fromStorage = function(stored) {
|
||||||
this.store = new EPUBJS.Storage(this.settings.storage);
|
this.store = new EPUBJS.Storage(this.settings.storage);
|
||||||
this.store.on("offline", function (offline) {
|
this.store.on("offline", function (offline) {
|
||||||
if (!offline) {
|
if (!offline) {
|
||||||
this.offline = true;
|
// Online
|
||||||
this.settings.fromStorage = true;
|
this.offline = false;
|
||||||
|
this.settings.fromStorage = false;
|
||||||
this.renderer.removeHook("beforeChapterDisplay", hooks, true);
|
this.renderer.removeHook("beforeChapterDisplay", hooks, true);
|
||||||
this.trigger("book:online");
|
this.trigger("book:online");
|
||||||
} else {
|
} else {
|
||||||
this.offline = false;
|
// Offline
|
||||||
this.settings.fromStorage = false;
|
this.offline = true;
|
||||||
|
this.settings.fromStorage = true;
|
||||||
this.renderer.registerHook("beforeChapterDisplay", hooks, true);
|
this.renderer.registerHook("beforeChapterDisplay", hooks, true);
|
||||||
this.trigger("book:offline");
|
this.trigger("book:offline");
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,7 @@ EPUBJS.Chapter.prototype.load = function(_store){
|
||||||
var promise;
|
var promise;
|
||||||
// if(this.store && (!this.book.online || this.book.contained))
|
// if(this.store && (!this.book.online || this.book.contained))
|
||||||
if(store){
|
if(store){
|
||||||
promise = store.getXml(this.href);
|
promise = store.getXml(this.absolute);
|
||||||
}else{
|
}else{
|
||||||
promise = EPUBJS.core.request(this.absolute, 'xml');
|
promise = EPUBJS.core.request(this.absolute, 'xml');
|
||||||
}
|
}
|
||||||
|
@ -42,7 +42,7 @@ EPUBJS.Chapter.prototype.render = function(_store){
|
||||||
var head = doc.head;
|
var head = doc.head;
|
||||||
var base = doc.createElement("base");
|
var base = doc.createElement("base");
|
||||||
|
|
||||||
base.setAttribute("href", window.location.origin + this.absolute);
|
base.setAttribute("href", this.absolute);
|
||||||
head.insertBefore(base, head.firstChild);
|
head.insertBefore(base, head.firstChild);
|
||||||
contents = serializer.serializeToString(doc);
|
contents = serializer.serializeToString(doc);
|
||||||
|
|
||||||
|
|
|
@ -24,21 +24,20 @@ EPUBJS.Render.Iframe.prototype.create = function(){
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the source of the iframe with the given URL string
|
* Sets the source of the iframe with the given URL string
|
||||||
* Takes: URL string
|
* Takes: Document Contents String
|
||||||
* Returns: promise with document element
|
* Returns: promise with document element
|
||||||
*/
|
*/
|
||||||
EPUBJS.Render.Iframe.prototype.load = function(url){
|
EPUBJS.Render.Iframe.prototype.load = function(contents, url){
|
||||||
var render = this,
|
var render = this,
|
||||||
deferred = new RSVP.defer();
|
deferred = new RSVP.defer();
|
||||||
|
|
||||||
// Reset the scroll position
|
|
||||||
render.leftPos = 0;
|
|
||||||
|
|
||||||
if(this.window) {
|
if(this.window) {
|
||||||
this.unload();
|
this.unload();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.iframe.onload = function(e) {
|
this.iframe.onload = function(e) {
|
||||||
|
var title;
|
||||||
|
|
||||||
render.document = render.iframe.contentDocument;
|
render.document = render.iframe.contentDocument;
|
||||||
render.docEl = render.document.documentElement;
|
render.docEl = render.document.documentElement;
|
||||||
render.headEl = render.document.head;
|
render.headEl = render.document.head;
|
||||||
|
@ -47,6 +46,10 @@ EPUBJS.Render.Iframe.prototype.load = function(url){
|
||||||
|
|
||||||
render.window.addEventListener("resize", render.resized.bind(render), false);
|
render.window.addEventListener("resize", render.resized.bind(render), false);
|
||||||
|
|
||||||
|
// Reset the scroll position
|
||||||
|
render.leftPos = 0;
|
||||||
|
render.setLeft(0);
|
||||||
|
|
||||||
//-- Clear Margins
|
//-- Clear Margins
|
||||||
if(render.bodyEl) {
|
if(render.bodyEl) {
|
||||||
render.bodyEl.style.margin = "0";
|
render.bodyEl.style.margin = "0";
|
||||||
|
@ -61,6 +64,11 @@ EPUBJS.Render.Iframe.prototype.load = function(url){
|
||||||
render.docEl.style.right = "0";
|
render.docEl.style.right = "0";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(typeof render.window.history.pushState != "undefined") {
|
||||||
|
title = render.headEl.querySelector('title');
|
||||||
|
render.window.history.pushState(null, title ? title.textContent : '', url);
|
||||||
|
}
|
||||||
|
|
||||||
deferred.resolve(render.docEl);
|
deferred.resolve(render.docEl);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -72,7 +80,17 @@ EPUBJS.Render.Iframe.prototype.load = function(url){
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
this.iframe.contentWindow.location.replace(url);
|
// this.iframe.contentWindow.location.replace(url);
|
||||||
|
this.document = this.iframe.contentDocument;
|
||||||
|
|
||||||
|
if(!this.document) {
|
||||||
|
deferred.reject(new Error("No Document Available"));
|
||||||
|
return deferred;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.document.open();
|
||||||
|
this.document.write(contents);
|
||||||
|
this.document.close();
|
||||||
|
|
||||||
return deferred.promise;
|
return deferred.promise;
|
||||||
};
|
};
|
||||||
|
|
|
@ -104,8 +104,8 @@ EPUBJS.Renderer.prototype.displayChapter = function(chapter, globalLayout){
|
||||||
}
|
}
|
||||||
this._moving = true;
|
this._moving = true;
|
||||||
// Get the url string from the chapter (may be from storage)
|
// Get the url string from the chapter (may be from storage)
|
||||||
return chapter.url().
|
return chapter.render().
|
||||||
then(function(url) {
|
then(function(contents) {
|
||||||
|
|
||||||
// Unload the previous chapter listener
|
// Unload the previous chapter listener
|
||||||
if(this.currentChapter) {
|
if(this.currentChapter) {
|
||||||
|
@ -130,7 +130,7 @@ EPUBJS.Renderer.prototype.displayChapter = function(chapter, globalLayout){
|
||||||
this.currentChapterCfiBase = chapter.cfiBase;
|
this.currentChapterCfiBase = chapter.cfiBase;
|
||||||
|
|
||||||
this.layoutSettings = this.reconcileLayoutSettings(globalLayout, chapter.properties);
|
this.layoutSettings = this.reconcileLayoutSettings(globalLayout, chapter.properties);
|
||||||
return this.load(url);
|
return this.load(contents, chapter.href);
|
||||||
|
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
|
|
||||||
|
@ -1217,7 +1217,7 @@ EPUBJS.Renderer.prototype.replaceWithStored = function(query, attr, func, callba
|
||||||
_uri = EPUBJS.core.uri(this.currentChapter.absolute),
|
_uri = EPUBJS.core.uri(this.currentChapter.absolute),
|
||||||
_chapterBase = _uri.base,
|
_chapterBase = _uri.base,
|
||||||
_attr = attr,
|
_attr = attr,
|
||||||
_wait = 2000,
|
_wait = 5,
|
||||||
progress = function(url, full, count) {
|
progress = function(url, full, count) {
|
||||||
_newUrls[full] = url;
|
_newUrls[full] = url;
|
||||||
},
|
},
|
||||||
|
@ -1261,14 +1261,15 @@ EPUBJS.Renderer.prototype.replaceWithStored = function(query, attr, func, callba
|
||||||
if(query == "link[href]" && link.getAttribute("rel") !== "stylesheet") {
|
if(query == "link[href]" && link.getAttribute("rel") !== "stylesheet") {
|
||||||
//-- Only Stylesheet links seem to have a load events, just continue others
|
//-- Only Stylesheet links seem to have a load events, just continue others
|
||||||
done(url, full);
|
done(url, full);
|
||||||
|
} else {
|
||||||
|
timeout = setTimeout(function(){
|
||||||
|
done(url, full);
|
||||||
|
}, _wait);
|
||||||
}
|
}
|
||||||
|
|
||||||
link.setAttribute(_attr, url);
|
link.setAttribute(_attr, url);
|
||||||
|
|
||||||
//-- If elements never fire Load Event, should continue anyways
|
|
||||||
timeout = setTimeout(function(){
|
|
||||||
done(url, full);
|
|
||||||
}, _wait);
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -83,9 +83,7 @@ EPUBJS.replace.links = function(_store, full, done, link){
|
||||||
if(link.getAttribute("rel") === "stylesheet") {
|
if(link.getAttribute("rel") === "stylesheet") {
|
||||||
EPUBJS.replace.stylesheets(_store, full).then(function(url, full){
|
EPUBJS.replace.stylesheets(_store, full).then(function(url, full){
|
||||||
// done
|
// done
|
||||||
setTimeout(function(){
|
|
||||||
done(url, full);
|
done(url, full);
|
||||||
}, 5); //-- Allow for css to apply before displaying chapter
|
|
||||||
}, function(reason) {
|
}, function(reason) {
|
||||||
// we were unable to replace the style sheets
|
// we were unable to replace the style sheets
|
||||||
done(null);
|
done(null);
|
||||||
|
|
|
@ -83,18 +83,35 @@ EPUBJS.Storage.prototype.getText = function(url){
|
||||||
|
|
||||||
return EPUBJS.core.request(url, 'arraybuffer', this.withCredentials)
|
return EPUBJS.core.request(url, 'arraybuffer', this.withCredentials)
|
||||||
.then(function(buffer){
|
.then(function(buffer){
|
||||||
|
|
||||||
if(this.offline){
|
if(this.offline){
|
||||||
this.offline = false;
|
this.offline = false;
|
||||||
this.trigger("offline", false);
|
this.trigger("offline", false);
|
||||||
}
|
}
|
||||||
localforage.setItem(encodedUrl, buffer);
|
localforage.setItem(encodedUrl, buffer);
|
||||||
return url;
|
return buffer;
|
||||||
}.bind(this))
|
}.bind(this))
|
||||||
|
.then(function(data) {
|
||||||
|
var deferred = new RSVP.defer();
|
||||||
|
var mimeType = EPUBJS.core.getMimeType(url);
|
||||||
|
var blob = new Blob([data], {type : mimeType});
|
||||||
|
var reader = new FileReader();
|
||||||
|
reader.addEventListener("loadend", function() {
|
||||||
|
deferred.resolve(reader.result);
|
||||||
|
});
|
||||||
|
reader.readAsText(blob, mimeType);
|
||||||
|
return deferred.promise;
|
||||||
|
})
|
||||||
.catch(function() {
|
.catch(function() {
|
||||||
|
|
||||||
var deferred = new RSVP.defer();
|
var deferred = new RSVP.defer();
|
||||||
var entry = localforage.getItem(encodedUrl);
|
var entry = localforage.getItem(encodedUrl);
|
||||||
|
|
||||||
|
if(!this.offline){
|
||||||
|
this.offline = true;
|
||||||
|
this.trigger("offline", true);
|
||||||
|
}
|
||||||
|
|
||||||
if(!entry) {
|
if(!entry) {
|
||||||
deferred.reject({
|
deferred.reject({
|
||||||
message : "File not found in the storage: " + url,
|
message : "File not found in the storage: " + url,
|
||||||
|
@ -177,12 +194,30 @@ EPUBJS.Storage.prototype.getXml = function(url){
|
||||||
this.trigger("offline", false);
|
this.trigger("offline", false);
|
||||||
}
|
}
|
||||||
localforage.setItem(encodedUrl, buffer);
|
localforage.setItem(encodedUrl, buffer);
|
||||||
return url;
|
return buffer;
|
||||||
}.bind(this))
|
}.bind(this))
|
||||||
|
.then(function(data) {
|
||||||
|
var deferred = new RSVP.defer();
|
||||||
|
var mimeType = EPUBJS.core.getMimeType(url);
|
||||||
|
var blob = new Blob([data], {type : mimeType});
|
||||||
|
var reader = new FileReader();
|
||||||
|
reader.addEventListener("loadend", function() {
|
||||||
|
var parser = new DOMParser();
|
||||||
|
var doc = parser.parseFromString(reader.result, "text/xml");
|
||||||
|
deferred.resolve(doc);
|
||||||
|
});
|
||||||
|
reader.readAsText(blob, mimeType);
|
||||||
|
return deferred.promise;
|
||||||
|
})
|
||||||
.catch(function() {
|
.catch(function() {
|
||||||
var deferred = new RSVP.defer();
|
var deferred = new RSVP.defer();
|
||||||
var entry = localforage.getItem(encodedUrl);
|
var entry = localforage.getItem(encodedUrl);
|
||||||
|
|
||||||
|
if(!this.offline){
|
||||||
|
this.offline = true;
|
||||||
|
this.trigger("offline", true);
|
||||||
|
}
|
||||||
|
|
||||||
if(!entry) {
|
if(!entry) {
|
||||||
deferred.reject({
|
deferred.reject({
|
||||||
message : "File not found in the storage: " + url,
|
message : "File not found in the storage: " + url,
|
||||||
|
@ -197,7 +232,7 @@ EPUBJS.Storage.prototype.getXml = function(url){
|
||||||
var reader = new FileReader();
|
var reader = new FileReader();
|
||||||
reader.addEventListener("loadend", function() {
|
reader.addEventListener("loadend", function() {
|
||||||
var parser = new DOMParser();
|
var parser = new DOMParser();
|
||||||
var doc = parser.parseFromString(text, "text/xml");
|
var doc = parser.parseFromString(reader.result, "text/xml");
|
||||||
deferred.resolve(doc);
|
deferred.resolve(doc);
|
||||||
});
|
});
|
||||||
reader.readAsText(blob, mimeType);
|
reader.readAsText(blob, mimeType);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue