mirror of
https://github.com/Yetangitu/owncloud-apps.git
synced 2025-10-02 14:49:17 +02:00
files_reader: more PDF changes, working outline,progress report, starting experiment with preloading next page(s)
This commit is contained in:
parent
c62859820d
commit
15a382edbf
17 changed files with 890 additions and 177 deletions
BIN
files_reader/.TODO.swp
Normal file
BIN
files_reader/.TODO.swp
Normal file
Binary file not shown.
|
@ -1,11 +1,10 @@
|
||||||
- index
|
|
||||||
- search
|
- search
|
||||||
- bookmarks
|
- bookmarks
|
||||||
- annotations
|
- annotations
|
||||||
- settings
|
- settings
|
||||||
|
|
||||||
- rtl and ltr
|
- rtl and ltr
|
||||||
- switch spread-page-width by key combo
|
|
||||||
|
|
||||||
- test canvas size restriction
|
- test canvas size restriction
|
||||||
- toggle zoom via keyboard
|
|
||||||
|
- add preload/postload of X pages around current position (optional), store resulting rendered pages in off-screen canvas?
|
||||||
|
|
BIN
files_reader/templates/.pdfreader.php.swp
Normal file
BIN
files_reader/templates/.pdfreader.php.swp
Normal file
Binary file not shown.
|
@ -48,11 +48,14 @@
|
||||||
<script type="text/javascript" nonce="<?php p($nonce) ?>" src="<?php p($urlGenerator->linkTo('files_reader', 'vendor/sindresorhus/screenfull.js')) ?>?v=<?php p($version) ?>"> </script>
|
<script type="text/javascript" nonce="<?php p($nonce) ?>" src="<?php p($urlGenerator->linkTo('files_reader', 'vendor/sindresorhus/screenfull.js')) ?>?v=<?php p($version) ?>"> </script>
|
||||||
<script type="text/javascript" nonce="<?php p($nonce) ?>" src="<?php p($urlGenerator->linkTo('files_reader', 'vendor/pdfjs/lib/pdf.js')) ?>?v=<?php p($version) ?>"> </script>
|
<script type="text/javascript" nonce="<?php p($nonce) ?>" src="<?php p($urlGenerator->linkTo('files_reader', 'vendor/pdfjs/lib/pdf.js')) ?>?v=<?php p($version) ?>"> </script>
|
||||||
<script type="text/javascript" nonce="<?php p($nonce) ?>" src="<?php p($urlGenerator->linkTo('files_reader', 'vendor/pdfjs/pdf.reader.js')) ?>?v=<?php p($version) ?>"> </script>
|
<script type="text/javascript" nonce="<?php p($nonce) ?>" src="<?php p($urlGenerator->linkTo('files_reader', 'vendor/pdfjs/pdf.reader.js')) ?>?v=<?php p($version) ?>"> </script>
|
||||||
|
<script type="text/javascript" nonce="<?php p($nonce) ?>" src="<?php p($urlGenerator->linkTo('files_reader', 'vendor/pdfjs/controllers/progress_controller.js')) ?>?v=<?php p($version) ?>"> </script>
|
||||||
<script type="text/javascript" nonce="<?php p($nonce) ?>" src="<?php p($urlGenerator->linkTo('files_reader', 'vendor/pdfjs/controllers/textlayer_controller.js')) ?>?v=<?php p($version) ?>"> </script>
|
<script type="text/javascript" nonce="<?php p($nonce) ?>" src="<?php p($urlGenerator->linkTo('files_reader', 'vendor/pdfjs/controllers/textlayer_controller.js')) ?>?v=<?php p($version) ?>"> </script>
|
||||||
<script type="text/javascript" nonce="<?php p($nonce) ?>" src="<?php p($urlGenerator->linkTo('files_reader', 'vendor/pdfjs/controllers/reader_controller.js')) ?>?v=<?php p($version) ?>"> </script>
|
<script type="text/javascript" nonce="<?php p($nonce) ?>" src="<?php p($urlGenerator->linkTo('files_reader', 'vendor/pdfjs/controllers/reader_controller.js')) ?>?v=<?php p($version) ?>"> </script>
|
||||||
<script type="text/javascript" nonce="<?php p($nonce) ?>" src="<?php p($urlGenerator->linkTo('files_reader', 'vendor/pdfjs/controllers/sidebar_controller.js')) ?>?v=<?php p($version) ?>"> </script>
|
<script type="text/javascript" nonce="<?php p($nonce) ?>" src="<?php p($urlGenerator->linkTo('files_reader', 'vendor/pdfjs/controllers/sidebar_controller.js')) ?>?v=<?php p($version) ?>"> </script>
|
||||||
<script type="text/javascript" nonce="<?php p($nonce) ?>" src="<?php p($urlGenerator->linkTo('files_reader', 'vendor/pdfjs/controllers/settings_controller.js')) ?>?v=<?php p($version) ?>"> </script>
|
<script type="text/javascript" nonce="<?php p($nonce) ?>" src="<?php p($urlGenerator->linkTo('files_reader', 'vendor/pdfjs/controllers/settings_controller.js')) ?>?v=<?php p($version) ?>"> </script>
|
||||||
<script type="text/javascript" nonce="<?php p($nonce) ?>" src="<?php p($urlGenerator->linkTo('files_reader', 'vendor/pdfjs/controllers/controls_controller.js')) ?>?v=<?php p($version) ?>"> </script>
|
<script type="text/javascript" nonce="<?php p($nonce) ?>" src="<?php p($urlGenerator->linkTo('files_reader', 'vendor/pdfjs/controllers/controls_controller.js')) ?>?v=<?php p($version) ?>"> </script>
|
||||||
|
<script type="text/javascript" nonce="<?php p($nonce) ?>" src="<?php p($urlGenerator->linkTo('files_reader', 'vendor/pdfjs/controllers/toc_controller.js')) ?>?v=<?php p($version) ?>"> </script>
|
||||||
|
<script type="text/javascript" nonce="<?php p($nonce) ?>" src="<?php p($urlGenerator->linkTo('files_reader', 'vendor/pdfjs/controllers/outline_controller.js')) ?>?v=<?php p($version) ?>"> </script>
|
||||||
<?php if ($idevice): ?>
|
<?php if ($idevice): ?>
|
||||||
<link rel="stylesheet" href="<?php p($urlGenerator->linkTo('files_reader', 'vendor/pdfjs/css/idevice.css')) ?>?v=<?php p($version) ?>">
|
<link rel="stylesheet" href="<?php p($urlGenerator->linkTo('files_reader', 'vendor/pdfjs/css/idevice.css')) ?>?v=<?php p($version) ?>">
|
||||||
<script type="text/javascript" nonce="<?php p($nonce) ?>" src="<?php p($urlGenerator->linkTo('files_reader', 'vendor/bgrins/spectrum.js')) ?>?v=<?php p($version) ?>"> </script>
|
<script type="text/javascript" nonce="<?php p($nonce) ?>" src="<?php p($urlGenerator->linkTo('files_reader', 'vendor/bgrins/spectrum.js')) ?>?v=<?php p($version) ?>"> </script>
|
||||||
|
@ -64,23 +67,41 @@
|
||||||
<body>
|
<body>
|
||||||
<div id="outerContainer">
|
<div id="outerContainer">
|
||||||
|
|
||||||
|
<!-- progress -->
|
||||||
|
|
||||||
|
<div id="progress" class="hide">
|
||||||
|
<span class="progress"><span class="bar"></span></span>
|
||||||
|
<br>
|
||||||
|
<div class="message"><span class="message-icons"><span id="download_icon" class="icon-cloud_download"></span></span> <span class="message-text"></span></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- /progress -->
|
||||||
|
|
||||||
<!-- sidebar -->
|
<!-- sidebar -->
|
||||||
|
|
||||||
<div id="sidebar" class="sidebar">
|
<div id="sidebar" class="sidebar">
|
||||||
<div id="panels" class="panels">
|
<div id="panels" class="panels">
|
||||||
<div class="pull-left">
|
<div class="pull-left">
|
||||||
<button id="show-Toc" class="show_view icon-format_list_numbered open" title="Table of Contents" data-view="Toc"></button>
|
<button id="show-Toc" class="show_view icon-dns open" title="Table of Contents" data-view="Toc"></button>
|
||||||
|
<button id="show-Outline" class="show_view icon-format_list_numbered" title="Outline" data-view="Outline"></button>
|
||||||
<button id="show-Bookmarks" class="show_view icon-turned_in" title="Bookmarks" data-view="Bookmarks"></button>
|
<button id="show-Bookmarks" class="show_view icon-turned_in" title="Bookmarks" data-view="Bookmarks"></button>
|
||||||
<button id="show-Search" class="show_view icon-search" title="Search" data-view="Search"></button>
|
<button id="show-Search" class="show_view icon-search" title="Search" data-view="Search"></button>
|
||||||
<button id="show-Notes" class="show_view icon-comment" title="Notes" data-view="Notes"></button>
|
<button id="show-Notes" class="show_view icon-comment" title="Notes" data-view="Notes"></button>
|
||||||
<button id="show-Settings" class="show_view icon-settings" title="Settings" data-view="Settings"></button>
|
<button id="show-Settings" class="show_view icon-settings" title="Settings" data-view="Settings"></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="pull-right">
|
<div class="pull-right">
|
||||||
|
<button id="toc_populate" title="generate thumbnails" class="icon-sync" style="display:none"></button>
|
||||||
<button id="hide-Sidebar" class="close_sidebar icon-arrow-left2" title="Close sidebar"></button>
|
<button id="hide-Sidebar" class="close_sidebar icon-arrow-left2" title="Close sidebar"></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="views">
|
<div id="views">
|
||||||
<div id="tocView" class="toc-view view open">
|
<div id="tocView" class="toc-view view open">
|
||||||
|
<ul id="toc">
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div id="outlineView" class="outline-view view">
|
||||||
|
<ul id="outline" class="outline">
|
||||||
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div id="bookmarksView" class="bookmarks-view view">
|
<div id="bookmarksView" class="bookmarks-view view">
|
||||||
<ul id="bookmarks" class="bookmarks">
|
<ul id="bookmarks" class="bookmarks">
|
||||||
|
|
BIN
files_reader/vendor/pdfjs/.pdf.reader.js.swp
vendored
Normal file
BIN
files_reader/vendor/pdfjs/.pdf.reader.js.swp
vendored
Normal file
Binary file not shown.
BIN
files_reader/vendor/pdfjs/controllers/.outline_controller.js.swp
vendored
Normal file
BIN
files_reader/vendor/pdfjs/controllers/.outline_controller.js.swp
vendored
Normal file
Binary file not shown.
BIN
files_reader/vendor/pdfjs/controllers/.progress_controller.js.swp
vendored
Normal file
BIN
files_reader/vendor/pdfjs/controllers/.progress_controller.js.swp
vendored
Normal file
Binary file not shown.
|
@ -23,7 +23,8 @@ PDFJS.reader.ControlsController = function(book) {
|
||||||
$rotate_option = $(".rotate_option"),
|
$rotate_option = $(".rotate_option"),
|
||||||
$rotate_left = $("#rotate_left"),
|
$rotate_left = $("#rotate_left"),
|
||||||
$rotate_right = $("#rotate_right"),
|
$rotate_right = $("#rotate_right"),
|
||||||
$page_num = $("#page_num");
|
$page_num = $("#page_num"),
|
||||||
|
$total_pages = $("#total_pages");
|
||||||
|
|
||||||
if (reader.isMobile() === true) {
|
if (reader.isMobile() === true) {
|
||||||
$titlebar.addClass("background_visible");
|
$titlebar.addClass("background_visible");
|
||||||
|
@ -136,6 +137,19 @@ PDFJS.reader.ControlsController = function(book) {
|
||||||
$zoom_options.css("opacity", "");
|
$zoom_options.css("opacity", "");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var setZoomIcon = function(zoom) {
|
||||||
|
$zoom_icon[0].className="";
|
||||||
|
var $current_zoom_option = $zoom_options.find("[data-value='" + zoom + "']");
|
||||||
|
if ($current_zoom_option.data("class")) {
|
||||||
|
$zoom_icon.addClass($current_zoom_option.data("class"));
|
||||||
|
} else {
|
||||||
|
$zoom_icon[0].textContent = $current_zoom_option.data("text");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
setZoomIcon(settings.zoomLevel);
|
||||||
|
|
||||||
|
/*
|
||||||
$zoom_icon[0].className="";
|
$zoom_icon[0].className="";
|
||||||
var $current_zoom_option = $zoom_options.find("[data-value='" + settings.zoomLevel + "']");
|
var $current_zoom_option = $zoom_options.find("[data-value='" + settings.zoomLevel + "']");
|
||||||
if ($current_zoom_option.data("class")) {
|
if ($current_zoom_option.data("class")) {
|
||||||
|
@ -143,6 +157,7 @@ PDFJS.reader.ControlsController = function(book) {
|
||||||
} else {
|
} else {
|
||||||
$zoom_icon[0].textContent = $current_zoom_option.data("text");
|
$zoom_icon[0].textContent = $current_zoom_option.data("text");
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
$zoom_option.on("click", function () {
|
$zoom_option.on("click", function () {
|
||||||
var $this = $(this);
|
var $this = $(this);
|
||||||
|
@ -158,8 +173,12 @@ PDFJS.reader.ControlsController = function(book) {
|
||||||
});
|
});
|
||||||
|
|
||||||
// rotate
|
// rotate
|
||||||
$rotate_icon[0].className = "";
|
var setRotateIcon = function (rotation) {
|
||||||
$rotate_icon[0].className = "icon-rotate_" + settings.rotation;
|
$rotate_icon[0].className = "";
|
||||||
|
$rotate_icon[0].className = "icon-rotate_" + rotation;
|
||||||
|
};
|
||||||
|
|
||||||
|
setRotateIcon(settings.rotation);
|
||||||
|
|
||||||
$rotate_icon.on("click", function () {
|
$rotate_icon.on("click", function () {
|
||||||
var offset = $(this).offset();
|
var offset = $(this).offset();
|
||||||
|
@ -238,6 +257,42 @@ PDFJS.reader.ControlsController = function(book) {
|
||||||
$page_num[0].addEventListener("keydown", enterPageNum, false);
|
$page_num[0].addEventListener("keydown", enterPageNum, false);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var setPageCount = function (_numPages) {
|
||||||
|
|
||||||
|
var numPages = _numPages || reader.settings.numPages;
|
||||||
|
|
||||||
|
$total_pages[0].textContent = parseInt(numPages).toString();
|
||||||
|
};
|
||||||
|
|
||||||
|
var setCurrentPage = function (_page) {
|
||||||
|
|
||||||
|
var page = _page || reader.settings.currentPage,
|
||||||
|
zoom = reader.settings.zoomLevel,
|
||||||
|
oddPageRight = reader.settings.oddPageRight,
|
||||||
|
total_pages = reader.settings.numPages,
|
||||||
|
text;
|
||||||
|
|
||||||
|
if (zoom === "spread") {
|
||||||
|
if (oddPageRight === true) {
|
||||||
|
page -= page % 2;
|
||||||
|
} else {
|
||||||
|
page -= (page + 1) % 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (page >= 0 && page <= total_pages) {
|
||||||
|
if (page === total_pages) {
|
||||||
|
text = reader.getPageLabel(page);
|
||||||
|
} else if (page === 0) {
|
||||||
|
text = reader.getPageLabel(page + 1);
|
||||||
|
} else {
|
||||||
|
text = reader.getPageLabel(page) + "-" + reader.getPageLabel(page + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$page_num[0].textContent = text;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
book.on('renderer:locationChanged', function(cfi){
|
book.on('renderer:locationChanged', function(cfi){
|
||||||
|
@ -273,6 +328,10 @@ PDFJS.reader.ControlsController = function(book) {
|
||||||
return {
|
return {
|
||||||
"show": show,
|
"show": show,
|
||||||
"hide": hide,
|
"hide": hide,
|
||||||
"toggle": toggle
|
"toggle": toggle,
|
||||||
|
"setZoomIcon": setZoomIcon,
|
||||||
|
"setRotateIcon": setRotateIcon,
|
||||||
|
"setCurrentPage": setCurrentPage,
|
||||||
|
"setPageCount": setPageCount
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
164
files_reader/vendor/pdfjs/controllers/outline_controller.js
vendored
Normal file
164
files_reader/vendor/pdfjs/controllers/outline_controller.js
vendored
Normal file
|
@ -0,0 +1,164 @@
|
||||||
|
PDFJS.reader.OutlineController = function(_outline) {
|
||||||
|
|
||||||
|
var reader = this,
|
||||||
|
book = this.book,
|
||||||
|
outline = _outline || [];
|
||||||
|
|
||||||
|
var outlineView = document.getElementById("outlineView"),
|
||||||
|
$list = $("#outlineView"),
|
||||||
|
baseUrl = location.href.split('#')[0],
|
||||||
|
lastToggleIsShow;
|
||||||
|
|
||||||
|
var DEFAULT_TITLE = '\u2013';
|
||||||
|
|
||||||
|
var bindLink = function (element, item) {
|
||||||
|
|
||||||
|
var destination = item.dest;
|
||||||
|
|
||||||
|
if (item.url) {
|
||||||
|
|
||||||
|
PDFJS.addLinkAttributes (element, {
|
||||||
|
url: item.url,
|
||||||
|
target: (item.newWindow
|
||||||
|
? PDFJS.LinkTarget.BLANK
|
||||||
|
: undefined),
|
||||||
|
});
|
||||||
|
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
|
||||||
|
element.href = getDestinationHash(destination);
|
||||||
|
element.onclick = function () {
|
||||||
|
if (destination) {
|
||||||
|
reader.navigateTo(destination);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var setStyles = function (element, item) {
|
||||||
|
|
||||||
|
var styleStr = "";
|
||||||
|
|
||||||
|
if (item.bold) {
|
||||||
|
styleStr += 'font-weight: bold;';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item.italic) {
|
||||||
|
styleStr += 'font-style: italic;';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (styleStr) {
|
||||||
|
element.setAttribute('style', styleStr);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var getDestinationHash = function (destination) {
|
||||||
|
|
||||||
|
var url = baseUrl || "",
|
||||||
|
str;
|
||||||
|
|
||||||
|
if (typeof destination === 'string') {
|
||||||
|
|
||||||
|
url += "#"
|
||||||
|
+ (parseInt(destination) === destination)
|
||||||
|
? "nameddest="
|
||||||
|
: ""
|
||||||
|
+ escape(destination);
|
||||||
|
|
||||||
|
} else if (destination instanceof Array) {
|
||||||
|
|
||||||
|
url += "#"
|
||||||
|
+ escape(JSON.stringify(destination));
|
||||||
|
}
|
||||||
|
|
||||||
|
return url;
|
||||||
|
};
|
||||||
|
|
||||||
|
var generateOutlineItems = function (outline, level) {
|
||||||
|
|
||||||
|
var container = document.createElement("ul");
|
||||||
|
|
||||||
|
if(!level) level = 1;
|
||||||
|
|
||||||
|
outline.forEach(function (chapter) {
|
||||||
|
var listitem = document.createElement("li"),
|
||||||
|
link = document.createElement("a"),
|
||||||
|
toggle = document.createElement("a"),
|
||||||
|
subitems;
|
||||||
|
|
||||||
|
listitem.id = "outline-"+chapter.dest;
|
||||||
|
listitem.classList.add('list_item');
|
||||||
|
|
||||||
|
link.textContent = PDFJS.removeNullCharacters(chapter.title) || DEFAULT_TITLE;
|
||||||
|
bindLink(link, chapter);
|
||||||
|
setStyles(link, chapter);
|
||||||
|
link.classList.add('outline_link');
|
||||||
|
|
||||||
|
listitem.appendChild(link);
|
||||||
|
|
||||||
|
if(chapter.items.length > 0) {
|
||||||
|
level++;
|
||||||
|
subitems = generateOutlineItems(chapter.items, level);
|
||||||
|
toggle.classList.add('outline_toggle');
|
||||||
|
listitem.insertBefore(toggle, link);
|
||||||
|
listitem.appendChild(subitems);
|
||||||
|
}
|
||||||
|
|
||||||
|
container.appendChild(listitem);
|
||||||
|
});
|
||||||
|
|
||||||
|
return container;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
console.log(outline);
|
||||||
|
|
||||||
|
var onShow = function() {
|
||||||
|
outlineView.classList.add('open');
|
||||||
|
};
|
||||||
|
|
||||||
|
var onHide = function() {
|
||||||
|
outlineView.classList.remove('open');
|
||||||
|
};
|
||||||
|
|
||||||
|
$list.append(generateOutlineItems(outline));
|
||||||
|
|
||||||
|
/*
|
||||||
|
$list.find(".outline_link").on("click", function(event){
|
||||||
|
var url = this.getAttribute('href');
|
||||||
|
|
||||||
|
event.preventDefault();
|
||||||
|
|
||||||
|
//-- Provide the Book with the url to show
|
||||||
|
// The Url must be found in the books manifest
|
||||||
|
book.goto(url);
|
||||||
|
|
||||||
|
$list.find(".currentChapter")
|
||||||
|
.addClass("openChapter")
|
||||||
|
.removeClass("currentChapter");
|
||||||
|
|
||||||
|
$(this).parent('li').addClass("currentChapter");
|
||||||
|
|
||||||
|
});
|
||||||
|
*/
|
||||||
|
|
||||||
|
$list.find(".outline_toggle").on("click", function(event){
|
||||||
|
var $el = $(this).parent('li'),
|
||||||
|
open = $el.hasClass("openChapter");
|
||||||
|
|
||||||
|
event.preventDefault();
|
||||||
|
if(open){
|
||||||
|
$el.removeClass("openChapter");
|
||||||
|
} else {
|
||||||
|
$el.addClass("openChapter");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return {
|
||||||
|
"show" : onShow,
|
||||||
|
"hide" : onHide
|
||||||
|
};
|
||||||
|
};
|
57
files_reader/vendor/pdfjs/controllers/progress_controller.js
vendored
Normal file
57
files_reader/vendor/pdfjs/controllers/progress_controller.js
vendored
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
PDFJS.reader.ProgressController = function() {
|
||||||
|
var reader = this,
|
||||||
|
settings = reader.settings,
|
||||||
|
percentage = 0;
|
||||||
|
|
||||||
|
var $progress = $("#progress"),
|
||||||
|
$bar = $(".bar"),
|
||||||
|
$download_icon = $("#download_icon"),
|
||||||
|
$message = $(".message-text");
|
||||||
|
|
||||||
|
var show = function () {
|
||||||
|
$progress.removeClass("hide");
|
||||||
|
};
|
||||||
|
|
||||||
|
var hide = function () {
|
||||||
|
$progress.addClass("hide");
|
||||||
|
};
|
||||||
|
|
||||||
|
var setSize = function (size) {
|
||||||
|
settings.fileSize = size;
|
||||||
|
};
|
||||||
|
|
||||||
|
var setProgress = function (progress) {
|
||||||
|
|
||||||
|
if (percentage < 1)
|
||||||
|
$download_icon.addClass("active");
|
||||||
|
|
||||||
|
percentage = Math.floor((progress.loaded / progress.total) * 100);
|
||||||
|
$bar.css("width", percentage + "%");
|
||||||
|
|
||||||
|
if (percentage === 100)
|
||||||
|
$download_icon.removeClass("active").addClass("ok");
|
||||||
|
};
|
||||||
|
|
||||||
|
var reset = function() {
|
||||||
|
$bar.css("width", 0);
|
||||||
|
};
|
||||||
|
|
||||||
|
var setMessage = function (text, category, state) {
|
||||||
|
|
||||||
|
var $category_icon = $("#" + category + "_icon");
|
||||||
|
|
||||||
|
$message.text(text);
|
||||||
|
|
||||||
|
$category_icon[0].classList.remove("ok", "active", "error");
|
||||||
|
$category_icon.addClass(state);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
return {
|
||||||
|
"show": show,
|
||||||
|
"hide": hide,
|
||||||
|
"setSize": setSize,
|
||||||
|
"setProgress": setProgress,
|
||||||
|
"setMessage": setMessage
|
||||||
|
};
|
||||||
|
};
|
|
@ -119,8 +119,8 @@ PDFJS.reader.ReaderController = function(book) {
|
||||||
case 'rotateRight':
|
case 'rotateRight':
|
||||||
$rotate_right.click();
|
$rotate_right.click();
|
||||||
break;
|
break;
|
||||||
case 'toggleZoom':
|
case 'cycleZoom':
|
||||||
// TODO
|
reader.cycleZoom();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
console.log("unsupported keyCode: " + e.keyCode);
|
console.log("unsupported keyCode: " + e.keyCode);
|
||||||
|
|
|
@ -6,7 +6,7 @@ PDFJS.reader.SidebarController = function(book) {
|
||||||
$panels = $("#panels"),
|
$panels = $("#panels"),
|
||||||
$views = $("#views"),
|
$views = $("#views"),
|
||||||
$close = $("#hide-Sidebar");
|
$close = $("#hide-Sidebar");
|
||||||
$slider = $("#slider");
|
$slider = $("#slider");
|
||||||
|
|
||||||
var activePanel = "Toc";
|
var activePanel = "Toc";
|
||||||
|
|
||||||
|
@ -62,6 +62,8 @@ PDFJS.reader.SidebarController = function(book) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$sidebar.css("width", "calc(" + parseInt(settings.thumbnailWidth) + "px + 2em)");
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'show' : show,
|
'show' : show,
|
||||||
'hide' : hide,
|
'hide' : hide,
|
||||||
|
|
|
@ -1,115 +1,192 @@
|
||||||
PDFJS.reader.TocController = function(toc) {
|
PDFJS.reader.TocController = function() {
|
||||||
var book = this.book;
|
|
||||||
|
|
||||||
var $list = $("#tocView"),
|
var reader = this,
|
||||||
docfrag = document.createDocumentFragment();
|
book = this.book,
|
||||||
|
settings = reader.settings,
|
||||||
|
toc = document.getElementById("toc"),
|
||||||
|
tovView = document.getElementById("tocView"),
|
||||||
|
$toc_populate = $("#toc_populate"),
|
||||||
|
timeout;
|
||||||
|
|
||||||
var currentChapter = false;
|
var isVisible = function (element) {
|
||||||
|
|
||||||
var generateTocItems = function(toc, level) {
|
var viewport = element.getBoundingClientRect(),
|
||||||
var container = document.createElement("ul");
|
visible,
|
||||||
|
offset = settings.preloadOffset;
|
||||||
|
|
||||||
if(!level) level = 1;
|
visible = (
|
||||||
|
viewport.top >= (0 - offset)
|
||||||
|
&& viewport.left >= (0 - offset)
|
||||||
|
&& viewport.right < (window.innerWidth + offset)
|
||||||
|
&& viewport.bottom < (window.innerHeight + offset)
|
||||||
|
);
|
||||||
|
|
||||||
toc.forEach(function(chapter) {
|
return visible;
|
||||||
var listitem = document.createElement("li"),
|
|
||||||
link = document.createElement("a");
|
|
||||||
toggle = document.createElement("a");
|
|
||||||
|
|
||||||
var subitems;
|
|
||||||
|
|
||||||
listitem.id = "toc-"+chapter.id;
|
|
||||||
listitem.classList.add('list_item');
|
|
||||||
|
|
||||||
link.textContent = chapter.label;
|
|
||||||
link.href = chapter.href;
|
|
||||||
|
|
||||||
link.classList.add('toc_link');
|
|
||||||
|
|
||||||
listitem.appendChild(link);
|
|
||||||
|
|
||||||
if(chapter.subitems.length > 0) {
|
|
||||||
level++;
|
|
||||||
subitems = generateTocItems(chapter.subitems, level);
|
|
||||||
toggle.classList.add('toc_toggle');
|
|
||||||
|
|
||||||
listitem.insertBefore(toggle, link);
|
|
||||||
listitem.appendChild(subitems);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
container.appendChild(listitem);
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
return container;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var lazyLoad = function () {
|
||||||
|
|
||||||
|
var elements = toc.querySelectorAll('img[data-pagenum]'),
|
||||||
|
pagenum,
|
||||||
|
count;
|
||||||
|
|
||||||
|
for (var i = 0; i < elements.length; i++) {
|
||||||
|
if (isVisible(elements[i])) {
|
||||||
|
pagenum = elements[i].getAttribute("data-pagenum");
|
||||||
|
elements[i].removeAttribute("data-pagenum");
|
||||||
|
reader.getThumb(pagenum, true);
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!elements.length || count === elements.length ) {
|
||||||
|
removeLazyLoader(tocView);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var lazyLoader = function () {
|
||||||
|
timeout = setTimeout( function () {
|
||||||
|
lazyLoad();
|
||||||
|
}, settings.lazyDelay);
|
||||||
|
};
|
||||||
|
|
||||||
|
var addLazyLoader = function (_element) {
|
||||||
|
|
||||||
|
var element = _element || window;
|
||||||
|
|
||||||
|
element.addEventListener("scroll", lazyLoader, false);
|
||||||
|
element.addEventListener("load", lazyLoader, false);
|
||||||
|
};
|
||||||
|
|
||||||
|
var removeLazyLoader = function (_element) {
|
||||||
|
|
||||||
|
var element = _element || window;
|
||||||
|
|
||||||
|
element.removeEventListener("scroll", lazyLoader);
|
||||||
|
element.removeEventListener("load", lazyLoader);
|
||||||
|
};
|
||||||
|
|
||||||
|
var tocCreate = function (no_pages, width, height, populate) {
|
||||||
|
|
||||||
|
var canvas = document.createElement("canvas"),
|
||||||
|
ctx = canvas.getContext("2d"),
|
||||||
|
aspect,
|
||||||
|
imgsrc,
|
||||||
|
preloadcount,
|
||||||
|
scale,
|
||||||
|
timeout;
|
||||||
|
|
||||||
|
aspect = parseFloat(width / height);
|
||||||
|
|
||||||
|
// create small placeholder image
|
||||||
|
canvas.width = 10;
|
||||||
|
canvas.height = parseInt(canvas.width / aspect);
|
||||||
|
|
||||||
|
placeholder_width = reader.settings.thumbnailWidth;
|
||||||
|
placeholder_height = parseInt(reader.settings.thumbnailWidth / aspect);
|
||||||
|
|
||||||
|
// fill with transparent black, style in CSS
|
||||||
|
ctx.fillStyle = "rgba(0, 0, 0, 0)";
|
||||||
|
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
||||||
|
imgsrc = canvas.toDataURL();
|
||||||
|
|
||||||
|
for(var i = 0; i < no_pages; i++) {
|
||||||
|
var item = document.createElement('li'),
|
||||||
|
placeholder = new Image(),
|
||||||
|
label = document.createElement('span'),
|
||||||
|
page_label = reader.pageLabels[i + 1];
|
||||||
|
|
||||||
|
item.setAttribute("id", "page_" + parseInt(i + 1));
|
||||||
|
placeholder.src = imgsrc;
|
||||||
|
placeholder.style.width = reader.settings.thumbnailWidth;
|
||||||
|
placeholder.style.height = parseInt(reader.settings.thumbnailWidth / aspect);
|
||||||
|
placeholder.classList.add("placeholder");
|
||||||
|
label.innerHTML = page_label || (i + 1).toString();
|
||||||
|
label.classList.add("page_label");
|
||||||
|
//label.style.left = width;
|
||||||
|
item.appendChild(placeholder);
|
||||||
|
item.appendChild(label);
|
||||||
|
toc.appendChild(item);
|
||||||
|
if (populate) {
|
||||||
|
reader.getThumb(i + 1, true);
|
||||||
|
} else {
|
||||||
|
placeholder.setAttribute("data-pagenum", parseInt(i + 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!populate) {
|
||||||
|
|
||||||
|
// preload first screenfull of thumbnails
|
||||||
|
scale = parseFloat(settings.thumbnailWidth / width);
|
||||||
|
preloadcount = parseInt(window.innerHeight / placeholder_height) + 2;
|
||||||
|
if (preloadcount > settings.numPages)
|
||||||
|
preloadcount = numPages;
|
||||||
|
|
||||||
|
var _timeout = setTimeout(function () {
|
||||||
|
for (var i = 1; i <= preloadcount; i++) {
|
||||||
|
reader.getThumb(i, true);
|
||||||
|
}
|
||||||
|
}, settings.initialLazyDelay);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var tocInsert = function (image, page, replace) {
|
||||||
|
var placeholder = toc.children[page - 1].firstChild;
|
||||||
|
if (replace === true) {
|
||||||
|
placeholder.parentNode.replaceChild(image, placeholder);
|
||||||
|
}
|
||||||
|
|
||||||
|
toc.children[page - 1].addEventListener('click', function (e) {
|
||||||
|
reader.queuePage(page);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
var tocPopulate = function () {
|
||||||
|
var i = 0;
|
||||||
|
while (i < reader.settings.numPages) {
|
||||||
|
reader.getThumb(i, true);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
reader.thumbnails = true;
|
||||||
|
$toc_populate.addClass("hide");
|
||||||
|
remove_lazy_loader();
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!settings.thumbnails) {
|
||||||
|
addLazyLoader(tocView);
|
||||||
|
}
|
||||||
|
|
||||||
|
reader.book.getPage(1).then(function(page) {
|
||||||
|
var width,
|
||||||
|
height,
|
||||||
|
viewport,
|
||||||
|
page_rotation,
|
||||||
|
rotation;
|
||||||
|
|
||||||
|
page_rotation = page.rotate;
|
||||||
|
rotation = (page_rotation + reader.settings.rotation) % 360;
|
||||||
|
|
||||||
|
viewport = page.getViewport(1, rotation);
|
||||||
|
|
||||||
|
width = viewport.width;
|
||||||
|
height = viewport.height;
|
||||||
|
|
||||||
|
tocCreate(settings.numPages, width, height, settings.thumbnails);
|
||||||
|
});
|
||||||
|
|
||||||
var onShow = function() {
|
var onShow = function() {
|
||||||
$list.addClass('open');
|
tocView.classList.add('open');
|
||||||
};
|
};
|
||||||
|
|
||||||
var onHide = function() {
|
var onHide = function() {
|
||||||
$list.removeClass('open');
|
tocView.classList.remove('open');
|
||||||
};
|
};
|
||||||
|
|
||||||
var chapterChange = function(e) {
|
|
||||||
var id = e.id,
|
|
||||||
$item = $list.find("#toc-"+id),
|
|
||||||
$current = $list.find(".currentChapter"),
|
|
||||||
$open = $list.find('.openChapter');
|
|
||||||
|
|
||||||
if($item.length){
|
|
||||||
|
|
||||||
if($item != $current && $item.has(currentChapter).length > 0) {
|
|
||||||
$current.removeClass("currentChapter");
|
|
||||||
}
|
|
||||||
|
|
||||||
$item.addClass("currentChapter");
|
|
||||||
|
|
||||||
// $open.removeClass("openChapter");
|
|
||||||
$item.parents('li').addClass("openChapter");
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
book.on('renderer:chapterDisplayed', chapterChange);
|
|
||||||
|
|
||||||
var tocitems = generateTocItems(toc);
|
|
||||||
|
|
||||||
docfrag.appendChild(tocitems);
|
|
||||||
|
|
||||||
$list.append(docfrag);
|
|
||||||
$list.find(".toc_link").on("click", function(event){
|
|
||||||
var url = this.getAttribute('href');
|
|
||||||
|
|
||||||
event.preventDefault();
|
|
||||||
|
|
||||||
//-- Provide the Book with the url to show
|
|
||||||
// The Url must be found in the books manifest
|
|
||||||
book.goto(url);
|
|
||||||
|
|
||||||
$list.find(".currentChapter")
|
|
||||||
.addClass("openChapter")
|
|
||||||
.removeClass("currentChapter");
|
|
||||||
|
|
||||||
$(this).parent('li').addClass("currentChapter");
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
$list.find(".toc_toggle").on("click", function(event){
|
|
||||||
var $el = $(this).parent('li'),
|
|
||||||
open = $el.hasClass("openChapter");
|
|
||||||
|
|
||||||
event.preventDefault();
|
|
||||||
if(open){
|
|
||||||
$el.removeClass("openChapter");
|
|
||||||
} else {
|
|
||||||
$el.addClass("openChapter");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"show" : onShow,
|
"show" : onShow,
|
||||||
"hide" : onHide
|
"hide" : onHide,
|
||||||
|
"tocInsert": tocInsert,
|
||||||
|
"totPopulate": tocPopulate
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
BIN
files_reader/vendor/pdfjs/css/.main.css.swp
vendored
Normal file
BIN
files_reader/vendor/pdfjs/css/.main.css.swp
vendored
Normal file
Binary file not shown.
54
files_reader/vendor/pdfjs/css/main.css
vendored
54
files_reader/vendor/pdfjs/css/main.css
vendored
|
@ -210,6 +210,7 @@ body {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
#viewer canvas {
|
#viewer canvas {
|
||||||
|
@ -336,6 +337,59 @@ body {
|
||||||
opacity: 0 !important;
|
opacity: 0 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* progressbar (loading/unarchiving) */
|
||||||
|
|
||||||
|
#progress {
|
||||||
|
position: fixed;
|
||||||
|
z-index: 10;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.progress, .bar {
|
||||||
|
width: 100%;
|
||||||
|
height: 0.3em;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
.progress {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
.bar {
|
||||||
|
width: 0;
|
||||||
|
background-color: red;
|
||||||
|
box-shadow: 0px 1px 3px rgba(0,0,0,.6);
|
||||||
|
}
|
||||||
|
|
||||||
|
.message {
|
||||||
|
margin: 3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.message-icons {
|
||||||
|
font-size: 3em;
|
||||||
|
color: lightgrey;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
.message-text {
|
||||||
|
font-size: 1.5em;
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.active {
|
||||||
|
color:black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ok {
|
||||||
|
color:green;
|
||||||
|
}
|
||||||
|
|
||||||
|
.error {
|
||||||
|
color:red;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* END progressbar */
|
||||||
|
|
||||||
|
|
||||||
@media only screen and (max-width: 1040px) {
|
@media only screen and (max-width: 1040px) {
|
||||||
/*
|
/*
|
||||||
#viewer{
|
#viewer{
|
||||||
|
|
39
files_reader/vendor/pdfjs/css/sidebar.css
vendored
39
files_reader/vendor/pdfjs/css/sidebar.css
vendored
|
@ -9,7 +9,7 @@
|
||||||
background: #6b6b6b;
|
background: #6b6b6b;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: 0;
|
top: 0;
|
||||||
min-width: 25em;
|
min-width: 17em;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
display: none;
|
display: none;
|
||||||
|
@ -231,7 +231,28 @@ legend {
|
||||||
/* END panels */
|
/* END panels */
|
||||||
|
|
||||||
/* TOC (and search, and bookmarks) */
|
/* TOC (and search, and bookmarks) */
|
||||||
.toc_toggle {
|
.thumbnail {
|
||||||
|
margin: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#toc li,
|
||||||
|
#outline li{
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
/* max-width: calc(100% - 2em); */
|
||||||
|
}
|
||||||
|
|
||||||
|
.page_label {
|
||||||
|
position: absolute;
|
||||||
|
background-color: white;
|
||||||
|
box-shadow: 1px 1px 10px rgba(0,0,0,0.5);
|
||||||
|
border-radius: 3px;
|
||||||
|
padding: 0.2em;
|
||||||
|
top: 1em;
|
||||||
|
right: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.outline_toggle {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: 14px;
|
width: 14px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
@ -240,23 +261,23 @@ legend {
|
||||||
user-select: none;
|
user-select: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.toc_toggle:before {
|
.outline_toggle:before {
|
||||||
content: '▸';
|
content: '▸';
|
||||||
color: #fff;
|
color: #fff;
|
||||||
margin-right: -4px;
|
margin-right: -4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.currentChapter > .toc_toggle:before,
|
.currentChapter > .outline_toggle:before,
|
||||||
.openChapter > .toc_toggle:before {
|
.openChapter > .outline_toggle:before {
|
||||||
content: '▾';
|
content: '▾';
|
||||||
}
|
}
|
||||||
|
|
||||||
#toc-populate.open {
|
#outline-populate.open {
|
||||||
display: inline-block !important;
|
display: inline-block !important;
|
||||||
background-color: #4e4e4e;
|
background-color: #4e4e4e;
|
||||||
}
|
}
|
||||||
|
|
||||||
.toc-view li,
|
.outline-view li,
|
||||||
.bookmarks-view li,
|
.bookmarks-view li,
|
||||||
.search-view li {
|
.search-view li {
|
||||||
margin: 1em;
|
margin: 1em;
|
||||||
|
@ -264,11 +285,11 @@ legend {
|
||||||
list-style: none;
|
list-style: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.toc-view li {
|
.outline-view li {
|
||||||
text-transform: capitalize;
|
text-transform: capitalize;
|
||||||
}
|
}
|
||||||
|
|
||||||
.toc-vew.hidden {
|
.outline-vew.hidden {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
377
files_reader/vendor/pdfjs/pdf.reader.js
vendored
377
files_reader/vendor/pdfjs/pdf.reader.js
vendored
|
@ -17,11 +17,16 @@ PDFJS.Reader = function(bookPath, _options) {
|
||||||
|
|
||||||
var reader = this,
|
var reader = this,
|
||||||
book,
|
book,
|
||||||
|
loader,
|
||||||
$viewer = $("#viewer"),
|
$viewer = $("#viewer"),
|
||||||
search = window.location.search;
|
search = window.location.search;
|
||||||
|
|
||||||
var TEXT_RENDER_DELAY = 200, // ms
|
var TEXT_RENDER_DELAY = 200, // ms
|
||||||
PAGE_RENDER_DELAY = 200, // ms
|
PAGE_RENDER_DELAY = 200, // ms
|
||||||
|
LAZY_DELAY = 200, // ms
|
||||||
|
INITIAL_LAZY_DELAY = 2000, // ms
|
||||||
|
PRELOAD_OFFSET = 500, // px
|
||||||
|
THUMBNAIL_WIDTH = 200, // px
|
||||||
MAX_CANVAS_PIXELS = 5242880,
|
MAX_CANVAS_PIXELS = 5242880,
|
||||||
CSS_UNITS = 96.0 / 72.0,
|
CSS_UNITS = 96.0 / 72.0,
|
||||||
MIN_SCALE = 0.25,
|
MIN_SCALE = 0.25,
|
||||||
|
@ -42,6 +47,11 @@ PDFJS.Reader = function(bookPath, _options) {
|
||||||
oddPageRight: true, // when true, odd pages render on the right side
|
oddPageRight: true, // when true, odd pages render on the right side
|
||||||
zoomLevel: window.outerWidth > window.outerHeight ? "spread" : "fit_page", // spread, fit_page, fit_width, percentage
|
zoomLevel: window.outerWidth > window.outerHeight ? "spread" : "fit_page", // spread, fit_page, fit_width, percentage
|
||||||
rotation: 0, // 0 || 90 || 180 || 270
|
rotation: 0, // 0 || 90 || 180 || 270
|
||||||
|
thumbnails: false, // true || false, show thumbnails (visual index)
|
||||||
|
thumbnailWidth: THUMBNAIL_WIDTH,
|
||||||
|
lazyDelay: LAZY_DELAY, // ms, delay before lazyloader loads image
|
||||||
|
initialLazyDelay: INITIAL_LAZY_DELAY, // ms, delay before preloading images for lazyloader
|
||||||
|
preloadOffset: PRELOAD_OFFSET, // px, preload thumbs when they are within this distance from viewport
|
||||||
history: true,
|
history: true,
|
||||||
keyboard: {
|
keyboard: {
|
||||||
32: 'next', // space
|
32: 'next', // space
|
||||||
|
@ -55,7 +65,7 @@ PDFJS.Reader = function(bookPath, _options) {
|
||||||
66: 'bookmark', // b
|
66: 'bookmark', // b
|
||||||
76: 'rotateLeft', // l
|
76: 'rotateLeft', // l
|
||||||
82: 'rotateRight', // r
|
82: 'rotateRight', // r
|
||||||
90: 'toggleZoom', // z
|
90: 'cycleZoom', // z
|
||||||
83: 'toggleSidebar',// s
|
83: 'toggleSidebar',// s
|
||||||
84: 'toggleTitlebar', // t
|
84: 'toggleTitlebar', // t
|
||||||
68: 'toggleDay', // d
|
68: 'toggleDay', // d
|
||||||
|
@ -75,7 +85,7 @@ PDFJS.Reader = function(bookPath, _options) {
|
||||||
|
|
||||||
// used for annotations and bookmarks
|
// used for annotations and bookmarks
|
||||||
this.Annotation = function (type, anchor, body, id) {
|
this.Annotation = function (type, anchor, body, id) {
|
||||||
this.id = id || EPUBJS.core.uuid();
|
this.id = id || PDFJS.core.uuid();
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.date = Date.now();
|
this.date = Date.now();
|
||||||
this.edited = this.date;
|
this.edited = this.date;
|
||||||
|
@ -96,6 +106,9 @@ PDFJS.Reader = function(bookPath, _options) {
|
||||||
canvas: document.getElementById("left"),
|
canvas: document.getElementById("left"),
|
||||||
ctx: document.getElementById("left").getContext('2d'),
|
ctx: document.getElementById("left").getContext('2d'),
|
||||||
textdiv: document.getElementById("text_left"),
|
textdiv: document.getElementById("text_left"),
|
||||||
|
cache_canvas: null,
|
||||||
|
cache_ctx: null,
|
||||||
|
cache_textdiv: null,
|
||||||
textLayer: null,
|
textLayer: null,
|
||||||
renderTask: null,
|
renderTask: null,
|
||||||
oscanvas: null,
|
oscanvas: null,
|
||||||
|
@ -106,6 +119,9 @@ PDFJS.Reader = function(bookPath, _options) {
|
||||||
canvas: document.getElementById("right"),
|
canvas: document.getElementById("right"),
|
||||||
ctx: document.getElementById("right").getContext('2d'),
|
ctx: document.getElementById("right").getContext('2d'),
|
||||||
textdiv: document.getElementById("text_right"),
|
textdiv: document.getElementById("text_right"),
|
||||||
|
cache_canvas: null,
|
||||||
|
cache_ctx: null,
|
||||||
|
cache_textdiv: null,
|
||||||
textLayer: null,
|
textLayer: null,
|
||||||
renderTask: null,
|
renderTask: null,
|
||||||
oscanvas: null,
|
oscanvas: null,
|
||||||
|
@ -118,6 +134,19 @@ PDFJS.Reader = function(bookPath, _options) {
|
||||||
|
|
||||||
this.renderQueue = false;
|
this.renderQueue = false;
|
||||||
|
|
||||||
|
// define which zoom states to cycle through in cycleZoom
|
||||||
|
this.zoomCycle = {
|
||||||
|
'spread': 'fit_page',
|
||||||
|
'fit_page': 'fit_width',
|
||||||
|
'fit_width':'spread'
|
||||||
|
};
|
||||||
|
|
||||||
|
this.thumbs = [];
|
||||||
|
|
||||||
|
this.pageLabels = [];
|
||||||
|
|
||||||
|
this.pageRefs = {};
|
||||||
|
|
||||||
// Overide options with search parameters
|
// Overide options with search parameters
|
||||||
if(search) {
|
if(search) {
|
||||||
parameters = search.slice(1).split("&");
|
parameters = search.slice(1).split("&");
|
||||||
|
@ -142,53 +171,193 @@ PDFJS.Reader = function(bookPath, _options) {
|
||||||
this.MIN_SCALE = MIN_SCALE;
|
this.MIN_SCALE = MIN_SCALE;
|
||||||
this.MAX_SCALE = MAX_SCALE;
|
this.MAX_SCALE = MAX_SCALE;
|
||||||
|
|
||||||
PDFJS.getDocument(reader.settings.bookPath).then(function(_book) {
|
reader.ProgressController = PDFJS.reader.ProgressController.call(reader);
|
||||||
reader.book = book = _book;
|
|
||||||
console.log(book);
|
loadingTask = PDFJS.getDocument(reader.settings.bookPath);
|
||||||
reader.settings.numPages = reader.book.numPages;
|
|
||||||
document.getElementById('total_pages').textContent = reader.settings.numPages;
|
reader.ProgressController.show();
|
||||||
if(reader.settings.session.cursor !== {}) {
|
reader.ProgressController.setMessage("Loading " + reader.settings.session.title, "download", "active");
|
||||||
reader.settings.currentPage = parseInt(reader.settings.session.cursor.anchor);
|
|
||||||
|
loadingTask.onProgress = function getDocumentProgress(progress) {
|
||||||
|
reader.ProgressController.setProgress(progress);
|
||||||
|
};
|
||||||
|
|
||||||
|
loadingTask.then(
|
||||||
|
|
||||||
|
function(_book) {
|
||||||
|
reader.book = book = _book;
|
||||||
|
console.log(book);
|
||||||
|
reader.settings.numPages = reader.book.numPages;
|
||||||
|
document.getElementById('total_pages').textContent = reader.settings.numPages;
|
||||||
|
if(!$.isEmptyObject(reader.settings.session.cursor)) {
|
||||||
|
console.log("setting cursor:", reader.settings.session.cursor);
|
||||||
|
reader.settings.currentPage = parseInt(reader.settings.session.cursor.anchor);
|
||||||
|
}
|
||||||
|
|
||||||
|
// set labels
|
||||||
|
reader.book.getPageLabels().then(function (labels) {
|
||||||
|
if (labels) {
|
||||||
|
for (var i = 0; i < labels.length; i++) {
|
||||||
|
if (labels[i] !== (i + 1).toString()) {
|
||||||
|
reader.pageLabels[i + 1] = labels[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
reader.ReaderController = PDFJS.reader.ReaderController.call(reader, book);
|
||||||
|
reader.SettingsController = PDFJS.reader.SettingsController.call(reader, book);
|
||||||
|
reader.ControlsController = PDFJS.reader.ControlsController.call(reader, book);
|
||||||
|
reader.SidebarController = PDFJS.reader.SidebarController.call(reader, book);
|
||||||
|
|
||||||
|
reader.queuePage(reader.settings.currentPage);
|
||||||
|
reader.ReaderController.hideLoader();
|
||||||
|
reader.ProgressController.hide();
|
||||||
|
|
||||||
|
reader.book.getOutline().then(function (outline) {
|
||||||
|
reader.OutlineController = PDFJS.reader.OutlineController.call(reader, outline);
|
||||||
|
});
|
||||||
|
reader.book.getMetadata().then(function (metadata) {
|
||||||
|
console.log("metadata", metadata);
|
||||||
|
reader.settings.pdfMetadata = metadata;
|
||||||
|
});
|
||||||
|
reader.book.getAttachments().then(function (attachments) {
|
||||||
|
console.log("attachments", attachments);
|
||||||
|
});
|
||||||
|
|
||||||
|
// BookmarksController depends on NotesController so load NotesController first
|
||||||
|
//reader.NotesController = PDFJS.reader.NotesController.call(reader, book);
|
||||||
|
//reader.BookmarksController = PDFJS.reader.BookmarksController.call(reader, book);
|
||||||
|
//reader.SearchController = PDFJS.reader.SearchController.call(reader, book);
|
||||||
|
//reader.MetaController = PDFJS.reader.MetaController.call(reader, meta);
|
||||||
|
reader.TocController = PDFJS.reader.TocController.call(reader, book);
|
||||||
|
},
|
||||||
|
function getDocumentError(exception) {
|
||||||
|
var message = exception && exception.message;
|
||||||
|
var errormsg = "An error occurred while loading the PDF";
|
||||||
|
if (exception instanceof PDFJS.InvalidPDFException) {
|
||||||
|
errormsg = "Invalid or corrupted PDF file";
|
||||||
|
} else if (exception instanceof PDFJS.MissingPDFException) {
|
||||||
|
errormsg = "Missing PDF file";
|
||||||
|
} else if (exception instanceof PDFJS.UnexpectedResponseException) {
|
||||||
|
errormsg = "Unexpected server response";
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log("Reader: ", errormsg);
|
||||||
|
reader.ProgressController.setMessage(errormsg, "download", "error");
|
||||||
}
|
}
|
||||||
|
);
|
||||||
reader.ReaderController = PDFJS.reader.ReaderController.call(reader, book);
|
|
||||||
reader.SettingsController = PDFJS.reader.SettingsController.call(reader, book);
|
|
||||||
reader.ControlsController = PDFJS.reader.ControlsController.call(reader, book);
|
|
||||||
reader.SidebarController = PDFJS.reader.SidebarController.call(reader, book);
|
|
||||||
// BookmarksController depends on NotesController so load NotesController first
|
|
||||||
//reader.NotesController = PDFJS.reader.NotesController.call(reader, book);
|
|
||||||
//reader.BookmarksController = PDFJS.reader.BookmarksController.call(reader, book);
|
|
||||||
//reader.SearchController = PDFJS.reader.SearchController.call(reader, book);
|
|
||||||
//reader.MetaController = EPUBJS.reader.MetaController.call(reader, meta);
|
|
||||||
//reader.TocController = EPUBJS.reader.TocController.call(reader, toc);
|
|
||||||
//reader.TextLayerController = PDFJS.reader.TextLayerController();
|
|
||||||
|
|
||||||
//reader.queuePage(reader.settings.currentPage);
|
|
||||||
console.log(reader.settings);
|
|
||||||
var startPage = (reader.settings.zoomLevel === "spread" && reader.settings.oddPageRight) ? 0 : 1;
|
|
||||||
reader.queuePage(startPage);
|
|
||||||
reader.ReaderController.hideLoader();
|
|
||||||
});
|
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
PDFJS.Reader.prototype.getThumb = function (pageNum, insert) {
|
||||||
|
|
||||||
|
var reader = this,
|
||||||
|
thumb,
|
||||||
|
scale,
|
||||||
|
initial_viewport,
|
||||||
|
viewport,
|
||||||
|
canvas,
|
||||||
|
ctx,
|
||||||
|
page_aspect,
|
||||||
|
page_width,
|
||||||
|
page_height,
|
||||||
|
page_rotation,
|
||||||
|
rotation,
|
||||||
|
outputscale,
|
||||||
|
transform,
|
||||||
|
renderContext,
|
||||||
|
renderTask;
|
||||||
|
|
||||||
|
reader.book.getPage(parseInt(pageNum)).then(function(page) {
|
||||||
|
page_rotation = page.rotate;
|
||||||
|
rotation = (page_rotation + reader.settings.rotation) % 360;
|
||||||
|
initial_viewport = page.getViewport(1, rotation);
|
||||||
|
canvas = document.createElement("canvas");
|
||||||
|
ctx = canvas.getContext("2d");
|
||||||
|
outputscale = reader.getOutputScale(ctx);
|
||||||
|
if (outputscale < 1)
|
||||||
|
outputscale = 1; // ignore browser zoom
|
||||||
|
page_width = initial_viewport.width;
|
||||||
|
page_height = initial_viewport.height;
|
||||||
|
page_aspect = parseFloat(page_width / page_height);
|
||||||
|
scale = parseFloat(reader.settings.thumbnailWidth / page_width);
|
||||||
|
canvas.width = parseInt(reader.settings.thumbnailWidth * outputscale);
|
||||||
|
canvas.height = parseInt(canvas.width / page_aspect);
|
||||||
|
|
||||||
|
viewport = initial_viewport.clone({scale: scale, rotation: rotation});
|
||||||
|
|
||||||
|
//ctx.scale(outputscale, outputscale);
|
||||||
|
transform = (outputscale === 1)
|
||||||
|
? null
|
||||||
|
: [outputscale, 0, 0, outputscale, 0, 0];
|
||||||
|
|
||||||
|
console.log("thumbs, canvas w*h " + canvas.width + "*" + canvas.height);
|
||||||
|
|
||||||
|
renderContext = {
|
||||||
|
canvasContext: ctx,
|
||||||
|
viewport: viewport,
|
||||||
|
transform: transform
|
||||||
|
};
|
||||||
|
|
||||||
|
renderTask = page.render(renderContext);
|
||||||
|
|
||||||
|
renderTask.promise.then(
|
||||||
|
function pdfPageRenderCallback () {
|
||||||
|
thumb = new Image();
|
||||||
|
thumb.id = "thumb_" + pageNum;
|
||||||
|
thumb.className = "thumbnail";
|
||||||
|
thumb.src = canvas.toDataURL();
|
||||||
|
canvas.width = canvas.height = 0;
|
||||||
|
delete canvas;
|
||||||
|
if (insert) {
|
||||||
|
reader.TocController.tocInsert(thumb, pageNum, true);
|
||||||
|
} else {
|
||||||
|
reader.thumbs[pageNum] = thumb;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
function pdfPageRenderError (error) {
|
||||||
|
console.log("pdfPageRenderError in getThumb: " + error);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
PDFJS.Reader.prototype.setZoom = function(zoom) {
|
PDFJS.Reader.prototype.setZoom = function(zoom) {
|
||||||
|
|
||||||
var reader = this,
|
var reader = this,
|
||||||
page = reader.settings.currentPage;
|
page = reader.settings.currentPage;
|
||||||
|
|
||||||
reader.settings.zoomLevel = zoom;
|
reader.settings.zoomLevel = zoom;
|
||||||
|
reader.ControlsController.setZoomIcon(zoom);
|
||||||
reader.queuePage(page);
|
reader.queuePage(page);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
PDFJS.Reader.prototype.cycleZoom = function() {
|
||||||
|
|
||||||
|
var reader = this,
|
||||||
|
zoom = reader.settings.zoomLevel,
|
||||||
|
nextzoom,
|
||||||
|
page = reader.settings.currentPage;
|
||||||
|
|
||||||
|
nextzoom = reader.zoomCycle[zoom];
|
||||||
|
|
||||||
|
if (nextzoom !== undefined) {
|
||||||
|
reader.setZoom(nextzoom);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
PDFJS.Reader.prototype.setRotation = function (rotation) {
|
PDFJS.Reader.prototype.setRotation = function (rotation) {
|
||||||
|
|
||||||
var reader = this,
|
var reader = this,
|
||||||
page = reader.settings.currentPage;
|
page = reader.settings.currentPage;
|
||||||
|
|
||||||
reader.settings.rotation = rotation;
|
if (rotation % 90 === 0) {
|
||||||
reader.queuePage(page);
|
reader.settings.rotation = rotation;
|
||||||
|
reader.ControlsController.setRotateIcon(rotation);
|
||||||
|
reader.queuePage(page);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
PDFJS.Reader.prototype.cancelRender = function (index) {
|
PDFJS.Reader.prototype.cancelRender = function (index) {
|
||||||
|
@ -209,11 +378,10 @@ PDFJS.Reader.prototype.cancelRender = function (index) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
PDFJS.Reader.prototype.renderPage = function(pageNum) {
|
PDFJS.Reader.prototype.renderPage = function(pageNum, cache_result) {
|
||||||
|
|
||||||
var reader = this,
|
var reader = this,
|
||||||
$viewer = $("#viewer"),
|
$viewer = $("#viewer");
|
||||||
$page_num = document.getElementById('page_num');
|
|
||||||
|
|
||||||
var index,
|
var index,
|
||||||
canvas, // actual canvas
|
canvas, // actual canvas
|
||||||
|
@ -343,7 +511,7 @@ PDFJS.Reader.prototype.renderPage = function(pageNum) {
|
||||||
canvas.width = reader.roundToDivide(parseInt(canvas.height * document_aspect), fraction[0]);
|
canvas.width = reader.roundToDivide(parseInt(canvas.height * document_aspect), fraction[0]);
|
||||||
} else {
|
} else {
|
||||||
scale = scale_width;
|
scale = scale_width;
|
||||||
canvas.width = reader.roundToDivide(max_view_width * outputscale, fraction[0])
|
canvas.width = reader.roundToDivide(max_view_width * outputscale, fraction[0]);
|
||||||
canvas.height = reader.roundToDivide(parseInt(canvas.width / document_aspect), fraction[0]);
|
canvas.height = reader.roundToDivide(parseInt(canvas.width / document_aspect), fraction[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -359,7 +527,7 @@ PDFJS.Reader.prototype.renderPage = function(pageNum) {
|
||||||
canvas.width = reader.roundToDivide(parseInt(canvas.height * document_aspect), fraction[0]);
|
canvas.width = reader.roundToDivide(parseInt(canvas.height * document_aspect), fraction[0]);
|
||||||
} else {
|
} else {
|
||||||
scale = scale_width;
|
scale = scale_width;
|
||||||
canvas.width = reader.roundToDivide(max_view_width * outputscale, fraction[0])
|
canvas.width = reader.roundToDivide(max_view_width * outputscale, fraction[0]);
|
||||||
canvas.height = reader.roundToDivide(parseInt(canvas.width / document_aspect), fraction[0]);
|
canvas.height = reader.roundToDivide(parseInt(canvas.width / document_aspect), fraction[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -369,7 +537,7 @@ PDFJS.Reader.prototype.renderPage = function(pageNum) {
|
||||||
|
|
||||||
$viewer.removeClass("flex");
|
$viewer.removeClass("flex");
|
||||||
scale = parseFloat(reader.settings.zoomLevel * reader.CSS_UNITS);
|
scale = parseFloat(reader.settings.zoomLevel * reader.CSS_UNITS);
|
||||||
canvas.width = reader.roundToDivide(parseInt(page_width * scale * outputscale), fraction[0]); ;
|
canvas.width = reader.roundToDivide(parseInt(page_width * scale * outputscale), fraction[0]);
|
||||||
canvas.height = reader.roundToDivide(parseInt(page_height * scale * outputscale), fraction[0]);
|
canvas.height = reader.roundToDivide(parseInt(page_height * scale * outputscale), fraction[0]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -486,21 +654,15 @@ PDFJS.Reader.prototype.renderPage = function(pageNum) {
|
||||||
canvas.style.width = reader.roundToDivide(max_view_width, fraction[1]) + 'px';
|
canvas.style.width = reader.roundToDivide(max_view_width, fraction[1]) + 'px';
|
||||||
canvas.style.height = reader.roundToDivide(max_view_height, fraction[1]) + 'px';
|
canvas.style.height = reader.roundToDivide(max_view_height, fraction[1]) + 'px';
|
||||||
}
|
}
|
||||||
// resizing clears canvas so this is not needed...
|
|
||||||
//ctx.clearRect(0, 0, canvas.width, canvas.height);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
PDFJS.Reader.prototype.queuePage = function(page) {
|
PDFJS.Reader.prototype.queuePage = function(page) {
|
||||||
|
|
||||||
//var pageShift = (this.settings.zoomLevel === "spread") ? 2 : 1;
|
|
||||||
//
|
|
||||||
var reader = this,
|
var reader = this,
|
||||||
zoom = reader.settings.zoomLevel,
|
zoom = reader.settings.zoomLevel,
|
||||||
oddPageRight = reader.settings.oddPageRight,
|
oddPageRight = reader.settings.oddPageRight,
|
||||||
pageShift,
|
pageShift;
|
||||||
$page_num = document.getElementById('page_num'),
|
|
||||||
text;
|
|
||||||
|
|
||||||
if (zoom === "spread") {
|
if (zoom === "spread") {
|
||||||
pageShift = 2;
|
pageShift = 2;
|
||||||
|
@ -512,26 +674,14 @@ PDFJS.Reader.prototype.queuePage = function(page) {
|
||||||
|
|
||||||
console.log("page: " + page);
|
console.log("page: " + page);
|
||||||
|
|
||||||
if (page >= 0 && page <= reader.settings.numPages) {
|
|
||||||
if (page === reader.settings.numPages) {
|
|
||||||
text = page.toString();
|
|
||||||
} else if (page === 0) {
|
|
||||||
text = "1";
|
|
||||||
} else {
|
|
||||||
text = page.toString() + "-" + parseInt(page+1).toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
$page_num.textContent = text;
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
pageShift = 1;
|
pageShift = 1;
|
||||||
if (page >= 1 && page <= reader.settings.numPages)
|
|
||||||
$page_num.textContent = page.toString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
reader.settings.currentPage = page;
|
reader.settings.currentPage = page;
|
||||||
|
|
||||||
|
reader.ControlsController.setCurrentPage(page);
|
||||||
|
|
||||||
if (typeof reader.renderQueue === 'number') {
|
if (typeof reader.renderQueue === 'number') {
|
||||||
window.clearTimeout(reader.renderQueue);
|
window.clearTimeout(reader.renderQueue);
|
||||||
reader.renderQueue = false;
|
reader.renderQueue = false;
|
||||||
|
@ -674,3 +824,112 @@ PDFJS.Reader.prototype.isMobile = function () {
|
||||||
|
|
||||||
return isMobile;
|
return isMobile;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
PDFJS.Reader.prototype.getPageLabel = function (page) {
|
||||||
|
|
||||||
|
var reader = this;
|
||||||
|
|
||||||
|
if (reader.pageLabels[parseInt(page)] !== undefined) {
|
||||||
|
return reader.pageLabels[parseInt(page)].toString();
|
||||||
|
} else {
|
||||||
|
return page.toString();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
PDFJS.Reader.prototype.navigateTo = function (destination) {
|
||||||
|
|
||||||
|
var reader = this,
|
||||||
|
destString = "",
|
||||||
|
destinationPromise,
|
||||||
|
goToDestination;
|
||||||
|
|
||||||
|
goToDestination = function (destRef) {
|
||||||
|
|
||||||
|
var pageNumber;
|
||||||
|
|
||||||
|
if (destRef instanceof Object) {
|
||||||
|
|
||||||
|
pageNumber = reader.cachedPageNum(destRef);
|
||||||
|
} else if ((destRef | 0) === destRef) { // Integer
|
||||||
|
pageNumber = destRef + 1;
|
||||||
|
} else {
|
||||||
|
console.error('PDFJS.Reader.navigateTo: "' + destRef
|
||||||
|
+ '" is not a valid destination reference.');
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pageNumber) {
|
||||||
|
|
||||||
|
if (pageNumber < 1 || pageNumber > reader.settings.numPages) {
|
||||||
|
console.error('PDFJS.Reader.navigateTo: "' + pageNumber
|
||||||
|
+ '" is a non-existent page number.');
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
reader.queuePage(pageNumber);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
reader.book.getPageIndex(destRef).then(function (pageIndex) {
|
||||||
|
|
||||||
|
reader.cachePageRef(pageIndex + 1, destRef);
|
||||||
|
goToDestination(destRef);
|
||||||
|
}).catch(function () {
|
||||||
|
console.error('PDFJS.Reader.navigateTo: "' + destRef
|
||||||
|
+ '" is not a valid page reference.');
|
||||||
|
|
||||||
|
return;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if (typeof destination === 'string') {
|
||||||
|
|
||||||
|
destString = destination;
|
||||||
|
destinationPromise = reader.book.getDestination(destination);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
destinationPromise = Promise.resolve(destination);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
destinationPromise.then(function (_destination) {
|
||||||
|
|
||||||
|
destination = _destination;
|
||||||
|
|
||||||
|
if (!(destination instanceof Array)) {
|
||||||
|
|
||||||
|
console.error('PDFJS.Reader.navigateTo: "' + destination
|
||||||
|
+ '" is not a valid destination array.');
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
goToDestination(destination[0]);
|
||||||
|
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
PDFJS.Reader.prototype.pageRefStr = function (pageRef) {
|
||||||
|
|
||||||
|
return pageRef.num + ' ' + pageRef.gen + ' R';
|
||||||
|
};
|
||||||
|
|
||||||
|
PDFJS.Reader.prototype.cachePageRef = function (pageNum, pageRef) {
|
||||||
|
|
||||||
|
var reader = this,
|
||||||
|
refStr;
|
||||||
|
|
||||||
|
reader.pageRefs[reader.pageRefStr(pageRef)] = pageNum;
|
||||||
|
};
|
||||||
|
|
||||||
|
PDFJS.Reader.prototype.cachedPageNum = function (pageRef) {
|
||||||
|
|
||||||
|
var reader = this;
|
||||||
|
|
||||||
|
return (reader.pageRefs[reader.pageRefStr(pageRef)])
|
||||||
|
|| null;
|
||||||
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue