1
0
Fork 0
mirror of https://github.com/futurepress/epub.js.git synced 2025-10-05 15:32:55 +02:00

Merge branch 'gh-pages'

This commit is contained in:
Fred Chasen 2013-03-02 18:37:01 -08:00
commit 688cbb8eb5
25 changed files with 168 additions and 471 deletions

BIN
fpjs/.DS_Store vendored

Binary file not shown.

View file

@ -1,197 +0,0 @@
FP.namespace('app').init = (function($){
function init(){
var fileInput = document.getElementById("file-input");
var area = document.getElementById("area");
var bookFiles = [],
bookImages = [],
bookCSS = [];
var pages = {},
images = {},
ordered = [];
//-- Tell zip where it is located
zip.workerScriptsPath = "js/libs/";
//-- Listen for the Input Change
fileInput.addEventListener('change', function(){
//-- Grab first file
var file = fileInput.files[0];
//-- Get all Entries in Zip file
FP.core.loadZip.getEntries(file, function(entries) {
//TODO: parse the rootfile to find files
var total = 0,
loaded = 0;
var total_img = 0,
loaded_img = 0;
//-- Split Entries into xhtml, images, css
entries.forEach(function(entry) {
if(entry.filename.search(".xhtml") != -1 ||
entry.filename.search(".html") != -1 ||
entry.filename.search(".htm") != -1){
//console.log("entry", entry);
bookFiles.push(entry);
total++;
}
if(entry.filename.search(".jpg") != -1 || entry.filename.search(".png") != -1){
bookImages.push(entry);
total_img++;
}
if(entry.filename.search(".css") != -1){
bookCSS.push(entry);
}
});
bookImages.forEach(function(file) {
var name = file.filename.replace("OPS/", '').replace("OEBPS/", '');
//console.log("name", name)
//Blob or File
FP.core.loadZip.getEntryFile(file, "Blob", function(blobURL, revokeBlobURL) {
images[name] = blobURL;
//console.log("images[name]", images[name])
//var img = document.createElement('img');
//img.src = blobURL;
//area.appendChild(img);
loaded_img++;
if(loaded_img == total_img){
imgReady();
}
}, function(current, total) {
//-- Progress Meter
});
});
bookFiles.forEach(function(file) {
var reg = /\/(.*)\./,
name = reg.exec(file.filename)[1];
//TEMP ORDER FIX
if(name === "cover") name = "1_"+name;
if(name === "TOC") name = "2_"+name;
//Blob or File
FP.core.loadZip.getEntryFile(file, "Blob", function(blobURL, revokeBlobURL) {
//console.log(file, blobURL)
// $.ajax({
// url: blobURL,
// success: function(data) {
// pages.push(data);
// }
// });
$.ajax({
url: blobURL,
dataType: "html",
cache: true,
success: function(data) {
//var section = $("<section>");
//$('#area').append(section);
pages[name] = data;
ordered.push(name);
loaded++;
if(loaded == total){
allReady();
}
},
error: function(e){
console.log("error:", e)
}
});
//var section = $("<section>");
//section.load(blobURL);
//$('#area').append(section);
// var iframe = document.createElement('iframe');
// iframe.src = window.webkitURL.createObjectURL(blobURL);
// iframe.type = "content";
// area.appendChild(iframe);
// FP.core.load(blobURL, function(data){
// //console.log("data", data);
// var iframe = document.createElement('iframe');
// iframe.src = blobURL;
// iframe.type = "content";
// area.appendChild(iframe);
// });
// var reader = new FileReader();
// reader.onloadend = function() {
// if (this.result) {
// console.log(this.result)
// }
// else if ( errorCallback ) {
// console.log("ERROR")
// }
// };
// reader.readAsText(file);
}, function(current, total) {
//-- Progress Meter
});
});
function allReady(){
FP.book.page.start($("#area"), pages, ordered);
$("#modal").fadeOut();
$("#next").fadeIn();
$("#prev").fadeIn();
$("#next").on("click", function(){
FP.book.page.next();
});
$("#prev").on("click", function(){
FP.book.page.prev();
});
$(document).keydown(function(e) {
if(e.keyCode == 37) { // left
FP.book.page.prev();
}
else if(e.keyCode == 39) { // right
FP.book.page.next();
}
});
}
function imgReady(){
FP.book.page.setImages(images);
}
//console.log(bookFiles, bookImages, bookCSS)
});
});
}
return init;
})(jQuery);

View file

