pdfjs_rails 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (125) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +37 -0
  6. data/Rakefile +1 -0
  7. data/lib/generators/pdfjs_rails/install_generator.rb +13 -0
  8. data/lib/pdfjs/build/pdf.js +7071 -0
  9. data/lib/pdfjs/build/pdf.worker.js +38687 -0
  10. data/lib/pdfjs/web/compatibility.js +471 -0
  11. data/lib/pdfjs/web/debugger.js +532 -0
  12. data/lib/pdfjs/web/images/annotation-check.svg +10 -0
  13. data/lib/pdfjs/web/images/annotation-comment.svg +15 -0
  14. data/lib/pdfjs/web/images/annotation-help.svg +25 -0
  15. data/lib/pdfjs/web/images/annotation-insert.svg +9 -0
  16. data/lib/pdfjs/web/images/annotation-key.svg +10 -0
  17. data/lib/pdfjs/web/images/annotation-newparagraph.svg +10 -0
  18. data/lib/pdfjs/web/images/annotation-note.svg +41 -0
  19. data/lib/pdfjs/web/images/annotation-paragraph.svg +15 -0
  20. data/lib/pdfjs/web/images/findbarButton-next-rtl.png +0 -0
  21. data/lib/pdfjs/web/images/findbarButton-next.png +0 -0
  22. data/lib/pdfjs/web/images/findbarButton-previous-rtl.png +0 -0
  23. data/lib/pdfjs/web/images/findbarButton-previous.png +0 -0
  24. data/lib/pdfjs/web/images/loading-icon.gif +0 -0
  25. data/lib/pdfjs/web/images/loading-small.png +0 -0
  26. data/lib/pdfjs/web/images/secondaryToolbarButton-firstPage.png +0 -0
  27. data/lib/pdfjs/web/images/secondaryToolbarButton-lastPage.png +0 -0
  28. data/lib/pdfjs/web/images/secondaryToolbarButton-rotateCcw.png +0 -0
  29. data/lib/pdfjs/web/images/secondaryToolbarButton-rotateCw.png +0 -0
  30. data/lib/pdfjs/web/images/shadow.png +0 -0
  31. data/lib/pdfjs/web/images/texture.png +0 -0
  32. data/lib/pdfjs/web/images/toolbarButton-bookmark.png +0 -0
  33. data/lib/pdfjs/web/images/toolbarButton-download.png +0 -0
  34. data/lib/pdfjs/web/images/toolbarButton-menuArrows.png +0 -0
  35. data/lib/pdfjs/web/images/toolbarButton-openFile.png +0 -0
  36. data/lib/pdfjs/web/images/toolbarButton-pageDown-rtl.png +0 -0
  37. data/lib/pdfjs/web/images/toolbarButton-pageDown.png +0 -0
  38. data/lib/pdfjs/web/images/toolbarButton-pageUp-rtl.png +0 -0
  39. data/lib/pdfjs/web/images/toolbarButton-pageUp.png +0 -0
  40. data/lib/pdfjs/web/images/toolbarButton-presentationMode.png +0 -0
  41. data/lib/pdfjs/web/images/toolbarButton-print.png +0 -0
  42. data/lib/pdfjs/web/images/toolbarButton-search.png +0 -0
  43. data/lib/pdfjs/web/images/toolbarButton-secondaryToolbarToggle.png +0 -0
  44. data/lib/pdfjs/web/images/toolbarButton-sidebarToggle.png +0 -0
  45. data/lib/pdfjs/web/images/toolbarButton-viewOutline.png +0 -0
  46. data/lib/pdfjs/web/images/toolbarButton-viewThumbnail.png +0 -0
  47. data/lib/pdfjs/web/images/toolbarButton-zoomIn.png +0 -0
  48. data/lib/pdfjs/web/images/toolbarButton-zoomOut.png +0 -0
  49. data/lib/pdfjs/web/l10n.js +922 -0
  50. data/lib/pdfjs/web/locale/ar/viewer.properties +112 -0
  51. data/lib/pdfjs/web/locale/ca/viewer.properties +131 -0
  52. data/lib/pdfjs/web/locale/cs/viewer.properties +58 -0
  53. data/lib/pdfjs/web/locale/da/viewer.properties +132 -0
  54. data/lib/pdfjs/web/locale/de/viewer.properties +128 -0
  55. data/lib/pdfjs/web/locale/el/viewer.properties +124 -0
  56. data/lib/pdfjs/web/locale/en-US/viewer.properties +134 -0
  57. data/lib/pdfjs/web/locale/es/viewer.properties +131 -0
  58. data/lib/pdfjs/web/locale/fi/viewer.properties +129 -0
  59. data/lib/pdfjs/web/locale/fr/viewer.properties +130 -0
  60. data/lib/pdfjs/web/locale/he/viewer.properties +59 -0
  61. data/lib/pdfjs/web/locale/it/viewer.properties +44 -0
  62. data/lib/pdfjs/web/locale/ja/viewer.properties +132 -0
  63. data/lib/pdfjs/web/locale/ko/viewer.properties +131 -0
  64. data/lib/pdfjs/web/locale/locale.properties +78 -0
  65. data/lib/pdfjs/web/locale/lt/viewer.properties +129 -0
  66. data/lib/pdfjs/web/locale/nl/viewer.properties +134 -0
  67. data/lib/pdfjs/web/locale/pl/viewer.properties +132 -0
  68. data/lib/pdfjs/web/locale/pt-BR/viewer.properties +44 -0
  69. data/lib/pdfjs/web/locale/ro/viewer.properties +55 -0
  70. data/lib/pdfjs/web/locale/ru/viewer.properties +62 -0
  71. data/lib/pdfjs/web/locale/sr/viewer.properties +55 -0
  72. data/lib/pdfjs/web/locale/sv/viewer.properties +134 -0
  73. data/lib/pdfjs/web/locale/tr/viewer.properties +129 -0
  74. data/lib/pdfjs/web/locale/vi/viewer.properties +131 -0
  75. data/lib/pdfjs/web/locale/zh-CN/viewer.properties +129 -0
  76. data/lib/pdfjs/web/locale/zh-TW/viewer.properties +132 -0
  77. data/lib/pdfjs/web/viewer.css +1544 -0
  78. data/lib/pdfjs/web/viewer.html +250 -0
  79. data/lib/pdfjs/web/viewer.js +4477 -0
  80. data/lib/pdfjs_rails.rb +6 -0
  81. data/lib/pdfjs_rails/railtie.rb +9 -0
  82. data/lib/pdfjs_rails/version.rb +3 -0
  83. data/lib/pdfjs_rails/view_helpers.rb +225 -0
  84. data/pdfjs_rails.gemspec +24 -0
  85. data/vender/assets/images/annotation-check.svg +10 -0
  86. data/vender/assets/images/annotation-comment.svg +15 -0
  87. data/vender/assets/images/annotation-help.svg +25 -0
  88. data/vender/assets/images/annotation-insert.svg +9 -0
  89. data/vender/assets/images/annotation-key.svg +10 -0
  90. data/vender/assets/images/annotation-newparagraph.svg +10 -0
  91. data/vender/assets/images/annotation-note.svg +41 -0
  92. data/vender/assets/images/annotation-paragraph.svg +15 -0
  93. data/vender/assets/images/findbarButton-next-rtl.png +0 -0
  94. data/vender/assets/images/findbarButton-next.png +0 -0
  95. data/vender/assets/images/findbarButton-previous-rtl.png +0 -0
  96. data/vender/assets/images/findbarButton-previous.png +0 -0
  97. data/vender/assets/images/loading-icon.gif +0 -0
  98. data/vender/assets/images/loading-small.png +0 -0
  99. data/vender/assets/images/shadow.png +0 -0
  100. data/vender/assets/images/texture.png +0 -0
  101. data/vender/assets/images/toolbarButton-bookmark.png +0 -0
  102. data/vender/assets/images/toolbarButton-download.png +0 -0
  103. data/vender/assets/images/toolbarButton-menuArrows.png +0 -0
  104. data/vender/assets/images/toolbarButton-openFile.png +0 -0
  105. data/vender/assets/images/toolbarButton-pageDown-rtl.png +0 -0
  106. data/vender/assets/images/toolbarButton-pageDown.png +0 -0
  107. data/vender/assets/images/toolbarButton-pageUp-rtl.png +0 -0
  108. data/vender/assets/images/toolbarButton-pageUp.png +0 -0
  109. data/vender/assets/images/toolbarButton-presentationMode.png +0 -0
  110. data/vender/assets/images/toolbarButton-print.png +0 -0
  111. data/vender/assets/images/toolbarButton-search.png +0 -0
  112. data/vender/assets/images/toolbarButton-sidebarToggle.png +0 -0
  113. data/vender/assets/images/toolbarButton-viewOutline.png +0 -0
  114. data/vender/assets/images/toolbarButton-viewThumbnail.png +0 -0
  115. data/vender/assets/images/toolbarButton-zoomIn.png +0 -0
  116. data/vender/assets/images/toolbarButton-zoomOut.png +0 -0
  117. data/vender/assets/javascripts/application.js +22 -0
  118. data/vender/assets/javascripts/compatibility.js +471 -0
  119. data/vender/assets/javascripts/debugger.js +532 -0
  120. data/vender/assets/javascripts/l10n.js +922 -0
  121. data/vender/assets/javascripts/pdf.js +7063 -0
  122. data/vender/assets/javascripts/pdf.worker.js +38679 -0
  123. data/vender/assets/javascripts/viewer.js +4317 -0
  124. data/vender/assets/stylesheets/viewer.css +1382 -0
  125. metadata +209 -0
