1
0
Fork 0
mirror of https://github.com/futurepress/epub.js.git synced 2025-10-04 15:09:16 +02:00

Added getRenderedPagesLeft

This commit is contained in:
fchasen 2014-05-07 14:03:44 -07:00
parent d0aea65fc7
commit 315312a89c
11 changed files with 190 additions and 22 deletions

View file

@ -3558,7 +3558,8 @@ EPUBJS.Chapter.prototype.cfiFromRange = function(_range) {
var range; var range;
var startXpath, endXpath; var startXpath, endXpath;
var startContainer, endContainer; var startContainer, endContainer;
var cleanTextContent, cleanEndTextContent;
// Check for Contents // Check for Contents
if(!this.contents) return; if(!this.contents) return;
@ -3589,16 +3590,18 @@ EPUBJS.Chapter.prototype.cfiFromRange = function(_range) {
// Fuzzy Match // Fuzzy Match
if(!startContainer) { if(!startContainer) {
// console.log("not found, try fuzzy match"); // console.log("not found, try fuzzy match");
startXpath = "//text()[contains(.,'" + _range.startContainer.textContent + "')]"; cleanStartTextContent = EPUBJS.core.cleanStringForXpath(_range.startContainer.textContent);
endXpath = "//text()[contains(.,'" + _range.startContainer.textContent + "')]"; startXpath = "//text()[contains(.," + cleanStartTextContent + ")]";
startContainer = this.contents.evaluate(startXpath, this.contents, EPUBJS.core.nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; startContainer = this.contents.evaluate(startXpath, this.contents, EPUBJS.core.nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
if(startContainer){ if(startContainer){
// console.log("Found with Fuzzy"); // console.log("Found with Fuzzy");
range.setStart(startContainer, _range.startOffset); range.setStart(startContainer, _range.startOffset);
if(!_range.collapsed) { if(!_range.collapsed) {
cleanEndTextContent = EPUBJS.core.cleanStringForXpath(_range.endContainer.textContent);
endXpath = "//text()[contains(.," + cleanEndTextContent + ")]";
endContainer = this.contents.evaluate(endXpath, this.contents, EPUBJS.core.nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; endContainer = this.contents.evaluate(endXpath, this.contents, EPUBJS.core.nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
if(endContainer) { if(endContainer) {
range.setEnd(endContainer, _range.endOffset); range.setEnd(endContainer, _range.endOffset);
@ -4092,6 +4095,22 @@ EPUBJS.core.nsResolver = function(prefix) {
}; };
return ns[prefix] || null; return ns[prefix] || null;
}; };
//https://stackoverflow.com/questions/13482352/xquery-looking-for-text-with-single-quote/13483496#13483496
EPUBJS.core.cleanStringForXpath = function(str) {
var parts = str.match(/[^'"]+|['"]/g);
parts = parts.map(function(part){
if (part === "'") {
return '\"\'\"'; // output "'"
}
if (part === '"') {
return "\'\"\'"; // output '"'
}
return "\'" + part + "\'";
});
return "concat(\'\'," + parts.join(",") + ")";
};
EPUBJS.EpubCFI = function(cfiStr){ EPUBJS.EpubCFI = function(cfiStr){
if(cfiStr) return this.parse(cfiStr); if(cfiStr) return this.parse(cfiStr);
}; };
@ -6435,6 +6454,29 @@ EPUBJS.Renderer.prototype.getVisibleRangeCfi = function(prevEl){
}; };
*/ */
EPUBJS.Renderer.prototype.getRenderedPagesLeft = function(){
var pg;
var lastPage;
var pagesLeft;
if(!this.pageMap) {
console.warn("page map not loaded");
return false;
}
lastPage = this.pageMap.length;
if (this.spreads) {
pg = this.chapterPos*2;
} else {
pg = this.chapterPos;
}
pagesLeft = lastPage - pg;
return pagesLeft;
};
EPUBJS.Renderer.prototype.getVisibleRangeCfi = function(){ EPUBJS.Renderer.prototype.getVisibleRangeCfi = function(){
var pg; var pg;
var startRange, endRange; var startRange, endRange;

File diff suppressed because one or more lines are too long

4
build/epub.min.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -3557,7 +3557,8 @@ EPUBJS.Chapter.prototype.cfiFromRange = function(_range) {
var range; var range;
var startXpath, endXpath; var startXpath, endXpath;
var startContainer, endContainer; var startContainer, endContainer;
var cleanTextContent, cleanEndTextContent;
// Check for Contents // Check for Contents
if(!this.contents) return; if(!this.contents) return;
@ -3588,16 +3589,18 @@ EPUBJS.Chapter.prototype.cfiFromRange = function(_range) {
// Fuzzy Match // Fuzzy Match
if(!startContainer) { if(!startContainer) {
// console.log("not found, try fuzzy match"); // console.log("not found, try fuzzy match");
startXpath = "//text()[contains(.,'" + _range.startContainer.textContent + "')]"; cleanStartTextContent = EPUBJS.core.cleanStringForXpath(_range.startContainer.textContent);
endXpath = "//text()[contains(.,'" + _range.startContainer.textContent + "')]"; startXpath = "//text()[contains(.," + cleanStartTextContent + ")]";
startContainer = this.contents.evaluate(startXpath, this.contents, EPUBJS.core.nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; startContainer = this.contents.evaluate(startXpath, this.contents, EPUBJS.core.nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
if(startContainer){ if(startContainer){
// console.log("Found with Fuzzy"); // console.log("Found with Fuzzy");
range.setStart(startContainer, _range.startOffset); range.setStart(startContainer, _range.startOffset);
if(!_range.collapsed) { if(!_range.collapsed) {
cleanEndTextContent = EPUBJS.core.cleanStringForXpath(_range.endContainer.textContent);
endXpath = "//text()[contains(.," + cleanEndTextContent + ")]";
endContainer = this.contents.evaluate(endXpath, this.contents, EPUBJS.core.nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; endContainer = this.contents.evaluate(endXpath, this.contents, EPUBJS.core.nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
if(endContainer) { if(endContainer) {
range.setEnd(endContainer, _range.endOffset); range.setEnd(endContainer, _range.endOffset);
@ -4091,6 +4094,22 @@ EPUBJS.core.nsResolver = function(prefix) {
}; };
return ns[prefix] || null; return ns[prefix] || null;
}; };
//https://stackoverflow.com/questions/13482352/xquery-looking-for-text-with-single-quote/13483496#13483496
EPUBJS.core.cleanStringForXpath = function(str) {
var parts = str.match(/[^'"]+|['"]/g);
parts = parts.map(function(part){
if (part === "'") {
return '\"\'\"'; // output "'"
}
if (part === '"') {
return "\'\"\'"; // output '"'
}
return "\'" + part + "\'";
});
return "concat(\'\'," + parts.join(",") + ")";
};
EPUBJS.EpubCFI = function(cfiStr){ EPUBJS.EpubCFI = function(cfiStr){
if(cfiStr) return this.parse(cfiStr); if(cfiStr) return this.parse(cfiStr);
}; };
@ -6434,6 +6453,29 @@ EPUBJS.Renderer.prototype.getVisibleRangeCfi = function(prevEl){
}; };
*/ */
EPUBJS.Renderer.prototype.getRenderedPagesLeft = function(){
var pg;
var lastPage;
var pagesLeft;
if(!this.pageMap) {
console.warn("page map not loaded");
return false;
}
lastPage = this.pageMap.length;
if (this.spreads) {
pg = this.chapterPos*2;
} else {
pg = this.chapterPos;
}
pagesLeft = lastPage - pg;
return pagesLeft;
};
EPUBJS.Renderer.prototype.getVisibleRangeCfi = function(){ EPUBJS.Renderer.prototype.getVisibleRangeCfi = function(){
var pg; var pg;
var startRange, endRange; var startRange, endRange;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

50
reader/js/epub.min.js vendored
View file

@ -3558,7 +3558,8 @@ EPUBJS.Chapter.prototype.cfiFromRange = function(_range) {
var range; var range;
var startXpath, endXpath; var startXpath, endXpath;
var startContainer, endContainer; var startContainer, endContainer;
var cleanTextContent, cleanEndTextContent;
// Check for Contents // Check for Contents
if(!this.contents) return; if(!this.contents) return;
@ -3589,16 +3590,18 @@ EPUBJS.Chapter.prototype.cfiFromRange = function(_range) {
// Fuzzy Match // Fuzzy Match
if(!startContainer) { if(!startContainer) {
// console.log("not found, try fuzzy match"); // console.log("not found, try fuzzy match");
startXpath = "//text()[contains(.,'" + _range.startContainer.textContent + "')]"; cleanStartTextContent = EPUBJS.core.cleanStringForXpath(_range.startContainer.textContent);
endXpath = "//text()[contains(.,'" + _range.startContainer.textContent + "')]"; startXpath = "//text()[contains(.," + cleanStartTextContent + ")]";
startContainer = this.contents.evaluate(startXpath, this.contents, EPUBJS.core.nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; startContainer = this.contents.evaluate(startXpath, this.contents, EPUBJS.core.nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
if(startContainer){ if(startContainer){
// console.log("Found with Fuzzy"); // console.log("Found with Fuzzy");
range.setStart(startContainer, _range.startOffset); range.setStart(startContainer, _range.startOffset);
if(!_range.collapsed) { if(!_range.collapsed) {
cleanEndTextContent = EPUBJS.core.cleanStringForXpath(_range.endContainer.textContent);
endXpath = "//text()[contains(.," + cleanEndTextContent + ")]";
endContainer = this.contents.evaluate(endXpath, this.contents, EPUBJS.core.nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; endContainer = this.contents.evaluate(endXpath, this.contents, EPUBJS.core.nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
if(endContainer) { if(endContainer) {
range.setEnd(endContainer, _range.endOffset); range.setEnd(endContainer, _range.endOffset);
@ -4092,6 +4095,22 @@ EPUBJS.core.nsResolver = function(prefix) {
}; };
return ns[prefix] || null; return ns[prefix] || null;
}; };
//https://stackoverflow.com/questions/13482352/xquery-looking-for-text-with-single-quote/13483496#13483496
EPUBJS.core.cleanStringForXpath = function(str) {
var parts = str.match(/[^'"]+|['"]/g);
parts = parts.map(function(part){
if (part === "'") {
return '\"\'\"'; // output "'"
}
if (part === '"') {
return "\'\"\'"; // output '"'
}
return "\'" + part + "\'";
});
return "concat(\'\'," + parts.join(",") + ")";
};
EPUBJS.EpubCFI = function(cfiStr){ EPUBJS.EpubCFI = function(cfiStr){
if(cfiStr) return this.parse(cfiStr); if(cfiStr) return this.parse(cfiStr);
}; };
@ -6435,6 +6454,29 @@ EPUBJS.Renderer.prototype.getVisibleRangeCfi = function(prevEl){
}; };
*/ */
EPUBJS.Renderer.prototype.getRenderedPagesLeft = function(){
var pg;
var lastPage;
var pagesLeft;
if(!this.pageMap) {
console.warn("page map not loaded");
return false;
}
lastPage = this.pageMap.length;
if (this.spreads) {
pg = this.chapterPos*2;
} else {
pg = this.chapterPos;
}
pagesLeft = lastPage - pg;
return pagesLeft;
};
EPUBJS.Renderer.prototype.getVisibleRangeCfi = function(){ EPUBJS.Renderer.prototype.getVisibleRangeCfi = function(){
var pg; var pg;
var startRange, endRange; var startRange, endRange;

View file

@ -77,7 +77,8 @@ EPUBJS.Chapter.prototype.cfiFromRange = function(_range) {
var range; var range;
var startXpath, endXpath; var startXpath, endXpath;
var startContainer, endContainer; var startContainer, endContainer;
var cleanTextContent, cleanEndTextContent;
// Check for Contents // Check for Contents
if(!this.contents) return; if(!this.contents) return;
@ -108,16 +109,18 @@ EPUBJS.Chapter.prototype.cfiFromRange = function(_range) {
// Fuzzy Match // Fuzzy Match
if(!startContainer) { if(!startContainer) {
// console.log("not found, try fuzzy match"); // console.log("not found, try fuzzy match");
startXpath = "//text()[contains(.,'" + _range.startContainer.textContent + "')]"; cleanStartTextContent = EPUBJS.core.cleanStringForXpath(_range.startContainer.textContent);
endXpath = "//text()[contains(.,'" + _range.startContainer.textContent + "')]"; startXpath = "//text()[contains(.," + cleanStartTextContent + ")]";
startContainer = this.contents.evaluate(startXpath, this.contents, EPUBJS.core.nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; startContainer = this.contents.evaluate(startXpath, this.contents, EPUBJS.core.nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
if(startContainer){ if(startContainer){
// console.log("Found with Fuzzy"); // console.log("Found with Fuzzy");
range.setStart(startContainer, _range.startOffset); range.setStart(startContainer, _range.startOffset);
if(!_range.collapsed) { if(!_range.collapsed) {
cleanEndTextContent = EPUBJS.core.cleanStringForXpath(_range.endContainer.textContent);
endXpath = "//text()[contains(.," + cleanEndTextContent + ")]";
endContainer = this.contents.evaluate(endXpath, this.contents, EPUBJS.core.nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; endContainer = this.contents.evaluate(endXpath, this.contents, EPUBJS.core.nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
if(endContainer) { if(endContainer) {
range.setEnd(endContainer, _range.endOffset); range.setEnd(endContainer, _range.endOffset);

View file

@ -477,4 +477,20 @@ EPUBJS.core.nsResolver = function(prefix) {
'epub': 'http://www.idpf.org/2007/ops' 'epub': 'http://www.idpf.org/2007/ops'
}; };
return ns[prefix] || null; return ns[prefix] || null;
};
//https://stackoverflow.com/questions/13482352/xquery-looking-for-text-with-single-quote/13483496#13483496
EPUBJS.core.cleanStringForXpath = function(str) {
var parts = str.match(/[^'"]+|['"]/g);
parts = parts.map(function(part){
if (part === "'") {
return '\"\'\"'; // output "'"
}
if (part === '"') {
return "\'\"\'"; // output '"'
}
return "\'" + part + "\'";
});
return "concat(\'\'," + parts.join(",") + ")";
}; };

View file

@ -752,6 +752,29 @@ EPUBJS.Renderer.prototype.getVisibleRangeCfi = function(prevEl){
}; };
*/ */
EPUBJS.Renderer.prototype.getRenderedPagesLeft = function(){
var pg;
var lastPage;
var pagesLeft;
if(!this.pageMap) {
console.warn("page map not loaded");
return false;
}
lastPage = this.pageMap.length;
if (this.spreads) {
pg = this.chapterPos*2;
} else {
pg = this.chapterPos;
}
pagesLeft = lastPage - pg;
return pagesLeft;
};
EPUBJS.Renderer.prototype.getVisibleRangeCfi = function(){ EPUBJS.Renderer.prototype.getVisibleRangeCfi = function(){
var pg; var pg;
var startRange, endRange; var startRange, endRange;