1
0
Fork 0
mirror of https://github.com/futurepress/epub.js.git synced 2025-10-03 14:59:18 +02:00

setup browserify and requires

This commit is contained in:
fchasen 2015-12-03 23:41:49 -05:00
parent 76aab85dc4
commit 91d1df14b1
25 changed files with 4789 additions and 4441 deletions

7884
dist/epub.js vendored

File diff suppressed because it is too large Load diff

1
dist/epub.js.map vendored Normal file

File diff suppressed because one or more lines are too long

7
dist/epub.min.js vendored

File diff suppressed because one or more lines are too long

1
dist/epub.min.js.map vendored Normal file

File diff suppressed because one or more lines are too long

View file

@ -10,28 +10,14 @@ var onError = function (err) {
};
var server = require("./tools/serve.js");
var files = [
'node_modules/rsvp/dist/rsvp.js',
'src/epub.js',
'src/core.js',
'src/queue.js',
'src/hooks.js',
'src/parser.js',
'src/epubcfi.js',
'src/navigation.js',
'src/section.js',
'src/spine.js',
'src/replacements.js',
'src/book.js',
'src/view.js',
'src/views.js',
'src/layout.js',
'src/rendition.js',
'src/continuous.js',
'src/paginate.js',
'src/map.js',
'src/locations.js'
];
var browserify = require('browserify');
var watchify = require('watchify');
var source = require('vinyl-source-stream');
var buffer = require('vinyl-buffer');
var sourcemaps = require('gulp-sourcemaps');
// https://github.com/mishoo/UglifyJS2/pull/265
// uglify.AST_Node.warn_function = function() {};
// Lint JS
gulp.task('lint', function() {
@ -40,20 +26,30 @@ gulp.task('lint', function() {
.pipe(jshint.reporter('default'));
});
// Concat & Minify JS
gulp.task('minify', function(){
return gulp.src(files)
// set up the browserify instance on a task basis
gulp.task('bundle', function () {
return bundle('epub.js');
});
// Minify JS
gulp.task('minify', ['bundle'], function(){
var uglifyOptions = {
mangle: true,
preserveComments : "license"
};
return gulp.src('dist/epub.js')
.pipe(plumber({ errorHandler: onError }))
.pipe(concat('epub.js'))
.pipe(gulp.dest('dist'))
.pipe(rename('epub.min.js'))
.pipe(uglify())
.pipe(sourcemaps.init({loadMaps: true}))
.pipe(uglify(uglifyOptions))
.pipe(sourcemaps.write('./'))
.pipe(gulp.dest('dist'));
});
// Watch Our Files
gulp.task('watch', function() {
gulp.watch('src/*.js', ['minify']);
// gulp.watch('src/*.js', ['watchify']);
return bundle('epub.js', true);
});
gulp.task('serve', ["watch"], function() {
@ -61,8 +57,38 @@ gulp.task('serve', ["watch"], function() {
});
// Default
gulp.task('default', ['lint', 'minify']);
gulp.task('default', ['lint', 'build']);
// gulp.task('default', function() {
// // place code for your default task here
// });
function bundle(file, watch) {
var opt = {
entries: ['src/'+file],
debug : true
};
// watchify() if watch requested, otherwise run browserify() once
var bundler = watch ? watchify(browserify(opt)) : browserify(opt);
function rebundle() {
var stream = bundler.bundle();
return stream
.on('error', gutil.log)
.pipe(source(file))
.pipe(buffer())
.pipe(sourcemaps.init({loadMaps: true}))
.pipe(sourcemaps.write('./'))
.pipe(gulp.dest('./dist/'));
}
// listen for an update and run rebundle
bundler.on('update', function() {
rebundle();
gutil.log('Rebundle...');
});
// run it once the first time buildScript is called
return rebundle();
}

View file

@ -16,19 +16,24 @@
"colors": "^0.6.2",
"connect": "^3.0.1",
"express": "^4.5.1",
"gulp": "^3.8.7",
"gulp": "^3.9.0",
"gulp-concat": "^2.3.4",
"gulp-connect": "~2.0.6",
"gulp-jshint": "^1.8.4",
"gulp-plumber": "^0.6.4",
"gulp-rename": "^1.2.0",
"gulp-sourcemaps": "^1.6.0",
"gulp-uglify": "^0.3.1",
"gulp-util": "^3.0.0",
"morgan": "^1.1.1",
"optimist": "^0.6.1",
"portfinder": "^0.2.1",
"qunitjs": "^1.14.0",
"serve-static": "^1.3.1"
"serve-static": "^1.3.1",
"uglify": "^0.1.5",
"vinyl-buffer": "^1.0.0",
"vinyl-source-stream": "^1.1.0",
"watchify": "^3.6.1"
},
"dependencies": {
"rsvp": "^3.0.18"

View file

@ -1,4 +1,14 @@
EPUBJS.Book = function(_url, options){
var RSVP = require('rsvp');
var core = require('./core');
var Spine = require('./spine');
var Locations = require('./locations');
var Parser = require('./parser');
var Navigation = require('./navigation');
var Rendition = require('./rendition');
var Continuous = require('./continuous');
var Paginate = require('./paginate');
function Book(_url, options){
// Promises
this.opening = new RSVP.defer();
this.opened = this.opening.promise;
@ -28,21 +38,21 @@ EPUBJS.Book = function(_url, options){
// Queue for methods used before opening
this.isRendered = false;
this._q = EPUBJS.core.queue(this);
// this._q = core.queue(this);
this.request = this.requestMethod.bind(this);
this.spine = new EPUBJS.Spine(this.request);
this.locations = new EPUBJS.Locations(this.spine, this.request);
this.spine = new Spine(this.request);
this.locations = new Locations(this.spine, this.request);
if(_url) {
this.open(_url);
}
};
EPUBJS.Book.prototype.open = function(_url){
Book.prototype.open = function(_url){
var uri;
var parse = new EPUBJS.Parser();
var parse = new Parser();
var epubPackage;
var book = this;
var containerPath = "META-INF/container.xml";
@ -57,7 +67,7 @@ EPUBJS.Book.prototype.open = function(_url){
if(typeof(_url) === "object") {
uri = _url;
} else {
uri = EPUBJS.core.uri(_url);
uri = core.uri(_url);
}
// Find path to the Container
@ -69,8 +79,8 @@ EPUBJS.Book.prototype.open = function(_url){
if(uri.origin) {
this.url = uri.base;
} else if(window){
location = EPUBJS.core.uri(window.location.href);
this.url = EPUBJS.core.resolveUrl(location.base, uri.directory);
location = core.uri(window.location.href);
this.url = core.resolveUrl(location.base, uri.directory);
} else {
this.url = uri.directory;
}
@ -93,7 +103,7 @@ EPUBJS.Book.prototype.open = function(_url){
return parse.container(containerXml); // Container has path to content
}).
then(function(paths){
var packageUri = EPUBJS.core.uri(paths.packagePath);
var packageUri = core.uri(paths.packagePath);
book.packageUrl = _url + paths.packagePath;
book.encoding = paths.encoding;
@ -101,8 +111,8 @@ EPUBJS.Book.prototype.open = function(_url){
if(packageUri.origin) {
book.url = packageUri.base;
} else if(window){
location = EPUBJS.core.uri(window.location.href);
book.url = EPUBJS.core.resolveUrl(location.base, _url + packageUri.directory);
location = core.uri(window.location.href);
book.url = core.resolveUrl(location.base, _url + packageUri.directory);
} else {
book.url = packageUri.directory;
}
@ -143,16 +153,16 @@ EPUBJS.Book.prototype.open = function(_url){
return this.opened;
};
EPUBJS.Book.prototype.unpack = function(packageXml){
Book.prototype.unpack = function(packageXml){
var book = this,
parse = new EPUBJS.Parser();
parse = new Parser();
book.package = parse.packageContents(packageXml); // Extract info from contents
book.package.baseUrl = book.url; // Provides a url base for resolving paths
this.spine.load(book.package);
book.navigation = new EPUBJS.Navigation(book.package, this.request);
book.navigation = new Navigation(book.package, this.request);
book.navigation.load().then(function(toc){
book.toc = toc;
book.loading.navigation.resolve(book.toc);
@ -166,45 +176,48 @@ EPUBJS.Book.prototype.unpack = function(packageXml){
};
// Alias for book.spine.get
EPUBJS.Book.prototype.section = function(target) {
Book.prototype.section = function(target) {
return this.spine.get(target);
};
// Sugar to render a book
EPUBJS.Book.prototype.renderTo = function(element, options) {
var renderer = (options && options.method) ?
options.method.charAt(0).toUpperCase() + options.method.substr(1) :
"Rendition";
Book.prototype.renderTo = function(element, options) {
var renderMethod = (options && options.method) ?
options.method :
"rendition";
var Renderer = require('./'+renderMethod);
this.rendition = new EPUBJS[renderer](this, options);
this.rendition = new Renderer(this, options);
this.rendition.attachTo(element);
return this.rendition;
};
EPUBJS.Book.prototype.requestMethod = function(_url) {
Book.prototype.requestMethod = function(_url) {
// Switch request methods
if(this.archived) {
// TODO: handle archived
} else {
return EPUBJS.core.request(_url, 'xml', this.requestCredentials, this.requestHeaders);
return core.request(_url, 'xml', this.requestCredentials, this.requestHeaders);
}
};
EPUBJS.Book.prototype.setRequestCredentials = function(_credentials) {
Book.prototype.setRequestCredentials = function(_credentials) {
this.requestCredentials = _credentials;
};
EPUBJS.Book.prototype.setRequestHeaders = function(_headers) {
Book.prototype.setRequestHeaders = function(_headers) {
this.requestHeaders = _headers;
};
module.exports = Book;
//-- Enable binding events to book
RSVP.EventTarget.mixin(EPUBJS.Book.prototype);
RSVP.EventTarget.mixin(Book.prototype);
//-- Handle RSVP Errors
RSVP.on('error', function(event) {
//console.error(event, event.detail);
console.error(event);
});
RSVP.configure('instrument', true); //-- true | will logging out all RSVP rejections

View file

@ -1,8 +1,13 @@
EPUBJS.Continuous = function(book, options) {
var RSVP = require('rsvp');
var core = require('./core');
var Rendition = require('./rendition');
var View = require('./view');
EPUBJS.Rendition.apply(this, arguments); // call super constructor.
function Continuous(book, options) {
this.settings = EPUBJS.core.extend(this.settings || {}, {
Rendition.apply(this, arguments); // call super constructor.
this.settings = core.extend(this.settings || {}, {
infinite: true,
overflow: "auto",
axis: "vertical",
@ -10,7 +15,7 @@ EPUBJS.Continuous = function(book, options) {
offsetDelta: 250
});
EPUBJS.core.extend(this.settings, options);
core.extend(this.settings, options);
if(this.settings.hidden) {
this.wrapper = this.wrap(this.container);
@ -20,14 +25,14 @@ EPUBJS.Continuous = function(book, options) {
};
// subclass extends superclass
EPUBJS.Continuous.prototype = Object.create(EPUBJS.Rendition.prototype);
EPUBJS.Continuous.prototype.constructor = EPUBJS.Continuous;
Continuous.prototype = Object.create(Rendition.prototype);
Continuous.prototype.constructor = Continuous;
EPUBJS.Continuous.prototype.attachListeners = function(){
Continuous.prototype.attachListeners = function(){
// Listen to window for resize event if width or height is set to a percent
if(!EPUBJS.core.isNumber(this.settings.width) ||
!EPUBJS.core.isNumber(this.settings.height) ) {
if(!core.isNumber(this.settings.width) ||
!core.isNumber(this.settings.height) ) {
window.addEventListener("resize", this.onResized.bind(this), false);
}
@ -39,7 +44,7 @@ EPUBJS.Continuous.prototype.attachListeners = function(){
};
EPUBJS.Continuous.prototype.parseTarget = function(target){
Continuous.prototype.parseTarget = function(target){
if(this.epubcfi.isCfiString(target)) {
cfi = this.epubcfi.parse(target);
spinePos = cfi.spinePos;
@ -49,7 +54,7 @@ EPUBJS.Continuous.prototype.parseTarget = function(target){
}
};
EPUBJS.Continuous.prototype.moveTo = function(offset){
Continuous.prototype.moveTo = function(offset){
// var bounds = this.bounds();
// var dist = Math.floor(offset.top / bounds.height) * bounds.height;
return this.check(
@ -66,19 +71,19 @@ EPUBJS.Continuous.prototype.moveTo = function(offset){
}.bind(this));
};
EPUBJS.Continuous.prototype.afterDisplayed = function(currView){
Continuous.prototype.afterDisplayed = function(currView){
var next = currView.section.next();
var prev = currView.section.prev();
var index = this.views.indexOf(currView);
var prevView, nextView;
if(index + 1 === this.views.length && next) {
nextView = new EPUBJS.View(next, this.viewSettings);
nextView = new View(next, this.viewSettings);
this.q.enqueue(this.append, nextView);
}
if(index === 0 && prev) {
prevView = new EPUBJS.View(prev, this.viewSettings);
prevView = new View(prev, this.viewSettings);
this.q.enqueue(this.prepend, prevView);
}
@ -90,7 +95,7 @@ EPUBJS.Continuous.prototype.afterDisplayed = function(currView){
// Remove Previous Listeners if present
EPUBJS.Continuous.prototype.removeShownListeners = function(view){
Continuous.prototype.removeShownListeners = function(view){
// view.off("shown", this.afterDisplayed);
// view.off("shown", this.afterDisplayedAbove);
@ -98,7 +103,7 @@ EPUBJS.Continuous.prototype.removeShownListeners = function(view){
};
EPUBJS.Continuous.prototype.append = function(view){
Continuous.prototype.append = function(view){
// view.on("shown", this.afterDisplayed.bind(this));
view.onDisplayed = this.afterDisplayed.bind(this);
@ -109,7 +114,7 @@ EPUBJS.Continuous.prototype.append = function(view){
return this.check();
};
EPUBJS.Continuous.prototype.prepend = function(view){
Continuous.prototype.prepend = function(view){
// view.on("shown", this.afterDisplayedAbove.bind(this));
view.onDisplayed = this.afterDisplayed.bind(this);
@ -121,7 +126,7 @@ EPUBJS.Continuous.prototype.prepend = function(view){
return this.check();
};
EPUBJS.Continuous.prototype.counter = function(bounds){
Continuous.prototype.counter = function(bounds){
if(this.settings.axis === "vertical") {
this.scrollBy(0, bounds.heightDelta, true);
@ -131,7 +136,7 @@ EPUBJS.Continuous.prototype.counter = function(bounds){
};
EPUBJS.Continuous.prototype.check = function(_offset){
Continuous.prototype.check = function(_offset){
var checking = new RSVP.defer();
var container = this.bounds();
var promises = [];
@ -182,7 +187,7 @@ EPUBJS.Continuous.prototype.check = function(_offset){
};
EPUBJS.Continuous.prototype.trim = function(){
Continuous.prototype.trim = function(){
var task = new RSVP.defer();
var displayed = this.views.displayed();
var first = displayed[0];
@ -206,7 +211,7 @@ EPUBJS.Continuous.prototype.trim = function(){
return task.promise;
};
EPUBJS.Continuous.prototype.erase = function(view, above){ //Trim
Continuous.prototype.erase = function(view, above){ //Trim
var prevTop;
var prevLeft;
@ -234,10 +239,10 @@ EPUBJS.Continuous.prototype.erase = function(view, above){ //Trim
};
EPUBJS.Continuous.prototype.start = function() {
Continuous.prototype.start = function() {
var scroller;
this.tick = EPUBJS.core.requestAnimationFrame;
this.tick = core.requestAnimationFrame;
if(this.settings.height) {
this.prevScrollTop = this.container.scrollTop;
@ -275,7 +280,7 @@ EPUBJS.Continuous.prototype.start = function() {
};
EPUBJS.Continuous.prototype.onScroll = function(){
Continuous.prototype.onScroll = function(){
if(this.scrolled) {
@ -331,7 +336,7 @@ EPUBJS.Continuous.prototype.onScroll = function(){
};
EPUBJS.Continuous.prototype.resizeView = function(view) {
Continuous.prototype.resizeView = function(view) {
if(this.settings.axis === "horizontal") {
view.lock("height", this.stage.width, this.stage.height);
@ -341,7 +346,7 @@ EPUBJS.Continuous.prototype.onScroll = function(){
};
EPUBJS.Continuous.prototype.currentLocation = function(){
Continuous.prototype.currentLocation = function(){
var visible = this.visible();
var startPage, endPage;
@ -365,7 +370,7 @@ EPUBJS.Continuous.prototype.currentLocation = function(){
};
/*
EPUBJS.Continuous.prototype.current = function(what){
Continuous.prototype.current = function(what){
var view, top;
var container = this.container.getBoundingClientRect();
var length = this.views.length - 1;
@ -409,3 +414,5 @@ EPUBJS.Continuous.prototype.current = function(what){
return this._current;
};
*/
module.exports = Continuous;

View file

@ -1,6 +1,6 @@
EPUBJS.core = {};
var requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;
EPUBJS.core.request = function(url, type, withCredentials, headers) {
function request(url, type, withCredentials, headers) {
var supportsURL = window.URL;
var BLOB_RESPONSE = supportsURL ? "blob" : "arraybuffer";
@ -92,7 +92,7 @@ EPUBJS.core.request = function(url, type, withCredentials, headers) {
};
//-- Parse the different parts of a url, returning a object
EPUBJS.core.uri = function(url){
function uri(url){
var uri = {
protocol : '',
host : '',
@ -139,13 +139,13 @@ EPUBJS.core.uri = function(url){
uri.origin = uri.protocol + "://" + uri.host;
uri.directory = EPUBJS.core.folder(uri.path);
uri.directory = folder(uri.path);
uri.base = uri.origin + uri.directory;
// return origin;
} else {
uri.path = url;
uri.directory = EPUBJS.core.folder(url);
uri.directory = folder(url);
uri.base = uri.directory;
}
@ -159,7 +159,7 @@ EPUBJS.core.uri = function(url){
};
//-- Parse out the folder, will return everything before the last slash
EPUBJS.core.folder = function(url){
function folder(url){
var lastSlash = url.lastIndexOf('/');
@ -171,61 +171,12 @@ EPUBJS.core.folder = function(url){
};
EPUBJS.core.queue = function(_scope){
var _q = [];
var scope = _scope;
// Add an item to the queue
var enqueue = function(funcName, args, context) {
_q.push({
"funcName" : funcName,
"args" : args,
"context" : context
});
return _q;
};
// Run one item
var dequeue = function(){
var inwait;
if(_q.length) {
inwait = _q.shift();
// Defer to any current tasks
// setTimeout(function(){
scope[inwait.funcName].apply(inwait.context || scope, inwait.args);
// }, 0);
}
};
// Run All
var flush = function(){
while(_q.length) {
dequeue();
}
};
// Clear all items in wait
var clear = function(){
_q = [];
};
var length = function(){
return _q.length;
};
return {
"enqueue" : enqueue,
"dequeue" : dequeue,
"flush" : flush,
"clear" : clear,
"length" : length
};
};
EPUBJS.core.isElement = function(obj) {
function isElement(obj) {
return !!(obj && obj.nodeType == 1);
};
// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript
EPUBJS.core.uuid = function() {
function uuid() {
var d = new Date().getTime();
var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = (d + Math.random()*16)%16 | 0;
@ -236,7 +187,7 @@ EPUBJS.core.uuid = function() {
};
// From Lodash
EPUBJS.core.values = function(object) {
function values(object) {
var index = -1,
props = Object.keys(object),
length = props.length,
@ -248,11 +199,11 @@ EPUBJS.core.values = function(object) {
return result;
};
EPUBJS.core.resolveUrl = function(base, path) {
function resolveUrl(base, path) {
var url = [],
segments = [],
baseUri = EPUBJS.core.uri(base),
pathUri = EPUBJS.core.uri(path),
baseUri = uri(base),
pathUri = uri(path),
baseDirectory = baseUri.directory,
pathDirectory = pathUri.directory,
directories = [],
@ -311,7 +262,7 @@ EPUBJS.core.resolveUrl = function(base, path) {
return url.join("/");
};
EPUBJS.core.documentHeight = function() {
function documentHeight() {
return Math.max(
document.documentElement.clientHeight,
document.body.scrollHeight,
@ -321,11 +272,11 @@ EPUBJS.core.documentHeight = function() {
);
};
EPUBJS.core.isNumber = function(n) {
function isNumber(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
};
EPUBJS.core.prefixed = function(unprefixed) {
function prefixed(unprefixed) {
var vendors = ["Webkit", "Moz", "O", "ms" ],
prefixes = ['-Webkit-', '-moz-', '-o-', '-ms-'],
upper = unprefixed[0].toUpperCase() + unprefixed.slice(1),
@ -344,7 +295,7 @@ EPUBJS.core.prefixed = function(unprefixed) {
return unprefixed;
};
EPUBJS.core.defaults = function(obj) {
function defaults(obj) {
for (var i = 1, length = arguments.length; i < length; i++) {
var source = arguments[i];
for (var prop in source) {
@ -354,7 +305,7 @@ EPUBJS.core.defaults = function(obj) {
return obj;
};
EPUBJS.core.extend = function(target) {
function extend(target) {
var sources = [].slice.call(arguments, 1);
sources.forEach(function (source) {
if(!source) return;
@ -367,14 +318,14 @@ EPUBJS.core.extend = function(target) {
// Fast quicksort insert for sorted array -- based on:
// http://stackoverflow.com/questions/1344500/efficient-way-to-insert-a-number-into-a-sorted-array-of-numbers
EPUBJS.core.insert = function(item, array, compareFunction) {
var location = EPUBJS.core.locationOf(item, array, compareFunction);
function insert(item, array, compareFunction) {
var location = locationOf(item, array, compareFunction);
array.splice(location, 0, item);
return location;
};
// Returns where something would fit in
EPUBJS.core.locationOf = function(item, array, compareFunction, _start, _end) {
function locationOf(item, array, compareFunction, _start, _end) {
var start = _start || 0;
var end = _end || array.length;
var pivot = parseInt(start + (end - start) / 2);
@ -399,13 +350,13 @@ EPUBJS.core.locationOf = function(item, array, compareFunction, _start, _end) {
return pivot;
}
if(compared === -1) {
return EPUBJS.core.locationOf(item, array, compareFunction, pivot, end);
return locationOf(item, array, compareFunction, pivot, end);
} else{
return EPUBJS.core.locationOf(item, array, compareFunction, start, pivot);
return locationOf(item, array, compareFunction, start, pivot);
}
};
// Returns -1 of mpt found
EPUBJS.core.indexOfSorted = function(item, array, compareFunction, _start, _end) {
function indexOfSorted(item, array, compareFunction, _start, _end) {
var start = _start || 0;
var end = _end || array.length;
var pivot = parseInt(start + (end - start) / 2);
@ -429,15 +380,13 @@ EPUBJS.core.indexOfSorted = function(item, array, compareFunction, _start, _end)
return pivot; // Found
}
if(compared === -1) {
return EPUBJS.core.indexOfSorted(item, array, compareFunction, pivot, end);
return indexOfSorted(item, array, compareFunction, pivot, end);
} else{
return EPUBJS.core.indexOfSorted(item, array, compareFunction, start, pivot);
return indexOfSorted(item, array, compareFunction, start, pivot);
}
};
EPUBJS.core.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;
EPUBJS.core.bounds = function(el) {
function bounds(el) {
var style = window.getComputedStyle(el);
var widthProps = ["width", "paddingRight", "paddingLeft", "marginRight", "marginLeft", "borderRightWidth", "borderLeftWidth"];
@ -461,7 +410,7 @@ EPUBJS.core.bounds = function(el) {
};
EPUBJS.core.borders = function(el) {
function borders(el) {
var style = window.getComputedStyle(el);
var widthProps = ["paddingRight", "paddingLeft", "marginRight", "marginLeft", "borderRightWidth", "borderLeftWidth"];
@ -485,7 +434,7 @@ EPUBJS.core.borders = function(el) {
};
EPUBJS.core.windowBounds = function() {
function windowBounds() {
var width = window.innerWidth;
var height = window.innerHeight;
@ -502,7 +451,7 @@ EPUBJS.core.windowBounds = function() {
};
//https://stackoverflow.com/questions/13482352/xquery-looking-for-text-with-single-quote/13483496#13483496
EPUBJS.core.cleanStringForXpath = function(str) {
function cleanStringForXpath(str) {
var parts = str.match(/[^'"]+|['"]/g);
parts = parts.map(function(part){
if (part === "'") {
@ -517,7 +466,7 @@ EPUBJS.core.cleanStringForXpath = function(str) {
return "concat(\'\'," + parts.join(",") + ")";
};
EPUBJS.core.indexOfTextNode = function(textNode){
function indexOfTextNode(textNode){
var parent = textNode.parentNode;
var children = parent.childNodes;
var sib;
@ -532,3 +481,28 @@ EPUBJS.core.indexOfTextNode = function(textNode){
return index;
};
module.exports = {
'request': request,
'uri': uri,
'folder': folder,
'isElement': isElement,
'uuid': uuid,
'values': values,
'resolveUrl': resolveUrl,
'indexOfSorted': indexOfSorted,
'documentHeight': documentHeight,
'isNumber': isNumber,
'prefixed': prefixed,
'defaults': defaults,
'extend': extend,
'insert': insert,
'locationOf': locationOf,
'indexOfSorted': indexOfSorted,
'requestAnimationFrame': requestAnimationFrame,
'bounds': bounds,
'borders': borders,
'windowBounds': windowBounds,
'cleanStringForXpath': cleanStringForXpath,
'indexOfTextNode': indexOfTextNode,
};

View file

@ -4,15 +4,28 @@ if (typeof EPUBJS === 'undefined') {
EPUBJS.VERSION = "0.3.0";
var Book = require('./book');
var RSVP = require("rsvp");
function ePub(_url) {
return new Book(_url);
};
if (typeof window !== 'undefined') {
window.ePub = ePub;
window.RSVP = window.RSVP || RSVP;
}
module.exports = ePub;
/*
(function(root) {
"use strict";
var ePub = function(_url) {
return new EPUBJS.Book(_url);
};
module.exports = ePub;
// CommonJS
if (typeof exports === "object") {
root.RSVP = require("rsvp");
// root.RSVP = require("rsvp");
module.exports = ePub;
// RequireJS
} else if (typeof define === "function" && define.amd) {
@ -23,4 +36,4 @@ EPUBJS.VERSION = "0.3.0";
}
})(this);
*/

View file

@ -1,8 +1,10 @@
EPUBJS.EpubCFI = function(cfiStr){
var core = require('./core');
function EpubCFI(cfiStr){
if(cfiStr) return this.parse(cfiStr);
};
EPUBJS.EpubCFI.prototype.generateChapterComponent = function(_spineNodeIndex, _pos, id) {
EpubCFI.prototype.generateChapterComponent = function(_spineNodeIndex, _pos, id) {
var pos = parseInt(_pos),
spineNodeIndex = _spineNodeIndex + 1,
cfi = '/'+spineNodeIndex+'/';
@ -16,7 +18,7 @@ EPUBJS.EpubCFI.prototype.generateChapterComponent = function(_spineNodeIndex, _p
return cfi;
};
EPUBJS.EpubCFI.prototype.generatePathComponent = function(steps) {
EpubCFI.prototype.generatePathComponent = function(steps) {
var parts = [];
steps.forEach(function(part){
@ -33,7 +35,7 @@ EPUBJS.EpubCFI.prototype.generatePathComponent = function(steps) {
return parts.join('/');
};
EPUBJS.EpubCFI.prototype.generateCfiFromElement = function(element, chapter) {
EpubCFI.prototype.generateCfiFromElement = function(element, chapter) {
var steps = this.pathTo(element);
var path = this.generatePathComponent(steps);
if(!path.length) {
@ -45,7 +47,7 @@ EPUBJS.EpubCFI.prototype.generateCfiFromElement = function(element, chapter) {
}
};
EPUBJS.EpubCFI.prototype.pathTo = function(node) {
EpubCFI.prototype.pathTo = function(node) {
var stack = [],
children;
@ -65,14 +67,14 @@ EPUBJS.EpubCFI.prototype.pathTo = function(node) {
return stack;
};
EPUBJS.EpubCFI.prototype.getChapterComponent = function(cfiStr) {
EpubCFI.prototype.getChapterComponent = function(cfiStr) {
var splitStr = cfiStr.split("!");
return splitStr[0];
};
EPUBJS.EpubCFI.prototype.getPathComponent = function(cfiStr) {
EpubCFI.prototype.getPathComponent = function(cfiStr) {
var splitStr = cfiStr.split("!");
var pathComponent = splitStr[1] ? splitStr[1].split(":") : '';
@ -80,13 +82,13 @@ EPUBJS.EpubCFI.prototype.getPathComponent = function(cfiStr) {
return pathComponent[0];
};
EPUBJS.EpubCFI.prototype.getCharecterOffsetComponent = function(cfiStr) {
EpubCFI.prototype.getCharecterOffsetComponent = function(cfiStr) {
var splitStr = cfiStr.split(":");
return splitStr[1] || '';
};
EPUBJS.EpubCFI.prototype.parse = function(cfiStr) {
EpubCFI.prototype.parse = function(cfiStr) {
var cfi = {},
chapSegment,
chapterComponent,
@ -190,7 +192,7 @@ EPUBJS.EpubCFI.prototype.parse = function(cfiStr) {
return cfi;
};
EPUBJS.EpubCFI.prototype.addMarker = function(cfi, _doc, _marker) {
EpubCFI.prototype.addMarker = function(cfi, _doc, _marker) {
var doc = _doc || document;
var marker = _marker || this.createMarker(doc);
var parent;
@ -235,16 +237,16 @@ EPUBJS.EpubCFI.prototype.addMarker = function(cfi, _doc, _marker) {
return marker;
};
EPUBJS.EpubCFI.prototype.createMarker = function(_doc) {
EpubCFI.prototype.createMarker = function(_doc) {
var doc = _doc || document;
var element = doc.createElement('span');
element.id = "EPUBJS-CFI-MARKER:"+ EPUBJS.core.uuid();
element.id = "EPUBJS-CFI-MARKER:"+ core.uuid();
element.classList.add("EPUBJS-CFI-MARKER");
return element;
};
EPUBJS.EpubCFI.prototype.removeMarker = function(marker, _doc) {
EpubCFI.prototype.removeMarker = function(marker, _doc) {
var doc = _doc || document;
// var id = marker.id;
@ -268,7 +270,7 @@ EPUBJS.EpubCFI.prototype.removeMarker = function(marker, _doc) {
};
EPUBJS.EpubCFI.prototype.findParent = function(cfi, _doc) {
EpubCFI.prototype.findParent = function(cfi, _doc) {
var doc = _doc || document,
element = doc.getElementsByTagName('html')[0],
children = Array.prototype.slice.call(element.children),
@ -309,12 +311,12 @@ EPUBJS.EpubCFI.prototype.findParent = function(cfi, _doc) {
return element;
};
EPUBJS.EpubCFI.prototype.compare = function(cfiOne, cfiTwo) {
EpubCFI.prototype.compare = function(cfiOne, cfiTwo) {
if(typeof cfiOne === 'string') {
cfiOne = new EPUBJS.EpubCFI(cfiOne);
cfiOne = new EpubCFI(cfiOne);
}
if(typeof cfiTwo === 'string') {
cfiTwo = new EPUBJS.EpubCFI(cfiTwo);
cfiTwo = new EpubCFI(cfiTwo);
}
// Compare Spine Positions
if(cfiOne.spinePos > cfiTwo.spinePos) {
@ -356,14 +358,14 @@ EPUBJS.EpubCFI.prototype.compare = function(cfiOne, cfiTwo) {
return 0;
};
EPUBJS.EpubCFI.prototype.generateCfiFromHref = function(href, book) {
var uri = EPUBJS.core.uri(href);
EpubCFI.prototype.generateCfiFromHref = function(href, book) {
var uri = core.uri(href);
var path = uri.path;
var fragment = uri.fragment;
var spinePos = book.spineIndexByURL[path];
var loaded;
var deferred = new RSVP.defer();
var epubcfi = new EPUBJS.EpubCFI();
var epubcfi = new EpubCFI();
var spineItem;
if(typeof spinePos !== "undefined"){
@ -380,7 +382,7 @@ EPUBJS.EpubCFI.prototype.generateCfiFromHref = function(href, book) {
return deferred.promise;
};
EPUBJS.EpubCFI.prototype.generateCfiFromTextNode = function(anchor, offset, base) {
EpubCFI.prototype.generateCfiFromTextNode = function(anchor, offset, base) {
var parent = anchor.parentNode;
var steps = this.pathTo(parent);
var path = this.generatePathComponent(steps);
@ -388,13 +390,13 @@ EPUBJS.EpubCFI.prototype.generateCfiFromTextNode = function(anchor, offset, base
return "epubcfi(" + base + "!" + path + "/"+index+":"+(offset || 0)+")";
};
EPUBJS.EpubCFI.prototype.generateCfiFromRangeAnchor = function(range, base) {
EpubCFI.prototype.generateCfiFromRangeAnchor = function(range, base) {
var anchor = range.anchorNode;
var offset = range.anchorOffset;
return this.generateCfiFromTextNode(anchor, offset, base);
};
EPUBJS.EpubCFI.prototype.generateCfiFromRange = function(range, base) {
EpubCFI.prototype.generateCfiFromRange = function(range, base) {
var start, startElement, startSteps, startPath, startOffset, startIndex;
var end, endElement, endSteps, endPath, endOffset, endIndex;
@ -403,7 +405,7 @@ EPUBJS.EpubCFI.prototype.generateCfiFromRange = function(range, base) {
if(start.nodeType === 3) { // text node
startElement = start.parentNode;
//startIndex = 1 + (2 * Array.prototype.indexOf.call(startElement.childNodes, start));
startIndex = 1 + (2 * EPUBJS.core.indexOfTextNode(start));
startIndex = 1 + (2 * core.indexOfTextNode(start));
startSteps = this.pathTo(startElement);
} else if(range.collapsed) {
return this.generateCfiFromElement(start, base); // single element
@ -420,7 +422,7 @@ EPUBJS.EpubCFI.prototype.generateCfiFromRange = function(range, base) {
if(end.nodeType === 3) { // text node
endElement = end.parentNode;
// endIndex = 1 + (2 * Array.prototype.indexOf.call(endElement.childNodes, end));
endIndex = 1 + (2 * EPUBJS.core.indexOfTextNode(end));
endIndex = 1 + (2 * core.indexOfTextNode(end));
endSteps = this.pathTo(endElement);
} else {
@ -444,7 +446,7 @@ EPUBJS.EpubCFI.prototype.generateCfiFromRange = function(range, base) {
}
};
EPUBJS.EpubCFI.prototype.generateXpathFromSteps = function(steps) {
EpubCFI.prototype.generateXpathFromSteps = function(steps) {
var xpath = [".", "*"];
steps.forEach(function(step){
@ -463,7 +465,7 @@ EPUBJS.EpubCFI.prototype.generateXpathFromSteps = function(steps) {
};
EPUBJS.EpubCFI.prototype.generateRangeFromCfi = function(cfi, _doc) {
EpubCFI.prototype.generateRangeFromCfi = function(cfi, _doc) {
var doc = _doc || document;
var range = doc.createRange();
var lastStep;
@ -509,7 +511,7 @@ EPUBJS.EpubCFI.prototype.generateRangeFromCfi = function(cfi, _doc) {
return range;
};
EPUBJS.EpubCFI.prototype.isCfiString = function(target) {
EpubCFI.prototype.isCfiString = function(target) {
if(typeof target === "string" &&
target.indexOf("epubcfi(") === 0) {
return true;
@ -517,3 +519,5 @@ EPUBJS.EpubCFI.prototype.isCfiString = function(target) {
return false;
};
module.exports = EpubCFI;

View file

@ -1,7 +1,4 @@
EPUBJS.Hook = function(context){
this.context = context || this;
this.hooks = [];
};
var RSVP = require('rsvp');
//-- Hooks allow for injecting functions that must all complete in order before finishing
// They will execute in parallel but all must finish before continuing
@ -11,13 +8,18 @@ EPUBJS.Hook = function(context){
// this.content.register(function(){});
// this.content.trigger(args).then(function(){});
function Hook(context){
this.context = context || this;
this.hooks = [];
};
// Adds a function to be run before a hook completes
EPUBJS.Hook.prototype.register = function(func){
Hook.prototype.register = function(func){
this.hooks.push(func);
};
// Triggers a hook to run all functions
EPUBJS.Hook.prototype.trigger = function(){
Hook.prototype.trigger = function(){
var args = arguments;
var context = this.context;
var promises = [];
@ -35,3 +37,5 @@ EPUBJS.Hook.prototype.trigger = function(){
return RSVP.all(promises);
};
module.exports = Hook;

View file

@ -1,10 +1,10 @@
EPUBJS.Layout = EPUBJS.Layout || {};
var core = require('./core');
EPUBJS.Layout.Reflowable = function(){
function Reflowable(){
};
EPUBJS.Layout.Reflowable.prototype.calculate = function(_width, _height, _gap, _devisor){
Reflowable.prototype.calculate = function(_width, _height, _gap, _devisor){
var divisor = _devisor || 1;
@ -32,10 +32,10 @@ EPUBJS.Layout.Reflowable.prototype.calculate = function(_width, _height, _gap, _
this.columnAxis = EPUBJS.core.prefixed('columnAxis');
this.columnGap = EPUBJS.core.prefixed('columnGap');
this.columnWidth = EPUBJS.core.prefixed('columnWidth');
this.columnFill = EPUBJS.core.prefixed('columnFill');
this.columnAxis = core.prefixed('columnAxis');
this.columnGap = core.prefixed('columnGap');
this.columnWidth = core.prefixed('columnWidth');
this.columnFill = core.prefixed('columnFill');
this.width = width;
this.height = _height;
@ -48,7 +48,7 @@ EPUBJS.Layout.Reflowable.prototype.calculate = function(_width, _height, _gap, _
};
EPUBJS.Layout.Reflowable.prototype.format = function(view){
Reflowable.prototype.format = function(view){
var $doc = view.document.documentElement;
var $body = view.document.body;//view.document.querySelector("body");
@ -72,7 +72,7 @@ EPUBJS.Layout.Reflowable.prototype.format = function(view){
view.iframe.style.marginRight = this.gap+"px";
};
EPUBJS.Layout.Reflowable.prototype.count = function(view) {
Reflowable.prototype.count = function(view) {
var totalWidth = view.root().scrollWidth;
var spreads = Math.ceil(totalWidth / this.spread);
@ -82,15 +82,15 @@ EPUBJS.Layout.Reflowable.prototype.count = function(view) {
};
};
EPUBJS.Layout.Fixed = function(_width, _height){
function Fixed(_width, _height){
};
EPUBJS.Layout.Fixed.prototype.calculate = function(_width, _height){
Fixed.prototype.calculate = function(_width, _height){
};
EPUBJS.Layout.Fixed.prototype.format = function(view){
Fixed.prototype.format = function(view){
var width, height;
var $doc = view.document.documentElement;
@ -121,24 +121,24 @@ EPUBJS.Layout.Fixed.prototype.format = function(view){
};
EPUBJS.Layout.Fixed.prototype.count = function(){
Fixed.prototype.count = function(){
return {
spreads : 1,
pages : 1
};
};
EPUBJS.Layout.Scroll = function(){
function Scroll(){
};
EPUBJS.Layout.Scroll.prototype.calculate = function(_width, _height){
Scroll.prototype.calculate = function(_width, _height){
this.spread = _width;
this.column = _width;
this.gap = 0;
};
EPUBJS.Layout.Scroll.prototype.format = function(view){
Scroll.prototype.format = function(view){
var $doc = view.document.documentElement;
@ -147,9 +147,15 @@ EPUBJS.Layout.Scroll.prototype.format = function(view){
};
EPUBJS.Layout.Scroll.prototype.count = function(){
Scroll.prototype.count = function(){
return {
spreads : 1,
pages : 1
};
};
module.exports = {
'Reflowable': Reflowable,
'Fixed': Fixed,
'Scroll': Scroll
};

View file

@ -1,9 +1,14 @@
EPUBJS.Locations = function(spine, request) {
var core = require('./core');
var Queue = require('./queue');
var EpubCFI = require('./epubcfi');
var RSVP = require('rsvp');
function Locations(spine, request) {
this.spine = spine;
this.request = request;
this.q = new EPUBJS.Queue(this);
this.epubcfi = new EPUBJS.EpubCFI();
this.q = new Queue(this);
this.epubcfi = new EpubCFI();
this._locations = [];
this.total = 0;
@ -15,7 +20,7 @@ EPUBJS.Locations = function(spine, request) {
};
// Load all of sections in the book
EPUBJS.Locations.prototype.generate = function(chars) {
Locations.prototype.generate = function(chars) {
if (chars) {
this.break = chars;
@ -42,7 +47,7 @@ EPUBJS.Locations.prototype.generate = function(chars) {
};
EPUBJS.Locations.prototype.process = function(section) {
Locations.prototype.process = function(section) {
return section.load(this.request)
.then(function(contents) {
@ -110,7 +115,7 @@ EPUBJS.Locations.prototype.process = function(section) {
};
EPUBJS.Locations.prototype.sprint = function(root, func) {
Locations.prototype.sprint = function(root, func) {
var treeWalker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, null, false);
while ((node = treeWalker.nextNode())) {
@ -119,27 +124,27 @@ EPUBJS.Locations.prototype.sprint = function(root, func) {
};
EPUBJS.Locations.prototype.locationFromCfi = function(cfi){
Locations.prototype.locationFromCfi = function(cfi){
// Check if the location has not been set yet
if(this._locations.length === 0) {
return -1;
}
return EPUBJS.core.locationOf(cfi, this._locations, this.epubcfi.compare);
return core.locationOf(cfi, this._locations, this.epubcfi.compare);
};
EPUBJS.Locations.prototype.precentageFromCfi = function(cfi) {
Locations.prototype.precentageFromCfi = function(cfi) {
// Find closest cfi
var loc = this.locationFromCfi(cfi);
// Get percentage in total
return this.precentageFromLocation(loc);
};
EPUBJS.Locations.prototype.precentageFromLocation = function(loc) {
Locations.prototype.precentageFromLocation = function(loc) {
return Math.ceil((loc / this.total ) * 1000) / 1000;
};
EPUBJS.Locations.prototype.cfiFromLocation = function(loc){
Locations.prototype.cfiFromLocation = function(loc){
var cfi = -1;
// check that pg is an int
if(typeof loc != "number"){
@ -153,26 +158,26 @@ EPUBJS.Locations.prototype.cfiFromLocation = function(loc){
return cfi;
};
EPUBJS.Locations.prototype.cfiFromPercentage = function(percent){
Locations.prototype.cfiFromPercentage = function(percent){
var loc = Math.round(this.total * percent);
return this.cfiFromLocation(loc);
};
EPUBJS.Locations.prototype.load = function(locations){
Locations.prototype.load = function(locations){
this._locations = JSON.parse(locations);
this.total = this._locations.length-1;
return this._locations;
};
EPUBJS.Locations.prototype.save = function(json){
Locations.prototype.save = function(json){
return JSON.stringify(this._locations);
};
EPUBJS.Locations.prototype.getCurrent = function(json){
Locations.prototype.getCurrent = function(json){
return this._current;
};
EPUBJS.Locations.prototype.setCurrent = function(curr){
Locations.prototype.setCurrent = function(curr){
var loc;
if(typeof curr == "string"){
@ -199,7 +204,7 @@ EPUBJS.Locations.prototype.setCurrent = function(curr){
});
};
Object.defineProperty(EPUBJS.Locations.prototype, 'currentLocation', {
Object.defineProperty(Locations.prototype, 'currentLocation', {
get: function () {
return this._current;
},
@ -208,4 +213,6 @@ Object.defineProperty(EPUBJS.Locations.prototype, 'currentLocation', {
}
});
RSVP.EventTarget.mixin(EPUBJS.Locations.prototype);
RSVP.EventTarget.mixin(Locations.prototype);
module.exports = Locations;

View file

@ -1,15 +1,15 @@
EPUBJS.Map = function(layout){
function Map(layout){
this.layout = layout;
};
EPUBJS.Map.prototype.section = function(view) {
Map.prototype.section = function(view) {
var ranges = this.findRanges(view);
var map = this.rangeListToCfiList(view, ranges);
return map;
};
EPUBJS.Map.prototype.page = function(view, start, end) {
Map.prototype.page = function(view, start, end) {
var root = view.document.body;
return this.rangePairToCfiPair(view.section, {
start: this.findStart(root, start, end),
@ -17,7 +17,7 @@ EPUBJS.Map.prototype.page = function(view, start, end) {
});
};
EPUBJS.Map.prototype.walk = function(root, func) {
Map.prototype.walk = function(root, func) {
//var treeWalker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT + NodeFilter.SHOW_TEXT, null, false);
var treeWalker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, {
acceptNode: function (node) {
@ -38,7 +38,7 @@ EPUBJS.Map.prototype.walk = function(root, func) {
return result;
};
EPUBJS.Map.prototype.findRanges = function(view){
Map.prototype.findRanges = function(view){
var columns = [];
var count = this.layout.count(view);
var column = this.layout.column;
@ -57,7 +57,7 @@ EPUBJS.Map.prototype.findRanges = function(view){
return columns;
};
EPUBJS.Map.prototype.findStart = function(root, start, end){
Map.prototype.findStart = function(root, start, end){
var stack = [root];
var $el;
var found;
@ -104,7 +104,7 @@ EPUBJS.Map.prototype.findStart = function(root, start, end){
return this.findTextStartRange($prev, start, end);
};
EPUBJS.Map.prototype.findEnd = function(root, start, end){
Map.prototype.findEnd = function(root, start, end){
var stack = [root];
var $el;
var $prev = root;
@ -155,7 +155,7 @@ EPUBJS.Map.prototype.findEnd = function(root, start, end){
};
EPUBJS.Map.prototype.findTextStartRange = function(node, start, end){
Map.prototype.findTextStartRange = function(node, start, end){
var ranges = this.splitTextNodeIntoRanges(node);
var prev;
var range;
@ -177,7 +177,7 @@ EPUBJS.Map.prototype.findTextStartRange = function(node, start, end){
return ranges[0];
};
EPUBJS.Map.prototype.findTextEndRange = function(node, start, end){
Map.prototype.findTextEndRange = function(node, start, end){
var ranges = this.splitTextNodeIntoRanges(node);
var prev;
var range;
@ -203,7 +203,7 @@ EPUBJS.Map.prototype.findTextEndRange = function(node, start, end){
};
EPUBJS.Map.prototype.splitTextNodeIntoRanges = function(node, _splitter){
Map.prototype.splitTextNodeIntoRanges = function(node, _splitter){
var ranges = [];
var textContent = node.textContent || "";
var text = textContent.trim();
@ -252,7 +252,7 @@ EPUBJS.Map.prototype.splitTextNodeIntoRanges = function(node, _splitter){
EPUBJS.Map.prototype.rangePairToCfiPair = function(section, rangePair){
Map.prototype.rangePairToCfiPair = function(section, rangePair){
var startRange = rangePair.start;
var endRange = rangePair.end;
@ -270,7 +270,7 @@ EPUBJS.Map.prototype.rangePairToCfiPair = function(section, rangePair){
};
EPUBJS.Map.prototype.rangeListToCfiList = function(view, columns){
Map.prototype.rangeListToCfiList = function(view, columns){
var map = [];
var rangePair, cifPair;
@ -283,3 +283,5 @@ EPUBJS.Map.prototype.rangeListToCfiList = function(view, columns){
return map;
};
module.exports = Map;

View file

@ -1,7 +1,11 @@
EPUBJS.Navigation = function(_package, _request){
var core = require('./core');
var Parser = require('./parser');
var RSVP = require('rsvp');
function Navigation(_package, _request){
var navigation = this;
var parse = new EPUBJS.Parser();
var request = _request || EPUBJS.core.request;
var parse = new Parser();
var request = _request || core.request;
this.package = _package;
this.toc = [];
@ -48,8 +52,8 @@ EPUBJS.Navigation = function(_package, _request){
};
// Load the navigation
EPUBJS.Navigation.prototype.load = function(_request) {
var request = _request || EPUBJS.core.request;
Navigation.prototype.load = function(_request) {
var request = _request || core.request;
var loading, loaded;
if(this.nav) {
@ -66,7 +70,7 @@ EPUBJS.Navigation.prototype.load = function(_request) {
};
EPUBJS.Navigation.prototype.loaded = function(toc) {
Navigation.prototype.loaded = function(toc) {
var item;
for (var i = 0; i < toc.length; i++) {
@ -78,7 +82,7 @@ EPUBJS.Navigation.prototype.loaded = function(toc) {
};
// Get an item from the navigation
EPUBJS.Navigation.prototype.get = function(target) {
Navigation.prototype.get = function(target) {
var index;
if(!target) {
@ -93,3 +97,5 @@ EPUBJS.Navigation.prototype.get = function(target) {
return this.toc[index];
};
module.exports = Navigation;

View file

@ -1,8 +1,14 @@
EPUBJS.Paginate = function(book, options) {
var RSVP = require('rsvp');
var core = require('./core');
var Continuous = require('./continuous');
var Map = require('./map');
var Layout = require('./layout');
EPUBJS.Continuous.apply(this, arguments);
function Paginate(book, options) {
this.settings = EPUBJS.core.extend(this.settings || {}, {
Continuous.apply(this, arguments);
this.settings = core.extend(this.settings || {}, {
width: 600,
height: 400,
axis: "horizontal",
@ -13,7 +19,7 @@ EPUBJS.Paginate = function(book, options) {
infinite: false
});
EPUBJS.core.extend(this.settings, options);
core.extend(this.settings, options);
this.isForcedSingle = this.settings.forceSingle;
@ -24,11 +30,11 @@ EPUBJS.Paginate = function(book, options) {
this.start();
};
EPUBJS.Paginate.prototype = Object.create(EPUBJS.Continuous.prototype);
EPUBJS.Paginate.prototype.constructor = EPUBJS.Paginate;
Paginate.prototype = Object.create(Continuous.prototype);
Paginate.prototype.constructor = Paginate;
EPUBJS.Paginate.prototype.determineSpreads = function(cutoff){
Paginate.prototype.determineSpreads = function(cutoff){
if(this.isForcedSingle || !cutoff || this.bounds().width < cutoff) {
return 1; //-- Single Page
}else{
@ -36,7 +42,7 @@ EPUBJS.Paginate.prototype.determineSpreads = function(cutoff){
}
};
EPUBJS.Paginate.prototype.forceSingle = function(bool){
Paginate.prototype.forceSingle = function(bool){
if(bool === false) {
this.isForcedSingle = false;
// this.spreads = false;
@ -53,7 +59,7 @@ EPUBJS.Paginate.prototype.forceSingle = function(bool){
* Takes: Layout settings object
* Returns: String of appropriate for EPUBJS.Layout function
*/
// EPUBJS.Paginate.prototype.determineLayout = function(settings){
// Paginate.prototype.determineLayout = function(settings){
// // Default is layout: reflowable & spread: auto
// var spreads = this.determineSpreads(this.settings.minSpreadWidth);
// console.log("spreads", spreads, this.settings.minSpreadWidth)
@ -83,7 +89,7 @@ EPUBJS.Paginate.prototype.forceSingle = function(bool){
// return layoutMethod;
// };
EPUBJS.Paginate.prototype.start = function(){
Paginate.prototype.start = function(){
// On display
// this.layoutSettings = this.reconcileLayoutSettings(globalLayout, chapter.properties);
// this.layoutMethod = this.determineLayout(this.layoutSettings);
@ -110,18 +116,18 @@ EPUBJS.Paginate.prototype.start = function(){
// return view;
// };
EPUBJS.Paginate.prototype.applyLayoutMethod = function() {
Paginate.prototype.applyLayoutMethod = function() {
//var task = new RSVP.defer();
// this.spreads = this.determineSpreads(this.settings.minSpreadWidth);
this.layout = new EPUBJS.Layout.Reflowable();
this.layout = new Layout.Reflowable();
this.updateLayout();
// Set the look ahead offset for what is visible
this.map = new EPUBJS.Map(this.layout);
this.map = new Map(this.layout);
// this.hooks.layout.register(this.layout.format.bind(this));
@ -130,7 +136,7 @@ EPUBJS.Paginate.prototype.applyLayoutMethod = function() {
// return layout;
};
EPUBJS.Paginate.prototype.updateLayout = function() {
Paginate.prototype.updateLayout = function() {
this.spreads = this.determineSpreads(this.settings.minSpreadWidth);
@ -145,14 +151,14 @@ EPUBJS.Paginate.prototype.updateLayout = function() {
};
EPUBJS.Paginate.prototype.moveTo = function(offset){
Paginate.prototype.moveTo = function(offset){
var dist = Math.floor(offset.left / this.layout.delta) * this.layout.delta;
return this.check(0, dist+this.settings.offset).then(function(){
this.scrollBy(dist, 0);
}.bind(this));
};
EPUBJS.Paginate.prototype.page = function(pg){
Paginate.prototype.page = function(pg){
// this.currentPage = pg;
// this.renderer.infinite.scrollTo(this.currentPage * this.formated.pageWidth, 0);
@ -160,7 +166,7 @@ EPUBJS.Paginate.prototype.page = function(pg){
// return false;
};
EPUBJS.Paginate.prototype.next = function(){
Paginate.prototype.next = function(){
return this.q.enqueue(function(){
// console.log(this.container.scrollWidth, this.container.scrollLeft + this.container.offsetWidth + this.layout.delta)
@ -178,7 +184,7 @@ EPUBJS.Paginate.prototype.next = function(){
// return this.page(this.currentPage + 1);
};
EPUBJS.Paginate.prototype.prev = function(){
Paginate.prototype.prev = function(){
return this.q.enqueue(function(){
this.scrollBy(-this.layout.delta, 0);
@ -188,14 +194,14 @@ EPUBJS.Paginate.prototype.prev = function(){
// return this.page(this.currentPage - 1);
};
// EPUBJS.Paginate.prototype.reportLocation = function(){
// Paginate.prototype.reportLocation = function(){
// return this.q.enqueue(function(){
// this.location = this.currentLocation();
// this.trigger("locationChanged", this.location);
// }.bind(this));
// };
EPUBJS.Paginate.prototype.currentLocation = function(){
Paginate.prototype.currentLocation = function(){
var visible = this.visible();
var startA, startB, endA, endB;
var pageLeft, pageRight;
@ -228,7 +234,7 @@ EPUBJS.Paginate.prototype.currentLocation = function(){
}
};
EPUBJS.Paginate.prototype.resize = function(width, height){
Paginate.prototype.resize = function(width, height){
// Clear the queue
this.q.clear();
@ -247,7 +253,7 @@ EPUBJS.Paginate.prototype.resize = function(width, height){
};
EPUBJS.Paginate.prototype.onResized = function(e) {
Paginate.prototype.onResized = function(e) {
this.views.clear();
@ -257,7 +263,7 @@ EPUBJS.Paginate.prototype.onResized = function(e) {
}.bind(this), 150);
};
EPUBJS.Paginate.prototype.adjustImages = function(view) {
Paginate.prototype.adjustImages = function(view) {
view.addStylesheetRules([
["img",
@ -273,6 +279,8 @@ EPUBJS.Paginate.prototype.adjustImages = function(view) {
});
};
// EPUBJS.Paginate.prototype.display = function(what){
// Paginate.prototype.display = function(what){
// return this.display(what);
// };
module.exports = Paginate;

View file

@ -1,6 +1,9 @@
EPUBJS.Parser = function(){};
var core = require('./core');
var EpubCFI = require('./epubcfi');
EPUBJS.Parser.prototype.container = function(containerXml){
function Parser(){};
Parser.prototype.container = function(containerXml){
//-- <rootfile full-path="OPS/package.opf" media-type="application/oebps-package+xml"/>
var rootfile, fullpath, folder, encoding;
@ -17,7 +20,7 @@ EPUBJS.Parser.prototype.container = function(containerXml){
}
fullpath = rootfile.getAttribute('full-path');
folder = EPUBJS.core.uri(fullpath).directory;
folder = core.uri(fullpath).directory;
encoding = containerXml.xmlEncoding;
//-- Now that we have the path we can parse the contents
@ -28,7 +31,7 @@ EPUBJS.Parser.prototype.container = function(containerXml){
};
};
EPUBJS.Parser.prototype.identifier = function(packageXml){
Parser.prototype.identifier = function(packageXml){
var metadataNode;
if(!packageXml) {
@ -46,7 +49,7 @@ EPUBJS.Parser.prototype.identifier = function(packageXml){
return this.getElementText(metadataNode, "identifier");
};
EPUBJS.Parser.prototype.packageContents = function(packageXml){
Parser.prototype.packageContents = function(packageXml){
var parse = this;
var metadataNode, manifestNode, spineNode;
var manifest, navPath, ncxPath, coverPath;
@ -98,25 +101,25 @@ EPUBJS.Parser.prototype.packageContents = function(packageXml){
};
//-- Find TOC NAV: media-type="application/xhtml+xml" href="toc.ncx"
EPUBJS.Parser.prototype.findNavPath = function(manifestNode){
Parser.prototype.findNavPath = function(manifestNode){
var node = manifestNode.querySelector("item[properties^='nav']");
return node ? node.getAttribute('href') : false;
};
//-- Find TOC NCX: media-type="application/x-dtbncx+xml" href="toc.ncx"
EPUBJS.Parser.prototype.findNcxPath = function(manifestNode){
Parser.prototype.findNcxPath = function(manifestNode){
var node = manifestNode.querySelector("item[media-type='application/x-dtbncx+xml']");
return node ? node.getAttribute('href') : false;
};
//-- Find Cover: <item properties="cover-image" id="ci" href="cover.svg" media-type="image/svg+xml" />
EPUBJS.Parser.prototype.findCoverPath = function(manifestNode){
Parser.prototype.findCoverPath = function(manifestNode){
var node = manifestNode.querySelector("item[properties='cover-image']");
return node ? node.getAttribute('href') : false;
};
//-- Expanded to match Readium web components
EPUBJS.Parser.prototype.metadata = function(xml){
Parser.prototype.metadata = function(xml){
var metadata = {},
p = this;
@ -141,7 +144,7 @@ EPUBJS.Parser.prototype.metadata = function(xml){
return metadata;
};
EPUBJS.Parser.prototype.getElementText = function(xml, tag){
Parser.prototype.getElementText = function(xml, tag){
var found = xml.getElementsByTagNameNS("http://purl.org/dc/elements/1.1/", tag),
el;
@ -157,7 +160,7 @@ EPUBJS.Parser.prototype.getElementText = function(xml, tag){
};
EPUBJS.Parser.prototype.querySelectorText = function(xml, q){
Parser.prototype.querySelectorText = function(xml, q){
var el = xml.querySelector(q);
if(el && el.childNodes.length){
@ -167,7 +170,7 @@ EPUBJS.Parser.prototype.querySelectorText = function(xml, q){
return '';
};
EPUBJS.Parser.prototype.manifest = function(manifestXml){
Parser.prototype.manifest = function(manifestXml){
var manifest = {};
//-- Turn items into an array
@ -194,13 +197,13 @@ EPUBJS.Parser.prototype.manifest = function(manifestXml){
};
EPUBJS.Parser.prototype.spine = function(spineXml, manifest){
Parser.prototype.spine = function(spineXml, manifest){
var spine = [];
var selected = spineXml.getElementsByTagName("itemref"),
items = Array.prototype.slice.call(selected);
var epubcfi = new EPUBJS.EpubCFI();
var epubcfi = new EpubCFI();
//-- Add to array to mantain ordering and cross reference with manifest
items.forEach(function(item, index){
@ -226,7 +229,7 @@ EPUBJS.Parser.prototype.spine = function(spineXml, manifest){
return spine;
};
EPUBJS.Parser.prototype.nav = function(navHtml){
Parser.prototype.nav = function(navHtml){
var navEl = navHtml.querySelector('nav[*|type="toc"]'), //-- [*|type="toc"] * Doesn't seem to work
idCounter = 0;
@ -312,7 +315,7 @@ EPUBJS.Parser.prototype.nav = function(navHtml){
return getTOC(navEl);
};
EPUBJS.Parser.prototype.ncx = function(tocXml){
Parser.prototype.ncx = function(tocXml){
var navMap = tocXml.querySelector("navMap");
if(!navMap) return [];
@ -365,3 +368,5 @@ EPUBJS.Parser.prototype.ncx = function(tocXml){
return getTOC(navMap);
};
module.exports = Parser;

View file

@ -1,13 +1,16 @@
EPUBJS.Queue = function(_context){
var RSVP = require('rsvp');
var core = require('./core');
function Queue(_context){
this._q = [];
this.context = _context;
this.tick = EPUBJS.core.requestAnimationFrame;
this.tick = core.requestAnimationFrame;
this.running = false;
this.paused = false;
};
// Add an item to the queue
EPUBJS.Queue.prototype.enqueue = function() {
Queue.prototype.enqueue = function() {
var deferred, promise;
var queued;
var task = [].shift.call(arguments);
@ -55,7 +58,7 @@ EPUBJS.Queue.prototype.enqueue = function() {
};
// Run one item
EPUBJS.Queue.prototype.dequeue = function(){
Queue.prototype.dequeue = function(){
var inwait, task, result;
if(this._q.length) {
@ -93,7 +96,7 @@ EPUBJS.Queue.prototype.dequeue = function(){
};
// Run All Immediately
EPUBJS.Queue.prototype.dump = function(){
Queue.prototype.dump = function(){
while(this._q.length) {
this.dequeue();
}
@ -101,7 +104,7 @@ EPUBJS.Queue.prototype.dump = function(){
// Run all sequentially, at convince
EPUBJS.Queue.prototype.run = function(){
Queue.prototype.run = function(){
if(!this.running){
this.running = true;
@ -133,7 +136,7 @@ EPUBJS.Queue.prototype.run = function(){
};
// Flush all, as quickly as possible
EPUBJS.Queue.prototype.flush = function(){
Queue.prototype.flush = function(){
if(this.running){
return this.running;
@ -152,21 +155,21 @@ EPUBJS.Queue.prototype.flush = function(){
};
// Clear all items in wait
EPUBJS.Queue.prototype.clear = function(){
Queue.prototype.clear = function(){
this._q = [];
this.running = false;
};
EPUBJS.Queue.prototype.length = function(){
Queue.prototype.length = function(){
return this._q.length;
};
EPUBJS.Queue.prototype.pause = function(){
Queue.prototype.pause = function(){
this.paused = true;
};
// Create a new task from a callback
EPUBJS.Task = function(task, args, context){
function Task(task, args, context){
return function(){
var toApply = arguments || [];
@ -186,3 +189,5 @@ EPUBJS.Task = function(task, args, context){
};
};
module.exports = Queue;

View file

@ -1,6 +1,17 @@
EPUBJS.Rendition = function(book, options) {
var RSVP = require('rsvp');
var core = require('./core');
var replace = require('./replacements');
var Hook = require('./hook');
var EpubCFI = require('./epubcfi');
var Queue = require('./queue');
var View = require('./view');
var Views = require('./views');
var Layout = require('./layout');
var Map = require('./map');
this.settings = EPUBJS.core.extend(this.settings || {}, {
function Rendition(book, options) {
this.settings = core.extend(this.settings || {}, {
infinite: true,
hidden: false,
width: false,
@ -9,7 +20,7 @@ EPUBJS.Rendition = function(book, options) {
axis: "vertical"
});
EPUBJS.core.extend(this.settings, options);
core.extend(this.settings, options);
this.viewSettings = {};
@ -19,20 +30,20 @@ EPUBJS.Rendition = function(book, options) {
//-- Adds Hook methods to the Rendition prototype
this.hooks = {};
this.hooks.display = new EPUBJS.Hook(this);
this.hooks.content = new EPUBJS.Hook(this);
this.hooks.layout = new EPUBJS.Hook(this);
this.hooks.render = new EPUBJS.Hook(this);
this.hooks.show = new EPUBJS.Hook(this);
this.hooks.display = new Hook(this);
this.hooks.content = new Hook(this);
this.hooks.layout = new Hook(this);
this.hooks.render = new Hook(this);
this.hooks.show = new Hook(this);
this.hooks.content.register(EPUBJS.replace.links.bind(this));
this.hooks.content.register(replace.links.bind(this));
this.hooks.content.register(this.passViewEvents.bind(this));
// this.hooks.display.register(this.afterDisplay.bind(this));
this.epubcfi = new EPUBJS.EpubCFI();
this.epubcfi = new EpubCFI();
this.q = new EPUBJS.Queue(this);
this.q = new Queue(this);
this.q.enqueue(this.book.opened);
@ -44,7 +55,7 @@ EPUBJS.Rendition = function(book, options) {
* Creates an element to render to.
* Resizes to passed width and height or to the elements size
*/
EPUBJS.Rendition.prototype.initialize = function(_options){
Rendition.prototype.initialize = function(_options){
var options = _options || {};
var height = options.height;// !== false ? options.height : "100%";
var width = options.width;// !== false ? options.width : "100%";
@ -52,18 +63,18 @@ EPUBJS.Rendition.prototype.initialize = function(_options){
var container;
var wrapper;
if(options.height && EPUBJS.core.isNumber(options.height)) {
if(options.height && core.isNumber(options.height)) {
height = options.height + "px";
}
if(options.width && EPUBJS.core.isNumber(options.width)) {
if(options.width && core.isNumber(options.width)) {
width = options.width + "px";
}
// Create new container element
container = document.createElement("div");
container.id = "epubjs-container:" + EPUBJS.core.uuid();
container.id = "epubjs-container:" + core.uuid();
container.classList.add("epub-container");
// Style Element
@ -89,7 +100,7 @@ EPUBJS.Rendition.prototype.initialize = function(_options){
return container;
};
EPUBJS.Rendition.wrap = function(container) {
Rendition.wrap = function(container) {
var wrapper = document.createElement("div");
wrapper.style.visibility = "hidden";
@ -103,7 +114,7 @@ EPUBJS.Rendition.wrap = function(container) {
// Call to attach the container to an element in the dom
// Container must be attached before rendering can begin
EPUBJS.Rendition.prototype.attachTo = function(_element){
Rendition.prototype.attachTo = function(_element){
var bounds;
this.container = this.initialize({
@ -111,7 +122,7 @@ EPUBJS.Rendition.prototype.attachTo = function(_element){
"height" : this.settings.height
});
if(EPUBJS.core.isElement(_element)) {
if(core.isElement(_element)) {
this.element = _element;
} else if (typeof _element === "string") {
this.element = document.getElementById(_element);
@ -129,7 +140,7 @@ EPUBJS.Rendition.prototype.attachTo = function(_element){
this.element.appendChild(this.container);
}
this.views = new EPUBJS.Views(this.container);
this.views = new Views(this.container);
// Attach Listeners
this.attachListeners();
@ -148,27 +159,27 @@ EPUBJS.Rendition.prototype.attachTo = function(_element){
};
EPUBJS.Rendition.prototype.attachListeners = function(){
Rendition.prototype.attachListeners = function(){
// Listen to window for resize event if width or height is set to 100%
if(!EPUBJS.core.isNumber(this.settings.width) ||
!EPUBJS.core.isNumber(this.settings.height) ) {
if(!core.isNumber(this.settings.width) ||
!core.isNumber(this.settings.height) ) {
window.addEventListener("resize", this.onResized.bind(this), false);
}
};
EPUBJS.Rendition.prototype.bounds = function() {
Rendition.prototype.bounds = function() {
return this.container.getBoundingClientRect();
};
EPUBJS.Rendition.prototype.display = function(target){
Rendition.prototype.display = function(target){
return this.q.enqueue(this._display, target);
};
EPUBJS.Rendition.prototype._display = function(target){
Rendition.prototype._display = function(target){
var displaying = new RSVP.defer();
var displayed = displaying.promise;
@ -203,7 +214,7 @@ EPUBJS.Rendition.prototype._display = function(target){
this.views.hide();
// Create a new view
view = new EPUBJS.View(section, this.viewSettings);
view = new View(section, this.viewSettings);
// This will clear all previous views
displayed = this.fill(view)
@ -244,11 +255,11 @@ EPUBJS.Rendition.prototype._display = function(target){
};
// Takes a cfi, fragment or page?
EPUBJS.Rendition.prototype.moveTo = function(offset){
Rendition.prototype.moveTo = function(offset){
this.scrollBy(offset.left, offset.top);
};
EPUBJS.Rendition.prototype.render = function(view, show) {
Rendition.prototype.render = function(view, show) {
view.create();
@ -279,7 +290,7 @@ EPUBJS.Rendition.prototype.render = function(view, show) {
}
// this.map = new EPUBJS.Map(view, this.layout);
// this.map = new Map(view, this.layout);
this.hooks.show.trigger(view, this);
this.trigger("rendered", view.section);
@ -291,11 +302,11 @@ EPUBJS.Rendition.prototype.render = function(view, show) {
};
EPUBJS.Rendition.prototype.afterDisplayed = function(view){
Rendition.prototype.afterDisplayed = function(view){
this.trigger("added", view.section);
};
EPUBJS.Rendition.prototype.fill = function(view){
Rendition.prototype.fill = function(view){
this.views.clear();
@ -307,7 +318,7 @@ EPUBJS.Rendition.prototype.fill = function(view){
return this.render(view);
};
EPUBJS.Rendition.prototype.resizeView = function(view) {
Rendition.prototype.resizeView = function(view) {
if(this.globalLayoutProperties.layout === "pre-paginated") {
view.lock("both", this.stage.width, this.stage.height);
@ -317,7 +328,7 @@ EPUBJS.Rendition.prototype.resizeView = function(view) {
};
EPUBJS.Rendition.prototype.stageSize = function(_width, _height){
Rendition.prototype.stageSize = function(_width, _height){
var bounds;
var width = _width || this.settings.width;
var height = _height || this.settings.height;
@ -342,13 +353,13 @@ EPUBJS.Rendition.prototype.stageSize = function(_width, _height){
}
if(width && !EPUBJS.core.isNumber(width)) {
if(width && !core.isNumber(width)) {
bounds = this.container.getBoundingClientRect();
width = bounds.width;
//height = bounds.height;
}
if(height && !EPUBJS.core.isNumber(height)) {
if(height && !core.isNumber(height)) {
bounds = bounds || this.container.getBoundingClientRect();
//width = bounds.width;
height = bounds.height;
@ -376,21 +387,21 @@ EPUBJS.Rendition.prototype.stageSize = function(_width, _height){
};
EPUBJS.Rendition.prototype.applyLayoutMethod = function() {
Rendition.prototype.applyLayoutMethod = function() {
this.layout = new EPUBJS.Layout.Scroll();
this.layout = new Layout.Scroll();
this.updateLayout();
this.map = new EPUBJS.Map(this.layout);
this.map = new Map(this.layout);
};
EPUBJS.Rendition.prototype.updateLayout = function() {
Rendition.prototype.updateLayout = function() {
this.layout.calculate(this.stage.width, this.stage.height);
};
EPUBJS.Rendition.prototype.resize = function(width, height){
Rendition.prototype.resize = function(width, height){
this.stageSize(width, height);
@ -405,15 +416,15 @@ EPUBJS.Rendition.prototype.resize = function(width, height){
};
EPUBJS.Rendition.prototype.onResized = function(e) {
Rendition.prototype.onResized = function(e) {
this.resize();
};
EPUBJS.Rendition.prototype.createView = function(section) {
return new EPUBJS.View(section, this.viewSettings);
Rendition.prototype.createView = function(section) {
return new View(section, this.viewSettings);
};
EPUBJS.Rendition.prototype.next = function(){
Rendition.prototype.next = function(){
return this.q.enqueue(function(){
@ -433,7 +444,7 @@ EPUBJS.Rendition.prototype.next = function(){
};
EPUBJS.Rendition.prototype.prev = function(){
Rendition.prototype.prev = function(){
return this.q.enqueue(function(){
@ -453,7 +464,7 @@ EPUBJS.Rendition.prototype.prev = function(){
};
//-- http://www.idpf.org/epub/fxl/
EPUBJS.Rendition.prototype.parseLayoutProperties = function(_metadata){
Rendition.prototype.parseLayoutProperties = function(_metadata){
var metadata = _metadata || this.book.package.metadata;
var layout = (this.layoutOveride && this.layoutOveride.layout) || metadata.layout || "reflowable";
var spread = (this.layoutOveride && this.layoutOveride.spread) || metadata.spread || "auto";
@ -467,7 +478,7 @@ EPUBJS.Rendition.prototype.parseLayoutProperties = function(_metadata){
};
EPUBJS.Rendition.prototype.current = function(){
Rendition.prototype.current = function(){
var visible = this.visible();
if(visible.length){
// Current is the last visible view
@ -476,7 +487,7 @@ EPUBJS.Rendition.prototype.current = function(){
return null;
};
EPUBJS.Rendition.prototype.isVisible = function(view, offsetPrev, offsetNext, _container){
Rendition.prototype.isVisible = function(view, offsetPrev, offsetNext, _container){
var position = view.position();
var container = _container || this.container.getBoundingClientRect();
@ -497,7 +508,7 @@ EPUBJS.Rendition.prototype.isVisible = function(view, offsetPrev, offsetNext, _c
};
EPUBJS.Rendition.prototype.visible = function(){
Rendition.prototype.visible = function(){
var container = this.bounds();
var displayedViews = this.views.displayed();
var visible = [];
@ -517,11 +528,11 @@ EPUBJS.Rendition.prototype.visible = function(){
};
EPUBJS.Rendition.prototype.bounds = function(func) {
Rendition.prototype.bounds = function(func) {
var bounds;
if(!this.settings.height) {
bounds = EPUBJS.core.windowBounds();
bounds = core.windowBounds();
} else {
bounds = this.container.getBoundingClientRect();
}
@ -529,7 +540,7 @@ EPUBJS.Rendition.prototype.bounds = function(func) {
return bounds;
};
EPUBJS.Rendition.prototype.destroy = function(){
Rendition.prototype.destroy = function(){
// Clear the queue
this.q.clear();
@ -544,14 +555,14 @@ EPUBJS.Rendition.prototype.destroy = function(){
};
EPUBJS.Rendition.prototype.reportLocation = function(){
Rendition.prototype.reportLocation = function(){
return this.q.enqueue(function(){
this.location = this.currentLocation();
this.trigger("locationChanged", this.location);
}.bind(this));
};
EPUBJS.Rendition.prototype.currentLocation = function(){
Rendition.prototype.currentLocation = function(){
var view;
var start, end;
@ -565,7 +576,7 @@ EPUBJS.Rendition.prototype.currentLocation = function(){
};
EPUBJS.Rendition.prototype.scrollBy = function(x, y, silent){
Rendition.prototype.scrollBy = function(x, y, silent){
if(silent) {
this.ignore = true;
}
@ -582,7 +593,7 @@ EPUBJS.Rendition.prototype.scrollBy = function(x, y, silent){
this.scrolled = true;
};
EPUBJS.Rendition.prototype.scrollTo = function(x, y, silent){
Rendition.prototype.scrollTo = function(x, y, silent){
if(silent) {
this.ignore = true;
}
@ -603,15 +614,17 @@ EPUBJS.Rendition.prototype.scrollTo = function(x, y, silent){
// };
};
EPUBJS.Rendition.prototype.passViewEvents = function(view){
Rendition.prototype.passViewEvents = function(view){
view.listenedEvents.forEach(function(e){
view.on(e, this.triggerViewEvent.bind(this));
}.bind(this));
};
EPUBJS.Rendition.prototype.triggerViewEvent = function(e){
Rendition.prototype.triggerViewEvent = function(e){
this.trigger(e.type, e);
};
//-- Enable binding events to Renderer
RSVP.EventTarget.mixin(EPUBJS.Rendition.prototype);
RSVP.EventTarget.mixin(Rendition.prototype);
module.exports = Rendition;

View file

@ -1,10 +1,11 @@
EPUBJS.replace = {};
EPUBJS.replace.links = function(view, renderer) {
var core = require('./core');
function links(view, renderer) {
var links = view.document.querySelectorAll("a[href]");
var replaceLinks = function(link){
var href = link.getAttribute("href");
var uri = new EPUBJS.core.uri(href);
var uri = new core.uri(href);
if(uri.protocol){
@ -13,7 +14,7 @@ EPUBJS.replace.links = function(view, renderer) {
}else{
// relative = EPUBJS.core.resolveUrl(directory, href);
// relative = core.resolveUrl(directory, href);
// if(uri.fragment && !base) {
// link.onclick = function(){
// renderer.fragment(href);
@ -41,3 +42,7 @@ EPUBJS.replace.links = function(view, renderer) {
};
module.exports = {
'links': links
};

View file

@ -1,4 +1,9 @@
EPUBJS.Section = function(item){
var RSVP = require('rsvp');
var core = require('./core');
var EpubCFI = require('./epubcfi');
var Hook = require('./hook');
function Section(item){
this.idref = item.idref;
this.linear = item.linear;
this.properties = item.properties;
@ -8,19 +13,19 @@ EPUBJS.Section = function(item){
this.next = item.next;
this.prev = item.prev;
this.epubcfi = new EPUBJS.EpubCFI();
this.epubcfi = new EpubCFI();
this.cfiBase = item.cfiBase;
this.hooks = {};
this.hooks.replacements = new EPUBJS.Hook(this);
this.hooks.replacements = new Hook(this);
// Register replacements
this.hooks.replacements.register(this.replacements);
};
EPUBJS.Section.prototype.load = function(_request){
var request = _request || this.request || EPUBJS.core.request;
Section.prototype.load = function(_request){
var request = _request || this.request || core.request;
var loading = new RSVP.defer();
var loaded = loading.promise;
@ -30,7 +35,7 @@ EPUBJS.Section.prototype.load = function(_request){
request(this.url, 'xml')
.then(function(xml){
var base;
var directory = EPUBJS.core.folder(this.url);
var directory = core.folder(this.url);
this.document = xml;
this.contents = xml.documentElement;
@ -48,7 +53,7 @@ EPUBJS.Section.prototype.load = function(_request){
return loaded;
};
EPUBJS.Section.prototype.replacements = function(_document){
Section.prototype.replacements = function(_document){
var task = new RSVP.defer();
var base = _document.createElement("base"); // TODO: check if exists
var head;
@ -69,11 +74,11 @@ EPUBJS.Section.prototype.replacements = function(_document){
return task.promise;
};
EPUBJS.Section.prototype.beforeSectionLoad = function(){
Section.prototype.beforeSectionLoad = function(){
// Stub for a hook - replace me for now
};
EPUBJS.Section.prototype.render = function(_request){
Section.prototype.render = function(_request){
var rendering = new RSVP.defer();
var rendered = rendering.promise;
@ -89,7 +94,7 @@ EPUBJS.Section.prototype.render = function(_request){
return rendered;
};
EPUBJS.Section.prototype.find = function(_query){
Section.prototype.find = function(_query){
};
@ -99,7 +104,7 @@ EPUBJS.Section.prototype.find = function(_query){
* Takes: global layout settings object, chapter properties string
* Returns: Object with layout properties
*/
EPUBJS.Section.prototype.reconcileLayoutSettings = function(global){
Section.prototype.reconcileLayoutSettings = function(global){
//-- Get the global defaults
var settings = {
layout : global.layout,
@ -123,10 +128,12 @@ EPUBJS.Section.prototype.reconcileLayoutSettings = function(global){
return settings;
};
EPUBJS.Section.prototype.cfiFromRange = function(_range) {
Section.prototype.cfiFromRange = function(_range) {
return this.epubcfi.generateCfiFromRange(_range, this.cfiBase);
};
EPUBJS.Section.prototype.cfiFromElement = function(el) {
Section.prototype.cfiFromElement = function(el) {
return this.epubcfi.generateCfiFromElement(el, this.cfiBase);
};
module.exports = Section;

View file

@ -1,4 +1,9 @@
EPUBJS.Spine = function(_request){
var RSVP = require('rsvp');
var core = require('./core');
var EpubCFI = require('./epubcfi');
var Section = require('./section');
function Spine(_request){
this.request = _request;
this.spineItems = [];
this.spineByHref = {};
@ -6,14 +11,14 @@ EPUBJS.Spine = function(_request){
};
EPUBJS.Spine.prototype.load = function(_package) {
Spine.prototype.load = function(_package) {
this.items = _package.spine;
this.manifest = _package.manifest;
this.spineNodeIndex = _package.spineNodeIndex;
this.baseUrl = _package.baseUrl || '';
this.length = this.items.length;
this.epubcfi = new EPUBJS.EpubCFI();
this.epubcfi = new EpubCFI();
this.items.forEach(function(item, index){
var href, url;
@ -39,7 +44,7 @@ EPUBJS.Spine.prototype.load = function(_package) {
item.next = function(){ return this.get(index+1); }.bind(this);
// }
spineItem = new EPUBJS.Section(item);
spineItem = new Section(item);
this.append(spineItem);
@ -51,7 +56,7 @@ EPUBJS.Spine.prototype.load = function(_package) {
// book.spine.get(1);
// book.spine.get("chap1.html");
// book.spine.get("#id1234");
EPUBJS.Spine.prototype.get = function(target) {
Spine.prototype.get = function(target) {
var index = 0;
if(this.epubcfi.isCfiString(target)) {
@ -70,7 +75,7 @@ EPUBJS.Spine.prototype.get = function(target) {
return this.spineItems[index] || null;
};
EPUBJS.Spine.prototype.append = function(section) {
Spine.prototype.append = function(section) {
var index = this.spineItems.length;
section.index = index;
@ -82,7 +87,7 @@ EPUBJS.Spine.prototype.append = function(section) {
return index;
};
EPUBJS.Spine.prototype.prepend = function(section) {
Spine.prototype.prepend = function(section) {
var index = this.spineItems.unshift(section);
this.spineByHref[section.href] = 0;
this.spineById[section.idref] = 0;
@ -95,11 +100,11 @@ EPUBJS.Spine.prototype.prepend = function(section) {
return 0;
};
EPUBJS.Spine.prototype.insert = function(section, index) {
Spine.prototype.insert = function(section, index) {
};
EPUBJS.Spine.prototype.remove = function(section) {
Spine.prototype.remove = function(section) {
var index = this.spineItems.indexOf(section);
if(index > -1) {
@ -110,6 +115,8 @@ EPUBJS.Spine.prototype.remove = function(section) {
}
};
EPUBJS.Spine.prototype.each = function() {
Spine.prototype.each = function() {
return this.spineItems.forEach.apply(this.spineItems, arguments);
};
module.exports = Spine;

View file

@ -1,7 +1,11 @@
EPUBJS.View = function(section, options) {
var RSVP = require('rsvp');
var core = require('./core');
var EpubCFI = require('./epubcfi');
function View(section, options) {
this.settings = options || {};
this.id = "epubjs-view:" + EPUBJS.core.uuid();
this.id = "epubjs-view:" + core.uuid();
this.section = section;
this.index = section.index;
@ -22,7 +26,7 @@ EPUBJS.View = function(section, options) {
//this.height = 0;
// Blank Cfi for Parsing
this.epubcfi = new EPUBJS.EpubCFI();
this.epubcfi = new EpubCFI();
if(this.settings.axis && this.settings.axis == "horizontal"){
this.element.style.display = "inline-block";
@ -35,7 +39,7 @@ EPUBJS.View = function(section, options) {
};
EPUBJS.View.prototype.create = function() {
View.prototype.create = function() {
if(this.iframe) {
return this.iframe;
@ -63,14 +67,14 @@ EPUBJS.View.prototype.create = function() {
this.element.appendChild(this.iframe);
this.added = true;
this.elementBounds = EPUBJS.core.bounds(this.element);
this.elementBounds = core.bounds(this.element);
// if(width || height){
// this.resize(width, height);
// } else if(this.width && this.height){
// this.resize(this.width, this.height);
// } else {
// this.iframeBounds = EPUBJS.core.bounds(this.iframe);
// this.iframeBounds = core.bounds(this.iframe);
// }
// Firefox has trouble with baseURI and srcdoc
@ -88,30 +92,30 @@ EPUBJS.View.prototype.create = function() {
};
EPUBJS.View.prototype.lock = function(what, width, height) {
View.prototype.lock = function(what, width, height) {
var elBorders = EPUBJS.core.borders(this.element);
var elBorders = core.borders(this.element);
var iframeBorders;
if(this.iframe) {
iframeBorders = EPUBJS.core.borders(this.iframe);
iframeBorders = core.borders(this.iframe);
} else {
iframeBorders = {width: 0, height: 0};
}
if(what == "width" && EPUBJS.core.isNumber(width)){
if(what == "width" && core.isNumber(width)){
this.lockedWidth = width - elBorders.width - iframeBorders.width;
this.resize(this.lockedWidth, width); // width keeps ratio correct
}
if(what == "height" && EPUBJS.core.isNumber(height)){
if(what == "height" && core.isNumber(height)){
this.lockedHeight = height - elBorders.height - iframeBorders.height;
this.resize(width, this.lockedHeight);
}
if(what === "both" &&
EPUBJS.core.isNumber(width) &&
EPUBJS.core.isNumber(height)){
core.isNumber(width) &&
core.isNumber(height)){
this.lockedWidth = width - elBorders.width - iframeBorders.width;
this.lockedHeight = height - elBorders.height - iframeBorders.height;
@ -130,7 +134,7 @@ EPUBJS.View.prototype.lock = function(what, width, height) {
};
EPUBJS.View.prototype.expand = function(force) {
View.prototype.expand = function(force) {
var width = this.lockedWidth;
var height = this.lockedHeight;
@ -180,7 +184,7 @@ EPUBJS.View.prototype.expand = function(force) {
this._expanding = false;
};
EPUBJS.View.prototype.contentWidth = function(min) {
View.prototype.contentWidth = function(min) {
var prev;
var width;
@ -196,7 +200,7 @@ EPUBJS.View.prototype.contentWidth = function(min) {
return width;
};
EPUBJS.View.prototype.contentHeight = function(min) {
View.prototype.contentHeight = function(min) {
var prev;
var height;
@ -207,7 +211,7 @@ EPUBJS.View.prototype.contentHeight = function(min) {
return height;
};
EPUBJS.View.prototype.textWidth = function() {
View.prototype.textWidth = function() {
var width;
var range = this.document.createRange();
@ -220,7 +224,7 @@ EPUBJS.View.prototype.textWidth = function() {
};
EPUBJS.View.prototype.textHeight = function() {
View.prototype.textHeight = function() {
var height;
var range = this.document.createRange();
@ -230,27 +234,27 @@ EPUBJS.View.prototype.textHeight = function() {
return height;
};
EPUBJS.View.prototype.resize = function(width, height) {
View.prototype.resize = function(width, height) {
if(!this.iframe) return;
if(EPUBJS.core.isNumber(width)){
if(core.isNumber(width)){
this.iframe.style.width = width + "px";
this._width = width;
}
if(EPUBJS.core.isNumber(height)){
if(core.isNumber(height)){
this.iframe.style.height = height + "px";
this._height = height;
}
this.iframeBounds = EPUBJS.core.bounds(this.iframe);
this.iframeBounds = core.bounds(this.iframe);
this.reframe(this.iframeBounds.width, this.iframeBounds.height);
};
EPUBJS.View.prototype.reframe = function(width, height) {
View.prototype.reframe = function(width, height) {
//var prevBounds;
if(!this.displayed) {
@ -258,17 +262,17 @@ EPUBJS.View.prototype.reframe = function(width, height) {
return;
}
if(EPUBJS.core.isNumber(width)){
if(core.isNumber(width)){
this.element.style.width = width + "px";
}
if(EPUBJS.core.isNumber(height)){
if(core.isNumber(height)){
this.element.style.height = height + "px";
}
this.prevBounds = this.elementBounds;
this.elementBounds = EPUBJS.core.bounds(this.element);
this.elementBounds = core.bounds(this.element);
this.trigger("resized", {
width: this.elementBounds.width,
@ -279,7 +283,7 @@ EPUBJS.View.prototype.reframe = function(width, height) {
};
EPUBJS.View.prototype.resized = function(e) {
View.prototype.resized = function(e) {
/*
if (!this.resizing) {
if(this.iframe) {
@ -291,7 +295,7 @@ EPUBJS.View.prototype.resized = function(e) {
};
EPUBJS.View.prototype.render = function(_request) {
View.prototype.render = function(_request) {
// if(this.rendering){
// return this.displayed;
@ -307,7 +311,7 @@ EPUBJS.View.prototype.render = function(_request) {
}.bind(this));
};
EPUBJS.View.prototype.load = function(contents) {
View.prototype.load = function(contents) {
var loading = new RSVP.defer();
var loaded = loading.promise;
@ -346,7 +350,7 @@ EPUBJS.View.prototype.load = function(contents) {
};
EPUBJS.View.prototype.layout = function(layoutFunc) {
View.prototype.layout = function(layoutFunc) {
this.iframe.style.display = "inline-block";
@ -363,11 +367,11 @@ EPUBJS.View.prototype.layout = function(layoutFunc) {
};
EPUBJS.View.prototype.onLayout = function(view) {
View.prototype.onLayout = function(view) {
// stub
};
EPUBJS.View.prototype.listeners = function() {
View.prototype.listeners = function() {
/*
setTimeout(function(){
this.window.addEventListener("resize", this.resized.bind(this), false);
@ -401,21 +405,21 @@ EPUBJS.View.prototype.listeners = function() {
this.addSelectionListeners();
};
EPUBJS.View.prototype.removeListeners = function() {
View.prototype.removeListeners = function() {
this.removeEventListeners();
this.removeSelectionListeners();
};
EPUBJS.View.prototype.resizeListenters = function() {
View.prototype.resizeListenters = function() {
// Test size again
clearTimeout(this.expanding);
this.expanding = setTimeout(this.expand.bind(this), 350);
};
//https://github.com/tylergaw/media-query-events/blob/master/js/mq-events.js
EPUBJS.View.prototype.mediaQueryListeners = function() {
View.prototype.mediaQueryListeners = function() {
var sheets = this.document.styleSheets;
var mediaChangeHandler = function(m){
if(m.matches && !this._expanding) {
@ -438,7 +442,7 @@ EPUBJS.View.prototype.mediaQueryListeners = function() {
}
};
EPUBJS.View.prototype.observe = function(target) {
View.prototype.observe = function(target) {
var renderer = this;
// create an observer instance
@ -460,17 +464,17 @@ EPUBJS.View.prototype.observe = function(target) {
return observer;
};
// EPUBJS.View.prototype.appendTo = function(element) {
// View.prototype.appendTo = function(element) {
// this.element = element;
// this.element.appendChild(this.iframe);
// };
//
// EPUBJS.View.prototype.prependTo = function(element) {
// View.prototype.prependTo = function(element) {
// this.element = element;
// element.insertBefore(this.iframe, element.firstChild);
// };
EPUBJS.View.prototype.imageLoadListeners = function(target) {
View.prototype.imageLoadListeners = function(target) {
var images = this.document.body.querySelectorAll("img");
var img;
for (var i = 0; i < images.length; i++) {
@ -483,7 +487,7 @@ EPUBJS.View.prototype.imageLoadListeners = function(target) {
}
};
EPUBJS.View.prototype.display = function() {
View.prototype.display = function() {
var displayed = new RSVP.defer();
this.displayed = true;
@ -502,7 +506,7 @@ EPUBJS.View.prototype.display = function() {
return displayed.promise;
};
EPUBJS.View.prototype.show = function() {
View.prototype.show = function() {
this.element.style.visibility = "visible";
@ -513,7 +517,7 @@ EPUBJS.View.prototype.show = function() {
this.trigger("shown", this);
};
EPUBJS.View.prototype.hide = function() {
View.prototype.hide = function() {
// this.iframe.style.display = "none";
this.element.style.visibility = "hidden";
this.iframe.style.visibility = "hidden";
@ -522,22 +526,22 @@ EPUBJS.View.prototype.hide = function() {
this.trigger("hidden", this);
};
EPUBJS.View.prototype.position = function() {
View.prototype.position = function() {
return this.element.getBoundingClientRect();
};
EPUBJS.View.prototype.onDisplayed = function(view) {
View.prototype.onDisplayed = function(view) {
// Stub, override with a custom functions
};
EPUBJS.View.prototype.bounds = function() {
View.prototype.bounds = function() {
if(!this.elementBounds) {
this.elementBounds = EPUBJS.core.bounds(this.element);
this.elementBounds = core.bounds(this.element);
}
return this.elementBounds;
};
EPUBJS.View.prototype.destroy = function() {
View.prototype.destroy = function() {
// Stop observing
if(this.observer) {
this.observer.disconnect();
@ -560,12 +564,12 @@ EPUBJS.View.prototype.destroy = function() {
// this.element.style.width = "0px";
};
EPUBJS.View.prototype.root = function() {
View.prototype.root = function() {
if(!this.document) return null;
return this.document.documentElement;
};
EPUBJS.View.prototype.locationOf = function(target) {
View.prototype.locationOf = function(target) {
var parentPos = this.iframe.getBoundingClientRect();
var targetPos = {"left": 0, "top": 0};
@ -605,7 +609,7 @@ EPUBJS.View.prototype.locationOf = function(target) {
};
};
EPUBJS.View.prototype.addCss = function(src) {
View.prototype.addCss = function(src) {
return new RSVP.Promise(function(resolve, reject){
var $stylesheet;
var ready = false;
@ -635,7 +639,7 @@ EPUBJS.View.prototype.addCss = function(src) {
};
// https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet/insertRule
EPUBJS.View.prototype.addStylesheetRules = function(rules) {
View.prototype.addStylesheetRules = function(rules) {
var styleEl;
var styleSheet;
@ -667,7 +671,7 @@ EPUBJS.View.prototype.addStylesheetRules = function(rules) {
}
};
EPUBJS.View.prototype.addScript = function(src) {
View.prototype.addScript = function(src) {
return new RSVP.Promise(function(resolve, reject){
var $script;
@ -696,7 +700,7 @@ EPUBJS.View.prototype.addScript = function(src) {
}.bind(this));
};
EPUBJS.View.prototype.addEventListeners = function(){
View.prototype.addEventListeners = function(){
if(!this.document) {
return;
}
@ -706,7 +710,7 @@ EPUBJS.View.prototype.addEventListeners = function(){
};
EPUBJS.View.prototype.removeEventListeners = function(){
View.prototype.removeEventListeners = function(){
if(!this.document) {
return;
}
@ -717,25 +721,25 @@ EPUBJS.View.prototype.removeEventListeners = function(){
};
// Pass browser events
EPUBJS.View.prototype.triggerEvent = function(e){
View.prototype.triggerEvent = function(e){
this.trigger(e.type, e);
};
EPUBJS.View.prototype.addSelectionListeners = function(){
View.prototype.addSelectionListeners = function(){
if(!this.document) {
return;
}
this.document.addEventListener("selectionchange", this.onSelectionChange.bind(this), false);
};
EPUBJS.View.prototype.removeSelectionListeners = function(){
View.prototype.removeSelectionListeners = function(){
if(!this.document) {
return;
}
this.document.removeEventListener("selectionchange", this.onSelectionChange, false);
};
EPUBJS.View.prototype.onSelectionChange = function(e){
View.prototype.onSelectionChange = function(e){
if (this.selectionEndTimeout) {
clearTimeout(this.selectionEndTimeout);
}
@ -745,4 +749,6 @@ EPUBJS.View.prototype.onSelectionChange = function(e){
}.bind(this), 500);
};
RSVP.EventTarget.mixin(EPUBJS.View.prototype);
RSVP.EventTarget.mixin(View.prototype);
module.exports = View;

View file

@ -1,49 +1,49 @@
EPUBJS.Views = function(container) {
function Views(container) {
this.container = container;
this._views = [];
this.length = 0;
this.hidden = false;
};
EPUBJS.Views.prototype.first = function() {
Views.prototype.first = function() {
return this._views[0];
};
EPUBJS.Views.prototype.last = function() {
Views.prototype.last = function() {
return this._views[this._views.length-1];
};
EPUBJS.Views.prototype.each = function() {
Views.prototype.each = function() {
return this._views.forEach.apply(this._views, arguments);
};
EPUBJS.Views.prototype.indexOf = function(view) {
Views.prototype.indexOf = function(view) {
return this._views.indexOf(view);
};
EPUBJS.Views.prototype.slice = function() {
Views.prototype.slice = function() {
return this._views.slice.apply(this._views, arguments);
};
EPUBJS.Views.prototype.get = function(i) {
Views.prototype.get = function(i) {
return this._views[i];
};
EPUBJS.Views.prototype.append = function(view){
Views.prototype.append = function(view){
this._views.push(view);
this.container.appendChild(view.element);
this.length++;
return view;
};
EPUBJS.Views.prototype.prepend = function(view){
Views.prototype.prepend = function(view){
this._views.unshift(view);
this.container.insertBefore(view.element, this.container.firstChild);
this.length++;
return view;
};
EPUBJS.Views.prototype.insert = function(view, index) {
Views.prototype.insert = function(view, index) {
this._views.splice(index, 0, view);
if(index < this.container.children.length){
@ -55,7 +55,7 @@ EPUBJS.Views.prototype.insert = function(view, index) {
return view;
};
EPUBJS.Views.prototype.remove = function(view) {
Views.prototype.remove = function(view) {
var index = this._views.indexOf(view);
if(index > -1) {
@ -68,7 +68,7 @@ EPUBJS.Views.prototype.remove = function(view) {
this.length--;
};
EPUBJS.Views.prototype.destroy = function(view) {
Views.prototype.destroy = function(view) {
view.off("resized");
if(view.displayed){
@ -81,7 +81,7 @@ EPUBJS.Views.prototype.destroy = function(view) {
// Iterators
EPUBJS.Views.prototype.clear = function(){
Views.prototype.clear = function(){
// Remove all views
var view;
var len = this.length;
@ -97,7 +97,7 @@ EPUBJS.Views.prototype.clear = function(){
this.length = 0;
};
EPUBJS.Views.prototype.find = function(section){
Views.prototype.find = function(section){
var view;
var len = this.length;
@ -111,7 +111,7 @@ EPUBJS.Views.prototype.find = function(section){
};
EPUBJS.Views.prototype.displayed = function(){
Views.prototype.displayed = function(){
var displayed = [];
var view;
var len = this.length;
@ -125,7 +125,7 @@ EPUBJS.Views.prototype.displayed = function(){
return displayed;
};
EPUBJS.Views.prototype.show = function(){
Views.prototype.show = function(){
var view;
var len = this.length;
@ -138,7 +138,7 @@ EPUBJS.Views.prototype.show = function(){
this.hidden = false;
};
EPUBJS.Views.prototype.hide = function(){
Views.prototype.hide = function(){
var view;
var len = this.length;
@ -150,3 +150,5 @@ EPUBJS.Views.prototype.hide = function(){
}
this.hidden = true;
};
module.exports = Views;