mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-06-23 15:30:45 -04:00
Found via `codespell -q 3 -S "*.svg,./Changelog.*,./recipes,./resources/dictionaries,./src/unicode_names/names.h" -L alo,ans,bootup,clen,fo,lokales,nam,nd,oclock,pard,re-use,re-used,ro,secnd,som,succeded,te,ue,vailable`
227 lines
5.1 KiB
JavaScript
227 lines
5.1 KiB
JavaScript
var gPosition = 0;
|
|
var gProgress = 0;
|
|
var gCurrentPage = 0;
|
|
var gPageCount = 0;
|
|
var gClientHeight = null;
|
|
|
|
function getPosition()
|
|
{
|
|
return gPosition;
|
|
}
|
|
|
|
function getProgress()
|
|
{
|
|
return gProgress;
|
|
}
|
|
|
|
function getPageCount()
|
|
{
|
|
return gPageCount;
|
|
}
|
|
|
|
function getCurrentPage()
|
|
{
|
|
return gCurrentPage;
|
|
}
|
|
|
|
function turnOnNightMode(nightModeOn) {
|
|
var body = document.getElementsByTagName('body')[0].style;
|
|
var aTags = document.getElementsByTagName('a');
|
|
|
|
var textColor;
|
|
var bgColor;
|
|
|
|
if (nightModeOn > 0) {
|
|
textColor = "#FFFFFF !important";
|
|
bgColor = "#000000 !important";
|
|
} else {
|
|
textColor = "#000000 !important";
|
|
bgColor = "#FFFFFF !important";
|
|
}
|
|
|
|
for (i = 0; i < aTags.length; i++) {
|
|
aTags[i].style.color = textColor;
|
|
}
|
|
|
|
body.color = textColor;
|
|
body.backgroundColor = bgColor;
|
|
|
|
window.device.turnOnNightModeDone();
|
|
}
|
|
|
|
function setupBookColumns()
|
|
{
|
|
var body = document.getElementsByTagName('body')[0].style;
|
|
body.marginLeft = '0px !important';
|
|
body.marginRight = '0px !important';
|
|
body.marginTop = '0px !important';
|
|
body.marginBottom = '0px !important';
|
|
body.paddingTop = '0px !important';
|
|
body.paddingBottom = '0px !important';
|
|
body.webkitNbspMode = 'space';
|
|
|
|
var bc = document.getElementById('book-columns').style;
|
|
bc.width = (window.innerWidth * 2) + 'px !important';
|
|
bc.height = window.innerHeight + 'px !important';
|
|
bc.marginTop = '0px !important';
|
|
bc.webkitColumnWidth = window.innerWidth + 'px !important';
|
|
bc.webkitColumnGap = '0px !important';
|
|
bc.overflow = 'none';
|
|
bc.paddingTop = '0px !important';
|
|
bc.paddingBottom = '0px !important';
|
|
gCurrentPage = 1;
|
|
gProgress = gPosition = 0;
|
|
|
|
var bi = document.getElementById('book-inner').style;
|
|
bi.marginLeft = '10px';
|
|
bi.marginRight = '10px';
|
|
bi.padding = '0';
|
|
|
|
window.device.print ("bc.height = "+ bc.height);
|
|
window.device.print ("window.innerHeight ="+ window.innerHeight);
|
|
|
|
gPageCount = document.body.scrollWidth / window.innerWidth;
|
|
|
|
if (gClientHeight < window.innerHeight) {
|
|
gPageCount = 1;
|
|
}
|
|
}
|
|
|
|
function paginate(tagId)
|
|
{
|
|
// Get the height of the page. We do this only once. In setupBookColumns we compare this
|
|
// value to the height of the window and then decide whether to force the page count to one.
|
|
if (gClientHeight == undefined) {
|
|
gClientHeight = document.getElementById('book-columns').clientHeight;
|
|
}
|
|
|
|
setupBookColumns();
|
|
//window.scrollTo(0, window.innerHeight);
|
|
|
|
window.device.reportPageCount(gPageCount);
|
|
var tagIdPageNumber = 0;
|
|
if (tagId.length > 0) {
|
|
tagIdPageNumber = estimatePageNumberForAnchor (tagId);
|
|
}
|
|
window.device.finishedPagination(tagId, tagIdPageNumber);
|
|
}
|
|
|
|
function repaginate(tagId) {
|
|
window.device.print ("repaginating, gPageCount:" + gPageCount);
|
|
paginate(tagId);
|
|
}
|
|
|
|
function paginateAndMaintainProgress()
|
|
{
|
|
var savedProgress = gProgress;
|
|
setupBookColumns();
|
|
goProgress(savedProgress);
|
|
}
|
|
|
|
function updateBookmark()
|
|
{
|
|
gProgress = (gCurrentPage - 1.0) / gPageCount;
|
|
var anchorName = estimateFirstAnchorForPageNumber(gCurrentPage - 1);
|
|
window.device.finishedUpdateBookmark(anchorName);
|
|
}
|
|
|
|
function goBack()
|
|
{
|
|
if (gCurrentPage > 1)
|
|
{
|
|
--gCurrentPage;
|
|
gPosition -= window.innerWidth;
|
|
window.scrollTo(gPosition, 0);
|
|
window.device.pageChanged();
|
|
} else {
|
|
window.device.previousChapter();
|
|
}
|
|
}
|
|
|
|
function goForward()
|
|
{
|
|
if (gCurrentPage < gPageCount)
|
|
{
|
|
++gCurrentPage;
|
|
gPosition += window.innerWidth;
|
|
window.scrollTo(gPosition, 0);
|
|
window.device.pageChanged();
|
|
} else {
|
|
window.device.nextChapter();
|
|
}
|
|
}
|
|
|
|
function goPage(pageNumber, callPageReadyWhenDone)
|
|
{
|
|
if (pageNumber > 0 && pageNumber <= gPageCount)
|
|
{
|
|
gCurrentPage = pageNumber;
|
|
gPosition = (gCurrentPage - 1) * window.innerWidth;
|
|
window.scrollTo(gPosition, 0);
|
|
if (callPageReadyWhenDone > 0) {
|
|
window.device.pageReady();
|
|
} else {
|
|
window.device.pageChanged();
|
|
}
|
|
}
|
|
}
|
|
|
|
function goProgress(progress)
|
|
{
|
|
progress += 0.0001;
|
|
|
|
var progressPerPage = 1.0 / gPageCount;
|
|
var newPage = 0;
|
|
|
|
for (var page = 0; page < gPageCount; page++) {
|
|
var low = page * progressPerPage;
|
|
var high = low + progressPerPage;
|
|
if (progress >= low && progress < high) {
|
|
newPage = page;
|
|
break;
|
|
}
|
|
}
|
|
|
|
gCurrentPage = newPage + 1;
|
|
gPosition = (gCurrentPage - 1) * window.innerWidth;
|
|
window.scrollTo(gPosition, 0);
|
|
updateProgress();
|
|
}
|
|
|
|
/* BOOKMARKING CODE */
|
|
|
|
/**
|
|
* Estimate the first anchor for the specified page number. This is used on the broken WebKit
|
|
* where we do not know for sure if the specific anchor actually is on the page.
|
|
*/
|
|
|
|
|
|
function estimateFirstAnchorForPageNumber(page)
|
|
{
|
|
var spans = document.getElementsByTagName('span');
|
|
var lastKoboSpanId = "";
|
|
for (var i = 0; i < spans.length; i++) {
|
|
if (spans[i].id.substr(0, 5) == "kobo.") {
|
|
lastKoboSpanId = spans[i].id;
|
|
if (spans[i].offsetTop >= (page * window.innerHeight)) {
|
|
return spans[i].id;
|
|
}
|
|
}
|
|
}
|
|
return lastKoboSpanId;
|
|
}
|
|
|
|
/**
|
|
* Estimate the page number for the specified anchor. This is used on the broken WebKit where we
|
|
* do not know for sure how things are columnized. The page number returned is zero based.
|
|
*/
|
|
|
|
function estimatePageNumberForAnchor(spanId)
|
|
{
|
|
var span = document.getElementById(spanId);
|
|
if (span) {
|
|
return Math.floor(span.offsetTop / window.innerHeight);
|
|
}
|
|
return 0;
|
|
}
|