@ -1,147 +0,0 @@
FP.namespace('core').load = (function(){
function load(url, callback){
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'blob';
xhr.onload = function(e) {
if (this.status == 200) {
// Note: .response instead of .responseText
var blob = new Blob([this.response], {type: 'application/xhtml+xml'});
callback(blob);
}
};
xhr.send();
}
return load;
})();
FP.namespace('core').load2 = (function(){
/*
PDFJS.getPdf(
{
url: "http://google.com",
progress: function getPDFProgress(evt) {
handler.send('DocProgress', {
loaded: evt.loaded,
total: evt.lengthComputable ? evt.total : void(0)
});
},
error: function getPDFError(e) {
console.log('DocError', 'Unexpected server response of ' +
e.target.status + '.');
},
headers: source.httpHeaders
},
function(data) {
});
});
*/
function load(arg, callback){
var params = arg;
if (typeof arg === 'string'){
params = { url: arg };
}
var xhr = new XMLHttpRequest();
xhr.open('GET', params.url);
var headers = params.headers;
if (headers) {
for (var property in headers) {
if (typeof headers[property] === 'undefined')
continue;
xhr.setRequestHeader(property, params.headers[property]);
}
}
xhr.mozResponseType = xhr.responseType = 'arraybuffer';
var protocol = params.url.substring(0, params.url.indexOf(':') + 1);
xhr.expected = (protocol === 'http:' || protocol === 'https:') ? 200 : 0;
if ('progress' in params)
xhr.onprogress = params.progress || undefined;
var calledErrorBack = false;
if ('error' in params) {
xhr.onerror = function errorBack() {
if (!calledErrorBack) {
calledErrorBack = true;
params.error();
}
}
}
xhr.onreadystatechange = function getPdfOnreadystatechange(e) {
if (xhr.readyState === 4) {
if (xhr.status === xhr.expected) {
var data = (xhr.mozResponseArrayBuffer || xhr.mozResponse ||
xhr.responseArrayBuffer || xhr.response);
callback(data);
} else if (params.error && !calledErrorBack) {
calledErrorBack = true;
params.error(e);
}
}
};
xhr.send(null);
}
return load;
})();
FP.namespace("core").loadZip = (function(){
var URL = webkitURL || mozURL || URL;
function getEntries(file, onend) {
//console.log("file", file)
// FP.utils.createTempFile(function(temp){
// console.log("temp", temp)
// });
zip.createReader(new zip.BlobReader(file), function(zipReader) {
zipReader.getEntries(onend);
}, function(error){ console.log("Error:", error) });
}
function getEntryFile(entry, creationMethod, onend, onprogress) {
var writer, zipFileEntry;
function getData() {
entry.getData(writer, function(blob) {
var blobURL = creationMethod == "Blob" ? URL.createObjectURL(blob) : zipFileEntry.toURL();
onend(blobURL, function() {
if (creationMethod == "Blob")
URL.revokeObjectURL(blobURL);
});
}, onprogress);
}
if (creationMethod == "Blob") {
writer = new zip.BlobWriter();
getData();
} else {
FP.utils.createTempFile(function(fileEntry) {
zipFileEntry = fileEntry;
writer = new zip.FileWriter(zipFileEntry);
getData();
});
}
}
return {
"getEntries" : getEntries,
"getEntryFile" : getEntryFile
}
})();

View file

@ -1,71 +0,0 @@
FP.namespace('book').page = (function($){
var _bookPages,
_ordered,
_$el,
_currentPage = 0,
_images;
function start($el, pages, order){
_$el = $el;
_bookPages = pages;
_ordered = order;
_ordered.sort(function(a, b) {
var textA = a.toUpperCase();
var textB = b.toUpperCase();
return (textA < textB) ? -1 : (textA > textB) ? 1 : 0;
});
loadIn(0)
}
function loadIn(pageNum){
var page;
_currentPage = pageNum;
page = _bookPages[_ordered[_currentPage]];
_$el.html(page);
if(_images){
scanImages();
}
}
function next(){
if(_currentPage <= _ordered.length){
loadIn(_currentPage+1);
}
}
function prev(){
if(_currentPage > 0){
loadIn(_currentPage-1);
}
}
function setImages(images){
_images = images;
//scanImages();
}
function scanImages(){
_$el.find("img").each(function(){
var $this = $(this),
src = $this.attr("src");
$this.attr("src", _images[src]);
})
}
return {
"start" : start,
"loadIn" : loadIn,
"prev" : prev,
"next" : next,
"setImages": setImages
};
})(jQuery);

View file

@ -1,23 +0,0 @@
FP.namespace("utils").createTempFile = (function(){
var requestFileSystem = webkitRequestFileSystem || mozRequestFileSystem || requestFileSystem;
function createTempFile(callback) {
var tmpFilename = "tmp.dat";
requestFileSystem(TEMPORARY, 4 * 1024 * 1024 * 1024, function(filesystem) {
function create() {
filesystem.root.getFile(tmpFilename, {
create : true
}, function(zipFile) {
callback(zipFile);
});
}
filesystem.root.getFile(tmpFilename, null, function(entry) {
entry.remove(create, create);
}, create);
});
}
return createTempFile
})();

View file

@ -2,7 +2,7 @@ FP.store = FP.store || {};
FP.store.filesystem = function() {
var _urls = {},
_queue = new FP.Queue("fpjs/render/loader_filesystem.js", 6),
_queue = new FP.Queue("fpjs/render/workers/loader_filesystem.js", 6),
_requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem,
_fs;

View file

@ -1,5 +1,5 @@
FP.Unarchiver = function(url, callback){
this.libPath = "fpjs/libs/";
this.libPath = (this.fpjsPath || "fpjs/" ) + "/libs/";
this.zipUrl = url;
this.callback = callback;
this.loadLib(function(){

View file

@ -1,5 +1,3 @@
importScripts('core.js');
var _requestFileSystem = self.requestFileSystem || self.webkitRequestFileSystem;
const DBSIZE = 5*1024*1024;
@ -34,7 +32,7 @@ self.openFs = function(callback){
}
self.request = function(path, callback) {
var xhr = new FP.core.loadFile(path);
var xhr = new self.loadFile(path);
xhr.succeeded = function(file) {
if(callback) callback(file);
@ -113,5 +111,46 @@ self.errorHandler = function(e) {
break;
}
}
self.loadFile = function(url, callback){
var xhr = new XMLHttpRequest();
this.succeeded = function(response){
if(callback){
callback(response);
}
}
this.failed = function(err){
console.log("Error:", err);
}
this.start = function(){
var that = this;
xhr.open('GET', url, true);
xhr.responseType = 'blob';
xhr.onload = function(e) {
if (this.status == 200) {
that.succeeded(this.response);
}
};
xhr.onerror = function(e) {
that.failed(this.status); //-- TODO: better error message
};
xhr.send();
}
return {
"start": this.start,
"succeeded" : this.succeeded,
"failed" : this.failed
}
}
self.openFs();