mirror of
https://github.com/Yetangitu/owncloud-apps.git
synced 2025-10-02 14:49:17 +02:00
files_reader: more changes towards full PDF functionality
This commit is contained in:
parent
1b1a2bea9a
commit
e7f4760993
20 changed files with 308 additions and 127 deletions
|
@ -62,13 +62,13 @@ class Isbndb
|
|||
static function parse($data,&$meta) {
|
||||
/* did the call succeed? If not, schedule a rescan */
|
||||
if (Isbn::REQUEST_LIMIT_EXCEEDED == $data) {
|
||||
$meta['rescan'] = date("Y-m-d\TH:i:sP", time() + Isbn::RESCAN_LIMIT_EXCEEDED);
|
||||
$meta['rescan'] = date("Y-m-d H:i:s", time() + Isbn::RESCAN_LIMIT_EXCEEDED);
|
||||
return false;
|
||||
} elseif (Isbn::NOT_FOUND == $data) {
|
||||
$meta['rescan'] = date("Y-m-d\TH:i:sP", time() + Isbn::RESCAN_NOT_FOUND);
|
||||
$meta['rescan'] = date("Y-m-d H:i:s", time() + Isbn::RESCAN_NOT_FOUND);
|
||||
return false;
|
||||
} elseif (Isbn::ERROR == $data) {
|
||||
$meta['rescan'] = date("Y-m-d\TH:i:sP", time() + Isbn::RESCAN_ERROR);
|
||||
$meta['rescan'] = date("Y-m-d H:i:s", time() + Isbn::RESCAN_ERROR);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,10 +1,18 @@
|
|||
## UNRELEASED
|
||||
### Added
|
||||
- Reader now supports PDF
|
||||
- PDF should work more or less like EPUB, ie. double page spreads are supported
|
||||
- PDF double page spreads are supported
|
||||
- optional double-buffering for faster rendering, can be disabled for low-memory devices
|
||||
- optional selectable text layer, can be disabled for low-memory devices
|
||||
|
||||
### Changed
|
||||
- #38: moved declarations in js/ready.js one level lower to work around a bug in the Palemoon browser
|
||||
- new version bitjs archive tools, fixes compatibility problems with some CBR files
|
||||
|
||||
## 1.0.1 - 2017-03-19
|
||||
### Fixed
|
||||
- #35: Internal Server Error: fixed path resolution so app works when NC/OC hosted in subdirectory
|
||||
|
||||
## 1.0.0 - 2017-03-15
|
||||
### Added
|
||||
- Reader now supports CBR/CBZ ('comics') files
|
||||
|
|
|
@ -3,3 +3,9 @@
|
|||
- bookmarks
|
||||
- annotations
|
||||
- settings
|
||||
|
||||
- rtl and ltr
|
||||
- switch spread-page-width by key combo
|
||||
|
||||
- test canvas size restriction
|
||||
- toggle zoom via keyboard
|
||||
|
|
|
@ -100,51 +100,52 @@ document.onreadystatechange = function () {
|
|||
default:
|
||||
console.log(type + ' is not supported by Reader');
|
||||
}
|
||||
|
||||
// why is there no standard library function for this?
|
||||
function getUrlParameter (param) {
|
||||
var pattern = new RegExp('[?&]'+param+'((=([^&]*))|(?=(&|$)))','i');
|
||||
var m = window.location.search.match(pattern);
|
||||
return m && ( typeof(m[3])==='undefined' ? '' : m[3] );
|
||||
}
|
||||
}
|
||||
|
||||
// start epub.js renderer
|
||||
function renderEpub(file, options) {
|
||||
// why is there no standard library function for this?
|
||||
function getUrlParameter (param) {
|
||||
var pattern = new RegExp('[?&]'+param+'((=([^&]*))|(?=(&|$)))','i');
|
||||
var m = window.location.search.match(pattern);
|
||||
return m && ( typeof(m[3])==='undefined' ? '' : m[3] );
|
||||
}
|
||||
|
||||
// some parameters...
|
||||
EPUBJS.filePath = "vendor/epubjs/";
|
||||
EPUBJS.cssPath = "vendor/epubjs/css/";
|
||||
EPUBJS.basePath = $('.session').data('basepath');
|
||||
// start epub.js renderer
|
||||
function renderEpub(file, options) {
|
||||
|
||||
/* device-specific boilerplate */
|
||||
// some parameters...
|
||||
EPUBJS.filePath = "vendor/epubjs/";
|
||||
EPUBJS.cssPath = "vendor/epubjs/css/";
|
||||
EPUBJS.basePath = $('.session').data('basepath');
|
||||
|
||||
/* device-specific boilerplate */
|
||||
|
||||
// IE < 11
|
||||
if (navigator.userAgent.indexOf("MSIE") != -1) {
|
||||
EPUBJS.Hooks.register("beforeChapterDisplay").wgxpath = function(callback, renderer){
|
||||
wgxpath.install(renderer.render.window);
|
||||
if(callback)
|
||||
callback();
|
||||
};
|
||||
wgxpath.install(window);
|
||||
}
|
||||
|
||||
var reader = ePubReader(file, options);
|
||||
if (navigator.userAgent.indexOf("MSIE") != -1) {
|
||||
EPUBJS.Hooks.register("beforeChapterDisplay").wgxpath = function(callback, renderer){
|
||||
wgxpath.install(renderer.render.window);
|
||||
if(callback)
|
||||
callback();
|
||||
};
|
||||
wgxpath.install(window);
|
||||
}
|
||||
|
||||
// start cbr.js renderer
|
||||
function renderCbr(file, options) {
|
||||
CBRJS.filePath = "vendor/cbrjs/";
|
||||
|
||||
var reader = cbReader(file, options);
|
||||
}
|
||||
|
||||
// start pdf.js renderer
|
||||
function renderPdf(file, options) {
|
||||
PDFJS.filePath = "vendor/pdfjs/";
|
||||
PDFJS.workerSrc = options.session.basePath + 'vendor/pdfjs/lib/pdf.worker.js';
|
||||
|
||||
var reader = pdfReader(file, options);
|
||||
}
|
||||
var reader = ePubReader(file, options);
|
||||
}
|
||||
|
||||
// start cbr.js renderer
|
||||
function renderCbr(file, options) {
|
||||
CBRJS.filePath = "vendor/cbrjs/";
|
||||
|
||||
var reader = cbReader(file, options);
|
||||
}
|
||||
|
||||
// start pdf.js renderer
|
||||
function renderPdf(file, options) {
|
||||
PDFJS.filePath = "vendor/pdfjs/";
|
||||
PDFJS.workerSrc = options.session.basePath + 'vendor/pdfjs/lib/pdf.worker.js';
|
||||
|
||||
var reader = pdfReader(file, options);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
|
Binary file not shown.
|
@ -43,7 +43,7 @@
|
|||
<script type="text/javascript" nonce="<?php p($nonce) ?>" src="<?php p($urlGenerator->linkTo('files_reader', 'vendor/epubjs/libs/jquery.min.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/pixastic/pixastic_combined.js')) ?>?v=<?php p($version) ?>"> </script>
|
||||
<script type="text/javascript" nonce="<?php p($nonce) ?>" src="<?php p($urlGenerator->linkTo('files_reader', 'vendor/bitjs/archive.js')) ?>?v=<?php p($version) ?>"> </script>
|
||||
<script type="text/javascript" nonce="<?php p($nonce) ?>" src="<?php p($urlGenerator->linkTo('files_reader', 'vendor/bitjs/archive/archive.js')) ?>?v=<?php p($version) ?>"> </script>
|
||||
<script type="text/javascript" nonce="<?php p($nonce) ?>" src="<?php p($urlGenerator->linkTo('files_reader', 'vendor/cbrjs/cbr.js')) ?>?v=<?php p($version) ?>"> </script>
|
||||
|
||||
<?php if ($idevice): ?>
|
||||
|
|
|
@ -284,6 +284,16 @@
|
|||
</div>
|
||||
<span id="zoom_icon"></span>
|
||||
<span class="controls-separator"> </span>
|
||||
<div id="rotate_options" class="hide">
|
||||
<div class="rotate_option icon-rotate_0" data-value="0" data-class="icon-rotate_0" data-text=""></div>
|
||||
<div class="rotate_option icon-rotate_90" data-value="90" data-class="icon-rotate_90" data-text=""></div>
|
||||
<div class="rotate_option icon-rotate_180" data-value="180" data-class="icon-rotate_180" data-text=""></div>
|
||||
<div class="rotate_option icon-rotate_270" data-value="270" data-class="icon-rotate_270" data-text=""></div>
|
||||
</div>
|
||||
<span id="rotate_left" class="icon-rotate_left"></span>
|
||||
<span id="rotate_icon" class=icon-rotate_0"></span>
|
||||
<span id="rotate_right" class="icon-rotate_right"></span>
|
||||
<span class="controls-separator"> </span>
|
||||
<a></a>
|
||||
<a id="note" class="icon-comment">
|
||||
</a>
|
||||
|
|
BIN
files_reader/vendor/icomoon/fonts/icomoon.eot
vendored
BIN
files_reader/vendor/icomoon/fonts/icomoon.eot
vendored
Binary file not shown.
|
@ -7,6 +7,10 @@
|
|||
<font-face units-per-em="1024" ascent="960" descent="-64" />
|
||||
<missing-glyph horiz-adv-x="1024" />
|
||||
<glyph unicode=" " horiz-adv-x="512" d="" />
|
||||
<glyph unicode="" glyph-name="rotate_0" d="M854 426.667c0 188-154 342-342 342s-342-154-342-342c0-188 154-342 342-342s342 154 342 342zM86 426.667c0 236 190 426 426 426s426-190 426-426c0-236-190-426-426-426s-426 190-426 426zM704 340.667h-384l192 428z" />
|
||||
<glyph unicode="" glyph-name="rotate_90" d="M512 84.667c188 0 342 154 342 342s-154 342-342 342c-188 0-342-154-342-342s154-342 342-342zM512 852.667c236 0 426-190 426-426s-190-426-426-426c-236 0-426 190-426 426s190 426 426 426zM426 234.667v384l428-192z" />
|
||||
<glyph unicode="" glyph-name="rotate_180" d="M170 426.667c0-188 154-342 342-342s342 154 342 342c0 188-154 342-342 342s-342-154-342-342zM938 426.667c0-236-190-426-426-426s-426 190-426 426c0 236 190 426 426 426s426-190 426-426zM320 512.667h384l-192-428z" />
|
||||
<glyph unicode="" glyph-name="rotate_270" d="M512 768.667c-188 0-342-154-342-342s154-342 342-342c188 0 342 154 342 342s-154 342-342 342zM512 0.667c-236 0-426 190-426 426s190 426 426 426c236 0 426-190 426-426s-190-426-426-426zM598 618.667v-384l-428 192z" />
|
||||
<glyph unicode="" glyph-name="featured_play_list" d="M512 640.667v84h-384v-84h384zM512 468.667v86h-384v-86h384zM896 810.667c46 0 86-40 86-86v-596c0-46-40-86-86-86h-768c-46 0-86 40-86 86v596c0 46 40 86 86 86h768z" />
|
||||
<glyph unicode="" glyph-name="chat" d="M768 596.667v86h-512v-86h512zM598 340.667v86h-342v-86h342zM256 554.667v-86h512v86h-512zM854 852.667c46 0 84-38 84-84v-512c0-46-38-86-84-86h-598l-170-170v768c0 46 38 84 84 84h684z" />
|
||||
<glyph unicode="" glyph-name="comment" d="M768 596.667v86h-512v-86h512zM768 468.667v86h-512v-86h512zM768 340.667v86h-512v-86h512zM938 768.667v-768l-170 170h-598c-46 0-84 40-84 86v512c0 46 38 84 84 84h684c46 0 84-38 84-84z" />
|
||||
|
@ -44,6 +48,8 @@
|
|||
<glyph unicode="" glyph-name="dehaze" d="M86 704.667h852v-86h-852v86zM86 490.667h852v-86h-852v86zM86 276.667h852v-84h-852v84z" />
|
||||
<glyph unicode="" glyph-name="navigate_before" d="M658 622.667l-196-196 196-196-60-60-256 256 256 256z" />
|
||||
<glyph unicode="" glyph-name="navigate_next" d="M426 682.667l256-256-256-256-60 60 196 196-196 196z" />
|
||||
<glyph unicode="" glyph-name="rotate_left" d="M554 764.667c168-20 300-164 300-338s-132-318-300-338v86c122 20 214 126 214 252s-92 232-214 252v-166l-194 190 194 194v-132zM302 156.667l62 62c32-24 68-38 106-44v-86c-60 8-118 30-168 68zM260 384.667c6-38 20-74 42-106l-60-60c-38 50-60 106-68 166h86zM304 574.667c-22-32-38-68-44-106h-86c8 60 32 116 70 166z" />
|
||||
<glyph unicode="" glyph-name="rotate_right" d="M720 278.667c24 32 38 68 44 106h86c-8-60-30-116-68-166zM554 174.667c38 6 74 20 106 44l62-62c-50-38-108-60-168-68v86zM850 468.667h-86c-6 38-20 74-44 106l62 60c38-50 60-106 68-166zM664 702.667l-194-190v166c-122-20-214-126-214-252s92-232 214-252v-86c-168 20-300 164-300 338s132 318 300 338v132z" />
|
||||
<glyph unicode="" glyph-name="tune" d="M640 554.667v256h86v-86h170v-84h-170v-86h-86zM896 384.667h-426v84h426v-84zM298 554.667h86v-256h-86v86h-170v84h170v86zM554 42.667h-84v256h84v-86h342v-84h-342v-86zM128 724.667h426v-84h-426v84zM128 212.667h256v-84h-256v84z" />
|
||||
<glyph unicode="" glyph-name="wb_sunny" d="M152 146.667l76 78 60-60-76-78zM470-19.333v126h84v-126h-84zM512 704.667c142 0 256-114 256-256s-114-256-256-256-256 114-256 256 114 256 256 256zM854 490.667h128v-86h-128v86zM736 164.667l60 58 76-76-60-60zM872 748.667l-76-76-60 60 76 76zM554 914.667v-126h-84v126h84zM170 490.667v-86h-128v86h128zM288 732.667l-60-60-76 76 60 60z" />
|
||||
<glyph unicode="" glyph-name="local_library" d="M512 596.667c-70 0-128 58-128 128s58 128 128 128 128-58 128-128-58-128-128-128zM512 446.667c100 94 236 150 384 150v-468c-148 0-284-58-384-152-100 94-236 152-384 152v468c148 0 284-56 384-150z" />
|
||||
|
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 35 KiB |
BIN
files_reader/vendor/icomoon/fonts/icomoon.ttf
vendored
BIN
files_reader/vendor/icomoon/fonts/icomoon.ttf
vendored
Binary file not shown.
BIN
files_reader/vendor/icomoon/fonts/icomoon.woff
vendored
BIN
files_reader/vendor/icomoon/fonts/icomoon.woff
vendored
Binary file not shown.
30
files_reader/vendor/icomoon/style.css
vendored
30
files_reader/vendor/icomoon/style.css
vendored
|
@ -1,10 +1,10 @@
|
|||
@font-face {
|
||||
font-family: 'icomoon';
|
||||
src: url('fonts/icomoon.eot?jhgf4g');
|
||||
src: url('fonts/icomoon.eot?jhgf4g#iefix') format('embedded-opentype'),
|
||||
url('fonts/icomoon.ttf?jhgf4g') format('truetype'),
|
||||
url('fonts/icomoon.woff?jhgf4g') format('woff'),
|
||||
url('fonts/icomoon.svg?jhgf4g#icomoon') format('svg');
|
||||
src: url('fonts/icomoon.eot?gvtfq1');
|
||||
src: url('fonts/icomoon.eot?gvtfq1#iefix') format('embedded-opentype'),
|
||||
url('fonts/icomoon.ttf?gvtfq1') format('truetype'),
|
||||
url('fonts/icomoon.woff?gvtfq1') format('woff'),
|
||||
url('fonts/icomoon.svg?gvtfq1#icomoon') format('svg');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
@ -24,7 +24,7 @@
|
|||
-moz-osx-font-smoothing: grayscale;
|
||||
|
||||
/* slightly bigger icons */
|
||||
font-size: 1.2em;
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
.icon-anchor:before {
|
||||
|
@ -297,6 +297,24 @@
|
|||
.icon-zoom_out_map:before {
|
||||
content: "\e56b";
|
||||
}
|
||||
.icon-rotate_0:before {
|
||||
content: "\e039";
|
||||
}
|
||||
.icon-rotate_90:before {
|
||||
content: "\e03a";
|
||||
}
|
||||
.icon-rotate_180:before {
|
||||
content: "\e03b";
|
||||
}
|
||||
.icon-rotate_270:before {
|
||||
content: "\e03c";
|
||||
}
|
||||
.icon-rotate_left:before {
|
||||
content: "\e419";
|
||||
}
|
||||
.icon-rotate_right:before {
|
||||
content: "\e41a";
|
||||
}
|
||||
.icon-droplet:before {
|
||||
content: "\e90b";
|
||||
}
|
||||
|
|
BIN
files_reader/vendor/pdfjs/.pdf.reader.js.swp
vendored
BIN
files_reader/vendor/pdfjs/.pdf.reader.js.swp
vendored
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -18,6 +18,11 @@ PDFJS.reader.ControlsController = function(book) {
|
|||
$zoom_icon = $("#zoom_icon"),
|
||||
$zoom_options = $("#zoom_options"),
|
||||
$zoom_option = $(".zoom_option"),
|
||||
$rotate_icon = $("#rotate_icon"),
|
||||
$rotate_options = $("#rotate_options"),
|
||||
$rotate_option = $(".rotate_option"),
|
||||
$rotate_left = $("#rotate_left"),
|
||||
$rotate_right = $("#rotate_right"),
|
||||
$page_num = $("#page_num");
|
||||
|
||||
if (reader.isMobile() === true) {
|
||||
|
@ -117,15 +122,18 @@ PDFJS.reader.ControlsController = function(book) {
|
|||
*/
|
||||
|
||||
/* custom select, supports icons in drop-down list */
|
||||
// zooooooooooooooom
|
||||
$zoom_icon.on("click", function () {
|
||||
var offset = $(this).offset();
|
||||
console.log(offset);
|
||||
$zoom_options.css("opacity", 0);
|
||||
$zoom_options.toggleClass("hide");
|
||||
$zoom_options.css({
|
||||
'left': parseInt(offset.left) + "px",
|
||||
'left': parseInt(offset.left - ($zoom_options.width() / 2)) + "px",
|
||||
'top' : parseInt(parseInt(offset.top) + parseInt($zoom_icon.height())) + "px"
|
||||
});
|
||||
|
||||
$zoom_options.toggleClass("hide");
|
||||
$zoom_options.css("opacity", "");
|
||||
});
|
||||
|
||||
$zoom_icon[0].className="";
|
||||
|
@ -148,6 +156,50 @@ PDFJS.reader.ControlsController = function(book) {
|
|||
}
|
||||
$zoom_options.addClass("hide");
|
||||
});
|
||||
|
||||
// rotate
|
||||
$rotate_icon[0].className = "";
|
||||
$rotate_icon[0].className = "icon-rotate_" + settings.rotation;
|
||||
|
||||
$rotate_icon.on("click", function () {
|
||||
var offset = $(this).offset();
|
||||
$rotate_options.css("opacity", 0);
|
||||
$rotate_options.toggleClass("hide");
|
||||
$rotate_options.css({
|
||||
'left': parseInt(offset.left - ($rotate_options.width() / 2)) + "px",
|
||||
'top' : parseInt(parseInt(offset.top) + parseInt($rotate_icon.height())) + "px"
|
||||
});
|
||||
|
||||
$rotate_options.css("opacity", "");
|
||||
});
|
||||
|
||||
$rotate_option.on("click", function () {
|
||||
var $this = $(this);
|
||||
reader.setRotation($this.data("value"));
|
||||
$rotate_icon[0].className="";
|
||||
$rotate_icon[0].textContent = "";
|
||||
if ($this.data("class")) {
|
||||
$rotate_icon.addClass($this.data("class"));
|
||||
} else {
|
||||
$rotate_icon[0].textContent = $this.data("text");
|
||||
}
|
||||
$rotate_options.addClass("hide");
|
||||
});
|
||||
|
||||
$rotate_left.on("click", function () {
|
||||
// add 360 to avoid negative rotation value
|
||||
var rotation = (settings.rotation - 90 + 360) % 360;
|
||||
reader.setRotation(rotation);
|
||||
$rotate_icon[0].className = "";
|
||||
$rotate_icon[0].className = "icon-rotate_" + rotation;
|
||||
});
|
||||
|
||||
$rotate_right.on("click", function () {
|
||||
var rotation = (settings.rotation + 90) % 360;
|
||||
reader.setRotation(rotation);
|
||||
$rotate_icon[0].className = "";
|
||||
$rotate_icon[0].className = "icon-rotate_" + rotation;
|
||||
});
|
||||
/* end custom select */
|
||||
|
||||
var enterPageNum = function(e) {
|
||||
|
|
|
@ -11,7 +11,9 @@ PDFJS.reader.ReaderController = function(book) {
|
|||
$container = $("#container"),
|
||||
$fullscreen = $("#fullscreen"),
|
||||
$bookmark = $("#bookmark"),
|
||||
$note = $("#note");
|
||||
$note = $("#note"),
|
||||
$rotate_left = $("#rotate_left"),
|
||||
$rotate_right = $("#rotate_right");
|
||||
|
||||
var reader = this,
|
||||
book = this.book,
|
||||
|
@ -93,9 +95,6 @@ PDFJS.reader.ReaderController = function(book) {
|
|||
case 'bookmark':
|
||||
$bookmark.click();
|
||||
break;
|
||||
case 'reflow':
|
||||
$sidebarReflow.click();
|
||||
break;
|
||||
case 'toggleTitlebar':
|
||||
reader.ControlsController.toggle();
|
||||
break;
|
||||
|
@ -114,6 +113,15 @@ PDFJS.reader.ReaderController = function(book) {
|
|||
case 'toggleDay':
|
||||
$use_custom_colors.click();
|
||||
break;
|
||||
case 'rotateLeft':
|
||||
$rotate_left.click();
|
||||
break;
|
||||
case 'rotateRight':
|
||||
$rotate_right.click();
|
||||
break;
|
||||
case 'toggleZoom':
|
||||
// TODO
|
||||
break;
|
||||
default:
|
||||
console.log("unsupported keyCode: " + e.keyCode);
|
||||
}
|
||||
|
|
BIN
files_reader/vendor/pdfjs/css/.main.css.swp
vendored
BIN
files_reader/vendor/pdfjs/css/.main.css.swp
vendored
Binary file not shown.
51
files_reader/vendor/pdfjs/css/main.css
vendored
51
files_reader/vendor/pdfjs/css/main.css
vendored
|
@ -142,33 +142,52 @@ body {
|
|||
right: 0;
|
||||
}
|
||||
|
||||
#zioom_icon {
|
||||
text-align: center;
|
||||
font-family: 'icomoon', 'Helvetica' !important;
|
||||
font-size: 1.2em;
|
||||
speak: none;
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
font-variant: normal;
|
||||
text-transform: none;
|
||||
line-height: 1;
|
||||
border: none;
|
||||
#zoom_icon,
|
||||
#rotate_icon,
|
||||
#rotate_left,
|
||||
#rotate_right {
|
||||
padding: 0;
|
||||
border-radius: 0.2em;
|
||||
border: 1px rgba(0,0,0,0) solid;
|
||||
opacity: 0.5;
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#zoom_icon {
|
||||
padding: 0 0.5em;
|
||||
#zoom_icon:hover,
|
||||
#rotate_icon:hover,
|
||||
#rotate_left:hover,
|
||||
#rotate_right:hover {
|
||||
opacity: .8;
|
||||
border: 1px rgba(0,0,0,.2) solid;
|
||||
}
|
||||
|
||||
#zoom_options {
|
||||
#zoom_icon:active,
|
||||
#rotate_icon:active,
|
||||
#rotate_left:active,
|
||||
#rotate_right:active {
|
||||
opacity: 1;
|
||||
color: rgba(0,0,0,.6);
|
||||
box-shadow: inset 0 0 6px rgba(155,155,155,.8);
|
||||
}
|
||||
|
||||
#zoom_options,
|
||||
#rotate_options {
|
||||
font-family: "Lucida Console", "Monospace", "Courier New";
|
||||
position: fixed;
|
||||
box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.4);
|
||||
background-color: white;
|
||||
font-size: 1em;
|
||||
padding: 0.2em 0.5em;
|
||||
padding: 0.5em;
|
||||
}
|
||||
|
||||
.zoom_option:hover {
|
||||
.zoom_option,
|
||||
.rotate_option {
|
||||
padding: 0.25em;
|
||||
}
|
||||
|
||||
.zoom_option:hover,
|
||||
.rotate_option:hover {
|
||||
background: black;
|
||||
color: white;
|
||||
}
|
||||
|
|
165
files_reader/vendor/pdfjs/pdf.reader.js
vendored
165
files_reader/vendor/pdfjs/pdf.reader.js
vendored
|
@ -21,37 +21,47 @@ PDFJS.Reader = function(bookPath, _options) {
|
|||
search = window.location.search;
|
||||
|
||||
var TEXT_RENDER_DELAY = 200, // ms
|
||||
PAGE_RENDER_DELAY = 200; // ms
|
||||
PAGE_RENDER_DELAY = 200, // ms
|
||||
MAX_CANVAS_PIXELS = 5242880,
|
||||
CSS_UNITS = 96.0 / 72.0,
|
||||
MIN_SCALE = 0.25,
|
||||
MAX_SCALE = 10.0,
|
||||
DEFAULT_SCALE = 1;
|
||||
|
||||
this.settings = this.defaults(_options || {}, {
|
||||
bookPath: bookPath,
|
||||
textRenderDelay: TEXT_RENDER_DELAY,
|
||||
pageRenderDelay: PAGE_RENDER_DELAY,
|
||||
textSelect: true, // true || false, add selectable text layer
|
||||
doubleBuffer: true, // true || false, draw to off-screen canvas
|
||||
canvasLimit: 0,
|
||||
cssZoomOnly: false, // true || false, only zoom using CSS, render document at 100% size
|
||||
textSelect: false, // true || false, add selectable text layer
|
||||
doubleBuffer: true, // true || false, draw to off-screen canvas
|
||||
numPages: 0,
|
||||
currentPage: 1,
|
||||
scale: 1,
|
||||
scale: DEFAULT_SCALE,
|
||||
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
|
||||
rotation: 0, // 0 || 90 || 180 || 270
|
||||
history: true,
|
||||
keyboard: {
|
||||
32: 'next', // space
|
||||
34: 'next', // page-down
|
||||
39: 'next', // cursor-right
|
||||
33: 'previous', // page-up
|
||||
37: 'previous', // cursor-left
|
||||
36: 'first', // home
|
||||
35: 'last', // end
|
||||
65: 'annotate', // a
|
||||
66: 'bookmark', // b
|
||||
82: 'reflow', // r
|
||||
83: 'toggleSidebar', // s
|
||||
84: 'toggleTitlebar', // t
|
||||
68: 'toggleDay', // d
|
||||
78: 'toggleNight', // n
|
||||
32: 'next', // space
|
||||
34: 'next', // page-down
|
||||
39: 'next', // cursor-right
|
||||
33: 'previous', // page-up
|
||||
37: 'previous', // cursor-left
|
||||
36: 'first', // home
|
||||
35: 'last', // end
|
||||
65: 'annotate', // a
|
||||
66: 'bookmark', // b
|
||||
76: 'rotateLeft', // l
|
||||
82: 'rotateRight', // r
|
||||
90: 'toggleZoom', // z
|
||||
83: 'toggleSidebar',// s
|
||||
84: 'toggleTitlebar', // t
|
||||
68: 'toggleDay', // d
|
||||
78: 'toggleNight', // n
|
||||
70: 'toggleFullscreen', // f
|
||||
27: 'closeSidebar' // esc
|
||||
27: 'closeSidebar' // esc
|
||||
},
|
||||
nightMode: false,
|
||||
dayMode: false,
|
||||
|
@ -126,6 +136,11 @@ PDFJS.Reader = function(bookPath, _options) {
|
|||
this.sideBarOpen = false;
|
||||
this.viewerResized = false;
|
||||
this.pageNumPending = null;
|
||||
this.output_scaled = false;
|
||||
this.restricted_scaling = false;
|
||||
this.CSS_UNITS = CSS_UNITS;
|
||||
this.MIN_SCALE = MIN_SCALE;
|
||||
this.MAX_SCALE = MAX_SCALE;
|
||||
|
||||
PDFJS.getDocument(reader.settings.bookPath).then(function(_book) {
|
||||
reader.book = book = _book;
|
||||
|
@ -167,6 +182,15 @@ PDFJS.Reader.prototype.setZoom = function(zoom) {
|
|||
reader.queuePage(page);
|
||||
};
|
||||
|
||||
PDFJS.Reader.prototype.setRotation = function (rotation) {
|
||||
|
||||
var reader = this,
|
||||
page = reader.settings.currentPage;
|
||||
|
||||
reader.settings.rotation = rotation;
|
||||
reader.queuePage(page);
|
||||
};
|
||||
|
||||
PDFJS.Reader.prototype.cancelRender = function (index) {
|
||||
|
||||
var reader = this,
|
||||
|
@ -201,18 +225,24 @@ PDFJS.Reader.prototype.renderPage = function(pageNum) {
|
|||
outputscale,
|
||||
max_view_width,
|
||||
max_view_height,
|
||||
page_width,
|
||||
page_height,
|
||||
scale_width,
|
||||
scale_height,
|
||||
view_aspect,
|
||||
document_aspect,
|
||||
scale,
|
||||
page_rotation,
|
||||
rotation,
|
||||
initial_viewport,
|
||||
viewport,
|
||||
zoom,
|
||||
fraction,
|
||||
offset,
|
||||
renderContext,
|
||||
renderTask,
|
||||
resourcelst;
|
||||
resourcelst,
|
||||
swap_orientation;
|
||||
|
||||
max_view_width = window.innerWidth;
|
||||
max_view_height = window.innerHeight;
|
||||
|
@ -232,6 +262,8 @@ PDFJS.Reader.prototype.renderPage = function(pageNum) {
|
|||
index = 0;
|
||||
// hide second canvas
|
||||
reader.resourcelst[1].canvas.style.display = "none";
|
||||
// clear text layer
|
||||
reader.resourcelst[1].textdiv.innerHTML = "";
|
||||
|
||||
// don't try to render non-existing page 0 (which is used
|
||||
// to indicate the empty left page when oddPageRight === true)
|
||||
|
@ -267,11 +299,16 @@ PDFJS.Reader.prototype.renderPage = function(pageNum) {
|
|||
|
||||
this.book.getPage(pageNum).then(function(page) {
|
||||
//console.log(page);
|
||||
var page_width = page.pageInfo.view[2];
|
||||
var page_height = page.pageInfo.view[3];
|
||||
page_rotation = page.rotate;
|
||||
rotation = (page_rotation + reader.settings.rotation) % 360;
|
||||
//initial_viewport = page.getViewport({scale: 1, rotation: rotation});
|
||||
initial_viewport = page.getViewport(1, rotation);
|
||||
page_width = initial_viewport.width;
|
||||
page_height = initial_viewport.height;
|
||||
|
||||
document_aspect = parseFloat(page_width / page_height);
|
||||
view_aspect = parseFloat(max_view_width / max_view_height);
|
||||
|
||||
|
||||
scale_height = parseFloat(max_view_height / page_height);
|
||||
scale_width = parseFloat(max_view_width / page_width);
|
||||
|
||||
|
@ -284,9 +321,10 @@ PDFJS.Reader.prototype.renderPage = function(pageNum) {
|
|||
+ " v_a: " + view_aspect
|
||||
+ " s_w: " + scale_width
|
||||
+ " s_h: " + scale_height
|
||||
+ " p_r: " + page_rotation
|
||||
+ " r: " + rotation
|
||||
+ " o: " + outputscale);
|
||||
console.log("fraction: ");
|
||||
console.log(fraction);
|
||||
console.log("fraction: ", fraction);
|
||||
*/
|
||||
|
||||
switch (reader.settings.zoomLevel) {
|
||||
|
@ -330,19 +368,45 @@ PDFJS.Reader.prototype.renderPage = function(pageNum) {
|
|||
default:
|
||||
|
||||
$viewer.removeClass("flex");
|
||||
scale = parseFloat(reader.settings.zoomLevel);
|
||||
scale = parseFloat(reader.settings.zoomLevel * reader.CSS_UNITS);
|
||||
canvas.width = reader.roundToDivide(parseInt(page_width * scale * outputscale), fraction[0]); ;
|
||||
canvas.height = reader.roundToDivide(parseInt(page_height * scale * outputscale), fraction[0]);
|
||||
break;
|
||||
}
|
||||
|
||||
//console.log(canvas.width + " " + canvas.height);
|
||||
viewport = initial_viewport.clone({scale: scale, rotation: rotation});
|
||||
|
||||
if (reader.settings.cssZoomOnly) {
|
||||
console.log("css zoom only");
|
||||
var actualSizeViewport = viewport.clone({scale: 1});
|
||||
canvas.width = actualSizeViewport.width;
|
||||
canvas.height = actualSizeViewport.height;
|
||||
outputscale = actualSizeViewport.width / viewport.width;
|
||||
reader.output_scaled = true;
|
||||
}
|
||||
|
||||
if (reader.settings.canvasLimit > 0) {
|
||||
console.log("canvas is limited");
|
||||
var pixelsInViewport = viewport.width * viewport.height;
|
||||
var maxscale =
|
||||
Math.sqrt(reader.settings.canvasLimit / pixelsInViewport);
|
||||
if (outputscale > maxscale) {
|
||||
console.log("outputscale: " + outputscale, "maxscale: " + maxscale);
|
||||
outputscale = maxscale;
|
||||
reader.output_scaled = true;
|
||||
reader.restricted_scaling = true;
|
||||
} else {
|
||||
reader.restricted_scaling = false;
|
||||
}
|
||||
}
|
||||
|
||||
//console.log("outputscale: " + outputscale);
|
||||
//console.log("canvas w x h: " + canvas.width + " x " + canvas.height);
|
||||
|
||||
transform = (outputscale === 1)
|
||||
? null
|
||||
: [outputscale, 0, 0, outputscale, 0, 0];
|
||||
|
||||
viewport = page.getViewport(scale);
|
||||
|
||||
if (outputscale !== 1) {
|
||||
canvas.style.width = reader.roundToDivide(viewport.width, fraction[1]) + 'px';
|
||||
|
@ -361,7 +425,7 @@ PDFJS.Reader.prototype.renderPage = function(pageNum) {
|
|||
top: offset.top,
|
||||
left: offset.left
|
||||
});
|
||||
page.getTextContent().then(function (textContent) {
|
||||
page.getTextContent({ normalizeWhitespace: true }).then(function (textContent) {
|
||||
resourcelst.textLayer = textLayer = new PDFJS.Reader.TextLayerController({
|
||||
textLayerDiv: textdiv,
|
||||
pageIdx: pageNum - 1,
|
||||
|
@ -413,39 +477,18 @@ PDFJS.Reader.prototype.renderPage = function(pageNum) {
|
|||
});
|
||||
|
||||
} else {
|
||||
// clear canvas, use maximum size
|
||||
// clear canvas (by resizing it), use maximum size
|
||||
canvas.width = 0;
|
||||
canvas.height = 0;
|
||||
canvas.width = reader.roundToDivide(max_view_width * outputscale, fraction[0]);
|
||||
canvas.height = reader.roundToDivide(max_view_height * outputscale, fraction[0]);
|
||||
if (outputscale !== 1) {
|
||||
canvas.style.width = reader.roundToDivide(max_view_width, fraction[1]) + 'px';
|
||||
canvas.style.height = reader.roundToDivide(max_view_height, fraction[1]) + 'px';
|
||||
}
|
||||
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
||||
// resizing clears canvas so this is not needed...
|
||||
//ctx.clearRect(0, 0, canvas.width, canvas.height);
|
||||
}
|
||||
|
||||
/*
|
||||
if (index === 0) {
|
||||
|
||||
if (pageNum > 0) {
|
||||
$page_num.textContent = pageNum.toString();
|
||||
}
|
||||
reader.settings.currentPage = pageNum;
|
||||
|
||||
} else {
|
||||
|
||||
if (pageNum === 1) {
|
||||
|
||||
$page_num.textContent = pageNum.toString();
|
||||
|
||||
} else if (pageNum <= reader.settings.numPages) {
|
||||
|
||||
var text = $page_num.textContent;
|
||||
text += "-" + pageNum.toString();
|
||||
$page_num.textContent = text;
|
||||
|
||||
}
|
||||
}
|
||||
*/
|
||||
};
|
||||
|
||||
PDFJS.Reader.prototype.queuePage = function(page) {
|
||||
|
@ -619,5 +662,15 @@ PDFJS.Reader.prototype.approximateFraction = function (x) {
|
|||
};
|
||||
|
||||
PDFJS.Reader.prototype.isMobile = function () {
|
||||
return (typeof window.orientation !== "undefined") || (navigator.userAgent.indexOf('IEMobile') !== -1);
|
||||
|
||||
var reader = this;
|
||||
|
||||
var isMobile = (typeof window.orientation !== "undefined") || (navigator.userAgent.indexOf('IEMobile') !== -1);
|
||||
|
||||
if (isMobile) {
|
||||
reader.isMobile = true;
|
||||
reader.canvasLimit = reader.settings.canvasLimit;
|
||||
}
|
||||
|
||||
return isMobile;
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue