pdfjs 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.rdoc +39 -2
- data/Rakefile +2 -0
- data/app/assets/images/pdfjs/annotation-check.svg +11 -0
- data/app/assets/images/pdfjs/annotation-comment.svg +16 -0
- data/app/assets/images/pdfjs/annotation-help.svg +26 -0
- data/app/assets/images/pdfjs/annotation-insert.svg +10 -0
- data/app/assets/images/pdfjs/annotation-key.svg +11 -0
- data/app/assets/images/pdfjs/annotation-newparagraph.svg +11 -0
- data/app/assets/images/pdfjs/annotation-noicon.svg +7 -0
- data/app/assets/images/pdfjs/annotation-note.svg +42 -0
- data/app/assets/images/pdfjs/annotation-paragraph.svg +16 -0
- data/app/assets/images/pdfjs/findbarButton-next-rtl.png +0 -0
- data/app/assets/images/pdfjs/findbarButton-next-rtl@2x.png +0 -0
- data/app/assets/images/pdfjs/findbarButton-next.png +0 -0
- data/app/assets/images/pdfjs/findbarButton-next@2x.png +0 -0
- data/app/assets/images/pdfjs/findbarButton-previous-rtl.png +0 -0
- data/app/assets/images/pdfjs/findbarButton-previous-rtl@2x.png +0 -0
- data/app/assets/images/pdfjs/findbarButton-previous.png +0 -0
- data/app/assets/images/pdfjs/findbarButton-previous@2x.png +0 -0
- data/app/assets/images/pdfjs/grab.cur +0 -0
- data/app/assets/images/pdfjs/grabbing.cur +0 -0
- data/app/assets/images/pdfjs/loading-icon.gif +0 -0
- data/app/assets/images/pdfjs/loading-small.png +0 -0
- data/app/assets/images/pdfjs/loading-small@2x.png +0 -0
- data/app/assets/images/pdfjs/loading.gif +0 -0
- data/app/assets/images/pdfjs/secondaryToolbarButton-documentProperties.png +0 -0
- data/app/assets/images/pdfjs/secondaryToolbarButton-documentProperties@2x.png +0 -0
- data/app/assets/images/pdfjs/secondaryToolbarButton-firstPage.png +0 -0
- data/app/assets/images/pdfjs/secondaryToolbarButton-firstPage@2x.png +0 -0
- data/app/assets/images/pdfjs/secondaryToolbarButton-handTool.png +0 -0
- data/app/assets/images/pdfjs/secondaryToolbarButton-handTool@2x.png +0 -0
- data/app/assets/images/pdfjs/secondaryToolbarButton-lastPage.png +0 -0
- data/app/assets/images/pdfjs/secondaryToolbarButton-lastPage@2x.png +0 -0
- data/app/assets/images/pdfjs/secondaryToolbarButton-rotateCcw.png +0 -0
- data/app/assets/images/pdfjs/secondaryToolbarButton-rotateCcw@2x.png +0 -0
- data/app/assets/images/pdfjs/secondaryToolbarButton-rotateCw.png +0 -0
- data/app/assets/images/pdfjs/secondaryToolbarButton-rotateCw@2x.png +0 -0
- data/app/assets/images/pdfjs/shadow.png +0 -0
- data/app/assets/images/pdfjs/texture.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-bookmark.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-bookmark@2x.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-download.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-download@2x.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-menuArrows.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-menuArrows@2x.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-openFile.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-openFile@2x.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-pageDown-rtl.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-pageDown-rtl@2x.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-pageDown.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-pageDown@2x.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-pageUp-rtl.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-pageUp-rtl@2x.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-pageUp.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-pageUp@2x.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-presentationMode.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-presentationMode@2x.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-print.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-print@2x.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-search.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-search@2x.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-secondaryToolbarToggle-rtl.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-secondaryToolbarToggle-rtl@2x.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-secondaryToolbarToggle.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-secondaryToolbarToggle@2x.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-sidebarToggle-rtl.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-sidebarToggle-rtl@2x.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-sidebarToggle.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-sidebarToggle@2x.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-viewAttachments.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-viewAttachments@2x.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-viewOutline-rtl.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-viewOutline-rtl@2x.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-viewOutline.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-viewOutline@2x.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-viewThumbnail.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-viewThumbnail@2x.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-zoomIn.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-zoomIn@2x.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-zoomOut.png +0 -0
- data/app/assets/images/pdfjs/toolbarButton-zoomOut@2x.png +0 -0
- data/app/assets/javascripts/pdfjs.js +5 -0
- data/app/assets/javascripts/pdfjs/compatibility.js +574 -0
- data/app/assets/javascripts/pdfjs/debugger.js +620 -0
- data/app/assets/javascripts/pdfjs/l10n.js +1004 -0
- data/app/assets/javascripts/pdfjs/pdf.js +7793 -0
- data/app/assets/javascripts/pdfjs/pdf.worker.js +38661 -0
- data/app/assets/javascripts/pdfjs/viewer.js.erb +6912 -0
- data/app/assets/stylesheets/pdfjs.scss +3 -0
- data/app/assets/stylesheets/pdfjs/viewer.css.erb +1989 -0
- data/app/controllers/pdfjs/application_controller.rb +4 -0
- data/app/controllers/pdfjs/pdfjs_controller.rb +4 -0
- data/app/helpers/pdfjs/application_helper.rb +4 -0
- data/app/views/layouts/pdfjs/application.html.erb +396 -0
- data/config/routes.rb +2 -0
- data/lib/pdfjs.rb +2 -1
- data/lib/pdfjs/engine.rb +9 -0
- data/lib/pdfjs/version.rb +1 -1
- data/test/controllers/pdfjs_controller_test.rb +7 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/images/pdfjs/annotation-check.svg +11 -0
- data/test/dummy/app/assets/images/pdfjs/annotation-comment.svg +16 -0
- data/test/dummy/app/assets/images/pdfjs/annotation-help.svg +26 -0
- data/test/dummy/app/assets/images/pdfjs/annotation-insert.svg +10 -0
- data/test/dummy/app/assets/images/pdfjs/annotation-key.svg +11 -0
- data/test/dummy/app/assets/images/pdfjs/annotation-newparagraph.svg +11 -0
- data/test/dummy/app/assets/images/pdfjs/annotation-noicon.svg +7 -0
- data/test/dummy/app/assets/images/pdfjs/annotation-note.svg +42 -0
- data/test/dummy/app/assets/images/pdfjs/annotation-paragraph.svg +16 -0
- data/test/dummy/app/assets/images/pdfjs/findbarButton-next-rtl.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/findbarButton-next-rtl@2x.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/findbarButton-next.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/findbarButton-next@2x.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/findbarButton-previous-rtl.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/findbarButton-previous-rtl@2x.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/findbarButton-previous.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/findbarButton-previous@2x.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/grab.cur +0 -0
- data/test/dummy/app/assets/images/pdfjs/grabbing.cur +0 -0
- data/test/dummy/app/assets/images/pdfjs/loading-icon.gif +0 -0
- data/test/dummy/app/assets/images/pdfjs/loading-small.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/loading-small@2x.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/loading.gif +0 -0
- data/test/dummy/app/assets/images/pdfjs/secondaryToolbarButton-documentProperties.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/secondaryToolbarButton-documentProperties@2x.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/secondaryToolbarButton-firstPage.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/secondaryToolbarButton-firstPage@2x.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/secondaryToolbarButton-handTool.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/secondaryToolbarButton-handTool@2x.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/secondaryToolbarButton-lastPage.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/secondaryToolbarButton-lastPage@2x.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/secondaryToolbarButton-rotateCcw.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/secondaryToolbarButton-rotateCcw@2x.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/secondaryToolbarButton-rotateCw.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/secondaryToolbarButton-rotateCw@2x.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/shadow.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/texture.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-bookmark.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-bookmark@2x.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-download.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-download@2x.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-menuArrows.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-menuArrows@2x.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-openFile.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-openFile@2x.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-pageDown-rtl.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-pageDown-rtl@2x.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-pageDown.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-pageDown@2x.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-pageUp-rtl.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-pageUp-rtl@2x.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-pageUp.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-pageUp@2x.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-presentationMode.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-presentationMode@2x.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-print.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-print@2x.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-search.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-search@2x.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-secondaryToolbarToggle-rtl.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-secondaryToolbarToggle-rtl@2x.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-secondaryToolbarToggle.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-secondaryToolbarToggle@2x.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-sidebarToggle-rtl.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-sidebarToggle-rtl@2x.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-sidebarToggle.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-sidebarToggle@2x.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-viewAttachments.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-viewAttachments@2x.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-viewOutline-rtl.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-viewOutline-rtl@2x.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-viewOutline.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-viewOutline@2x.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-viewThumbnail.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-viewThumbnail@2x.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-zoomIn.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-zoomIn@2x.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-zoomOut.png +0 -0
- data/test/dummy/app/assets/images/pdfjs/toolbarButton-zoomOut@2x.png +0 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/javascripts/pdfjs.js +5 -0
- data/test/dummy/app/assets/javascripts/pdfjs/compatibility.js +574 -0
- data/test/dummy/app/assets/javascripts/pdfjs/debugger.js +620 -0
- data/test/dummy/app/assets/javascripts/pdfjs/l10n.js +1004 -0
- data/test/dummy/app/assets/javascripts/pdfjs/pdf.js +7793 -0
- data/test/dummy/app/assets/javascripts/pdfjs/pdf.worker.js +38661 -0
- data/test/dummy/app/assets/javascripts/pdfjs/viewer.js.erb +6912 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/assets/stylesheets/pdfjs.scss +3 -0
- data/test/dummy/app/assets/stylesheets/pdfjs/viewer.css.erb +1989 -0
- data/test/dummy/app/controllers/application_controller.rb +5 -0
- data/test/dummy/app/controllers/pdfjs/application_controller.rb +4 -0
- data/test/dummy/app/controllers/pdfjs/pdfjs_controller.rb +4 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/helpers/pdfjs/application_helper.rb +4 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/app/views/layouts/pdfjs/application.html.erb +396 -0
- data/test/dummy/app/views/pdfjs/pdfjs/show.html.erb +5 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +26 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +78 -0
- data/test/dummy/config/environments/test.rb +42 -0
- data/test/dummy/config/initializers/assets.rb +8 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/routes.rb +3 -0
- data/test/dummy/config/secrets.yml +22 -0
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/test.log +60 -0
- data/test/dummy/public/404.html +67 -0
- data/test/dummy/public/422.html +67 -0
- data/test/dummy/public/500.html +66 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/test_helper.rb +4 -2
- metadata +362 -23
@@ -0,0 +1,620 @@
|
|
1
|
+
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
2
|
+
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
3
|
+
/* Copyright 2012 Mozilla Foundation
|
4
|
+
*
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
* you may not use this file except in compliance with the License.
|
7
|
+
* You may obtain a copy of the License at
|
8
|
+
*
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
*
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
* See the License for the specific language governing permissions and
|
15
|
+
* limitations under the License.
|
16
|
+
*/
|
17
|
+
/* globals PDFJS */
|
18
|
+
|
19
|
+
'use strict';
|
20
|
+
|
21
|
+
var FontInspector = (function FontInspectorClosure() {
|
22
|
+
var fonts;
|
23
|
+
var active = false;
|
24
|
+
var fontAttribute = 'data-font-name';
|
25
|
+
function removeSelection() {
|
26
|
+
var divs = document.querySelectorAll('div[' + fontAttribute + ']');
|
27
|
+
for (var i = 0, ii = divs.length; i < ii; ++i) {
|
28
|
+
var div = divs[i];
|
29
|
+
div.className = '';
|
30
|
+
}
|
31
|
+
}
|
32
|
+
function resetSelection() {
|
33
|
+
var divs = document.querySelectorAll('div[' + fontAttribute + ']');
|
34
|
+
for (var i = 0, ii = divs.length; i < ii; ++i) {
|
35
|
+
var div = divs[i];
|
36
|
+
div.className = 'debuggerHideText';
|
37
|
+
}
|
38
|
+
}
|
39
|
+
function selectFont(fontName, show) {
|
40
|
+
var divs = document.querySelectorAll('div[' + fontAttribute + '=' +
|
41
|
+
fontName + ']');
|
42
|
+
for (var i = 0, ii = divs.length; i < ii; ++i) {
|
43
|
+
var div = divs[i];
|
44
|
+
div.className = show ? 'debuggerShowText' : 'debuggerHideText';
|
45
|
+
}
|
46
|
+
}
|
47
|
+
function textLayerClick(e) {
|
48
|
+
if (!e.target.dataset.fontName ||
|
49
|
+
e.target.tagName.toUpperCase() !== 'DIV') {
|
50
|
+
return;
|
51
|
+
}
|
52
|
+
var fontName = e.target.dataset.fontName;
|
53
|
+
var selects = document.getElementsByTagName('input');
|
54
|
+
for (var i = 0; i < selects.length; ++i) {
|
55
|
+
var select = selects[i];
|
56
|
+
if (select.dataset.fontName !== fontName) {
|
57
|
+
continue;
|
58
|
+
}
|
59
|
+
select.checked = !select.checked;
|
60
|
+
selectFont(fontName, select.checked);
|
61
|
+
select.scrollIntoView();
|
62
|
+
}
|
63
|
+
}
|
64
|
+
return {
|
65
|
+
// Properties/functions needed by PDFBug.
|
66
|
+
id: 'FontInspector',
|
67
|
+
name: 'Font Inspector',
|
68
|
+
panel: null,
|
69
|
+
manager: null,
|
70
|
+
init: function init() {
|
71
|
+
var panel = this.panel;
|
72
|
+
panel.setAttribute('style', 'padding: 5px;');
|
73
|
+
var tmp = document.createElement('button');
|
74
|
+
tmp.addEventListener('click', resetSelection);
|
75
|
+
tmp.textContent = 'Refresh';
|
76
|
+
panel.appendChild(tmp);
|
77
|
+
|
78
|
+
fonts = document.createElement('div');
|
79
|
+
panel.appendChild(fonts);
|
80
|
+
},
|
81
|
+
cleanup: function cleanup() {
|
82
|
+
fonts.textContent = '';
|
83
|
+
},
|
84
|
+
enabled: false,
|
85
|
+
get active() {
|
86
|
+
return active;
|
87
|
+
},
|
88
|
+
set active(value) {
|
89
|
+
active = value;
|
90
|
+
if (active) {
|
91
|
+
document.body.addEventListener('click', textLayerClick, true);
|
92
|
+
resetSelection();
|
93
|
+
} else {
|
94
|
+
document.body.removeEventListener('click', textLayerClick, true);
|
95
|
+
removeSelection();
|
96
|
+
}
|
97
|
+
},
|
98
|
+
// FontInspector specific functions.
|
99
|
+
fontAdded: function fontAdded(fontObj, url) {
|
100
|
+
function properties(obj, list) {
|
101
|
+
var moreInfo = document.createElement('table');
|
102
|
+
for (var i = 0; i < list.length; i++) {
|
103
|
+
var tr = document.createElement('tr');
|
104
|
+
var td1 = document.createElement('td');
|
105
|
+
td1.textContent = list[i];
|
106
|
+
tr.appendChild(td1);
|
107
|
+
var td2 = document.createElement('td');
|
108
|
+
td2.textContent = obj[list[i]].toString();
|
109
|
+
tr.appendChild(td2);
|
110
|
+
moreInfo.appendChild(tr);
|
111
|
+
}
|
112
|
+
return moreInfo;
|
113
|
+
}
|
114
|
+
var moreInfo = properties(fontObj, ['name', 'type']);
|
115
|
+
var fontName = fontObj.loadedName;
|
116
|
+
var font = document.createElement('div');
|
117
|
+
var name = document.createElement('span');
|
118
|
+
name.textContent = fontName;
|
119
|
+
var download = document.createElement('a');
|
120
|
+
if (url) {
|
121
|
+
url = /url\(['"]?([^\)"']+)/.exec(url);
|
122
|
+
download.href = url[1];
|
123
|
+
} else if (fontObj.data) {
|
124
|
+
url = URL.createObjectURL(new Blob([fontObj.data], {
|
125
|
+
type: fontObj.mimeType
|
126
|
+
}));
|
127
|
+
}
|
128
|
+
download.href = url;
|
129
|
+
download.textContent = 'Download';
|
130
|
+
var logIt = document.createElement('a');
|
131
|
+
logIt.href = '';
|
132
|
+
logIt.textContent = 'Log';
|
133
|
+
logIt.addEventListener('click', function(event) {
|
134
|
+
event.preventDefault();
|
135
|
+
console.log(fontObj);
|
136
|
+
});
|
137
|
+
var select = document.createElement('input');
|
138
|
+
select.setAttribute('type', 'checkbox');
|
139
|
+
select.dataset.fontName = fontName;
|
140
|
+
select.addEventListener('click', (function(select, fontName) {
|
141
|
+
return (function() {
|
142
|
+
selectFont(fontName, select.checked);
|
143
|
+
});
|
144
|
+
})(select, fontName));
|
145
|
+
font.appendChild(select);
|
146
|
+
font.appendChild(name);
|
147
|
+
font.appendChild(document.createTextNode(' '));
|
148
|
+
font.appendChild(download);
|
149
|
+
font.appendChild(document.createTextNode(' '));
|
150
|
+
font.appendChild(logIt);
|
151
|
+
font.appendChild(moreInfo);
|
152
|
+
fonts.appendChild(font);
|
153
|
+
// Somewhat of a hack, should probably add a hook for when the text layer
|
154
|
+
// is done rendering.
|
155
|
+
setTimeout(function() {
|
156
|
+
if (this.active) {
|
157
|
+
resetSelection();
|
158
|
+
}
|
159
|
+
}.bind(this), 2000);
|
160
|
+
}
|
161
|
+
};
|
162
|
+
})();
|
163
|
+
|
164
|
+
// Manages all the page steppers.
|
165
|
+
var StepperManager = (function StepperManagerClosure() {
|
166
|
+
var steppers = [];
|
167
|
+
var stepperDiv = null;
|
168
|
+
var stepperControls = null;
|
169
|
+
var stepperChooser = null;
|
170
|
+
var breakPoints = {};
|
171
|
+
return {
|
172
|
+
// Properties/functions needed by PDFBug.
|
173
|
+
id: 'Stepper',
|
174
|
+
name: 'Stepper',
|
175
|
+
panel: null,
|
176
|
+
manager: null,
|
177
|
+
init: function init() {
|
178
|
+
var self = this;
|
179
|
+
this.panel.setAttribute('style', 'padding: 5px;');
|
180
|
+
stepperControls = document.createElement('div');
|
181
|
+
stepperChooser = document.createElement('select');
|
182
|
+
stepperChooser.addEventListener('change', function(event) {
|
183
|
+
self.selectStepper(this.value);
|
184
|
+
});
|
185
|
+
stepperControls.appendChild(stepperChooser);
|
186
|
+
stepperDiv = document.createElement('div');
|
187
|
+
this.panel.appendChild(stepperControls);
|
188
|
+
this.panel.appendChild(stepperDiv);
|
189
|
+
if (sessionStorage.getItem('pdfjsBreakPoints')) {
|
190
|
+
breakPoints = JSON.parse(sessionStorage.getItem('pdfjsBreakPoints'));
|
191
|
+
}
|
192
|
+
},
|
193
|
+
cleanup: function cleanup() {
|
194
|
+
stepperChooser.textContent = '';
|
195
|
+
stepperDiv.textContent = '';
|
196
|
+
steppers = [];
|
197
|
+
},
|
198
|
+
enabled: false,
|
199
|
+
active: false,
|
200
|
+
// Stepper specific functions.
|
201
|
+
create: function create(pageIndex) {
|
202
|
+
var debug = document.createElement('div');
|
203
|
+
debug.id = 'stepper' + pageIndex;
|
204
|
+
debug.setAttribute('hidden', true);
|
205
|
+
debug.className = 'stepper';
|
206
|
+
stepperDiv.appendChild(debug);
|
207
|
+
var b = document.createElement('option');
|
208
|
+
b.textContent = 'Page ' + (pageIndex + 1);
|
209
|
+
b.value = pageIndex;
|
210
|
+
stepperChooser.appendChild(b);
|
211
|
+
var initBreakPoints = breakPoints[pageIndex] || [];
|
212
|
+
var stepper = new Stepper(debug, pageIndex, initBreakPoints);
|
213
|
+
steppers.push(stepper);
|
214
|
+
if (steppers.length === 1) {
|
215
|
+
this.selectStepper(pageIndex, false);
|
216
|
+
}
|
217
|
+
return stepper;
|
218
|
+
},
|
219
|
+
selectStepper: function selectStepper(pageIndex, selectPanel) {
|
220
|
+
var i;
|
221
|
+
pageIndex = pageIndex | 0;
|
222
|
+
if (selectPanel) {
|
223
|
+
this.manager.selectPanel(this);
|
224
|
+
}
|
225
|
+
for (i = 0; i < steppers.length; ++i) {
|
226
|
+
var stepper = steppers[i];
|
227
|
+
if (stepper.pageIndex === pageIndex) {
|
228
|
+
stepper.panel.removeAttribute('hidden');
|
229
|
+
} else {
|
230
|
+
stepper.panel.setAttribute('hidden', true);
|
231
|
+
}
|
232
|
+
}
|
233
|
+
var options = stepperChooser.options;
|
234
|
+
for (i = 0; i < options.length; ++i) {
|
235
|
+
var option = options[i];
|
236
|
+
option.selected = (option.value | 0) === pageIndex;
|
237
|
+
}
|
238
|
+
},
|
239
|
+
saveBreakPoints: function saveBreakPoints(pageIndex, bps) {
|
240
|
+
breakPoints[pageIndex] = bps;
|
241
|
+
sessionStorage.setItem('pdfjsBreakPoints', JSON.stringify(breakPoints));
|
242
|
+
}
|
243
|
+
};
|
244
|
+
})();
|
245
|
+
|
246
|
+
// The stepper for each page's IRQueue.
|
247
|
+
var Stepper = (function StepperClosure() {
|
248
|
+
// Shorter way to create element and optionally set textContent.
|
249
|
+
function c(tag, textContent) {
|
250
|
+
var d = document.createElement(tag);
|
251
|
+
if (textContent) {
|
252
|
+
d.textContent = textContent;
|
253
|
+
}
|
254
|
+
return d;
|
255
|
+
}
|
256
|
+
|
257
|
+
var opMap = null;
|
258
|
+
|
259
|
+
function simplifyArgs(args) {
|
260
|
+
if (typeof args === 'string') {
|
261
|
+
var MAX_STRING_LENGTH = 75;
|
262
|
+
return args.length <= MAX_STRING_LENGTH ? args :
|
263
|
+
args.substr(0, MAX_STRING_LENGTH) + '...';
|
264
|
+
}
|
265
|
+
if (typeof args !== 'object' || args === null) {
|
266
|
+
return args;
|
267
|
+
}
|
268
|
+
if ('length' in args) { // array
|
269
|
+
var simpleArgs = [], i, ii;
|
270
|
+
var MAX_ITEMS = 10;
|
271
|
+
for (i = 0, ii = Math.min(MAX_ITEMS, args.length); i < ii; i++) {
|
272
|
+
simpleArgs.push(simplifyArgs(args[i]));
|
273
|
+
}
|
274
|
+
if (i < args.length) {
|
275
|
+
simpleArgs.push('...');
|
276
|
+
}
|
277
|
+
return simpleArgs;
|
278
|
+
}
|
279
|
+
var simpleObj = {};
|
280
|
+
for (var key in args) {
|
281
|
+
simpleObj[key] = simplifyArgs(args[key]);
|
282
|
+
}
|
283
|
+
return simpleObj;
|
284
|
+
}
|
285
|
+
|
286
|
+
function Stepper(panel, pageIndex, initialBreakPoints) {
|
287
|
+
this.panel = panel;
|
288
|
+
this.breakPoint = 0;
|
289
|
+
this.nextBreakPoint = null;
|
290
|
+
this.pageIndex = pageIndex;
|
291
|
+
this.breakPoints = initialBreakPoints;
|
292
|
+
this.currentIdx = -1;
|
293
|
+
this.operatorListIdx = 0;
|
294
|
+
}
|
295
|
+
Stepper.prototype = {
|
296
|
+
init: function init() {
|
297
|
+
var panel = this.panel;
|
298
|
+
var content = c('div', 'c=continue, s=step');
|
299
|
+
var table = c('table');
|
300
|
+
content.appendChild(table);
|
301
|
+
table.cellSpacing = 0;
|
302
|
+
var headerRow = c('tr');
|
303
|
+
table.appendChild(headerRow);
|
304
|
+
headerRow.appendChild(c('th', 'Break'));
|
305
|
+
headerRow.appendChild(c('th', 'Idx'));
|
306
|
+
headerRow.appendChild(c('th', 'fn'));
|
307
|
+
headerRow.appendChild(c('th', 'args'));
|
308
|
+
panel.appendChild(content);
|
309
|
+
this.table = table;
|
310
|
+
if (!opMap) {
|
311
|
+
opMap = Object.create(null);
|
312
|
+
for (var key in PDFJS.OPS) {
|
313
|
+
opMap[PDFJS.OPS[key]] = key;
|
314
|
+
}
|
315
|
+
}
|
316
|
+
},
|
317
|
+
updateOperatorList: function updateOperatorList(operatorList) {
|
318
|
+
var self = this;
|
319
|
+
|
320
|
+
function cboxOnClick() {
|
321
|
+
var x = +this.dataset.idx;
|
322
|
+
if (this.checked) {
|
323
|
+
self.breakPoints.push(x);
|
324
|
+
} else {
|
325
|
+
self.breakPoints.splice(self.breakPoints.indexOf(x), 1);
|
326
|
+
}
|
327
|
+
StepperManager.saveBreakPoints(self.pageIndex, self.breakPoints);
|
328
|
+
}
|
329
|
+
|
330
|
+
var MAX_OPERATORS_COUNT = 15000;
|
331
|
+
if (this.operatorListIdx > MAX_OPERATORS_COUNT) {
|
332
|
+
return;
|
333
|
+
}
|
334
|
+
|
335
|
+
var chunk = document.createDocumentFragment();
|
336
|
+
var operatorsToDisplay = Math.min(MAX_OPERATORS_COUNT,
|
337
|
+
operatorList.fnArray.length);
|
338
|
+
for (var i = this.operatorListIdx; i < operatorsToDisplay; i++) {
|
339
|
+
var line = c('tr');
|
340
|
+
line.className = 'line';
|
341
|
+
line.dataset.idx = i;
|
342
|
+
chunk.appendChild(line);
|
343
|
+
var checked = this.breakPoints.indexOf(i) !== -1;
|
344
|
+
var args = operatorList.argsArray[i] || [];
|
345
|
+
|
346
|
+
var breakCell = c('td');
|
347
|
+
var cbox = c('input');
|
348
|
+
cbox.type = 'checkbox';
|
349
|
+
cbox.className = 'points';
|
350
|
+
cbox.checked = checked;
|
351
|
+
cbox.dataset.idx = i;
|
352
|
+
cbox.onclick = cboxOnClick;
|
353
|
+
|
354
|
+
breakCell.appendChild(cbox);
|
355
|
+
line.appendChild(breakCell);
|
356
|
+
line.appendChild(c('td', i.toString()));
|
357
|
+
var fn = opMap[operatorList.fnArray[i]];
|
358
|
+
var decArgs = args;
|
359
|
+
if (fn === 'showText') {
|
360
|
+
var glyphs = args[0];
|
361
|
+
var newArgs = [];
|
362
|
+
var str = [];
|
363
|
+
for (var j = 0; j < glyphs.length; j++) {
|
364
|
+
var glyph = glyphs[j];
|
365
|
+
if (typeof glyph === 'object' && glyph !== null) {
|
366
|
+
str.push(glyph.fontChar);
|
367
|
+
} else {
|
368
|
+
if (str.length > 0) {
|
369
|
+
newArgs.push(str.join(''));
|
370
|
+
str = [];
|
371
|
+
}
|
372
|
+
newArgs.push(glyph); // null or number
|
373
|
+
}
|
374
|
+
}
|
375
|
+
if (str.length > 0) {
|
376
|
+
newArgs.push(str.join(''));
|
377
|
+
}
|
378
|
+
decArgs = [newArgs];
|
379
|
+
}
|
380
|
+
line.appendChild(c('td', fn));
|
381
|
+
line.appendChild(c('td', JSON.stringify(simplifyArgs(decArgs))));
|
382
|
+
}
|
383
|
+
if (operatorsToDisplay < operatorList.fnArray.length) {
|
384
|
+
line = c('tr');
|
385
|
+
var lastCell = c('td', '...');
|
386
|
+
lastCell.colspan = 4;
|
387
|
+
chunk.appendChild(lastCell);
|
388
|
+
}
|
389
|
+
this.operatorListIdx = operatorList.fnArray.length;
|
390
|
+
this.table.appendChild(chunk);
|
391
|
+
},
|
392
|
+
getNextBreakPoint: function getNextBreakPoint() {
|
393
|
+
this.breakPoints.sort(function(a, b) { return a - b; });
|
394
|
+
for (var i = 0; i < this.breakPoints.length; i++) {
|
395
|
+
if (this.breakPoints[i] > this.currentIdx) {
|
396
|
+
return this.breakPoints[i];
|
397
|
+
}
|
398
|
+
}
|
399
|
+
return null;
|
400
|
+
},
|
401
|
+
breakIt: function breakIt(idx, callback) {
|
402
|
+
StepperManager.selectStepper(this.pageIndex, true);
|
403
|
+
var self = this;
|
404
|
+
var dom = document;
|
405
|
+
self.currentIdx = idx;
|
406
|
+
var listener = function(e) {
|
407
|
+
switch (e.keyCode) {
|
408
|
+
case 83: // step
|
409
|
+
dom.removeEventListener('keydown', listener, false);
|
410
|
+
self.nextBreakPoint = self.currentIdx + 1;
|
411
|
+
self.goTo(-1);
|
412
|
+
callback();
|
413
|
+
break;
|
414
|
+
case 67: // continue
|
415
|
+
dom.removeEventListener('keydown', listener, false);
|
416
|
+
var breakPoint = self.getNextBreakPoint();
|
417
|
+
self.nextBreakPoint = breakPoint;
|
418
|
+
self.goTo(-1);
|
419
|
+
callback();
|
420
|
+
break;
|
421
|
+
}
|
422
|
+
};
|
423
|
+
dom.addEventListener('keydown', listener, false);
|
424
|
+
self.goTo(idx);
|
425
|
+
},
|
426
|
+
goTo: function goTo(idx) {
|
427
|
+
var allRows = this.panel.getElementsByClassName('line');
|
428
|
+
for (var x = 0, xx = allRows.length; x < xx; ++x) {
|
429
|
+
var row = allRows[x];
|
430
|
+
if ((row.dataset.idx | 0) === idx) {
|
431
|
+
row.style.backgroundColor = 'rgb(251,250,207)';
|
432
|
+
row.scrollIntoView();
|
433
|
+
} else {
|
434
|
+
row.style.backgroundColor = null;
|
435
|
+
}
|
436
|
+
}
|
437
|
+
}
|
438
|
+
};
|
439
|
+
return Stepper;
|
440
|
+
})();
|
441
|
+
|
442
|
+
var Stats = (function Stats() {
|
443
|
+
var stats = [];
|
444
|
+
function clear(node) {
|
445
|
+
while (node.hasChildNodes()) {
|
446
|
+
node.removeChild(node.lastChild);
|
447
|
+
}
|
448
|
+
}
|
449
|
+
function getStatIndex(pageNumber) {
|
450
|
+
for (var i = 0, ii = stats.length; i < ii; ++i) {
|
451
|
+
if (stats[i].pageNumber === pageNumber) {
|
452
|
+
return i;
|
453
|
+
}
|
454
|
+
}
|
455
|
+
return false;
|
456
|
+
}
|
457
|
+
return {
|
458
|
+
// Properties/functions needed by PDFBug.
|
459
|
+
id: 'Stats',
|
460
|
+
name: 'Stats',
|
461
|
+
panel: null,
|
462
|
+
manager: null,
|
463
|
+
init: function init() {
|
464
|
+
this.panel.setAttribute('style', 'padding: 5px;');
|
465
|
+
PDFJS.enableStats = true;
|
466
|
+
},
|
467
|
+
enabled: false,
|
468
|
+
active: false,
|
469
|
+
// Stats specific functions.
|
470
|
+
add: function(pageNumber, stat) {
|
471
|
+
if (!stat) {
|
472
|
+
return;
|
473
|
+
}
|
474
|
+
var statsIndex = getStatIndex(pageNumber);
|
475
|
+
if (statsIndex !== false) {
|
476
|
+
var b = stats[statsIndex];
|
477
|
+
this.panel.removeChild(b.div);
|
478
|
+
stats.splice(statsIndex, 1);
|
479
|
+
}
|
480
|
+
var wrapper = document.createElement('div');
|
481
|
+
wrapper.className = 'stats';
|
482
|
+
var title = document.createElement('div');
|
483
|
+
title.className = 'title';
|
484
|
+
title.textContent = 'Page: ' + pageNumber;
|
485
|
+
var statsDiv = document.createElement('div');
|
486
|
+
statsDiv.textContent = stat.toString();
|
487
|
+
wrapper.appendChild(title);
|
488
|
+
wrapper.appendChild(statsDiv);
|
489
|
+
stats.push({ pageNumber: pageNumber, div: wrapper });
|
490
|
+
stats.sort(function(a, b) { return a.pageNumber - b.pageNumber; });
|
491
|
+
clear(this.panel);
|
492
|
+
for (var i = 0, ii = stats.length; i < ii; ++i) {
|
493
|
+
this.panel.appendChild(stats[i].div);
|
494
|
+
}
|
495
|
+
},
|
496
|
+
cleanup: function () {
|
497
|
+
stats = [];
|
498
|
+
clear(this.panel);
|
499
|
+
}
|
500
|
+
};
|
501
|
+
})();
|
502
|
+
|
503
|
+
// Manages all the debugging tools.
|
504
|
+
var PDFBug = (function PDFBugClosure() {
|
505
|
+
var panelWidth = 300;
|
506
|
+
var buttons = [];
|
507
|
+
var activePanel = null;
|
508
|
+
|
509
|
+
return {
|
510
|
+
tools: [
|
511
|
+
FontInspector,
|
512
|
+
StepperManager,
|
513
|
+
Stats
|
514
|
+
],
|
515
|
+
enable: function(ids) {
|
516
|
+
var all = false, tools = this.tools;
|
517
|
+
if (ids.length === 1 && ids[0] === 'all') {
|
518
|
+
all = true;
|
519
|
+
}
|
520
|
+
for (var i = 0; i < tools.length; ++i) {
|
521
|
+
var tool = tools[i];
|
522
|
+
if (all || ids.indexOf(tool.id) !== -1) {
|
523
|
+
tool.enabled = true;
|
524
|
+
}
|
525
|
+
}
|
526
|
+
if (!all) {
|
527
|
+
// Sort the tools by the order they are enabled.
|
528
|
+
tools.sort(function(a, b) {
|
529
|
+
var indexA = ids.indexOf(a.id);
|
530
|
+
indexA = indexA < 0 ? tools.length : indexA;
|
531
|
+
var indexB = ids.indexOf(b.id);
|
532
|
+
indexB = indexB < 0 ? tools.length : indexB;
|
533
|
+
return indexA - indexB;
|
534
|
+
});
|
535
|
+
}
|
536
|
+
},
|
537
|
+
init: function init() {
|
538
|
+
/*
|
539
|
+
* Basic Layout:
|
540
|
+
* PDFBug
|
541
|
+
* Controls
|
542
|
+
* Panels
|
543
|
+
* Panel
|
544
|
+
* Panel
|
545
|
+
* ...
|
546
|
+
*/
|
547
|
+
var ui = document.createElement('div');
|
548
|
+
ui.id = 'PDFBug';
|
549
|
+
|
550
|
+
var controls = document.createElement('div');
|
551
|
+
controls.setAttribute('class', 'controls');
|
552
|
+
ui.appendChild(controls);
|
553
|
+
|
554
|
+
var panels = document.createElement('div');
|
555
|
+
panels.setAttribute('class', 'panels');
|
556
|
+
ui.appendChild(panels);
|
557
|
+
|
558
|
+
var container = document.getElementById('viewerContainer');
|
559
|
+
container.appendChild(ui);
|
560
|
+
container.style.right = panelWidth + 'px';
|
561
|
+
|
562
|
+
// Initialize all the debugging tools.
|
563
|
+
var tools = this.tools;
|
564
|
+
var self = this;
|
565
|
+
for (var i = 0; i < tools.length; ++i) {
|
566
|
+
var tool = tools[i];
|
567
|
+
var panel = document.createElement('div');
|
568
|
+
var panelButton = document.createElement('button');
|
569
|
+
panelButton.textContent = tool.name;
|
570
|
+
panelButton.addEventListener('click', (function(selected) {
|
571
|
+
return function(event) {
|
572
|
+
event.preventDefault();
|
573
|
+
self.selectPanel(selected);
|
574
|
+
};
|
575
|
+
})(i));
|
576
|
+
controls.appendChild(panelButton);
|
577
|
+
panels.appendChild(panel);
|
578
|
+
tool.panel = panel;
|
579
|
+
tool.manager = this;
|
580
|
+
if (tool.enabled) {
|
581
|
+
tool.init();
|
582
|
+
} else {
|
583
|
+
panel.textContent = tool.name + ' is disabled. To enable add ' +
|
584
|
+
' "' + tool.id + '" to the pdfBug parameter ' +
|
585
|
+
'and refresh (seperate multiple by commas).';
|
586
|
+
}
|
587
|
+
buttons.push(panelButton);
|
588
|
+
}
|
589
|
+
this.selectPanel(0);
|
590
|
+
},
|
591
|
+
cleanup: function cleanup() {
|
592
|
+
for (var i = 0, ii = this.tools.length; i < ii; i++) {
|
593
|
+
if (this.tools[i].enabled) {
|
594
|
+
this.tools[i].cleanup();
|
595
|
+
}
|
596
|
+
}
|
597
|
+
},
|
598
|
+
selectPanel: function selectPanel(index) {
|
599
|
+
if (typeof index !== 'number') {
|
600
|
+
index = this.tools.indexOf(index);
|
601
|
+
}
|
602
|
+
if (index === activePanel) {
|
603
|
+
return;
|
604
|
+
}
|
605
|
+
activePanel = index;
|
606
|
+
var tools = this.tools;
|
607
|
+
for (var j = 0; j < tools.length; ++j) {
|
608
|
+
if (j === index) {
|
609
|
+
buttons[j].setAttribute('class', 'active');
|
610
|
+
tools[j].active = true;
|
611
|
+
tools[j].panel.removeAttribute('hidden');
|
612
|
+
} else {
|
613
|
+
buttons[j].setAttribute('class', '');
|
614
|
+
tools[j].active = false;
|
615
|
+
tools[j].panel.setAttribute('hidden', 'true');
|
616
|
+
}
|
617
|
+
}
|
618
|
+
}
|
619
|
+
};
|
620
|
+
})();
|