@@ -0,0 +1,471 @@
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 VBArray, PDFJS */
18
+
19
+ 'use strict';
20
+
21
+ // Initializing PDFJS global object here, it case if we need to change/disable
22
+ // some PDF.js features, e.g. range requests
23
+ if (typeof PDFJS === 'undefined') {
24
+ (typeof window !== 'undefined' ? window : this).PDFJS = {};
25
+ }
26
+
27
+ // Checking if the typed arrays are supported
28
+ (function checkTypedArrayCompatibility() {
29
+ if (typeof Uint8Array !== 'undefined') {
30
+ // some mobile versions do not support subarray (e.g. safari 5 / iOS)
31
+ if (typeof Uint8Array.prototype.subarray === 'undefined') {
32
+ Uint8Array.prototype.subarray = function subarray(start, end) {
33
+ return new Uint8Array(this.slice(start, end));
34
+ };
35
+ Float32Array.prototype.subarray = function subarray(start, end) {
36
+ return new Float32Array(this.slice(start, end));
37
+ };
38
+ }
39
+
40
+ // some mobile version might not support Float64Array
41
+ if (typeof Float64Array === 'undefined')
42
+ window.Float64Array = Float32Array;
43
+
44
+ return;
45
+ }
46
+
47
+ function subarray(start, end) {
48
+ return new TypedArray(this.slice(start, end));
49
+ }
50
+
51
+ function setArrayOffset(array, offset) {
52
+ if (arguments.length < 2)
53
+ offset = 0;
54
+ for (var i = 0, n = array.length; i < n; ++i, ++offset)
55
+ this[offset] = array[i] & 0xFF;
56
+ }
57
+
58
+ function TypedArray(arg1) {
59
+ var result;
60
+ if (typeof arg1 === 'number') {
61
+ result = [];
62
+ for (var i = 0; i < arg1; ++i)
63
+ result[i] = 0;
64
+ } else if ('slice' in arg1) {
65
+ result = arg1.slice(0);
66
+ } else {
67
+ result = [];
68
+ for (var i = 0, n = arg1.length; i < n; ++i) {
69
+ result[i] = arg1[i];
70
+ }
71
+ }
72
+
73
+ result.subarray = subarray;
74
+ result.buffer = result;
75
+ result.byteLength = result.length;
76
+ result.set = setArrayOffset;
77
+
78
+ if (typeof arg1 === 'object' && arg1.buffer)
79
+ result.buffer = arg1.buffer;
80
+
81
+ return result;
82
+ }
83
+
84
+ window.Uint8Array = TypedArray;
85
+
86
+ // we don't need support for set, byteLength for 32-bit array
87
+ // so we can use the TypedArray as well
88
+ window.Uint32Array = TypedArray;
89
+ window.Int32Array = TypedArray;
90
+ window.Uint16Array = TypedArray;
91
+ window.Float32Array = TypedArray;
92
+ window.Float64Array = TypedArray;
93
+ })();
94
+
95
+ // URL = URL || webkitURL
96
+ (function normalizeURLObject() {
97
+ if (!window.URL) {
98
+ window.URL = window.webkitURL;
99
+ }
100
+ })();
101
+
102
+ // Object.create() ?
103
+ (function checkObjectCreateCompatibility() {
104
+ if (typeof Object.create !== 'undefined')
105
+ return;
106
+
107
+ Object.create = function objectCreate(proto) {
108
+ function Constructor() {}
109
+ Constructor.prototype = proto;
110
+ return new Constructor();
111
+ };
112
+ })();
113
+
114
+ // Object.defineProperty() ?
115
+ (function checkObjectDefinePropertyCompatibility() {
116
+ if (typeof Object.defineProperty !== 'undefined') {
117
+ var definePropertyPossible = true;
118
+ try {
119
+ // some browsers (e.g. safari) cannot use defineProperty() on DOM objects
120
+ // and thus the native version is not sufficient
121
+ Object.defineProperty(new Image(), 'id', { value: 'test' });
122
+ // ... another test for android gb browser for non-DOM objects
123
+ var Test = function Test() {};
124
+ Test.prototype = { get id() { } };
125
+ Object.defineProperty(new Test(), 'id',
126
+ { value: '', configurable: true, enumerable: true, writable: false });
127
+ } catch (e) {
128
+ definePropertyPossible = false;
129
+ }
130
+ if (definePropertyPossible) return;
131
+ }
132
+
133
+ Object.defineProperty = function objectDefineProperty(obj, name, def) {
134
+ delete obj[name];
135
+ if ('get' in def)
136
+ obj.__defineGetter__(name, def['get']);
137
+ if ('set' in def)
138
+ obj.__defineSetter__(name, def['set']);
139
+ if ('value' in def) {
140
+ obj.__defineSetter__(name, function objectDefinePropertySetter(value) {
141
+ this.__defineGetter__(name, function objectDefinePropertyGetter() {
142
+ return value;
143
+ });
144
+ return value;
145
+ });
146
+ obj[name] = def.value;
147
+ }
148
+ };
149
+ })();
150
+
151
+ // Object.keys() ?
152
+ (function checkObjectKeysCompatibility() {
153
+ if (typeof Object.keys !== 'undefined')
154
+ return;
155
+
156
+ Object.keys = function objectKeys(obj) {
157
+ var result = [];
158
+ for (var i in obj) {
159
+ if (obj.hasOwnProperty(i))
160
+ result.push(i);
161
+ }
162
+ return result;
163
+ };
164
+ })();
165
+
166
+ // No readAsArrayBuffer ?
167
+ (function checkFileReaderReadAsArrayBuffer() {
168
+ if (typeof FileReader === 'undefined')
169
+ return; // FileReader is not implemented
170
+ var frPrototype = FileReader.prototype;
171
+ // Older versions of Firefox might not have readAsArrayBuffer
172
+ if ('readAsArrayBuffer' in frPrototype)
173
+ return; // readAsArrayBuffer is implemented
174
+ Object.defineProperty(frPrototype, 'readAsArrayBuffer', {
175
+ value: function fileReaderReadAsArrayBuffer(blob) {
176
+ var fileReader = new FileReader();
177
+ var originalReader = this;
178
+ fileReader.onload = function fileReaderOnload(evt) {
179
+ var data = evt.target.result;
180
+ var buffer = new ArrayBuffer(data.length);
181
+ var uint8Array = new Uint8Array(buffer);
182
+
183
+ for (var i = 0, ii = data.length; i < ii; i++)
184
+ uint8Array[i] = data.charCodeAt(i);
185
+
186
+ Object.defineProperty(originalReader, 'result', {
187
+ value: buffer,
188
+ enumerable: true,
189
+ writable: false,
190
+ configurable: true
191
+ });
192
+
193
+ var event = document.createEvent('HTMLEvents');
194
+ event.initEvent('load', false, false);
195
+ originalReader.dispatchEvent(event);
196
+ };
197
+ fileReader.readAsBinaryString(blob);
198
+ }
199
+ });
200
+ })();
201
+
202
+ // No XMLHttpRequest.response ?
203
+ (function checkXMLHttpRequestResponseCompatibility() {
204
+ var xhrPrototype = XMLHttpRequest.prototype;
205
+ if (!('overrideMimeType' in xhrPrototype)) {
206
+ // IE10 might have response, but not overrideMimeType
207
+ Object.defineProperty(xhrPrototype, 'overrideMimeType', {
208
+ value: function xmlHttpRequestOverrideMimeType(mimeType) {}
209
+ });
210
+ }
211
+ if ('response' in xhrPrototype ||
212
+ 'mozResponseArrayBuffer' in xhrPrototype ||
213
+ 'mozResponse' in xhrPrototype ||
214
+ 'responseArrayBuffer' in xhrPrototype)
215
+ return;
216
+ // IE9 ?
217
+ if (typeof VBArray !== 'undefined') {
218
+ Object.defineProperty(xhrPrototype, 'response', {
219
+ get: function xmlHttpRequestResponseGet() {
220
+ return new Uint8Array(new VBArray(this.responseBody).toArray());
221
+ }
222
+ });
223
+ return;
224
+ }
225
+
226
+ // other browsers
227
+ function responseTypeSetter() {
228
+ // will be only called to set "arraybuffer"
229
+ this.overrideMimeType('text/plain; charset=x-user-defined');
230
+ }
231
+ if (typeof xhrPrototype.overrideMimeType === 'function') {
232
+ Object.defineProperty(xhrPrototype, 'responseType',
233
+ { set: responseTypeSetter });
234
+ }
235
+ function responseGetter() {
236
+ var text = this.responseText;
237
+ var i, n = text.length;
238
+ var result = new Uint8Array(n);
239
+ for (i = 0; i < n; ++i)
240
+ result[i] = text.charCodeAt(i) & 0xFF;
241
+ return result;
242
+ }
243
+ Object.defineProperty(xhrPrototype, 'response', { get: responseGetter });
244
+ })();
245
+
246
+ // window.btoa (base64 encode function) ?
247
+ (function checkWindowBtoaCompatibility() {
248
+ if ('btoa' in window)
249
+ return;
250
+
251
+ var digits =
252
+ 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
253
+
254
+ window.btoa = function windowBtoa(chars) {
255
+ var buffer = '';
256
+ var i, n;
257
+ for (i = 0, n = chars.length; i < n; i += 3) {
258
+ var b1 = chars.charCodeAt(i) & 0xFF;
259
+ var b2 = chars.charCodeAt(i + 1) & 0xFF;
260
+ var b3 = chars.charCodeAt(i + 2) & 0xFF;
261
+ var d1 = b1 >> 2, d2 = ((b1 & 3) << 4) | (b2 >> 4);
262
+ var d3 = i + 1 < n ? ((b2 & 0xF) << 2) | (b3 >> 6) : 64;
263
+ var d4 = i + 2 < n ? (b3 & 0x3F) : 64;
264
+ buffer += (digits.charAt(d1) + digits.charAt(d2) +
265
+ digits.charAt(d3) + digits.charAt(d4));
266
+ }
267
+ return buffer;
268
+ };
269
+ })();
270
+
271
+ // window.atob (base64 encode function) ?
272
+ (function checkWindowAtobCompatibility() {
273
+ if ('atob' in window)
274
+ return;
275
+
276
+ // https://github.com/davidchambers/Base64.js
277
+ var digits =
278
+ 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
279
+ window.atob = function (input) {
280
+ input = input.replace(/=+$/, '');
281
+ if (input.length % 4 == 1) throw new Error('bad atob input');
282
+ for (
283
+ // initialize result and counters
284
+ var bc = 0, bs, buffer, idx = 0, output = '';
285
+ // get next character
286
+ buffer = input.charAt(idx++);
287
+ // character found in table?
288
+ // initialize bit storage and add its ascii value
289
+ ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,
290
+ // and if not first of each 4 characters,
291
+ // convert the first 8 bits to one ascii character
292
+ bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0
293
+ ) {
294
+ // try to find character in table (0-63, not found => -1)
295
+ buffer = digits.indexOf(buffer);
296
+ }
297
+ return output;
298
+ };
299
+ })();
300
+
301
+ // Function.prototype.bind ?
302
+ (function checkFunctionPrototypeBindCompatibility() {
303
+ if (typeof Function.prototype.bind !== 'undefined')
304
+ return;
305
+
306
+ Function.prototype.bind = function functionPrototypeBind(obj) {
307
+ var fn = this, headArgs = Array.prototype.slice.call(arguments, 1);
308
+ var bound = function functionPrototypeBindBound() {
309
+ var args = Array.prototype.concat.apply(headArgs, arguments);
310
+ return fn.apply(obj, args);
311
+ };
312
+ return bound;
313
+ };
314
+ })();
315
+
316
+ // HTMLElement dataset property
317
+ (function checkDatasetProperty() {
318
+ var div = document.createElement('div');
319
+ if ('dataset' in div)
320
+ return; // dataset property exists
321
+
322
+ Object.defineProperty(HTMLElement.prototype, 'dataset', {
323
+ get: function() {
324
+ if (this._dataset)
325
+ return this._dataset;
326
+
327
+ var dataset = {};
328
+ for (var j = 0, jj = this.attributes.length; j < jj; j++) {
329
+ var attribute = this.attributes[j];
330
+ if (attribute.name.substring(0, 5) != 'data-')
331
+ continue;
332
+ var key = attribute.name.substring(5).replace(/\-([a-z])/g,
333
+ function(all, ch) { return ch.toUpperCase(); });
334
+ dataset[key] = attribute.value;
335
+ }
336
+
337
+ Object.defineProperty(this, '_dataset', {
338
+ value: dataset,
339
+ writable: false,
340
+ enumerable: false
341
+ });
342
+ return dataset;
343
+ },
344
+ enumerable: true
345
+ });
346
+ })();
347
+
348
+ // HTMLElement classList property
349
+ (function checkClassListProperty() {
350
+ var div = document.createElement('div');
351
+ if ('classList' in div)
352
+ return; // classList property exists
353
+
354
+ function changeList(element, itemName, add, remove) {
355
+ var s = element.className || '';
356
+ var list = s.split(/\s+/g);
357
+ if (list[0] === '') list.shift();
358
+ var index = list.indexOf(itemName);
359
+ if (index < 0 && add)
360
+ list.push(itemName);
361
+ if (index >= 0 && remove)
362
+ list.splice(index, 1);
363
+ element.className = list.join(' ');
364
+ }
365
+
366
+ var classListPrototype = {
367
+ add: function(name) {
368
+ changeList(this.element, name, true, false);
369
+ },
370
+ remove: function(name) {
371
+ changeList(this.element, name, false, true);
372
+ },
373
+ toggle: function(name) {
374
+ changeList(this.element, name, true, true);
375
+ }
376
+ };
377
+
378
+ Object.defineProperty(HTMLElement.prototype, 'classList', {
379
+ get: function() {
380
+ if (this._classList)
381
+ return this._classList;
382
+
383
+ var classList = Object.create(classListPrototype, {
384
+ element: {
385
+ value: this,
386
+ writable: false,
387
+ enumerable: true
388
+ }
389
+ });
390
+ Object.defineProperty(this, '_classList', {
391
+ value: classList,
392
+ writable: false,
393
+ enumerable: false
394
+ });
395
+ return classList;
396
+ },
397
+ enumerable: true
398
+ });
399
+ })();
400
+
401
+ // Check console compatibility
402
+ (function checkConsoleCompatibility() {
403
+ if (!('console' in window)) {
404
+ window.console = {
405
+ log: function() {},
406
+ error: function() {},
407
+ warn: function() {}
408
+ };
409
+ } else if (!('bind' in console.log)) {
410
+ // native functions in IE9 might not have bind
411
+ console.log = (function(fn) {
412
+ return function(msg) { return fn(msg); };
413
+ })(console.log);
414
+ console.error = (function(fn) {
415
+ return function(msg) { return fn(msg); };
416
+ })(console.error);
417
+ console.warn = (function(fn) {
418
+ return function(msg) { return fn(msg); };
419
+ })(console.warn);
420
+ }
421
+ })();
422
+
423
+ // Check onclick compatibility in Opera
424
+ (function checkOnClickCompatibility() {
425
+ // workaround for reported Opera bug DSK-354448:
426
+ // onclick fires on disabled buttons with opaque content
427
+ function ignoreIfTargetDisabled(event) {
428
+ if (isDisabled(event.target)) {
429
+ event.stopPropagation();
430
+ }
431
+ }
432
+ function isDisabled(node) {
433
+ return node.disabled || (node.parentNode && isDisabled(node.parentNode));
434
+ }
435
+ if (navigator.userAgent.indexOf('Opera') != -1) {
436
+ // use browser detection since we cannot feature-check this bug
437
+ document.addEventListener('click', ignoreIfTargetDisabled, true);
438
+ }
439
+ })();
440
+
441
+ // Checks if navigator.language is supported
442
+ (function checkNavigatorLanguage() {
443
+ if ('language' in navigator)
444
+ return;
445
+ Object.defineProperty(navigator, 'language', {
446
+ get: function navigatorLanguage() {
447
+ var language = navigator.userLanguage || 'en-US';
448
+ return language.substring(0, 2).toLowerCase() +
449
+ language.substring(2).toUpperCase();
450
+ },
451
+ enumerable: true
452
+ });
453
+ })();
454
+
455
+ (function checkRangeRequests() {
456
+ // Safari has issues with cached range requests see:
457
+ // https://github.com/mozilla/pdf.js/issues/3260
458
+ // Last tested with version 6.0.4.
459
+ var isSafari = Object.prototype.toString.call(
460
+ window.HTMLElement).indexOf('Constructor') > 0;
461
+ if (isSafari) {
462
+ PDFJS.disableRange = true;
463
+ }
464
+ })();
465
+
466
+ // Check if the browser supports manipulation of the history.
467
+ (function checkHistoryManipulation() {
468
+ if (!window.history.pushState) {
469
+ PDFJS.disableHistory = true;
470
+ }
471
+ })();