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:
parent
d0aea65fc7
commit
315312a89c
11 changed files with 190 additions and 22 deletions
|
@ -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
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
|
@ -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
50
reader/js/epub.min.js
vendored
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
16
src/core.js
16
src/core.js
|
@ -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(",") + ")";
|
||||||
};
|
};
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue