зеркало из https://github.com/mozilla/gecko-dev.git
Bug 983927 - Update pdf.js to version 0.8.1181. r=bdahl, r=Mossop
This commit is contained in:
Родитель
b4735ae842
Коммит
5239e92786
|
@ -1,4 +1,4 @@
|
||||||
This is the pdf.js project output, https://github.com/mozilla/pdf.js
|
This is the pdf.js project output, https://github.com/mozilla/pdf.js
|
||||||
|
|
||||||
Current extension version is: 0.8.1114
|
Current extension version is: 0.8.1181
|
||||||
|
|
||||||
|
|
|
@ -61,6 +61,27 @@ function getIntPref(aPref, aDefaultValue) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function initializeDefaultPreferences() {
|
||||||
|
Cu.import('resource://pdf.js/default_preferences.js');
|
||||||
|
|
||||||
|
var defaultBranch = Services.prefs.getDefaultBranch(PREF_PREFIX + '.');
|
||||||
|
var defaultValue;
|
||||||
|
for (var key in DEFAULT_PREFERENCES) {
|
||||||
|
defaultValue = DEFAULT_PREFERENCES[key];
|
||||||
|
switch (typeof defaultValue) {
|
||||||
|
case 'boolean':
|
||||||
|
defaultBranch.setBoolPref(key, defaultValue);
|
||||||
|
break;
|
||||||
|
case 'number':
|
||||||
|
defaultBranch.setIntPref(key, defaultValue);
|
||||||
|
break;
|
||||||
|
case 'string':
|
||||||
|
defaultBranch.setCharPref(key, defaultValue);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Register/unregister a constructor as a factory.
|
// Register/unregister a constructor as a factory.
|
||||||
function Factory() {}
|
function Factory() {}
|
||||||
Factory.prototype = {
|
Factory.prototype = {
|
||||||
|
@ -104,6 +125,8 @@ let PdfJs = {
|
||||||
Services.obs.addObserver(this, TOPIC_PDFJS_HANDLER_CHANGED, false);
|
Services.obs.addObserver(this, TOPIC_PDFJS_HANDLER_CHANGED, false);
|
||||||
Services.obs.addObserver(this, TOPIC_PLUGINS_LIST_UPDATED, false);
|
Services.obs.addObserver(this, TOPIC_PLUGINS_LIST_UPDATED, false);
|
||||||
Services.obs.addObserver(this, TOPIC_PLUGIN_INFO_UPDATED, false);
|
Services.obs.addObserver(this, TOPIC_PLUGIN_INFO_UPDATED, false);
|
||||||
|
|
||||||
|
initializeDefaultPreferences();
|
||||||
},
|
},
|
||||||
|
|
||||||
_migrate: function migrate() {
|
_migrate: function migrate() {
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
*/
|
*/
|
||||||
/* jshint esnext:true */
|
/* jshint esnext:true */
|
||||||
/* globals Components, Services, XPCOMUtils, NetUtil, PrivateBrowsingUtils,
|
/* globals Components, Services, XPCOMUtils, NetUtil, PrivateBrowsingUtils,
|
||||||
dump, NetworkManager, PdfJsTelemetry, DEFAULT_PREFERENCES */
|
dump, NetworkManager, PdfJsTelemetry */
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
@ -33,16 +33,14 @@ const PDF_CONTENT_TYPE = 'application/pdf';
|
||||||
const PREF_PREFIX = 'pdfjs';
|
const PREF_PREFIX = 'pdfjs';
|
||||||
const PDF_VIEWER_WEB_PAGE = 'resource://pdf.js/web/viewer.html';
|
const PDF_VIEWER_WEB_PAGE = 'resource://pdf.js/web/viewer.html';
|
||||||
const MAX_DATABASE_LENGTH = 4096;
|
const MAX_DATABASE_LENGTH = 4096;
|
||||||
const MAX_STRING_PREF_LENGTH = 4096;
|
const MAX_NUMBER_OF_PREFS = 50;
|
||||||
|
const MAX_STRING_PREF_LENGTH = 128;
|
||||||
|
|
||||||
Cu.import('resource://gre/modules/XPCOMUtils.jsm');
|
Cu.import('resource://gre/modules/XPCOMUtils.jsm');
|
||||||
Cu.import('resource://gre/modules/Services.jsm');
|
Cu.import('resource://gre/modules/Services.jsm');
|
||||||
Cu.import('resource://gre/modules/NetUtil.jsm');
|
Cu.import('resource://gre/modules/NetUtil.jsm');
|
||||||
Cu.import('resource://pdf.js/network.js');
|
Cu.import('resource://pdf.js/network.js');
|
||||||
|
|
||||||
// Load the default preferences.
|
|
||||||
Cu.import('resource://pdf.js/default_preferences.js');
|
|
||||||
|
|
||||||
XPCOMUtils.defineLazyModuleGetter(this, 'PrivateBrowsingUtils',
|
XPCOMUtils.defineLazyModuleGetter(this, 'PrivateBrowsingUtils',
|
||||||
'resource://gre/modules/PrivateBrowsingUtils.jsm');
|
'resource://gre/modules/PrivateBrowsingUtils.jsm');
|
||||||
|
|
||||||
|
@ -453,56 +451,60 @@ ChromeActions.prototype = {
|
||||||
.updateControlState(result, findPrevious);
|
.updateControlState(result, findPrevious);
|
||||||
},
|
},
|
||||||
setPreferences: function(prefs) {
|
setPreferences: function(prefs) {
|
||||||
var prefValue, defaultValue, prefName, prefType, defaultType;
|
var defaultBranch = Services.prefs.getDefaultBranch(PREF_PREFIX + '.');
|
||||||
|
var numberOfPrefs = 0;
|
||||||
for (var key in DEFAULT_PREFERENCES) {
|
var prefValue, prefName;
|
||||||
|
for (var key in prefs) {
|
||||||
|
if (++numberOfPrefs > MAX_NUMBER_OF_PREFS) {
|
||||||
|
log('setPreferences - Exceeded the maximum number of preferences ' +
|
||||||
|
'that is allowed to be set at once.');
|
||||||
|
break;
|
||||||
|
} else if (!defaultBranch.getPrefType(key)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
prefValue = prefs[key];
|
prefValue = prefs[key];
|
||||||
defaultValue = DEFAULT_PREFERENCES[key];
|
|
||||||
prefName = (PREF_PREFIX + '.' + key);
|
prefName = (PREF_PREFIX + '.' + key);
|
||||||
|
switch (typeof prefValue) {
|
||||||
if (prefValue === undefined || prefValue === defaultValue) {
|
case 'boolean':
|
||||||
Services.prefs.clearUserPref(prefName);
|
setBoolPref(prefName, prefValue);
|
||||||
} else {
|
break;
|
||||||
prefType = typeof prefValue;
|
case 'number':
|
||||||
defaultType = typeof defaultValue;
|
setIntPref(prefName, prefValue);
|
||||||
|
break;
|
||||||
if (prefType !== defaultType) {
|
case 'string':
|
||||||
continue;
|
if (prefValue.length > MAX_STRING_PREF_LENGTH) {
|
||||||
}
|
log('setPreferences - Exceeded the maximum allowed length ' +
|
||||||
switch (defaultType) {
|
'for a string preference.');
|
||||||
case 'boolean':
|
} else {
|
||||||
setBoolPref(prefName, prefValue);
|
setStringPref(prefName, prefValue);
|
||||||
break;
|
}
|
||||||
case 'number':
|
break;
|
||||||
setIntPref(prefName, prefValue);
|
|
||||||
break;
|
|
||||||
case 'string':
|
|
||||||
// Protect against adding arbitrarily long strings in about:config.
|
|
||||||
if (prefValue.length <= MAX_STRING_PREF_LENGTH) {
|
|
||||||
setStringPref(prefName, prefValue);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
getPreferences: function() {
|
getPreferences: function(prefs) {
|
||||||
var currentPrefs = {};
|
var defaultBranch = Services.prefs.getDefaultBranch(PREF_PREFIX + '.');
|
||||||
var defaultValue, prefName;
|
var currentPrefs = {}, numberOfPrefs = 0;
|
||||||
|
var prefValue, prefName;
|
||||||
for (var key in DEFAULT_PREFERENCES) {
|
for (var key in prefs) {
|
||||||
defaultValue = DEFAULT_PREFERENCES[key];
|
if (++numberOfPrefs > MAX_NUMBER_OF_PREFS) {
|
||||||
|
log('getPreferences - Exceeded the maximum number of preferences ' +
|
||||||
|
'that is allowed to be fetched at once.');
|
||||||
|
break;
|
||||||
|
} else if (!defaultBranch.getPrefType(key)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
prefValue = prefs[key];
|
||||||
prefName = (PREF_PREFIX + '.' + key);
|
prefName = (PREF_PREFIX + '.' + key);
|
||||||
|
switch (typeof prefValue) {
|
||||||
switch (typeof defaultValue) {
|
|
||||||
case 'boolean':
|
case 'boolean':
|
||||||
currentPrefs[key] = getBoolPref(prefName, defaultValue);
|
currentPrefs[key] = getBoolPref(prefName, prefValue);
|
||||||
break;
|
break;
|
||||||
case 'number':
|
case 'number':
|
||||||
currentPrefs[key] = getIntPref(prefName, defaultValue);
|
currentPrefs[key] = getIntPref(prefName, prefValue);
|
||||||
break;
|
break;
|
||||||
case 'string':
|
case 'string':
|
||||||
currentPrefs[key] = getStringPref(prefName, defaultValue);
|
currentPrefs[key] = getStringPref(prefName, prefValue);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -46,13 +46,17 @@ var FontInspector = (function FontInspectorClosure() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function textLayerClick(e) {
|
function textLayerClick(e) {
|
||||||
if (!e.target.dataset.fontName || e.target.tagName.toUpperCase() !== 'DIV')
|
if (!e.target.dataset.fontName ||
|
||||||
|
e.target.tagName.toUpperCase() !== 'DIV') {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
var fontName = e.target.dataset.fontName;
|
var fontName = e.target.dataset.fontName;
|
||||||
var selects = document.getElementsByTagName('input');
|
var selects = document.getElementsByTagName('input');
|
||||||
for (var i = 0; i < selects.length; ++i) {
|
for (var i = 0; i < selects.length; ++i) {
|
||||||
var select = selects[i];
|
var select = selects[i];
|
||||||
if (select.dataset.fontName != fontName) continue;
|
if (select.dataset.fontName != fontName) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
select.checked = !select.checked;
|
select.checked = !select.checked;
|
||||||
selectFont(fontName, select.checked);
|
selectFont(fontName, select.checked);
|
||||||
select.scrollIntoView();
|
select.scrollIntoView();
|
||||||
|
@ -140,8 +144,9 @@ var FontInspector = (function FontInspectorClosure() {
|
||||||
// Somewhat of a hack, should probably add a hook for when the text layer
|
// Somewhat of a hack, should probably add a hook for when the text layer
|
||||||
// is done rendering.
|
// is done rendering.
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
if (this.active)
|
if (this.active) {
|
||||||
resetSelection();
|
resetSelection();
|
||||||
|
}
|
||||||
}.bind(this), 2000);
|
}.bind(this), 2000);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -172,8 +177,9 @@ var StepperManager = (function StepperManagerClosure() {
|
||||||
stepperDiv = document.createElement('div');
|
stepperDiv = document.createElement('div');
|
||||||
this.panel.appendChild(stepperControls);
|
this.panel.appendChild(stepperControls);
|
||||||
this.panel.appendChild(stepperDiv);
|
this.panel.appendChild(stepperDiv);
|
||||||
if (sessionStorage.getItem('pdfjsBreakPoints'))
|
if (sessionStorage.getItem('pdfjsBreakPoints')) {
|
||||||
breakPoints = JSON.parse(sessionStorage.getItem('pdfjsBreakPoints'));
|
breakPoints = JSON.parse(sessionStorage.getItem('pdfjsBreakPoints'));
|
||||||
|
}
|
||||||
},
|
},
|
||||||
enabled: false,
|
enabled: false,
|
||||||
active: false,
|
active: false,
|
||||||
|
@ -191,19 +197,22 @@ var StepperManager = (function StepperManagerClosure() {
|
||||||
var initBreakPoints = breakPoints[pageIndex] || [];
|
var initBreakPoints = breakPoints[pageIndex] || [];
|
||||||
var stepper = new Stepper(debug, pageIndex, initBreakPoints);
|
var stepper = new Stepper(debug, pageIndex, initBreakPoints);
|
||||||
steppers.push(stepper);
|
steppers.push(stepper);
|
||||||
if (steppers.length === 1)
|
if (steppers.length === 1) {
|
||||||
this.selectStepper(pageIndex, false);
|
this.selectStepper(pageIndex, false);
|
||||||
|
}
|
||||||
return stepper;
|
return stepper;
|
||||||
},
|
},
|
||||||
selectStepper: function selectStepper(pageIndex, selectPanel) {
|
selectStepper: function selectStepper(pageIndex, selectPanel) {
|
||||||
if (selectPanel)
|
if (selectPanel) {
|
||||||
this.manager.selectPanel(1);
|
this.manager.selectPanel(1);
|
||||||
|
}
|
||||||
for (var i = 0; i < steppers.length; ++i) {
|
for (var i = 0; i < steppers.length; ++i) {
|
||||||
var stepper = steppers[i];
|
var stepper = steppers[i];
|
||||||
if (stepper.pageIndex == pageIndex)
|
if (stepper.pageIndex == pageIndex) {
|
||||||
stepper.panel.removeAttribute('hidden');
|
stepper.panel.removeAttribute('hidden');
|
||||||
else
|
} else {
|
||||||
stepper.panel.setAttribute('hidden', true);
|
stepper.panel.setAttribute('hidden', true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
var options = stepperChooser.options;
|
var options = stepperChooser.options;
|
||||||
for (var i = 0; i < options.length; ++i) {
|
for (var i = 0; i < options.length; ++i) {
|
||||||
|
@ -223,8 +232,9 @@ var Stepper = (function StepperClosure() {
|
||||||
// Shorter way to create element and optionally set textContent.
|
// Shorter way to create element and optionally set textContent.
|
||||||
function c(tag, textContent) {
|
function c(tag, textContent) {
|
||||||
var d = document.createElement(tag);
|
var d = document.createElement(tag);
|
||||||
if (textContent)
|
if (textContent) {
|
||||||
d.textContent = textContent;
|
d.textContent = textContent;
|
||||||
|
}
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -297,10 +307,11 @@ var Stepper = (function StepperClosure() {
|
||||||
cbox.checked = checked;
|
cbox.checked = checked;
|
||||||
cbox.onclick = (function(x) {
|
cbox.onclick = (function(x) {
|
||||||
return function() {
|
return function() {
|
||||||
if (this.checked)
|
if (this.checked) {
|
||||||
self.breakPoints.push(x);
|
self.breakPoints.push(x);
|
||||||
else
|
} else {
|
||||||
self.breakPoints.splice(self.breakPoints.indexOf(x), 1);
|
self.breakPoints.splice(self.breakPoints.indexOf(x), 1);
|
||||||
|
}
|
||||||
StepperManager.saveBreakPoints(self.pageIndex, self.breakPoints);
|
StepperManager.saveBreakPoints(self.pageIndex, self.breakPoints);
|
||||||
};
|
};
|
||||||
})(i);
|
})(i);
|
||||||
|
@ -336,8 +347,9 @@ var Stepper = (function StepperClosure() {
|
||||||
getNextBreakPoint: function getNextBreakPoint() {
|
getNextBreakPoint: function getNextBreakPoint() {
|
||||||
this.breakPoints.sort(function(a, b) { return a - b; });
|
this.breakPoints.sort(function(a, b) { return a - b; });
|
||||||
for (var i = 0; i < this.breakPoints.length; i++) {
|
for (var i = 0; i < this.breakPoints.length; i++) {
|
||||||
if (this.breakPoints[i] > this.currentIdx)
|
if (this.breakPoints[i] > this.currentIdx) {
|
||||||
return this.breakPoints[i];
|
return this.breakPoints[i];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
},
|
},
|
||||||
|
@ -385,13 +397,16 @@ var Stepper = (function StepperClosure() {
|
||||||
var Stats = (function Stats() {
|
var Stats = (function Stats() {
|
||||||
var stats = [];
|
var stats = [];
|
||||||
function clear(node) {
|
function clear(node) {
|
||||||
while (node.hasChildNodes())
|
while (node.hasChildNodes()) {
|
||||||
node.removeChild(node.lastChild);
|
node.removeChild(node.lastChild);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
function getStatIndex(pageNumber) {
|
function getStatIndex(pageNumber) {
|
||||||
for (var i = 0, ii = stats.length; i < ii; ++i)
|
for (var i = 0, ii = stats.length; i < ii; ++i) {
|
||||||
if (stats[i].pageNumber === pageNumber)
|
if (stats[i].pageNumber === pageNumber) {
|
||||||
return i;
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
|
@ -408,8 +423,9 @@ var Stats = (function Stats() {
|
||||||
active: false,
|
active: false,
|
||||||
// Stats specific functions.
|
// Stats specific functions.
|
||||||
add: function(pageNumber, stat) {
|
add: function(pageNumber, stat) {
|
||||||
if (!stat)
|
if (!stat) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
var statsIndex = getStatIndex(pageNumber);
|
var statsIndex = getStatIndex(pageNumber);
|
||||||
if (statsIndex !== false) {
|
if (statsIndex !== false) {
|
||||||
var b = stats[statsIndex];
|
var b = stats[statsIndex];
|
||||||
|
@ -428,8 +444,9 @@ var Stats = (function Stats() {
|
||||||
stats.push({ pageNumber: pageNumber, div: wrapper });
|
stats.push({ pageNumber: pageNumber, div: wrapper });
|
||||||
stats.sort(function(a, b) { return a.pageNumber - b.pageNumber; });
|
stats.sort(function(a, b) { return a.pageNumber - b.pageNumber; });
|
||||||
clear(this.panel);
|
clear(this.panel);
|
||||||
for (var i = 0, ii = stats.length; i < ii; ++i)
|
for (var i = 0, ii = stats.length; i < ii; ++i) {
|
||||||
this.panel.appendChild(stats[i].div);
|
this.panel.appendChild(stats[i].div);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
})();
|
})();
|
||||||
|
@ -448,12 +465,14 @@ var PDFBug = (function PDFBugClosure() {
|
||||||
],
|
],
|
||||||
enable: function(ids) {
|
enable: function(ids) {
|
||||||
var all = false, tools = this.tools;
|
var all = false, tools = this.tools;
|
||||||
if (ids.length === 1 && ids[0] === 'all')
|
if (ids.length === 1 && ids[0] === 'all') {
|
||||||
all = true;
|
all = true;
|
||||||
|
}
|
||||||
for (var i = 0; i < tools.length; ++i) {
|
for (var i = 0; i < tools.length; ++i) {
|
||||||
var tool = tools[i];
|
var tool = tools[i];
|
||||||
if (all || ids.indexOf(tool.id) !== -1)
|
if (all || ids.indexOf(tool.id) !== -1) {
|
||||||
tool.enabled = true;
|
tool.enabled = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!all) {
|
if (!all) {
|
||||||
// Sort the tools by the order they are enabled.
|
// Sort the tools by the order they are enabled.
|
||||||
|
@ -509,19 +528,21 @@ var PDFBug = (function PDFBugClosure() {
|
||||||
panels.appendChild(panel);
|
panels.appendChild(panel);
|
||||||
tool.panel = panel;
|
tool.panel = panel;
|
||||||
tool.manager = this;
|
tool.manager = this;
|
||||||
if (tool.enabled)
|
if (tool.enabled) {
|
||||||
tool.init();
|
tool.init();
|
||||||
else
|
} else {
|
||||||
panel.textContent = tool.name + ' is disabled. To enable add ' +
|
panel.textContent = tool.name + ' is disabled. To enable add ' +
|
||||||
' "' + tool.id + '" to the pdfBug parameter ' +
|
' "' + tool.id + '" to the pdfBug parameter ' +
|
||||||
'and refresh (seperate multiple by commas).';
|
'and refresh (seperate multiple by commas).';
|
||||||
|
}
|
||||||
buttons.push(panelButton);
|
buttons.push(panelButton);
|
||||||
}
|
}
|
||||||
this.selectPanel(0);
|
this.selectPanel(0);
|
||||||
},
|
},
|
||||||
selectPanel: function selectPanel(index) {
|
selectPanel: function selectPanel(index) {
|
||||||
if (index === activePanel)
|
if (index === activePanel) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
activePanel = index;
|
activePanel = index;
|
||||||
var tools = this.tools;
|
var tools = this.tools;
|
||||||
for (var j = 0; j < tools.length; ++j) {
|
for (var j = 0; j < tools.length; ++j) {
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="40"
|
||||||
|
height="40"
|
||||||
|
viewBox="0 0 40 40">
|
||||||
|
</svg>
|
После Ширина: | Высота: | Размер: 158 B |
|
@ -1157,14 +1157,7 @@ canvas {
|
||||||
background-color: white;
|
background-color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
.page > a,
|
.annotLink > a:hover {
|
||||||
.annotationLayer > a {
|
|
||||||
display: block;
|
|
||||||
position: absolute;
|
|
||||||
}
|
|
||||||
|
|
||||||
.page > a:hover,
|
|
||||||
.annotationLayer > a:hover {
|
|
||||||
opacity: 0.2;
|
opacity: 0.2;
|
||||||
background: #ff0;
|
background: #ff0;
|
||||||
box-shadow: 0px 2px 10px #ff0;
|
box-shadow: 0px 2px 10px #ff0;
|
||||||
|
@ -1229,29 +1222,49 @@ canvas {
|
||||||
::selection { background:rgba(0,0,255,0.3); }
|
::selection { background:rgba(0,0,255,0.3); }
|
||||||
::-moz-selection { background:rgba(0,0,255,0.3); }
|
::-moz-selection { background:rgba(0,0,255,0.3); }
|
||||||
|
|
||||||
.annotText > div {
|
.annotationHighlight {
|
||||||
z-index: 200;
|
|
||||||
position: absolute;
|
position: absolute;
|
||||||
padding: 0.6em;
|
border: 2px #FFFF99 solid;
|
||||||
max-width: 20em;
|
|
||||||
background-color: #FFFF99;
|
|
||||||
box-shadow: 0px 2px 10px #333;
|
|
||||||
border-radius: 7px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.annotText > img {
|
.annotText > img {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
opacity: 0.6;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.annotText > img:hover {
|
.annotTextContentWrapper {
|
||||||
opacity: 1;
|
position: absolute;
|
||||||
|
width: 20em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.annotText > div > h1 {
|
.annotTextContent {
|
||||||
font-size: 1.2em;
|
z-index: 200;
|
||||||
|
float: left;
|
||||||
|
max-width: 20em;
|
||||||
|
background-color: #FFFF99;
|
||||||
|
box-shadow: 0px 2px 5px #333;
|
||||||
|
border-radius: 2px;
|
||||||
|
padding: 0.6em;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.annotTextContent > h1 {
|
||||||
|
font-size: 1em;
|
||||||
border-bottom: 1px solid #000000;
|
border-bottom: 1px solid #000000;
|
||||||
margin: 0px;
|
padding-bottom: 0.2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.annotTextContent > p {
|
||||||
|
padding-top: 0.2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.annotLink > a {
|
||||||
|
position: absolute;
|
||||||
|
font-size: 1em;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
#errorWrapper {
|
#errorWrapper {
|
||||||
|
|
|
@ -68,10 +68,9 @@ var CustomStyle = (function CustomStyleClosure() {
|
||||||
// in some versions of IE9 it is critical that ms appear in this list
|
// in some versions of IE9 it is critical that ms appear in this list
|
||||||
// before Moz
|
// before Moz
|
||||||
var prefixes = ['ms', 'Moz', 'Webkit', 'O'];
|
var prefixes = ['ms', 'Moz', 'Webkit', 'O'];
|
||||||
var _cache = { };
|
var _cache = {};
|
||||||
|
|
||||||
function CustomStyle() {
|
function CustomStyle() {}
|
||||||
}
|
|
||||||
|
|
||||||
CustomStyle.getProp = function get(propName, element) {
|
CustomStyle.getProp = function get(propName, element) {
|
||||||
// check cache only when no element is given
|
// check cache only when no element is given
|
||||||
|
@ -104,8 +103,9 @@ var CustomStyle = (function CustomStyleClosure() {
|
||||||
|
|
||||||
CustomStyle.setProp = function set(propName, element, str) {
|
CustomStyle.setProp = function set(propName, element, str) {
|
||||||
var prop = this.getProp(propName);
|
var prop = this.getProp(propName);
|
||||||
if (prop != 'undefined')
|
if (prop != 'undefined') {
|
||||||
element.style[prop] = str;
|
element.style[prop] = str;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
return CustomStyle;
|
return CustomStyle;
|
||||||
|
@ -291,11 +291,13 @@ var Cache = function cacheCache(size) {
|
||||||
var data = [];
|
var data = [];
|
||||||
this.push = function cachePush(view) {
|
this.push = function cachePush(view) {
|
||||||
var i = data.indexOf(view);
|
var i = data.indexOf(view);
|
||||||
if (i >= 0)
|
if (i >= 0) {
|
||||||
data.splice(i);
|
data.splice(i);
|
||||||
|
}
|
||||||
data.push(view);
|
data.push(view);
|
||||||
if (data.length > size)
|
if (data.length > size) {
|
||||||
data.shift().destroy();
|
data.shift().destroy();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -315,12 +317,13 @@ var Preferences = (function PreferencesClosure() {
|
||||||
function Preferences() {
|
function Preferences() {
|
||||||
this.prefs = {};
|
this.prefs = {};
|
||||||
this.isInitializedPromiseResolved = false;
|
this.isInitializedPromiseResolved = false;
|
||||||
this.initializedPromise = this.readFromStorage().then(function(prefObj) {
|
this.initializedPromise = this.readFromStorage(DEFAULT_PREFERENCES).then(
|
||||||
this.isInitializedPromiseResolved = true;
|
function(prefObj) {
|
||||||
if (prefObj) {
|
this.isInitializedPromiseResolved = true;
|
||||||
this.prefs = prefObj;
|
if (prefObj) {
|
||||||
}
|
this.prefs = prefObj;
|
||||||
}.bind(this));
|
}
|
||||||
|
}.bind(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
Preferences.prototype = {
|
Preferences.prototype = {
|
||||||
|
@ -328,7 +331,7 @@ var Preferences = (function PreferencesClosure() {
|
||||||
return;
|
return;
|
||||||
},
|
},
|
||||||
|
|
||||||
readFromStorage: function Preferences_readFromStorage() {
|
readFromStorage: function Preferences_readFromStorage(prefObj) {
|
||||||
var readFromStoragePromise = Promise.resolve();
|
var readFromStoragePromise = Promise.resolve();
|
||||||
return readFromStoragePromise;
|
return readFromStoragePromise;
|
||||||
},
|
},
|
||||||
|
@ -336,7 +339,7 @@ var Preferences = (function PreferencesClosure() {
|
||||||
reset: function Preferences_reset() {
|
reset: function Preferences_reset() {
|
||||||
if (this.isInitializedPromiseResolved) {
|
if (this.isInitializedPromiseResolved) {
|
||||||
this.prefs = {};
|
this.prefs = {};
|
||||||
this.writeToStorage(this.prefs);
|
this.writeToStorage(DEFAULT_PREFERENCES);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -361,6 +364,12 @@ var Preferences = (function PreferencesClosure() {
|
||||||
valueType + '\", expected a \"' + defaultType + '\".');
|
valueType + '\", expected a \"' + defaultType + '\".');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
if (valueType === 'number' && (value | 0) !== value) {
|
||||||
|
console.error('Preferences_set: \'' + value +
|
||||||
|
'\' must be an \"integer\".');
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
this.prefs[name] = value;
|
this.prefs[name] = value;
|
||||||
this.writeToStorage(this.prefs);
|
this.writeToStorage(this.prefs);
|
||||||
|
@ -427,8 +436,8 @@ var FirefoxCom = (function FirefoxComClosure() {
|
||||||
var request = document.createTextNode('');
|
var request = document.createTextNode('');
|
||||||
if (callback) {
|
if (callback) {
|
||||||
document.addEventListener('pdf.js.response', function listener(event) {
|
document.addEventListener('pdf.js.response', function listener(event) {
|
||||||
var node = event.target,
|
var node = event.target;
|
||||||
response = event.detail.response;
|
var response = event.detail.response;
|
||||||
|
|
||||||
document.documentElement.removeChild(node);
|
document.documentElement.removeChild(node);
|
||||||
|
|
||||||
|
@ -483,9 +492,10 @@ Preferences.prototype.writeToStorage = function(prefObj) {
|
||||||
FirefoxCom.requestSync('setPreferences', prefObj);
|
FirefoxCom.requestSync('setPreferences', prefObj);
|
||||||
};
|
};
|
||||||
|
|
||||||
Preferences.prototype.readFromStorage = function() {
|
Preferences.prototype.readFromStorage = function(prefObj) {
|
||||||
var readFromStoragePromise = new Promise(function (resolve) {
|
var readFromStoragePromise = new Promise(function (resolve) {
|
||||||
var readPrefs = JSON.parse(FirefoxCom.requestSync('getPreferences'));
|
var readPrefs = JSON.parse(FirefoxCom.requestSync('getPreferences',
|
||||||
|
prefObj));
|
||||||
resolve(readPrefs);
|
resolve(readPrefs);
|
||||||
});
|
});
|
||||||
return readFromStoragePromise;
|
return readFromStoragePromise;
|
||||||
|
@ -576,8 +586,6 @@ var ViewHistory = (function ViewHistoryClosure() {
|
||||||
})();
|
})();
|
||||||
|
|
||||||
|
|
||||||
/* globals PDFFindController, FindStates, mozL10n */
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a "search bar" given set of DOM elements
|
* Creates a "search bar" given set of DOM elements
|
||||||
* that act as controls for searching, or for setting
|
* that act as controls for searching, or for setting
|
||||||
|
@ -586,7 +594,6 @@ var ViewHistory = (function ViewHistoryClosure() {
|
||||||
* searching is done by PDFFindController
|
* searching is done by PDFFindController
|
||||||
*/
|
*/
|
||||||
var PDFFindBar = {
|
var PDFFindBar = {
|
||||||
|
|
||||||
opened: false,
|
opened: false,
|
||||||
bar: null,
|
bar: null,
|
||||||
toggleButton: null,
|
toggleButton: null,
|
||||||
|
@ -600,7 +607,7 @@ var PDFFindBar = {
|
||||||
|
|
||||||
initialize: function(options) {
|
initialize: function(options) {
|
||||||
if(typeof PDFFindController === 'undefined' || PDFFindController === null) {
|
if(typeof PDFFindController === 'undefined' || PDFFindController === null) {
|
||||||
throw 'PDFFindBar cannot be initialized ' +
|
throw 'PDFFindBar cannot be initialized ' +
|
||||||
'without a PDFFindController instance.';
|
'without a PDFFindController instance.';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -715,8 +722,9 @@ var PDFFindBar = {
|
||||||
},
|
},
|
||||||
|
|
||||||
close: function() {
|
close: function() {
|
||||||
if (!this.opened) return;
|
if (!this.opened) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
this.opened = false;
|
this.opened = false;
|
||||||
this.toggleButton.classList.remove('toggled');
|
this.toggleButton.classList.remove('toggled');
|
||||||
this.bar.classList.add('hidden');
|
this.bar.classList.add('hidden');
|
||||||
|
@ -735,8 +743,6 @@ var PDFFindBar = {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* globals PDFFindBar, PDFJS, FindStates, FirefoxCom, Promise */
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides a "search" or "find" functionality for the PDF.
|
* Provides a "search" or "find" functionality for the PDF.
|
||||||
* This object actually performs the search for a given string.
|
* This object actually performs the search for a given string.
|
||||||
|
@ -876,8 +882,9 @@ var PDFFindController = {
|
||||||
self.pageContents.push(str);
|
self.pageContents.push(str);
|
||||||
|
|
||||||
extractTextPromisesResolves[pageIndex](pageIndex);
|
extractTextPromisesResolves[pageIndex](pageIndex);
|
||||||
if ((pageIndex + 1) < self.pdfPageSource.pages.length)
|
if ((pageIndex + 1) < self.pdfPageSource.pages.length) {
|
||||||
extractPageText(pageIndex + 1);
|
extractPageText(pageIndex + 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -2432,10 +2439,11 @@ var PDFView = {
|
||||||
viewAreaElement.addEventListener('scroll', function webViewerScroll(evt) {
|
viewAreaElement.addEventListener('scroll', function webViewerScroll(evt) {
|
||||||
var currentY = viewAreaElement.scrollTop;
|
var currentY = viewAreaElement.scrollTop;
|
||||||
var lastY = state.lastY;
|
var lastY = state.lastY;
|
||||||
if (currentY > lastY)
|
if (currentY > lastY) {
|
||||||
state.down = true;
|
state.down = true;
|
||||||
else if (currentY < lastY)
|
} else if (currentY < lastY) {
|
||||||
state.down = false;
|
state.down = false;
|
||||||
|
}
|
||||||
// else do nothing and use previous value
|
// else do nothing and use previous value
|
||||||
state.lastY = currentY;
|
state.lastY = currentY;
|
||||||
callback();
|
callback();
|
||||||
|
@ -2688,8 +2696,9 @@ var PDFView = {
|
||||||
}
|
}
|
||||||
var args = e.data;
|
var args = e.data;
|
||||||
|
|
||||||
if (typeof args !== 'object' || !('pdfjsLoadAction' in args))
|
if (typeof args !== 'object' || !('pdfjsLoadAction' in args)) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
switch (args.pdfjsLoadAction) {
|
switch (args.pdfjsLoadAction) {
|
||||||
case 'supportsRangedLoading':
|
case 'supportsRangedLoading':
|
||||||
PDFView.open(args.pdfUrl, 0, undefined, pdfDataRangeTransport, {
|
PDFView.open(args.pdfUrl, 0, undefined, pdfDataRangeTransport, {
|
||||||
|
@ -2884,8 +2893,9 @@ var PDFView = {
|
||||||
},
|
},
|
||||||
|
|
||||||
getDestinationHash: function pdfViewGetDestinationHash(dest) {
|
getDestinationHash: function pdfViewGetDestinationHash(dest) {
|
||||||
if (typeof dest === 'string')
|
if (typeof dest === 'string') {
|
||||||
return PDFView.getAnchorUrl('#' + escape(dest));
|
return PDFView.getAnchorUrl('#' + escape(dest));
|
||||||
|
}
|
||||||
if (dest instanceof Array) {
|
if (dest instanceof Array) {
|
||||||
var destRef = dest[0]; // see navigateTo method for dest format
|
var destRef = dest[0]; // see navigateTo method for dest format
|
||||||
var pageNumber = destRef instanceof Object ?
|
var pageNumber = destRef instanceof Object ?
|
||||||
|
@ -3003,15 +3013,18 @@ var PDFView = {
|
||||||
var thumbsView = document.getElementById('thumbnailView');
|
var thumbsView = document.getElementById('thumbnailView');
|
||||||
thumbsView.parentNode.scrollTop = 0;
|
thumbsView.parentNode.scrollTop = 0;
|
||||||
|
|
||||||
while (thumbsView.hasChildNodes())
|
while (thumbsView.hasChildNodes()) {
|
||||||
thumbsView.removeChild(thumbsView.lastChild);
|
thumbsView.removeChild(thumbsView.lastChild);
|
||||||
|
}
|
||||||
|
|
||||||
if ('_loadingInterval' in thumbsView)
|
if ('_loadingInterval' in thumbsView) {
|
||||||
clearInterval(thumbsView._loadingInterval);
|
clearInterval(thumbsView._loadingInterval);
|
||||||
|
}
|
||||||
|
|
||||||
var container = document.getElementById('viewer');
|
var container = document.getElementById('viewer');
|
||||||
while (container.hasChildNodes())
|
while (container.hasChildNodes()) {
|
||||||
container.removeChild(container.lastChild);
|
container.removeChild(container.lastChild);
|
||||||
|
}
|
||||||
|
|
||||||
var pagesCount = pdfDocument.numPages;
|
var pagesCount = pdfDocument.numPages;
|
||||||
|
|
||||||
|
@ -3178,16 +3191,17 @@ var PDFView = {
|
||||||
(PDFJS.version ? ' (PDF.js: ' + PDFJS.version + ')' : ''));
|
(PDFJS.version ? ' (PDF.js: ' + PDFJS.version + ')' : ''));
|
||||||
|
|
||||||
var pdfTitle;
|
var pdfTitle;
|
||||||
if (metadata) {
|
if (metadata && metadata.has('dc:title')) {
|
||||||
if (metadata.has('dc:title'))
|
pdfTitle = metadata.get('dc:title');
|
||||||
pdfTitle = metadata.get('dc:title');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!pdfTitle && info && info['Title'])
|
if (!pdfTitle && info && info['Title']) {
|
||||||
pdfTitle = info['Title'];
|
pdfTitle = info['Title'];
|
||||||
|
}
|
||||||
|
|
||||||
if (pdfTitle)
|
if (pdfTitle) {
|
||||||
self.setTitle(pdfTitle + ' - ' + document.title);
|
self.setTitle(pdfTitle + ' - ' + document.title);
|
||||||
|
}
|
||||||
|
|
||||||
if (info.IsAcroFormPresent) {
|
if (info.IsAcroFormPresent) {
|
||||||
console.warn('Warning: AcroForm/XFA is not supported');
|
console.warn('Warning: AcroForm/XFA is not supported');
|
||||||
|
@ -3313,21 +3327,24 @@ var PDFView = {
|
||||||
}
|
}
|
||||||
for (var i = 0; i < numVisible; ++i) {
|
for (var i = 0; i < numVisible; ++i) {
|
||||||
var view = visibleViews[i].view;
|
var view = visibleViews[i].view;
|
||||||
if (!this.isViewFinished(view))
|
if (!this.isViewFinished(view)) {
|
||||||
return view;
|
return view;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// All the visible views have rendered, try to render next/previous pages.
|
// All the visible views have rendered, try to render next/previous pages.
|
||||||
if (scrolledDown) {
|
if (scrolledDown) {
|
||||||
var nextPageIndex = visible.last.id;
|
var nextPageIndex = visible.last.id;
|
||||||
// ID's start at 1 so no need to add 1.
|
// ID's start at 1 so no need to add 1.
|
||||||
if (views[nextPageIndex] && !this.isViewFinished(views[nextPageIndex]))
|
if (views[nextPageIndex] && !this.isViewFinished(views[nextPageIndex])) {
|
||||||
return views[nextPageIndex];
|
return views[nextPageIndex];
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
var previousPageIndex = visible.first.id - 2;
|
var previousPageIndex = visible.first.id - 2;
|
||||||
if (views[previousPageIndex] &&
|
if (views[previousPageIndex] &&
|
||||||
!this.isViewFinished(views[previousPageIndex]))
|
!this.isViewFinished(views[previousPageIndex])) {
|
||||||
return views[previousPageIndex];
|
return views[previousPageIndex];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// Everything that needs to be rendered has been.
|
// Everything that needs to be rendered has been.
|
||||||
return false;
|
return false;
|
||||||
|
@ -3360,8 +3377,9 @@ var PDFView = {
|
||||||
},
|
},
|
||||||
|
|
||||||
setHash: function pdfViewSetHash(hash) {
|
setHash: function pdfViewSetHash(hash) {
|
||||||
if (!hash)
|
if (!hash) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (hash.indexOf('=') >= 0) {
|
if (hash.indexOf('=') >= 0) {
|
||||||
var params = PDFView.parseQueryString(hash);
|
var params = PDFView.parseQueryString(hash);
|
||||||
|
@ -3449,8 +3467,9 @@ var PDFView = {
|
||||||
thumbsView.classList.add('hidden');
|
thumbsView.classList.add('hidden');
|
||||||
outlineView.classList.remove('hidden');
|
outlineView.classList.remove('hidden');
|
||||||
|
|
||||||
if (outlineButton.getAttribute('disabled'))
|
if (outlineButton.getAttribute('disabled')) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -3567,8 +3586,9 @@ var PDFView = {
|
||||||
|
|
||||||
afterPrint: function pdfViewSetupAfterPrint() {
|
afterPrint: function pdfViewSetupAfterPrint() {
|
||||||
var div = document.getElementById('printContainer');
|
var div = document.getElementById('printContainer');
|
||||||
while (div.hasChildNodes())
|
while (div.hasChildNodes()) {
|
||||||
div.removeChild(div.lastChild);
|
div.removeChild(div.lastChild);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
rotatePages: function pdfViewRotatePages(delta) {
|
rotatePages: function pdfViewRotatePages(delta) {
|
||||||
|
@ -3610,14 +3630,16 @@ var PDFView = {
|
||||||
// In case one page has already been flipped there is a cooldown time
|
// In case one page has already been flipped there is a cooldown time
|
||||||
// which has to expire before next page can be scrolled on to.
|
// which has to expire before next page can be scrolled on to.
|
||||||
if (currentTime > storedTime &&
|
if (currentTime > storedTime &&
|
||||||
currentTime - storedTime < MOUSE_SCROLL_COOLDOWN_TIME)
|
currentTime - storedTime < MOUSE_SCROLL_COOLDOWN_TIME) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// In case the user decides to scroll to the opposite direction than before
|
// In case the user decides to scroll to the opposite direction than before
|
||||||
// clear the accumulated delta.
|
// clear the accumulated delta.
|
||||||
if ((this.mouseScrollDelta > 0 && mouseScrollDelta < 0) ||
|
if ((this.mouseScrollDelta > 0 && mouseScrollDelta < 0) ||
|
||||||
(this.mouseScrollDelta < 0 && mouseScrollDelta > 0))
|
(this.mouseScrollDelta < 0 && mouseScrollDelta > 0)) {
|
||||||
this.clearMouseScrollState();
|
this.clearMouseScrollState();
|
||||||
|
}
|
||||||
|
|
||||||
this.mouseScrollDelta += mouseScrollDelta;
|
this.mouseScrollDelta += mouseScrollDelta;
|
||||||
|
|
||||||
|
@ -3640,8 +3662,9 @@ var PDFView = {
|
||||||
// to do anything.
|
// to do anything.
|
||||||
if ((currentPage == 1 && pageFlipDirection == PageFlipDirection.UP) ||
|
if ((currentPage == 1 && pageFlipDirection == PageFlipDirection.UP) ||
|
||||||
(currentPage == this.pages.length &&
|
(currentPage == this.pages.length &&
|
||||||
pageFlipDirection == PageFlipDirection.DOWN))
|
pageFlipDirection == PageFlipDirection.DOWN)) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this.page += pageFlipDirection;
|
this.page += pageFlipDirection;
|
||||||
this.mouseScrollTimeStamp = currentTime;
|
this.mouseScrollTimeStamp = currentTime;
|
||||||
|
@ -3946,10 +3969,13 @@ var PageView = function pageView(container, id, scale,
|
||||||
CustomStyle.setProp('transformOrigin', element, transformOriginStr);
|
CustomStyle.setProp('transformOrigin', element, transformOriginStr);
|
||||||
|
|
||||||
if (data.subtype === 'Link' && !data.url) {
|
if (data.subtype === 'Link' && !data.url) {
|
||||||
if (data.action) {
|
var link = element.getElementsByTagName('a')[0];
|
||||||
bindNamedAction(element, data.action);
|
if (link) {
|
||||||
} else {
|
if (data.action) {
|
||||||
bindLink(element, ('dest' in data) ? data.dest : null);
|
bindNamedAction(link, data.action);
|
||||||
|
} else {
|
||||||
|
bindLink(link, ('dest' in data) ? data.dest : null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4215,6 +4241,7 @@ var PageView = function pageView(container, id, scale,
|
||||||
canvasContext: ctx,
|
canvasContext: ctx,
|
||||||
viewport: this.viewport,
|
viewport: this.viewport,
|
||||||
textLayer: textLayer,
|
textLayer: textLayer,
|
||||||
|
// intent: 'default', // === 'display'
|
||||||
continueCallback: function pdfViewcContinueCallback(cont) {
|
continueCallback: function pdfViewcContinueCallback(cont) {
|
||||||
if (PDFView.highestPriorityPage !== 'page' + self.id) {
|
if (PDFView.highestPriorityPage !== 'page' + self.id) {
|
||||||
self.renderingState = RenderingStates.PAUSED;
|
self.renderingState = RenderingStates.PAUSED;
|
||||||
|
@ -4286,13 +4313,13 @@ var PageView = function pageView(container, id, scale,
|
||||||
|
|
||||||
var renderContext = {
|
var renderContext = {
|
||||||
canvasContext: ctx,
|
canvasContext: ctx,
|
||||||
viewport: viewport
|
viewport: viewport,
|
||||||
|
intent: 'print'
|
||||||
};
|
};
|
||||||
|
|
||||||
pdfPage.render(renderContext).promise.then(function() {
|
pdfPage.render(renderContext).promise.then(function() {
|
||||||
// Tell the printEngine that rendering this canvas/page has finished.
|
// Tell the printEngine that rendering this canvas/page has finished.
|
||||||
obj.done();
|
obj.done();
|
||||||
self.pdfPage.destroy();
|
|
||||||
}, function(error) {
|
}, function(error) {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
// Tell the printEngine that rendering this canvas/page has failed.
|
// Tell the printEngine that rendering this canvas/page has failed.
|
||||||
|
@ -4302,7 +4329,6 @@ var PageView = function pageView(container, id, scale,
|
||||||
} else {
|
} else {
|
||||||
obj.done();
|
obj.done();
|
||||||
}
|
}
|
||||||
self.pdfPage.destroy();
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -4522,12 +4548,12 @@ var TextLayerBuilder = function textLayerBuilder(options) {
|
||||||
this.viewport = options.viewport;
|
this.viewport = options.viewport;
|
||||||
this.isViewerInPresentationMode = options.isViewerInPresentationMode;
|
this.isViewerInPresentationMode = options.isViewerInPresentationMode;
|
||||||
|
|
||||||
if(typeof PDFFindController === 'undefined') {
|
if (typeof PDFFindController === 'undefined') {
|
||||||
window.PDFFindController = null;
|
window.PDFFindController = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(typeof this.lastScrollSource === 'undefined') {
|
if (typeof this.lastScrollSource === 'undefined') {
|
||||||
this.lastScrollSource = null;
|
this.lastScrollSource = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.beginLayout = function textLayerBuilderBeginLayout() {
|
this.beginLayout = function textLayerBuilderBeginLayout() {
|
||||||
|
@ -4548,8 +4574,9 @@ var TextLayerBuilder = function textLayerBuilder(options) {
|
||||||
// No point in rendering so many divs as it'd make the browser unusable
|
// No point in rendering so many divs as it'd make the browser unusable
|
||||||
// even after the divs are rendered
|
// even after the divs are rendered
|
||||||
var MAX_TEXT_DIVS_TO_RENDER = 100000;
|
var MAX_TEXT_DIVS_TO_RENDER = 100000;
|
||||||
if (textDivs.length > MAX_TEXT_DIVS_TO_RENDER)
|
if (textDivs.length > MAX_TEXT_DIVS_TO_RENDER) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
for (var i = 0, ii = textDivs.length; i < ii; i++) {
|
for (var i = 0, ii = textDivs.length; i < ii; i++) {
|
||||||
var textDiv = textDivs[i];
|
var textDiv = textDivs[i];
|
||||||
|
@ -4581,16 +4608,17 @@ var TextLayerBuilder = function textLayerBuilder(options) {
|
||||||
// run it right away
|
// run it right away
|
||||||
var RENDER_DELAY = 200; // in ms
|
var RENDER_DELAY = 200; // in ms
|
||||||
var self = this;
|
var self = this;
|
||||||
var lastScroll = this.lastScrollSource === null ?
|
var lastScroll = (this.lastScrollSource === null ?
|
||||||
0 : this.lastScrollSource.lastScroll;
|
0 : this.lastScrollSource.lastScroll);
|
||||||
|
|
||||||
if (Date.now() - lastScroll > RENDER_DELAY) {
|
if (Date.now() - lastScroll > RENDER_DELAY) {
|
||||||
// Render right away
|
// Render right away
|
||||||
this.renderLayer();
|
this.renderLayer();
|
||||||
} else {
|
} else {
|
||||||
// Schedule
|
// Schedule
|
||||||
if (this.renderTimer)
|
if (this.renderTimer) {
|
||||||
clearTimeout(this.renderTimer);
|
clearTimeout(this.renderTimer);
|
||||||
|
}
|
||||||
this.renderTimer = setTimeout(function() {
|
this.renderTimer = setTimeout(function() {
|
||||||
self.setupRenderLayoutTimer();
|
self.setupRenderLayoutTimer();
|
||||||
}, RENDER_DELAY);
|
}, RENDER_DELAY);
|
||||||
|
@ -4608,8 +4636,8 @@ var TextLayerBuilder = function textLayerBuilder(options) {
|
||||||
|
|
||||||
textDiv.style.fontSize = fontHeight + 'px';
|
textDiv.style.fontSize = fontHeight + 'px';
|
||||||
textDiv.style.fontFamily = geom.fontFamily;
|
textDiv.style.fontFamily = geom.fontFamily;
|
||||||
var fontAscent = geom.ascent ? geom.ascent * fontHeight :
|
var fontAscent = (geom.ascent ? geom.ascent * fontHeight :
|
||||||
geom.descent ? (1 + geom.descent) * fontHeight : fontHeight;
|
(geom.descent ? (1 + geom.descent) * fontHeight : fontHeight));
|
||||||
textDiv.style.left = (geom.x + (fontAscent * Math.sin(geom.angle))) + 'px';
|
textDiv.style.left = (geom.x + (fontAscent * Math.sin(geom.angle))) + 'px';
|
||||||
textDiv.style.top = (geom.y - (fontAscent * Math.cos(geom.angle))) + 'px';
|
textDiv.style.top = (geom.y - (fontAscent * Math.cos(geom.angle))) + 'px';
|
||||||
|
|
||||||
|
@ -4621,8 +4649,9 @@ var TextLayerBuilder = function textLayerBuilder(options) {
|
||||||
this.insertDivContent = function textLayerUpdateTextContent() {
|
this.insertDivContent = function textLayerUpdateTextContent() {
|
||||||
// Only set the content of the divs once layout has finished, the content
|
// Only set the content of the divs once layout has finished, the content
|
||||||
// for the divs is available and content is not yet set on the divs.
|
// for the divs is available and content is not yet set on the divs.
|
||||||
if (!this.layoutDone || this.divContentDone || !this.textContent)
|
if (!this.layoutDone || this.divContentDone || !this.textContent) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this.divContentDone = true;
|
this.divContentDone = true;
|
||||||
|
|
||||||
|
@ -4661,8 +4690,8 @@ var TextLayerBuilder = function textLayerBuilder(options) {
|
||||||
var iIndex = 0;
|
var iIndex = 0;
|
||||||
var bidiTexts = this.textContent;
|
var bidiTexts = this.textContent;
|
||||||
var end = bidiTexts.length - 1;
|
var end = bidiTexts.length - 1;
|
||||||
var queryLen = PDFFindController === null ?
|
var queryLen = (PDFFindController === null ?
|
||||||
0 : PDFFindController.state.query.length;
|
0 : PDFFindController.state.query.length);
|
||||||
|
|
||||||
var lastDivIdx = -1;
|
var lastDivIdx = -1;
|
||||||
var pos;
|
var pos;
|
||||||
|
@ -4721,14 +4750,14 @@ var TextLayerBuilder = function textLayerBuilder(options) {
|
||||||
var bidiTexts = this.textContent;
|
var bidiTexts = this.textContent;
|
||||||
var textDivs = this.textDivs;
|
var textDivs = this.textDivs;
|
||||||
var prevEnd = null;
|
var prevEnd = null;
|
||||||
var isSelectedPage = PDFFindController === null ?
|
var isSelectedPage = (PDFFindController === null ?
|
||||||
false : (this.pageIdx === PDFFindController.selected.pageIdx);
|
false : (this.pageIdx === PDFFindController.selected.pageIdx));
|
||||||
|
|
||||||
var selectedMatchIdx = PDFFindController === null ?
|
var selectedMatchIdx = (PDFFindController === null ?
|
||||||
-1 : PDFFindController.selected.matchIdx;
|
-1 : PDFFindController.selected.matchIdx);
|
||||||
|
|
||||||
var highlightAll = PDFFindController === null ?
|
var highlightAll = (PDFFindController === null ?
|
||||||
false : PDFFindController.state.highlightAll;
|
false : PDFFindController.state.highlightAll);
|
||||||
|
|
||||||
var infty = {
|
var infty = {
|
||||||
divIdx: -1,
|
divIdx: -1,
|
||||||
|
@ -4827,8 +4856,9 @@ var TextLayerBuilder = function textLayerBuilder(options) {
|
||||||
|
|
||||||
this.updateMatches = function textLayerUpdateMatches() {
|
this.updateMatches = function textLayerUpdateMatches() {
|
||||||
// Only show matches, once all rendering is done.
|
// Only show matches, once all rendering is done.
|
||||||
if (!this.renderingDone)
|
if (!this.renderingDone) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Clear out all matches.
|
// Clear out all matches.
|
||||||
var matches = this.matches;
|
var matches = this.matches;
|
||||||
|
@ -4848,14 +4878,14 @@ var TextLayerBuilder = function textLayerBuilder(options) {
|
||||||
clearedUntilDivIdx = match.end.divIdx + 1;
|
clearedUntilDivIdx = match.end.divIdx + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PDFFindController === null || !PDFFindController.active)
|
if (PDFFindController === null || !PDFFindController.active) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Convert the matches on the page controller into the match format used
|
// Convert the matches on the page controller into the match format used
|
||||||
// for the textLayer.
|
// for the textLayer.
|
||||||
this.matches = matches =
|
this.matches = matches = (this.convertMatches(PDFFindController === null ?
|
||||||
this.convertMatches(PDFFindController === null ?
|
[] : (PDFFindController.pageMatches[this.pageIdx] || [])));
|
||||||
[] : (PDFFindController.pageMatches[this.pageIdx] || []));
|
|
||||||
|
|
||||||
this.renderMatches(this.matches);
|
this.renderMatches(this.matches);
|
||||||
};
|
};
|
||||||
|
@ -4866,13 +4896,14 @@ var TextLayerBuilder = function textLayerBuilder(options) {
|
||||||
var DocumentOutlineView = function documentOutlineView(outline) {
|
var DocumentOutlineView = function documentOutlineView(outline) {
|
||||||
var outlineView = document.getElementById('outlineView');
|
var outlineView = document.getElementById('outlineView');
|
||||||
var outlineButton = document.getElementById('viewOutline');
|
var outlineButton = document.getElementById('viewOutline');
|
||||||
while (outlineView.firstChild)
|
while (outlineView.firstChild) {
|
||||||
outlineView.removeChild(outlineView.firstChild);
|
outlineView.removeChild(outlineView.firstChild);
|
||||||
|
}
|
||||||
|
|
||||||
if (!outline) {
|
if (!outline) {
|
||||||
if (!outlineView.classList.contains('hidden'))
|
if (!outlineView.classList.contains('hidden')) {
|
||||||
PDFView.switchSidebarView('thumbs');
|
PDFView.switchSidebarView('thumbs');
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5101,8 +5132,9 @@ document.addEventListener('DOMContentLoaded', webViewerLoad, true);
|
||||||
|
|
||||||
function updateViewarea() {
|
function updateViewarea() {
|
||||||
|
|
||||||
if (!PDFView.initialized)
|
if (!PDFView.initialized) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
var visible = PDFView.getVisiblePages();
|
var visible = PDFView.getVisiblePages();
|
||||||
var visiblePages = visible.views;
|
var visiblePages = visible.views;
|
||||||
if (visiblePages.length === 0) {
|
if (visiblePages.length === 0) {
|
||||||
|
@ -5118,9 +5150,9 @@ function updateViewarea() {
|
||||||
i < ii; ++i) {
|
i < ii; ++i) {
|
||||||
var page = visiblePages[i];
|
var page = visiblePages[i];
|
||||||
|
|
||||||
if (page.percent < 100)
|
if (page.percent < 100) {
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
if (page.id === PDFView.page) {
|
if (page.id === PDFView.page) {
|
||||||
stillFullyVisible = true;
|
stillFullyVisible = true;
|
||||||
break;
|
break;
|
||||||
|
@ -5473,23 +5505,6 @@ window.addEventListener('keydown', function keydown(evt) {
|
||||||
PDFView.rotatePages(90);
|
PDFView.rotatePages(90);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (!handled && !PresentationMode.active) {
|
|
||||||
// 33=Page Up 34=Page Down 35=End 36=Home
|
|
||||||
// 37=Left 38=Up 39=Right 40=Down
|
|
||||||
if (evt.keyCode >= 33 && evt.keyCode <= 40 &&
|
|
||||||
!PDFView.container.contains(curElement)) {
|
|
||||||
// The page container is not focused, but a page navigation key has been
|
|
||||||
// pressed. Change the focus to the viewer container to make sure that
|
|
||||||
// navigation by keyboard works as expected.
|
|
||||||
PDFView.container.focus();
|
|
||||||
}
|
|
||||||
// 32=Spacebar
|
|
||||||
if (evt.keyCode === 32 && curElementTagName !== 'BUTTON') {
|
|
||||||
// Workaround for issue in Firefox, that prevents scroll keys from working
|
|
||||||
// when elements with 'tabindex' are focused. (#3499)
|
|
||||||
PDFView.container.blur();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cmd === 4) { // shift-key
|
if (cmd === 4) { // shift-key
|
||||||
|
@ -5509,6 +5524,24 @@ window.addEventListener('keydown', function keydown(evt) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!handled && !PresentationMode.active) {
|
||||||
|
// 33=Page Up 34=Page Down 35=End 36=Home
|
||||||
|
// 37=Left 38=Up 39=Right 40=Down
|
||||||
|
if (evt.keyCode >= 33 && evt.keyCode <= 40 &&
|
||||||
|
!PDFView.container.contains(curElement)) {
|
||||||
|
// The page container is not focused, but a page navigation key has been
|
||||||
|
// pressed. Change the focus to the viewer container to make sure that
|
||||||
|
// navigation by keyboard works as expected.
|
||||||
|
PDFView.container.focus();
|
||||||
|
}
|
||||||
|
// 32=Spacebar
|
||||||
|
if (evt.keyCode === 32 && curElementTagName !== 'BUTTON') {
|
||||||
|
// Workaround for issue in Firefox, that prevents scroll keys from
|
||||||
|
// working when elements with 'tabindex' are focused. (#3498)
|
||||||
|
PDFView.container.blur();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (cmd === 2) { // alt-key
|
if (cmd === 2) { // alt-key
|
||||||
switch (evt.keyCode) {
|
switch (evt.keyCode) {
|
||||||
case 37: // left arrow
|
case 37: // left arrow
|
||||||
|
|
Загрузка…
Ссылка в новой задаче