Compare commits
2991 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
2a68724b53 | ||
|
65d618635c | ||
|
30e69956db | ||
|
e650b95253 | ||
|
a7d47af474 | ||
|
b54887cfab | ||
|
b4267cd294 | ||
|
eb160726ee | ||
|
70b6ddc5d9 | ||
|
3c78ff5fb0 | ||
|
e647311a89 | ||
|
f676c2c0c8 | ||
|
b14f696071 | ||
|
ea4b55a0e6 | ||
|
2b407990e2 | ||
|
fb9e438442 | ||
|
406018934a | ||
|
0f8dda1af0 | ||
|
39aeea3e94 | ||
|
6bb6ce6a5d | ||
|
6d0835dc52 | ||
|
9ee4c6528d | ||
|
4e1b96c781 | ||
|
f634cb533c | ||
|
bd5875d066 | ||
|
f1272ee435 | ||
|
b447a62fea | ||
|
ba3e559583 | ||
|
3cb58f84a2 | ||
|
c451b6d684 | ||
|
a55f976e2e | ||
|
7c9d3af85b | ||
|
ecb4262b13 | ||
|
1859412507 | ||
|
d096dc79b2 | ||
|
dd3adc84db | ||
|
e781b553cb | ||
|
c7e7122e25 | ||
|
29c493d36b | ||
|
30101cbb31 | ||
|
61036383b5 | ||
|
8f75e34b6f | ||
|
7af90bb8bc | ||
|
c409121251 | ||
|
f52bf2836f | ||
|
7cc34cf4a7 | ||
|
a9f47e87d5 | ||
|
9600c48d4f | ||
|
a92b38e71c | ||
|
9fe15d4a01 | ||
|
3a7e638fce | ||
|
07abd647f4 | ||
|
65342d2bee | ||
|
b1a04fc184 | ||
|
e0b843d991 | ||
|
06aef89502 | ||
|
5e7941afbf | ||
|
e42b114e80 | ||
|
9e042e7acc | ||
|
ca4ab064e5 | ||
|
0520f2f0cb | ||
|
1bd6af6dae | ||
|
fe41e789de | ||
|
346efe919a | ||
|
b8b8f1af66 | ||
|
bb19cf9b64 | ||
|
101e8efad7 | ||
|
e1f6f5179f | ||
|
49a2aff532 | ||
|
dab8a2eaa4 | ||
|
db2849cc17 | ||
|
33c5ef349e | ||
|
72b8b29147 | ||
|
0fb8a23051 | ||
|
46416bb131 | ||
|
95f9bedc7c | ||
|
38004b65b1 | ||
|
90b2664622 | ||
|
70015ffe6b | ||
|
99fa713fba | ||
|
a6eadf8150 | ||
|
c2fcc66302 | ||
|
d96fd80ca0 | ||
|
673639c54b | ||
|
4ac8ee8b6d | ||
|
091e861531 | ||
|
8487c67cb8 | ||
|
33955980c8 | ||
|
2e6fa797d9 | ||
|
985ba77579 | ||
|
0015eb2431 | ||
|
6ef813af01 | ||
|
43cdc1ca8a | ||
|
6baa439e15 | ||
|
f1a225889b | ||
|
678c79cc78 | ||
|
fd5d040073 | ||
|
179a3ecee6 | ||
|
b767e12111 | ||
|
a7bcc81eb1 | ||
|
75a5b2051d | ||
|
751611f690 | ||
|
b420bd8b20 | ||
|
a83a8d7e4f | ||
|
dbda3ec5f9 | ||
|
fcad3718f0 | ||
|
a204f434f3 | ||
|
14874e50b7 | ||
|
2133da166e | ||
|
e60329cea1 | ||
|
37e98e39f6 | ||
|
05b035602e | ||
|
750b8e328a | ||
|
eb5e6e68d6 | ||
|
f0343dcfdb | ||
|
19ef3e367b | ||
|
18959e80be | ||
|
4ab0ad3216 | ||
|
d742daf4b7 | ||
|
de1985abbb | ||
|
ce4fe0c234 | ||
|
5cfaff508c | ||
|
f15b4b34fd | ||
|
9980447d25 | ||
|
336fcffd28 | ||
|
56d9930a7b | ||
|
12b9685714 | ||
|
440208daa6 | ||
|
8f67ea6dc6 | ||
|
4b7382edcb | ||
|
422e46dae9 | ||
|
5732faee1e | ||
|
485e9cecd7 | ||
|
e98b9b019a | ||
|
28418598e5 | ||
|
4feab0c1fa | ||
|
29a665981a | ||
|
913c2caf37 | ||
|
7da6f94ca3 | ||
|
b278a74b6b | ||
|
b5e446213e | ||
|
8fc6c5c8a6 | ||
|
bcc95460b6 | ||
|
14ef0b4211 | ||
|
7cfcd00a38 | ||
|
275b6748b6 | ||
|
964bfe522b | ||
|
8d61fc1fde | ||
|
0d5183a49f | ||
|
939134ee55 | ||
|
c4ac7eef95 | ||
|
d7479a59b7 | ||
|
3f68a08ef3 | ||
|
6da9448f6c | ||
|
898172e9d2 | ||
|
6a78cf0d93 | ||
|
60fd9d583d | ||
|
81466ee039 | ||
|
7d9cc49010 | ||
|
06cd278808 | ||
|
247af2ee09 | ||
|
363dce6744 | ||
|
af4d2fa53c | ||
|
da8297115f | ||
|
cbbd1fcaa3 | ||
|
f80ba44fb0 | ||
|
49bcce27c1 | ||
|
081be89f54 | ||
|
eb5c1d441a | ||
|
f11dc611b3 | ||
|
9588bceff5 | ||
|
97c2ce9da0 | ||
|
833d7ac830 | ||
|
245fd02141 | ||
|
f7ed040aa6 | ||
|
3064361099 | ||
|
7529c1e3dc | ||
|
b88c6f9c39 | ||
|
56dabe9390 | ||
|
a352f28785 | ||
|
802f702695 | ||
|
eb36fd375c | ||
|
2e2127cbb5 | ||
|
f394031c1d | ||
|
32a5bb83d4 | ||
|
384291234d | ||
|
ab392584f3 | ||
|
94309edc9a | ||
|
f103f277ac | ||
|
f855a6dae8 | ||
|
a6e0b0292e | ||
|
c6594b73a7 | ||
|
5dd25b6e80 | ||
|
d1080e785a | ||
|
1698991ae2 | ||
|
d8f77e6b84 | ||
|
e63fafd0fb | ||
|
3192d37aa7 | ||
|
0432d1e8e6 | ||
|
fed3ef1743 | ||
|
f3bdbedf9b | ||
|
4ec43488ff | ||
|
01280d8e08 | ||
|
bf92360095 | ||
|
2f4017e22b | ||
|
1cbcb89dac | ||
|
7f2428a77e | ||
|
a5d4660a75 | ||
|
2b8ecf5688 | ||
|
f81f9bb7d3 | ||
|
d713df28c3 | ||
|
ae62787080 | ||
|
f724ae98a1 | ||
|
f5bb9bc21b | ||
|
8b24722113 | ||
|
fa583427ef | ||
|
f21a30dfb4 | ||
|
f5c01188dc | ||
|
cf0797dfbd | ||
|
1cc83c4fdc | ||
|
bba831821d | ||
|
06601fd90c | ||
|
49b2d9b5af | ||
|
1ed68933e5 | ||
|
d549c2ef4c | ||
|
d7e41d4cb6 | ||
|
6dd77b3c14 | ||
|
3c2c0ecd88 | ||
|
d1bef8cb86 | ||
|
fc62eec901 | ||
|
fce822cde0 | ||
|
10eef372ff | ||
|
f9a384d711 | ||
|
998184a00e | ||
|
9dfe9c552c | ||
|
6e46304357 | ||
|
99ee308f3d | ||
|
0cca9a0240 | ||
|
f24246150e | ||
|
03aa8a12d2 | ||
|
626674553d | ||
|
c70edbced7 | ||
|
c9b1a8f761 | ||
|
9b0b099713 | ||
|
c9755bdbc8 | ||
|
2dd6910aa4 | ||
|
a5a9357e15 | ||
|
5732c0c54a | ||
|
f3b76f5ae2 | ||
|
f8e3c79cb5 | ||
|
f6c4b29aa2 | ||
|
5d2e7cf3fc | ||
|
b37536c38c | ||
|
a0e2b62245 | ||
|
a1bf12537c | ||
|
d64f334f98 | ||
|
83c78dbfa8 | ||
|
1cdbcfef82 | ||
|
8fbfef0c07 | ||
|
a22b5a4f02 | ||
|
cb38882d74 | ||
|
70a9d8f3bc | ||
|
9c377922ef | ||
|
79594ff876 | ||
|
bf6cc83e7a | ||
|
a76cc40ab8 | ||
|
29de9bdce6 | ||
|
e7d782e887 | ||
|
10389c5017 | ||
|
51413be5b6 | ||
|
b8aab5d14e | ||
|
3110865484 | ||
|
ee72b32dc2 | ||
|
7769018316 | ||
|
e9946fa22a | ||
|
2ca20dea43 | ||
|
e98a813e09 | ||
|
d3b5f60995 | ||
|
7580770aac | ||
|
9765d57a26 | ||
|
405f573d70 | ||
|
dc92ab850a | ||
|
704747b143 | ||
|
07cb42243c | ||
|
ff93dfc560 | ||
|
b168f71fde | ||
|
6dc225bdbb | ||
|
56ca2fd658 | ||
|
f0af52032b | ||
|
0d011472a4 | ||
|
fc7c320bd8 | ||
|
61e5dae7fd | ||
|
94ad3afab6 | ||
|
35daccf34b | ||
|
b4a7007397 | ||
|
12875359c3 | ||
|
7d15d23147 | ||
|
4197f6a284 | ||
|
d2a5210475 | ||
|
903af4ee00 | ||
|
0392feaee4 | ||
|
29faa38dd7 | ||
|
2cb93cc344 | ||
|
c5a69544af | ||
|
6c5e237a40 | ||
|
17e1519410 | ||
|
130a0fef3d | ||
|
7839e7b495 | ||
|
1019b9f821 | ||
|
f84f48b5d0 | ||
|
7873ad98bb | ||
|
e5ccb70efb | ||
|
dc01782633 | ||
|
35863cd54b | ||
|
231c79800b | ||
|
fea192fbf9 | ||
|
9e14d04fd9 | ||
|
afa65dc766 | ||
|
aef9f7a0cd | ||
|
b1ca270162 | ||
|
234b57bb45 | ||
|
4e786f68bc | ||
|
f56d6802ad | ||
|
3b94e9fdce | ||
|
0324187734 | ||
|
3793a56116 | ||
|
faa24e8ce2 | ||
|
9f02cc36d4 | ||
|
e547b198a3 | ||
|
b09f238436 | ||
|
7ea0e40e58 | ||
|
13da916885 | ||
|
4d34107228 | ||
|
82464294b9 | ||
|
52ffd26da9 | ||
|
933e107073 | ||
|
6fc3b438f7 | ||
|
8d49a508f2 | ||
|
648c8f4abb | ||
|
25a0a68def | ||
|
2e82d947a6 | ||
|
34eb6fecac | ||
|
f9a0d4efe8 | ||
|
0a10a7b57b | ||
|
86bee4409a | ||
|
1299912744 | ||
|
91188cf2f8 | ||
|
eff8b2c67b | ||
|
76e3e52021 | ||
|
27d4fff5f2 | ||
|
51187dce06 | ||
|
844c4ebad3 | ||
|
b388d407a8 | ||
|
93143c03fa | ||
|
39a1fc6992 | ||
|
82be74d036 | ||
|
056e6393d0 | ||
|
553729869b | ||
|
92c15a61f1 | ||
|
988d3a188f | ||
|
e25cf1ba6f | ||
|
a1d859c082 | ||
|
d6b9e62463 | ||
|
c908f2d55c | ||
|
63eb8991a3 | ||
|
07aa706f1c | ||
|
d04d28a56d | ||
|
4db01746d8 | ||
|
15103600ea | ||
|
a067d38ce3 | ||
|
d56453289c | ||
|
c63af10191 | ||
|
628054ee53 | ||
|
f54cfe065a | ||
|
a692f8681b | ||
|
cb9c855993 | ||
|
6b6b7867af | ||
|
8702e1bbb2 | ||
|
7e64f8213d | ||
|
c8f6b39fc1 | ||
|
098cc16c46 | ||
|
ff23d37fa2 | ||
|
621b7af60d | ||
|
c0436013a0 | ||
|
f7fec8c6d7 | ||
|
319e85449e | ||
|
7f04ce4d22 | ||
|
c0bc5f9013 | ||
|
ae5828c968 | ||
|
795c63e400 | ||
|
11610a9e66 | ||
|
a3637e653f | ||
|
d7bec1b527 | ||
|
476cb84d92 | ||
|
43eea0b38e | ||
|
ac5667166e | ||
|
c9a923066b | ||
|
5111b6d371 | ||
|
8bb8070116 | ||
|
6b3ae4492e | ||
|
a1d84f5ecf | ||
|
83d0b6cb55 | ||
|
4c92ec9008 | ||
|
096426f073 | ||
|
fe3bc575de | ||
|
412502370d | ||
|
d65dca7811 | ||
|
9052327e07 | ||
|
9ac1ac6ed3 | ||
|
91eda77f63 | ||
|
6a35e4206e | ||
|
05ca005eeb | ||
|
59cf2ee5a9 | ||
|
b03ce96605 | ||
|
9ca504e538 | ||
|
ddebb0f954 | ||
|
f4952399a4 | ||
|
59112a7730 | ||
|
8e2507e0e8 | ||
|
1ea6293923 | ||
|
4bf7ff2027 | ||
|
2be136ab70 | ||
|
b7e943bc7d | ||
|
52ea20eda4 | ||
|
02a0189795 | ||
|
dd07267da6 | ||
|
f4b396f6c8 | ||
|
ab692f805a | ||
|
dd7ff7e662 | ||
|
8aa26fad24 | ||
|
7381515e20 | ||
|
9d863f5180 | ||
|
eb5f610d18 | ||
|
4b1de1537f | ||
|
3d9f68cb97 | ||
|
58316369e5 | ||
|
42147e8839 | ||
|
fd7a7e2859 | ||
|
d679078beb | ||
|
1f0f51613a | ||
|
6e7381bc20 | ||
|
5781e722bf | ||
|
5df7c97074 | ||
|
09ff1b98ee | ||
|
f8f4432961 | ||
|
83f0029212 | ||
|
625d4f794e | ||
|
02ccdbb2b1 | ||
|
086a5921dc | ||
|
31d9b9f574 | ||
|
a6f0609a6e | ||
|
d8424a43ba | ||
|
bd6c2a192c | ||
|
3459615ec3 | ||
|
53101b379b | ||
|
ffbfd680ec | ||
|
b7d28a3bf6 | ||
|
1df648733e | ||
|
5099dc4699 | ||
|
709d89420e | ||
|
1f9533bae9 | ||
|
44cde3ccca | ||
|
787d092ecb | ||
|
09b4fe6a30 | ||
|
096c5fe2b5 | ||
|
90864a5672 | ||
|
7b89e7e0d2 | ||
|
3f7fd2f035 | ||
|
8157f39c62 | ||
|
69452bb60e | ||
|
a1d84f8ce1 | ||
|
24fcc042f4 | ||
|
7884119975 | ||
|
5687326046 | ||
|
af3147c3fe | ||
|
d89ca97887 | ||
|
e0e5be2c62 | ||
|
9172d649ed | ||
|
290b483167 | ||
|
2869b63800 | ||
|
37a8311b4c | ||
|
2f70369d02 | ||
|
ade692ff2e | ||
|
61ed77cfb4 | ||
|
2d42c04543 | ||
|
26fcd261fb | ||
|
4b7a0d1841 | ||
|
8e2c9a30d7 | ||
|
8e5311ebf7 | ||
|
e61b832764 | ||
|
17213062cc | ||
|
f56215f246 | ||
|
334f0eb060 | ||
|
59ce1a4a3f | ||
|
823d375b8b | ||
|
1b88aad0db | ||
|
f1122f048e | ||
|
ec396c2150 | ||
|
bf016743fc | ||
|
42f3d57365 | ||
|
ff62fc8e2c | ||
|
65c827b0eb | ||
|
c6a717f900 | ||
|
acc62f80de | ||
|
72338ce05d | ||
|
f16401bd67 | ||
|
50f52b43a5 | ||
|
87c83ab31c | ||
|
0d574f66bc | ||
|
13ca668be0 | ||
|
9eb9d3f949 | ||
|
71a6c749d0 | ||
|
09f45e6e52 | ||
|
5e6d80ad07 | ||
|
89bb0c9e66 | ||
|
e0898a7ee3 | ||
|
d46578e959 | ||
|
bf7e8126df | ||
|
84aaafcd3e | ||
|
e20dabb65b | ||
|
8bbfcd3bef | ||
|
99522c3201 | ||
|
155a302e74 | ||
|
f528f6f07b | ||
|
085aa4207d | ||
|
20adb2c44d | ||
|
6df897267f | ||
|
ce9cfa2d72 | ||
|
eebc230cf1 | ||
|
50c0fccda6 | ||
|
77475ac610 | ||
|
1ab0f8a0ec | ||
|
66b1a1f34b | ||
|
f95a2bbe29 | ||
|
447eeeba4d | ||
|
ecba5b7c6d | ||
|
d00c7d5cdc | ||
|
0329b5e130 | ||
|
355bce28f5 | ||
|
26fc69f241 | ||
|
80612f3714 | ||
|
b798415147 | ||
|
6dff90ac1f | ||
|
973cbb000b | ||
|
4845d35c50 | ||
|
9d6cdf216d | ||
|
4be44a370e | ||
|
c1fef7d2f2 | ||
|
238f3e728f | ||
|
d7b39fe696 | ||
|
9ec2fda09f | ||
|
59c4041a49 | ||
|
3f0b3b15de | ||
|
7d5b970eee | ||
|
d30bf4482f | ||
|
b779e418a5 | ||
|
525be9afea | ||
|
d293048c5d | ||
|
6115a328ea | ||
|
d72fd9ce4f | ||
|
517a262fb1 | ||
|
34781121cd | ||
|
487816bd68 | ||
|
069096e78f | ||
|
097f214222 | ||
|
fbfacf8828 | ||
|
399f444c84 | ||
|
b31e77df17 | ||
|
806ac67ea4 | ||
|
0c38c6e103 | ||
|
6b265b3a15 | ||
|
0fc899338c | ||
|
f27f2bb403 | ||
|
5d3823a81a | ||
|
31243230af | ||
|
3ba68f68dc | ||
|
bd9b39be28 | ||
|
b575de9860 | ||
|
2967eca605 | ||
|
846bd86520 | ||
|
133ed96f8f | ||
|
651057c039 | ||
|
f098121644 | ||
|
3f2072eaee | ||
|
bcb01e5e2b | ||
|
e2af77fd6c | ||
|
2f3797db34 | ||
|
377af6892b | ||
|
cc18d9749a | ||
|
31cfec63c3 | ||
|
04696080f8 | ||
|
8376b3fb05 | ||
|
17af706070 | ||
|
898cc2e399 | ||
|
da186d1b89 | ||
|
4c4676e5a4 | ||
|
e20ef39f59 | ||
|
7df082fce3 | ||
|
f07675a6a8 | ||
|
a4cd2ef1db | ||
|
0eacd5c107 | ||
|
5f0e560949 | ||
|
5c14c559dd | ||
|
d094e8aab0 | ||
|
a0b9c937ae | ||
|
e820688510 | ||
|
c60401a765 | ||
|
d6cfbd2839 | ||
|
5ddc949159 | ||
|
929311fb9d | ||
|
69ad0d9861 | ||
|
f39bedd06c | ||
|
482b789edf | ||
|
5d8be99782 | ||
|
6a6f6f122c | ||
|
66982a2a11 | ||
|
2a3090224f | ||
|
25a1a9d28f | ||
|
ae664ea8e0 | ||
|
674052d3fc | ||
|
22d6d95f03 | ||
|
2bae8af96a | ||
|
a9a1195582 | ||
|
93f24dd5d7 | ||
|
d5acbbccd3 | ||
|
76bf3da4b1 | ||
|
0c763d6c5a | ||
|
48e41617f5 | ||
|
5c45dfa0ae | ||
|
d53e166538 | ||
|
58e4fcdc6f | ||
|
4c17f99fab | ||
|
e1307fdba8 | ||
|
e79bb25086 | ||
|
23b8dbb730 | ||
|
d53093045a | ||
|
57866cd31b | ||
|
7dfe08a0ee | ||
|
af9a7b0003 | ||
|
5e986cb514 | ||
|
36c3c0a4c1 | ||
|
38245500fd | ||
|
96258449e3 | ||
|
4ac44b9d6d | ||
|
cabda362c6 | ||
|
9878d058fe | ||
|
33456d3704 | ||
|
158ab5bf37 | ||
|
0238cf134d | ||
|
2c39a739f5 | ||
|
734caab747 | ||
|
2c87c4854a | ||
|
7851c0da8d | ||
|
b4cd8ad215 | ||
|
ede65e11c6 | ||
|
d64f223d03 | ||
|
6ac3da0d1f | ||
|
f04967017f | ||
|
67b5c69d15 | ||
|
60a458de29 | ||
|
2c1d95b153 | ||
|
f2c9b64cb2 | ||
|
8bd3cc0313 | ||
|
e6c3257175 | ||
|
4b489cd4e6 | ||
|
bab4c7f617 | ||
|
89d8c639fa | ||
|
927e50f5d4 | ||
|
0a970ee443 | ||
|
8158628a90 | ||
|
905ad1fe68 | ||
|
4ebddcb092 | ||
|
ea5eafa265 | ||
|
2453b79fa8 | ||
|
3747c02d4c | ||
|
3263fd0307 | ||
|
4277205d78 | ||
|
a60f90ae94 | ||
|
e737638a40 | ||
|
c4c24c6d18 | ||
|
66c3b239ae | ||
|
335cea22b3 | ||
|
40b1d92044 | ||
|
40d6b0e1bf | ||
|
05ca3fd99b | ||
|
c377f2d488 | ||
|
bf9c33e60f | ||
|
da4fdc76a3 | ||
|
0e6d0ca7b6 | ||
|
1be9bbd2e1 | ||
|
4245d87de5 | ||
|
f113320bd5 | ||
|
9cca13bb03 | ||
|
426209c6e6 | ||
|
0edc490e1b | ||
|
0cc8c6671c | ||
|
bb59f445a9 | ||
|
0986e40842 | ||
|
e3fbe2908a | ||
|
59d94b549f | ||
|
eebd251552 | ||
|
f5367f01ca | ||
|
077d239b96 | ||
|
3ced0dec1b | ||
|
be53c7d6f5 | ||
|
0d9aef1a5e | ||
|
71bffcc7a9 | ||
|
9624505f0f | ||
|
3ca63c68ea | ||
|
7d7a7a46a0 | ||
|
12ca22ba44 | ||
|
b65b079ceb | ||
|
b8c118db22 | ||
|
627249f889 | ||
|
46940a5a52 | ||
|
55e5af2d01 | ||
|
52862893f5 | ||
|
46d8d36721 | ||
|
b6d75e736a | ||
|
790b480bbc | ||
|
03ce3b2d54 | ||
|
3072efa064 | ||
|
d7d900c65d | ||
|
4f6fa35a28 | ||
|
f78a5ff79e | ||
|
f2196f7803 | ||
|
2daf9515b3 | ||
|
8417eee0c1 | ||
|
00c8fbe7e0 | ||
|
fb16151247 | ||
|
bdb8410ad4 | ||
|
880abd910e | ||
|
87a1baf29f | ||
|
7413546e16 | ||
|
3f7060e777 | ||
|
3ee5268a23 | ||
|
5f75404bc3 | ||
|
549c414ff5 | ||
|
71376f089c | ||
|
29bc103fad | ||
|
57d196e349 | ||
|
a93ac2a32b | ||
|
ce87167432 | ||
|
6112f3ee74 | ||
|
fc898e1b38 | ||
|
6e584adfc5 | ||
|
48d75599d3 | ||
|
de553456ce | ||
|
9b464047bc | ||
|
b41bca7da9 | ||
|
57f548c989 | ||
|
587a3a2eae | ||
|
073a1da6f5 | ||
|
1b95ab7cfa | ||
|
57caa4601c | ||
|
f87ec67ab1 | ||
|
0fc0dc3960 | ||
|
1df31c0284 | ||
|
a09b7228fb | ||
|
f9eda5b30e | ||
|
d2e34dff93 | ||
|
88f3ed7745 | ||
|
85568bd6cc | ||
|
9e0e67918f | ||
|
d555f351d3 | ||
|
8c5da23f67 | ||
|
c027aaeefa | ||
|
d5936d9a15 | ||
|
f66613c8e4 | ||
|
a68845c902 | ||
|
43c7e88fa9 | ||
|
050093c9f5 | ||
|
3f859f76e6 | ||
|
eff7ed580d | ||
|
0237e2eb2b | ||
|
ee5b8bcf9e | ||
|
2fc8ab3477 | ||
|
edb83ffec2 | ||
|
988222d7de | ||
|
6545551e76 | ||
|
9b21f17b03 | ||
|
4cedc12341 | ||
|
e9f707ce3f | ||
|
5711d0f95d | ||
|
a7894a4d7b | ||
|
9de432ba7a | ||
|
61c77c7d8b | ||
|
b002d16f04 | ||
|
80e691d2ad | ||
|
e2b7896826 | ||
|
561aea530b | ||
|
237b8ce4a8 | ||
|
67ddabcbc2 | ||
|
b5d18006a7 | ||
|
5660cdfe68 | ||
|
34506f8874 | ||
|
c90ea2314e | ||
|
fe60db27b1 | ||
|
f2d75d9221 | ||
|
7d0bf376d0 | ||
|
67646387c8 | ||
|
9a677d0d4d | ||
|
0317d3e168 | ||
|
0a278ef0bc | ||
|
b80e0d881d | ||
|
b7fa4fb0f7 | ||
|
7952a36384 | ||
|
21c55b56bf | ||
|
8d326e5e30 | ||
|
c162b004ce | ||
|
54f6264d5b | ||
|
c12049db07 | ||
|
29a48f9479 | ||
|
0ac8f33e13 | ||
|
daae6589b6 | ||
|
b9469c2059 | ||
|
f7870c04ae | ||
|
0df9d1d934 | ||
|
5ac40b71c0 | ||
|
df0da86b64 | ||
|
c0ed7fff2c | ||
|
60ccce5cb1 | ||
|
c8727d9c70 | ||
|
2bd7bb3847 | ||
|
9b6e37c2cd | ||
|
9dbe95c63c | ||
|
b85281914f | ||
|
a216836fd5 | ||
|
3afb717eed | ||
|
01428f1e23 | ||
|
1b3ccf1321 | ||
|
97819891b6 | ||
|
306cca930f | ||
|
e37e7b6f39 | ||
|
0d3fbc1818 | ||
|
dd46110f6b | ||
|
518590ac7d | ||
|
98671c3618 | ||
|
2d79be941e | ||
|
c9cd934f8a | ||
|
22cd0c6ff8 | ||
|
a8573d4e1b | ||
|
0304b65fcd | ||
|
b49fe5baac | ||
|
7f8de83e96 | ||
|
6c5d5f3cb9 | ||
|
89c8f90a14 | ||
|
ff96c413d3 | ||
|
4dd197ae3f | ||
|
316d1ec5ef | ||
|
8cb5d01acd | ||
|
52fa66a98b | ||
|
4d615f087f | ||
|
d2c8997380 | ||
|
586d3add46 | ||
|
628ca737dd | ||
|
4c0fbe51e5 | ||
|
93ce7c5a89 | ||
|
38f60a7eff | ||
|
8d695c982f | ||
|
01f9f385d7 | ||
|
920e51a1e6 | ||
|
720963bbe6 | ||
|
b1578225fc | ||
|
50937a3539 | ||
|
953f271425 | ||
|
5646604883 | ||
|
221ee6ca37 | ||
|
66507ccae8 | ||
|
5f93638045 | ||
|
981ef9e31e | ||
|
f42d70a24e | ||
|
18a661b6a0 | ||
|
cf7efdb040 | ||
|
52cc1220e4 | ||
|
b903b3030a | ||
|
b5b061cdb6 | ||
|
df9cce39c0 | ||
|
c6f7e722c9 | ||
|
3e32d87be7 | ||
|
a8a50c567a | ||
|
5ffa23c7f1 | ||
|
8ab4e2e6e7 | ||
|
cf5a1d60a6 | ||
|
03eabae613 | ||
|
d03494eeff | ||
|
92792a8215 | ||
|
e7800c22dd | ||
|
f2a4f2adaf | ||
|
a00b542f2f | ||
|
08f9e48280 | ||
|
7f44f353b3 | ||
|
48a2c29f98 | ||
|
b18a1669ac | ||
|
28bda9f68b | ||
|
1e7c907fbf | ||
|
11c5213185 | ||
|
07cca3ddd9 | ||
|
92831455bf | ||
|
87ea2ed4e2 | ||
|
46f2c5893d | ||
|
d0f14b1ce3 | ||
|
bbf11a5783 | ||
|
b5c8849111 | ||
|
c5ee72bb95 | ||
|
9190445a21 | ||
|
b159cc9e4b | ||
|
284f32f50b | ||
|
14b2a31e78 | ||
|
e7229854bd | ||
|
20b0be973c | ||
|
f84f2646f4 | ||
|
d185db2b70 | ||
|
1b8441dacc | ||
|
9b4efe2c2f | ||
|
92f7653cfb | ||
|
fd32a53a86 | ||
|
e142baecb1 | ||
|
ec3d2be761 | ||
|
598421b11f | ||
|
62a294bb52 | ||
|
24b480fabe | ||
|
08f26be7b4 | ||
|
ee3ac35e05 | ||
|
847da21c95 | ||
|
6da4fe5778 | ||
|
89779b3f6c | ||
|
de52c98ddf | ||
|
cd181eb746 | ||
|
a7d829155b | ||
|
988ce2820b | ||
|
2993c7725b | ||
|
5828ac0ee3 | ||
|
05fa7dcc7e | ||
|
d762986bb0 | ||
|
4d19db0b19 | ||
|
c5ebfa51a7 | ||
|
60581c427e | ||
|
520397e1e8 | ||
|
d513899fc7 | ||
|
df9cb772d9 | ||
|
c72cb5436d | ||
|
29b2050ac2 | ||
|
2422492ee3 | ||
|
8cf2f6d352 | ||
|
43ab1d2da7 | ||
|
6669a99299 | ||
|
66437917db | ||
|
690b873897 | ||
|
1810191be2 | ||
|
890550653a | ||
|
2dd6f07b57 | ||
|
4b2eebf32e | ||
|
d527fb3ff2 | ||
|
4eca3ca199 | ||
|
659fbc5020 | ||
|
d57e3ebbe4 | ||
|
caebe335b2 | ||
|
1d523d3ec1 | ||
|
0dd70c4e66 | ||
|
96a1f323c4 | ||
|
f1bd98c6d8 | ||
|
71f5050ed2 | ||
|
389a26c115 | ||
|
4be6c90796 | ||
|
ea259710fa | ||
|
7a5b3423d6 | ||
|
402e3fed95 | ||
|
d4ba312f00 | ||
|
b6b51f57ed | ||
|
4962d005f8 | ||
|
f66072b658 | ||
|
b6432ef9de | ||
|
ec7746350d | ||
|
f89020e9b1 | ||
|
1447049513 | ||
|
149f18b766 | ||
|
9ae7ad0fa6 | ||
|
77392dfce4 | ||
|
7d8b53bf7a | ||
|
ec2b717705 | ||
|
8f6635bacf | ||
|
e914870c14 | ||
|
a476000271 | ||
|
2e9f2e630c | ||
|
007b46279d | ||
|
e2819d0c67 | ||
|
e2f20a1afe | ||
|
15c21d7758 | ||
|
aa71619c2d | ||
|
35d1f5485e | ||
|
400699687e | ||
|
19c712c2d0 | ||
|
8bd45cb260 | ||
|
de1f31aae8 | ||
|
b67c60922f | ||
|
64b33da236 | ||
|
1182f4965d | ||
|
d50237da3c | ||
|
e414dfcff7 | ||
|
399475247f | ||
|
b59b1a81a9 | ||
|
be29a4dce5 | ||
|
42e6243ebf | ||
|
99c62f9248 | ||
|
2747928a54 | ||
|
fcfb2457bc | ||
|
0725b6299f | ||
|
556f42fe52 | ||
|
e6728f94f4 | ||
|
4735ed8f16 | ||
|
8bd4a18190 | ||
|
64e8557fb5 | ||
|
5b8f680480 | ||
|
71960bea64 | ||
|
ce9f94848c | ||
|
f2bf0ccc4f | ||
|
0e6d141edf | ||
|
621c92dbdd | ||
|
ffb932b84a | ||
|
02aa561003 | ||
|
f7155ad8fa | ||
|
1ca3bbd2b6 | ||
|
7bdd3491b0 | ||
|
d16d1f0d23 | ||
|
8ad0f08099 | ||
|
445ffa920a | ||
|
8439e11160 | ||
|
1ef6fbc525 | ||
|
930cbc4d27 | ||
|
81dfa61777 | ||
|
7ae5a0fef7 | ||
|
0ee2a352ec | ||
|
2a77f0877c | ||
|
aea13b4478 | ||
|
69a9d777d7 | ||
|
cfd179f23f | ||
|
e77c7f336d | ||
|
0b715e2a73 | ||
|
9d576d5097 | ||
|
0ad5a5551a | ||
|
d6c0950389 | ||
|
5560643597 | ||
|
8679199a2f | ||
|
c09bd5568c | ||
|
59bcfd9b9e | ||
|
611acf52c4 | ||
|
2fbfd9517f | ||
|
ecf95e552f | ||
|
34f2e7d4f9 | ||
|
82faae26c0 | ||
|
ef776eaacd | ||
|
93b09f6320 | ||
|
c0fe96b8fe | ||
|
674e7ee381 | ||
|
8f83a1359e | ||
|
9078587422 | ||
|
7f634e468f | ||
|
bb6936c931 | ||
|
a2eca47ed1 | ||
|
7ce4e288e1 | ||
|
48cc67f17e | ||
|
e40fd171e9 | ||
|
7448e89d1f | ||
|
6b545d666e | ||
|
76caaab195 | ||
|
86165a7ba6 | ||
|
690adb093e | ||
|
84e6154b0f | ||
|
e00629966d | ||
|
2688bf2ebd | ||
|
24d01ec682 | ||
|
f508084c21 | ||
|
3f58e25961 | ||
|
3b6d2554a8 | ||
|
fb3ae82820 | ||
|
d188b66af6 | ||
|
71f113bf85 | ||
|
1e69b6a03d | ||
|
4a0468a601 | ||
|
b7b3636ec2 | ||
|
8b2380823c | ||
|
7e8ee4f0b9 | ||
|
66645d30cc | ||
|
fd6b9d7b48 | ||
|
c073484241 | ||
|
33fdec1392 | ||
|
74642b59af | ||
|
aed7f6edcf | ||
|
4f72251322 | ||
|
198f89ffce | ||
|
8a2320bd18 | ||
|
25cb4883e9 | ||
|
6d783d2722 | ||
|
c018070e80 | ||
|
abb24f82fb | ||
|
18619ce4c9 | ||
|
d74b68cd09 | ||
|
d9278200d7 | ||
|
9a4750fee5 | ||
|
d470e91223 | ||
|
1a69b6ad64 | ||
|
9277801493 | ||
|
2a508b95e1 | ||
|
cd97fcb414 | ||
|
7220b93911 | ||
|
88524bf9ae | ||
|
0702663b7d | ||
|
8daf2f1eb1 | ||
|
dca4bc0f24 | ||
|
7cd062ec68 | ||
|
9f390755b0 | ||
|
295eb13a44 | ||
|
f19991a36f | ||
|
186a6fd0cb | ||
|
e83febcbb6 | ||
|
7ac3bf6f17 | ||
|
43fc78899f | ||
|
d9350c3899 | ||
|
d022912719 | ||
|
e81c084a92 | ||
|
3a886e7264 | ||
|
67303b16f1 | ||
|
9db65ad083 | ||
|
983b269e26 | ||
|
67e19171c4 | ||
|
a8867cf68a | ||
|
717c766a42 | ||
|
8614621d8d | ||
|
d03a8d0efc | ||
|
8765306203 | ||
|
9660ca53af | ||
|
bad4bfffdf | ||
|
86a868189c | ||
|
337cba736e | ||
|
bd67f7841f | ||
|
22c0bf4ec2 | ||
|
b019c13b33 | ||
|
b05c2e0343 | ||
|
f84657d837 | ||
|
1a4bfd2fc3 | ||
|
ee373b313b | ||
|
5a692b2c33 | ||
|
36fc34ebe8 | ||
|
ed42577d9c | ||
|
762d86a59e | ||
|
b449da31ca | ||
|
040d5bb294 | ||
|
46cec96900 | ||
|
944c68ee85 | ||
|
7e04ca395f | ||
|
5cfe792349 | ||
|
7daa6b5fd8 | ||
|
73d650af3e | ||
|
5174232326 | ||
|
bcf14a49c0 | ||
|
09d1be72f4 | ||
|
414ea4a365 | ||
|
0bc9012b8f | ||
|
35202ec0f3 | ||
|
1972b7311b | ||
|
c0cc7f3eca | ||
|
5a8ecbf560 | ||
|
6c601d3922 | ||
|
3efb276695 | ||
|
656c6d86fc | ||
|
f012fc5e70 | ||
|
42edc4d895 | ||
|
1567d022d9 | ||
|
ac3661972b | ||
|
a209ce811d | ||
|
adfee2a723 | ||
|
cec2a9a03f | ||
|
a650fcd634 | ||
|
5696c3aa3a | ||
|
52c98eb751 | ||
|
c625230c71 | ||
|
559ea194f2 | ||
|
5c5f9af803 | ||
|
c33e6ceb03 | ||
|
4fcc2ef23f | ||
|
506bca5e6d | ||
|
eb2527e9d7 | ||
|
091266c6fe | ||
|
c5caa98e8d | ||
|
7a896d1c4b | ||
|
e4b4d222fa | ||
|
6442a6cc4e | ||
|
8281bb8858 | ||
|
716493f10a | ||
|
37bd78c707 | ||
|
174d04fd27 | ||
|
2a837ba0b5 | ||
|
fab1157549 | ||
|
683cdf44db | ||
|
caf3462911 | ||
|
66fc19b272 | ||
|
77656ce881 | ||
|
6d82f7f66f | ||
|
1ce6668a70 | ||
|
9802bd805e | ||
|
e96c89d7a1 | ||
|
70db938fe7 | ||
|
f2753d6220 | ||
|
8b50836d76 | ||
|
1d07ef401e | ||
|
f3df202a31 | ||
|
2c74323e3d | ||
|
58252a528d | ||
|
cae8fe4c7e | ||
|
73b6ee5325 | ||
|
8a954823b5 | ||
|
e070e730c7 | ||
|
366a4ff1e9 | ||
|
94015c71ad | ||
|
d057caedf5 | ||
|
25bac064d8 | ||
|
be775143b2 | ||
|
ac937a9b3c | ||
|
fcf38f6ae9 | ||
|
ffa9795ca9 | ||
|
2f80fc1b3d | ||
|
64aa28953d | ||
|
d3723cec95 | ||
|
39113baa33 | ||
|
f373fcb356 | ||
|
88c7c8b5bf | ||
|
d329267926 | ||
|
4f82dd3932 | ||
|
789e318cf7 | ||
|
8330390757 | ||
|
50488d7a47 | ||
|
a024cd0127 | ||
|
9aedf00ffe | ||
|
c4a61a7692 | ||
|
d357906c3f | ||
|
599b9498f2 | ||
|
80b4708fa3 | ||
|
21383fb2d1 | ||
|
d7ae2f86e8 | ||
|
c519cc821b | ||
|
5f5db4b160 | ||
|
9e7023776e | ||
|
ccb72073b0 | ||
|
0126774e98 | ||
|
1f29baad22 | ||
|
a4ddf7baaa | ||
|
744b01b637 | ||
|
fa95bbce12 | ||
|
436699b0db | ||
|
1ea502aaf9 | ||
|
371ee778ff | ||
|
7667f55e45 | ||
|
e153e3a741 | ||
|
f596490a1b | ||
|
c5e4a22ee0 | ||
|
b4b9419841 | ||
|
e9ccbd2856 | ||
|
0bbadce066 | ||
|
25a07d92d0 | ||
|
547b8276e6 | ||
|
cca299eeb9 | ||
|
03059e1f86 | ||
|
fe1c36a0ed | ||
|
24b2c3a5e3 | ||
|
5c0872d1b0 | ||
|
1f9d1f3696 | ||
|
7742d6e4a6 | ||
|
fe869aca38 | ||
|
9a6f439dc7 | ||
|
71c60d523d | ||
|
7f53fb82a5 | ||
|
8ae1c8dd81 | ||
|
b8f5a14925 | ||
|
19f7a8b899 | ||
|
7588418b09 | ||
|
19880fcf9a | ||
|
197e806c86 | ||
|
a656d71959 | ||
|
5ffaa64167 | ||
|
fc487c8aa9 | ||
|
d1e172458f | ||
|
d01efc6767 | ||
|
ae3cee95a6 | ||
|
a5c10b6d89 | ||
|
5c0054d58d | ||
|
46b8f9e2f2 | ||
|
ca3e45755c | ||
|
04c31a55d2 | ||
|
2cb113b545 | ||
|
bd46a934ec | ||
|
85b38fc247 | ||
|
8937cac621 | ||
|
5f1fba503c | ||
|
71479fdd21 | ||
|
dd21139405 | ||
|
64520a0c63 | ||
|
1ab34d2ae4 | ||
|
5581e22cc7 | ||
|
9f60686c59 | ||
|
be25ee12bb | ||
|
0116a8f484 | ||
|
a37f7d2477 | ||
|
877884029d | ||
|
0650be4641 | ||
|
033228a2fc | ||
|
a591c3de84 | ||
|
89f29192a5 | ||
|
a8d4aad8b9 | ||
|
225734dd00 | ||
|
fee850737b | ||
|
9af50dc358 | ||
|
1e2f82050f | ||
|
68b05fb9cd | ||
|
8415ff51b4 | ||
|
1f42aaf21b | ||
|
b8447eb49f | ||
|
1a047f843c | ||
|
f8a84a6f03 | ||
|
3d0ce1cff2 | ||
|
f2a29e858f | ||
|
baebf7b26d | ||
|
22d350cae6 | ||
|
3d98fb3c0b | ||
|
a2b9e23f83 | ||
|
2f0bb9dc2f | ||
|
9cd84aa0b2 | ||
|
ba8c996623 | ||
|
77fb6834d6 | ||
|
9f861c39f4 | ||
|
184cad3daf | ||
|
8a5af64749 | ||
|
046b9050dd | ||
|
a5d0af38f7 | ||
|
a9093a7f4d | ||
|
cf3a35e9da | ||
|
605d9f492f | ||
|
5fad931a3f | ||
|
bb5d38acc1 | ||
|
63b61ca082 | ||
|
4351708ae6 | ||
|
cccdc8dba4 | ||
|
666e35301b | ||
|
459d26edec | ||
|
ba67bd717a | ||
|
ea93c507f5 | ||
|
0023c4a511 | ||
|
9fe0423a4c | ||
|
89a17abadf | ||
|
a43b1246c8 | ||
|
2db0eff70f | ||
|
665ff78051 | ||
|
6b16d903b1 | ||
|
e4ecf59727 | ||
|
a60bb5f936 | ||
|
af8df207bb | ||
|
32964db6ef | ||
|
1add9bc131 | ||
|
1ef918239c | ||
|
0e610cab04 | ||
|
a2118f52b0 | ||
|
133d103186 | ||
|
c60a3ce96a | ||
|
d3c0928121 | ||
|
e8c727742c | ||
|
071e6bc7e7 | ||
|
ca620e4cc9 | ||
|
7f6f33da3c | ||
|
1096e69879 | ||
|
036f855dca | ||
|
f06d0b2a9e | ||
|
78e6020a6e | ||
|
c4c8227d20 | ||
|
0e604f8f42 | ||
|
60feb2d5b6 | ||
|
9b3e1d41ae | ||
|
b51bbdf055 | ||
|
0e129c9e5e | ||
|
bc8523ac29 | ||
|
6d8810b55c | ||
|
d0bf505312 | ||
|
cbc4b20b12 | ||
|
be5db13005 | ||
|
2bf68f3c7f | ||
|
35a58ed987 | ||
|
2890c464da | ||
|
8d5da54cd5 | ||
|
ba654343e1 | ||
|
5a7beb9f30 | ||
|
7dce0a27f6 | ||
|
76ca395c32 | ||
|
daa48e5305 | ||
|
aeed6f2b67 | ||
|
a6f9505a39 | ||
|
1886012874 | ||
|
7cfe00a190 | ||
|
d2b4ed3cea | ||
|
a76a69e1ed | ||
|
dfbbb8c0ac | ||
|
094fb3c783 | ||
|
7f1e8d1920 | ||
|
1c4e4b4092 | ||
|
ca12bca276 | ||
|
d09c27d231 | ||
|
14fd59c4d0 | ||
|
65e23432cd | ||
|
e5454be0f2 | ||
|
1d74936ea9 | ||
|
f657de7de2 | ||
|
38287d9435 | ||
|
8c4821ceda | ||
|
04de155aaa | ||
|
3be66f59d6 | ||
|
e8537e4d30 | ||
|
3091e70aad | ||
|
e8030752f3 | ||
|
a24d5b629e | ||
|
77f8fd91ec | ||
|
356f3cf285 | ||
|
4355e76c60 | ||
|
ac8032628b | ||
|
839be801a0 | ||
|
177036e6ae | ||
|
46bbabbd5d | ||
|
bfb374dbf6 | ||
|
5ae353cf4d | ||
|
385f275ad9 | ||
|
95ab2b8b17 | ||
|
cc46d303e9 | ||
|
2c0478ecb2 | ||
|
4e8dd54e8e | ||
|
107874fcd4 | ||
|
b264e0301a | ||
|
5f91d39f13 | ||
|
4ed512ab2c | ||
|
1b4a7c5965 | ||
|
c20c1b3362 | ||
|
cb1a10e358 | ||
|
4101128c09 | ||
|
89140fcd98 | ||
|
9cbc2c389f | ||
|
95ac708fbd | ||
|
693092c980 | ||
|
521bea4f8f | ||
|
202496a7ca | ||
|
62f47588b4 | ||
|
d25994e85d | ||
|
d4b70ec306 | ||
|
8fbd6755eb | ||
|
e738e15aa3 | ||
|
a5336d9d79 | ||
|
8f3940fbf3 | ||
|
9417a37c71 | ||
|
0305b04e26 | ||
|
362be760e3 | ||
|
d520754bcf | ||
|
cfb908c999 | ||
|
2d2f7b315e | ||
|
53134c0c0b | ||
|
1a2e787e47 | ||
|
2486536843 | ||
|
8f2d8f62f3 | ||
|
d1adab8c7b | ||
|
2c2acdfd1c | ||
|
c5eb79577a | ||
|
cfa15bbf59 | ||
|
bfb664b9a1 | ||
|
7ecb3236f0 | ||
|
dcd55a7164 | ||
|
f79f48c2b4 | ||
|
1753e321cd | ||
|
ed8be6f882 | ||
|
eca40773b8 | ||
|
594ce65a47 | ||
|
89f768322d | ||
|
6c0fdc6ec2 | ||
|
4d3dfe254f | ||
|
722e5910e1 | ||
|
3aa96e071b | ||
|
b4aa10bb86 | ||
|
da03d322ed | ||
|
a652dc85e4 | ||
|
f151a39d14 | ||
|
72da14f005 | ||
|
a24e11a91c | ||
|
2fab583fb4 | ||
|
9dcc50402e | ||
|
4931f293eb | ||
|
74c615b5b0 | ||
|
1b6a83da4a | ||
|
e89da6d940 | ||
|
667085ee33 | ||
|
001acfb5ac | ||
|
f31b320113 | ||
|
ade1e52227 | ||
|
24a75bda5d | ||
|
c07149a44f | ||
|
c8246b0720 | ||
|
88616f77ae | ||
|
b0a1af306d | ||
|
d950b91c4e | ||
|
317abd6d07 | ||
|
f9c2a8d437 | ||
|
94c2d08975 | ||
|
95bf9fc17f | ||
|
797f8d3dca | ||
|
16017d6669 | ||
|
7c1e505f6a | ||
|
09edd6657f | ||
|
f28d915a42 | ||
|
bb1228cb64 | ||
|
d18b9ee472 | ||
|
9eea9993df | ||
|
de42ecb59f | ||
|
263ef59fc7 | ||
|
30ca27ac48 | ||
|
4dee3b83d5 | ||
|
cefa8c601a | ||
|
8259fb4d2f | ||
|
34ee77396c | ||
|
0ee0fcc6b3 | ||
|
a86265f7b7 | ||
|
13b168f1bb | ||
|
924a8901d1 | ||
|
89ea6b3bb6 | ||
|
e12535457f | ||
|
62a9435190 | ||
|
598408b7af | ||
|
2de6fd8e70 | ||
|
b4264e9648 | ||
|
495819fbc6 | ||
|
8a9d7a18cc | ||
|
1b79b0cd21 | ||
|
e00d26798c | ||
|
28f96d2ac2 | ||
|
870b942568 | ||
|
2f86f5bb75 | ||
|
edb09855dc | ||
|
f6f33065ef | ||
|
1b228091fa | ||
|
9c023c847c | ||
|
d6d3fdc489 | ||
|
43d390759b | ||
|
bf01edb452 | ||
|
74585c7c59 | ||
|
5e0722e4c2 | ||
|
6e1b234c6b | ||
|
9cb3236ac0 | ||
|
e304423ba1 | ||
|
2588924b0f | ||
|
c9359957e6 | ||
|
bc7aa8a585 | ||
|
cabc98f310 | ||
|
244002502b | ||
|
434445973d | ||
|
19526d2322 | ||
|
d4e8657e8f | ||
|
1b2b6910ac | ||
|
f675bfe178 | ||
|
7926c1bc88 | ||
|
3e05d7e7fd | ||
|
58b5eb89b8 | ||
|
36ff19c53b | ||
|
5119e7fd6a | ||
|
f98358aa45 | ||
|
3420b2fe8a | ||
|
42faecf310 | ||
|
6bfcc96651 | ||
|
3e292dc222 | ||
|
19ca41896e | ||
|
529dbf9b65 | ||
|
88e2d04b90 | ||
|
fcc535706a | ||
|
04ed5ddeba | ||
|
6ca702d680 | ||
|
5cb99321d7 | ||
|
9be2ba6170 | ||
|
f1b005d7b8 | ||
|
dbe0c4e60c | ||
|
dde79edba1 | ||
|
117bbf7cd9 | ||
|
89b0fd9628 | ||
|
804aa896a7 | ||
|
3e08eee511 | ||
|
8e5f4c0622 | ||
|
1503701d9e | ||
|
d9bf571f5c | ||
|
f46ed43b81 | ||
|
67ce8f18c6 | ||
|
6de59e6b3e | ||
|
6b4c087e9c | ||
|
5f7e43a2b1 | ||
|
de03731e92 | ||
|
2fbbdd68cc | ||
|
4736767b76 | ||
|
a6409e9887 | ||
|
877c867a92 | ||
|
92baf14531 | ||
|
ca54ea12b3 | ||
|
0e19c3a120 | ||
|
4d8a60b435 | ||
|
953c29873d | ||
|
c7daa66b26 | ||
|
c79bdd6ae6 | ||
|
0ce568e789 | ||
|
ab2773416b | ||
|
a44173ea51 | ||
|
5eab8ec610 | ||
|
edd13895dd | ||
|
aeb8e36cdb | ||
|
ebf493f726 | ||
|
342dc760da | ||
|
7f0d45ce47 | ||
|
2a195beb30 | ||
|
b3932f70ed | ||
|
82a0bcecfa | ||
|
7571842d84 | ||
|
d8795f9f8f | ||
|
3a36a9d337 | ||
|
c1c372c320 | ||
|
a43151103e | ||
|
d3d16b15ac | ||
|
8398cabd17 | ||
|
20f79f870e | ||
|
9881dbf927 | ||
|
195db2cff5 | ||
|
c95a09047a | ||
|
61860ff56f | ||
|
1e9e3cafb8 | ||
|
6419e59036 | ||
|
3b147205ba | ||
|
08c8d310d3 | ||
|
4bf8e5c13d | ||
|
65c4a4b3fe | ||
|
3c326974a0 | ||
|
184076fe7a | ||
|
96a3210501 | ||
|
ce3ea58778 | ||
|
d256168b62 | ||
|
bf57a8f660 | ||
|
484da62f50 | ||
|
92cf183f56 | ||
|
6858dae1c3 | ||
|
c2f1e65cc3 | ||
|
b135dadb17 | ||
|
4eecd9e308 | ||
|
be0f6ee080 | ||
|
1c7e2defea | ||
|
51113c17e9 | ||
|
b35c03ac3a | ||
|
8b7e44682c | ||
|
b384d3bc24 | ||
|
13f2426aab | ||
|
a9af0a6cc2 | ||
|
57a307d0cd | ||
|
2358757b66 | ||
|
bb5467789b | ||
|
5063a6f2a9 | ||
|
40a96a2524 | ||
|
09da8026b6 | ||
|
e0e56e9e9c | ||
|
43917796c2 | ||
|
4b7eb1436d | ||
|
7bca3c81a9 | ||
|
2c5a2d112c | ||
|
622465dc20 | ||
|
a96f10e55d | ||
|
d584513cb2 | ||
|
ec08bd5c41 | ||
|
b292d1ab95 | ||
|
5f5256b4c4 | ||
|
20cbb89412 | ||
|
384bd96165 | ||
|
ef70988027 | ||
|
71fdf804de | ||
|
167b363eb3 | ||
|
8a2dfdb032 | ||
|
007c367018 | ||
|
a1685fd0d8 | ||
|
ca03b0a811 | ||
|
35322bcbaa | ||
|
b3e2e26079 | ||
|
035a273d30 | ||
|
a4dfa04a0b | ||
|
a8af946bdc | ||
|
ee15ec9144 | ||
|
c706c6c34f | ||
|
96e34fbb7d | ||
|
b119cde030 | ||
|
378caa7203 | ||
|
184f5701e9 | ||
|
1fc09f0235 | ||
|
56b4699650 | ||
|
c3e62e1e4e | ||
|
5f64621d46 | ||
|
076bb30b6c | ||
|
915bdd6576 | ||
|
39bbd8c94f | ||
|
137a2d6e30 | ||
|
f39ff20485 | ||
|
7f80052fdf | ||
|
122d5e549a | ||
|
9321758d91 | ||
|
d4bcfe8c16 | ||
|
8bfebf1c24 | ||
|
2d0f30a67c | ||
|
a3ab2f6790 | ||
|
b1e0253f29 | ||
|
a29c131e90 | ||
|
8bf5e96af9 | ||
|
fb2367d14f | ||
|
cc9f6650a8 | ||
|
86cf62699c | ||
|
3903391f3c | ||
|
c4a725fe98 | ||
|
553c2e05cd | ||
|
33f5d94f23 | ||
|
6b89e66bd0 | ||
|
1efe41c248 | ||
|
27fe7e9e72 | ||
|
9060757064 | ||
|
7d688769cf | ||
|
9db4509664 | ||
|
da080cc26e | ||
|
2fea9ee21b | ||
|
85166c60fd | ||
|
0e54a3c37a | ||
|
5e4b3d13eb | ||
|
07a3283e53 | ||
|
50c844c5b8 | ||
|
fc055dbd80 | ||
|
945855a2b8 | ||
|
ea1d090109 | ||
|
103fda1d91 | ||
|
e981badb94 | ||
|
351d11c9bd | ||
|
c6c9eb4ccb | ||
|
1d06523366 | ||
|
9819f1cc6b | ||
|
05f29c8720 | ||
|
1234d207e9 | ||
|
cc499505df | ||
|
b2a86350fc | ||
|
4a4c5d0fe2 | ||
|
f9539e57ef | ||
|
0338df2f6d | ||
|
9232264b8a | ||
|
92296fa6a1 | ||
|
07b094729e | ||
|
5fad91a680 | ||
|
c0671ac133 | ||
|
15d9faba57 | ||
|
e7a7f02f4c | ||
|
a0ef5a4ae1 | ||
|
32e2f7c8e5 | ||
|
6839f15a32 | ||
|
e5427ab11b | ||
|
dabfbc623e | ||
|
cc555a389b | ||
|
1617ee6c3f | ||
|
39ff039b8a | ||
|
e9474f1c84 | ||
|
471aef5fc6 | ||
|
8304df2520 | ||
|
e0d934ac9d | ||
|
b8dda089e2 | ||
|
6d3506548d | ||
|
ec5288caa5 | ||
|
8db77cc361 | ||
|
076fdbf6df | ||
|
2f3dcc2327 | ||
|
2f2f1e5088 | ||
|
e11371c75f | ||
|
3849063d36 | ||
|
652a6df62b | ||
|
05b0c9d7e6 | ||
|
d7e4be9cdb | ||
|
5cc65d193f | ||
|
158c836e26 | ||
|
4e52bcee44 | ||
|
ceec93c832 | ||
|
d4216264e8 | ||
|
fd03cd5493 | ||
|
9640add1f7 | ||
|
f42a2e8451 | ||
|
22c9970309 | ||
|
45c332110e | ||
|
2da2ac492e | ||
|
580180a720 | ||
|
af64149885 | ||
|
5075d0495b | ||
|
9c58d4f7f2 | ||
|
3a21423386 | ||
|
e676c9388d | ||
|
a074525bfb | ||
|
3f33fbf8cf | ||
|
1b076b7a35 | ||
|
534b22aec5 | ||
|
dca54c8f8a | ||
|
255e982542 | ||
|
f2baa48608 | ||
|
9fac676796 | ||
|
13af3f3442 | ||
|
fc7d74385f | ||
|
3c66b031e3 | ||
|
b6ba8cc84a | ||
|
df3b359280 | ||
|
0e840f1c39 | ||
|
546902df63 | ||
|
8026ed6b0a | ||
|
f66cbb0b5e | ||
|
6985286300 | ||
|
22618213c7 | ||
|
6d4d402a78 | ||
|
25a6bc4e01 | ||
|
ddf05b0795 | ||
|
3daf4274e8 | ||
|
ec4c84176f | ||
|
5c3017b6ae | ||
|
5023a41fb7 | ||
|
fd1c9e34ac | ||
|
18042163ce | ||
|
34ec3caaa7 | ||
|
650fd79f92 | ||
|
0e070c805e | ||
|
6c158da5a8 | ||
|
903adc8708 | ||
|
14b0e8c0b6 | ||
|
c56f25409d | ||
|
5ba596786c | ||
|
0fca6e187c | ||
|
1fc8350795 | ||
|
cb1638530d | ||
|
972744a68f | ||
|
533a461db0 | ||
|
58e4d92884 | ||
|
4e9f26afa3 | ||
|
96d338e437 | ||
|
323d3d246a | ||
|
a49d1d1615 | ||
|
9d29abdfa0 | ||
|
ff3b9ccf6e | ||
|
8df06f62bc | ||
|
40a3de8c37 | ||
|
9cea76483a | ||
|
c92ba393c2 | ||
|
9faf2fa8a0 | ||
|
bb89daa2a8 | ||
|
c8d9ad894b | ||
|
90ffbc1d39 | ||
|
a25895bf72 | ||
|
8f37301d1f | ||
|
72abcedf48 | ||
|
ecd86ccffc | ||
|
ea7b4b4d6c | ||
|
00560ed830 | ||
|
a348162c5b | ||
|
8c4843f69a | ||
|
5bd352f69b | ||
|
c971f4a0a9 | ||
|
0cf4fbd471 | ||
|
c00e237421 | ||
|
a98e80c4ff | ||
|
05d821e680 | ||
|
ab6b4ca1f2 | ||
|
0a0f3fc733 | ||
|
ce8ac6d96a | ||
|
512aa50fdd | ||
|
d9181236b2 | ||
|
d6178a13d7 | ||
|
d930f267f6 | ||
|
ea1ec7ffab | ||
|
e698664927 | ||
|
b75dafba87 | ||
|
bdb6d978a9 | ||
|
e848a0e61c | ||
|
df71f82037 | ||
|
eb341cadd7 | ||
|
849b492b33 | ||
|
3a7fce49a3 | ||
|
851c394e64 | ||
|
2de03a7d91 | ||
|
25253034d5 | ||
|
94a235db93 | ||
|
cbe4912a16 | ||
|
72bf36ea70 | ||
|
2c2443ffac | ||
|
d906a383ca | ||
|
aba39d271b | ||
|
ddf5563174 | ||
|
39bdd09447 | ||
|
f94b348782 | ||
|
9261daa233 | ||
|
fc8494b2c2 | ||
|
1ba1b8c711 | ||
|
aac073feeb | ||
|
1bdee0b59b | ||
|
185281957d | ||
|
cf8ee47589 | ||
|
2d87a2eb1c | ||
|
5e88228767 | ||
|
c5d6391898 | ||
|
3d35b48f46 | ||
|
808ca828f1 | ||
|
2ebbeb7499 | ||
|
f14413989c | ||
|
ca996d2546 | ||
|
f492d96301 | ||
|
e3aaaa378d | ||
|
5620456072 | ||
|
ee3be2f979 | ||
|
6129be7b68 | ||
|
e539d2da1e | ||
|
cf0369d622 | ||
|
cb5a28ceca | ||
|
16aef95937 | ||
|
42caf64ae8 | ||
|
7c6324f3d4 | ||
|
52d61aceda | ||
|
07ba352903 | ||
|
075cc8d8df | ||
|
6f4d037a8e | ||
|
1c4af2727c | ||
|
4758e6649c | ||
|
c0a023eaf9 | ||
|
1b1ebf6a77 | ||
|
ce941255e2 | ||
|
9d5085347a | ||
|
85fd765462 | ||
|
0b9d32bdad | ||
|
1cb482be6a | ||
|
755319130e | ||
|
673f6820d1 | ||
|
be93a2a7d4 | ||
|
edfdb693e5 | ||
|
8278abb3f3 | ||
|
a27d7ba524 | ||
|
d7013bee54 | ||
|
40a46e4397 | ||
|
7b95788248 | ||
|
dc94b750de | ||
|
deb07aee06 | ||
|
29cd5ab24e | ||
|
f2fce93826 | ||
|
7976fc7851 | ||
|
c629a85a5c | ||
|
1a95890728 | ||
|
eee65e4b6e | ||
|
31ae3a4ba0 | ||
|
f25e33ee7f | ||
|
7b36686fca | ||
|
4b5817f8ff | ||
|
67b1d15384 | ||
|
42b1cff7b0 | ||
|
e65f1767ab | ||
|
d6be5141e9 | ||
|
089ed6fb65 | ||
|
d8d5545e03 | ||
|
8f3fa18c93 | ||
|
cefaecc2e8 | ||
|
e9c8aa63e3 | ||
|
0e563ee6da | ||
|
32357e3d17 | ||
|
1ca0a7a26c | ||
|
bc3b59fa5e | ||
|
cbf9843a79 | ||
|
d527bd0d92 | ||
|
906745de38 | ||
|
517d7a6dc3 | ||
|
9e3adb5ec7 | ||
|
a6dfcc89fa | ||
|
397f943ca3 | ||
|
0a6b1cd2e9 | ||
|
99cfab18c1 | ||
|
e09ad99973 | ||
|
1d683708e8 | ||
|
1362cd91d0 | ||
|
cee97fcd15 | ||
|
f28bf23a31 | ||
|
dafcf82365 | ||
|
f5dcc69ea1 | ||
|
633d5e7af0 | ||
|
8068dff9d1 | ||
|
bbe629018d | ||
|
d6f63b5fb7 | ||
|
0c1cf2c237 | ||
|
067d3b70aa | ||
|
588447aa90 | ||
|
ca668dfd41 | ||
|
8ab5476cb8 | ||
|
173bd88dbd | ||
|
f51e85e84b | ||
|
fcaeb5db88 | ||
|
74e4b515c5 | ||
|
c170245fc0 | ||
|
e1f7355de4 | ||
|
e565e455e2 | ||
|
d6984f9395 | ||
|
bd84bf4ebd | ||
|
38e46e7614 | ||
|
69113f08f2 | ||
|
b428824269 | ||
|
91c44ec7ab | ||
|
1d5de9f4f4 | ||
|
7d94fdeb48 | ||
|
dd29f8705c | ||
|
e36564668b | ||
|
661f425934 | ||
|
8a0ca04399 | ||
|
409c8b344f | ||
|
7da591048c | ||
|
dea2471e96 | ||
|
1e1a2fce49 | ||
|
66a3aa28fd | ||
|
4faf927030 | ||
|
d6b7a1f034 | ||
|
da1365a309 | ||
|
6bdbb5c5ca | ||
|
42aa08563b | ||
|
1ba6e9437c | ||
|
685b5866e4 | ||
|
9089e75cce | ||
|
0860a5b168 | ||
|
9f50b0af37 | ||
|
e7cea29ad4 | ||
|
69c88477a9 | ||
|
1a69d537c1 | ||
|
0c1fb4e740 | ||
|
2c57a4232c | ||
|
1e3e2defe4 | ||
|
195846a716 | ||
|
3fd2a35482 | ||
|
c791e01bfc | ||
|
88432a0e3f | ||
|
c2d17cac34 | ||
|
49c09eda9b | ||
|
35ca6ab319 | ||
|
4224984525 | ||
|
a578571f59 | ||
|
3110d1f29a | ||
|
1dce95613a | ||
|
ec6ad91bb7 | ||
|
05169efec1 | ||
|
841abb53e6 | ||
|
ae24dbd064 | ||
|
a575aa13b9 | ||
|
c677b167b6 | ||
|
e49dd525b0 | ||
|
663007a5c7 | ||
|
31da2fad51 | ||
|
3b02d23ce2 | ||
|
492ce090bd | ||
|
8aed0c3613 | ||
|
869807406d | ||
|
d042a3ca76 | ||
|
a749f6cc14 | ||
|
2fcf8bb5be | ||
|
f3d7f2e64f | ||
|
e8c7278337 | ||
|
6a9a567670 | ||
|
d9cdc46f84 | ||
|
8b8d890064 | ||
|
c393148748 | ||
|
4c78290028 | ||
|
f1d1f6edfd | ||
|
ca69da735e | ||
|
7aedb8ed7a | ||
|
8fa8310ec9 | ||
|
ded02941f2 | ||
|
dd96ee1512 | ||
|
a84d14b382 | ||
|
1ab711e2ac | ||
|
65a476a386 | ||
|
f4914849df | ||
|
c550953c6d | ||
|
ee7a947d1f | ||
|
18eb1a0ffd | ||
|
c3a3ba2ebe | ||
|
cb212b24fd | ||
|
f80880ccaa | ||
|
0c83bebf03 | ||
|
0289038961 | ||
|
b518d93b45 | ||
|
4bd66a2150 | ||
|
826c358b3a | ||
|
0021d65dc0 | ||
|
26135b0313 | ||
|
f19572c4cc | ||
|
8587ce6afd | ||
|
20037e9919 | ||
|
0ef72044e2 | ||
|
506bbb7283 | ||
|
d90e62e806 | ||
|
68f36d82d5 | ||
|
8ac94d6519 | ||
|
5df341ed7e | ||
|
91524d1a60 | ||
|
dcf9ff2182 | ||
|
e182597cb1 | ||
|
2ebf8745a2 | ||
|
2d596045d1 | ||
|
0c1ec946aa | ||
|
64786b4c93 | ||
|
1a397681fe | ||
|
0fdac9ba70 | ||
|
cafdc48147 | ||
|
8e11cf9b1c | ||
|
9b6d0d994d | ||
|
8e56f072e0 | ||
|
d9f13558d6 | ||
|
6c2f34b6bb | ||
|
828efd9d00 | ||
|
879a7432b5 | ||
|
a989b5a879 | ||
|
bed1a1baa1 | ||
|
9d4aadbf7a | ||
|
527258c316 | ||
|
3155e2a63b | ||
|
47ac706972 | ||
|
ba2fec9891 | ||
|
baff5ad565 | ||
|
d7d21f0d6e | ||
|
6a5c1343f8 | ||
|
4f0bfabe7a | ||
|
fe3df4dcb4 | ||
|
b93bf9f654 | ||
|
c639063050 | ||
|
0ca92bf2a8 | ||
|
feb6f5951c | ||
|
9af89381cd | ||
|
cdd39ec69e | ||
|
96152f56e7 | ||
|
0274245e90 | ||
|
fe8fded23b | ||
|
b659bacc43 | ||
|
da0e6bc590 | ||
|
cd72818438 | ||
|
9369adb4bd | ||
|
67e1c37e0f | ||
|
99cfef882f | ||
|
5f8598abb7 | ||
|
e3c2af14b3 | ||
|
2c4bb5d91d | ||
|
973478e704 | ||
|
b7083d7a0e | ||
|
6e4968225e | ||
|
eed9bf71c5 | ||
|
47dbfc4ade | ||
|
4793a0717f | ||
|
0cf4e6620d | ||
|
fa54a58790 | ||
|
f3206b351f | ||
|
7c25b1b455 | ||
|
20fd9099f8 | ||
|
1f082d3e1d | ||
|
a3ac8a6438 | ||
|
8689905a19 | ||
|
ff9d21ff0e | ||
|
0d648f531b | ||
|
82d127883d | ||
|
5d79cc5bee | ||
|
ea1995991b | ||
|
44bc315444 | ||
|
b9cb651c44 | ||
|
f96b99c30c | ||
|
ae7da6ae48 | ||
|
33f9d1aab2 | ||
|
4ee0c83548 | ||
|
8bac57172a | ||
|
f458b52bc7 | ||
|
85f03c0ea4 | ||
|
6aa8c3bd3f | ||
|
69a2e6d3ea | ||
|
73760144e0 | ||
|
ba9174406c | ||
|
67f1a5b59a | ||
|
0766898d5d | ||
|
aa5b678f94 | ||
|
37c2408199 | ||
|
4f1b6f345b | ||
|
4b02610e8c | ||
|
67741aeaa9 | ||
|
b3e161c328 | ||
|
8fda3f04fe | ||
|
823723121d | ||
|
9f5e1f4818 | ||
|
5960e20cde | ||
|
d1c01b3164 | ||
|
47682985d3 | ||
|
73c268dc1c | ||
|
8cd2adf8a1 | ||
|
f3e0f86641 | ||
|
38dd219d85 | ||
|
0ba242ea4a | ||
|
a0db81723b | ||
|
0ff43b27bb | ||
|
748be3f702 | ||
|
2ff9799e7a | ||
|
c92de947b6 | ||
|
ae7c97aef8 | ||
|
d6908ee145 | ||
|
3d49459d64 | ||
|
2ff904fb2b | ||
|
70d362f22c | ||
|
a2a200175f | ||
|
7d029f8bfe | ||
|
9adc7859c8 | ||
|
e5859e145d | ||
|
2eaa708e3a | ||
|
c7d6ab2f71 | ||
|
f358e76f5b | ||
|
e089d07994 | ||
|
176e8f0ddc | ||
|
859335a1ae | ||
|
2be64d63e1 | ||
|
3078e2c1d9 | ||
|
6d7250bfca | ||
|
26883c0d7e | ||
|
497b32a0a3 | ||
|
82795a3b81 | ||
|
8f676e88fb | ||
|
b85ce7f761 | ||
|
fbcc20adb7 | ||
|
3e4caf2e13 | ||
|
bfe6ff5893 | ||
|
a1d48e3651 | ||
|
d22eb3591e | ||
|
2d1b1e7968 | ||
|
bab1097db3 | ||
|
d6cd48e12a | ||
|
595711bd7c | ||
|
592d92424e | ||
|
3ca03603c2 | ||
|
e8ec6af73e | ||
|
7abb6429b0 | ||
|
b46e0d61cf | ||
|
f7449563ef | ||
|
36fb5c1e2b | ||
|
7e5008f0ff | ||
|
c8868a1c7a | ||
|
26f6f77db6 | ||
|
0b27d703fa | ||
|
e7a6e7393a | ||
|
c33b8d7692 | ||
|
eda51d1dcc | ||
|
23930a249e | ||
|
2516ffa78e | ||
|
2ae90f9615 | ||
|
0bb478cb23 | ||
|
6193537cd3 | ||
|
e42e1cde61 | ||
|
bc4e5e39ff | ||
|
8d147b993f | ||
|
547556b5b2 | ||
|
f0811a4a3c | ||
|
c059c13785 | ||
|
ab136c5c39 | ||
|
d0823066cc | ||
|
131819a15c | ||
|
b74fbdeda7 | ||
|
eeca44d162 | ||
|
caef47a0cf | ||
|
5b46400240 | ||
|
67778eac60 | ||
|
571a986496 | ||
|
f6746854ac | ||
|
8b970109ea | ||
|
8f80efa4ab | ||
|
0de804a256 | ||
|
a7232339d8 | ||
|
ba05e47b3e | ||
|
1e7274e9c6 | ||
|
27b251ac99 | ||
|
87f53b9cc9 | ||
|
05e5927c41 | ||
|
980acddbfa | ||
|
9f95a14e91 | ||
|
9a33a0fba9 | ||
|
00279d6e64 | ||
|
0996398372 | ||
|
2384fbcb89 | ||
|
098ca670d0 | ||
|
22225a1eaa | ||
|
03775917db | ||
|
bcffbf74f3 | ||
|
987062c302 | ||
|
497edbd0ee | ||
|
f5711fc385 | ||
|
5e045b8688 | ||
|
80dfd5404f | ||
|
71bd8b4de9 | ||
|
7dc16c237a | ||
|
e591378ff1 | ||
|
36967fcedb | ||
|
f3949ba69d | ||
|
6db9cefaaf | ||
|
ba3a0e104a | ||
|
238570c0da | ||
|
3c046c0a21 | ||
|
e00a040a80 | ||
|
535c624e0d | ||
|
cc450b405d | ||
|
bc13a277ce | ||
|
69b01d4398 | ||
|
fd35cda8bc | ||
|
3e391aaed9 | ||
|
782d098baf | ||
|
de99f99a01 | ||
|
9355b72931 | ||
|
6fb694658e | ||
|
54c97d295f | ||
|
8bf56078c5 | ||
|
db215fe289 | ||
|
7bd484ebd3 | ||
|
0983ebb257 | ||
|
e0cf25d109 | ||
|
9e2bc8853f | ||
|
06599f487f | ||
|
2508792f29 | ||
|
d470010293 | ||
|
951564d697 | ||
|
a576ea216f | ||
|
9f5fd075e7 | ||
|
556513a6e7 | ||
|
15d4d80d45 | ||
|
d5036d7bfe | ||
|
09d077dc25 | ||
|
fa47d4b9b1 | ||
|
e756bb69e4 | ||
|
f2f0a1e871 | ||
|
858d941ff8 | ||
|
c6cc7c6e6a | ||
|
bc51571a00 | ||
|
c42f58c235 | ||
|
00c3bc3aab | ||
|
21c2d0c7b0 | ||
|
5bc6f964db | ||
|
348665934e | ||
|
081e897588 | ||
|
dff444d441 | ||
|
bf6e287572 | ||
|
229d21b50d | ||
|
8a4f6aca97 | ||
|
c84b717773 | ||
|
447915af9d | ||
|
30f968fd7f | ||
|
484e81ef6e | ||
|
4cc98de6d7 | ||
|
4f5f362d60 | ||
|
450be1ad3e | ||
|
3dc9b427b9 | ||
|
b27753aa3d | ||
|
24757e32d1 | ||
|
9931295bea | ||
|
c0e165bf97 | ||
|
4b39b1c76b | ||
|
8629a55215 | ||
|
3cb119cb32 | ||
|
a5a6b9f641 | ||
|
1ea4c4b519 | ||
|
6877d8b9e2 | ||
|
2f238a11c1 | ||
|
6bd5ef29ae | ||
|
7d5f7a517c | ||
|
ce66fefbff | ||
|
8c59cc72a3 | ||
|
60f6272ed9 | ||
|
4e58dabb32 | ||
|
fe5d9b4b6a | ||
|
8e4ef6d89d | ||
|
beff913813 | ||
|
284634f30d | ||
|
606fb8c394 | ||
|
9525bfaa66 | ||
|
b0725e75c6 | ||
|
62c1a4e8c8 | ||
|
75e06fddf1 | ||
|
a93c01ae6a | ||
|
3e625994bd | ||
|
2c38a14a14 | ||
|
0cca2d4f6e | ||
|
29a784c240 | ||
|
7b24931f67 | ||
|
1ee096d229 | ||
|
bad00f825a | ||
|
0011a747f7 | ||
|
330048ad6b | ||
|
294db228bc | ||
|
205ab95819 | ||
|
c87f90102c | ||
|
4c7a03c4cb | ||
|
c894be92fb | ||
|
5675a6ee64 | ||
|
9769b3b71a | ||
|
9ce2427e79 | ||
|
2161f334a0 | ||
|
ca05b650aa | ||
|
da1780f826 | ||
|
dab81f5981 | ||
|
ad83fbe2a1 | ||
|
9a03d36af4 | ||
|
5f65df774f | ||
|
b420f0165a | ||
|
907ef467ea | ||
|
27a1ab52b1 | ||
|
4cedbca365 | ||
|
369f23ff3d | ||
|
10f6a0154f | ||
|
5296fc991c | ||
|
616535b7a7 | ||
|
cf038d0368 | ||
|
499610779e | ||
|
c1c78f9e8c | ||
|
7404091787 | ||
|
6538409282 | ||
|
91bdcd8b20 | ||
|
034017d526 | ||
|
9ded9dd4e5 | ||
|
9bdcdeef67 | ||
|
9e40938a29 | ||
|
f1b0dc6f04 | ||
|
784ec3978a | ||
|
1558c0e85e | ||
|
547fa3ed2c | ||
|
2a1d536ec6 | ||
|
22cc9b7dc7 | ||
|
9f637966f8 | ||
|
2146d93609 | ||
|
01ec5e3b32 | ||
|
ea1d359767 | ||
|
198e9a3db1 | ||
|
ff8f850936 | ||
|
fdb7b086bd | ||
|
cd7ce6a295 | ||
|
fde1e4996d | ||
|
f5b835157b | ||
|
8dd2b48488 | ||
|
09b54a8c9e | ||
|
4348ffee8d | ||
|
d7103a4439 | ||
|
3b536f2701 | ||
|
e5fc7cf4bd | ||
|
5b4a44dbab | ||
|
403aa5cfa0 | ||
|
68977ebc26 | ||
|
d262ca314d | ||
|
20b9887476 | ||
|
bf78ccac30 | ||
|
620f1ef1a9 | ||
|
2642573702 | ||
|
bb75b36b77 | ||
|
dc6c3eacbc | ||
|
07cd7cb3dc | ||
|
67160f4cae | ||
|
f7ab417757 | ||
|
d78619cd66 | ||
|
f91cc3dd5d | ||
|
965713f3e7 | ||
|
58e30a7048 | ||
|
2c02a2fc5c | ||
|
1a04a38a06 | ||
|
6a9e584215 | ||
|
b7f987a185 | ||
|
afabbc28c5 | ||
|
2f3417a590 | ||
|
bcdf161967 | ||
|
7a19def34c | ||
|
9bfd997c12 | ||
|
2f2ecad8fd | ||
|
c21d00ef44 | ||
|
1c2d200918 | ||
|
5e5aa9fb69 | ||
|
3c6b3b55c7 | ||
|
0988915d06 | ||
|
5a6cdffb4b | ||
|
00aef590cf | ||
|
3e8394ee33 | ||
|
493bb65005 | ||
|
2d1d64b214 | ||
|
71f8680d66 | ||
|
05e4aed787 | ||
|
f63d584cb1 | ||
|
ae12a219d1 | ||
|
a274f63d50 | ||
|
4189a8567e | ||
|
d846b8601e | ||
|
a21ce7ac8b | ||
|
c36205f10d | ||
|
21fe5017bb | ||
|
6dc4c994b8 | ||
|
b0a021d2cc | ||
|
f8ae49d20b | ||
|
e56c30eb59 | ||
|
6852001b02 | ||
|
90c69876ca | ||
|
af6aacfc0e | ||
|
95e3f5d495 | ||
|
c70ceecff4 | ||
|
b4b9ce83ed | ||
|
38ee28b1d3 | ||
|
947d390421 | ||
|
9578152ae4 | ||
|
72375ed652 | ||
|
6c6f6fb2b8 | ||
|
e3874dab7c | ||
|
a65cc8d26d | ||
|
21042371e6 | ||
|
12d60e0acf | ||
|
50d72fc111 | ||
|
d16f591183 | ||
|
5b903a6e2d | ||
|
783c722661 | ||
|
41c14f84dd | ||
|
2075800828 | ||
|
c503006b2e | ||
|
1b14b06e4c | ||
|
51035194d9 | ||
|
ec165abfa1 | ||
|
eab411a379 | ||
|
3043423c82 | ||
|
c4aa00bee1 | ||
|
b8fa789022 | ||
|
cc4baa2fe9 | ||
|
e9bdbe4574 | ||
|
372d4d64e3 | ||
|
54d3b64497 | ||
|
e91d67563f | ||
|
1865bb6526 | ||
|
216b86a082 | ||
|
0ecf6458ee | ||
|
86370bd5c5 | ||
|
7b7b54ce0f | ||
|
78f24e5535 | ||
|
d3005603e1 | ||
|
571ce13dd6 | ||
|
3f8b5449e8 | ||
|
eba4da5802 | ||
|
172ccdbe5b | ||
|
ca823d1bbc | ||
|
d62cce455f | ||
|
c5b9e9aef8 | ||
|
d715094383 | ||
|
4469453425 | ||
|
a1cc9238b0 | ||
|
cb8d56f988 | ||
|
4c63a91036 | ||
|
d93d21fdfd | ||
|
f2b5210b36 | ||
|
19182d5f25 | ||
|
151dfc9a25 | ||
|
76f665d57f | ||
|
a4bfa7d18b | ||
|
df912e9ab6 | ||
|
118da8e85d | ||
|
3c8aeb445a | ||
|
723584dd4f | ||
|
b0a73a9388 | ||
|
de14b82af9 | ||
|
14e8167df9 | ||
|
81a700079f | ||
|
255cc8b9eb | ||
|
635db46b0d | ||
|
1001ae5474 | ||
|
6e31799948 | ||
|
89840649d9 | ||
|
1a007164f7 | ||
|
c06c5f7cbd | ||
|
8f74fe6e1b | ||
|
5e126032ff | ||
|
b05010c3eb | ||
|
f669e5dd34 | ||
|
518115fddc | ||
|
bf6593372b | ||
|
44f6b76365 | ||
|
4919dae294 | ||
|
c02d0aa2cb | ||
|
6a2c2a646f | ||
|
e6fe127433 | ||
|
92edfb59f7 | ||
|
0024165f1f | ||
|
2b66ed5fef | ||
|
6c4561f3d8 | ||
|
e5e756c0b4 | ||
|
b040d64a3c | ||
|
f212341d01 | ||
|
c81903d72d | ||
|
9dcfdb9578 | ||
|
3cf31a8b17 | ||
|
2916910ea1 | ||
|
6b4c2464ad | ||
|
f316300113 | ||
|
e9e9fee833 | ||
|
b8bb1d67d4 | ||
|
69462e5e14 | ||
|
ab1297f053 | ||
|
dd95e4f851 | ||
|
e1e97c6edd | ||
|
cef2ac99e5 | ||
|
3eb11fafca | ||
|
63361dcfc7 | ||
|
fa48e90e3c | ||
|
71ca249d2b | ||
|
047522a34a | ||
|
2b0b8cd665 | ||
|
0079ce4ad0 | ||
|
fbce8786d0 | ||
|
63708a1a5b | ||
|
589f72e325 | ||
|
04f78c935c | ||
|
40f9f7e909 | ||
|
5e0ddfb0e6 | ||
|
2363fc0e5e | ||
|
38cf588eee | ||
|
887e893fc8 | ||
|
2a84a3078b | ||
|
d55903764e | ||
|
358a0607fe | ||
|
0ebd1daf30 | ||
|
70bcaf63ba | ||
|
876a02a504 | ||
|
f6db7975c5 | ||
|
d6d4653d80 | ||
|
fce83f8656 | ||
|
e88c90e898 | ||
|
3c8d8f0d02 | ||
|
b985eaa98c | ||
|
31155740c3 | ||
|
5ad8bbe8cb | ||
|
6916fabd51 | ||
|
8bad06f158 | ||
|
6c9e538f56 | ||
|
4f6cd05a53 | ||
|
94f57e5dd7 | ||
|
159f853e06 | ||
|
899fc29eef | ||
|
44f77c9e82 | ||
|
803e7af595 | ||
|
ad11cea33c | ||
|
f9c593d66c | ||
|
7798252285 | ||
|
91e6830ec4 | ||
|
5b50a50559 | ||
|
b8aa9c6221 | ||
|
77b3489987 | ||
|
37d77f29f7 | ||
|
635bd12050 | ||
|
7543a91086 | ||
|
4a38949886 | ||
|
0c31320c12 | ||
|
c7b71a3376 | ||
|
ee8fab929c | ||
|
e819834505 | ||
|
cfdf940c05 | ||
|
6bb800a7e1 | ||
|
9a464b70c1 | ||
|
2e059727a9 | ||
|
80689c6444 | ||
|
d092a85b6c | ||
|
0c5afe9269 | ||
|
51c8e2f3ab | ||
|
d7cc47d73a | ||
|
de02d30b00 | ||
|
2cad5cf45b | ||
|
2fb083f3e2 | ||
|
b06d190451 | ||
|
a85359b031 | ||
|
e515a88faf | ||
|
3c10c71a91 | ||
|
085dd0a6c5 | ||
|
759116f4c5 | ||
|
89d1892959 | ||
|
7831a100b3 | ||
|
45b9e8417d | ||
|
c9a4062c37 | ||
|
ce4144eee4 | ||
|
59580d8986 | ||
|
8ebd2d3dfd | ||
|
14a8b819dc | ||
|
fc018ea9ea | ||
|
85f3e23e7f | ||
|
37dc0e7d6e | ||
|
3446f15bf3 | ||
|
ceb4f8a6ab | ||
|
f3d76b42b3 | ||
|
2d6ebc5801 | ||
|
9cc5260b68 | ||
|
ca9172ddec | ||
|
878e2f726a | ||
|
bf00068731 | ||
|
a118e268af | ||
|
71db08a139 | ||
|
7b25b39a17 | ||
|
185102bd69 | ||
|
5bbe0d0782 | ||
|
6138e16ce2 | ||
|
d6b9ca48a5 | ||
|
9fe4a667bd | ||
|
e2f6ec83d6 | ||
|
af41a5cb49 | ||
|
f4e60ae986 | ||
|
bf7eef7109 | ||
|
5e7eab4dd8 | ||
|
c78fbe5282 | ||
|
a5b50d06bd | ||
|
a7a5e98b7e | ||
|
408c10b5bb | ||
|
6d0676fd86 | ||
|
a9fc8792c8 | ||
|
f18a27bee9 | ||
|
e1f28d3504 | ||
|
60bd9580e2 | ||
|
7a4b72ed11 | ||
|
33d7a35515 | ||
|
964fb77fa5 | ||
|
f46895d750 | ||
|
98f70d87f6 | ||
|
624b26e1de | ||
|
ad15532235 | ||
|
642676a3b7 | ||
|
3c17dbb43e | ||
|
7024a53e79 | ||
|
35671127d9 | ||
|
37ebc28756 | ||
|
5bfba89b0a | ||
|
290aeaf755 | ||
|
90bf659b29 | ||
|
de7d1d2167 | ||
|
75b8647a32 | ||
|
acd61a138e | ||
|
5f0c95e70e | ||
|
3256761ead | ||
|
ad62ae561c | ||
|
41b2f52f70 | ||
|
680c293c34 | ||
|
b4a3fd31c8 | ||
|
1301b71b7c | ||
|
2df2defa02 | ||
|
dcc73423e5 | ||
|
aa6512e70f | ||
|
1b3c0f1799 | ||
|
e572bc4e76 | ||
|
3d4476ac53 | ||
|
0205597bd0 | ||
|
4b7bf74da2 | ||
|
fb1340f74b | ||
|
e4a7264564 | ||
|
dd10f6397f | ||
|
220f980e12 | ||
|
2b6a67c5d0 | ||
|
8f26ba5487 | ||
|
4b493c2c33 | ||
|
c2f7942aea | ||
|
efbd429115 | ||
|
cec2172225 | ||
|
b0a3c9e8cf | ||
|
657edb3892 | ||
|
fe93742c8f | ||
|
d6a75262d5 | ||
|
32d8c55642 | ||
|
9c4077ebc4 | ||
|
edc9ad13bf | ||
|
3d62f09fbd | ||
|
815c28da0e | ||
|
403ed07ad9 | ||
|
a4329d326c | ||
|
7f160d49f9 | ||
|
345bb18575 | ||
|
bde46632d4 | ||
|
ec0f9f6dcf | ||
|
45fafb2769 | ||
|
79cfc548fc | ||
|
a1ac1a61b7 | ||
|
552ee9decd | ||
|
ca8b112e8c | ||
|
fda0a87cb5 | ||
|
ae2cf7e1e7 | ||
|
315f450b01 | ||
|
03c6febc44 | ||
|
845b7f06f9 | ||
|
ff0ff75d22 | ||
|
37b61f2228 | ||
|
84ae9f9c58 | ||
|
d9ce17642f | ||
|
13c01b6d4a | ||
|
9723c5d377 | ||
|
a520fc9d9a | ||
|
a694e360a4 | ||
|
2e83fa8e2d | ||
|
8c15f5a639 | ||
|
63f2d0bb64 | ||
|
bc5b6cd08c | ||
|
ce63663282 | ||
|
e08b079691 | ||
|
3e751679ba | ||
|
44a75c2a0f | ||
|
f3ba02bc00 | ||
|
4a4c6b9851 | ||
|
f1d4015508 | ||
|
1a3ef2a0aa | ||
|
4e025e1f08 | ||
|
f208107276 | ||
|
3789dab307 | ||
|
38daef065a | ||
|
23fcdabb37 | ||
|
f7d69aab15 | ||
|
def1a30d3e | ||
|
83ecc3f46c | ||
|
8403bafbfc | ||
|
f93ab76fa8 | ||
|
b8a7cf7aed | ||
|
c0f65657a2 | ||
|
12c76d35a5 | ||
|
9748d3eb85 | ||
|
0c420f5135 | ||
|
cd35b9bfac | ||
|
8b8b4e0e6e | ||
|
6e46226cd7 | ||
|
b5fea8ff14 | ||
|
c48dc251e0 | ||
|
a334a21a1d | ||
|
3fab4af949 | ||
|
eace7e4c63 | ||
|
e49d039853 | ||
|
1cc7cecc7b | ||
|
c5dc082da4 | ||
|
30c63eb0ec | ||
|
d72a85fa46 | ||
|
d7c9a0a793 | ||
|
eca939d904 | ||
|
c7a18bd773 | ||
|
f27c8c4471 | ||
|
8d466f5dac | ||
|
cdc58b7a52 | ||
|
1c9a702f73 | ||
|
05cab5c17d | ||
|
db6f675baa | ||
|
35a6a508ee | ||
|
6ee538e0ba | ||
|
b00641d873 | ||
|
c44ab94d28 | ||
|
aa3fc5844a | ||
|
fd209d9685 | ||
|
7cce3fb6ff | ||
|
8d154d7f6a | ||
|
ef6142a6c7 | ||
|
2ff65dd514 | ||
|
af47a0b7e0 | ||
|
57c10ac213 | ||
|
45de73bd00 | ||
|
c21f4faaf8 | ||
|
f516bb2174 | ||
|
54777b42c2 | ||
|
caaa78f7da | ||
|
e2db9bacef | ||
|
6dc8d1f532 | ||
|
03757d82b7 | ||
|
3ca8d2c4f9 | ||
|
80af3a0d07 | ||
|
77aa86e275 | ||
|
abcc32ade0 | ||
|
be2dfe45f9 | ||
|
31e3427559 | ||
|
7e3941da9d | ||
|
b9f5a70ded | ||
|
bd5e1a9540 | ||
|
b8688128e3 | ||
|
e7dc1ef4f3 | ||
|
a19feac217 | ||
|
df79b18a31 | ||
|
c3d0858062 | ||
|
64cce1269e | ||
|
89cebcb6f9 | ||
|
4902ad8923 | ||
|
2dca14028d | ||
|
1a6ae5f034 | ||
|
0e1e265c61 | ||
|
720f77c7cd | ||
|
26ae50e449 | ||
|
4d39898823 | ||
|
0c65926d5b | ||
|
17d2380824 | ||
|
f052a12968 | ||
|
8129815538 | ||
|
2f0ed3a9ca | ||
|
d7122becaf | ||
|
4b2526ebf2 | ||
|
7f4b1c2149 | ||
|
bbf857d635 | ||
|
b5fb6cdb96 | ||
|
010d996b74 | ||
|
1465471b10 | ||
|
a57a4bc6c2 | ||
|
f0b5aee6b8 | ||
|
e046b811b7 | ||
|
6e6d94ab8d | ||
|
bfe816d0d2 | ||
|
d45ce8d6a3 | ||
|
b716e82d18 | ||
|
808a55e42b | ||
|
c8f6cb9fcf | ||
|
9ac4536693 | ||
|
5d88233fbb | ||
|
61a65344a3 | ||
|
c161a86ba1 | ||
|
1eaef6645d | ||
|
6371a7605d | ||
|
3d244cb6a8 | ||
|
a1bc5a8fe2 | ||
|
66bbc0e7ee | ||
|
b5cad9be03 | ||
|
7a89f4a789 | ||
|
14e6d8a802 | ||
|
36aae436bf | ||
|
9e24a1660e | ||
|
2fbf14ace8 | ||
|
7773b3f5be | ||
|
c8b8db6a17 | ||
|
7b37af7eb4 | ||
|
7761d2bf95 | ||
|
ae9ad1d858 | ||
|
8c9678158e | ||
|
2dd0c861bf | ||
|
c25429be44 | ||
|
96d0d22d66 | ||
|
135b9fbcfb | ||
|
1816b5e926 | ||
|
e82ad79eb9 | ||
|
51c47acb41 | ||
|
87fdb0eb42 | ||
|
59dd4ea2b0 | ||
|
193a28431c | ||
|
37f7995dde | ||
|
d34e7fff01 | ||
|
9b22483e00 | ||
|
a25d92fb17 | ||
|
dd58671589 | ||
|
51bf928061 | ||
|
c8ef87197c | ||
|
be1aa11986 | ||
|
bb8f5ec20b | ||
|
1953967681 | ||
|
397f2e63d0 | ||
|
1ac33c960d | ||
|
7e852851fd | ||
|
3fdf2ba4e3 | ||
|
839fb002eb | ||
|
a0eca3e34f | ||
|
a43a30bb7b | ||
|
3e67d97f81 | ||
|
0d3a5d7a9e | ||
|
db029e17b3 | ||
|
a7d2d8d929 | ||
|
10932e3f9d | ||
|
66b513fc00 | ||
|
9bdf27e8e0 | ||
|
9d82106d20 | ||
|
5b3fdee5f5 | ||
|
c7afce4210 | ||
|
d80035b716 | ||
|
0599ce77ff | ||
|
65fe0130f4 | ||
|
c0e7a454a1 | ||
|
d289da76a7 | ||
|
13fda7caeb | ||
|
e6a0a953e8 | ||
|
9871761949 | ||
|
ca244d9bca | ||
|
5b02c685d6 | ||
|
5a2899c57e | ||
|
61012b931c | ||
|
9407adc416 | ||
|
8fcdad022b | ||
|
55da67e9aa | ||
|
42a6217427 | ||
|
5b67202851 | ||
|
bf211eeef5 | ||
|
e003e82c98 | ||
|
3c877f9520 | ||
|
0a66e1f5ea | ||
|
60498c67e4 | ||
|
8a349801dc | ||
|
4f1cd6a9c2 | ||
|
60e9065bf6 | ||
|
e94b9d1d7f | ||
|
63441e8f1e | ||
|
c06384054d | ||
|
5a774b7ed3 | ||
|
54080b6884 | ||
|
5320316f73 | ||
|
46e4a305eb | ||
|
bfb0880523 |
@ -1,6 +1,6 @@
|
||||
root = true
|
||||
|
||||
[*.{js,jsm,json,html,css,pdf.link}]
|
||||
[*.{js,jsm,mjs,json,html,css,pdf.link}]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
indent_size = 2
|
||||
|
@ -3,12 +3,10 @@ l10n/
|
||||
docs/
|
||||
node_modules/
|
||||
external/bcmaps/
|
||||
external/webL10n/
|
||||
external/builder/fixtures/
|
||||
external/builder/fixtures_esprima/
|
||||
external/quickjs/
|
||||
src/shared/cffStandardStrings.js
|
||||
src/shared/fonts_utils.js
|
||||
test/tmp/
|
||||
test/pdfs/
|
||||
web/locale/
|
||||
*~/
|
||||
|
52
.eslintrc
52
.eslintrc
@ -22,21 +22,27 @@
|
||||
"browser": true,
|
||||
"es2022": true,
|
||||
"worker": true,
|
||||
"amd": true,
|
||||
},
|
||||
|
||||
"globals": {
|
||||
"PDFJSDev": false,
|
||||
"exports": false,
|
||||
"structuredClone": false,
|
||||
"SystemJS": false,
|
||||
"PDFJSDev": "readonly",
|
||||
"__non_webpack_import__": "readonly",
|
||||
},
|
||||
|
||||
"rules": {
|
||||
// Plugins
|
||||
"import/export": "error",
|
||||
"import/exports-last": "error",
|
||||
"import/extensions": ["error", "always", { "ignorePackages": true, }],
|
||||
"import/first": "error",
|
||||
"import/named": "error",
|
||||
"import/no-cycle": "error",
|
||||
"import/no-empty-named-blocks": "error",
|
||||
"import/no-commonjs": "error",
|
||||
"import/no-mutable-exports": "error",
|
||||
"import/no-self-import": "error",
|
||||
"import/no-unresolved": ["error", {
|
||||
"ignore": ["pdfjs", "pdfjs-lib", "pdfjs-web"]
|
||||
"ignore": ["display", "pdfjs", "pdfjs-lib", "pdfjs-web", "web", "fluent-bundle", "fluent-dom"],
|
||||
}],
|
||||
"mozilla/avoid-removeChild": "error",
|
||||
"mozilla/use-includes-instead-of-indexOf": "error",
|
||||
@ -47,12 +53,32 @@
|
||||
}],
|
||||
"unicorn/no-abusive-eslint-disable": "error",
|
||||
"unicorn/no-array-push-push": "error",
|
||||
"unicorn/no-new-buffer": "error",
|
||||
"unicorn/no-instanceof-array": "error",
|
||||
"unicorn/no-invalid-remove-event-listener": "error",
|
||||
"unicorn/no-new-buffer": "error",
|
||||
"unicorn/no-typeof-undefined": ["error", {
|
||||
"checkGlobalVariables": false,
|
||||
}],
|
||||
"unicorn/no-useless-promise-resolve-reject": "error",
|
||||
"unicorn/no-useless-spread": "error",
|
||||
"unicorn/prefer-array-find": "error",
|
||||
"unicorn/prefer-array-flat": "error",
|
||||
"unicorn/prefer-array-flat-map": "error",
|
||||
"unicorn/prefer-array-index-of": "error",
|
||||
"unicorn/prefer-array-some": "error",
|
||||
"unicorn/prefer-at": "error",
|
||||
"unicorn/prefer-date-now": "error",
|
||||
"unicorn/prefer-dom-node-append": "error",
|
||||
"unicorn/prefer-dom-node-remove": "error",
|
||||
"unicorn/prefer-logical-operator-over-ternary": "error",
|
||||
"unicorn/prefer-modern-dom-apis": "error",
|
||||
"unicorn/prefer-modern-math-apis": "error",
|
||||
"unicorn/prefer-negative-index": "error",
|
||||
"unicorn/prefer-optional-catch-binding": "error",
|
||||
"unicorn/prefer-regexp-test": "error",
|
||||
"unicorn/prefer-string-replace-all": "error",
|
||||
"unicorn/prefer-string-starts-ends-with": "error",
|
||||
"unicorn/prefer-ternary": ["error", "only-single-line"],
|
||||
|
||||
// Possible errors
|
||||
"for-direction": "error",
|
||||
@ -114,10 +140,12 @@
|
||||
"no-implied-eval": "error",
|
||||
"no-iterator": "error",
|
||||
"no-lone-blocks": "error",
|
||||
"no-lonely-if": "error",
|
||||
"no-multi-str": "error",
|
||||
"no-new-func": "error",
|
||||
"no-new-wrappers": "error",
|
||||
"no-new": "error",
|
||||
"no-new-func": "error",
|
||||
"no-new-symbol": "error",
|
||||
"no-new-wrappers": "error",
|
||||
"no-octal-escape": "error",
|
||||
"no-octal": "error",
|
||||
"no-redeclare": "error",
|
||||
@ -133,6 +161,7 @@
|
||||
"no-useless-escape": "error",
|
||||
"no-useless-return": "error",
|
||||
"prefer-promise-reject-errors": "error",
|
||||
"prefer-spread": "error",
|
||||
"wrap-iife": ["error", "any"],
|
||||
"yoda": ["error", "never", {
|
||||
"exceptRange": true,
|
||||
@ -149,7 +178,7 @@
|
||||
"no-undef-init": "error",
|
||||
"no-undef": ["error", { "typeof": true, }],
|
||||
"no-unused-vars": ["error", {
|
||||
"vars": "local",
|
||||
"vars": "all",
|
||||
"args": "none",
|
||||
}],
|
||||
"no-use-before-define": ["error", {
|
||||
@ -214,9 +243,9 @@
|
||||
}],
|
||||
|
||||
// ECMAScript 6
|
||||
"arrow-body-style": ["error", "as-needed"],
|
||||
"constructor-super": "error",
|
||||
"no-class-assign": "error",
|
||||
"no-confusing-arrow": "error",
|
||||
"no-const-assign": "error",
|
||||
"no-dupe-class-members": "error",
|
||||
"no-duplicate-imports": "error",
|
||||
@ -229,6 +258,7 @@
|
||||
"avoidQuotes": true,
|
||||
}],
|
||||
"prefer-const": "error",
|
||||
"require-yield": "error",
|
||||
"sort-imports": ["error", {
|
||||
"ignoreCase": true,
|
||||
}],
|
||||
|
6
.git-blame-ignore-revs
Normal file
6
.git-blame-ignore-revs
Normal file
@ -0,0 +1,6 @@
|
||||
# Auto-format `.js` files with ESLint/Prettier
|
||||
de36b2aabab2b7fd647d9591f959c4540129541d
|
||||
# Auto-format `.css` files with Stylelint/Prettier
|
||||
8aa2718d225ad701a5b8a2788b42d221f1e4327d
|
||||
# Auto-format `.json` files with Prettier
|
||||
29de9bdce6c9785574994fda0e51533d796a9bb4
|
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -4,7 +4,7 @@
|
||||
*.css text eol=lf
|
||||
*.html text eol=lf
|
||||
*.md text eol=lf
|
||||
*.properties text eol=lf
|
||||
*.ftl text eol=lf
|
||||
*.yml text eol=lf
|
||||
*.json text eol=lf
|
||||
*.config text eol=lf
|
||||
|
1
.github/CODEOWNERS
vendored
Normal file
1
.github/CODEOWNERS
vendored
Normal file
@ -0,0 +1 @@
|
||||
l10n/en-US/*.ftl @mozilla/pdfjs-l10n
|
8
.github/dependabot.yml
vendored
Normal file
8
.github/dependabot.yml
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- "dependencies"
|
27
.github/fluent_linter_config.yml
vendored
Normal file
27
.github/fluent_linter_config.yml
vendored
Normal file
@ -0,0 +1,27 @@
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
# See https://github.com/mozilla-l10n/moz-fluent-linter/blob/main/src/fluent_linter/config.yml
|
||||
# for details
|
||||
|
||||
---
|
||||
ID01:
|
||||
enabled: true
|
||||
exclusions:
|
||||
messages: []
|
||||
files: []
|
||||
ID02:
|
||||
enabled: true
|
||||
min_length: 9
|
||||
exclusions:
|
||||
messages: []
|
||||
files: []
|
||||
CO01:
|
||||
enabled: true
|
||||
brands:
|
||||
- Firefox
|
||||
- Mozilla
|
||||
exclusions:
|
||||
files: []
|
||||
messages: []
|
1
.github/requirements.txt
vendored
Normal file
1
.github/requirements.txt
vendored
Normal file
@ -0,0 +1 @@
|
||||
moz-fluent-linter==0.4.*
|
27
.github/workflows/ci.yml
vendored
27
.github/workflows/ci.yml
vendored
@ -1,18 +1,28 @@
|
||||
name: CI
|
||||
on: [push, pull_request]
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
test:
|
||||
name: Test
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
node-version: [18, lts/*, latest]
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Use Node.js 16 LTS
|
||||
uses: actions/setup-node@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
node-version: '16'
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
|
||||
- name: Install Gulp
|
||||
run: npm install -g gulp-cli
|
||||
@ -20,5 +30,8 @@ jobs:
|
||||
- name: Install other dependencies
|
||||
run: npm install
|
||||
|
||||
- name: Run tests
|
||||
run: gulp ci-test
|
||||
- name: Run external tests
|
||||
run: gulp externaltest
|
||||
|
||||
- name: Run CLI unit tests
|
||||
run: gulp unittestcli
|
||||
|
15
.github/workflows/codeql.yml
vendored
15
.github/workflows/codeql.yml
vendored
@ -1,13 +1,14 @@
|
||||
name: CodeQL
|
||||
on: [push, pull_request]
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
permissions:
|
||||
actions: read
|
||||
contents: read
|
||||
security-events: write
|
||||
|
||||
strategy:
|
||||
@ -17,16 +18,18 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v2
|
||||
uses: github/codeql-action/init@v3
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
queries: security-and-quality
|
||||
|
||||
- name: Autobuild CodeQL
|
||||
uses: github/codeql-action/autobuild@v2
|
||||
uses: github/codeql-action/autobuild@v3
|
||||
|
||||
- name: Perform CodeQL analysis
|
||||
uses: github/codeql-action/analyze@v2
|
||||
uses: github/codeql-action/analyze@v3
|
||||
|
42
.github/workflows/fluent_linter.yml
vendored
Normal file
42
.github/workflows/fluent_linter.yml
vendored
Normal file
@ -0,0 +1,42 @@
|
||||
name: Lint Fluent Reference Files
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- 'l10n/en-US/**.ftl'
|
||||
- '.github/fluent_linter_config.yml'
|
||||
- '.github/workflows/fluent_linter.yml'
|
||||
branches:
|
||||
- master
|
||||
pull_request:
|
||||
paths:
|
||||
- 'l10n/en-US/**.ftl'
|
||||
- '.github/fluent_linter_config.yml'
|
||||
- '.github/workflows/fluent_linter.yml'
|
||||
branches:
|
||||
- master
|
||||
workflow_dispatch:
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
name: Lint
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Use Python 3.12
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
cache: 'pip'
|
||||
|
||||
- name: Install Fluent dependencies
|
||||
run: |
|
||||
pip install -r .github/requirements.txt
|
||||
|
||||
- name: Lint Fluent reference files
|
||||
run: |
|
||||
moz-fluent-lint ./l10n/en-US --config .github/fluent_linter_config.yml
|
64
.github/workflows/font_tests.yml
vendored
Normal file
64
.github/workflows/font_tests.yml
vendored
Normal file
@ -0,0 +1,64 @@
|
||||
name: Font tests
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- 'gulpfile.mjs'
|
||||
- 'src/**'
|
||||
- 'test/test.mjs'
|
||||
- 'test/font/**'
|
||||
- '.github/workflows/font_tests.yml'
|
||||
branches:
|
||||
- master
|
||||
pull_request:
|
||||
paths:
|
||||
- 'gulpfile.mjs'
|
||||
- 'src/**'
|
||||
- 'test/test.mjs'
|
||||
- 'test/font/**'
|
||||
- '.github/workflows/font_tests.yml'
|
||||
branches:
|
||||
- master
|
||||
workflow_dispatch:
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
test:
|
||||
name: Test
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
node-version: [lts/*]
|
||||
os: [windows-latest, ubuntu-latest]
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
|
||||
- name: Install Gulp
|
||||
run: npm install -g gulp-cli
|
||||
|
||||
- name: Install other dependencies
|
||||
run: npm install
|
||||
|
||||
- name: Use Python 3.12
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
cache: 'pip'
|
||||
|
||||
- name: Install Fonttools
|
||||
run: pip install fonttools
|
||||
|
||||
- name: Run font tests
|
||||
run: gulp fonttest --headless
|
37
.github/workflows/lint.yml
vendored
Normal file
37
.github/workflows/lint.yml
vendored
Normal file
@ -0,0 +1,37 @@
|
||||
name: Lint
|
||||
on: [push, pull_request]
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
name: Lint
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
node-version: [lts/*]
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
|
||||
- name: Install Gulp
|
||||
run: npm install -g gulp-cli
|
||||
|
||||
- name: Install other dependencies
|
||||
run: npm install
|
||||
|
||||
- name: Run lint
|
||||
run: gulp lint
|
||||
|
||||
- name: Run lint-chromium
|
||||
run: gulp lint-chromium
|
72
.github/workflows/publish_website.yml
vendored
Normal file
72
.github/workflows/publish_website.yml
vendored
Normal file
@ -0,0 +1,72 @@
|
||||
name: Publish website
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [lts/*]
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
|
||||
- name: Install Gulp
|
||||
run: npm install -g gulp-cli
|
||||
|
||||
- name: Install other dependencies
|
||||
run: npm install
|
||||
|
||||
- name: Build the website
|
||||
run: gulp web
|
||||
|
||||
- name: Archive the website
|
||||
shell: sh
|
||||
run: |
|
||||
chmod -c -R +rX "$INPUT_PATH" | while read line; do
|
||||
echo "::warning title=Invalid file permissions automatically fixed::$line"
|
||||
done
|
||||
tar \
|
||||
--dereference --hard-dereference \
|
||||
--directory "$INPUT_PATH" \
|
||||
-cvf "$RUNNER_TEMP/website.tar" \
|
||||
--exclude=.git \
|
||||
--exclude=.github \
|
||||
.
|
||||
env:
|
||||
INPUT_PATH: build/gh-pages
|
||||
|
||||
- name: Upload the website
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: github-pages
|
||||
path: ${{ runner.temp }}/website.tar
|
||||
retention-days: 1
|
||||
if-no-files-found: error
|
||||
|
||||
deploy:
|
||||
name: Deploy
|
||||
runs-on: ubuntu-latest
|
||||
needs: build
|
||||
permissions:
|
||||
pages: write # Required to deploy to GitHub Pages.
|
||||
id-token: write # Required to verify that the deployment originates from this workflow.
|
||||
|
||||
steps:
|
||||
- name: Deploy the website
|
||||
uses: actions/deploy-pages@v4
|
34
.github/workflows/types_tests.yml
vendored
Normal file
34
.github/workflows/types_tests.yml
vendored
Normal file
@ -0,0 +1,34 @@
|
||||
name: Types tests
|
||||
on: [push, pull_request]
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
test:
|
||||
name: Test
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
node-version: [lts/*]
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
|
||||
- name: Install Gulp
|
||||
run: npm install -g gulp-cli
|
||||
|
||||
- name: Install other dependencies
|
||||
run: npm install
|
||||
|
||||
- name: Run types tests
|
||||
run: gulp typestest
|
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -1,3 +0,0 @@
|
||||
[submodule "test/ttx/fonttools-code"]
|
||||
path = test/ttx/fonttools-code
|
||||
url = https://github.com/behdad/fonttools.git
|
12
.prettierignore
Normal file
12
.prettierignore
Normal file
@ -0,0 +1,12 @@
|
||||
build/
|
||||
l10n/
|
||||
docs/
|
||||
node_modules/
|
||||
external/bcmaps/
|
||||
external/builder/fixtures/
|
||||
external/builder/fixtures_esprima/
|
||||
external/quickjs/
|
||||
test/tmp/
|
||||
test/pdfs/
|
||||
web/locale/
|
||||
*~/
|
11
.prettierrc
11
.prettierrc
@ -5,5 +5,14 @@
|
||||
"semi": true,
|
||||
"tabWidth": 2,
|
||||
"trailingComma": "es5",
|
||||
"useTabs": false
|
||||
"useTabs": false,
|
||||
|
||||
"overrides": [
|
||||
{
|
||||
files: ["tsconfig.json"],
|
||||
options: {
|
||||
parser: "json",
|
||||
},
|
||||
},
|
||||
]
|
||||
}
|
||||
|
@ -3,12 +3,10 @@ l10n/
|
||||
docs/
|
||||
node_modules/
|
||||
external/bcmaps/
|
||||
external/webL10n/
|
||||
external/builder/fixtures/
|
||||
external/builder/fixtures_esprima/
|
||||
external/quickjs/
|
||||
src/shared/cffStandardStrings.js
|
||||
src/shared/fonts_utils.js
|
||||
test/tmp/
|
||||
test/pdfs/
|
||||
web/locale/
|
||||
*~/
|
||||
|
17
.stylelintrc
17
.stylelintrc
@ -3,16 +3,23 @@
|
||||
"stylelint-prettier"
|
||||
],
|
||||
|
||||
"extends": [
|
||||
"stylelint-prettier/recommended"
|
||||
],
|
||||
|
||||
|
||||
"rules": {
|
||||
"prettier/prettier": true,
|
||||
|
||||
"alpha-value-notation": "number",
|
||||
"block-no-empty": true,
|
||||
"color-function-notation": "modern",
|
||||
"color-hex-length": "short",
|
||||
"color-no-invalid-hex": true,
|
||||
"declaration-block-no-duplicate-properties": true,
|
||||
"declaration-block-no-redundant-longhand-properties": true,
|
||||
"declaration-property-value-disallowed-list": {
|
||||
"float": ["inline-start", "inline-end"]
|
||||
},
|
||||
"length-zero-no-unit": [true, {
|
||||
ignore: ["custom-properties"]
|
||||
}],
|
||||
"selector-pseudo-element-colon-notation": "double",
|
||||
"shorthand-property-no-redundant-values": true,
|
||||
},
|
||||
}
|
||||
|
22
README.md
22
README.md
@ -14,7 +14,7 @@ get involved, visit:
|
||||
+ [Issue Reporting Guide](https://github.com/mozilla/pdf.js/blob/master/.github/CONTRIBUTING.md)
|
||||
+ [Code Contribution Guide](https://github.com/mozilla/pdf.js/wiki/Contributing)
|
||||
+ [Frequently Asked Questions](https://github.com/mozilla/pdf.js/wiki/Frequently-Asked-Questions)
|
||||
+ [Good Beginner Bugs](https://github.com/mozilla/pdf.js/issues?direction=desc&labels=5-good-beginner-bug&page=1&sort=created&state=open)
|
||||
+ [Good Beginner Bugs](https://github.com/mozilla/pdf.js/issues?direction=desc&labels=good-beginner-bug&page=1&sort=created&state=open)
|
||||
+ [Projects](https://github.com/mozilla/pdf.js/projects)
|
||||
|
||||
Feel free to stop by our [Matrix room](https://chat.mozilla.org/#/room/#pdfjs:mozilla.org) for questions or guidance.
|
||||
@ -23,9 +23,8 @@ Feel free to stop by our [Matrix room](https://chat.mozilla.org/#/room/#pdfjs:mo
|
||||
|
||||
### Online demo
|
||||
|
||||
Please note that the "Modern browsers" version assumes native support for
|
||||
features such as `async`/`await`, optional chaining, nullish coalescing,
|
||||
and private `class` fields/methods.
|
||||
Please note that the "Modern browsers" version assumes native support for the
|
||||
latest JavaScript features; please also see [this wiki page](https://github.com/mozilla/pdf.js/wiki/Frequently-Asked-Questions#faq-support).
|
||||
|
||||
+ Modern browsers: https://mozilla.github.io/pdf.js/web/viewer.html
|
||||
|
||||
@ -54,14 +53,19 @@ To get a local copy of the current code, clone it using git:
|
||||
|
||||
Next, install Node.js via the [official package](https://nodejs.org) or via
|
||||
[nvm](https://github.com/creationix/nvm). You need to install the gulp package
|
||||
globally (see also [gulp's getting started](https://github.com/gulpjs/gulp/blob/master/docs/getting-started.md#getting-started)):
|
||||
globally (see also [gulp's getting started](https://github.com/gulpjs/gulp/tree/master/docs/getting-started)):
|
||||
|
||||
$ npm install -g gulp-cli
|
||||
$ npm install -g gulp-cli@^2.3.0
|
||||
|
||||
If you prefer to not install `gulp-cli` globally, you have to prefix all the `gulp` commands with `npx` (for example, `npx gulp server` instead of `gulp server`).
|
||||
|
||||
If everything worked out, install all dependencies for PDF.js:
|
||||
|
||||
$ npm install
|
||||
|
||||
> [!NOTE]
|
||||
> On MacOS M1/M2 you may see some `node-gyp`-related errors when running `npm install`. This is because one of our dependencies, `"canvas"`, does not provide pre-built binaries for this platform and instead `npm` will try to build it from source. Please make sure to first install the necessary native dependencies using `brew`: https://github.com/Automattic/node-canvas#compiling.
|
||||
|
||||
Finally, you need to start a local web server as some browsers do not allow opening
|
||||
PDF files using a `file://` URL. Run:
|
||||
|
||||
@ -71,7 +75,7 @@ and then you can open:
|
||||
|
||||
+ http://localhost:8888/web/viewer.html
|
||||
|
||||
Please keep in mind that this requires a modern and fully up-to-date browser; refer to [Building PDF.js](https://github.com/mozilla/pdf.js/blob/master/README.md#building-pdfjs) for non-development usage of the PDF.js library.
|
||||
Please keep in mind that this assumes the latest version of Mozilla Firefox; refer to [Building PDF.js](https://github.com/mozilla/pdf.js/blob/master/README.md#building-pdfjs) for non-development usage of the PDF.js library.
|
||||
|
||||
It is also possible to view all test PDF files on the right side by opening:
|
||||
|
||||
@ -140,7 +144,3 @@ Talk to us on Matrix:
|
||||
File an issue:
|
||||
|
||||
+ https://github.com/mozilla/pdf.js/issues/new
|
||||
|
||||
Follow us on twitter: @pdfjs
|
||||
|
||||
+ https://twitter.com/pdfjs
|
||||
|
@ -83,17 +83,17 @@ var scaledViewport = page.getViewport({ scale: scale, });
|
||||
The example demonstrates how promises can be used to handle errors during loading.
|
||||
It also demonstrates how to wait until a page is loaded and rendered.
|
||||
|
||||
<script async src="//jsfiddle.net/pdfjs/9engc9mw/embed/js,html,css,result/"></script>
|
||||
<script async src="//jsfiddle.net/pdfjs/9engc9mw/embed/html,css,result/"></script>
|
||||
|
||||
### Hello World using base64 encoded PDF
|
||||
|
||||
The PDF.js can accept any decoded base64 data as an array.
|
||||
|
||||
<script async src="//jsfiddle.net/pdfjs/cq0asLqz/embed/js,html,css,result/"></script>
|
||||
<script async src="//jsfiddle.net/pdfjs/cq0asLqz/embed/html,css,result/"></script>
|
||||
|
||||
### Previous/Next example
|
||||
|
||||
The same canvas cannot be used to perform to draw two pages at the same time --
|
||||
the example demonstrates how to wait on previous operation to be complete.
|
||||
|
||||
<script async src="//jsfiddle.net/pdfjs/wagvs9Lf/embed/js,html,css,result/"></script>
|
||||
<script async src="//jsfiddle.net/pdfjs/wagvs9Lf/embed/html,css,result/"></script>
|
||||
|
@ -37,16 +37,18 @@ Before downloading PDF.js please take a moment to understand the different layer
|
||||
|
||||
## Download
|
||||
|
||||
Please refer to [this wiki page](https://github.com/mozilla/pdf.js/wiki/Frequently-Asked-Questions#faq-support) for information about supported browsers.
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<h3>Prebuilt</h3>
|
||||
<h3>Prebuilt (modern browsers)</h3>
|
||||
<p>
|
||||
Includes the generic build of PDF.js and the viewer.
|
||||
</p>
|
||||
<a type="button" class="btn btn-primary" href="https://github.com/mozilla/pdf.js/releases/download/vSTABLE_VERSION/pdfjs-STABLE_VERSION-dist.zip">Stable (vSTABLE_VERSION)</a>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<h3>Prebuilt (for older browsers)</h3>
|
||||
<h3>Prebuilt (older browsers)</h3>
|
||||
<p>
|
||||
Includes the generic build of PDF.js and the viewer.
|
||||
</p>
|
||||
@ -106,8 +108,7 @@ Note that we only mention the most relevant files and folders.
|
||||
│ ├── display/ - display layer
|
||||
│ ├── shared/ - shared code between the core and display layers
|
||||
│ ├── interfaces.js - interface definitions for the core/display layers
|
||||
│ ├── pdf.*.js - wrapper files for bundling
|
||||
│ └── worker_loader.js - used for developer builds to load worker files
|
||||
│ └── pdf.*.js - wrapper files for bundling
|
||||
├── test/ - unit, font, reference, and integration tests
|
||||
├── web/ - viewer layer
|
||||
├── LICENSE
|
||||
|
1
examples/browserify/.gitignore
vendored
1
examples/browserify/.gitignore
vendored
@ -1 +0,0 @@
|
||||
node_modules/
|
@ -1,26 +0,0 @@
|
||||
## Overview
|
||||
|
||||
Example to demonstrate PDF.js library usage with Browserify.
|
||||
|
||||
## Getting started
|
||||
|
||||
Build project and install the example dependencies:
|
||||
|
||||
$ gulp dist-install
|
||||
$ cd examples/browserify
|
||||
$ npm install
|
||||
|
||||
To build Browserify bundles, run `gulp build`. If you are running
|
||||
a web server, you can observe the build results at
|
||||
http://localhost:8888/examples/browserify/index.html
|
||||
|
||||
See main.js, worker.js and gulpfile.js files. Please notice that PDF.js
|
||||
packaging requires packaging of the main application and PDF.js worker code,
|
||||
and the `workerSrc` path shall be set to the latter file. The pdf.worker.js file
|
||||
shall be excluded from the main bundle.
|
||||
|
||||
Alternatives to the gulp commands (without compression) are:
|
||||
|
||||
$ mkdir -p ../../build/browserify
|
||||
$ node_modules/.bin/browserify main.js -u ./node_modules/pdfjs-dist/build/pdf.worker.js -o ../../build/browserify/main.bundle.js
|
||||
$ node_modules/.bin/browserify worker.js -o ../../build/browserify/pdf.worker.bundle.js
|
@ -1,40 +0,0 @@
|
||||
const gulp = require("gulp");
|
||||
const browserify = require("browserify");
|
||||
const streamify = require("gulp-streamify");
|
||||
const rename = require("gulp-rename");
|
||||
const uglify = require("gulp-uglify");
|
||||
const source = require("vinyl-source-stream");
|
||||
|
||||
const OUTPUT_PATH = "../../build/browserify";
|
||||
const TMP_FILE_PREFIX = "../../build/browserify_";
|
||||
|
||||
gulp.task("build-bundle", function () {
|
||||
return browserify("main.js", { output: TMP_FILE_PREFIX + "main.tmp" })
|
||||
.ignore(require.resolve("pdfjs-dist/build/pdf.worker")) // Reducing size
|
||||
.bundle()
|
||||
.pipe(source(TMP_FILE_PREFIX + "main.tmp"))
|
||||
.pipe(streamify(uglify()))
|
||||
.pipe(rename("main.bundle.js"))
|
||||
.pipe(gulp.dest(OUTPUT_PATH));
|
||||
});
|
||||
|
||||
gulp.task("build-worker", function () {
|
||||
// We can create our own viewer (see worker.js) or use already defined one.
|
||||
const workerSrc = require.resolve("pdfjs-dist/build/pdf.worker.entry");
|
||||
return browserify(workerSrc, { output: TMP_FILE_PREFIX + "worker.tmp" })
|
||||
.bundle()
|
||||
.pipe(source(TMP_FILE_PREFIX + "worker.tmp"))
|
||||
.pipe(
|
||||
streamify(
|
||||
uglify({
|
||||
compress: {
|
||||
sequences: false, // Chrome has issue with the generated code if true
|
||||
},
|
||||
})
|
||||
)
|
||||
)
|
||||
.pipe(rename("pdf.worker.bundle.js"))
|
||||
.pipe(gulp.dest(OUTPUT_PATH));
|
||||
});
|
||||
|
||||
gulp.task("build", gulp.series("build-bundle", "build-worker"));
|
@ -1,11 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>browserify example</title>
|
||||
<script src="../../build/browserify/main.bundle.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<canvas id="theCanvas"></canvas>
|
||||
</body>
|
||||
</html>
|
@ -1,35 +0,0 @@
|
||||
// Any copyright is dedicated to the Public Domain.
|
||||
// http://creativecommons.org/licenses/publicdomain/
|
||||
|
||||
// Hello world example for browserify.
|
||||
|
||||
const pdfjsLib = require("pdfjs-dist");
|
||||
|
||||
const pdfPath = "../learning/helloworld.pdf";
|
||||
|
||||
// Setting worker path to worker bundle.
|
||||
pdfjsLib.GlobalWorkerOptions.workerSrc =
|
||||
"../../build/browserify/pdf.worker.bundle.js";
|
||||
|
||||
// Loading a document.
|
||||
const loadingTask = pdfjsLib.getDocument(pdfPath);
|
||||
loadingTask.promise
|
||||
.then(function (pdfDocument) {
|
||||
// Request a first page
|
||||
return pdfDocument.getPage(1).then(function (pdfPage) {
|
||||
// Display page on the existing canvas with 100% scale.
|
||||
const viewport = pdfPage.getViewport({ scale: 1.0 });
|
||||
const canvas = document.getElementById("theCanvas");
|
||||
canvas.width = viewport.width;
|
||||
canvas.height = viewport.height;
|
||||
const ctx = canvas.getContext("2d");
|
||||
const renderTask = pdfPage.render({
|
||||
canvasContext: ctx,
|
||||
viewport,
|
||||
});
|
||||
return renderTask.promise;
|
||||
});
|
||||
})
|
||||
.catch(function (reason) {
|
||||
console.error("Error: " + reason);
|
||||
});
|
@ -1,16 +0,0 @@
|
||||
{
|
||||
"name": "browserify-pdf.js-example",
|
||||
"version": "0.1.0",
|
||||
"devDependencies": {
|
||||
"browserify": "^13.0.0",
|
||||
"gulp": "^3.9.1",
|
||||
"gulp-rename": "^1.2.2",
|
||||
"gulp-streamify": "^1.0.2",
|
||||
"gulp-uglify": "^1.5.3",
|
||||
"pdfjs-dist": "../../node_modules/pdfjs-dist",
|
||||
"vinyl-source-stream": "^1.1.0"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "gulp build"
|
||||
}
|
||||
}
|
@ -1,9 +0,0 @@
|
||||
// Any copyright is dedicated to the Public Domain.
|
||||
// http://creativecommons.org/licenses/publicdomain/
|
||||
|
||||
// Hello world example for browserify: worker bundle.
|
||||
|
||||
(typeof window !== "undefined"
|
||||
? window
|
||||
: {}
|
||||
).pdfjsWorker = require("pdfjs-dist/build/pdf.worker");
|
@ -31,13 +31,13 @@ limitations under the License.
|
||||
|
||||
<link rel="stylesheet" href="../../node_modules/pdfjs-dist/web/pdf_viewer.css">
|
||||
|
||||
<script src="../../node_modules/pdfjs-dist/build/pdf.js"></script>
|
||||
<script src="../../node_modules/pdfjs-dist/web/pdf_viewer.js"></script>
|
||||
<script src="../../node_modules/pdfjs-dist/build/pdf.mjs" type="module"></script>
|
||||
<script src="../../node_modules/pdfjs-dist/web/pdf_viewer.mjs" type="module"></script>
|
||||
</head>
|
||||
|
||||
<body tabindex="1">
|
||||
<div id="pageContainer" class="pdfViewer singlePageView"></div>
|
||||
|
||||
<script src="pageviewer.js"></script>
|
||||
<script src="pageviewer.mjs" type="module"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,74 +0,0 @@
|
||||
/* Copyright 2014 Mozilla Foundation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
if (!pdfjsLib.getDocument || !pdfjsViewer.PDFPageView) {
|
||||
// eslint-disable-next-line no-alert
|
||||
alert("Please build the pdfjs-dist library using\n `gulp dist-install`");
|
||||
}
|
||||
|
||||
// The workerSrc property shall be specified.
|
||||
//
|
||||
pdfjsLib.GlobalWorkerOptions.workerSrc =
|
||||
"../../node_modules/pdfjs-dist/build/pdf.worker.js";
|
||||
|
||||
// Some PDFs need external cmaps.
|
||||
//
|
||||
const CMAP_URL = "../../node_modules/pdfjs-dist/cmaps/";
|
||||
const CMAP_PACKED = true;
|
||||
|
||||
const DEFAULT_URL = "../../web/compressed.tracemonkey-pldi-09.pdf";
|
||||
const PAGE_TO_VIEW = 1;
|
||||
const SCALE = 1.0;
|
||||
|
||||
const ENABLE_XFA = true;
|
||||
|
||||
const container = document.getElementById("pageContainer");
|
||||
|
||||
const eventBus = new pdfjsViewer.EventBus();
|
||||
|
||||
// Loading document.
|
||||
const loadingTask = pdfjsLib.getDocument({
|
||||
url: DEFAULT_URL,
|
||||
cMapUrl: CMAP_URL,
|
||||
cMapPacked: CMAP_PACKED,
|
||||
enableXfa: ENABLE_XFA,
|
||||
});
|
||||
(async function () {
|
||||
const pdfDocument = await loadingTask.promise;
|
||||
// Document loaded, retrieving the page.
|
||||
const pdfPage = await pdfDocument.getPage(PAGE_TO_VIEW);
|
||||
// Creating the page view with default parameters.
|
||||
const pdfPageView = new pdfjsViewer.PDFPageView({
|
||||
container,
|
||||
id: PAGE_TO_VIEW,
|
||||
scale: SCALE,
|
||||
defaultViewport: pdfPage.getViewport({ scale: SCALE }),
|
||||
eventBus,
|
||||
// We can enable text/annotation/xfa/struct-layers, as needed.
|
||||
textLayerFactory: !pdfDocument.isPureXfa
|
||||
? new pdfjsViewer.DefaultTextLayerFactory()
|
||||
: null,
|
||||
annotationLayerFactory: new pdfjsViewer.DefaultAnnotationLayerFactory(),
|
||||
xfaLayerFactory: pdfDocument.isPureXfa
|
||||
? new pdfjsViewer.DefaultXfaLayerFactory()
|
||||
: null,
|
||||
structTreeLayerFactory: new pdfjsViewer.DefaultStructTreeLayerFactory(),
|
||||
});
|
||||
// Associate the actual page with the view, and draw it.
|
||||
pdfPageView.setPdfPage(pdfPage);
|
||||
return pdfPageView.draw();
|
||||
})();
|
@ -13,9 +13,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
if (!pdfjsLib.getDocument || !pdfjsViewer.PDFViewer) {
|
||||
if (!pdfjsLib.getDocument || !pdfjsViewer.PDFPageView) {
|
||||
// eslint-disable-next-line no-alert
|
||||
alert("Please build the pdfjs-dist library using\n `gulp dist-install`");
|
||||
}
|
||||
@ -23,7 +21,7 @@ if (!pdfjsLib.getDocument || !pdfjsViewer.PDFViewer) {
|
||||
// The workerSrc property shall be specified.
|
||||
//
|
||||
pdfjsLib.GlobalWorkerOptions.workerSrc =
|
||||
"../../node_modules/pdfjs-dist/build/pdf.worker.js";
|
||||
"../../node_modules/pdfjs-dist/build/pdf.worker.mjs";
|
||||
|
||||
// Some PDFs need external cmaps.
|
||||
//
|
||||
@ -31,40 +29,35 @@ const CMAP_URL = "../../node_modules/pdfjs-dist/cmaps/";
|
||||
const CMAP_PACKED = true;
|
||||
|
||||
const DEFAULT_URL = "../../web/compressed.tracemonkey-pldi-09.pdf";
|
||||
const PAGE_TO_VIEW = 1;
|
||||
const SCALE = 1.0;
|
||||
|
||||
const container = document.getElementById("viewerContainer");
|
||||
const ENABLE_XFA = true;
|
||||
|
||||
const container = document.getElementById("pageContainer");
|
||||
|
||||
const eventBus = new pdfjsViewer.EventBus();
|
||||
|
||||
// (Optionally) enable hyperlinks within PDF files.
|
||||
const pdfLinkService = new pdfjsViewer.PDFLinkService({
|
||||
eventBus,
|
||||
});
|
||||
|
||||
const pdfViewer = new pdfjsViewer.PDFViewer({
|
||||
container,
|
||||
eventBus,
|
||||
linkService: pdfLinkService,
|
||||
renderer: "svg",
|
||||
textLayerMode: 0,
|
||||
});
|
||||
pdfLinkService.setViewer(pdfViewer);
|
||||
|
||||
eventBus.on("pagesinit", function () {
|
||||
// We can use pdfViewer now, e.g. let's change default scale.
|
||||
pdfViewer.currentScaleValue = "page-width";
|
||||
});
|
||||
|
||||
// Loading document.
|
||||
const loadingTask = pdfjsLib.getDocument({
|
||||
url: DEFAULT_URL,
|
||||
cMapUrl: CMAP_URL,
|
||||
cMapPacked: CMAP_PACKED,
|
||||
enableXfa: ENABLE_XFA,
|
||||
});
|
||||
loadingTask.promise.then(function (pdfDocument) {
|
||||
// Document loaded, specifying document for the viewer and
|
||||
// the (optional) linkService.
|
||||
pdfViewer.setDocument(pdfDocument);
|
||||
|
||||
pdfLinkService.setDocument(pdfDocument, null);
|
||||
const pdfDocument = await loadingTask.promise;
|
||||
// Document loaded, retrieving the page.
|
||||
const pdfPage = await pdfDocument.getPage(PAGE_TO_VIEW);
|
||||
|
||||
// Creating the page view with default parameters.
|
||||
const pdfPageView = new pdfjsViewer.PDFPageView({
|
||||
container,
|
||||
id: PAGE_TO_VIEW,
|
||||
scale: SCALE,
|
||||
defaultViewport: pdfPage.getViewport({ scale: SCALE }),
|
||||
eventBus,
|
||||
});
|
||||
// Associate the actual page with the view, and draw it.
|
||||
pdfPageView.setPdfPage(pdfPage);
|
||||
pdfPageView.draw();
|
@ -37,8 +37,8 @@ limitations under the License.
|
||||
|
||||
<link rel="stylesheet" href="../../node_modules/pdfjs-dist/web/pdf_viewer.css">
|
||||
|
||||
<script src="../../node_modules/pdfjs-dist/build/pdf.js"></script>
|
||||
<script src="../../node_modules/pdfjs-dist/web/pdf_viewer.js"></script>
|
||||
<script src="../../node_modules/pdfjs-dist/build/pdf.mjs" type="module"></script>
|
||||
<script src="../../node_modules/pdfjs-dist/web/pdf_viewer.mjs" type="module"></script>
|
||||
</head>
|
||||
|
||||
<body tabindex="1">
|
||||
@ -46,6 +46,6 @@ limitations under the License.
|
||||
<div id="viewer" class="pdfViewer"></div>
|
||||
</div>
|
||||
|
||||
<script src="simpleviewer.js"></script>
|
||||
<script src="simpleviewer.mjs" type="module"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -13,8 +13,6 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
if (!pdfjsLib.getDocument || !pdfjsViewer.PDFViewer) {
|
||||
// eslint-disable-next-line no-alert
|
||||
alert("Please build the pdfjs-dist library using\n `gulp dist-install`");
|
||||
@ -23,7 +21,7 @@ if (!pdfjsLib.getDocument || !pdfjsViewer.PDFViewer) {
|
||||
// The workerSrc property shall be specified.
|
||||
//
|
||||
pdfjsLib.GlobalWorkerOptions.workerSrc =
|
||||
"../../node_modules/pdfjs-dist/build/pdf.worker.js";
|
||||
"../../node_modules/pdfjs-dist/build/pdf.worker.mjs";
|
||||
|
||||
// Some PDFs need external cmaps.
|
||||
//
|
||||
@ -37,7 +35,10 @@ const DEFAULT_URL = "../../web/compressed.tracemonkey-pldi-09.pdf";
|
||||
const ENABLE_XFA = true;
|
||||
const SEARCH_FOR = ""; // try "Mozilla";
|
||||
|
||||
const SANDBOX_BUNDLE_SRC = "../../node_modules/pdfjs-dist/build/pdf.sandbox.js";
|
||||
const SANDBOX_BUNDLE_SRC = new URL(
|
||||
"../../node_modules/pdfjs-dist/build/pdf.sandbox.mjs",
|
||||
window.location
|
||||
);
|
||||
|
||||
const container = document.getElementById("viewerContainer");
|
||||
|
||||
@ -66,7 +67,6 @@ const pdfViewer = new pdfjsViewer.PDFViewer({
|
||||
linkService: pdfLinkService,
|
||||
findController: pdfFindController,
|
||||
scriptingManager: pdfScriptingManager,
|
||||
enableScripting: true, // Only necessary in PDF.js version 2.10.377 and below.
|
||||
});
|
||||
pdfLinkService.setViewer(pdfViewer);
|
||||
pdfScriptingManager.setViewer(pdfViewer);
|
||||
@ -88,11 +88,10 @@ const loadingTask = pdfjsLib.getDocument({
|
||||
cMapPacked: CMAP_PACKED,
|
||||
enableXfa: ENABLE_XFA,
|
||||
});
|
||||
(async function () {
|
||||
const pdfDocument = await loadingTask.promise;
|
||||
// Document loaded, specifying document for the viewer and
|
||||
// the (optional) linkService.
|
||||
pdfViewer.setDocument(pdfDocument);
|
||||
|
||||
pdfLinkService.setDocument(pdfDocument, null);
|
||||
})();
|
||||
const pdfDocument = await loadingTask.promise;
|
||||
// Document loaded, specifying document for the viewer and
|
||||
// the (optional) linkService.
|
||||
pdfViewer.setDocument(pdfDocument);
|
||||
|
||||
pdfLinkService.setDocument(pdfDocument, null);
|
@ -37,8 +37,8 @@ limitations under the License.
|
||||
|
||||
<link rel="stylesheet" href="../../node_modules/pdfjs-dist/web/pdf_viewer.css">
|
||||
|
||||
<script src="../../node_modules/pdfjs-dist/build/pdf.js"></script>
|
||||
<script src="../../node_modules/pdfjs-dist/web/pdf_viewer.js"></script>
|
||||
<script src="../../node_modules/pdfjs-dist/build/pdf.mjs" type="module"></script>
|
||||
<script src="../../node_modules/pdfjs-dist/web/pdf_viewer.mjs" type="module"></script>
|
||||
</head>
|
||||
|
||||
<body tabindex="1">
|
||||
@ -46,6 +46,6 @@ limitations under the License.
|
||||
<div id="viewer" class="pdfViewer"></div>
|
||||
</div>
|
||||
|
||||
<script src="singlepageviewer.js"></script>
|
||||
<script src="singlepageviewer.mjs" type="module"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -13,8 +13,6 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
if (!pdfjsLib.getDocument || !pdfjsViewer.PDFSinglePageViewer) {
|
||||
// eslint-disable-next-line no-alert
|
||||
alert("Please build the pdfjs-dist library using\n `gulp dist-install`");
|
||||
@ -23,7 +21,7 @@ if (!pdfjsLib.getDocument || !pdfjsViewer.PDFSinglePageViewer) {
|
||||
// The workerSrc property shall be specified.
|
||||
//
|
||||
pdfjsLib.GlobalWorkerOptions.workerSrc =
|
||||
"../../node_modules/pdfjs-dist/build/pdf.worker.js";
|
||||
"../../node_modules/pdfjs-dist/build/pdf.worker.mjs";
|
||||
|
||||
// Some PDFs need external cmaps.
|
||||
//
|
||||
@ -37,7 +35,10 @@ const DEFAULT_URL = "../../web/compressed.tracemonkey-pldi-09.pdf";
|
||||
const ENABLE_XFA = true;
|
||||
const SEARCH_FOR = ""; // try "Mozilla";
|
||||
|
||||
const SANDBOX_BUNDLE_SRC = "../../node_modules/pdfjs-dist/build/pdf.sandbox.js";
|
||||
const SANDBOX_BUNDLE_SRC = new URL(
|
||||
"../../node_modules/pdfjs-dist/build/pdf.sandbox.mjs",
|
||||
window.location
|
||||
);
|
||||
|
||||
const container = document.getElementById("viewerContainer");
|
||||
|
||||
@ -66,7 +67,6 @@ const pdfSinglePageViewer = new pdfjsViewer.PDFSinglePageViewer({
|
||||
linkService: pdfLinkService,
|
||||
findController: pdfFindController,
|
||||
scriptingManager: pdfScriptingManager,
|
||||
enableScripting: true, // Only necessary in PDF.js version 2.10.377 and below.
|
||||
});
|
||||
pdfLinkService.setViewer(pdfSinglePageViewer);
|
||||
pdfScriptingManager.setViewer(pdfSinglePageViewer);
|
||||
@ -88,10 +88,10 @@ const loadingTask = pdfjsLib.getDocument({
|
||||
cMapPacked: CMAP_PACKED,
|
||||
enableXfa: ENABLE_XFA,
|
||||
});
|
||||
loadingTask.promise.then(function (pdfDocument) {
|
||||
// Document loaded, specifying document for the viewer and
|
||||
// the (optional) linkService.
|
||||
pdfSinglePageViewer.setDocument(pdfDocument);
|
||||
|
||||
pdfLinkService.setDocument(pdfDocument, null);
|
||||
});
|
||||
const pdfDocument = await loadingTask.promise;
|
||||
// Document loaded, specifying document for the viewer and
|
||||
// the (optional) linkService.
|
||||
pdfSinglePageViewer.setDocument(pdfDocument);
|
||||
|
||||
pdfLinkService.setDocument(pdfDocument, null);
|
@ -29,12 +29,12 @@ limitations under the License.
|
||||
}
|
||||
</style>
|
||||
|
||||
<script src="../../node_modules/pdfjs-dist/image_decoders/pdf.image_decoders.js"></script>
|
||||
<script src="../../node_modules/pdfjs-dist/image_decoders/pdf.image_decoders.mjs" type="module"></script>
|
||||
</head>
|
||||
|
||||
<body tabindex="1">
|
||||
<canvas id="jpegCanvas" width="0" height="0"></canvas>
|
||||
|
||||
<script src="jpeg_viewer.js"></script>
|
||||
<script src="jpeg_viewer.mjs" type="module"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,63 +0,0 @@
|
||||
/* Copyright 2018 Mozilla Foundation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
if (!pdfjsImageDecoders.JpegImage) {
|
||||
// eslint-disable-next-line no-alert
|
||||
alert("Please build the pdfjs-dist library using `gulp dist-install`");
|
||||
}
|
||||
|
||||
const JPEG_IMAGE = "fish.jpg";
|
||||
|
||||
const jpegCanvas = document.getElementById("jpegCanvas");
|
||||
const jpegCtx = jpegCanvas.getContext("2d");
|
||||
|
||||
(async function () {
|
||||
// Load the image data, and convert it to a Uint8Array.
|
||||
//
|
||||
const response = await fetch(JPEG_IMAGE);
|
||||
if (!response.ok) {
|
||||
throw new Error(response.statusText);
|
||||
}
|
||||
const typedArrayImage = new Uint8Array(await response.arrayBuffer());
|
||||
|
||||
// Parse the image data using `JpegImage`.
|
||||
//
|
||||
const jpegImage = new pdfjsImageDecoders.JpegImage();
|
||||
jpegImage.parse(typedArrayImage);
|
||||
|
||||
const width = jpegImage.width,
|
||||
height = jpegImage.height;
|
||||
const jpegData = jpegImage.getData({
|
||||
width,
|
||||
height,
|
||||
forceRGB: true,
|
||||
});
|
||||
|
||||
// Render the JPEG image on a <canvas>.
|
||||
//
|
||||
const imageData = jpegCtx.createImageData(width, height);
|
||||
const imageBytes = imageData.data;
|
||||
for (let j = 0, k = 0, jj = width * height * 4; j < jj; ) {
|
||||
imageBytes[j++] = jpegData[k++];
|
||||
imageBytes[j++] = jpegData[k++];
|
||||
imageBytes[j++] = jpegData[k++];
|
||||
imageBytes[j++] = 255;
|
||||
}
|
||||
jpegCanvas.width = width;
|
||||
jpegCanvas.height = height;
|
||||
jpegCtx.putImageData(imageData, 0, 0);
|
||||
})();
|
59
examples/image_decoders/jpeg_viewer.mjs
Normal file
59
examples/image_decoders/jpeg_viewer.mjs
Normal file
@ -0,0 +1,59 @@
|
||||
/* Copyright 2018 Mozilla Foundation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
if (!pdfjsImageDecoders.JpegImage) {
|
||||
// eslint-disable-next-line no-alert
|
||||
alert("Please build the pdfjs-dist library using `gulp dist-install`");
|
||||
}
|
||||
|
||||
const JPEG_IMAGE = "fish.jpg";
|
||||
|
||||
const jpegCanvas = document.getElementById("jpegCanvas");
|
||||
const jpegCtx = jpegCanvas.getContext("2d");
|
||||
|
||||
// Load the image data, and convert it to a Uint8Array.
|
||||
//
|
||||
const response = await fetch(JPEG_IMAGE);
|
||||
if (!response.ok) {
|
||||
throw new Error(response.statusText);
|
||||
}
|
||||
const typedArrayImage = new Uint8Array(await response.arrayBuffer());
|
||||
|
||||
// Parse the image data using `JpegImage`.
|
||||
//
|
||||
const jpegImage = new pdfjsImageDecoders.JpegImage();
|
||||
jpegImage.parse(typedArrayImage);
|
||||
|
||||
const width = jpegImage.width,
|
||||
height = jpegImage.height;
|
||||
const jpegData = jpegImage.getData({
|
||||
width,
|
||||
height,
|
||||
forceRGB: true,
|
||||
});
|
||||
|
||||
// Render the JPEG image on a <canvas>.
|
||||
//
|
||||
const imageData = jpegCtx.createImageData(width, height);
|
||||
const imageBytes = imageData.data;
|
||||
for (let j = 0, k = 0, jj = width * height * 4; j < jj; ) {
|
||||
imageBytes[j++] = jpegData[k++];
|
||||
imageBytes[j++] = jpegData[k++];
|
||||
imageBytes[j++] = jpegData[k++];
|
||||
imageBytes[j++] = 255;
|
||||
}
|
||||
jpegCanvas.width = width;
|
||||
jpegCanvas.height = height;
|
||||
jpegCtx.putImageData(imageData, 0, 0);
|
@ -10,9 +10,9 @@
|
||||
|
||||
<canvas id="the-canvas" style="border: 1px solid black; direction: ltr;"></canvas>
|
||||
|
||||
<script src="../../node_modules/pdfjs-dist/build/pdf.js"></script>
|
||||
<script src="../../node_modules/pdfjs-dist/build/pdf.mjs" type="module"></script>
|
||||
|
||||
<script id="script">
|
||||
<script id="script" type="module">
|
||||
//
|
||||
// If absolute URL from the remote server is provided, configure the CORS
|
||||
// header on that server.
|
||||
@ -23,13 +23,12 @@
|
||||
// The workerSrc property shall be specified.
|
||||
//
|
||||
pdfjsLib.GlobalWorkerOptions.workerSrc =
|
||||
'../../node_modules/pdfjs-dist/build/pdf.worker.js';
|
||||
'../../node_modules/pdfjs-dist/build/pdf.worker.mjs';
|
||||
|
||||
//
|
||||
// Asynchronous download PDF
|
||||
//
|
||||
const loadingTask = pdfjsLib.getDocument(url);
|
||||
(async () => {
|
||||
const pdf = await loadingTask.promise;
|
||||
//
|
||||
// Fetch the first page
|
||||
@ -64,7 +63,6 @@
|
||||
viewport,
|
||||
};
|
||||
page.render(renderContext);
|
||||
})();
|
||||
</script>
|
||||
|
||||
<hr>
|
||||
|
@ -10,9 +10,9 @@
|
||||
|
||||
<canvas id="the-canvas" style="border: 1px solid black; direction: ltr;"></canvas>
|
||||
|
||||
<script src="../../node_modules/pdfjs-dist/build/pdf.js"></script>
|
||||
<script src="../../node_modules/pdfjs-dist/build/pdf.mjs" type="module"></script>
|
||||
|
||||
<script id="script">
|
||||
<script id="script" type="module">
|
||||
// atob() is used to convert base64 encoded PDF to binary-like data.
|
||||
// (See also https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/
|
||||
// Base64_encoding_and_decoding.)
|
||||
@ -35,12 +35,11 @@
|
||||
// The workerSrc property shall be specified.
|
||||
//
|
||||
pdfjsLib.GlobalWorkerOptions.workerSrc =
|
||||
'../../node_modules/pdfjs-dist/build/pdf.worker.js';
|
||||
'../../node_modules/pdfjs-dist/build/pdf.worker.mjs';
|
||||
|
||||
// Opening PDF by passing its binary data as a string. It is still preferable
|
||||
// to use Uint8Array, but string or array-like structure will work too.
|
||||
var loadingTask = pdfjsLib.getDocument({ data: pdfData, });
|
||||
(async function() {
|
||||
var pdf = await loadingTask.promise;
|
||||
// Fetch the first page.
|
||||
var page = await pdf.getPage(1);
|
||||
@ -69,7 +68,6 @@
|
||||
viewport,
|
||||
};
|
||||
page.render(renderContext);
|
||||
})();
|
||||
</script>
|
||||
|
||||
<hr>
|
||||
|
@ -19,9 +19,9 @@
|
||||
<canvas id="the-canvas" style="border: 1px solid black; direction: ltr;"></canvas>
|
||||
</div>
|
||||
|
||||
<script src="../../node_modules/pdfjs-dist/build/pdf.js"></script>
|
||||
<script src="../../node_modules/pdfjs-dist/build/pdf.mjs" type="module"></script>
|
||||
|
||||
<script id="script">
|
||||
<script id="script" type="module">
|
||||
//
|
||||
// If absolute URL from the remote server is provided, configure the CORS
|
||||
// header on that server.
|
||||
@ -34,7 +34,7 @@
|
||||
// shall be specified.
|
||||
//
|
||||
pdfjsLib.GlobalWorkerOptions.workerSrc =
|
||||
'../../node_modules/pdfjs-dist/build/pdf.worker.js';
|
||||
'../../node_modules/pdfjs-dist/build/pdf.worker.mjs';
|
||||
|
||||
var pdfDoc = null,
|
||||
pageNum = 1,
|
||||
@ -128,13 +128,11 @@
|
||||
* Asynchronously downloads PDF.
|
||||
*/
|
||||
var loadingTask = pdfjsLib.getDocument(url);
|
||||
loadingTask.promise.then(function(pdfDoc_) {
|
||||
pdfDoc = pdfDoc_;
|
||||
pdfDoc = await loadingTask.promise;
|
||||
document.getElementById('page_count').textContent = pdfDoc.numPages;
|
||||
|
||||
// Initial/first page rendering
|
||||
renderPage(pageNum);
|
||||
});
|
||||
</script>
|
||||
|
||||
</body>
|
||||
|
@ -13,10 +13,6 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
:root {
|
||||
--progressBar-percent: 0%;
|
||||
}
|
||||
|
||||
* {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
@ -30,12 +26,12 @@ html {
|
||||
}
|
||||
|
||||
header {
|
||||
background-color: rgba(244, 244, 244, 1);
|
||||
background-color: rgb(244 244 244 / 1);
|
||||
}
|
||||
|
||||
header h1 {
|
||||
border-bottom: 1px solid rgba(216, 216, 216, 1);
|
||||
color: rgba(133, 133, 133, 1);
|
||||
border-bottom: 1px solid rgb(216 216 216 / 1);
|
||||
color: rgb(133 133 133 / 1);
|
||||
font-size: 23px;
|
||||
font-style: italic;
|
||||
font-weight: normal;
|
||||
@ -48,7 +44,7 @@ header h1 {
|
||||
|
||||
body {
|
||||
background: url(images/document_bg.png);
|
||||
color: rgba(255, 255, 255, 1);
|
||||
color: rgb(255 255 255 / 1);
|
||||
font-family: sans-serif;
|
||||
font-size: 10px;
|
||||
height: 100%;
|
||||
@ -75,7 +71,7 @@ footer {
|
||||
left: 0;
|
||||
right: 0;
|
||||
z-index: 1;
|
||||
box-shadow: 0 -0.2rem 0.5rem rgba(50, 50, 50, 0.75);
|
||||
box-shadow: 0 -0.2rem 0.5rem rgb(50 50 50 / 0.75);
|
||||
}
|
||||
|
||||
.toolbarButton {
|
||||
@ -85,7 +81,7 @@ footer {
|
||||
border-width: 0;
|
||||
background-position: center center;
|
||||
background-repeat: no-repeat;
|
||||
background-color: rgba(0, 0, 0, 0);
|
||||
background-color: rgb(0 0 0 / 0);
|
||||
}
|
||||
|
||||
.toolbarButton.pageUp {
|
||||
@ -114,9 +110,9 @@ footer {
|
||||
left: 36%;
|
||||
text-align: center;
|
||||
border: 0;
|
||||
background-color: rgba(0, 0, 0, 0);
|
||||
background-color: rgb(0 0 0 / 0);
|
||||
font-size: 1.2rem;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
color: rgb(255 255 255 / 1);
|
||||
background-image: url(images/div_line_left.png),
|
||||
url(images/div_line_right.png);
|
||||
background-repeat: no-repeat;
|
||||
@ -157,10 +153,7 @@ footer {
|
||||
position: absolute;
|
||||
overflow: auto;
|
||||
width: 100%;
|
||||
top: 5rem;
|
||||
bottom: 4rem;
|
||||
left: 0;
|
||||
right: 0;
|
||||
inset: 5rem 0 4rem;
|
||||
}
|
||||
|
||||
canvas {
|
||||
@ -191,41 +184,47 @@ canvas {
|
||||
}
|
||||
|
||||
#loadingBar {
|
||||
/* Define this variable here, and not in :root, to avoid reflowing the
|
||||
entire viewer when updating progress (see issue 15958). */
|
||||
--progressBar-percent: 0%;
|
||||
|
||||
position: relative;
|
||||
height: 0.6rem;
|
||||
background-color: rgba(51, 51, 51, 1);
|
||||
border-bottom: 1px solid rgba(51, 51, 51, 1);
|
||||
background-color: rgb(51 51 51 / 1);
|
||||
border-bottom: 1px solid rgb(51 51 51 / 1);
|
||||
}
|
||||
|
||||
#loadingBar .progress {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
width: var(--progressBar-percent);
|
||||
width: 100%;
|
||||
transform: scaleX(var(--progressBar-percent));
|
||||
transform-origin: 0 0;
|
||||
height: 100%;
|
||||
background-color: rgba(221, 221, 221, 1);
|
||||
background-color: rgb(221 221 221 / 1);
|
||||
overflow: hidden;
|
||||
transition: width 200ms;
|
||||
transition: transform 200ms;
|
||||
}
|
||||
|
||||
@keyframes progressIndeterminate {
|
||||
0% {
|
||||
left: 0;
|
||||
transform: translateX(0%);
|
||||
}
|
||||
50% {
|
||||
left: 100%;
|
||||
transform: translateX(100%);
|
||||
}
|
||||
100% {
|
||||
left: 100%;
|
||||
transform: translateX(100%);
|
||||
}
|
||||
}
|
||||
|
||||
#loadingBar .progress.indeterminate {
|
||||
width: 100%;
|
||||
background-color: rgba(153, 153, 153, 1);
|
||||
#loadingBar.indeterminate .progress {
|
||||
transform: none;
|
||||
background-color: rgb(153 153 153 / 1);
|
||||
transition: none;
|
||||
}
|
||||
|
||||
#loadingBar .indeterminate .glimmer {
|
||||
#loadingBar.indeterminate .progress .glimmer {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
@ -233,39 +232,11 @@ canvas {
|
||||
width: 5rem;
|
||||
background-image: linear-gradient(
|
||||
to right,
|
||||
rgba(153, 153, 153, 1) 0%,
|
||||
rgba(255, 255, 255, 1) 50%,
|
||||
rgba(153, 153, 153, 1) 100%
|
||||
rgb(153 153 153 / 1) 0%,
|
||||
rgb(255 255 255 / 1) 50%,
|
||||
rgb(153 153 153 / 1) 100%
|
||||
);
|
||||
background-size: 100% 100%;
|
||||
background-repeat: no-repeat;
|
||||
animation: progressIndeterminate 2s linear infinite;
|
||||
}
|
||||
|
||||
#errorWrapper {
|
||||
background: none repeat scroll 0 0 rgba(255, 85, 85, 1);
|
||||
color: rgba(255, 255, 255, 1);
|
||||
left: 0;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 3.2rem;
|
||||
z-index: 1000;
|
||||
padding: 0.3rem;
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
||||
#errorMessageLeft {
|
||||
float: left;
|
||||
}
|
||||
|
||||
#errorMessageRight {
|
||||
float: right;
|
||||
}
|
||||
|
||||
#errorMoreInfo {
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
color: rgba(0, 0, 0, 1);
|
||||
padding: 0.3rem;
|
||||
margin: 0.3rem;
|
||||
width: 98%;
|
||||
}
|
||||
|
@ -24,8 +24,8 @@ limitations under the License.
|
||||
<link rel="stylesheet" href="../../node_modules/pdfjs-dist/web/pdf_viewer.css">
|
||||
<link rel="stylesheet" type="text/css" href="viewer.css">
|
||||
|
||||
<script src="../../node_modules/pdfjs-dist/build/pdf.js"></script>
|
||||
<script src="../../node_modules/pdfjs-dist/web/pdf_viewer.js"></script>
|
||||
<script src="../../node_modules/pdfjs-dist/build/pdf.mjs" type="module"></script>
|
||||
<script src="../../node_modules/pdfjs-dist/web/pdf_viewer.mjs" type="module"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@ -42,25 +42,6 @@ limitations under the License.
|
||||
<div class="glimmer"></div>
|
||||
</div>
|
||||
|
||||
<div id="errorWrapper" hidden="true">
|
||||
<div id="errorMessageLeft">
|
||||
<span id="errorMessage"></span>
|
||||
<button id="errorShowMore">
|
||||
More Information
|
||||
</button>
|
||||
<button id="errorShowLess">
|
||||
Less Information
|
||||
</button>
|
||||
</div>
|
||||
<div id="errorMessageRight">
|
||||
<button id="errorClose">
|
||||
Close
|
||||
</button>
|
||||
</div>
|
||||
<div class="clearBoth"></div>
|
||||
<textarea id="errorMoreInfo" hidden="true" readonly="readonly"></textarea>
|
||||
</div>
|
||||
|
||||
<footer>
|
||||
<button class="toolbarButton pageUp" title="Previous Page" id="previous"></button>
|
||||
<button class="toolbarButton pageDown" title="Next Page" id="next"></button>
|
||||
@ -71,6 +52,6 @@ limitations under the License.
|
||||
<button class="toolbarButton zoomIn" title="Zoom In" id="zoomIn"></button>
|
||||
</footer>
|
||||
|
||||
<script src="viewer.js"></script>
|
||||
<script src="viewer.mjs" type="module"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -13,21 +13,19 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
if (!pdfjsLib.getDocument || !pdfjsViewer.PDFViewer) {
|
||||
// eslint-disable-next-line no-alert
|
||||
alert("Please build the pdfjs-dist library using\n `gulp dist-install`");
|
||||
}
|
||||
|
||||
const USE_ONLY_CSS_ZOOM = true;
|
||||
const MAX_CANVAS_PIXELS = 0; // CSS-only zooming.
|
||||
const TEXT_LAYER_MODE = 0; // DISABLE
|
||||
const MAX_IMAGE_SIZE = 1024 * 1024;
|
||||
const CMAP_URL = "../../node_modules/pdfjs-dist/cmaps/";
|
||||
const CMAP_PACKED = true;
|
||||
|
||||
pdfjsLib.GlobalWorkerOptions.workerSrc =
|
||||
"../../node_modules/pdfjs-dist/build/pdf.worker.js";
|
||||
"../../node_modules/pdfjs-dist/build/pdf.worker.mjs";
|
||||
|
||||
const DEFAULT_URL = "../../web/compressed.tracemonkey-pldi-09.pdf";
|
||||
const DEFAULT_SCALE_DELTA = 1.1;
|
||||
@ -89,41 +87,17 @@ const PDFViewerApplication = {
|
||||
self.loadingBar.hide();
|
||||
self.setTitleUsingMetadata(pdfDocument);
|
||||
},
|
||||
function (exception) {
|
||||
const message = exception && exception.message;
|
||||
const l10n = self.l10n;
|
||||
let loadingErrorMessage;
|
||||
|
||||
if (exception instanceof pdfjsLib.InvalidPDFException) {
|
||||
// change error message also for other builds
|
||||
loadingErrorMessage = l10n.get(
|
||||
"invalid_file_error",
|
||||
null,
|
||||
"Invalid or corrupted PDF file."
|
||||
);
|
||||
} else if (exception instanceof pdfjsLib.MissingPDFException) {
|
||||
// special message for missing PDFs
|
||||
loadingErrorMessage = l10n.get(
|
||||
"missing_file_error",
|
||||
null,
|
||||
"Missing PDF file."
|
||||
);
|
||||
} else if (exception instanceof pdfjsLib.UnexpectedResponseException) {
|
||||
loadingErrorMessage = l10n.get(
|
||||
"unexpected_response_error",
|
||||
null,
|
||||
"Unexpected server response."
|
||||
);
|
||||
} else {
|
||||
loadingErrorMessage = l10n.get(
|
||||
"loading_error",
|
||||
null,
|
||||
"An error occurred while loading the PDF."
|
||||
);
|
||||
function (reason) {
|
||||
let key = "pdfjs-loading-error";
|
||||
if (reason instanceof pdfjsLib.InvalidPDFException) {
|
||||
key = "pdfjs-invalid-file-error";
|
||||
} else if (reason instanceof pdfjsLib.MissingPDFException) {
|
||||
key = "pdfjs-missing-file-error";
|
||||
} else if (reason instanceof pdfjsLib.UnexpectedResponseException) {
|
||||
key = "pdfjs-unexpected-response-error";
|
||||
}
|
||||
|
||||
loadingErrorMessage.then(function (msg) {
|
||||
self.error(msg, { message });
|
||||
self.l10n.get(key).then(msg => {
|
||||
self.error(msg, { message: reason?.message });
|
||||
});
|
||||
self.loadingBar.hide();
|
||||
}
|
||||
@ -136,9 +110,6 @@ const PDFViewerApplication = {
|
||||
* destruction is completed.
|
||||
*/
|
||||
close() {
|
||||
const errorWrapper = document.getElementById("errorWrapper");
|
||||
errorWrapper.hidden = true;
|
||||
|
||||
if (!this.pdfLoadingTask) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
@ -161,9 +132,12 @@ const PDFViewerApplication = {
|
||||
},
|
||||
|
||||
get loadingBar() {
|
||||
const bar = new pdfjsViewer.ProgressBar("#loadingBar");
|
||||
|
||||
return pdfjsLib.shadow(this, "loadingBar", bar);
|
||||
const bar = document.getElementById("loadingBar");
|
||||
return pdfjsLib.shadow(
|
||||
this,
|
||||
"loadingBar",
|
||||
new pdfjsViewer.ProgressBar(bar)
|
||||
);
|
||||
},
|
||||
|
||||
setTitleUsingUrl: function pdfViewSetTitleUsingUrl(url) {
|
||||
@ -171,7 +145,7 @@ const PDFViewerApplication = {
|
||||
let title = pdfjsLib.getFilenameFromUrl(url) || url;
|
||||
try {
|
||||
title = decodeURIComponent(title);
|
||||
} catch (e) {
|
||||
} catch {
|
||||
// decodeURIComponent may throw URIError,
|
||||
// fall back to using the unprocessed url in that case
|
||||
}
|
||||
@ -228,79 +202,25 @@ const PDFViewerApplication = {
|
||||
},
|
||||
|
||||
error: function pdfViewError(message, moreInfo) {
|
||||
const l10n = this.l10n;
|
||||
const moreInfoText = [
|
||||
l10n.get(
|
||||
"error_version_info",
|
||||
{ version: pdfjsLib.version || "?", build: pdfjsLib.build || "?" },
|
||||
"PDF.js v{{version}} (build: {{build}})"
|
||||
),
|
||||
`PDF.js v${pdfjsLib.version || "?"} (build: ${pdfjsLib.build || "?"})`,
|
||||
];
|
||||
|
||||
if (moreInfo) {
|
||||
moreInfoText.push(
|
||||
l10n.get(
|
||||
"error_message",
|
||||
{ message: moreInfo.message },
|
||||
"Message: {{message}}"
|
||||
)
|
||||
);
|
||||
moreInfoText.push(`Message: ${moreInfo.message}`);
|
||||
|
||||
if (moreInfo.stack) {
|
||||
moreInfoText.push(
|
||||
l10n.get("error_stack", { stack: moreInfo.stack }, "Stack: {{stack}}")
|
||||
);
|
||||
moreInfoText.push(`Stack: ${moreInfo.stack}`);
|
||||
} else {
|
||||
if (moreInfo.filename) {
|
||||
moreInfoText.push(
|
||||
l10n.get(
|
||||
"error_file",
|
||||
{ file: moreInfo.filename },
|
||||
"File: {{file}}"
|
||||
)
|
||||
);
|
||||
moreInfoText.push(`File: ${moreInfo.filename}`);
|
||||
}
|
||||
if (moreInfo.lineNumber) {
|
||||
moreInfoText.push(
|
||||
l10n.get(
|
||||
"error_line",
|
||||
{ line: moreInfo.lineNumber },
|
||||
"Line: {{line}}"
|
||||
)
|
||||
);
|
||||
moreInfoText.push(`Line: ${moreInfo.lineNumber}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const errorWrapper = document.getElementById("errorWrapper");
|
||||
errorWrapper.hidden = false;
|
||||
|
||||
const errorMessage = document.getElementById("errorMessage");
|
||||
errorMessage.textContent = message;
|
||||
|
||||
const closeButton = document.getElementById("errorClose");
|
||||
closeButton.onclick = function () {
|
||||
errorWrapper.hidden = true;
|
||||
};
|
||||
|
||||
const errorMoreInfo = document.getElementById("errorMoreInfo");
|
||||
const moreInfoButton = document.getElementById("errorShowMore");
|
||||
const lessInfoButton = document.getElementById("errorShowLess");
|
||||
moreInfoButton.onclick = function () {
|
||||
errorMoreInfo.hidden = false;
|
||||
moreInfoButton.hidden = true;
|
||||
lessInfoButton.hidden = false;
|
||||
errorMoreInfo.style.height = errorMoreInfo.scrollHeight + "px";
|
||||
};
|
||||
lessInfoButton.onclick = function () {
|
||||
errorMoreInfo.hidden = true;
|
||||
moreInfoButton.hidden = false;
|
||||
lessInfoButton.hidden = true;
|
||||
};
|
||||
moreInfoButton.hidden = false;
|
||||
lessInfoButton.hidden = true;
|
||||
Promise.all(moreInfoText).then(function (parts) {
|
||||
errorMoreInfo.value = parts.join("\n");
|
||||
});
|
||||
console.error(`${message}\n\n${moreInfoText.join("\n")}`);
|
||||
},
|
||||
|
||||
progress: function pdfViewProgress(level) {
|
||||
@ -352,7 +272,7 @@ const PDFViewerApplication = {
|
||||
});
|
||||
this.pdfLinkService = linkService;
|
||||
|
||||
this.l10n = pdfjsViewer.NullL10n;
|
||||
this.l10n = new pdfjsViewer.GenericL10n();
|
||||
|
||||
const container = document.getElementById("viewerContainer");
|
||||
const pdfViewer = new pdfjsViewer.PDFViewer({
|
||||
@ -360,7 +280,7 @@ const PDFViewerApplication = {
|
||||
eventBus,
|
||||
linkService,
|
||||
l10n: this.l10n,
|
||||
useOnlyCssZoom: USE_ONLY_CSS_ZOOM,
|
||||
maxCanvasPixels: MAX_CANVAS_PIXELS,
|
||||
textLayerMode: TEXT_LAYER_MODE,
|
||||
});
|
||||
this.pdfViewer = pdfViewer;
|
@ -1,276 +0,0 @@
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
function xmlEncode(s) {
|
||||
let i = 0,
|
||||
ch;
|
||||
s = String(s);
|
||||
while (
|
||||
i < s.length &&
|
||||
(ch = s[i]) !== "&" &&
|
||||
ch !== "<" &&
|
||||
ch !== '"' &&
|
||||
ch !== "\n" &&
|
||||
ch !== "\r" &&
|
||||
ch !== "\t"
|
||||
) {
|
||||
i++;
|
||||
}
|
||||
if (i >= s.length) {
|
||||
return s;
|
||||
}
|
||||
let buf = s.substring(0, i);
|
||||
while (i < s.length) {
|
||||
ch = s[i++];
|
||||
switch (ch) {
|
||||
case "&":
|
||||
buf += "&";
|
||||
break;
|
||||
case "<":
|
||||
buf += "<";
|
||||
break;
|
||||
case '"':
|
||||
buf += """;
|
||||
break;
|
||||
case "\n":
|
||||
buf += "
";
|
||||
break;
|
||||
case "\r":
|
||||
buf += "
";
|
||||
break;
|
||||
case "\t":
|
||||
buf += "	";
|
||||
break;
|
||||
default:
|
||||
buf += ch;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
function DOMElement(name) {
|
||||
this.nodeName = name;
|
||||
this.childNodes = [];
|
||||
this.attributes = {};
|
||||
this.textContent = "";
|
||||
|
||||
if (name === "style") {
|
||||
this.sheet = {
|
||||
cssRules: [],
|
||||
insertRule(rule) {
|
||||
this.cssRules.push(rule);
|
||||
},
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
DOMElement.prototype = {
|
||||
getAttribute: function DOMElement_getAttribute(name) {
|
||||
if (name in this.attributes) {
|
||||
return this.attributes[name];
|
||||
}
|
||||
return null;
|
||||
},
|
||||
|
||||
getAttributeNS: function DOMElement_getAttributeNS(NS, name) {
|
||||
// Fast path
|
||||
if (name in this.attributes) {
|
||||
return this.attributes[name];
|
||||
}
|
||||
// Slow path - used by test/unit/display_svg_spec.js
|
||||
// Assuming that there is only one matching attribute for a given name,
|
||||
// across all namespaces.
|
||||
if (NS) {
|
||||
const suffix = ":" + name;
|
||||
for (const fullName in this.attributes) {
|
||||
if (fullName.slice(-suffix.length) === suffix) {
|
||||
return this.attributes[fullName];
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
},
|
||||
|
||||
setAttribute: function DOMElement_setAttribute(name, value) {
|
||||
this.attributes[name] = value || "";
|
||||
},
|
||||
|
||||
setAttributeNS: function DOMElement_setAttributeNS(NS, name, value) {
|
||||
this.setAttribute(name, value);
|
||||
},
|
||||
|
||||
appendChild: function DOMElement_appendChild(element) {
|
||||
const childNodes = this.childNodes;
|
||||
if (!childNodes.includes(element)) {
|
||||
childNodes.push(element);
|
||||
}
|
||||
},
|
||||
|
||||
hasChildNodes: function DOMElement_hasChildNodes() {
|
||||
return this.childNodes.length !== 0;
|
||||
},
|
||||
|
||||
cloneNode: function DOMElement_cloneNode() {
|
||||
const newNode = new DOMElement(this.nodeName);
|
||||
newNode.childNodes = this.childNodes;
|
||||
newNode.attributes = this.attributes;
|
||||
newNode.textContent = this.textContent;
|
||||
return newNode;
|
||||
},
|
||||
|
||||
// This method is offered for convenience. It is recommended to directly use
|
||||
// getSerializer because that allows you to process the chunks as they come
|
||||
// instead of requiring the whole image to fit in memory.
|
||||
toString: function DOMElement_toString() {
|
||||
const buf = [];
|
||||
const serializer = this.getSerializer();
|
||||
let chunk;
|
||||
while ((chunk = serializer.getNext()) !== null) {
|
||||
buf.push(chunk);
|
||||
}
|
||||
return buf.join("");
|
||||
},
|
||||
|
||||
getSerializer: function DOMElement_getSerializer() {
|
||||
return new DOMElementSerializer(this);
|
||||
},
|
||||
};
|
||||
|
||||
function DOMElementSerializer(node) {
|
||||
this._node = node;
|
||||
this._state = 0;
|
||||
this._loopIndex = 0;
|
||||
this._attributeKeys = null;
|
||||
this._childSerializer = null;
|
||||
}
|
||||
DOMElementSerializer.prototype = {
|
||||
/**
|
||||
* Yields the next chunk in the serialization of the element.
|
||||
*
|
||||
* @returns {string|null} null if the element has fully been serialized.
|
||||
*/
|
||||
getNext: function DOMElementSerializer_getNext() {
|
||||
const node = this._node;
|
||||
switch (this._state) {
|
||||
case 0: // Start opening tag.
|
||||
++this._state;
|
||||
return "<" + node.nodeName;
|
||||
case 1: // Add SVG namespace if this is the root element.
|
||||
++this._state;
|
||||
if (node.nodeName === "svg:svg") {
|
||||
return (
|
||||
' xmlns:xlink="http://www.w3.org/1999/xlink"' +
|
||||
' xmlns:svg="http://www.w3.org/2000/svg"'
|
||||
);
|
||||
}
|
||||
/* falls through */
|
||||
case 2: // Initialize variables for looping over attributes.
|
||||
++this._state;
|
||||
this._loopIndex = 0;
|
||||
this._attributeKeys = Object.keys(node.attributes);
|
||||
/* falls through */
|
||||
case 3: // Serialize any attributes and end opening tag.
|
||||
if (this._loopIndex < this._attributeKeys.length) {
|
||||
const name = this._attributeKeys[this._loopIndex++];
|
||||
return " " + name + '="' + xmlEncode(node.attributes[name]) + '"';
|
||||
}
|
||||
++this._state;
|
||||
return ">";
|
||||
case 4: // Serialize textContent for tspan/style elements.
|
||||
if (node.nodeName === "svg:tspan" || node.nodeName === "svg:style") {
|
||||
this._state = 6;
|
||||
return xmlEncode(node.textContent);
|
||||
}
|
||||
++this._state;
|
||||
this._loopIndex = 0;
|
||||
/* falls through */
|
||||
case 5: // Serialize child nodes (only for non-tspan/style elements).
|
||||
while (true) {
|
||||
const value =
|
||||
this._childSerializer && this._childSerializer.getNext();
|
||||
if (value !== null) {
|
||||
return value;
|
||||
}
|
||||
const nextChild = node.childNodes[this._loopIndex++];
|
||||
if (nextChild) {
|
||||
this._childSerializer = new DOMElementSerializer(nextChild);
|
||||
} else {
|
||||
this._childSerializer = null;
|
||||
++this._state;
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* falls through */
|
||||
case 6: // Ending tag.
|
||||
++this._state;
|
||||
return "</" + node.nodeName + ">";
|
||||
case 7: // Done.
|
||||
return null;
|
||||
default:
|
||||
throw new Error("Unexpected serialization state: " + this._state);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
const document = {
|
||||
childNodes: [],
|
||||
|
||||
get currentScript() {
|
||||
return { src: "" };
|
||||
},
|
||||
|
||||
get documentElement() {
|
||||
return this;
|
||||
},
|
||||
|
||||
createElementNS(NS, element) {
|
||||
const elObject = new DOMElement(element);
|
||||
return elObject;
|
||||
},
|
||||
|
||||
createElement(element) {
|
||||
return this.createElementNS("", element);
|
||||
},
|
||||
|
||||
getElementsByTagName(element) {
|
||||
if (element === "head") {
|
||||
return [this.head || (this.head = new DOMElement("head"))];
|
||||
}
|
||||
return [];
|
||||
},
|
||||
};
|
||||
|
||||
function Image() {
|
||||
this._src = null;
|
||||
this.onload = null;
|
||||
}
|
||||
Image.prototype = {
|
||||
get src() {
|
||||
return this._src;
|
||||
},
|
||||
set src(value) {
|
||||
this._src = value;
|
||||
if (this.onload) {
|
||||
this.onload();
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
exports.document = document;
|
||||
exports.Image = Image;
|
||||
|
||||
const exported_symbols = Object.keys(exports);
|
||||
|
||||
exports.setStubs = function (namespace) {
|
||||
exported_symbols.forEach(function (key) {
|
||||
console.assert(!(key in namespace), "property should not be set: " + key);
|
||||
namespace[key] = exports[key];
|
||||
});
|
||||
};
|
||||
exports.unsetStubs = function (namespace) {
|
||||
exported_symbols.forEach(function (key) {
|
||||
console.assert(key in namespace, "property should be set: " + key);
|
||||
delete namespace[key];
|
||||
});
|
||||
};
|
@ -3,12 +3,10 @@
|
||||
|
||||
//
|
||||
// Basic node example that prints document metadata and text content.
|
||||
// Requires single file built version of PDF.js -- please run
|
||||
// `gulp singlefile` before running the example.
|
||||
//
|
||||
|
||||
// Run `gulp dist-install` to generate 'pdfjs-dist' npm package files.
|
||||
const pdfjsLib = require("pdfjs-dist/legacy/build/pdf.js");
|
||||
import { getDocument } from "pdfjs-dist/legacy/build/pdf.mjs";
|
||||
|
||||
// Loading file from file system into typed array
|
||||
const pdfPath =
|
||||
@ -16,7 +14,7 @@ const pdfPath =
|
||||
|
||||
// Will be using promises to load document, pages and misc data instead of
|
||||
// callback.
|
||||
const loadingTask = pdfjsLib.getDocument(pdfPath);
|
||||
const loadingTask = getDocument(pdfPath);
|
||||
loadingTask.promise
|
||||
.then(function (doc) {
|
||||
const numPages = doc.numPages;
|
@ -13,13 +13,13 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
const Canvas = require("canvas");
|
||||
const assert = require("assert").strict;
|
||||
const fs = require("fs");
|
||||
import { strict as assert } from "assert";
|
||||
import Canvas from "canvas";
|
||||
import fs from "fs";
|
||||
import { getDocument } from "pdfjs-dist/legacy/build/pdf.mjs";
|
||||
|
||||
function NodeCanvasFactory() {}
|
||||
NodeCanvasFactory.prototype = {
|
||||
create: function NodeCanvasFactory_create(width, height) {
|
||||
class NodeCanvasFactory {
|
||||
create(width, height) {
|
||||
assert(width > 0 && height > 0, "Invalid canvas size");
|
||||
const canvas = Canvas.createCanvas(width, height);
|
||||
const context = canvas.getContext("2d");
|
||||
@ -27,16 +27,16 @@ NodeCanvasFactory.prototype = {
|
||||
canvas,
|
||||
context,
|
||||
};
|
||||
},
|
||||
}
|
||||
|
||||
reset: function NodeCanvasFactory_reset(canvasAndContext, width, height) {
|
||||
reset(canvasAndContext, width, height) {
|
||||
assert(canvasAndContext.canvas, "Canvas is not specified");
|
||||
assert(width > 0 && height > 0, "Invalid canvas size");
|
||||
canvasAndContext.canvas.width = width;
|
||||
canvasAndContext.canvas.height = height;
|
||||
},
|
||||
}
|
||||
|
||||
destroy: function NodeCanvasFactory_destroy(canvasAndContext) {
|
||||
destroy(canvasAndContext) {
|
||||
assert(canvasAndContext.canvas, "Canvas is not specified");
|
||||
|
||||
// Zeroing the width and height cause Firefox to release graphics
|
||||
@ -45,10 +45,8 @@ NodeCanvasFactory.prototype = {
|
||||
canvasAndContext.canvas.height = 0;
|
||||
canvasAndContext.canvas = null;
|
||||
canvasAndContext.context = null;
|
||||
},
|
||||
};
|
||||
|
||||
const pdfjsLib = require("pdfjs-dist/legacy/build/pdf.js");
|
||||
}
|
||||
}
|
||||
|
||||
// Some PDFs need external cmaps.
|
||||
const CMAP_URL = "../../../node_modules/pdfjs-dist/cmaps/";
|
||||
@ -58,28 +56,29 @@ const CMAP_PACKED = true;
|
||||
const STANDARD_FONT_DATA_URL =
|
||||
"../../../node_modules/pdfjs-dist/standard_fonts/";
|
||||
|
||||
const canvasFactory = new NodeCanvasFactory();
|
||||
|
||||
// Loading file from file system into typed array.
|
||||
const pdfPath =
|
||||
process.argv[2] || "../../../web/compressed.tracemonkey-pldi-09.pdf";
|
||||
const data = new Uint8Array(fs.readFileSync(pdfPath));
|
||||
|
||||
// Load the PDF file.
|
||||
const loadingTask = pdfjsLib.getDocument({
|
||||
const loadingTask = getDocument({
|
||||
data,
|
||||
cMapUrl: CMAP_URL,
|
||||
cMapPacked: CMAP_PACKED,
|
||||
standardFontDataUrl: STANDARD_FONT_DATA_URL,
|
||||
canvasFactory,
|
||||
});
|
||||
|
||||
(async function () {
|
||||
try {
|
||||
try {
|
||||
const pdfDocument = await loadingTask.promise;
|
||||
console.log("# PDF document loaded.");
|
||||
// Get the first page.
|
||||
const page = await pdfDocument.getPage(1);
|
||||
// Render the page on a Node canvas with 100% scale.
|
||||
const viewport = page.getViewport({ scale: 1.0 });
|
||||
const canvasFactory = new NodeCanvasFactory();
|
||||
const canvasAndContext = canvasFactory.create(
|
||||
viewport.width,
|
||||
viewport.height
|
||||
@ -87,7 +86,6 @@ const loadingTask = pdfjsLib.getDocument({
|
||||
const renderContext = {
|
||||
canvasContext: canvasAndContext.context,
|
||||
viewport,
|
||||
canvasFactory,
|
||||
};
|
||||
|
||||
const renderTask = page.render(renderContext);
|
||||
@ -98,14 +96,11 @@ const loadingTask = pdfjsLib.getDocument({
|
||||
if (error) {
|
||||
console.error("Error: " + error);
|
||||
} else {
|
||||
console.log(
|
||||
"Finished converting first page of PDF file to a PNG image."
|
||||
);
|
||||
console.log("Finished converting first page of PDF file to a PNG image.");
|
||||
}
|
||||
});
|
||||
// Release page resources.
|
||||
page.cleanup();
|
||||
} catch (reason) {
|
||||
} catch (reason) {
|
||||
console.log(reason);
|
||||
}
|
||||
})();
|
||||
}
|
@ -1,128 +0,0 @@
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
//
|
||||
// Node tool to dump SVG output into a file.
|
||||
//
|
||||
|
||||
const fs = require("fs");
|
||||
const util = require("util");
|
||||
const path = require("path");
|
||||
const stream = require("stream");
|
||||
|
||||
// HACK few hacks to let PDF.js be loaded not as a module in global space.
|
||||
require("./domstubs.js").setStubs(global);
|
||||
|
||||
// Run `gulp dist-install` to generate 'pdfjs-dist' npm package files.
|
||||
const pdfjsLib = require("pdfjs-dist/legacy/build/pdf.js");
|
||||
|
||||
// Some PDFs need external cmaps.
|
||||
const CMAP_URL = "../../node_modules/pdfjs-dist/cmaps/";
|
||||
const CMAP_PACKED = true;
|
||||
|
||||
// Loading file from file system into typed array
|
||||
const pdfPath =
|
||||
process.argv[2] || "../../web/compressed.tracemonkey-pldi-09.pdf";
|
||||
const data = new Uint8Array(fs.readFileSync(pdfPath));
|
||||
|
||||
const outputDirectory = "./svgdump";
|
||||
|
||||
try {
|
||||
// Note: This creates a directory only one level deep. If you want to create
|
||||
// multiple subdirectories on the fly, use the mkdirp module from npm.
|
||||
fs.mkdirSync(outputDirectory);
|
||||
} catch (e) {
|
||||
if (e.code !== "EEXIST") {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
// Dumps svg outputs to a folder called svgdump
|
||||
function getFilePathForPage(pageNum) {
|
||||
const name = path.basename(pdfPath, path.extname(pdfPath));
|
||||
return path.join(outputDirectory, `${name}-${pageNum}.svg`);
|
||||
}
|
||||
|
||||
/**
|
||||
* A readable stream which offers a stream representing the serialization of a
|
||||
* given DOM element (as defined by domstubs.js).
|
||||
*
|
||||
* @param {object} options
|
||||
* @param {DOMElement} options.svgElement The element to serialize
|
||||
*/
|
||||
function ReadableSVGStream(options) {
|
||||
if (!(this instanceof ReadableSVGStream)) {
|
||||
return new ReadableSVGStream(options);
|
||||
}
|
||||
stream.Readable.call(this, options);
|
||||
this.serializer = options.svgElement.getSerializer();
|
||||
}
|
||||
util.inherits(ReadableSVGStream, stream.Readable);
|
||||
// Implements https://nodejs.org/api/stream.html#stream_readable_read_size_1
|
||||
ReadableSVGStream.prototype._read = function () {
|
||||
let chunk;
|
||||
while ((chunk = this.serializer.getNext()) !== null) {
|
||||
if (!this.push(chunk)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
this.push(null);
|
||||
};
|
||||
|
||||
// Streams the SVG element to the given file path.
|
||||
function writeSvgToFile(svgElement, filePath) {
|
||||
let readableSvgStream = new ReadableSVGStream({
|
||||
svgElement,
|
||||
});
|
||||
const writableStream = fs.createWriteStream(filePath);
|
||||
return new Promise(function (resolve, reject) {
|
||||
readableSvgStream.once("error", reject);
|
||||
writableStream.once("error", reject);
|
||||
writableStream.once("finish", resolve);
|
||||
readableSvgStream.pipe(writableStream);
|
||||
}).catch(function (err) {
|
||||
readableSvgStream = null; // Explicitly null because of v8 bug 6512.
|
||||
writableStream.end();
|
||||
throw err;
|
||||
});
|
||||
}
|
||||
|
||||
// Will be using async/await to load document, pages and misc data.
|
||||
const loadingTask = pdfjsLib.getDocument({
|
||||
data,
|
||||
cMapUrl: CMAP_URL,
|
||||
cMapPacked: CMAP_PACKED,
|
||||
fontExtraProperties: true,
|
||||
});
|
||||
(async function () {
|
||||
const doc = await loadingTask.promise;
|
||||
const numPages = doc.numPages;
|
||||
console.log("# Document Loaded");
|
||||
console.log(`Number of Pages: ${numPages}`);
|
||||
console.log();
|
||||
|
||||
for (let pageNum = 1; pageNum <= numPages; pageNum++) {
|
||||
try {
|
||||
const page = await doc.getPage(pageNum);
|
||||
console.log(`# Page ${pageNum}`);
|
||||
const viewport = page.getViewport({ scale: 1.0 });
|
||||
console.log(`Size: ${viewport.width}x${viewport.height}`);
|
||||
console.log();
|
||||
|
||||
const opList = await page.getOperatorList();
|
||||
const svgGfx = new pdfjsLib.SVGGraphics(
|
||||
page.commonObjs,
|
||||
page.objs,
|
||||
/* forceDataSchema = */ true
|
||||
);
|
||||
svgGfx.embedFonts = true;
|
||||
const svg = await svgGfx.getSVG(opList, viewport);
|
||||
await writeSvgToFile(svg, getFilePathForPage(pageNum));
|
||||
// Release page resources.
|
||||
page.cleanup();
|
||||
} catch (err) {
|
||||
console.log(`Error: ${err}`);
|
||||
}
|
||||
}
|
||||
console.log("# End of Document");
|
||||
})();
|
@ -1,8 +0,0 @@
|
||||
## PDF.js using SVG
|
||||
|
||||
This is a project for implementing alternate backend for PDF.js using Scalable Vector Graphics. This is still a WIP.
|
||||
Take a look at [proposal](https://docs.google.com/document/d/1k4nPx1RrHbxXi94kSdvW5ay8KMkjwLmBEiCNupyzlwk/pub) for this project.
|
||||
|
||||
## Getting started
|
||||
|
||||
Take a look at src/display/svg.js to see the SVG rendering code.
|
@ -1,51 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<!--
|
||||
Copyright 2014 Mozilla Foundation
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<html dir="ltr" mozdisallowselectionprint>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<meta name="google" content="notranslate">
|
||||
<title>PDF.js SVG viewer using built components</title>
|
||||
|
||||
<style>
|
||||
body {
|
||||
background-color: #808080;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
#viewerContainer {
|
||||
overflow: auto;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
</style>
|
||||
|
||||
<link rel="stylesheet" href="../../node_modules/pdfjs-dist/web/pdf_viewer.css">
|
||||
|
||||
<script src="../../node_modules/pdfjs-dist/build/pdf.js"></script>
|
||||
<script src="../../node_modules/pdfjs-dist/web/pdf_viewer.js"></script>
|
||||
</head>
|
||||
|
||||
<body tabindex="1">
|
||||
<div id="viewerContainer">
|
||||
<div id="viewer" class="pdfViewer"></div>
|
||||
</div>
|
||||
|
||||
<script src="viewer.js"></script>
|
||||
</body>
|
||||
</html>
|
@ -3,8 +3,8 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Text-only PDF.js example</title>
|
||||
<script src="../../node_modules/pdfjs-dist/build/pdf.js"></script>
|
||||
<script src="pdf2svg.js"></script>
|
||||
<script src="../../node_modules/pdfjs-dist/build/pdf.mjs" type="module"></script>
|
||||
<script src="pdf2svg.mjs" type="module"></script>
|
||||
</head>
|
||||
<body>
|
||||
<p>Text-only PDF.js example</p>
|
||||
|
@ -19,7 +19,7 @@ const PAGE_SCALE = 1.5;
|
||||
const SVG_NS = "http://www.w3.org/2000/svg";
|
||||
|
||||
pdfjsLib.GlobalWorkerOptions.workerSrc =
|
||||
"../../node_modules/pdfjs-dist/build/pdf.worker.js";
|
||||
"../../node_modules/pdfjs-dist/build/pdf.worker.mjs";
|
||||
|
||||
function buildSVG(viewport, textContent) {
|
||||
// Building SVG with size of the viewport (for simplicity)
|
||||
@ -43,7 +43,7 @@ function buildSVG(viewport, textContent) {
|
||||
text.setAttribute("transform", "matrix(" + tx.join(" ") + ")");
|
||||
text.setAttribute("font-family", style.fontFamily);
|
||||
text.textContent = textItem.str;
|
||||
svg.appendChild(text);
|
||||
svg.append(text);
|
||||
});
|
||||
return svg;
|
||||
}
|
||||
@ -57,7 +57,7 @@ async function pageLoaded() {
|
||||
const textContent = await page.getTextContent();
|
||||
// building SVG and adding that to the DOM
|
||||
const svg = buildSVG(viewport, textContent);
|
||||
document.getElementById("pageContainer").appendChild(svg);
|
||||
document.getElementById("pageContainer").append(svg);
|
||||
// Release page resources.
|
||||
page.cleanup();
|
||||
}
|
@ -27,12 +27,7 @@ otherwise the build is not guaranteed to work correctly.
|
||||
## Worker loading
|
||||
|
||||
If you are getting the `Setting up fake worker` warning, make sure you are
|
||||
importing `pdfjs-dist/webpack` which is the zero-configuration method for
|
||||
Webpack users. You will need to install
|
||||
[worker-loader](https://github.com/webpack-contrib/worker-loader) (version 3.0.0 or higher is required), as a
|
||||
dependency in your project in order to use `pdfjs-dist/webpack` (configuring
|
||||
`worker-loader` is not necessary; just installing it is sufficient).
|
||||
importing `pdfjs-dist/webpack.mjs` which is the zero-configuration method for
|
||||
Webpack users. Installing `worker-loader` is no longer necessary.
|
||||
|
||||
import * as pdfjsLib from 'pdfjs-dist/webpack';
|
||||
|
||||
For a full working example refer to [this repository](https://github.com/yurydelendik/pdfjs-react).
|
||||
import * as pdfjsLib from 'pdfjs-dist/webpack.mjs';
|
||||
|
@ -1,35 +0,0 @@
|
||||
// Any copyright is dedicated to the Public Domain.
|
||||
// http://creativecommons.org/licenses/publicdomain/
|
||||
|
||||
// Hello world example for webpack.
|
||||
|
||||
const pdfjsLib = require("pdfjs-dist");
|
||||
|
||||
const pdfPath = "../learning/helloworld.pdf";
|
||||
|
||||
// Setting worker path to worker bundle.
|
||||
pdfjsLib.GlobalWorkerOptions.workerSrc =
|
||||
"../../build/webpack/pdf.worker.bundle.js";
|
||||
|
||||
// Loading a document.
|
||||
const loadingTask = pdfjsLib.getDocument(pdfPath);
|
||||
loadingTask.promise
|
||||
.then(function (pdfDocument) {
|
||||
// Request a first page
|
||||
return pdfDocument.getPage(1).then(function (pdfPage) {
|
||||
// Display page on the existing canvas with 100% scale.
|
||||
const viewport = pdfPage.getViewport({ scale: 1.0 });
|
||||
const canvas = document.getElementById("theCanvas");
|
||||
canvas.width = viewport.width;
|
||||
canvas.height = viewport.height;
|
||||
const ctx = canvas.getContext("2d");
|
||||
const renderTask = pdfPage.render({
|
||||
canvasContext: ctx,
|
||||
viewport,
|
||||
});
|
||||
return renderTask.promise;
|
||||
});
|
||||
})
|
||||
.catch(function (reason) {
|
||||
console.error("Error: " + reason);
|
||||
});
|
29
examples/webpack/main.mjs
Normal file
29
examples/webpack/main.mjs
Normal file
@ -0,0 +1,29 @@
|
||||
// Any copyright is dedicated to the Public Domain.
|
||||
// http://creativecommons.org/licenses/publicdomain/
|
||||
|
||||
// Hello world example for webpack.
|
||||
|
||||
import * as pdfjsLib from "pdfjs-dist";
|
||||
|
||||
const pdfPath = "../learning/helloworld.pdf";
|
||||
|
||||
// Setting worker path to worker bundle.
|
||||
pdfjsLib.GlobalWorkerOptions.workerSrc =
|
||||
"../../build/webpack/pdf.worker.bundle.js";
|
||||
|
||||
// Loading a document.
|
||||
const loadingTask = pdfjsLib.getDocument(pdfPath);
|
||||
const pdfDocument = await loadingTask.promise;
|
||||
// Request a first page
|
||||
const pdfPage = await pdfDocument.getPage(1);
|
||||
// Display page on the existing canvas with 100% scale.
|
||||
const viewport = pdfPage.getViewport({ scale: 1.0 });
|
||||
const canvas = document.getElementById("theCanvas");
|
||||
canvas.width = viewport.width;
|
||||
canvas.height = viewport.height;
|
||||
const ctx = canvas.getContext("2d");
|
||||
const renderTask = pdfPage.render({
|
||||
canvasContext: ctx,
|
||||
viewport,
|
||||
});
|
||||
await renderTask.promise;
|
@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "webpack-pdf.js-example",
|
||||
"version": "0.1.0",
|
||||
"version": "0.2.0",
|
||||
"scripts": {
|
||||
"build": "webpack"
|
||||
},
|
||||
"devDependencies": {
|
||||
"webpack": "^5.11.1",
|
||||
"webpack-cli": "^4.3.1",
|
||||
"webpack": "^5.89.0",
|
||||
"webpack-cli": "^5.1.4",
|
||||
"pdfjs-dist": "../../node_modules/pdfjs-dist"
|
||||
}
|
||||
}
|
||||
|
@ -1,11 +1,13 @@
|
||||
/* eslint-disable import/no-commonjs */
|
||||
|
||||
const webpack = require("webpack"); // eslint-disable-line no-unused-vars
|
||||
const path = require("path");
|
||||
|
||||
module.exports = {
|
||||
context: __dirname,
|
||||
entry: {
|
||||
main: "./main.js",
|
||||
"pdf.worker": "pdfjs-dist/build/pdf.worker.entry",
|
||||
main: "./main.mjs",
|
||||
"pdf.worker": "pdfjs-dist/build/pdf.worker.mjs",
|
||||
},
|
||||
mode: "none",
|
||||
output: {
|
||||
|
@ -22,11 +22,7 @@ function getViewerURL(pdf_url) {
|
||||
return VIEWER_URL + "?file=" + encodeURIComponent(pdf_url);
|
||||
}
|
||||
|
||||
if (CSS.supports("animation", "0s")) {
|
||||
document.addEventListener("animationstart", onAnimationStart, true);
|
||||
} else {
|
||||
document.addEventListener("webkitAnimationStart", onAnimationStart, true);
|
||||
}
|
||||
document.addEventListener("animationstart", onAnimationStart, true);
|
||||
|
||||
function onAnimationStart(event) {
|
||||
if (event.animationName === "pdfjs-detected-object-or-embed") {
|
||||
@ -132,7 +128,11 @@ function updateEmbedElement(elem) {
|
||||
}
|
||||
elem.type = "text/html";
|
||||
elem.src = getEmbeddedViewerURL(elem.src);
|
||||
|
||||
if (parentNode) {
|
||||
// Suppress linter warning: insertBefore is preferable to
|
||||
// nextSibling.before(elem) because nextSibling may be null.
|
||||
// eslint-disable-next-line unicorn/prefer-modern-dom-apis
|
||||
parentNode.insertBefore(elem, nextSibling);
|
||||
}
|
||||
}
|
||||
@ -160,7 +160,7 @@ function updateObjectElement(elem) {
|
||||
if (!iframe || !iframe.__inserted_by_pdfjs) {
|
||||
iframe = createFullSizeIframe();
|
||||
elem.textContent = "";
|
||||
elem.appendChild(iframe);
|
||||
elem.append(iframe);
|
||||
iframe.__inserted_by_pdfjs = true;
|
||||
}
|
||||
iframe.src = getEmbeddedViewerURL(elem.data);
|
||||
|
@ -1,11 +1,6 @@
|
||||
/**
|
||||
* Detect creation of <embed> and <object> tags.
|
||||
*/
|
||||
@-webkit-keyframes pdfjs-detected-object-or-embed {
|
||||
from {
|
||||
/* empty */
|
||||
}
|
||||
}
|
||||
@keyframes pdfjs-detected-object-or-embed {
|
||||
from {
|
||||
/* empty */
|
||||
@ -13,9 +8,6 @@
|
||||
}
|
||||
object,
|
||||
embed {
|
||||
-webkit-animation-delay: 0s !important;
|
||||
-webkit-animation-name: pdfjs-detected-object-or-embed !important;
|
||||
-webkit-animation-play-state: running !important;
|
||||
animation-delay: 0s !important;
|
||||
animation-name: pdfjs-detected-object-or-embed !important;
|
||||
animation-play-state: running !important;
|
||||
|
@ -47,7 +47,7 @@ limitations under the License.
|
||||
}
|
||||
var scheme = url.slice(0, schemeIndex).toLowerCase();
|
||||
if (schemes.includes(scheme)) {
|
||||
url = url.split("#")[0];
|
||||
url = url.split("#", 1)[0];
|
||||
if (url.charAt(schemeIndex) === ":") {
|
||||
url = encodeURIComponent(url);
|
||||
}
|
||||
@ -95,8 +95,8 @@ limitations under the License.
|
||||
url: CRX_BASE_URL + "*:*",
|
||||
},
|
||||
function (tabsFromLastSession) {
|
||||
for (var i = 0; i < tabsFromLastSession.length; ++i) {
|
||||
chrome.tabs.reload(tabsFromLastSession[i].id);
|
||||
for (const { id } of tabsFromLastSession) {
|
||||
chrome.tabs.reload(id);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
@ -1,4 +1,5 @@
|
||||
{
|
||||
"minimum_chrome_version": "88",
|
||||
"manifest_version": 2,
|
||||
"name": "PDF Viewer",
|
||||
"version": "PDFJSSCRIPT_VERSION",
|
||||
@ -10,32 +11,30 @@
|
||||
},
|
||||
"permissions": [
|
||||
"fileBrowserHandler",
|
||||
"webRequest", "webRequestBlocking",
|
||||
"webRequest",
|
||||
"webRequestBlocking",
|
||||
"<all_urls>",
|
||||
"tabs",
|
||||
"webNavigation",
|
||||
"storage"
|
||||
],
|
||||
"content_scripts": [{
|
||||
"matches": [
|
||||
"http://*/*",
|
||||
"https://*/*",
|
||||
"ftp://*/*",
|
||||
"file://*/*"
|
||||
],
|
||||
"content_scripts": [
|
||||
{
|
||||
"matches": ["http://*/*", "https://*/*", "ftp://*/*", "file://*/*"],
|
||||
"run_at": "document_start",
|
||||
"all_frames": true,
|
||||
"css": ["contentstyle.css"],
|
||||
"js": ["contentscript.js"]
|
||||
}],
|
||||
}
|
||||
],
|
||||
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'",
|
||||
"file_browser_handlers": [{
|
||||
"file_browser_handlers": [
|
||||
{
|
||||
"id": "open-as-pdf",
|
||||
"default_title": "Open with PDF Viewer",
|
||||
"file_filters": [
|
||||
"filesystem:*.pdf"
|
||||
]
|
||||
}],
|
||||
"file_filters": ["filesystem:*.pdf"]
|
||||
}
|
||||
],
|
||||
"storage": {
|
||||
"managed_schema": "preferences_schema.json"
|
||||
},
|
||||
|
@ -109,17 +109,10 @@ limitations under the License.
|
||||
}
|
||||
// Migration code for https://github.com/mozilla/pdf.js/pull/9479.
|
||||
if (typeof items.disableTextLayer === "boolean") {
|
||||
var textLayerMode = 1;
|
||||
if (items.disableTextLayer) {
|
||||
textLayerMode = 0;
|
||||
} else if (items.enhanceTextSelection) {
|
||||
textLayerMode = 2;
|
||||
}
|
||||
if (textLayerMode !== 1) {
|
||||
// Overwrite if computed textLayerMode is not the default value (1).
|
||||
storageSync.set(
|
||||
{
|
||||
textLayerMode,
|
||||
textLayerMode: 0,
|
||||
},
|
||||
function () {
|
||||
if (!chrome.runtime.lastError) {
|
||||
|
@ -126,7 +126,6 @@ body {
|
||||
<select>
|
||||
<option value="0">Disable text selection</option>
|
||||
<option value="1">Enable text selection</option>
|
||||
<option value="2">Enable enhanced mode (experimental)</option>
|
||||
</select>
|
||||
</label>
|
||||
</div>
|
||||
|
@ -155,7 +155,7 @@ function renderBooleanPref(shortDescription, description, prefName) {
|
||||
storageArea.set(pref);
|
||||
};
|
||||
wrapper.querySelector("span").textContent = shortDescription;
|
||||
document.getElementById("settings-boxes").appendChild(wrapper);
|
||||
document.getElementById("settings-boxes").append(wrapper);
|
||||
|
||||
function renderPreference(value) {
|
||||
checkbox.checked = value;
|
||||
@ -172,7 +172,7 @@ function renderEnumPref(shortDescription, prefName) {
|
||||
storageArea.set(pref);
|
||||
};
|
||||
wrapper.querySelector("span").textContent = shortDescription;
|
||||
document.getElementById("settings-boxes").appendChild(wrapper);
|
||||
document.getElementById("settings-boxes").append(wrapper);
|
||||
|
||||
function renderPreference(value) {
|
||||
select.value = value;
|
||||
@ -189,7 +189,7 @@ function renderDefaultZoomValue(shortDescription) {
|
||||
});
|
||||
};
|
||||
wrapper.querySelector("span").textContent = shortDescription;
|
||||
document.getElementById("settings-boxes").appendChild(wrapper);
|
||||
document.getElementById("settings-boxes").append(wrapper);
|
||||
|
||||
function renderPreference(value) {
|
||||
value = value || "auto";
|
||||
|
@ -20,7 +20,15 @@ limitations under the License.
|
||||
var VIEWER_URL = chrome.extension.getURL("content/web/viewer.html");
|
||||
|
||||
function getViewerURL(pdf_url) {
|
||||
return VIEWER_URL + "?file=" + encodeURIComponent(pdf_url);
|
||||
// |pdf_url| may contain a fragment such as "#page=2". That should be passed
|
||||
// as a fragment to the viewer, not encoded in pdf_url.
|
||||
var hash = "";
|
||||
var i = pdf_url.indexOf("#");
|
||||
if (i > 0) {
|
||||
hash = pdf_url.slice(i);
|
||||
pdf_url = pdf_url.slice(0, i);
|
||||
}
|
||||
return VIEWER_URL + "?file=" + encodeURIComponent(pdf_url) + hash;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -54,8 +62,7 @@ function isPdfDownloadable(details) {
|
||||
* @returns {undefined|{name: string, value: string}} The header, if found.
|
||||
*/
|
||||
function getHeaderFromHeaders(headers, headerName) {
|
||||
for (var i = 0; i < headers.length; ++i) {
|
||||
var header = headers[i];
|
||||
for (const header of headers) {
|
||||
if (header.name.toLowerCase() === headerName) {
|
||||
return header;
|
||||
}
|
||||
@ -155,19 +162,7 @@ chrome.webRequest.onBeforeRequest.addListener(
|
||||
return { redirectUrl: viewerUrl };
|
||||
},
|
||||
{
|
||||
urls: [
|
||||
"file://*/*.pdf",
|
||||
"file://*/*.PDF",
|
||||
...// Duck-typing: MediaError.prototype.message was added in Chrome 59.
|
||||
(MediaError.prototype.hasOwnProperty("message")
|
||||
? []
|
||||
: [
|
||||
// Note: Chrome 59 has disabled ftp resource loading by default:
|
||||
// https://www.chromestatus.com/feature/5709390967472128
|
||||
"ftp://*/*.pdf",
|
||||
"ftp://*/*.PDF",
|
||||
]),
|
||||
],
|
||||
urls: ["file://*/*.pdf", "file://*/*.PDF"],
|
||||
types: ["main_frame", "sub_frame"],
|
||||
},
|
||||
["blocking"]
|
||||
@ -253,10 +248,3 @@ chrome.runtime.onMessage.addListener(function (message, sender, sendResponse) {
|
||||
}
|
||||
return undefined;
|
||||
});
|
||||
|
||||
// Remove keys from storage that were once part of the deleted feature-detect.js
|
||||
chrome.storage.local.remove([
|
||||
"featureDetectLastUA",
|
||||
"webRequestRedirectUrl",
|
||||
"extensionSupportsFTP",
|
||||
]);
|
||||
|
@ -5,11 +5,7 @@
|
||||
"title": "Theme",
|
||||
"description": "The theme to use.\n0 = Use system theme.\n1 = Light theme.\n2 = Dark theme.",
|
||||
"type": "integer",
|
||||
"enum": [
|
||||
0,
|
||||
1,
|
||||
2
|
||||
],
|
||||
"enum": [0, 1, 2],
|
||||
"default": 2
|
||||
},
|
||||
"showPreviousViewOnLoad": {
|
||||
@ -21,13 +17,15 @@
|
||||
"title": "View position on load",
|
||||
"description": "The position in the document upon load.\n -1 = Default (uses OpenAction if available, otherwise equal to `viewOnLoad = 0`).\n 0 = The last viewed page/position.\n 1 = The initial page/position.",
|
||||
"type": "integer",
|
||||
"enum": [
|
||||
-1,
|
||||
0,
|
||||
1
|
||||
],
|
||||
"enum": [-1, 0, 1],
|
||||
"default": 0
|
||||
},
|
||||
"defaultZoomDelay": {
|
||||
"title": "Default zoom delay",
|
||||
"description": "Delay (in ms) to wait before redrawing the canvas.",
|
||||
"type": "integer",
|
||||
"default": 400
|
||||
},
|
||||
"defaultZoomValue": {
|
||||
"title": "Default zoom level",
|
||||
"description": "Default zoom level of the viewer. Accepted values: 'auto', 'page-actual', 'page-width', 'page-height', 'page-fit', or a zoom level in percents.",
|
||||
@ -39,13 +37,7 @@
|
||||
"title": "Sidebar state on load",
|
||||
"description": "Controls the state of the sidebar upon load.\n -1 = Default (uses PageMode if available, otherwise the last position if available/enabled).\n 0 = Do not show sidebar.\n 1 = Show thumbnails in sidebar.\n 2 = Show document outline in sidebar.\n 3 = Show attachments in sidebar.",
|
||||
"type": "integer",
|
||||
"enum": [
|
||||
-1,
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3
|
||||
],
|
||||
"enum": [-1, 0, 1, 2, 3],
|
||||
"default": -1
|
||||
},
|
||||
"enableHandToolOnLoad": {
|
||||
@ -53,14 +45,15 @@
|
||||
"type": "boolean",
|
||||
"default": false
|
||||
},
|
||||
"enableML": {
|
||||
"type": "boolean",
|
||||
"default": false
|
||||
},
|
||||
"cursorToolOnLoad": {
|
||||
"title": "Cursor tool on load",
|
||||
"description": "The cursor tool that is enabled upon load.\n 0 = Text selection tool.\n 1 = Hand tool.",
|
||||
"type": "integer",
|
||||
"enum": [
|
||||
0,
|
||||
1
|
||||
],
|
||||
"enum": [0, 1],
|
||||
"default": 0
|
||||
},
|
||||
"pdfBugEnabled": {
|
||||
@ -75,6 +68,22 @@
|
||||
"description": "Whether to allow execution of active content (JavaScript) by PDF files.",
|
||||
"default": false
|
||||
},
|
||||
"enableHighlightEditor": {
|
||||
"type": "boolean",
|
||||
"default": false
|
||||
},
|
||||
"enableHighlightFloatingButton": {
|
||||
"type": "boolean",
|
||||
"default": false
|
||||
},
|
||||
"highlightEditorColors": {
|
||||
"type": "string",
|
||||
"default": "yellow=#FFFF98,green=#53FFBC,blue=#80EBFF,pink=#FFCBE6,red=#FF4F5F"
|
||||
},
|
||||
"enableStampEditor": {
|
||||
"type": "boolean",
|
||||
"default": true
|
||||
},
|
||||
"disableRange": {
|
||||
"title": "Disable range requests",
|
||||
"description": "Whether to disable range requests (not recommended).",
|
||||
@ -102,37 +111,18 @@
|
||||
"type": "boolean",
|
||||
"default": false
|
||||
},
|
||||
"enhanceTextSelection": {
|
||||
"description": "DEPRECATED. Set textLayerMode to 2 to use the enhanced text selection layer by default.",
|
||||
"type": "boolean",
|
||||
"default": false
|
||||
},
|
||||
"textLayerMode": {
|
||||
"title": "Text layer mode",
|
||||
"description": "Controls if the text layer is enabled, and the selection mode that is used.\n 0 = Disabled.\n 1 = Enabled.\n 2 = (Experimental) Enabled, with enhanced text selection.",
|
||||
"description": "Controls if the text layer is enabled, and the selection mode that is used.\n 0 = Disabled.\n 1 = Enabled.",
|
||||
"type": "integer",
|
||||
"enum": [
|
||||
0,
|
||||
1,
|
||||
2
|
||||
],
|
||||
"enum": [0, 1],
|
||||
"default": 1
|
||||
},
|
||||
"useOnlyCssZoom": {
|
||||
"type": "boolean",
|
||||
"default": false
|
||||
},
|
||||
"externalLinkTarget": {
|
||||
"title": "External links target window",
|
||||
"description": "Controls how external links will be opened.\n 0 = default.\n 1 = replaces current window.\n 2 = new window/tab.\n 3 = parent.\n 4 = in top window.",
|
||||
"type": "integer",
|
||||
"enum": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4
|
||||
],
|
||||
"enum": [0, 1, 2, 3, 4],
|
||||
"default": 0
|
||||
},
|
||||
"disablePageLabels": {
|
||||
@ -152,14 +142,14 @@
|
||||
},
|
||||
"annotationMode": {
|
||||
"type": "integer",
|
||||
"enum": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3
|
||||
],
|
||||
"enum": [0, 1, 2, 3],
|
||||
"default": 2
|
||||
},
|
||||
"annotationEditorMode": {
|
||||
"type": "integer",
|
||||
"enum": [-1, 0, 3, 15],
|
||||
"default": 0
|
||||
},
|
||||
"enablePermissions": {
|
||||
"type": "boolean",
|
||||
"default": false
|
||||
@ -188,27 +178,21 @@
|
||||
"title": "Scroll mode on load",
|
||||
"description": "Controls how the viewer scrolls upon load.\n -1 = Default (uses the last position if available/enabled).\n 3 = Page scrolling.\n 0 = Vertical scrolling.\n 1 = Horizontal scrolling.\n 2 = Wrapped scrolling.",
|
||||
"type": "integer",
|
||||
"enum": [
|
||||
-1,
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3
|
||||
],
|
||||
"enum": [-1, 0, 1, 2, 3],
|
||||
"default": -1
|
||||
},
|
||||
"spreadModeOnLoad": {
|
||||
"title": "Spread mode on load",
|
||||
"description": "Whether the viewer should join pages into spreads upon load.\n -1 = Default (uses the last position if available/enabled).\n 0 = No spreads.\n 1 = Odd spreads.\n 2 = Even spreads.",
|
||||
"type": "integer",
|
||||
"enum": [
|
||||
-1,
|
||||
0,
|
||||
1,
|
||||
2
|
||||
],
|
||||
"enum": [-1, 0, 1, 2],
|
||||
"default": -1
|
||||
},
|
||||
"forcePageColors": {
|
||||
"description": "When enabled, the pdf rendering will use the high contrast mode colors",
|
||||
"type": "boolean",
|
||||
"default": false
|
||||
},
|
||||
"pageColorsBackground": {
|
||||
"description": "The color is a string as defined in CSS. Its goal is to help improve readability in high contrast mode",
|
||||
"type": "string",
|
||||
|
@ -14,6 +14,7 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
/* import-globals-from pdfHandler.js */
|
||||
/* exported saveReferer */
|
||||
|
||||
"use strict";
|
||||
/**
|
||||
@ -41,30 +42,18 @@ var g_requestHeaders = {};
|
||||
// g_referrers[tabId][frameId] = referrer of PDF frame.
|
||||
var g_referrers = {};
|
||||
|
||||
var extraInfoSpecWithHeaders; // = ['requestHeaders', 'extraHeaders']
|
||||
|
||||
(function () {
|
||||
var requestFilter = {
|
||||
urls: ["*://*/*"],
|
||||
types: ["main_frame", "sub_frame"],
|
||||
};
|
||||
function registerListener(extraInfoSpec) {
|
||||
extraInfoSpecWithHeaders = extraInfoSpec;
|
||||
// May throw if the given extraInfoSpec is unsupported.
|
||||
chrome.webRequest.onSendHeaders.addListener(
|
||||
function (details) {
|
||||
g_requestHeaders[details.requestId] = details.requestHeaders;
|
||||
},
|
||||
requestFilter,
|
||||
extraInfoSpec
|
||||
["requestHeaders", "extraHeaders"]
|
||||
);
|
||||
}
|
||||
try {
|
||||
registerListener(["requestHeaders", "extraHeaders"]);
|
||||
} catch (e) {
|
||||
// "extraHeaders" is not supported in Chrome 71 and earlier.
|
||||
registerListener(["requestHeaders"]);
|
||||
}
|
||||
chrome.webRequest.onBeforeRedirect.addListener(forgetHeaders, requestFilter);
|
||||
chrome.webRequest.onCompleted.addListener(forgetHeaders, requestFilter);
|
||||
chrome.webRequest.onErrorOccurred.addListener(forgetHeaders, requestFilter);
|
||||
@ -125,7 +114,7 @@ chrome.runtime.onConnect.addListener(function onReceivePort(port) {
|
||||
types: ["xmlhttprequest"],
|
||||
tabId,
|
||||
},
|
||||
["blocking", ...extraInfoSpecWithHeaders]
|
||||
["blocking", "requestHeaders", "extraHeaders"]
|
||||
);
|
||||
}
|
||||
// Acknowledge the message, and include the latest referer for this frame.
|
||||
|
@ -70,12 +70,6 @@ limitations under the License.
|
||||
|
||||
var deduplication_id = getDeduplicationId(wasUpdated);
|
||||
var extension_version = chrome.runtime.getManifest().version;
|
||||
if (window.Request && "mode" in Request.prototype) {
|
||||
// fetch is supported in extensions since Chrome 42 (though the above
|
||||
// feature-detection method detects Chrome 43+).
|
||||
// Unlike XMLHttpRequest, fetch omits credentials such as cookies in the
|
||||
// requests, which guarantees that the server cannot track the client
|
||||
// via HTTP cookies.
|
||||
fetch(LOG_URL, {
|
||||
method: "POST",
|
||||
headers: new Headers({
|
||||
@ -85,14 +79,11 @@ limitations under the License.
|
||||
// Set mode=cors so that the above custom headers are included in the
|
||||
// request.
|
||||
mode: "cors",
|
||||
// Omits credentials such as cookies in the requests, which guarantees
|
||||
// that the server cannot track the client via HTTP cookies.
|
||||
credentials: "omit",
|
||||
cache: "no-store",
|
||||
});
|
||||
return;
|
||||
}
|
||||
var x = new XMLHttpRequest();
|
||||
x.open("POST", LOG_URL);
|
||||
x.setRequestHeader("Deduplication-Id", deduplication_id);
|
||||
x.setRequestHeader("Extension-Version", extension_version);
|
||||
x.send();
|
||||
});
|
||||
}
|
||||
|
||||
@ -110,8 +101,7 @@ limitations under the License.
|
||||
id = "";
|
||||
var buf = new Uint8Array(5);
|
||||
crypto.getRandomValues(buf);
|
||||
for (var i = 0; i < buf.length; ++i) {
|
||||
var c = buf[i];
|
||||
for (const c of buf) {
|
||||
id += (c >>> 4).toString(16) + (c & 0xf).toString(16);
|
||||
}
|
||||
localStorage.telemetryDeduplicationId = id;
|
||||
|
@ -6,18 +6,11 @@
|
||||
"plugin:mozilla/recommended",
|
||||
],
|
||||
|
||||
"parserOptions": {
|
||||
"sourceType": "script",
|
||||
},
|
||||
|
||||
"plugins": [
|
||||
"mozilla"
|
||||
],
|
||||
|
||||
"rules": {
|
||||
// Items different from the mozilla/recommended configuration.
|
||||
"no-var": "off",
|
||||
|
||||
// Other rules mozilla/recommended hasn't enabled yet.
|
||||
"no-shadow": "error",
|
||||
"arrow-body-style": ["error", "as-needed"],
|
||||
|
@ -1,5 +0,0 @@
|
||||
This is the PDF.js project output, https://github.com/mozilla/pdf.js
|
||||
|
||||
Current extension version is: PDFJSSCRIPT_VERSION
|
||||
|
||||
Taken from upstream commit: PDFJSSCRIPT_COMMIT
|
@ -13,10 +13,6 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
var EXPORTED_SYMBOLS = ["PdfJsDefaultPreferences"];
|
||||
|
||||
var PdfJsDefaultPreferences = Object.freeze(
|
||||
export const PdfJsDefaultPreferences = Object.freeze(
|
||||
PDFJSDev.eval("DEFAULT_PREFERENCES")
|
||||
);
|
@ -1,133 +0,0 @@
|
||||
"use strict";
|
||||
|
||||
// Small subset of the webL10n API by Fabien Cazenave for PDF.js extension.
|
||||
(function (window) {
|
||||
let gL10nData = null;
|
||||
let gLanguage = "";
|
||||
let gExternalLocalizerServices = null;
|
||||
let gReadyState = "loading";
|
||||
|
||||
// fetch an l10n objects
|
||||
function getL10nData(key) {
|
||||
gL10nData ||= gExternalLocalizerServices.getStrings();
|
||||
|
||||
const data = gL10nData?.[key];
|
||||
if (!data) {
|
||||
console.warn("[l10n] #" + key + " missing for [" + gLanguage + "]");
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
// replace {{arguments}} with their values
|
||||
function substArguments(text, args) {
|
||||
if (!args) {
|
||||
return text;
|
||||
}
|
||||
return text.replace(/\{\{\s*(\w+)\s*\}\}/g, function (all, name) {
|
||||
return name in args ? args[name] : "{{" + name + "}}";
|
||||
});
|
||||
}
|
||||
|
||||
// translate a string
|
||||
function translateString(key, args, fallback) {
|
||||
var i = key.lastIndexOf(".");
|
||||
var name, property;
|
||||
if (i >= 0) {
|
||||
name = key.substring(0, i);
|
||||
property = key.substring(i + 1);
|
||||
} else {
|
||||
name = key;
|
||||
property = "textContent";
|
||||
}
|
||||
var data = getL10nData(name);
|
||||
var value = (data && data[property]) || fallback;
|
||||
if (!value) {
|
||||
return "{{" + key + "}}";
|
||||
}
|
||||
return substArguments(value, args);
|
||||
}
|
||||
|
||||
// translate an HTML element
|
||||
function translateElement(element) {
|
||||
if (!element || !element.dataset) {
|
||||
return;
|
||||
}
|
||||
|
||||
// get the related l10n object
|
||||
var key = element.dataset.l10nId;
|
||||
var data = getL10nData(key);
|
||||
if (!data) {
|
||||
return;
|
||||
}
|
||||
|
||||
// get arguments (if any)
|
||||
// TODO: more flexible parser?
|
||||
var args;
|
||||
if (element.dataset.l10nArgs) {
|
||||
try {
|
||||
args = JSON.parse(element.dataset.l10nArgs);
|
||||
} catch (e) {
|
||||
console.warn("[l10n] could not parse arguments for #" + key + "");
|
||||
}
|
||||
}
|
||||
|
||||
// translate element
|
||||
// TODO: security check?
|
||||
for (var k in data) {
|
||||
element[k] = substArguments(data[k], args);
|
||||
}
|
||||
}
|
||||
|
||||
// translate an HTML subtree
|
||||
function translateFragment(element) {
|
||||
element = element || document.querySelector("html");
|
||||
|
||||
// check all translatable children (= w/ a `data-l10n-id' attribute)
|
||||
var children = element.querySelectorAll("*[data-l10n-id]");
|
||||
var elementCount = children.length;
|
||||
for (var i = 0; i < elementCount; i++) {
|
||||
translateElement(children[i]);
|
||||
}
|
||||
|
||||
// translate element itself if necessary
|
||||
if (element.dataset.l10nId) {
|
||||
translateElement(element);
|
||||
}
|
||||
}
|
||||
|
||||
// Public API
|
||||
document.mozL10n = {
|
||||
// get a localized string
|
||||
get: translateString,
|
||||
|
||||
// get the document language
|
||||
getLanguage() {
|
||||
return gLanguage;
|
||||
},
|
||||
|
||||
// get the direction (ltr|rtl) of the current language
|
||||
getDirection() {
|
||||
// http://www.w3.org/International/questions/qa-scripts
|
||||
// Arabic, Hebrew, Farsi, Pashto, Urdu
|
||||
var rtlList = ["ar", "he", "fa", "ps", "ur"];
|
||||
|
||||
// use the short language code for "full" codes like 'ar-sa' (issue 5440)
|
||||
var shortCode = gLanguage.split("-")[0];
|
||||
|
||||
return rtlList.includes(shortCode) ? "rtl" : "ltr";
|
||||
},
|
||||
|
||||
getReadyState() {
|
||||
return gReadyState;
|
||||
},
|
||||
|
||||
setExternalLocalizerServices(externalLocalizerServices) {
|
||||
gExternalLocalizerServices = externalLocalizerServices;
|
||||
gLanguage = gExternalLocalizerServices.getLocale();
|
||||
gReadyState = "complete";
|
||||
},
|
||||
|
||||
// translate an element or document fragment
|
||||
translate: translateFragment,
|
||||
};
|
||||
})(this);
|
253
external/builder/babel-plugin-pdfjs-preprocessor.mjs
vendored
Normal file
253
external/builder/babel-plugin-pdfjs-preprocessor.mjs
vendored
Normal file
@ -0,0 +1,253 @@
|
||||
import { types as t, transformSync } from "@babel/core";
|
||||
import fs from "fs";
|
||||
import { join as joinPaths } from "path";
|
||||
import vm from "vm";
|
||||
|
||||
const PDFJS_PREPROCESSOR_NAME = "PDFJSDev";
|
||||
const ROOT_PREFIX = "$ROOT/";
|
||||
|
||||
function isPDFJSPreprocessor(obj) {
|
||||
return obj.type === "Identifier" && obj.name === PDFJS_PREPROCESSOR_NAME;
|
||||
}
|
||||
|
||||
function evalWithDefines(code, defines) {
|
||||
if (!code || !code.trim()) {
|
||||
throw new Error("No JavaScript expression given");
|
||||
}
|
||||
return vm.runInNewContext(code, defines, { displayErrors: false });
|
||||
}
|
||||
|
||||
function handlePreprocessorAction(ctx, actionName, args, path) {
|
||||
try {
|
||||
const arg = args[0];
|
||||
switch (actionName) {
|
||||
case "test":
|
||||
if (!t.isStringLiteral(arg)) {
|
||||
throw new Error("No code for testing is given");
|
||||
}
|
||||
return !!evalWithDefines(arg.value, ctx.defines);
|
||||
case "eval":
|
||||
if (!t.isStringLiteral(arg)) {
|
||||
throw new Error("No code for eval is given");
|
||||
}
|
||||
const result = evalWithDefines(arg.value, ctx.defines);
|
||||
if (
|
||||
typeof result === "boolean" ||
|
||||
typeof result === "string" ||
|
||||
typeof result === "number" ||
|
||||
typeof result === "object"
|
||||
) {
|
||||
return result;
|
||||
}
|
||||
break;
|
||||
case "json":
|
||||
if (!t.isStringLiteral(arg)) {
|
||||
throw new Error("Path to JSON is not provided");
|
||||
}
|
||||
let jsonPath = arg.value;
|
||||
if (jsonPath.startsWith(ROOT_PREFIX)) {
|
||||
jsonPath = joinPaths(
|
||||
ctx.rootPath,
|
||||
jsonPath.substring(ROOT_PREFIX.length)
|
||||
);
|
||||
}
|
||||
return JSON.parse(fs.readFileSync(jsonPath, "utf8"));
|
||||
}
|
||||
throw new Error("Unsupported action");
|
||||
} catch (e) {
|
||||
throw path.buildCodeFrameError(
|
||||
"Could not process " +
|
||||
PDFJS_PREPROCESSOR_NAME +
|
||||
"." +
|
||||
actionName +
|
||||
": " +
|
||||
e.message
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function babelPluginPDFJSPreprocessor(babel, ctx) {
|
||||
return {
|
||||
name: "babel-plugin-pdfjs-preprocessor",
|
||||
manipulateOptions({ parserOpts }) {
|
||||
parserOpts.attachComment = false;
|
||||
},
|
||||
visitor: {
|
||||
"ExportNamedDeclaration|ImportDeclaration": ({ node }) => {
|
||||
if (node.source && ctx.map?.[node.source.value]) {
|
||||
node.source.value = ctx.map[node.source.value];
|
||||
}
|
||||
},
|
||||
"IfStatement|ConditionalExpression": {
|
||||
exit(path) {
|
||||
const { node } = path;
|
||||
if (t.isBooleanLiteral(node.test)) {
|
||||
// if (true) stmt1; => stmt1
|
||||
// if (false) stmt1; else stmt2; => stmt2
|
||||
if (node.test.value === true) {
|
||||
path.replaceWith(node.consequent);
|
||||
} else if (node.alternate) {
|
||||
path.replaceWith(node.alternate);
|
||||
} else {
|
||||
path.remove(node);
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
UnaryExpression: {
|
||||
exit(path) {
|
||||
const { node } = path;
|
||||
if (
|
||||
node.operator === "typeof" &&
|
||||
isPDFJSPreprocessor(node.argument)
|
||||
) {
|
||||
// typeof PDFJSDev => 'object'
|
||||
path.replaceWith(t.stringLiteral("object"));
|
||||
return;
|
||||
}
|
||||
if (node.operator === "!" && t.isBooleanLiteral(node.argument)) {
|
||||
// !true => false, !false => true
|
||||
path.replaceWith(t.booleanLiteral(!node.argument.value));
|
||||
}
|
||||
},
|
||||
},
|
||||
LogicalExpression: {
|
||||
exit(path) {
|
||||
const { node } = path;
|
||||
if (!t.isBooleanLiteral(node.left)) {
|
||||
return;
|
||||
}
|
||||
|
||||
switch (node.operator) {
|
||||
case "&&":
|
||||
// true && expr => expr
|
||||
// false && expr => false
|
||||
path.replaceWith(
|
||||
node.left.value === true ? node.right : node.left
|
||||
);
|
||||
break;
|
||||
case "||":
|
||||
// true || expr => true
|
||||
// false || expr => expr
|
||||
path.replaceWith(
|
||||
node.left.value === true ? node.left : node.right
|
||||
);
|
||||
break;
|
||||
}
|
||||
},
|
||||
},
|
||||
BinaryExpression: {
|
||||
exit(path) {
|
||||
const { node } = path;
|
||||
switch (node.operator) {
|
||||
case "==":
|
||||
case "===":
|
||||
case "!=":
|
||||
case "!==":
|
||||
if (t.isLiteral(node.left) && t.isLiteral(node.right)) {
|
||||
// folding == and != check that can be statically evaluated
|
||||
const { confident, value } = path.evaluate();
|
||||
if (confident) {
|
||||
path.replaceWith(t.booleanLiteral(value));
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
CallExpression(path) {
|
||||
const { node } = path;
|
||||
if (
|
||||
t.isMemberExpression(node.callee) &&
|
||||
isPDFJSPreprocessor(node.callee.object) &&
|
||||
t.isIdentifier(node.callee.property) &&
|
||||
!node.callee.computed
|
||||
) {
|
||||
// PDFJSDev.xxxx(arg1, arg2, ...) => transform
|
||||
const action = node.callee.property.name;
|
||||
const result = handlePreprocessorAction(
|
||||
ctx,
|
||||
action,
|
||||
node.arguments,
|
||||
path
|
||||
);
|
||||
path.replaceWith(t.inherits(t.valueToNode(result), path.node));
|
||||
}
|
||||
|
||||
if (t.isIdentifier(node.callee, { name: "__non_webpack_import__" })) {
|
||||
if (node.arguments.length !== 1) {
|
||||
throw new Error("Invalid `__non_webpack_import__` usage.");
|
||||
}
|
||||
// Replace it with a standard `import`-call and
|
||||
// ensure that Webpack will leave it alone.
|
||||
const source = node.arguments[0];
|
||||
source.leadingComments = [
|
||||
{
|
||||
type: "CommentBlock",
|
||||
value: "webpackIgnore: true",
|
||||
},
|
||||
];
|
||||
path.replaceWith(t.importExpression(source));
|
||||
}
|
||||
},
|
||||
BlockStatement: {
|
||||
// Visit node in post-order so that recursive flattening
|
||||
// of blocks works correctly.
|
||||
exit(path) {
|
||||
const { node } = path;
|
||||
|
||||
let subExpressionIndex = 0;
|
||||
while (subExpressionIndex < node.body.length) {
|
||||
switch (node.body[subExpressionIndex].type) {
|
||||
case "EmptyStatement":
|
||||
// Removing empty statements from the blocks.
|
||||
node.body.splice(subExpressionIndex, 1);
|
||||
continue;
|
||||
case "BlockStatement":
|
||||
// Block statements inside a block are flattened
|
||||
// into the parent one.
|
||||
const subChildren = node.body[subExpressionIndex].body;
|
||||
node.body.splice(subExpressionIndex, 1, ...subChildren);
|
||||
subExpressionIndex += Math.max(subChildren.length - 1, 0);
|
||||
continue;
|
||||
case "ReturnStatement":
|
||||
case "ThrowStatement":
|
||||
// Removing dead code after return or throw.
|
||||
node.body.splice(
|
||||
subExpressionIndex + 1,
|
||||
node.body.length - subExpressionIndex - 1
|
||||
);
|
||||
break;
|
||||
}
|
||||
subExpressionIndex++;
|
||||
}
|
||||
},
|
||||
},
|
||||
Function: {
|
||||
exit(path) {
|
||||
if (!t.isBlockStatement(path.node.body)) {
|
||||
// Arrow function with expression body
|
||||
return;
|
||||
}
|
||||
|
||||
const { body } = path.node.body;
|
||||
if (
|
||||
body.length > 0 &&
|
||||
t.isReturnStatement(body.at(-1), { argument: null })
|
||||
) {
|
||||
// Function body ends with return without arg -- removing it.
|
||||
body.pop();
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
function preprocessPDFJSCode(ctx, content) {
|
||||
return transformSync(content, {
|
||||
configFile: false,
|
||||
plugins: [[babelPluginPDFJSPreprocessor, ctx]],
|
||||
}).code;
|
||||
}
|
||||
|
||||
export { babelPluginPDFJSPreprocessor, preprocessPDFJSCode };
|
@ -1,8 +1,6 @@
|
||||
"use strict";
|
||||
|
||||
const fs = require("fs"),
|
||||
path = require("path"),
|
||||
vm = require("vm");
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
import vm from "vm";
|
||||
|
||||
const AllWhitespaceRegexp = /^\s+$/g;
|
||||
|
||||
@ -41,9 +39,15 @@ function preprocess(inFilename, outFilename, defines) {
|
||||
}
|
||||
|
||||
function expandCssImports(content, baseUrl) {
|
||||
return content.replace(
|
||||
return content.replaceAll(
|
||||
/^\s*@import\s+url\(([^)]+)\);\s*$/gm,
|
||||
function (all, url) {
|
||||
if (defines.GECKOVIEW) {
|
||||
switch (url) {
|
||||
case "annotation_editor_layer_builder.css":
|
||||
return "";
|
||||
}
|
||||
}
|
||||
const file = path.join(path.dirname(baseUrl), url);
|
||||
const imported = fs.readFileSync(file, "utf8").toString();
|
||||
return expandCssImports(imported, file);
|
||||
@ -72,7 +76,7 @@ function preprocess(inFilename, outFilename, defines) {
|
||||
? outFilename
|
||||
: function (line) {
|
||||
if (!line || AllWhitespaceRegexp.test(line)) {
|
||||
const prevLine = out[out.length - 1];
|
||||
const prevLine = out.at(-1);
|
||||
if (!prevLine || AllWhitespaceRegexp.test(prevLine)) {
|
||||
return; // Avoid adding consecutive blank lines.
|
||||
}
|
||||
@ -121,7 +125,7 @@ function preprocess(inFilename, outFilename, defines) {
|
||||
}
|
||||
}
|
||||
function expand(line) {
|
||||
line = line.replace(/__[\w]+__/g, function (variable) {
|
||||
line = line.replaceAll(/__[\w]+__/g, function (variable) {
|
||||
variable = variable.substring(2, variable.length - 2);
|
||||
if (variable in defines) {
|
||||
return defines[variable];
|
||||
@ -200,16 +204,19 @@ function preprocess(inFilename, outFilename, defines) {
|
||||
}
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
if (state === STATE_NONE) {
|
||||
} else if (state === STATE_NONE) {
|
||||
writeLine(line);
|
||||
} else if (
|
||||
(state === STATE_IF_TRUE || state === STATE_ELSE_TRUE) &&
|
||||
!stack.includes(STATE_IF_FALSE) &&
|
||||
!stack.includes(STATE_ELSE_FALSE)
|
||||
) {
|
||||
writeLine(line.replace(/^\/\/|^<!--/g, " ").replace(/-->$/g, ""));
|
||||
}
|
||||
writeLine(
|
||||
line
|
||||
.replaceAll(/^\/\/|^<!--/g, " ")
|
||||
.replaceAll(/(^\s*)\/\*/g, "$1 ")
|
||||
.replaceAll(/\*\/$|-->$/g, "")
|
||||
);
|
||||
}
|
||||
}
|
||||
if (state !== STATE_NONE || stack.length !== 0) {
|
||||
@ -221,20 +228,5 @@ function preprocess(inFilename, outFilename, defines) {
|
||||
fs.writeFileSync(outFilename, out.join("\n"));
|
||||
}
|
||||
}
|
||||
exports.preprocess = preprocess;
|
||||
|
||||
/**
|
||||
* Merge two defines arrays. Values in the second param will override values in
|
||||
* the first.
|
||||
*/
|
||||
function merge(defaults, defines) {
|
||||
const ret = Object.create(null);
|
||||
for (const key in defaults) {
|
||||
ret[key] = defaults[key];
|
||||
}
|
||||
for (const key in defines) {
|
||||
ret[key] = defines[key];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
exports.merge = merge;
|
||||
export { preprocess };
|
5
external/builder/fixtures/css-comment-expected.css
vendored
Normal file
5
external/builder/fixtures/css-comment-expected.css
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
/* Comment here... */
|
||||
div {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
7
external/builder/fixtures/css-comment.css
vendored
Normal file
7
external/builder/fixtures/css-comment.css
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
/* Comment here... */
|
||||
/*#if TRUE*/
|
||||
/*div {*/
|
||||
/* margin: 0;*/
|
||||
/*padding: 0;*/
|
||||
/*}*/
|
||||
/*#endif*/
|
@ -10,6 +10,6 @@ var i = true;
|
||||
var j = false;
|
||||
var k = false;
|
||||
var l = true;
|
||||
var m = '1' === true;
|
||||
var m = false;
|
||||
var n = false;
|
||||
var o = true;
|
||||
|
@ -1,5 +1,4 @@
|
||||
function f1() {
|
||||
}
|
||||
function f1() {}
|
||||
function f2() {
|
||||
return 1;
|
||||
}
|
||||
@ -10,4 +9,13 @@ function f3() {
|
||||
function f4() {
|
||||
var i = 0;
|
||||
}
|
||||
|
||||
var obj = {
|
||||
method1() {},
|
||||
method2() {}
|
||||
};
|
||||
class C {
|
||||
method1() {}
|
||||
method2() {}
|
||||
}
|
||||
var arrow1 = () => {};
|
||||
var arrow2 = () => {};
|
||||
|
12
external/builder/fixtures_esprima/deadcode.js
vendored
12
external/builder/fixtures_esprima/deadcode.js
vendored
@ -23,3 +23,15 @@ function f4() {
|
||||
var j = 0;
|
||||
}
|
||||
|
||||
var obj = {
|
||||
method1() { return; var i = 0; },
|
||||
method2() { return; },
|
||||
};
|
||||
|
||||
class C {
|
||||
method1() { return; var i = 0; }
|
||||
method2() { return; }
|
||||
}
|
||||
|
||||
var arrow1 = () => { return; var i = 0; };
|
||||
var arrow2 = () => { return; };
|
||||
|
@ -3,11 +3,19 @@ var b = true;
|
||||
var c = true;
|
||||
var d = false;
|
||||
var e = true;
|
||||
var f = 'text';
|
||||
var f = "text";
|
||||
var g = {
|
||||
"obj": { "i": 1 },
|
||||
"j": 2
|
||||
obj: {
|
||||
i: 1
|
||||
},
|
||||
j: 2
|
||||
};
|
||||
var h = {
|
||||
test: "test"
|
||||
};
|
||||
var h = { 'test': 'test' };
|
||||
var i = '0';
|
||||
var j = { "i": 1 };
|
||||
var j = {
|
||||
i: 1
|
||||
};
|
||||
var k = false;
|
||||
var l = true;
|
||||
|
2
external/builder/fixtures_esprima/evals.js
vendored
2
external/builder/fixtures_esprima/evals.js
vendored
@ -8,3 +8,5 @@ var g = PDFJSDev.eval('OBJ');
|
||||
var h = PDFJSDev.json('$ROOT/external/builder/fixtures_esprima/evals.json');
|
||||
var i = typeof PDFJSDev === 'undefined' ? PDFJSDev.eval('FALSE') : '0';
|
||||
var j = typeof PDFJSDev !== 'undefined' ? PDFJSDev.eval('OBJ.obj') : '0';
|
||||
var k = !PDFJSDev.test('TRUE');
|
||||
var l = !PDFJSDev.test('FALSE');
|
||||
|
2
external/builder/fixtures_esprima/evals.json
vendored
2
external/builder/fixtures_esprima/evals.json
vendored
@ -1 +1 @@
|
||||
{ 'test': 'test' }
|
||||
{ "test": "test" }
|
@ -7,11 +7,12 @@ if ('test') {
|
||||
{
|
||||
"1";
|
||||
}
|
||||
;
|
||||
{
|
||||
"2";
|
||||
}
|
||||
;
|
||||
if ('1') {
|
||||
"1";
|
||||
}
|
||||
function f1() {
|
||||
"1";
|
||||
}
|
||||
|
9
external/builder/fixtures_esprima/ifs.js
vendored
9
external/builder/fixtures_esprima/ifs.js
vendored
@ -23,3 +23,12 @@ if (true && false) {
|
||||
if (true && false || '1') {
|
||||
"1";
|
||||
}
|
||||
|
||||
function f1() {
|
||||
if (true) {
|
||||
"1";
|
||||
}
|
||||
if (false) {
|
||||
"2";
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,4 @@
|
||||
import { Test } from 'import-name';
|
||||
import { Test } from "import-name";
|
||||
import { Test2 } from './non-alias';
|
||||
export {
|
||||
Test3
|
||||
} from 'import-name';
|
||||
var Imp = require('import-name');
|
||||
var Imp2 = require('./non-alias');
|
||||
export { Test3 } from "import-name";
|
||||
await import( /*webpackIgnore: true*/"./non-alias");
|
||||
|
@ -1,5 +1,4 @@
|
||||
import { Test } from 'import-alias';
|
||||
import { Test2 } from './non-alias';
|
||||
export { Test3 } from 'import-alias';
|
||||
var Imp = require('import-alias');
|
||||
var Imp2 = require('./non-alias');
|
||||
await __non_webpack_import__("./non-alias");
|
||||
|
348
external/builder/preprocessor2.js
vendored
348
external/builder/preprocessor2.js
vendored
@ -1,348 +0,0 @@
|
||||
"use strict";
|
||||
|
||||
const acorn = require("acorn");
|
||||
const escodegen = require("@javascript-obfuscator/escodegen");
|
||||
const vm = require("vm");
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
|
||||
const PDFJS_PREPROCESSOR_NAME = "PDFJSDev";
|
||||
const ROOT_PREFIX = "$ROOT/";
|
||||
const ACORN_ECMA_VERSION = 2022;
|
||||
|
||||
function isLiteral(obj, value) {
|
||||
return obj.type === "Literal" && obj.value === value;
|
||||
}
|
||||
|
||||
function isPDFJSPreprocessor(obj) {
|
||||
return obj.type === "Identifier" && obj.name === PDFJS_PREPROCESSOR_NAME;
|
||||
}
|
||||
|
||||
function evalWithDefines(code, defines, loc) {
|
||||
if (!code || !code.trim()) {
|
||||
throw new Error("No JavaScript expression given");
|
||||
}
|
||||
return vm.runInNewContext(code, defines, { displayErrors: false });
|
||||
}
|
||||
|
||||
function handlePreprocessorAction(ctx, actionName, args, loc) {
|
||||
try {
|
||||
let arg;
|
||||
switch (actionName) {
|
||||
case "test":
|
||||
arg = args[0];
|
||||
if (!arg || arg.type !== "Literal" || typeof arg.value !== "string") {
|
||||
throw new Error("No code for testing is given");
|
||||
}
|
||||
const isTrue = !!evalWithDefines(arg.value, ctx.defines);
|
||||
return { type: "Literal", value: isTrue, loc };
|
||||
case "eval":
|
||||
arg = args[0];
|
||||
if (!arg || arg.type !== "Literal" || typeof arg.value !== "string") {
|
||||
throw new Error("No code for eval is given");
|
||||
}
|
||||
const result = evalWithDefines(arg.value, ctx.defines);
|
||||
if (
|
||||
typeof result === "boolean" ||
|
||||
typeof result === "string" ||
|
||||
typeof result === "number"
|
||||
) {
|
||||
return { type: "Literal", value: result, loc };
|
||||
}
|
||||
if (typeof result === "object") {
|
||||
const parsedObj = acorn.parse("(" + JSON.stringify(result) + ")", {
|
||||
ecmaVersion: ACORN_ECMA_VERSION,
|
||||
});
|
||||
parsedObj.body[0].expression.loc = loc;
|
||||
return parsedObj.body[0].expression;
|
||||
}
|
||||
break;
|
||||
case "json":
|
||||
arg = args[0];
|
||||
if (!arg || arg.type !== "Literal" || typeof arg.value !== "string") {
|
||||
throw new Error("Path to JSON is not provided");
|
||||
}
|
||||
let jsonPath = arg.value;
|
||||
if (jsonPath.indexOf(ROOT_PREFIX) === 0) {
|
||||
jsonPath = path.join(
|
||||
ctx.rootPath,
|
||||
jsonPath.substring(ROOT_PREFIX.length)
|
||||
);
|
||||
}
|
||||
const jsonContent = fs.readFileSync(jsonPath).toString();
|
||||
const parsedJSON = acorn.parse("(" + jsonContent + ")", {
|
||||
ecmaVersion: ACORN_ECMA_VERSION,
|
||||
});
|
||||
parsedJSON.body[0].expression.loc = loc;
|
||||
return parsedJSON.body[0].expression;
|
||||
}
|
||||
throw new Error("Unsupported action");
|
||||
} catch (e) {
|
||||
throw new Error(
|
||||
"Could not process " +
|
||||
PDFJS_PREPROCESSOR_NAME +
|
||||
"." +
|
||||
actionName +
|
||||
" at " +
|
||||
JSON.stringify(loc) +
|
||||
"\n" +
|
||||
e.name +
|
||||
": " +
|
||||
e.message
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function postprocessNode(ctx, node) {
|
||||
switch (node.type) {
|
||||
case "ExportNamedDeclaration":
|
||||
case "ImportDeclaration":
|
||||
if (
|
||||
node.source &&
|
||||
node.source.type === "Literal" &&
|
||||
ctx.map &&
|
||||
ctx.map[node.source.value]
|
||||
) {
|
||||
const newValue = ctx.map[node.source.value];
|
||||
node.source.value = node.source.raw = newValue;
|
||||
}
|
||||
break;
|
||||
case "IfStatement":
|
||||
if (isLiteral(node.test, true)) {
|
||||
// if (true) stmt1; => stmt1
|
||||
return node.consequent;
|
||||
} else if (isLiteral(node.test, false)) {
|
||||
// if (false) stmt1; else stmt2; => stmt2
|
||||
return node.alternate || { type: "EmptyStatement", loc: node.loc };
|
||||
}
|
||||
break;
|
||||
case "ConditionalExpression":
|
||||
if (isLiteral(node.test, true)) {
|
||||
// true ? stmt1 : stmt2 => stmt1
|
||||
return node.consequent;
|
||||
} else if (isLiteral(node.test, false)) {
|
||||
// false ? stmt1 : stmt2 => stmt2
|
||||
return node.alternate;
|
||||
}
|
||||
break;
|
||||
case "UnaryExpression":
|
||||
if (node.operator === "typeof" && isPDFJSPreprocessor(node.argument)) {
|
||||
// typeof PDFJSDev => 'object'
|
||||
return { type: "Literal", value: "object", loc: node.loc };
|
||||
}
|
||||
if (
|
||||
node.operator === "!" &&
|
||||
node.argument.type === "Literal" &&
|
||||
typeof node.argument.value === "boolean"
|
||||
) {
|
||||
// !true => false, !false => true
|
||||
return { type: "Literal", value: !node.argument.value, loc: node.loc };
|
||||
}
|
||||
break;
|
||||
case "LogicalExpression":
|
||||
switch (node.operator) {
|
||||
case "&&":
|
||||
if (isLiteral(node.left, true)) {
|
||||
return node.right;
|
||||
}
|
||||
if (isLiteral(node.left, false)) {
|
||||
return node.left;
|
||||
}
|
||||
break;
|
||||
case "||":
|
||||
if (isLiteral(node.left, true)) {
|
||||
return node.left;
|
||||
}
|
||||
if (isLiteral(node.left, false)) {
|
||||
return node.right;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case "BinaryExpression":
|
||||
switch (node.operator) {
|
||||
case "==":
|
||||
case "===":
|
||||
case "!=":
|
||||
case "!==":
|
||||
if (
|
||||
node.left.type === "Literal" &&
|
||||
node.right.type === "Literal" &&
|
||||
typeof node.left.value === typeof node.right.value
|
||||
) {
|
||||
// folding two literals == and != check
|
||||
switch (typeof node.left.value) {
|
||||
case "string":
|
||||
case "boolean":
|
||||
case "number":
|
||||
const equal = node.left.value === node.right.value;
|
||||
return {
|
||||
type: "Literal",
|
||||
value: (node.operator[0] === "=") === equal,
|
||||
loc: node.loc,
|
||||
};
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case "CallExpression":
|
||||
if (
|
||||
node.callee.type === "MemberExpression" &&
|
||||
isPDFJSPreprocessor(node.callee.object) &&
|
||||
node.callee.property.type === "Identifier"
|
||||
) {
|
||||
// PDFJSDev.xxxx(arg1, arg2, ...) => transform
|
||||
const action = node.callee.property.name;
|
||||
return handlePreprocessorAction(ctx, action, node.arguments, node.loc);
|
||||
}
|
||||
// require('string')
|
||||
if (
|
||||
node.callee.type === "Identifier" &&
|
||||
node.callee.name === "require" &&
|
||||
node.arguments.length === 1 &&
|
||||
node.arguments[0].type === "Literal" &&
|
||||
ctx.map &&
|
||||
ctx.map[node.arguments[0].value]
|
||||
) {
|
||||
const requireName = node.arguments[0];
|
||||
requireName.value = requireName.raw = ctx.map[requireName.value];
|
||||
}
|
||||
break;
|
||||
case "BlockStatement":
|
||||
let subExpressionIndex = 0;
|
||||
while (subExpressionIndex < node.body.length) {
|
||||
switch (node.body[subExpressionIndex].type) {
|
||||
case "EmptyStatement":
|
||||
// Removing empty statements from the blocks.
|
||||
node.body.splice(subExpressionIndex, 1);
|
||||
continue;
|
||||
case "BlockStatement":
|
||||
// Block statements inside a block are moved to the parent one.
|
||||
const subChildren = node.body[subExpressionIndex].body;
|
||||
Array.prototype.splice.apply(
|
||||
node.body,
|
||||
[subExpressionIndex, 1].concat(subChildren)
|
||||
);
|
||||
subExpressionIndex += Math.max(subChildren.length - 1, 0);
|
||||
continue;
|
||||
case "ReturnStatement":
|
||||
case "ThrowStatement":
|
||||
// Removing dead code after return or throw.
|
||||
node.body.splice(
|
||||
subExpressionIndex + 1,
|
||||
node.body.length - subExpressionIndex - 1
|
||||
);
|
||||
break;
|
||||
}
|
||||
subExpressionIndex++;
|
||||
}
|
||||
break;
|
||||
case "FunctionDeclaration":
|
||||
case "FunctionExpression":
|
||||
const block = node.body;
|
||||
if (
|
||||
block.body.length > 0 &&
|
||||
block.body[block.body.length - 1].type === "ReturnStatement" &&
|
||||
!block.body[block.body.length - 1].argument
|
||||
) {
|
||||
// Function body ends with return without arg -- removing it.
|
||||
block.body.pop();
|
||||
}
|
||||
break;
|
||||
}
|
||||
return node;
|
||||
}
|
||||
|
||||
function fixComments(ctx, node) {
|
||||
if (!ctx.saveComments) {
|
||||
return;
|
||||
}
|
||||
// Fixes double comments in the escodegen output.
|
||||
delete node.trailingComments;
|
||||
// Removes ESLint and other service comments.
|
||||
if (node.leadingComments) {
|
||||
const CopyrightRegExp = /\bcopyright\b/i;
|
||||
const BlockCommentRegExp = /^\s*(globals|eslint|falls through)\b/;
|
||||
const LineCommentRegExp = /^\s*eslint\b/;
|
||||
|
||||
let i = 0;
|
||||
while (i < node.leadingComments.length) {
|
||||
const type = node.leadingComments[i].type;
|
||||
const value = node.leadingComments[i].value;
|
||||
|
||||
if (ctx.saveComments === "copyright") {
|
||||
// Remove all comments, except Copyright notices and License headers.
|
||||
if (!(type === "Block" && CopyrightRegExp.test(value))) {
|
||||
node.leadingComments.splice(i, 1);
|
||||
continue;
|
||||
}
|
||||
} else if (
|
||||
(type === "Block" && BlockCommentRegExp.test(value)) ||
|
||||
(type === "Line" && LineCommentRegExp.test(value))
|
||||
) {
|
||||
node.leadingComments.splice(i, 1);
|
||||
continue;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function traverseTree(ctx, node) {
|
||||
// generic node processing
|
||||
for (const i in node) {
|
||||
const child = node[i];
|
||||
if (typeof child === "object" && child !== null && child.type) {
|
||||
const result = traverseTree(ctx, child);
|
||||
if (result !== child) {
|
||||
node[i] = result;
|
||||
}
|
||||
} else if (Array.isArray(child)) {
|
||||
child.forEach(function (childItem, index) {
|
||||
if (
|
||||
typeof childItem === "object" &&
|
||||
childItem !== null &&
|
||||
childItem.type
|
||||
) {
|
||||
const result = traverseTree(ctx, childItem);
|
||||
if (result !== childItem) {
|
||||
child[index] = result;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
node = postprocessNode(ctx, node) || node;
|
||||
|
||||
fixComments(ctx, node);
|
||||
return node;
|
||||
}
|
||||
|
||||
function preprocessPDFJSCode(ctx, code) {
|
||||
const format = ctx.format || {
|
||||
indent: {
|
||||
style: " ",
|
||||
},
|
||||
};
|
||||
const parseOptions = {
|
||||
ecmaVersion: ACORN_ECMA_VERSION,
|
||||
locations: true,
|
||||
sourceFile: ctx.sourceFile,
|
||||
sourceType: "module",
|
||||
};
|
||||
const codegenOptions = {
|
||||
format,
|
||||
parse(input) {
|
||||
return acorn.parse(input, { ecmaVersion: ACORN_ECMA_VERSION });
|
||||
},
|
||||
sourceMap: ctx.sourceMap,
|
||||
sourceMapWithCode: ctx.sourceMap,
|
||||
};
|
||||
const syntax = acorn.parse(code, parseOptions);
|
||||
traverseTree(ctx, syntax);
|
||||
return escodegen.generate(syntax, codegenOptions);
|
||||
}
|
||||
|
||||
exports.preprocessPDFJSCode = preprocessPDFJSCode;
|
@ -1,8 +1,9 @@
|
||||
"use strict";
|
||||
import * as builder from "./builder.mjs";
|
||||
import { fileURLToPath } from "url";
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
|
||||
const builder = require("./builder.js");
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
|
||||
let errors = 0;
|
||||
|
||||
@ -21,7 +22,7 @@ files.forEach(function (expectationFilename) {
|
||||
.readFileSync(expectationFilename)
|
||||
.toString()
|
||||
.trim()
|
||||
.replace(/__filename/g, fs.realpathSync(inFilename));
|
||||
.replaceAll("__filename", fs.realpathSync(inFilename));
|
||||
const outLines = [];
|
||||
|
||||
const outFilename = function (line) {
|
||||
@ -36,11 +37,17 @@ files.forEach(function (expectationFilename) {
|
||||
builder.preprocess(inFilename, outFilename, defines);
|
||||
out = outLines.join("\n").trim();
|
||||
} catch (e) {
|
||||
out = ("Error: " + e.message).replace(/^/gm, "//");
|
||||
out = ("Error: " + e.message).replaceAll(/^/gm, "//");
|
||||
}
|
||||
if (out !== expectation) {
|
||||
errors++;
|
||||
|
||||
// Allow regenerating the expected output using
|
||||
// OVERWRITE=true node ./external/builder/test-fixtures.mjs
|
||||
if (process.env.OVERWRITE) {
|
||||
fs.writeFileSync(expectationFilename, out + "\n");
|
||||
}
|
||||
|
||||
console.log("Assertion failed for " + inFilename);
|
||||
console.log("--------------------------------------------------");
|
||||
console.log("EXPECTED:");
|
@ -1,8 +1,9 @@
|
||||
"use strict";
|
||||
import { fileURLToPath } from "url";
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
import { preprocessPDFJSCode } from "./babel-plugin-pdfjs-preprocessor.mjs";
|
||||
|
||||
const p2 = require("./preprocessor2.js");
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
|
||||
let errors = 0;
|
||||
|
||||
@ -21,7 +22,7 @@ files.forEach(function (expectationFilename) {
|
||||
.readFileSync(expectationFilename)
|
||||
.toString()
|
||||
.trim()
|
||||
.replace(/__filename/g, fs.realpathSync(inFilename));
|
||||
.replaceAll("__filename", fs.realpathSync(inFilename));
|
||||
const input = fs.readFileSync(inFilename).toString();
|
||||
|
||||
const defines = {
|
||||
@ -40,13 +41,19 @@ files.forEach(function (expectationFilename) {
|
||||
};
|
||||
let out;
|
||||
try {
|
||||
out = p2.preprocessPDFJSCode(ctx, input);
|
||||
out = preprocessPDFJSCode(ctx, input);
|
||||
} catch (e) {
|
||||
out = ("Error: " + e.message).replace(/^/gm, "//");
|
||||
out = ("Error: " + e.message).replaceAll(/^/gm, "//");
|
||||
}
|
||||
if (out !== expectation) {
|
||||
errors++;
|
||||
|
||||
// Allow regenerating the expected output using
|
||||
// OVERWRITE=true node ./external/builder/test-fixtures_esprima.mjs
|
||||
if (process.env.OVERWRITE) {
|
||||
fs.writeFileSync(expectationFilename, out + "\n");
|
||||
}
|
||||
|
||||
console.log("Assertion failed for " + inFilename);
|
||||
console.log("--------------------------------------------------");
|
||||
console.log("EXPECTED:");
|
@ -13,10 +13,10 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
const parseAdobeCMap = require("./parse.js").parseAdobeCMap;
|
||||
const optimizeCMap = require("./optimize.js").optimizeCMap;
|
||||
import fs from "fs";
|
||||
import { optimizeCMap } from "./optimize.mjs";
|
||||
import { parseAdobeCMap } from "./parse.mjs";
|
||||
import path from "path";
|
||||
|
||||
function compressCmap(srcPath, destPath, verify) {
|
||||
const content = fs.readFileSync(srcPath).toString();
|
||||
@ -215,11 +215,11 @@ function parseCMap(binaryData) {
|
||||
},
|
||||
readHexSigned(size) {
|
||||
const num = this.readHexNumber(size);
|
||||
const sign = fromHexDigit(num[num.length - 1]) & 1 ? 15 : 0;
|
||||
const sign = fromHexDigit(num.at(-1)) & 1 ? 15 : 0;
|
||||
let c = 0;
|
||||
let result = "";
|
||||
for (let i = 0; i < num.length; i++) {
|
||||
c = (c << 4) | fromHexDigit(num[i]);
|
||||
for (const digit of num) {
|
||||
c = (c << 4) | fromHexDigit(digit);
|
||||
result += toHexDigit(sign ? (c >> 1) ^ sign : c >> 1);
|
||||
c &= 1;
|
||||
}
|
||||
@ -469,7 +469,7 @@ function incHex(a) {
|
||||
return s;
|
||||
}
|
||||
|
||||
exports.compressCmaps = function (src, dest, verify) {
|
||||
function compressCmaps(src, dest, verify) {
|
||||
const files = fs.readdirSync(src).filter(function (fn) {
|
||||
return !fn.includes("."); // skipping files with the extension
|
||||
});
|
||||
@ -489,4 +489,6 @@ exports.compressCmaps = function (src, dest, verify) {
|
||||
"%"
|
||||
);
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
export { compressCmaps };
|
@ -13,7 +13,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
exports.optimizeCMap = function (data) {
|
||||
function optimizeCMap(data) {
|
||||
let i = 1;
|
||||
while (i < data.body.length) {
|
||||
if (data.body[i - 1].type === data.body[i].type) {
|
||||
@ -151,10 +151,7 @@ exports.optimizeCMap = function (data) {
|
||||
const maxDistance = 100,
|
||||
minItems = 10,
|
||||
itemsPerBucket = 50;
|
||||
if (
|
||||
subitems.length > minItems &&
|
||||
codes[codes.length - 1] - codes[0] > maxDistance
|
||||
) {
|
||||
if (subitems.length > minItems && codes.at(-1) - codes[0] > maxDistance) {
|
||||
const gapsCount = Math.max(2, (subitems.length / itemsPerBucket) | 0);
|
||||
const gaps = [];
|
||||
for (let q = 0; q < gapsCount; q++) {
|
||||
@ -196,20 +193,20 @@ exports.optimizeCMap = function (data) {
|
||||
i++;
|
||||
data.body.splice(i, 0, newItem);
|
||||
}
|
||||
for (let j = 0; j < subitems.length; j++) {
|
||||
const code = subitems[j].code;
|
||||
for (const subitem of subitems) {
|
||||
const { code } = subitem;
|
||||
let q = 0;
|
||||
while (q < groups.length && groups[q] <= code) {
|
||||
q++;
|
||||
}
|
||||
buckets[q].push(subitems[j]);
|
||||
buckets[q].push(subitem);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function incHex(a) {
|
||||
let c = 1,
|
||||
@ -226,3 +223,5 @@ function incHex(a) {
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
export { optimizeCMap };
|
@ -13,13 +13,13 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
exports.parseAdobeCMap = function (content) {
|
||||
function parseAdobeCMap(content) {
|
||||
let m = /(\bbegincmap\b[\s\S]*?)\bendcmap\b/.exec(content);
|
||||
if (!m) {
|
||||
throw new Error("cmap was not found");
|
||||
}
|
||||
|
||||
const body = m[1].replace(/\r\n?/g, "\n");
|
||||
const body = m[1].replaceAll(/\r\n?/g, "\n");
|
||||
const result = {
|
||||
type: 1,
|
||||
wmode: 0,
|
||||
@ -100,4 +100,6 @@ exports.parseAdobeCMap = function (content) {
|
||||
}
|
||||
|
||||
return result;
|
||||
};
|
||||
}
|
||||
|
||||
export { parseAdobeCMap };
|
6
external/dist/README.md
vendored
6
external/dist/README.md
vendored
@ -7,8 +7,8 @@ parsing and rendering PDFs.
|
||||
This is a pre-built version of the PDF.js source code. It is automatically
|
||||
generated by the build scripts.
|
||||
|
||||
For usage with older browsers or environments, without support for modern
|
||||
features such as `async`/`await`, optional chaining, nullish coalescing,
|
||||
and private `class` fields/methods; please see the `legacy/` folder.
|
||||
For usage with older browsers/environments, without native support for the
|
||||
latest JavaScript features, please see the `legacy/` folder.
|
||||
Please see [this wiki page](https://github.com/mozilla/pdf.js/wiki/Frequently-Asked-Questions#faq-support) for information about supported browsers/environments.
|
||||
|
||||
See https://github.com/mozilla/pdf.js for learning and contributing.
|
||||
|
1
external/dist/legacy/web/pdf_viewer.d.mts
vendored
Normal file
1
external/dist/legacy/web/pdf_viewer.d.mts
vendored
Normal file
@ -0,0 +1 @@
|
||||
export * from "../../types/web/pdf_viewer.component.js";
|
1
external/dist/legacy/web/pdf_viewer.d.ts
vendored
1
external/dist/legacy/web/pdf_viewer.d.ts
vendored
@ -1 +0,0 @@
|
||||
export * from "../../types/web/pdf_viewer.component";
|
7
external/dist/lib/README.md
vendored
7
external/dist/lib/README.md
vendored
@ -1,7 +0,0 @@
|
||||
It's *very highly* recommended to *not* use these files, but rather use the
|
||||
pre-built library as found in e.g. the `/build`, `/web`, and `/image_decoders`
|
||||
folders in the root of this repository.
|
||||
|
||||
Please note that the "lib" build target exists mostly to enable unit-testing in
|
||||
Node.js/GitHub, and that you'll need to handle e.g. any necessary polyfills
|
||||
and/or Node.js dependencies yourself if using the files in this folder.
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user