From 8575de0514c859b795bd3ca7d776147c7d8e6e82 Mon Sep 17 00:00:00 2001 From: Kumar Ochani Date: Wed, 26 Feb 2020 11:07:09 +0000 Subject: [PATCH 01/17] changes related to pdf printing --- .gitignore | 2 +- package-lock.json | 447 +++++------ .../uv-av-extension/dependencies.js | 18 +- src/extensions/uv-pdf-extension/Events.ts | 1 + src/extensions/uv-pdf-extension/Extension.ts | 123 ++- .../uv-pdf-extension/config/en-GB.json | 3 +- .../uv-pdf-extension/l10n/cy-GB.json | 6 + .../uv-pdf-extension/l10n/en-GB.json | 10 + .../uv-pdf-extension/l10n/fr-FR.json | 5 + .../uv-pdf-extension/l10n/sv-SE.json | 5 + .../PDFCenterPanel.ts | 2 +- .../uv-pdffooterpanel-module/FooterPanel.ts | 741 ++++++++++++++++++ .../uv-pdffooterpanel-module/css/styles.less | 293 +++++++ .../uv-pdffooterpanel-module/img/next.png | Bin 0 -> 1067 bytes .../img/placemarker_down.png | Bin 0 -> 1214 bytes .../img/placemarker_down_hover.png | Bin 0 -> 1255 bytes .../img/placemarker_up.png | Bin 0 -> 1250 bytes .../uv-pdffooterpanel-module/img/prev.png | Bin 0 -> 1070 bytes .../uv-pdffooterpanel-module/img/search.png | Bin 0 -> 380 bytes .../uv-pdffooterpanel-module/img/spinner.gif | Bin 0 -> 1737 bytes .../FooterPanel.ts | 1 + src/uv.html | 3 +- 22 files changed, 1433 insertions(+), 227 deletions(-) create mode 100644 src/modules/uv-pdffooterpanel-module/FooterPanel.ts create mode 100644 src/modules/uv-pdffooterpanel-module/css/styles.less create mode 100644 src/modules/uv-pdffooterpanel-module/img/next.png create mode 100644 src/modules/uv-pdffooterpanel-module/img/placemarker_down.png create mode 100644 src/modules/uv-pdffooterpanel-module/img/placemarker_down_hover.png create mode 100644 src/modules/uv-pdffooterpanel-module/img/placemarker_up.png create mode 100644 src/modules/uv-pdffooterpanel-module/img/prev.png create mode 100644 src/modules/uv-pdffooterpanel-module/img/search.png create mode 100644 src/modules/uv-pdffooterpanel-module/img/spinner.gif diff --git a/.gitignore b/.gitignore index 620670a67..ba7f7e87d 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,7 @@ lib src/lib/bundle.js src/lib/bundle.min.js -!src/lib +src/lib/* !src/extensions/**/lib ################# diff --git a/package-lock.json b/package-lock.json index ece0424d3..0e0c2a0c8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -486,7 +486,7 @@ }, "@types/requirejs": { "version": "2.1.28", - "resolved": "http://registry.npmjs.org/@types/requirejs/-/requirejs-2.1.28.tgz", + "resolved": "https://registry.npmjs.org/@types/requirejs/-/requirejs-2.1.28.tgz", "integrity": "sha1-v7LB1aA6IqsTf/Agq66TOLZu/a0=" }, "@types/sizzle": { @@ -497,7 +497,7 @@ "@types/three": { "version": "0.84.20", "resolved": "https://registry.npmjs.org/@types/three/-/three-0.84.20.tgz", - "integrity": "sha512-5SVtzdrU4HkJC8oxoinkmFKkCScP+ErymEIGKBB3PS4EFoB+0b0iZpa/SB/RMl//BQux02gDUml5TMip2AtNEQ==", + "integrity": "sha1-HEfcQPOWS5gyA2t3g38Z6aYTC7o=", "requires": { "@types/webvr-api": "*" } @@ -526,13 +526,13 @@ "abab": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz", - "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==", + "integrity": "sha1-q6CrTF7uLUx500h9hUUPsjduuw8=", "dev": true }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=", "dev": true }, "accepts": { @@ -578,7 +578,7 @@ "agent-base": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", - "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "integrity": "sha1-2J5ZmfeXh1Z0wH2H8mD8Qeg+jKk=", "dev": true, "requires": { "es6-promisify": "^5.0.0" @@ -770,7 +770,7 @@ "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", "dev": true }, "arr-union": { @@ -818,7 +818,7 @@ "array-slice": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "integrity": "sha1-42jqFfibxwaff/uJrsOmx9SsItQ=", "dev": true }, "array-unique": { @@ -843,7 +843,7 @@ "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=", "requires": { "safer-buffer": "~2.1.0" } @@ -865,7 +865,7 @@ "assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "integrity": "sha1-5gtrDo8wG9l+U3UhW9pAbIURjAs=", "dev": true }, "assign-symbols": { @@ -877,12 +877,12 @@ "astral-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "integrity": "sha1-bIw/uCfdQ+45GPJ7gngqt2WKb9k=", "dev": true }, "async": { "version": "0.9.0", - "resolved": "http://registry.npmjs.org/async/-/async-0.9.0.tgz", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.0.tgz", "integrity": "sha1-rDYTsdqb7RtHUQu0ZRuJMeRxRsc=", "dev": true }, @@ -895,7 +895,7 @@ "async-limiter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "integrity": "sha1-ePrtjD0HSrgfIrTphdeehzj3IPg=", "dev": true }, "asynckit": { @@ -906,7 +906,7 @@ "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=", "dev": true }, "aws-sign2": { @@ -917,7 +917,7 @@ "aws4": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + "integrity": "sha1-8OAD2cqef1nHpQiUXXsu+aBKVC8=" }, "babel-code-frame": { "version": "6.26.0", @@ -948,7 +948,7 @@ "babel-core": { "version": "6.26.3", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", - "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "integrity": "sha1-suLwnjQtDwyI4vAuBneUEl51wgc=", "dev": true, "requires": { "babel-code-frame": "^6.26.0", @@ -975,7 +975,7 @@ "babel-generator": { "version": "6.26.1", "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "integrity": "sha1-GERAjTuPDTWkBOp6wYDwh6YBvZA=", "dev": true, "requires": { "babel-messages": "^6.23.0", @@ -1061,7 +1061,7 @@ "babel-plugin-jest-hoist": { "version": "22.4.4", "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.4.tgz", - "integrity": "sha512-DUvGfYaAIlkdnygVIEl0O4Av69NtuQWcrjMOv6DODPuhuGLDnbsARz3AwiiI/EkIMMlxQDUcrZ9yoyJvTNjcVQ==", + "integrity": "sha1-uYUZBuqzTHv2+MiVorCL6hqETAs=", "dev": true }, "babel-plugin-syntax-object-rest-spread": { @@ -1073,7 +1073,7 @@ "babel-plugin-transform-es2015-modules-commonjs": { "version": "6.26.2", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", - "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", + "integrity": "sha1-WKeThjqefKhwvcWogRF/+sJ9tvM=", "dev": true, "requires": { "babel-plugin-transform-strict-mode": "^6.24.1", @@ -1105,7 +1105,7 @@ "babel-preset-jest": { "version": "22.4.4", "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-22.4.4.tgz", - "integrity": "sha512-+dxMtOFwnSYWfum0NaEc0O03oSdwBsjx4tMSChRDPGwu/4wSY6Q6ANW3wkjKpJzzguaovRs/DODcT4hbSN8yiA==", + "integrity": "sha1-7J+9i819/SS4tTIODmiAEyNbfDk=", "dev": true, "requires": { "babel-plugin-jest-hoist": "^22.4.4", @@ -1130,13 +1130,13 @@ "core-js": { "version": "2.5.7", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", + "integrity": "sha1-+XJgj/DOrWi4QaFqky0LGDeRgU4=", "dev": true }, "source-map-support": { "version": "0.4.18", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "integrity": "sha1-Aoam3ovkJkEzhZTpfM6nXwosWF8=", "dev": true, "requires": { "source-map": "^0.5.6" @@ -1156,7 +1156,7 @@ "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk=" } } }, @@ -1205,7 +1205,7 @@ "babylon": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM=", "dev": true }, "balanced-match": { @@ -1217,7 +1217,7 @@ "base": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", "dev": true, "requires": { "cache-base": "^1.0.1", @@ -1241,7 +1241,7 @@ "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "dev": true, "requires": { "kind-of": "^6.0.0" @@ -1250,7 +1250,7 @@ "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { "kind-of": "^6.0.0" @@ -1259,7 +1259,7 @@ "is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", @@ -1301,7 +1301,7 @@ "big.js": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==" + "integrity": "sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4=" }, "binary-extensions": { "version": "1.12.0", @@ -1384,7 +1384,7 @@ "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -1394,7 +1394,7 @@ "braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", "dev": true, "requires": { "arr-flatten": "^1.1.0", @@ -1429,7 +1429,7 @@ "browser-resolve": { "version": "1.11.3", "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "integrity": "sha1-m3y7PQ9RDky4a9vXlhJNKLWJCvY=", "dev": true, "requires": { "resolve": "1.1.7" @@ -1494,7 +1494,7 @@ "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=", "dev": true }, "builtin-modules": { @@ -1512,7 +1512,7 @@ "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", "dev": true, "requires": { "collection-visit": "^1.0.0", @@ -1540,7 +1540,7 @@ }, "camelcase-keys": { "version": "2.1.0", - "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, "requires": { @@ -1601,7 +1601,7 @@ "dependencies": { "ansi-regex": { "version": "0.2.1", - "resolved": "http://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz", "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=", "dev": true }, @@ -1622,7 +1622,7 @@ }, "strip-ansi": { "version": "0.3.0", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", "dev": true, "requires": { @@ -1696,7 +1696,7 @@ "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", "dev": true, "requires": { "arr-union": "^3.1.0", @@ -1820,7 +1820,7 @@ "codem-isoboxer": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/codem-isoboxer/-/codem-isoboxer-0.3.5.tgz", - "integrity": "sha512-F+OY4gCwxe+YnsqOkQTPrnRqoncAUmxqXNdgmuCE3Omvl3WQ9WLvhSJUZ0IGJljoxkdwpCQdPdcdMEPJnOQ1Ow==" + "integrity": "sha1-cfHNEmfQ4SEDMbLA57+Z7wXXcXw=" }, "coffeescript": { "version": "1.10.0", @@ -1841,7 +1841,7 @@ "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", "dev": true, "requires": { "color-name": "1.1.3" @@ -1899,7 +1899,7 @@ "concat-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -2174,13 +2174,13 @@ "cssom": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.4.tgz", - "integrity": "sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog==", + "integrity": "sha1-jNUuijrP1o067TjuCmQBd9L515c=", "dev": true }, "cssstyle": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.1.1.tgz", - "integrity": "sha512-364AI1l/M5TYcFH83JnOH/pSqgaNnKmYgKrm0didZMGKWjQB60dymwWy1rKUgL3J1ffdq9xVi2yGLHdSjjSNog==", + "integrity": "sha1-GLA4qcRNZfeo5CimU7n2/kL69fs=", "dev": true, "requires": { "cssom": "0.3.x" @@ -2227,7 +2227,7 @@ "data-urls": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.0.1.tgz", - "integrity": "sha512-0HdcMZzK6ubMUnsMmQmG0AcLQPvbvb47R0+7CCZQCYgcd8OUWG91CG7sM6GoXgjz+WLl4ArFzHtBMy/QqSF4eg==", + "integrity": "sha1-1BasOJaRjynKhNgQhbw3BYNNpXk=", "dev": true, "requires": { "abab": "^2.0.0", @@ -2238,7 +2238,7 @@ "whatwg-url": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", - "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", + "integrity": "sha1-/ekm+lSlmfOt+C3/Jan3vgLcbt0=", "dev": true, "requires": { "lodash.sortby": "^4.7.0", @@ -2261,7 +2261,7 @@ "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", "dev": true, "requires": { "ms": "2.0.0" @@ -2292,7 +2292,7 @@ "deep-eql": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "integrity": "sha1-38lARACtHI/gI+faHfHBR8S0RN8=", "dev": true, "requires": { "type-detect": "^4.0.0" @@ -2322,7 +2322,7 @@ "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=", "dev": true, "requires": { "object-keys": "^1.0.12" @@ -2331,7 +2331,7 @@ "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", "dev": true, "requires": { "is-descriptor": "^1.0.2", @@ -2341,7 +2341,7 @@ "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "dev": true, "requires": { "kind-of": "^6.0.0" @@ -2350,7 +2350,7 @@ "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { "kind-of": "^6.0.0" @@ -2359,7 +2359,7 @@ "is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", @@ -2424,7 +2424,7 @@ "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "integrity": "sha1-gAwN0eCov7yVg1wgKtIg/jF+WhI=", "dev": true }, "dom-walk": { @@ -2435,7 +2435,7 @@ "domexception": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "integrity": "sha1-k3RCZEymoxJh7zbj7Gd/6AVYLJA=", "dev": true, "requires": { "webidl-conversions": "^4.0.2" @@ -2443,7 +2443,7 @@ }, "duplexer": { "version": "0.1.1", - "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", "dev": true }, @@ -2525,7 +2525,7 @@ "errno": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=", "dev": true, "optional": true, "requires": { @@ -2535,7 +2535,7 @@ "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=", "dev": true, "requires": { "is-arrayish": "^0.2.1" @@ -2544,7 +2544,7 @@ "es-abstract": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", - "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", + "integrity": "sha1-nbvdJ8aFbwABQhyhh4LXhr+KYWU=", "dev": true, "requires": { "es-to-primitive": "^1.1.1", @@ -2567,7 +2567,7 @@ }, "es6-promise": { "version": "0.1.2", - "resolved": "http://registry.npmjs.org/es6-promise/-/es6-promise-0.1.2.tgz", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-0.1.2.tgz", "integrity": "sha1-8RLCn+paCZhTn8tqL9IUQ9KPBfc=", "dev": true }, @@ -2583,7 +2583,7 @@ "es6-promise": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz", - "integrity": "sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==", + "integrity": "sha1-2m0NVpLvtGHggsFIF/4kJ9j10FQ=", "dev": true } } @@ -2602,7 +2602,7 @@ "escodegen": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz", - "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==", + "integrity": "sha1-snqTiUgdW/1b7Hb3ux6z+PRVZYk=", "dev": true, "requires": { "esprima": "^3.1.3", @@ -2621,7 +2621,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", "dev": true, "optional": true } @@ -2675,7 +2675,7 @@ "eventemitter3": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", - "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", + "integrity": "sha1-CQtNbNvWRe0Qv3UNS1QHlC17oWM=", "dev": true }, "events": { @@ -2687,7 +2687,7 @@ "exec-sh": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", - "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", + "integrity": "sha1-Kl5//L19C6J1W97LFuWkJ9+97DY=", "dev": true, "requires": { "merge": "^1.2.0" @@ -2765,7 +2765,7 @@ "fill-range": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "integrity": "sha1-6x53OrsFbc2N8r/favWbizqTZWU=", "dev": true, "requires": { "is-number": "^2.1.0", @@ -2854,7 +2854,7 @@ "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=" }, "extend-shallow": { "version": "3.0.2", @@ -2869,7 +2869,7 @@ "is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", "dev": true, "requires": { "is-plain-object": "^2.0.4" @@ -2890,7 +2890,7 @@ "extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", "dev": true, "requires": { "array-unique": "^0.3.2", @@ -2924,7 +2924,7 @@ "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "dev": true, "requires": { "kind-of": "^6.0.0" @@ -2933,7 +2933,7 @@ "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { "kind-of": "^6.0.0" @@ -2942,7 +2942,7 @@ "is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", @@ -3915,7 +3915,7 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=", "dev": true }, "gauge": { @@ -3962,7 +3962,7 @@ "get-caller-file": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "integrity": "sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o=", "dev": true }, "get-func-name": { @@ -3979,7 +3979,7 @@ }, "get-stream": { "version": "3.0.0", - "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true }, @@ -4122,7 +4122,7 @@ "global-modules": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "integrity": "sha1-bXcPDrUjrHgWTXK15xqIdyZcw+o=", "dev": true, "requires": { "global-prefix": "^1.0.1", @@ -4217,7 +4217,7 @@ "grunt-cli": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.3.1.tgz", - "integrity": "sha512-UwBRu/QpAjDc53DRLEkyilFdL0zenpxu+fddTIlsF/KJqdNcHaQmvyu1W3cDesZ9rqqZdKK5A8+QDIyLUEWoZQ==", + "integrity": "sha1-uctbenIA5JBxHh7nywScmoFUcfA=", "dev": true, "requires": { "grunt-known-options": "~1.1.0", @@ -4241,7 +4241,7 @@ }, "grunt-contrib-clean": { "version": "0.4.0", - "resolved": "http://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-0.4.0.tgz", + "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-0.4.0.tgz", "integrity": "sha1-dB2rE49raVHg/a/TPKC0RDv24A4=", "dev": true }, @@ -4344,7 +4344,7 @@ }, "grunt-contrib-uglify": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-1.0.1.tgz", "integrity": "sha1-rWhBG5Y7mWYSEfdvRmve3tT7B6w=", "dev": true, "requires": { @@ -4379,7 +4379,7 @@ "grunt-known-options": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.1.tgz", - "integrity": "sha512-cHwsLqoighpu7TuYj5RonnEuxGVFnztcUqTqp5rXFGYL4OuPFofwC4Ycg7n9fYwvK6F5WbYgeVOwph9Crs2fsQ==", + "integrity": "sha1-bMCIEHvQIZ3F0+V9kZI/RpBZgE0=", "dev": true }, "grunt-legacy-log": { @@ -4512,7 +4512,7 @@ "dependencies": { "ncp": { "version": "0.5.1", - "resolved": "http://registry.npmjs.org/ncp/-/ncp-0.5.1.tgz", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-0.5.1.tgz", "integrity": "sha1-dDmFMW49tFkoG1hxaehFc1oFQ58=", "dev": true }, @@ -4589,7 +4589,7 @@ "har-validator": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz", - "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", + "integrity": "sha1-RGV/VoiiLP1LckhugbOj+xF0LCk=", "requires": { "ajv": "^5.3.0", "har-schema": "^2.0.0" @@ -4598,7 +4598,7 @@ "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", "dev": true, "requires": { "function-bind": "^1.1.1" @@ -4706,13 +4706,13 @@ "hosted-git-info": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "integrity": "sha1-l/I2l3vW4SVAiTD/bePuxigewEc=", "dev": true }, "html-encoding-sniffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "integrity": "sha1-5w2EuU2lOqN14R/jo1G+ZkLKRvg=", "dev": true, "requires": { "whatwg-encoding": "^1.0.1" @@ -4741,7 +4741,7 @@ "http-proxy": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", - "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", + "integrity": "sha1-etOElGWPhGBeL220Q230EPTlvpo=", "dev": true, "requires": { "eventemitter3": "^3.0.0", @@ -4752,7 +4752,7 @@ "http-server": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/http-server/-/http-server-0.11.1.tgz", - "integrity": "sha512-6JeGDGoujJLmhjiRGlt8yK8Z9Kl0vnl/dQoQZlc4oeqaUoAKQg94NILLfrY3oWzSyFaQCVNTcKE5PZ3cH8VP9w==", + "integrity": "sha1-IwKlam/+9/mr6gFH2Dil6ba2p5s=", "dev": true, "requires": { "colors": "1.0.3", @@ -4796,7 +4796,7 @@ "https-proxy-agent": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", - "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", + "integrity": "sha1-UVUpcPoE1yPgTFbQQXjD+SWSu8A=", "dev": true, "requires": { "agent-base": "^4.1.0", @@ -4815,7 +4815,7 @@ "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=", "dev": true } } @@ -4823,7 +4823,7 @@ "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -4857,7 +4857,7 @@ "import-local": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", - "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", + "integrity": "sha1-Xk/9wD9P5sAJxnKb6yljHC+CJ7w=", "dev": true, "requires": { "pkg-dir": "^2.0.0", @@ -4906,7 +4906,7 @@ "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=", "dev": true }, "inquirer": { @@ -4952,7 +4952,7 @@ "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "integrity": "sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=", "dev": true, "requires": { "loose-envify": "^1.0.0" @@ -4967,7 +4967,7 @@ "is-absolute": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "integrity": "sha1-OV4a6EsR8mrReV5zwXN45IowFXY=", "dev": true, "requires": { "is-relative": "^1.0.0", @@ -5012,12 +5012,12 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", "dev": true }, "is-builtin-module": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { @@ -5027,7 +5027,7 @@ "is-callable": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "integrity": "sha1-HhrfIZ4e62hNaR+dagX/DTCiTXU=", "dev": true }, "is-ci": { @@ -5068,7 +5068,7 @@ "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", "dev": true, "requires": { "is-accessor-descriptor": "^0.1.6", @@ -5079,7 +5079,7 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=", "dev": true } } @@ -5172,7 +5172,7 @@ "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", "dev": true, "requires": { "isobject": "^3.0.1" @@ -5207,7 +5207,7 @@ "is-relative": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "integrity": "sha1-obtpNc6MXboei5dUubLcwCDiJg0=", "dev": true, "requires": { "is-unc-path": "^1.0.0" @@ -5235,7 +5235,7 @@ "is-unc-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "integrity": "sha1-1zHoiY7QkKEsNSrS6u1Qla0yLJ0=", "dev": true, "requires": { "unc-path-regex": "^0.1.2" @@ -5250,7 +5250,7 @@ "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=", "dev": true }, "is-wsl": { @@ -5871,7 +5871,7 @@ "jest-config": { "version": "22.4.4", "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-22.4.4.tgz", - "integrity": "sha512-9CKfo1GC4zrXSoMLcNeDvQBfgtqGTB1uP8iDIZ97oB26RCUb886KkKWhVcpyxVDOUxbhN+uzcBCeFe7w+Iem4A==", + "integrity": "sha1-cqUhGIcgWXFpzYtP+Gk071dS2Go=", "dev": true, "requires": { "chalk": "^2.0.1", @@ -5890,7 +5890,7 @@ "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { "color-convert": "^1.9.0" @@ -5899,7 +5899,7 @@ "chalk": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -5910,7 +5910,7 @@ "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -6135,7 +6135,7 @@ "jest-environment-jsdom": { "version": "22.4.3", "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-22.4.3.tgz", - "integrity": "sha512-FviwfR+VyT3Datf13+ULjIMO5CSeajlayhhYQwpzgunswoaLIPutdbrnfUHEMyJCwvqQFaVtTmn9+Y8WCt6n1w==", + "integrity": "sha1-1n2qQVXjNRauzdNa/YLUq/D6ih4=", "dev": true, "requires": { "jest-mock": "^22.4.3", @@ -6146,7 +6146,7 @@ "jest-environment-node": { "version": "22.4.3", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-22.4.3.tgz", - "integrity": "sha512-reZl8XF6t/lMEuPWwo9OLfttyC26A5AMgDyEQ6DBgZuyfyeNUzYT8BFo6uxCCP/Av/b7eb9fTi3sIHFPBzmlRA==", + "integrity": "sha1-VMTqo3TIPdUqnah1m+FOvh0LkSk=", "dev": true, "requires": { "jest-mock": "^22.4.3", @@ -6199,7 +6199,7 @@ "jest-get-type": { "version": "22.4.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", - "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==", + "integrity": "sha1-46hQTYR5NC3UQgI2syKGnxiQDOQ=", "dev": true }, "jest-haste-map": { @@ -6312,7 +6312,7 @@ "jest-jasmine2": { "version": "22.4.4", "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-22.4.4.tgz", - "integrity": "sha512-nK3vdUl50MuH7vj/8at7EQVjPGWCi3d5+6aCi7Gxy/XMWdOdbH1qtO/LjKbqD8+8dUAEH+BVVh7HkjpCWC1CSw==", + "integrity": "sha1-xV+SyWGhQfaT+Gn18IGnmhDSTiM=", "dev": true, "requires": { "chalk": "^2.0.1", @@ -6331,7 +6331,7 @@ "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { "color-convert": "^1.9.0" @@ -6340,7 +6340,7 @@ "chalk": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -6351,7 +6351,7 @@ "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -6440,7 +6440,7 @@ "jest-message-util": { "version": "22.4.3", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-22.4.3.tgz", - "integrity": "sha512-iAMeKxhB3Se5xkSjU0NndLLCHtP4n+GtCqV0bISKA5dmOXQfEbdEmYiu2qpnWBDCQdEafNDDU6Q+l6oBMd/+BA==", + "integrity": "sha1-zz04qv5L792/xFXlfWXVI545nrc=", "dev": true, "requires": { "@babel/code-frame": "^7.0.0-beta.35", @@ -6453,7 +6453,7 @@ "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { "color-convert": "^1.9.0" @@ -6488,7 +6488,7 @@ "chalk": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -6562,7 +6562,7 @@ "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -6573,7 +6573,7 @@ "jest-mock": { "version": "22.4.3", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-22.4.3.tgz", - "integrity": "sha512-+4R6mH5M1G4NK16CKg9N1DtCaFmuxhcIqF4lQK/Q1CIotqMs/XBemfpDPeVZBFow6iyUNu6EBT9ugdNOTT5o5Q==", + "integrity": "sha1-9jui8HoVEXcs3Hl5czOX33cKq8c=", "dev": true }, "jest-puppeteer": { @@ -6589,7 +6589,7 @@ "jest-regex-util": { "version": "22.4.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-22.4.3.tgz", - "integrity": "sha512-LFg1gWr3QinIjb8j833bq7jtQopiwdAs67OGfkPrvy7uNUbVMfTXXcOKXJaeY5GgjobELkKvKENqq1xrUectWg==", + "integrity": "sha1-qCbrGRzfIlAhmMVAGh/ATenO9a8=", "dev": true }, "jest-resolve": { @@ -7657,7 +7657,7 @@ "jest-util": { "version": "22.4.3", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-22.4.3.tgz", - "integrity": "sha512-rfDfG8wyC5pDPNdcnAlZgwKnzHvZDu8Td2NJI/jAGKEGxJPYiE4F0ss/gSAkG4778Y23Hvbz+0GMrDJTeo7RjQ==", + "integrity": "sha1-xw/sjuxIfDexCwgJ3AZKfs9qr6w=", "dev": true, "requires": { "callsites": "^2.0.0", @@ -7672,7 +7672,7 @@ "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { "color-convert": "^1.9.0" @@ -7681,7 +7681,7 @@ "chalk": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -7692,13 +7692,13 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", "dev": true }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -7709,7 +7709,7 @@ "jest-validate": { "version": "22.4.4", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-22.4.4.tgz", - "integrity": "sha512-dmlf4CIZRGvkaVg3fa0uetepcua44DHtktHm6rcoNVtYlpwe6fEJRkMFsaUVcFHLzbuBJ2cPw9Gl9TKfnzMVwg==", + "integrity": "sha1-HdC2Fu9GyZXeYYENhfVxGdu87E0=", "dev": true, "requires": { "chalk": "^2.0.1", @@ -7722,7 +7722,7 @@ "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { "color-convert": "^1.9.0" @@ -7731,7 +7731,7 @@ "chalk": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -7742,7 +7742,7 @@ "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -7851,7 +7851,7 @@ "jsdom": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", - "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", + "integrity": "sha1-GoDUDd03ih3lllbp5txaO6hle8g=", "dev": true, "requires": { "abab": "^2.0.0", @@ -7885,7 +7885,7 @@ "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=", "dev": true }, "ws": { @@ -7928,7 +7928,7 @@ }, "json5": { "version": "0.5.1", - "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" }, "jsonfile": { @@ -7959,13 +7959,13 @@ }, "jsviews": { "version": "0.9.83", - "resolved": "http://registry.npmjs.org/jsviews/-/jsviews-0.9.83.tgz", + "resolved": "https://registry.npmjs.org/jsviews/-/jsviews-0.9.83.tgz", "integrity": "sha1-BpsFEigz0jFVzDziwtn7LPeJqYo=" }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", "dev": true }, "kleur": { @@ -8001,7 +8001,7 @@ "left-pad": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", - "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", + "integrity": "sha1-W4o6d2Xf4AEmHd6RVYnngvjJTR4=", "dev": true }, "less": { @@ -8090,7 +8090,7 @@ }, "load-json-file": { "version": "1.1.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { @@ -8161,7 +8161,7 @@ "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "integrity": "sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=", "dev": true, "requires": { "js-tokens": "^3.0.0 || ^4.0.0" @@ -8190,7 +8190,7 @@ "make-iterator": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "integrity": "sha1-KbM/MSqo9UfEpeSQ9Wr87JkTOtY=", "dev": true, "requires": { "kind-of": "^6.0.2" @@ -8228,7 +8228,7 @@ }, "map-stream": { "version": "0.1.0", - "resolved": "http://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", "dev": true }, @@ -8319,7 +8319,7 @@ }, "meow": { "version": "3.7.0", - "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "requires": { @@ -8375,7 +8375,7 @@ "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", "dev": true, "requires": { "arr-diff": "^4.0.0", @@ -8402,12 +8402,12 @@ "mime-db": { "version": "1.36.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz", - "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==" + "integrity": "sha1-UCBHjbPH/pOq17vMTc+GnEM2M5c=" }, "mime-types": { "version": "2.1.20", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz", - "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==", + "integrity": "sha1-kwy3GdVx6QNzhSD4RwkRVIyizBk=", "requires": { "mime-db": "~1.36.0" } @@ -8415,7 +8415,7 @@ "mimic-fn": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=" }, "mimic-response": { "version": "1.0.1", @@ -8449,7 +8449,7 @@ "mixin-deep": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "integrity": "sha1-pJ5yaNzhoNlpjkUybFYm3zVD0P4=", "dev": true, "requires": { "for-in": "^1.0.2", @@ -8459,7 +8459,7 @@ "is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", "dev": true, "requires": { "is-plain-object": "^2.0.4" @@ -8536,7 +8536,7 @@ "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=", "dev": true, "requires": { "arr-diff": "^4.0.0", @@ -8565,7 +8565,7 @@ }, "ncp": { "version": "2.0.0", - "resolved": "http://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", "dev": true }, @@ -8682,7 +8682,7 @@ "normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=", "dev": true, "requires": { "hosted-git-info": "^2.1.4", @@ -8737,7 +8737,7 @@ "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + "integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU=" }, "object-assign": { "version": "4.1.1", @@ -8778,7 +8778,7 @@ "object-keys": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", + "integrity": "sha1-CcU4VTd1dTEMymL1W7M0q/97PtI=", "dev": true }, "object-visit": { @@ -8924,7 +8924,7 @@ }, "opn": { "version": "4.0.2", - "resolved": "http://registry.npmjs.org/opn/-/opn-4.0.2.tgz", + "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=", "requires": { "object-assign": "^4.0.1", @@ -8980,7 +8980,7 @@ "os-locale": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "integrity": "sha1-QrwpAKa1uL0XN2yOiCtlr8zyS/I=", "dev": true, "requires": { "execa": "^0.7.0", @@ -8996,7 +8996,7 @@ "osenv": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "integrity": "sha1-hc36+uso6Gd/QW4odZK18/SepBA=", "dev": true, "requires": { "os-homedir": "^1.0.0", @@ -9012,7 +9012,7 @@ "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=", "dev": true, "requires": { "p-try": "^1.0.0" @@ -9097,7 +9097,7 @@ "parse5": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "integrity": "sha1-bXhlbj2o14tOwLkG98CO8d/j9gg=", "dev": true }, "parseurl": { @@ -9148,7 +9148,7 @@ "path-parse": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=", "dev": true }, "path-root": { @@ -9191,7 +9191,7 @@ }, "pause-stream": { "version": "0.0.11", - "resolved": "http://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", "dev": true, "requires": { @@ -9265,7 +9265,7 @@ "pn": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "integrity": "sha1-4vTO8OIZ9GPBeas3Rj5OHs3Muvs=", "dev": true }, "portfinder": { @@ -9281,7 +9281,7 @@ "dependencies": { "async": { "version": "1.5.2", - "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true } @@ -9392,10 +9392,15 @@ } } }, + "print-js": { + "version": "1.0.63", + "resolved": "https://registry.npmjs.org/print-js/-/print-js-1.0.63.tgz", + "integrity": "sha512-WKf79bFeqJpwx5vcjvEuL0J1bRVA5QlKQY+usFksOx0WOApSJwQGgMlgM2PVub/R1uUMF4onc2SWRWPNz4R40g==" + }, "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "integrity": "sha1-I4Hts2ifelPWUxkAYPz4ItLzaP8=", "dev": true }, "process": { @@ -9406,7 +9411,7 @@ "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o=", "dev": true }, "progress": { @@ -9417,7 +9422,7 @@ }, "promise": { "version": "6.1.0", - "resolved": "http://registry.npmjs.org/promise/-/promise-6.1.0.tgz", + "resolved": "https://registry.npmjs.org/promise/-/promise-6.1.0.tgz", "integrity": "sha1-LOcp9rlLRcJoka0GAsXJDgTG7vY=", "dev": true, "optional": true, @@ -9466,7 +9471,7 @@ "psl": { "version": "1.1.29", "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", - "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==" + "integrity": "sha1-YPWA02AXC7cip5fMcEQR5tqFDGc=" }, "pump": { "version": "2.0.1", @@ -9535,7 +9540,7 @@ "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + "integrity": "sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=" }, "querystring": { "version": "0.2.0", @@ -9546,7 +9551,7 @@ "randomatic": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.0.tgz", - "integrity": "sha512-KnGPVE0lo2WoXxIZ7cPR8YBpiol4gsSuOwDSg410oHh80ZMp5EiypNqL2K4Z77vJn6lB5rap7IkAmcUlalcnBQ==", + "integrity": "sha1-NvLKcI6eVn9e0uwBlJAm1QqhARY=", "dev": true, "requires": { "is-number": "^4.0.0", @@ -9557,7 +9562,7 @@ "is-number": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "integrity": "sha1-ACbjf1RU1z41bf5lZGmYZ8an8P8=", "dev": true } } @@ -9663,7 +9668,7 @@ "regex-cache": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "integrity": "sha1-db3FiioUls7EihKDW8VMjVYjNt0=", "dev": true, "requires": { "is-equal-shallow": "^0.1.3" @@ -9672,7 +9677,7 @@ "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", "dev": true, "requires": { "extend-shallow": "^3.0.2", @@ -9707,7 +9712,7 @@ "repeat-element": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "integrity": "sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4=", "dev": true }, "repeat-string": { @@ -9728,7 +9733,7 @@ "request": { "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "integrity": "sha1-nC/KT301tZLv5Xx/ClXoEFIST+8=", "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -9844,7 +9849,7 @@ "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=", "dev": true }, "right-align": { @@ -9873,7 +9878,7 @@ "rsvp": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", - "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", + "integrity": "sha1-LpZJFZmpbN4bUV1WdKj3qRRSkmo=", "dev": true }, "run-async": { @@ -9901,7 +9906,7 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" }, "safe-regex": { "version": "1.1.0", @@ -9915,7 +9920,7 @@ "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=" }, "sane": { "version": "2.5.2", @@ -9936,13 +9941,13 @@ }, "sax": { "version": "1.2.1", - "resolved": "http://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" }, "schema-utils": { "version": "0.4.7", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", - "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "integrity": "sha1-unT1l9K+LqiAExdG7hfQoJPGgYc=", "requires": { "ajv": "^6.1.0", "ajv-keywords": "^3.1.0" @@ -9967,7 +9972,7 @@ "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=" } } }, @@ -10147,7 +10152,7 @@ "set-value": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "integrity": "sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ=", "dev": true, "requires": { "extend-shallow": "^2.0.1", @@ -10238,7 +10243,7 @@ "shellwords": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "integrity": "sha1-1rkYHBpI05cyTISHHvvPxz/AZUs=", "dev": true }, "signal-exit": { @@ -10280,7 +10285,7 @@ "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", "dev": true, "requires": { "base": "^0.11.1", @@ -10316,7 +10321,7 @@ "snapdragon-node": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", "dev": true, "requires": { "define-property": "^1.0.0", @@ -10336,7 +10341,7 @@ "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", "dev": true, "requires": { "kind-of": "^6.0.0" @@ -10345,7 +10350,7 @@ "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", "dev": true, "requires": { "kind-of": "^6.0.0" @@ -10354,7 +10359,7 @@ "is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", @@ -10367,7 +10372,7 @@ "snapdragon-util": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", "dev": true, "requires": { "kind-of": "^3.2.0" @@ -10393,7 +10398,7 @@ "source-map-resolve": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "integrity": "sha1-cuLMNAlVQ+Q7LGKyxMENSpBU8lk=", "dev": true, "requires": { "atob": "^2.1.1", @@ -10406,7 +10411,7 @@ "source-map-support": { "version": "0.5.9", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", - "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", + "integrity": "sha1-QbyVOyU0Jn6i1gW8z6e/oxEc7V8=", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -10416,7 +10421,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", "dev": true } } @@ -10458,7 +10463,7 @@ "spdx-expression-parse": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "integrity": "sha1-meEZt6XaAOBUkcn6M4t5BII7QdA=", "dev": true, "requires": { "spdx-exceptions": "^2.1.0", @@ -10473,7 +10478,7 @@ }, "split": { "version": "0.3.3", - "resolved": "http://registry.npmjs.org/split/-/split-0.3.3.tgz", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", "dev": true, "requires": { @@ -10483,7 +10488,7 @@ "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", "dev": true, "requires": { "extend-shallow": "^3.0.0" @@ -10568,7 +10573,7 @@ }, "stream-combiner": { "version": "0.0.4", - "resolved": "http://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", "dev": true, "requires": { @@ -10611,7 +10616,7 @@ "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -10648,7 +10653,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { "ansi-regex": "^2.0.0" @@ -10892,7 +10897,7 @@ }, "through": { "version": "2.3.8", - "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "timers-browserify": { @@ -10907,7 +10912,7 @@ "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=", "requires": { "os-tmpdir": "~1.0.2" } @@ -10953,7 +10958,7 @@ "to-regex": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", "dev": true, "requires": { "define-property": "^2.0.2", @@ -10975,7 +10980,7 @@ "tough-cookie": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "integrity": "sha1-U/Nto/R3g7CSWvoG/587FlKA94E=", "requires": { "psl": "^1.1.24", "punycode": "^1.4.1" @@ -10993,7 +10998,7 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=", "dev": true } } @@ -11013,7 +11018,7 @@ "ts-jest": { "version": "22.4.6", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-22.4.6.tgz", - "integrity": "sha512-kYQ6g1G1AU+bOO9rv+SSQXg4WTcni6Wx3AM48iHni0nP1vIuhdNRjKTE9Cxx36Ix/IOV7L85iKu07dgXJzH2pQ==", + "integrity": "sha1-pdf16LgJYm0fQUMgnTASh0cuw0Q=", "dev": true, "requires": { "babel-core": "^6.26.3", @@ -11044,7 +11049,7 @@ "cliui": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "integrity": "sha1-NIQi2+gtgAswIu709qwQvy5NG0k=", "dev": true, "requires": { "string-width": "^2.1.1", @@ -11143,7 +11148,7 @@ "type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "integrity": "sha1-dkb7XxiHHPu3dJ5pvTmmOI63RQw=", "dev": true }, "typedarray": { @@ -11160,7 +11165,7 @@ }, "uglify-js": { "version": "2.6.4", - "resolved": "http://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz", "integrity": "sha1-ZeovswWck5RpLxX+2HwrNsFrmt8=", "dev": true, "requires": { @@ -11172,7 +11177,7 @@ "dependencies": { "async": { "version": "0.2.10", - "resolved": "http://registry.npmjs.org/async/-/async-0.2.10.tgz", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", "dev": true } @@ -11261,7 +11266,7 @@ "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=", "dev": true }, "unpipe": { @@ -11329,7 +11334,7 @@ "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "integrity": "sha1-lMVA4f93KVbiKZUHwBCupsiDjrA=", "requires": { "punycode": "^2.1.0" }, @@ -11337,7 +11342,7 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=" } } }, @@ -11385,7 +11390,7 @@ "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=", "dev": true }, "util": { @@ -11414,7 +11419,7 @@ "util.promisify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "integrity": "sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA=", "dev": true, "requires": { "define-properties": "^1.1.2", @@ -11430,12 +11435,12 @@ "uuid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + "integrity": "sha1-G0r0lV6zB3xQHCOHL8ZROBFYcTE=" }, "v8flags": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.0.2.tgz", - "integrity": "sha512-6sgSKoFw1UpUPd3cFdF7QGnrH6tDeBgW1F3v9gy8gLY0mlbiBXq8soy8aQpY6xeeCjH5K+JvC62Acp7gtl7wWA==", + "integrity": "sha1-rWp4ogprI9A6jevBEhHjzCMUlHc=", "dev": true, "requires": { "homedir-polyfill": "^1.0.1" @@ -11444,7 +11449,7 @@ "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=", "dev": true, "requires": { "spdx-correct": "^3.0.0", @@ -11482,7 +11487,7 @@ }, "@types/webvr-api": { "version": "0.0.31", - "resolved": "http://registry.npmjs.org/@types/webvr-api/-/webvr-api-0.0.31.tgz", + "resolved": "https://registry.npmjs.org/@types/webvr-api/-/webvr-api-0.0.31.tgz", "integrity": "sha1-9gYf6IoDXTSotqDFX4dYkB7IoI4=" } } @@ -11555,7 +11560,7 @@ "webidl-conversions": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "integrity": "sha1-qFWYCx8LazWbodXZ+zmulB+qY60=", "dev": true }, "websocket-stream": { @@ -11590,7 +11595,7 @@ "whatwg-url": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", - "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "integrity": "sha1-8t8Cv/F2/WUHDfdK1cy7WhmZZag=", "dev": true, "requires": { "lodash.sortby": "^4.7.0", @@ -11654,7 +11659,7 @@ "worker-loader": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/worker-loader/-/worker-loader-1.1.1.tgz", - "integrity": "sha512-qJZLVS/jMCBITDzPo/RuweYSIG8VJP5P67mP/71alGyTZRe1LYJFdwLjLalY3T5ifx0bMDRD3OB6P2p1escvlg==", + "integrity": "sha1-kg103axoFvxjU5JlPti0rxkp/ZI=", "requires": { "loader-utils": "^1.0.0", "schema-utils": "^0.4.0" @@ -11662,7 +11667,7 @@ }, "wrap-ansi": { "version": "2.1.0", - "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { @@ -11701,7 +11706,7 @@ "write-file-atomic": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", - "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", + "integrity": "sha1-H/YVdcLipOjlENb6TiQ8zhg5mas=", "dev": true, "requires": { "graceful-fs": "^4.1.11", @@ -11723,13 +11728,13 @@ "xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "integrity": "sha1-auc+Bt5NjG5H+fsYH3jWSK1FfGo=", "dev": true }, "xml2js": { "version": "0.4.19", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "integrity": "sha1-aGwg8hMgnpSr8NG88e+qKRx4J6c=", "dev": true, "requires": { "sax": ">=0.6.0", @@ -11738,7 +11743,7 @@ }, "xmlbuilder": { "version": "9.0.7", - "resolved": "http://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", "dev": true }, @@ -11771,7 +11776,7 @@ }, "yargs": { "version": "3.10.0", - "resolved": "http://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", "dev": true, "requires": { diff --git a/src/extensions/uv-av-extension/dependencies.js b/src/extensions/uv-av-extension/dependencies.js index e1d13206b..bfa89a5ea 100644 --- a/src/extensions/uv-av-extension/dependencies.js +++ b/src/extensions/uv-av-extension/dependencies.js @@ -1,6 +1,15 @@ define(function () { + // https://developer.mozilla.org/en-US/Apps/Fundamentals/Audio_and_video_delivery/Live_streaming_web_audio_and_video + // Dash is supported everywhere except safari + // function isSafari() { + // // https://stackoverflow.com/questions/7944460/detect-safari-browser?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa + // var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); + // console.log('isSafari', isSafari); + // return isSafari; + // } function isFormatAvailable(formats, format) { var isAvailable = formats.includes(format); + //console.log('isFormatAvailable', format, isAvailable); return isAvailable; } function isHLSFormatAvailable(formats) { @@ -10,11 +19,18 @@ define(function () { return isFormatAvailable(formats, 'application/dash+xml'); } function canPlayHls() { - var doc = typeof document === 'object' && document, videoelem = doc && doc.createElement('video'), isvideosupport = Boolean(videoelem && videoelem.canPlayType), canPlay = [ + var doc = typeof document === 'object' && document, videoelem = doc && doc.createElement('video'), isvideosupport = Boolean(videoelem && videoelem.canPlayType), + // HLS manifests can go by many mime-types + canPlay = [ + // Apple santioned 'application/vnd.apple.mpegurl', + // Apple sanctioned for backwards compatibility 'audio/mpegurl', + // Very common 'audio/x-mpegurl', + // Very common 'application/x-mpegurl', + // Included for completeness 'video/x-mpegurl', 'video/mpegurl', 'application/mpegurl' diff --git a/src/extensions/uv-pdf-extension/Events.ts b/src/extensions/uv-pdf-extension/Events.ts index 644bd94a3..5ce488dfe 100644 --- a/src/extensions/uv-pdf-extension/Events.ts +++ b/src/extensions/uv-pdf-extension/Events.ts @@ -4,4 +4,5 @@ export class Events { static PDF_LOADED: string = Events.namespace + 'pdfLoaded'; static PAGE_INDEX_CHANGED: string = Events.namespace + 'pageIndexChanged'; static SEARCH: string = Events.namespace + 'search'; + static PRINT: string = Events.namespace + 'print'; } \ No newline at end of file diff --git a/src/extensions/uv-pdf-extension/Extension.ts b/src/extensions/uv-pdf-extension/Extension.ts index f272b3c2f..bd1128e2d 100644 --- a/src/extensions/uv-pdf-extension/Extension.ts +++ b/src/extensions/uv-pdf-extension/Extension.ts @@ -2,7 +2,8 @@ import {BaseEvents} from "../../modules/uv-shared-module/BaseEvents"; import {BaseExtension} from "../../modules/uv-shared-module/BaseExtension"; import {Bookmark} from "../../modules/uv-shared-module/Bookmark"; import {DownloadDialogue} from "./DownloadDialogue"; -import {FooterPanel} from "../../modules/uv-shared-module/FooterPanel"; +//import {FooterPanel} from "../../modules/uv-shared-module/FooterPanel"; +import { FooterPanel } from "../../modules/uv-pdffooterpanel-module/FooterPanel"; import {IPDFExtension} from "./IPDFExtension"; import {MoreInfoRightPanel} from "../../modules/uv-moreinforightpanel-module/MoreInfoRightPanel"; import {PDFCenterPanel} from "../../modules/uv-pdfcenterpanel-module/PDFCenterPanel"; @@ -11,6 +12,12 @@ import {ResourcesLeftPanel} from "../../modules/uv-resourcesleftpanel-module/Res import {SettingsDialogue} from "./SettingsDialogue"; import {ShareDialogue} from "./ShareDialogue"; import IThumb = Manifold.IThumb; +import { Events } from "../uv-pdf-extension/Events"; +//import * as d from '../../../node_modules/print-js/src/index'; +//import printJS = require("../../../node_modules/print-js/src/index"); + +//var printJS = require("../../../node_modules/print-js/src/index"); +//declare var printJS: any; export class Extension extends BaseExtension implements IPDFExtension { @@ -27,6 +34,8 @@ export class Extension extends BaseExtension implements IPDFExtension { rightPanel: MoreInfoRightPanel; settingsDialogue: SettingsDialogue; + private _pdfUri:string = ''; + create(): void { requirejs.config({paths: {'pdfjs-dist/build/pdf.combined': this.data.root + '/lib/' + 'pdf.combined'}}); @@ -58,6 +67,14 @@ export class Extension extends BaseExtension implements IPDFExtension { } }); + this.component.subscribe(Events.PDF_LOADED, (pdfDetails: any) => { + this._pdfUri = pdfDetails.pdfUri; + }); + + this.component.subscribe(Events.PRINT, () => { + this.print(); + }); + this.component.subscribe(BaseEvents.HIDE_OVERLAY, () => { if (this.IsOldIE()) { this.centerPanel.$element.show(); @@ -71,6 +88,110 @@ export class Extension extends BaseExtension implements IPDFExtension { }); } + print(){ + + //var pdfWindow:Window = window.open(window.location.protocol+'//'+window.location.hostname+':'+window.location.port+'/examples/uv/pdfjsbuild/generic/web/viewer.html?file='+this._pdfUri) as Window; + //pdfWindow.print(); + + this.printPdf(window.location.protocol+'//'+window.location.hostname+':'+window.location.port+'/examples/uv/pdfjsbuild/generic/web/viewer.html?file='+this._pdfUri); + + //this.printPdf(this._pdfUri); + } + + printPdf = function (url) { + + //printJS = new printJS(); + //console.log(printJS); + + // require(['lib/print'], function(printJS){ + // printJS(url); + // }) + + //var iframe = this._printIframe; + //if (!this._printIframe) { + //iframe = this._printIframe = document.createElement('iframe'); + //iframe.setAttribute("id","pdf-frame"); + var $printFrame = $(''); + //document.body.appendChild(iframe); + + $('body').append($printFrame); + + $printFrame.attr("id", "pdf-frame" ); + + $.ajax({ + url:'https://dlcs.io/file/wellcome/5/b17502792_Science%20and%20the%20Public.pdf', + //dataType: 'binary', + xhrFields: { + responseType: 'blob' + }, + success:function(data){ + //console.log(data); //ArrayBuffer + //console.log(new Blob([data])) // Blob + + var objectURL = URL.createObjectURL(data); + alert('iffrrf'); + + $printFrame.attr("src", '' ); + $printFrame.attr("src", objectURL ); + //iframe.src = ''; + //iframe.src = objectURL; + URL.revokeObjectURL(objectURL); + window.setTimeout(() => { + var printIFrame:any = $printFrame.get(0); + printIFrame.contentWindow.print(); + //$printFrame.remove(); + }, 10) + },error: function (xhr, ajaxOptions, thrownError) { + $printFrame.remove(); + } + }) + +// fetch('https://dlcs.io/file/wellcome/5/b17502792_Science%20and%20the%20Public.pdf').then(function(response) { +// return response.blob(); +// }).then((myBlob) => { +// var objectURL = URL.createObjectURL(myBlob); +// alert('iffrrf'); +// iframe.src = ''; +// iframe.src = objectURL; +// URL.revokeObjectURL(objectURL); +// }).then( +// function() { +// window.setTimeout(() => { +// iframe.contentWindow.print(); +// }, 1000) +// }); + //} + + + // var iframe = this._printIframe; + // if (!this._printIframe) { + // iframe = this._printIframe = document.createElement('iframe'); + // document.body.appendChild(iframe); + + // alert('frame ready'); + + // //iframe.style.visibility = 'hidden'; + // // iframe.onload = function() { + // // alert('fijioe'); + // // setTimeout(function() { + // // iframe.focus(); + // // iframe.print(); + // // }, 1); + // // }; + // } + + //iframe.src = url; + + + // var objFra:any = document.createElement('iframe'); // Create an IFrame. + // //objFra.style.visibility = "hidden"; // Hide the frame. + // objFra.src = url; // Set source. + // document.body.appendChild(objFra); // Add the frame to the web page. + // objFra.contentWindow.focus(); + // alert('hi') ; // Set focus.; + // objFra.contentWindow.print(); // Print it. + } + render(): void { super.render(); } diff --git a/src/extensions/uv-pdf-extension/config/en-GB.json b/src/extensions/uv-pdf-extension/config/en-GB.json index 7e52d0274..95073d7ba 100644 --- a/src/extensions/uv-pdf-extension/config/en-GB.json +++ b/src/extensions/uv-pdf-extension/config/en-GB.json @@ -31,7 +31,8 @@ "feedbackEnabled": false, "minimiseButtons": true, "openEnabled": false, - "shareEnabled": true + "shareEnabled": true, + "printEnabled": true } }, "genericDialogue": diff --git a/src/extensions/uv-pdf-extension/l10n/cy-GB.json b/src/extensions/uv-pdf-extension/l10n/cy-GB.json index edc348735..ae93731b9 100644 --- a/src/extensions/uv-pdf-extension/l10n/cy-GB.json +++ b/src/extensions/uv-pdf-extension/l10n/cy-GB.json @@ -37,6 +37,12 @@ "share": "Rhannu" } }, + "pdfFooterPanel": { + "content": { + "print": "print cy-GB" + } + }, + "genericDialogue": { "content": { "ok": "GWELD" diff --git a/src/extensions/uv-pdf-extension/l10n/en-GB.json b/src/extensions/uv-pdf-extension/l10n/en-GB.json index d6efe53c8..90dbbd654 100644 --- a/src/extensions/uv-pdf-extension/l10n/en-GB.json +++ b/src/extensions/uv-pdf-extension/l10n/en-GB.json @@ -98,6 +98,16 @@ "attribution": "Attribution" } }, + + "pdfFooterPanel": { + "content": { + "print": "print" + } + }, + + + + "settingsDialogue": { "content": { "locale": "Locale", diff --git a/src/extensions/uv-pdf-extension/l10n/fr-FR.json b/src/extensions/uv-pdf-extension/l10n/fr-FR.json index 932cf2fad..6732cbdcf 100755 --- a/src/extensions/uv-pdf-extension/l10n/fr-FR.json +++ b/src/extensions/uv-pdf-extension/l10n/fr-FR.json @@ -80,6 +80,11 @@ "share": "Partager" } }, + "pdfFooterPanel": { + "content": { + "print": "print fr-FR" + } + }, "genericDialogue": { "content": { "emptyValue": "veuillez saisir une valeur.", diff --git a/src/extensions/uv-pdf-extension/l10n/sv-SE.json b/src/extensions/uv-pdf-extension/l10n/sv-SE.json index 8563131cd..5f17e6515 100644 --- a/src/extensions/uv-pdf-extension/l10n/sv-SE.json +++ b/src/extensions/uv-pdf-extension/l10n/sv-SE.json @@ -80,6 +80,11 @@ "share": "Dela" } }, + "pdfFooterPanel": { + "content": { + "print": "print sv-SV" + } + }, "genericDialogue": { "content": { "emptyValue": "ange ett värde.", diff --git a/src/modules/uv-pdfcenterpanel-module/PDFCenterPanel.ts b/src/modules/uv-pdfcenterpanel-module/PDFCenterPanel.ts index ec9b85c20..ca9efab8c 100644 --- a/src/modules/uv-pdfcenterpanel-module/PDFCenterPanel.ts +++ b/src/modules/uv-pdfcenterpanel-module/PDFCenterPanel.ts @@ -264,7 +264,7 @@ export class PDFCenterPanel extends CenterPanel { this._pdfDoc = pdfDoc; this._render(this._pageIndex); - this.component.publish(Events.PDF_LOADED, pdfDoc); + this.component.publish(Events.PDF_LOADED, {pdfDoc:pdfDoc,pdfUri:parameter.url}); this._$spinner.hide(); }); } diff --git a/src/modules/uv-pdffooterpanel-module/FooterPanel.ts b/src/modules/uv-pdffooterpanel-module/FooterPanel.ts new file mode 100644 index 000000000..b06aef4d6 --- /dev/null +++ b/src/modules/uv-pdffooterpanel-module/FooterPanel.ts @@ -0,0 +1,741 @@ +//import {AutoComplete} from "../uv-shared-module/AutoComplete"; +//import {BaseEvents} from "../uv-shared-module/BaseEvents"; +import {Events} from "../../extensions/uv-pdf-extension/Events"; +import {FooterPanel as BaseFooterPanel} from "../uv-shared-module/FooterPanel"; +//import {ISeadragonExtension} from "../../extensions/uv-seadragon-extension/ISeadragonExtension"; +//import {Mode} from "../../extensions/uv-seadragon-extension/Mode"; +//import {AnnotationResults} from "../uv-shared-module/AnnotationResults"; +//import {UVUtils} from "../../Utils"; +//import AnnotationGroup = Manifold.AnnotationGroup; + +export class FooterPanel extends BaseFooterPanel { + + // $clearSearchResultsButton: JQuery; + // $line: JQuery; + // $nextResultButton: JQuery; + // $pagePositionLabel: JQuery; + // $pagePositionMarker: JQuery; + // $placemarkerDetails: JQuery; + // $placemarkerDetailsBottom: JQuery; + // $placemarkerDetailsTop: JQuery; + // $previousResultButton: JQuery; + $printButton: JQuery; + // $searchButton: JQuery; + // $searchContainer: JQuery; + // $searchLabel: JQuery; + // $searchOptions: JQuery; + // $searchPagerContainer: JQuery; + // $searchPagerControls: JQuery; + // $searchResultsContainer: JQuery; + // $searchResultsInfo: JQuery; + // $searchText: JQuery; + // $searchTextContainer: JQuery; + + currentPlacemarkerIndex: number; + placemarkerTouched: boolean = false; + terms: string; + + constructor($element: JQuery) { + super($element); + } + + create(): void { + + this.setConfig('pdfFooterPanel'); + + super.create(); + + // this.component.subscribe(BaseEvents.CANVAS_INDEX_CHANGED, () => { + // this.canvasIndexChanged(); + // this.setCurrentSearchResultPlacemarker(); + // this.updatePrevButton(); + // this.updateNextButton(); + // }); + + // this.component.subscribe(BaseEvents.CLEAR_ANNOTATIONS, () => { + // this.clearSearchResults(); + // }); + + // // todo: this should be a setting + // this.component.subscribe(Events.MODE_CHANGED, () => { + // this.settingsChanged(); + // }); + + // this.component.subscribe(Events.SEARCH, (terms: string) => { + // this.terms = terms; + // }); + + // this.component.subscribe(BaseEvents.ANNOTATIONS, (annotationResults: AnnotationResults) => { + // this.displaySearchResults(annotationResults.annotations, annotationResults.terms); + // this.setCurrentSearchResultPlacemarker(); + // this.updatePrevButton(); + // this.updateNextButton(); + // }); + + // this.component.subscribe(BaseEvents.ANNOTATIONS_EMPTY, () => { + // this.hideSearchSpinner(); + // }); + + // this.component.subscribe(BaseEvents.ANNOTATION_CHANGED, () => { + // this.updatePrevButton(); + // this.updateNextButton(); + // }); + + this.$printButton = $(` + + `); + this.$options.prepend(this.$printButton); + + // search input. + // this.$searchContainer = $(''); + // this.$element.prepend(this.$searchContainer); + + // this.$searchOptions = $('
'); + // this.$searchContainer.append(this.$searchOptions); + + // this.$searchLabel = $('' + this.content.searchWithin + ''); + // this.$searchOptions.append(this.$searchLabel); + + // this.$searchTextContainer = $('
'); + // this.$searchOptions.append(this.$searchTextContainer); + + // this.$searchText = $(''); + // this.$searchTextContainer.append(this.$searchText); + + // this.$searchButton = $(''); + // this.$searchTextContainer.append(this.$searchButton); + + // // search results. + // this.$searchPagerContainer = $('
'); + // this.$element.prepend(this.$searchPagerContainer); + + // this.$searchPagerControls = $('
'); + // this.$searchPagerContainer.prepend(this.$searchPagerControls); + + // this.$previousResultButton = $('' + this.content.previousResult + ''); + // this.$searchPagerControls.append(this.$previousResultButton); + + // this.$searchResultsInfo = $('
x \'y\'
'); + // this.$searchPagerControls.append(this.$searchResultsInfo); + + // this.$clearSearchResultsButton = $('' + this.content.clearSearch + ''); + // this.$searchResultsInfo.append(this.$clearSearchResultsButton); + + // this.$nextResultButton = $('' + this.content.nextResult + ''); + // this.$searchPagerControls.append(this.$nextResultButton); + + // // placemarker line. + // this.$searchResultsContainer = $('
'); + // this.$element.prepend(this.$searchResultsContainer); + + // this.$line = $('
'); + // this.$searchResultsContainer.append(this.$line); + + // this.$pagePositionMarker = $('
'); + // this.$searchResultsContainer.append(this.$pagePositionMarker); + + // this.$pagePositionLabel = $('
'); + // this.$searchResultsContainer.append(this.$pagePositionLabel); + + // this.$placemarkerDetails = $('
'); + // this.$searchResultsContainer.append(this.$placemarkerDetails); + + // this.$placemarkerDetailsTop = $('

'); + // this.$placemarkerDetails.append(this.$placemarkerDetailsTop); + + // this.$placemarkerDetailsBottom = $('

'); + // this.$placemarkerDetails.append(this.$placemarkerDetailsBottom); + + // // initialise ui. + // this.$searchPagerContainer.hide(); + // this.$placemarkerDetails.hide(); + + // ui event handlers. + var that = this; + + // this.$searchButton.on('click', (e: any) => { + // e.preventDefault(); + // this.search(this.$searchText.val()); + // }); + + // this.$searchText.on('focus', () => { + // // clear initial text. + // if (this.$searchText.val() === this.content.enterKeyword) this.$searchText.val(''); + // }); + + // this.$placemarkerDetails.on('mouseover', () => { + // that.component.publish(Events.SEARCH_PREVIEW_START, this.currentPlacemarkerIndex); + // }); + + // this.$placemarkerDetails.on('mouseleave', function() { + // $(this).hide(); + + // that.component.publish(Events.SEARCH_PREVIEW_FINISH); + + // // reset all placemarkers. + // var placemarkers = that.getSearchResultPlacemarkers(); + // placemarkers.removeClass('hover'); + // }); + + // this.$placemarkerDetails.on('click', () => { + // that.component.publish(BaseEvents.CANVAS_INDEX_CHANGED, this.currentPlacemarkerIndex); + // }); + + // this.$previousResultButton.on('click', (e: any) => { + // e.preventDefault(); + // if (this.isPreviousButtonEnabled()) { + // that.component.publish(Events.PREV_SEARCH_RESULT); + // } + // }); + + // this.$nextResultButton.on('click', (e: any) => { + // e.preventDefault(); + // if (this.isNextButtonEnabled()) { + // that.component.publish(Events.NEXT_SEARCH_RESULT); + // } + // }); + + // this.$clearSearchResultsButton.on('click', (e: any) => { + // e.preventDefault(); + // that.component.publish(BaseEvents.CLEAR_ANNOTATIONS); + // }); + + // hide search options if not enabled/supported. + // if (!this.isSearchEnabled()) { + // this.$searchContainer.hide(); + // this.$searchPagerContainer.hide(); + // this.$searchResultsContainer.hide(); + // this.$element.addClass('min'); + // } + + // if (this.extension.helper.getTotalCanvases() === 1) { + // this.$searchResultsContainer.hide(); + // } + + //const autocompleteService: string | null = (this.extension).getAutoCompleteUri(); + + // if (autocompleteService) { + + // new AutoComplete(this.$searchText, + // (terms: string, cb: (results: string[]) => void) => { + // $.getJSON(Utils.Strings.format(autocompleteService, terms), (results: string[]) => { + // cb(results); + // }); + // }, + // (results: any) => { + // return $.map(results.terms, (result: any) => { + // return result.match; + // }); + // }, + // (terms: string) => { + // this.search(terms); + // }, + // 300, 2, true, Utils.Bools.getBool(this.options.autocompleteAllowWords, false) + // ); + + // } else { + // this.$searchText.on("keyup", (e) => { + // if (e.keyCode === KeyCodes.KeyDown.Enter) { + // that.search(that.$searchText.val()); + // } + // }); + // } + + this.$printButton.onPressed(() => { + that.component.publish(Events.PRINT); + }); + + this.updatePrintButton(); + + // var positionMarkerEnabled: boolean = Utils.Bools.getBool(this.config.options.positionMarkerEnabled, true); + + // if (!positionMarkerEnabled) { + // this.$pagePositionMarker.hide(); + // this.$pagePositionLabel.hide(); + // } + } + + // isSearchEnabled(): boolean { + // return (this.extension).isSearchEnabled(); + // } + + // isZoomToSearchResultEnabled(): boolean { + // return Utils.Bools.getBool(this.extension.data.config.options.zoomToSearchResultEnabled, true); + // } + + // isPreviousButtonEnabled(): boolean { + + // const currentCanvasIndex: number = this.extension.helper.canvasIndex; + // const firstSearchResultCanvasIndex: number = this.getFirstSearchResultCanvasIndex(); + // const currentSearchResultRectIndex: number = this.getCurrentSearchResultRectIndex(); + + // // if zoom to search result is enabled and there is a highlighted search result. + // if (this.isZoomToSearchResultEnabled() && (this.extension).currentAnnotationRect) { + + // if (currentCanvasIndex < firstSearchResultCanvasIndex) { + // return false; + // } else if (currentCanvasIndex === firstSearchResultCanvasIndex) { + // if (currentSearchResultRectIndex === 0) { + // return false; + // } + // } + + // return true; + // } + + // return (currentCanvasIndex > firstSearchResultCanvasIndex); + // } + + // isNextButtonEnabled(): boolean { + + // const currentCanvasIndex: number = this.extension.helper.canvasIndex; + // const lastSearchResultCanvasIndex: number = this.getLastSearchResultCanvasIndex(); + // const currentSearchResultRectIndex: number = this.getCurrentSearchResultRectIndex(); + + // // if zoom to search result is enabled and there is a highlighted search result. + // if (this.isZoomToSearchResultEnabled() && (this.extension).currentAnnotationRect) { + + // if (currentCanvasIndex > lastSearchResultCanvasIndex) { + // return false; + // } else if (currentCanvasIndex === lastSearchResultCanvasIndex) { + // if (currentSearchResultRectIndex === this.getLastSearchResultRectIndex()) { + // return false; + // } + // } + + // return true; + // } + + // return (currentCanvasIndex < lastSearchResultCanvasIndex); + // } + + // getSearchResults(): AnnotationGroup[] | null { + // return (this.extension).annotations; + // } + + // getCurrentSearchResultRectIndex(): number { + // return (this.extension).getCurrentAnnotationRectIndex(); + // } + + // getFirstSearchResultCanvasIndex(): number { + // const searchResults: AnnotationGroup[] | null = this.getSearchResults(); + // if (!searchResults) return -1; + // let firstSearchResultCanvasIndex: number = searchResults[0].canvasIndex; + // return firstSearchResultCanvasIndex; + // } + + // getLastSearchResultCanvasIndex(): number { + // const searchResults: AnnotationGroup[] | null = this.getSearchResults(); + // if (!searchResults) return -1; + // let lastSearchResultCanvasIndex: number = searchResults[searchResults.length - 1].canvasIndex; + // return lastSearchResultCanvasIndex; + // } + + // getLastSearchResultRectIndex(): number { + // return (this.extension).getLastAnnotationRectIndex(); + // } + + // updateNextButton(): void { + // const searchResults: AnnotationGroup[] | null = this.getSearchResults(); + + // if (searchResults && searchResults.length) { + // if (this.isNextButtonEnabled()) { + // this.$nextResultButton.removeClass('disabled'); + // } else { + // this.$nextResultButton.addClass('disabled'); + // } + // } + // } + + // updatePrevButton(): void { + // const searchResults: AnnotationGroup[] | null = this.getSearchResults(); + + // if (searchResults && searchResults.length) { + // if (this.isPreviousButtonEnabled()) { + // this.$previousResultButton.removeClass('disabled'); + // } else { + // this.$previousResultButton.addClass('disabled'); + // } + // } + // } + + updatePrintButton(): void { + const configEnabled: boolean = Utils.Bools.getBool(this.options.printEnabled, false); + //var printService: Manifesto.IService = this.extension.helper.manifest.getService(manifesto.ServiceProfile.printExtensions()); + + //if (configEnabled && printService && this.extension.isOnHomeDomain()){ + if (configEnabled){ + this.$printButton.show(); + } else { + this.$printButton.hide(); + } + + } + + // search(terms: string): void { + + // this.terms = terms; + + // if (this.terms === '' || this.terms === this.content.enterKeyword) { + // this.extension.showMessage(this.extension.data.config.modules.genericDialogue.content.emptyValue, function(){ + // this.$searchText.focus(); + // }); + + // return; + // } + + // // blur search field + // this.$searchText.blur(); + + // this.showSearchSpinner(); + + // this.component.publish(Events.SEARCH, this.terms); + // } + + // getSearchResultPlacemarkers(): JQuery { + // return this.$searchResultsContainer.find('.searchResultPlacemarker'); + // } + + // setCurrentSearchResultPlacemarker(): void { + // const placemarkers: JQuery = this.getSearchResultPlacemarkers(); + // placemarkers.parent().find('.current').removeClass('current'); + // const $current: JQuery = $('.searchResultPlacemarker[data-index="' + this.extension.helper.canvasIndex + '"]'); + // $current.addClass('current'); + // } + + // positionSearchResultPlacemarkers(): void { + + // const searchResults: AnnotationGroup[] | null = this.getSearchResults(); + + // if (!searchResults || !searchResults.length) return; + + // // clear all existing placemarkers + // const placemarkers: JQuery = this.getSearchResultPlacemarkers(); + // placemarkers.remove(); + + // const pageWidth = this.getPageLineRatio(); + // const lineTop = this.$line.position().top; + // const lineLeft = this.$line.position().left; + + // const that = this; + + // // for each page with a result, place a marker along the line. + // for (let i = 0; i < searchResults.length; i++) { + // const result: AnnotationGroup = searchResults[i]; + // const distance: number = result.canvasIndex * pageWidth; + // const $placemarker: JQuery = $('
'); + + // $placemarker[0].ontouchstart = function (e: any) { that.onPlacemarkerTouchStart.call(this, that) }; + // $placemarker.click(function (e: any) { that.onPlacemarkerClick.call(this, that) }); + // $placemarker.mouseenter(function (e: any) { that.onPlacemarkerMouseEnter.call(this, that) }); + // $placemarker.mouseleave(function (e: any) { that.onPlacemarkerMouseLeave.call(this, e, that) }); + + // this.$searchResultsContainer.append($placemarker); + + // const top: number = lineTop - $placemarker.height(); + // const left: number = lineLeft + distance - ($placemarker.width() / 2); + + // $placemarker.css({ + // top: top, + // left: left + // }); + // } + // } + + // onPlacemarkerTouchStart(that: any): void { + // that.placemarkerTouched = true; + + // //const $placemarker: JQuery = $(this); + // //const index: number = parseInt($placemarker.attr('data-index')); + + // //this.component.publish(Events.VIEW_PAGE, [index]); + // } + + // onPlacemarkerClick(that: any): void { + // if (that.placemarkerTouched) return; + + // that.placemarkerTouched = false; + + // //const $placemarker: JQuery = $(this); + // //const index: number = parseInt($placemarker.attr('data-index')); + + // //this.component.publish(Events.VIEW_PAGE, [index]); + // } + + // onPlacemarkerMouseEnter(that: any): void { + // if (that.placemarkerTouched) return; + + // const $placemarker: JQuery = $(this); + + // $placemarker.addClass('hover'); + + // const canvasIndex: number = parseInt($placemarker.attr('data-index')); + + // that.component.publish(Events.SEARCH_PREVIEW_START, canvasIndex); + + // const $placemarkers: JQuery = that.getSearchResultPlacemarkers(); + // const elemIndex: number = $placemarkers.index($placemarker[0]); + + // that.currentPlacemarkerIndex = canvasIndex; + + // that.$placemarkerDetails.show(); + + // let title: string = "{0} {1}"; + + // if (that.isPageModeEnabled()) { + // const canvas: Manifesto.ICanvas = that.extension.helper.getCanvasByIndex(canvasIndex); + // let label: string | null = Manifesto.LanguageMap.getValue(canvas.getLabel()); + + // if (!label) { + // label = this.extension.helper.manifest.options.defaultLabel; + // } + + // title = Utils.Strings.format(title, that.content.pageCaps, label); + // } else { + // title = Utils.Strings.format(title, that.content.imageCaps, String(canvasIndex + 1)); + // } + + // that.$placemarkerDetailsTop.html(title); + + // const searchResults: AnnotationGroup[] | null = that.getSearchResults(); + + // if (searchResults) { + // const result: AnnotationGroup = searchResults[elemIndex]; + + // let terms: string = ""; + + // if (that.terms) { + // terms = Utils.Strings.ellipsis(that.terms, that.options.elideDetailsTermsCount); + // } + + // let instanceFoundText: string = that.content.instanceFound; + // let instancesFoundText: string = that.content.instancesFound; + // let text: string = ''; + + // if (result.rects.length === 1) { + // text = Utils.Strings.format(instanceFoundText, terms); + // that.$placemarkerDetailsBottom.html(text); + // } else { + // text = Utils.Strings.format(instancesFoundText, String(result.rects.length), terms); + // that.$placemarkerDetailsBottom.html(text); + // } + // } + + // const pos: any = $placemarker.position(); + + // let top: number = pos.top - that.$placemarkerDetails.height(); + // let left: number = pos.left; + + // if (left < that.$placemarkerDetails.width() / 2) { + // left = 0 - ($placemarker.width() / 2); + // } else if (left > that.$line.width() - (that.$placemarkerDetails.width() / 2)) { + // left = that.$line.width() - that.$placemarkerDetails.width() + ($placemarker.width() / 2); + // } else { + // left -= (that.$placemarkerDetails.width() / 2); + // } + + // that.$placemarkerDetails.css({ + // top: top, + // left: left + // }); + // } + + // onPlacemarkerMouseLeave(e: any, that: any): void { + // that.component.publish(Events.SEARCH_PREVIEW_FINISH); + + // const $placemarker: JQuery = $(this); + // const newElement: Element = e.toElement || e.relatedTarget; + // const isChild: number = $(newElement).closest(that.$placemarkerDetails).length; + + // if (newElement != that.$placemarkerDetails.get(0) && isChild === 0) { + // that.$placemarkerDetails.hide(); + // $placemarker.removeClass('hover'); + // } + // } + + // setPageMarkerPosition(): void { + + // if (this.extension.helper.canvasIndex === null) return; + + // // position placemarker showing current page. + // const pageLineRatio: number = this.getPageLineRatio(); + // const lineTop: number = this.$line.position().top; + // const lineLeft: number = this.$line.position().left; + + // const position: number = this.extension.helper.canvasIndex * pageLineRatio; + // const top: number = lineTop; + // let left: number = lineLeft + position; + + // this.$pagePositionMarker.css({ + // top: top, + // left: left + // }); + + // // if the remaining distance to the right is less than the width of the label + // // shift it to the left. + // const lineWidth: number = this.$line.width(); + + // if (left + this.$pagePositionLabel.outerWidth(true) > lineWidth) { + // left -= this.$pagePositionLabel.outerWidth(true); + // this.$pagePositionLabel.removeClass('right'); + // this.$pagePositionLabel.addClass('left'); + // } else { + // this.$pagePositionLabel.removeClass('left'); + // this.$pagePositionLabel.addClass('right'); + // } + + // this.$pagePositionLabel.css({ + // top: top, + // left: left + // }); + // } + + // clearSearchResults(): void { + + // if (!this.isSearchEnabled()) { + // return; + // } + + // // clear all existing placemarkers + // const $placemarkers: JQuery = this.getSearchResultPlacemarkers(); + // $placemarkers.remove(); + + // // clear search input field. + // this.$searchText.val(this.content.enterKeyword); + + // // hide pager. + // this.$searchContainer.show(); + // this.$searchPagerContainer.hide(); + + // // set focus to search box. + // this.$searchText.focus(); + // } + + // getPageLineRatio(): number { + + // const lineWidth: number = this.$line.width(); + + // // find page/width ratio by dividing the line width by the number of pages in the book. + // if (this.extension.helper.getTotalCanvases() === 1) return 0; + + // return lineWidth / (this.extension.helper.getTotalCanvases() - 1); + // } + + // canvasIndexChanged(): void { + // this.setPageMarkerPosition(); + // this.setPlacemarkerLabel(); + // } + + // settingsChanged(): void { + // this.setPlacemarkerLabel(); + // } + + // setPlacemarkerLabel(): void { + + // const displaying: string = this.content.displaying; + // const index: number = this.extension.helper.canvasIndex; + + // if (this.isPageModeEnabled()) { + // const canvas: Manifesto.ICanvas = this.extension.helper.getCanvasByIndex(index); + // let label: string | null = Manifesto.LanguageMap.getValue(canvas.getLabel()); + + // if (!label) { + // label = this.content.defaultLabel; + // } + + // const lastCanvasOrderLabel: string | null = this.extension.helper.getLastCanvasLabel(true); + + // if (lastCanvasOrderLabel) { + // this.$pagePositionLabel.html(Utils.Strings.format(displaying, this.content.page, UVUtils.sanitize(label), UVUtils.sanitize(lastCanvasOrderLabel))); + // } + + // } else { + // this.$pagePositionLabel.html(Utils.Strings.format(displaying, this.content.image, String(index + 1), this.extension.helper.getTotalCanvases().toString())); + // } + // } + + // isPageModeEnabled(): boolean { + // return this.config.options.pageModeEnabled && (this.extension).getMode().toString() === Mode.page.toString() && !Utils.Bools.getBool(this.config.options.forceImageMode, false); + // } + + // showSearchSpinner(): void { + // this.$searchText.addClass('searching'); + // } + + // hideSearchSpinner(): void { + // this.$searchText.removeClass('searching'); + // } + + // displaySearchResults(results: AnnotationGroup[], terms?: string): void { + + // if (!this.isSearchEnabled()) { + // return; + // } + + // this.hideSearchSpinner(); + // this.positionSearchResultPlacemarkers(); + + // // show pager. + // this.$searchContainer.hide(); + + // this.$searchPagerControls.css({ + // 'left': 0 + // }); + + // const $info: JQuery = this.$searchResultsInfo.find('.info'); + // const $number: JQuery = $info.find('.number'); + // const $foundFor: JQuery = $info.find('.foundFor'); + // const $terms: JQuery = $info.find('.terms'); + + // if (terms) { + + // $info.show(); + + // $number.text((this.extension).getTotalAnnotationRects()); + + // if (results.length === 1) { + // $foundFor.html(this.content.resultFoundFor); + // } else { + // $foundFor.html(this.content.resultsFoundFor); + // } + + // $terms.html(Utils.Strings.ellipsis(terms, this.options.elideResultsTermsCount)); + // $terms.prop('title', terms); + + // } else { + // $info.hide(); + // } + + // this.$searchPagerContainer.show(); + + // this.resize(); + // } + + // resize(): void { + // super.resize(); + + // const searchResults: AnnotationGroup[] | null = this.getSearchResults(); + + // if (searchResults && searchResults.length) { + // this.positionSearchResultPlacemarkers(); + // } + + // this.setPageMarkerPosition(); + + // this.$searchPagerContainer.width(this.$element.width()); + + // const center: number = this.$element.width() / 2; + + // // position search pager controls. + // this.$searchPagerControls.css({ + // 'left': center - (this.$searchPagerControls.width() / 2) + // }); + + // // position search input. + // this.$searchOptions.css({ + // 'left': center - (this.$searchOptions.outerWidth() / 2) + // }); + // } +} diff --git a/src/modules/uv-pdffooterpanel-module/css/styles.less b/src/modules/uv-pdffooterpanel-module/css/styles.less new file mode 100644 index 000000000..035270342 --- /dev/null +++ b/src/modules/uv-pdffooterpanel-module/css/styles.less @@ -0,0 +1,293 @@ + +.uv{ + + .footerPanel{ + + @img-path: '../../../modules/uv-searchfooterpanel-module/img/'; + + .searchResults{ + position: relative; + height: 60px; + padding: 30px 9px 0 9px; + + .line{ + background: @gray; + height: 2px; + } + + .searchResultPlacemarker{ + position: absolute; + background: data-uri('@{img-path}placemarker_down.png'); + height: 24px; + width: 18px; + cursor: pointer; + margin: -24 0 0 -9; + + &.hover{ + background: data-uri('@{img-path}placemarker_down_hover.png'); + } + + &.current{ + background: data-uri('@{img-path}placemarker_down_hover.png'); + } + } + + .positionPlacemarker{ + position: absolute; + background: data-uri('@{img-path}placemarker_up.png'); + height: 24px; + width: 18px; + margin: 2px 0 0 -9px; + cursor: pointer; + } + + .placeMarkerDetails{ + position: absolute; + width: 200px; + z-index: 10; + margin: 13px 0 0 9px; + background: #fff; + cursor: pointer; + + h1{ + color: @text-secondary-color; + font-size: @font-size-small; + //border-bottom: 1px solid @gray-light; + font-weight: bold; + //background-image: url('@{img-path}arrow.png'); + background-position: 0 1px; + background-repeat: no-repeat; + margin: 5px; + padding: 0 @padding-small-horizontal @padding-small-vertical 0; + text-transform: none; + } + + p{ + font-size: @font-size-small; + font-weight: bold; + margin: @margin-small; + padding: 0; + color: @text-secondary-color; + } + + .top{ + display: inline; + } + + .bottom{ + display: inline; + } + } + + .label{ + position: absolute; + color: #fff; + margin: 8px @margin-large-horizontal 0 @margin-large-horizontal; + min-width: 160px; + + &.left{ + text-align: right; + } + + &.right{ + text-align: left; + } + } + } + + .search{ + position: relative; + background-color: @panel-dark-bg; + height: 32px; + + .searchTextContainer{ + background: #fff; + float: left; + width: 270px; + //border: 2px solid @gray; + position: relative; + + .autocomplete{ + position: absolute; + background: #fff; + width: 270px; + border: 2px solid @brand-primary-lighter; + list-style-type: none; + -webkit-margin-before: 0px; + -webkit-margin-after: 0px; + -webkit-margin-start: 0px; + -webkit-margin-end: 0px; + -webkit-padding-start: 0px; + margin: 0; + padding: 0; + max-height: 300px; + overflow-y: auto; + overflow-x: hidden; + + .result{ + padding: 4px; + width: 270px; + overflow: hidden; + + &.loading{ + background-image: data-uri(@loader-white-bg); + background-repeat: no-repeat; + background-position: 4px 4px; + height: 25px; + } + + &.selected{ + background: @gray-lighter; + } + } + } + + .searchText{ + width: 245px; + margin: 1px 0 0 0; + font-size: 12px; + height: 22px; + line-height: 22px; + padding: 0; + float: left; + border: none; + + &.searching { + background: data-uri('@{img-path}spinner.gif'); + background-repeat: no-repeat; + background-position: right 3px; + } + } + + a.imageButton.searchButton{ + background: data-uri('@{img-path}search.png'); + background-repeat: no-repeat; + height: 18px; + width: 18px; + margin: 2px 2px 0 0; + float: right; + cursor: pointer; + } + } + } + + .searchOptions{ + position: absolute; + width: 420px; + margin: 4px 0 0 0; + + .label{ + color: #fff; + font-weight: bold; + padding: 0 10px 0 0; + margin: 4px 0 0 0; + float: left; + } + } + + .searchPager{ + position: relative; + background-color: @panel-dark-bg; + height: 32px; + overflow: hidden; + + .controls{ + position: absolute; + margin-top: 1px; + // margin: @margin-small-vertical 0 0 0; + width: 585px; + + a.previousResult{ + .noselect(); + .icon-left('@{img-path}prev.png', 30px, 25px); + line-height: 30px; + float: left; + margin: 0 @margin-medium-horizontal 0 0; + + &.disabled { + .opacity(.25); + } + } + + a.nextResult{ + .noselect(); + .icon-right('@{img-path}next.png', 30px, 25px); + line-height: 30px; + float: right; + margin: 0 0 0 @margin-medium-horizontal; + + &.disabled { + .opacity(.25); + } + } + + a.clearSearch{ + .noselect(); + cursor: pointer; + color: @link-color; + text-decoration: none; + margin: 0 0 0 @margin-medium-horizontal; + font-size: 12px; + } + + .searchResultsInfo{ + margin: 4px 0 0 0; + color: #fff; + text-align: center; + font-size: 14px; + float: left; + width: 345px; + + .number{ + font-weight: bold; + } + + .terms{ + font-weight: bold; + } + } + } + } + } +} + +/* +.uv .footerPanel .searchOptions .autoCompleteWidget { + position: relative; +} + +.uv .footerPanel .searchOptions .autoCompleteWidget input[type="text"]{ + width: 300px; +} + +.uv .footerPanel .searchOptions .autoCompleteWidget .results { + position: absolute; + left: 0; + top: 50px; + overflow-x: hidden; + overflow-y: auto; + overflow: auto; + max-height: 300px; + width: 300px; + background: #fff; + border: 1px solid; +} + +.uv .footerPanel .searchOptions .autoCompleteWidget .results ul{ + list-style-type: none; + margin: 10px; + padding: 0; +} + +.uv .footerPanel .searchOptions .autoCompleteWidget .results ul li{ + padding: 2px; +} + +.uv .footerPanel .searchOptions .autoCompleteWidget .results ul li.selected{ + background: lightgrey; +} + +.uv .footerPanel .searchOptions .autoCompleteWidget .results ul li a:hover{ + text-decoration: none; +} +*/ diff --git a/src/modules/uv-pdffooterpanel-module/img/next.png b/src/modules/uv-pdffooterpanel-module/img/next.png new file mode 100644 index 0000000000000000000000000000000000000000..c3de98023eaf24b13ad9e9ed56ef4d8cf3198309 GIT binary patch literal 1067 zcmbVLy>HV%6gP^fpwNM>bU;^Esz7S|aj_lSYAA{A&`3=PNvdW-b?i%Gwf4F8mAGYN z>rjJ_*}nJg-tYH5?!CQw?f%r{%p}7w zQWc1QpR-dNF7ZQ(W|+mLB($9kL_i1iyr97Tdi#zAo?Bqo2&4b=CRcO%r?t+kxp z4M%g?rMqA;(J6tChz$~dGl=!1z@G5xR8F^f7Mz%njRJcbRJ&RS296Mrxm?x}L=h+o zCrYxShzkG;BIE`7Dp^s|WkrX1FnU<(Epoeh!z_<{QLVuC2?=$c9}EWEAjjdT$BUY# zr5q4usYN#435cC!gLrPtV4~QGypVV}04by0!P}(3(nwEJ@WX2Lj5vr#g`y?n6FcNZ zPT+k%&FjQECJppAjB~By)=r4{28!`^ePU^*3~^uGUvt*75Q2a5!9DU46K+@R4q2 zNTb#q4w>&?rixU}SIlB7`O#VbaBaGL`1+-F!*<{E`?Cl0``iJyKYuX$_0zpQDRa5z iya4U#^3lxJH|Ej=(>t6vlArf literal 0 HcmV?d00001 diff --git a/src/modules/uv-pdffooterpanel-module/img/placemarker_down.png b/src/modules/uv-pdffooterpanel-module/img/placemarker_down.png new file mode 100644 index 0000000000000000000000000000000000000000..53497471bc5e7a43de2fb259f93a53adb40c06e6 GIT binary patch literal 1214 zcmbVLU2GIp6dnqcS{9JD5cI(eQ({1!ou8fE**kVEWoMxqm|CZswwfB9pF7=2J9DQq zx9oNkgH%WW^??Y4kS3Uh2cW`(%7cF>F`5t!kH%np0~6ze32F=^5bkVuiw_MCPBL@P zxpU5UzVmlS(e*UvG3e(^O! zyLOHlNo%|ovl%VY--t7iiiNupc!FMM}n1jerx9Jm-0FUUlmT>+lhcWv!#qOaM6@Mrb;;NI#tJ zrZcJC;{(NpgpKlY=#r)wlPa>NJ?P`2nq$bHr0v>@!&@24;6>JyZIhKv$zijG09X;& zDQKD|FH1%fXF30@P)PH9J`J)$Mj-Mo8At_Dk_8nAvXB>>zC}O6hHt@UY?s7t_)3rU zRq`P;FbYcuO*W@su#7N@$|#`o`Fhvs?IW&lqe`?RZqs7cDh%EI(B2&)kFM8QahKsB zLd&sW3bK-IIjm$!85RJ?VtF|wNGU!GU%*&wH>RFEc&798r%z~O9Uok7NvtPGUFW{tyXMwEL|TFMfgx(= zZ$CRkd8?@Qm8v)K@mJTsO($0Wpl|KF#{PaEU7SC8>d@V}LwD}A^XBy%w+lx$U6?(n z&7b}I%+A>>&z)%h!`6Ea*q82HIyQWJ_?3n8-9cjEedPpf-SPnD0__BrNG6JE6&@x6wSVoxl0CjZ9@hk&KJ@{Jdm>R_LaYGKELpDTCFrJJk(~W&mIh4- z9#7EQP7P-VK?*q#M1#GI#)TpvCImy#-k1AFaZEbyhy}iACetv#wX(J@uh8H8uz|*;E_rtqCjXcWTnwzZ0_0L|tH0ysc_uoo7>T(@1UO%T0(byqWn0U~u!wj7!I;gx zO^2gMrm&~$A=qvvvq|ju8;QaxW9pjAaAB6Q?I5le+DAF?j~iQ}{lb_Fm>lrosAu4M zlsenWICn2M6acX|(lO7%MbSnSXpGvxK`BM1@JraVOsT{gaYJKyS{F>67W8O|?$$Vw z=0!6CbX{kKsMhA$N?(Zx@gx_CtDGuwoEq&{g{UHQiyW^e6Nz}Ft($Uuq&Ws?+qSUn z4c*vFb)}>SGz7f@gd^=P7^*-7{R(u+WU^It^4;T>W5Sw$FeuY{)C%ydbHE(%piQ>& zELmIl@ZaKJ*Ej!f{ut~O6Ew@enx}n*J2E(Kjsg}ohY2`%f;>DbmG~E5<1rf?N*C0* zxw%j%w79rftyY(omL?`9*4Ea#y1JH^mjM8)tE-JhV`XJ!dU|?lYRdQh`T6c`)7 tNc&Ho|NXT;cXGeo{^irY^a{DUAHL`uyn-zCmm`Wr*Kx+VYs literal 0 HcmV?d00001 diff --git a/src/modules/uv-pdffooterpanel-module/img/prev.png b/src/modules/uv-pdffooterpanel-module/img/prev.png new file mode 100644 index 0000000000000000000000000000000000000000..e70d135bcab57b10949230840291eca4e49f2f60 GIT binary patch literal 1070 zcmbVL&ui0A91jd+oA&NJ$TP)Xu;y2PCajLNNnLTRwe7GV$kODs4O{YJ@@BK0WXyvX z5fu;OVHZyW!Gk9cf;dpGP6Tgy7X1_IH*GULj0uJ$@B4l4`}ur-yzlp3t$H~&eQKIv zm{@sHt;2dc{3a*hf8yuO2e8agtwkH8L;JdinFW)yF)G`77uT_FZru8S=NM+9V>Mf} zRasIDVsmE-i<=&9Y*w4b z=Bgo^?EED(7brkrW2&RTUUPgU$g@LU1>|s>XVK7vuIAZMP_0T06^VyYnoA}OK@?FY z!-=VMCL_)wNf0GofH#v6Q%X9cNLe&~Sn%eV9i^_8#=bzyvpq^(h3EVIKG#oj#Ov~+ zEXyH>BqhKi;cqxp4-$?aj~G-0T=gut6n#x4#=4Ci zT2}KcoN%UPDp^TN%TPc$mlL#`Y%6g{j{;x!3bi#njzBb4|(;-X?BgDzaR z9Fz3@i{bT*vQ@EX-Nt6gBQ_e=SFsN9|L?pWn256Z#t zU>g}R(0a8o7%*Qx#uh+T%IZQh_}X51 zd;DbS`OB%DD@oz|qt42^^RdT!@z}$?MC{4g8&B_i+kRGhZ)|Vft?k@DrwPoYz;s_7 T`?O0w?*a=`)~f1@!phcf3D8Xt literal 0 HcmV?d00001 diff --git a/src/modules/uv-pdffooterpanel-module/img/search.png b/src/modules/uv-pdffooterpanel-module/img/search.png new file mode 100644 index 0000000000000000000000000000000000000000..6494c2a46949bc7d6cb771a03857993680af2280 GIT binary patch literal 380 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+3?vf;>QaFebFq_W2nPqp?T7vkfLx~lpAgrX zGiQGL_HEOqP51BLKXmBOym|B9ym@o!(xpX<7XAPKf9uw*D_5@k`0?ZZ{rew3eth)k z(LaCweE$6T=FOYSmMwen;>DRWXWrefdjd3#v%n*=n1O*CXe+l6~?~t{7dOTeI+^{gv0e Y&38FhKGgI}0y>Go)78&qol`;+0PRkq{Qv*} literal 0 HcmV?d00001 diff --git a/src/modules/uv-pdffooterpanel-module/img/spinner.gif b/src/modules/uv-pdffooterpanel-module/img/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..148005da279b97c0acc697d48a815645977dc723 GIT binary patch literal 1737 zcmYk+ZA?>H8o=>msePlC7H(UlOeuva6-udX=eG2X-nQJ9g5||K3}WrHKr7Zx(JnHq zYm9Sl?~UuSa${USIL0u>7~?RkfNPD*`ob8-IL0xKV;t8tt}(_n#yG|p*O+y6r*3#Y zo}4H7<@}T5Z^5mNF)7XZ9@^9BHL{rdI2d-q18QMcRe^ZC;0^r1tCZr{Fr`0(NC z>T0c4YcLp46m_{=$z<~M>C@%q<(W+8@#Du&o;;bKpWn4>S4T%jBoaAu=FHWrS8X<% zOePx}8#{LFSU4Qswr$(Jd-rIX7KucIgM$YS97rS*Cr_Tlaah-n{wj*|S@>Zf)JV^~8x2Gcz-7ZEam$UA?`%eSLi% zkH_I~T)1#yWMsr>G(LLtsJ6Ct_wL<2Jv};|PN`H*OiYAAq2l7=ojZ393=Ejf=8G3E zUcP+!!Gi~U=R0Kh!QmGv~cD#M_U#IdvW!_9YHXI*NeZFCMP!&tY zMpHwv0sV$_VhB|Jn+*hSFIK)O3^fz0y;w)HQEw<%^7csgZvS0G!2RP60Ld&xDXLb~ z(-g0~x>gTSn}re-e(+&k1GE^ND9Pd!D`^x#_JM-Jk}=?HazeIHGHr4Z{<1uku9sN;jT0*bq@ZR zy5l(W&#&;^(fMKyE012XSU8p!+6zAE5w2aQpn;?GDKjD1idkWAsSnflj1#qo+1HjNgl{r4E%i_$QP7s;6!vR z8hE*_oFdUOVKPNoBkKn{rBZL#Mj?+>4}=`_V10)I_KOn?5P!A~>PlR>U^)qn0Yi?^ z*F&Y*l%qb9`>$rBac>T_kw``2EM;^4K>9zbzzB=QfHX)^%I(#9J(%6yaGS>Yip)z@ z@t=GD;?C;|7VF0Ix+bks9I8zDY0xO=)+}GYHW><1SXCgUz@46TMePof&={?B;?p)e zZ0y!DARsJ&K^;FQ+4u=eC2TpQ_+vPf`i>z!$UvE+FBkl*75cTVT&T7R;!&%b*|ZEJ z8={SB1GGE`n<=E3#a9zf6Po_lgbEifEnPCSq8#DnjqJt7_lc3%P+X~zG|_-xw>d61 z2TF`G%I6Ts+$IxC@S(Vj#H|iH9aNRLp}SwffcV-JbXkdlVSeGHzfRj z;-!m$?-Lu`joLa1hR}e(to^|X-e!S|k}9Hp0=22jy1OwFb-Nm9k2&54o&0Z@p)Ls| zd?p6CxPyP4Ig3ZQP&&S_ss^g$zU%9$HNRND; z4%e^AlsXu!YD1y$%HE%U`TFj}`^22Zx}EvN7H5;)Wmg+$U?Y5d7Ur>bswq_3ATPx0w-9QSx`*AL7f4I3iUbdbvlHZ_8bb`@^p|+G4|{ zQXHj8)Py5_KA)4)&^Dymj*!?g{WyWSOt7jpG!FPOA8f6zn?k&eurN$ap}~GAtUohu zt2hbPuhCBVdL=MkxMfPB!yv1*XEQC6^A^BR$FQ-}iDRisxq_-wwI|zFMYzh?xSzLj Wc_{4u<=a1<$G!l-{_f-Z-~1P&zb^m) literal 0 HcmV?d00001 diff --git a/src/modules/uv-searchfooterpanel-module/FooterPanel.ts b/src/modules/uv-searchfooterpanel-module/FooterPanel.ts index d259fbffe..c6aa18258 100644 --- a/src/modules/uv-searchfooterpanel-module/FooterPanel.ts +++ b/src/modules/uv-searchfooterpanel-module/FooterPanel.ts @@ -371,6 +371,7 @@ export class FooterPanel extends BaseFooterPanel { } else { this.$printButton.hide(); } + } search(terms: string): void { diff --git a/src/uv.html b/src/uv.html index fe1f13836..bb59dd5d9 100644 --- a/src/uv.html +++ b/src/uv.html @@ -42,7 +42,8 @@ uv = createUV('#uv', { root: '.', - iiifResourceUri: urlDataProvider.get('manifest'), + iiifResourceUri: 'http://wellcomelibrary.org/iiif/b17502792/manifest', + //iiifResourceUri: 'http://wellcomelibrary.org/iiif/b18035723/manifest', configUri: urlDataProvider.get('config'), collectionIndex: Number(urlDataProvider.get('c', 0)), manifestIndex: Number(urlDataProvider.get('m', 0)), From 2b8a0c1b9f8ab880332e1b40d8430b42723b1b68 Mon Sep 17 00:00:00 2001 From: Kumar Ochani Date: Wed, 26 Feb 2020 12:26:27 +0000 Subject: [PATCH 02/17] code refactoring for print pdf --- src/extensions/uv-pdf-extension/Extension.ts | 99 +++---------------- .../uv-seadragon-extension/dependencies.js | 1 + .../uv-virtex-extension/dependencies.js | 2 + src/uv.html | 3 +- 4 files changed, 19 insertions(+), 86 deletions(-) diff --git a/src/extensions/uv-pdf-extension/Extension.ts b/src/extensions/uv-pdf-extension/Extension.ts index bd1128e2d..a14a55f43 100644 --- a/src/extensions/uv-pdf-extension/Extension.ts +++ b/src/extensions/uv-pdf-extension/Extension.ts @@ -33,6 +33,7 @@ export class Extension extends BaseExtension implements IPDFExtension { leftPanel: ResourcesLeftPanel; rightPanel: MoreInfoRightPanel; settingsDialogue: SettingsDialogue; + $printFrame:any; private _pdfUri:string = ''; @@ -89,108 +90,38 @@ export class Extension extends BaseExtension implements IPDFExtension { } print(){ + if(this.$printFrame) + { + this.$printFrame.remove(); + } - //var pdfWindow:Window = window.open(window.location.protocol+'//'+window.location.hostname+':'+window.location.port+'/examples/uv/pdfjsbuild/generic/web/viewer.html?file='+this._pdfUri) as Window; - //pdfWindow.print(); - - this.printPdf(window.location.protocol+'//'+window.location.hostname+':'+window.location.port+'/examples/uv/pdfjsbuild/generic/web/viewer.html?file='+this._pdfUri); - - //this.printPdf(this._pdfUri); - } - - printPdf = function (url) { - - //printJS = new printJS(); - //console.log(printJS); - - // require(['lib/print'], function(printJS){ - // printJS(url); - // }) + this.$printFrame = $(''); - //var iframe = this._printIframe; - //if (!this._printIframe) { - //iframe = this._printIframe = document.createElement('iframe'); - //iframe.setAttribute("id","pdf-frame"); - var $printFrame = $(''); - //document.body.appendChild(iframe); + $('body').append(this.$printFrame); - $('body').append($printFrame); + this.$printFrame.attr("id", "pdf_frame" ); + this.$printFrame.attr("style", "visibility:hidden" ); - $printFrame.attr("id", "pdf-frame" ); + var that = this; $.ajax({ - url:'https://dlcs.io/file/wellcome/5/b17502792_Science%20and%20the%20Public.pdf', - //dataType: 'binary', + url:this._pdfUri, xhrFields: { responseType: 'blob' }, success:function(data){ - //console.log(data); //ArrayBuffer - //console.log(new Blob([data])) // Blob - var objectURL = URL.createObjectURL(data); - alert('iffrrf'); - - $printFrame.attr("src", '' ); - $printFrame.attr("src", objectURL ); - //iframe.src = ''; - //iframe.src = objectURL; + that.$printFrame.attr("src", objectURL ); URL.revokeObjectURL(objectURL); window.setTimeout(() => { - var printIFrame:any = $printFrame.get(0); + var printIFrame:any = that.$printFrame.get(0); printIFrame.contentWindow.print(); - //$printFrame.remove(); }, 10) },error: function (xhr, ajaxOptions, thrownError) { - $printFrame.remove(); + that.$printFrame.remove(); } }) - -// fetch('https://dlcs.io/file/wellcome/5/b17502792_Science%20and%20the%20Public.pdf').then(function(response) { -// return response.blob(); -// }).then((myBlob) => { -// var objectURL = URL.createObjectURL(myBlob); -// alert('iffrrf'); -// iframe.src = ''; -// iframe.src = objectURL; -// URL.revokeObjectURL(objectURL); -// }).then( -// function() { -// window.setTimeout(() => { -// iframe.contentWindow.print(); -// }, 1000) -// }); - //} - - - // var iframe = this._printIframe; - // if (!this._printIframe) { - // iframe = this._printIframe = document.createElement('iframe'); - // document.body.appendChild(iframe); - - // alert('frame ready'); - - // //iframe.style.visibility = 'hidden'; - // // iframe.onload = function() { - // // alert('fijioe'); - // // setTimeout(function() { - // // iframe.focus(); - // // iframe.print(); - // // }, 1); - // // }; - // } - - //iframe.src = url; - - - // var objFra:any = document.createElement('iframe'); // Create an IFrame. - // //objFra.style.visibility = "hidden"; // Hide the frame. - // objFra.src = url; // Set source. - // document.body.appendChild(objFra); // Add the frame to the web page. - // objFra.contentWindow.focus(); - // alert('hi') ; // Set focus.; - // objFra.contentWindow.print(); // Print it. - } + } render(): void { super.render(); diff --git a/src/extensions/uv-seadragon-extension/dependencies.js b/src/extensions/uv-seadragon-extension/dependencies.js index 5730f984d..a42bc48d9 100644 --- a/src/extensions/uv-seadragon-extension/dependencies.js +++ b/src/extensions/uv-seadragon-extension/dependencies.js @@ -2,6 +2,7 @@ define(function () { return function (formats) { return { async: ['TreeComponent', 'GalleryComponent', 'MetadataComponent', 'openseadragon.min'] + //async: ['TreeComponent', 'iiifgallery.proxy', 'GalleryComponent', 'MetadataComponent', 'openseadragon.min'] }; }; }); diff --git a/src/extensions/uv-virtex-extension/dependencies.js b/src/extensions/uv-virtex-extension/dependencies.js index eb319b45c..7a921b47c 100644 --- a/src/extensions/uv-virtex-extension/dependencies.js +++ b/src/extensions/uv-virtex-extension/dependencies.js @@ -3,6 +3,8 @@ define(function () { return { sync: ['three.min'], async: ['VRControls', 'VREffect', 'stats.min', 'OBJLoader', 'MTLLoader', 'PLYLoader', 'GLTFLoader', 'Detector', 'WebVR', 'virtex', 'MetadataComponent'] + // sync: ['three.min', 'draco_decoder'], + // async: ['VRControls', 'VREffect', 'stats.min', 'DRACOLoader', 'GLTFLoader', 'OBJLoader', 'MTLLoader', 'Detector', 'WebVR', 'virtex', 'iiif-metadata-component'] }; }; }); diff --git a/src/uv.html b/src/uv.html index bb59dd5d9..ebb68c7f8 100644 --- a/src/uv.html +++ b/src/uv.html @@ -42,8 +42,7 @@ uv = createUV('#uv', { root: '.', - iiifResourceUri: 'http://wellcomelibrary.org/iiif/b17502792/manifest', - //iiifResourceUri: 'http://wellcomelibrary.org/iiif/b18035723/manifest', + iiifResourceUri: urlDataProvider.get('manifest'), configUri: urlDataProvider.get('config'), collectionIndex: Number(urlDataProvider.get('c', 0)), manifestIndex: Number(urlDataProvider.get('m', 0)), From 34538310ba92df1697360dbe1af25006f13b50b5 Mon Sep 17 00:00:00 2001 From: Ali Mohammad Date: Mon, 2 Mar 2020 16:22:12 +0000 Subject: [PATCH 03/17] print PDf work --- examples | 2 +- package-lock.json | 21 +-- package.json | 2 +- src/extensions/uv-pdf-extension/Extension.ts | 163 ++++++++++++++---- .../uv-pdf-extension/theme/theme.less | 40 ++++- .../uv-pdfcenterpanel-module/css/styles.less | 2 +- 6 files changed, 175 insertions(+), 55 deletions(-) diff --git a/examples b/examples index 274f68392..ebf0160d6 160000 --- a/examples +++ b/examples @@ -1 +1 @@ -Subproject commit 274f683924b53abf829c6c4d3810a91074292625 +Subproject commit ebf0160d670b0993380271e9f00f707f20bbb741 diff --git a/package-lock.json b/package-lock.json index 0e0c2a0c8..53c43dd60 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2668,7 +2668,7 @@ }, "eventemitter2": { "version": "0.4.14", - "resolved": "http://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", "dev": true }, @@ -4414,9 +4414,9 @@ } }, "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -4452,7 +4452,7 @@ "dependencies": { "async": { "version": "1.5.2", - "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true } @@ -9392,11 +9392,6 @@ } } }, - "print-js": { - "version": "1.0.63", - "resolved": "https://registry.npmjs.org/print-js/-/print-js-1.0.63.tgz", - "integrity": "sha512-WKf79bFeqJpwx5vcjvEuL0J1bRVA5QlKQY+usFksOx0WOApSJwQGgMlgM2PVub/R1uUMF4onc2SWRWPNz4R40g==" - }, "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", @@ -10495,9 +10490,9 @@ } }, "sprintf-js": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.1.tgz", - "integrity": "sha1-Nr54Mgr+WAH2zqPueLblqrlA6gw=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", "dev": true }, "sshpk": { diff --git a/package.json b/package.json index 2aa725c94..08f093377 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "chalk": "0.5.1", "glob": "7.1.3", "glob-array": "1.0.0", - "grunt": "1.0.3", + "grunt": "^1.0.3", "grunt-cli": "1.3.1", "grunt-contrib-clean": "0.4.0", "grunt-contrib-compress": "1.4.3", diff --git a/src/extensions/uv-pdf-extension/Extension.ts b/src/extensions/uv-pdf-extension/Extension.ts index a14a55f43..7fac3d245 100644 --- a/src/extensions/uv-pdf-extension/Extension.ts +++ b/src/extensions/uv-pdf-extension/Extension.ts @@ -2,7 +2,6 @@ import {BaseEvents} from "../../modules/uv-shared-module/BaseEvents"; import {BaseExtension} from "../../modules/uv-shared-module/BaseExtension"; import {Bookmark} from "../../modules/uv-shared-module/Bookmark"; import {DownloadDialogue} from "./DownloadDialogue"; -//import {FooterPanel} from "../../modules/uv-shared-module/FooterPanel"; import { FooterPanel } from "../../modules/uv-pdffooterpanel-module/FooterPanel"; import {IPDFExtension} from "./IPDFExtension"; import {MoreInfoRightPanel} from "../../modules/uv-moreinforightpanel-module/MoreInfoRightPanel"; @@ -11,13 +10,10 @@ import {PDFHeaderPanel} from "../../modules/uv-pdfheaderpanel-module/PDFHeaderPa import {ResourcesLeftPanel} from "../../modules/uv-resourcesleftpanel-module/ResourcesLeftPanel"; import {SettingsDialogue} from "./SettingsDialogue"; import {ShareDialogue} from "./ShareDialogue"; +//import {Dialogue} from "../../modules/uv-shared-module/Dialogue"; + import IThumb = Manifold.IThumb; import { Events } from "../uv-pdf-extension/Events"; -//import * as d from '../../../node_modules/print-js/src/index'; -//import printJS = require("../../../node_modules/print-js/src/index"); - -//var printJS = require("../../../node_modules/print-js/src/index"); -//declare var printJS: any; export class Extension extends BaseExtension implements IPDFExtension { @@ -35,7 +31,12 @@ export class Extension extends BaseExtension implements IPDFExtension { settingsDialogue: SettingsDialogue; $printFrame:any; - private _pdfUri:string = ''; + private _pdfDoc:any; + private _currentPage:number = -1; + private _printContainer: any; + private _scratchCanvas:any; + private _spinner:JQuery; + private _activePrint:boolean; create(): void { @@ -69,7 +70,7 @@ export class Extension extends BaseExtension implements IPDFExtension { }); this.component.subscribe(Events.PDF_LOADED, (pdfDetails: any) => { - this._pdfUri = pdfDetails.pdfUri; + this._pdfDoc = pdfDetails.pdfDoc; }); this.component.subscribe(Events.PRINT, () => { @@ -87,42 +88,116 @@ export class Extension extends BaseExtension implements IPDFExtension { this.resize(); }, 10); // allow time to exit full screen, then resize }); + + } - print(){ - if(this.$printFrame) - { - this.$printFrame.remove(); + getCanvasContext(viewport, printUnits){ + let width = Math.floor(viewport.width * printUnits); + let height = Math.floor(viewport.height * printUnits); + + this._scratchCanvas.width = width; + this._scratchCanvas.height = height; + + const ctx = this._scratchCanvas.getContext("2d"); + if (ctx == null) + return null; + + ctx.fillStyle = "rgb(255, 255, 255)"; + ctx.fillRect(0, 0, width, height); + + return ctx; + } + + renderPage(pageNumber) { + const PRINT_UNITS = 0.72 * 2; + + return this._pdfDoc + .getPage(pageNumber) + .then((pdfPage) => { + //get pdf viewport + let viewport = pdfPage.getViewport(1); + + let ctx = this.getCanvasContext(viewport, PRINT_UNITS); + + const renderContext = { + canvasContext: ctx, + transform: [PRINT_UNITS, 0, 0, PRINT_UNITS, 0, 0], + viewport: viewport + }; + + return pdfPage.render(renderContext); + }); + } + + useRenderedPage() { + const img = document.createElement("img"); + + const scratchCanvas = this._scratchCanvas; + if ("toBlob" in scratchCanvas) { + scratchCanvas.toBlob(function(blob) { + img.src = URL.createObjectURL(blob); + }); + } else { + img.src = scratchCanvas.toDataURL(); } + + const wrapper = document.createElement("div"); + wrapper.appendChild(img); + this._printContainer.appendChild(wrapper); + + return new Promise(function(resolve, reject) { + img.onload = resolve; + img.onerror = reject; + }); + } - this.$printFrame = $(''); - - $('body').append(this.$printFrame); - - this.$printFrame.attr("id", "pdf_frame" ); - this.$printFrame.attr("style", "visibility:hidden" ); - - var that = this; - - $.ajax({ - url:this._pdfUri, - xhrFields: { - responseType: 'blob' - }, - success:function(data){ - var objectURL = URL.createObjectURL(data); - that.$printFrame.attr("src", objectURL ); - URL.revokeObjectURL(objectURL); - window.setTimeout(() => { - var printIFrame:any = that.$printFrame.get(0); - printIFrame.contentWindow.print(); - }, 10) - },error: function (xhr, ajaxOptions, thrownError) { - that.$printFrame.remove(); - } - }) + renderPages() { + if(!this._pdfDoc){ + return new Promise(() => { + throw new Error(); + }); } + const pageCount = this._pdfDoc.numPages; + const renderNextPage = (resolve, reject) => { + + if (++this._currentPage >= pageCount) { + resolve(); + return; + } + + const index = this._currentPage; + this.renderPage(index + 1) + .then(this.useRenderedPage.bind(this)) + .then(function() { + renderNextPage(resolve, reject); + }, reject); + }; + + return new Promise(renderNextPage); + } + + print(){ + if(this._activePrint) + return; + + this._activePrint = true; + this._spinner.show(); + + let rederedPages = this.renderPages(); + rederedPages.then(() => { + this._spinner.hide(); + window.print(); + this._activePrint = false; + }); + + rederedPages.catch((r)=> { + this._spinner.hide(); + this._activePrint = false; + }); + } + render(): void { super.render(); } @@ -176,6 +251,18 @@ export class Extension extends BaseExtension implements IPDFExtension { this.shell.$overlays.append(this.$settingsDialogue); this.settingsDialogue = new SettingsDialogue(this.$settingsDialogue); + this._spinner = $("div.spinner"); // get spinner reference + + //init print container and scratch canvas to hold the rendered page + //if we're using PDF.js + if (Utils.Bools.getBool(this.centerPanel.extension.data.config.options.usePdfJs, false)) { + this._printContainer = document.createElement("div"); + this._printContainer.setAttribute("id","printContainer"); + document.body.appendChild(this._printContainer); + + this._scratchCanvas = document.createElement("canvas"); + } + if (this.isLeftPanelEnabled()) { this.leftPanel.init(); } diff --git a/src/extensions/uv-pdf-extension/theme/theme.less b/src/extensions/uv-pdf-extension/theme/theme.less index b97faf5d7..b91bfcb63 100644 --- a/src/extensions/uv-pdf-extension/theme/theme.less +++ b/src/extensions/uv-pdf-extension/theme/theme.less @@ -9,4 +9,42 @@ @theme-path: '../../../themes/@{theme}/'; @theme-assets-path: '@{theme-path}assets/'; -@import '@{theme-path}theme.less'; \ No newline at end of file +@import '@{theme-path}theme.less'; + +#printContainer +{ + display: none; +} + +@page{ + margin:0; +} + +@media print { + body > * { + display: none; + } + + body{ + padding:1px; + } + + #printContainer + { + display: block; + } + + /* wrapper around (scaled) print canvas elements */ + #printContainer > div { + overflow: visible; + page-break-after: always; + page-break-inside: avoid; + page-break-before: avoid; + } + + // #printContainer canvas, + #printContainer img { + display: block; + width: 100%; + } +} \ No newline at end of file diff --git a/src/modules/uv-pdfcenterpanel-module/css/styles.less b/src/modules/uv-pdfcenterpanel-module/css/styles.less index 13bb65dda..8b45a0fe5 100644 --- a/src/modules/uv-pdfcenterpanel-module/css/styles.less +++ b/src/modules/uv-pdfcenterpanel-module/css/styles.less @@ -98,4 +98,4 @@ } } } -} \ No newline at end of file +} From a8f655410c888648a10bb8696c6c56d54c2eccab Mon Sep 17 00:00:00 2001 From: Kumar Ochani Date: Wed, 4 Mar 2020 11:05:22 +0000 Subject: [PATCH 04/17] Skeleton code and Print icon added for Epubs --- examples | 2 +- src/extensions/uv-ebook-extension/Events.ts | 2 + .../uv-ebook-extension/Extension.ts | 121 +++++++- .../uv-ebook-extension/config/en-GB.json | 2 +- .../uv-ebook-extension/l10n/cy-GB.json | 5 + .../uv-ebook-extension/l10n/en-GB.json | 6 + .../uv-ebook-extension/l10n/fr-FR.json | 5 + .../uv-ebook-extension/l10n/sv-SE.json | 5 + .../EbookCenterPanel.ts | 6 + .../uv-ebookfooterpanel-module/FooterPanel.ts | 44 +++ .../css/styles.less | 293 ++++++++++++++++++ .../uv-ebookfooterpanel-module/img/next.png | Bin 0 -> 1067 bytes .../img/placemarker_down.png | Bin 0 -> 1214 bytes .../img/placemarker_down_hover.png | Bin 0 -> 1255 bytes .../img/placemarker_up.png | Bin 0 -> 1250 bytes .../uv-ebookfooterpanel-module/img/prev.png | Bin 0 -> 1070 bytes .../uv-ebookfooterpanel-module/img/search.png | Bin 0 -> 380 bytes .../img/spinner.gif | Bin 0 -> 1737 bytes 18 files changed, 488 insertions(+), 3 deletions(-) create mode 100644 src/modules/uv-ebookfooterpanel-module/FooterPanel.ts create mode 100644 src/modules/uv-ebookfooterpanel-module/css/styles.less create mode 100644 src/modules/uv-ebookfooterpanel-module/img/next.png create mode 100644 src/modules/uv-ebookfooterpanel-module/img/placemarker_down.png create mode 100644 src/modules/uv-ebookfooterpanel-module/img/placemarker_down_hover.png create mode 100644 src/modules/uv-ebookfooterpanel-module/img/placemarker_up.png create mode 100644 src/modules/uv-ebookfooterpanel-module/img/prev.png create mode 100644 src/modules/uv-ebookfooterpanel-module/img/search.png create mode 100644 src/modules/uv-ebookfooterpanel-module/img/spinner.gif diff --git a/examples b/examples index ebf0160d6..1d3348921 160000 --- a/examples +++ b/examples @@ -1 +1 @@ -Subproject commit ebf0160d670b0993380271e9f00f707f20bbb741 +Subproject commit 1d33489212880b9e889a9639ae57b667698c21ff diff --git a/src/extensions/uv-ebook-extension/Events.ts b/src/extensions/uv-ebook-extension/Events.ts index 8a7a5bd7e..c1c64f566 100644 --- a/src/extensions/uv-ebook-extension/Events.ts +++ b/src/extensions/uv-ebook-extension/Events.ts @@ -7,4 +7,6 @@ export class Events { static RELOCATED: string = Events.namespace + "relocated"; static RENDITION_ATTACHED: string = Events.namespace + "renditionAttached"; static TOC_READY: string = Events.namespace + "tocReady"; + static PRINT: string = Events.namespace + 'print'; + static EBOOK_PATH_READY: string = Events.namespace + "ebookPathReady"; } \ No newline at end of file diff --git a/src/extensions/uv-ebook-extension/Extension.ts b/src/extensions/uv-ebook-extension/Extension.ts index dfe650425..ae3cfd650 100644 --- a/src/extensions/uv-ebook-extension/Extension.ts +++ b/src/extensions/uv-ebook-extension/Extension.ts @@ -4,7 +4,7 @@ import { EbookLeftPanel } from "../../modules/uv-ebookleftpanel-module/EbookLeft import { Events } from "./Events"; import { DownloadDialogue } from "./DownloadDialogue"; import { EbookCenterPanel } from "../../modules/uv-ebookcenterpanel-module/EbookCenterPanel"; -import { FooterPanel } from "../../modules/uv-shared-module/FooterPanel"; +import { FooterPanel } from "../../modules/uv-ebookfooterpanel-module/FooterPanel"; import { FooterPanel as MobileFooterPanel } from "../../modules/uv-ebookmobilefooterpanel-module/MobileFooter"; import { HeaderPanel } from "../../modules/uv-shared-module/HeaderPanel"; import { IEbookExtension } from "./IEbookExtension"; @@ -33,6 +33,12 @@ export class Extension extends BaseExtension implements IEbookExtension { shareDialogue: ShareDialogue; cfiFragement: string; + private _toc:any; + //private _activePrint:boolean; + private _spinner:JQuery; + //private _currentTocItemIndex:number = -1; + private _ebookPath:string; + create(): void { super.create(); @@ -44,6 +50,24 @@ export class Extension extends BaseExtension implements IEbookExtension { this.cfiFragement = cfi; this.fire(Events.CFI_FRAGMENT_CHANGED, this.cfiFragement); }); + + this.component.subscribe(Events.EBOOK_PATH_READY, (ebookPath) => { + alert(ebookPath); + this._ebookPath = ebookPath; + }); + + this.component.subscribe(Events.PRINT, () => { + + if(this._ebookPath){ + this.print(); + } + }); + + this.component.subscribe(Events.LOADED_NAVIGATION, (navigation: any) => { + alert('toc loaded'); + this._toc = navigation.toc; + alert(this._toc); + }); } dependencyLoaded(_index: number, _dep: any): void { @@ -111,6 +135,101 @@ export class Extension extends BaseExtension implements IEbookExtension { if (this.isFooterPanelEnabled()) { this.footerPanel.init(); } + + this._spinner = $("div.spinner"); + this._spinner.hide(); + } + + print(){ + // TODO Printing Implementation + alert('Printing Done'); + + // if(this._activePrint) + // return; + + // this._activePrint = true; + // this._spinner.show(); + + // let rederedPages = this.renderBookContents(); + // rederedPages.then(() => { + // this._spinner.hide(); + // window.print(); + // this._activePrint = false; + // }); + + // rederedPages.catch((r)=> { + // this._spinner.hide(); + // this._activePrint = false; + // }); + } + + renderBookContents() { + // if(!this._toc){ + // return new Promise(() => { + // throw new Error(); + // }); + // } + + // const tocLength = this._toc.legth; + // const renderNextItem = (resolve, reject) => { + + // if (++this._currentTocItemIndex >= tocLength) { + // resolve(); + // return; + // } + + // const index = this._currentTocItemIndex; + // this.renderContent(index + 1) + // .then(this.useRenderedContent.bind(this)) + // .then(function() { + // renderNextItem(resolve, reject); + // }, reject); + // }; + + // return new Promise(renderNextItem); + } + + useRenderedContent() { + // const img = document.createElement("img"); + + // const scratchCanvas = this._scratchCanvas; + // if ("toBlob" in scratchCanvas) { + // scratchCanvas.toBlob(function(blob) { + // img.src = URL.createObjectURL(blob); + // }); + // } else { + // img.src = scratchCanvas.toDataURL(); + // } + + // const wrapper = document.createElement("div"); + // wrapper.appendChild(img); + // this._printContainer.appendChild(wrapper); + + // return new Promise(function(resolve, reject) { + // img.onload = resolve; + // img.onerror = reject; + // }); + } + + renderContent(tocItemIndex) { + // const PRINT_UNITS = 0.72 * 2; + + // return this._pdfDoc + // .getPage(pageNumber) + // .then((pdfPage) => { + // //get pdf viewport + // let viewport = pdfPage.getViewport(1); + + // let ctx = this.getCanvasContext(viewport, PRINT_UNITS); + + // const renderContext = { + // canvasContext: ctx, + // transform: [PRINT_UNITS, 0, 0, PRINT_UNITS, 0, 0], + // viewport: viewport + // }; + + // return pdfPage.render(renderContext); + // }); } isLeftPanelEnabled(): boolean { diff --git a/src/extensions/uv-ebook-extension/config/en-GB.json b/src/extensions/uv-ebook-extension/config/en-GB.json index f80f19cb7..07266176f 100644 --- a/src/extensions/uv-ebook-extension/config/en-GB.json +++ b/src/extensions/uv-ebook-extension/config/en-GB.json @@ -79,7 +79,7 @@ "minimiseButtons": true, "moreInfoEnabled": true, "openEnabled": false, - "printEnabled": false, + "printEnabled": true, "shareEnabled": true } }, diff --git a/src/extensions/uv-ebook-extension/l10n/cy-GB.json b/src/extensions/uv-ebook-extension/l10n/cy-GB.json index 05961fc21..b32a2aec1 100644 --- a/src/extensions/uv-ebook-extension/l10n/cy-GB.json +++ b/src/extensions/uv-ebook-extension/l10n/cy-GB.json @@ -72,6 +72,11 @@ "share": "Rhannu" } }, + "ebookFooterPanel": { + "content": { + "print": "print cy-GB" + } + }, "genericDialogue": { "content": { "emptyValue": "rhowch rif", diff --git a/src/extensions/uv-ebook-extension/l10n/en-GB.json b/src/extensions/uv-ebook-extension/l10n/en-GB.json index c396b7c3b..1974f34cd 100644 --- a/src/extensions/uv-ebook-extension/l10n/en-GB.json +++ b/src/extensions/uv-ebook-extension/l10n/en-GB.json @@ -69,6 +69,12 @@ "share": "Share" } }, + "ebookFooterPanel": { + "content": { + "print": "print" + } + }, + "genericDialogue": { "content": { "emptyValue": "please enter a value.", diff --git a/src/extensions/uv-ebook-extension/l10n/fr-FR.json b/src/extensions/uv-ebook-extension/l10n/fr-FR.json index 005313f55..cfe8e3fc5 100644 --- a/src/extensions/uv-ebook-extension/l10n/fr-FR.json +++ b/src/extensions/uv-ebook-extension/l10n/fr-FR.json @@ -81,6 +81,11 @@ "share": "Partager" } }, + "ebookFooterPanel": { + "content": { + "print": "print fr-FR" + } + }, "genericDialogue": { "content": { "emptyValue": "veuillez saisir une valeur.", diff --git a/src/extensions/uv-ebook-extension/l10n/sv-SE.json b/src/extensions/uv-ebook-extension/l10n/sv-SE.json index 7c2abaf3f..ac2ea4492 100644 --- a/src/extensions/uv-ebook-extension/l10n/sv-SE.json +++ b/src/extensions/uv-ebook-extension/l10n/sv-SE.json @@ -81,6 +81,11 @@ "share": "Dela" } }, + "ebookFooterPanel": { + "content": { + "print": "print sv-SE" + } + }, "genericDialogue": { "content": { "emptyValue": "ange ett värde.", diff --git a/src/modules/uv-ebookcenterpanel-module/EbookCenterPanel.ts b/src/modules/uv-ebookcenterpanel-module/EbookCenterPanel.ts index d2567e5ae..8db8525a6 100644 --- a/src/modules/uv-ebookcenterpanel-module/EbookCenterPanel.ts +++ b/src/modules/uv-ebookcenterpanel-module/EbookCenterPanel.ts @@ -10,6 +10,7 @@ export class EbookCenterPanel extends CenterPanel { private _ebookReaderReady: boolean = false; private _state: any = {}; private _prevState: any = {}; + private _$spinner: JQuery; constructor($element: JQuery) { super($element); @@ -76,6 +77,9 @@ export class EbookCenterPanel extends CenterPanel { }); } ); + + this._$spinner = $('
'); + this.$content.append(this._$spinner); } openMedia(resources: Manifesto.IExternalResource[]) { @@ -92,6 +96,8 @@ export class EbookCenterPanel extends CenterPanel { const media: Manifesto.IAnnotationBody = body[0]; //const format: Manifesto.MediaType | null = media.getFormat(); + this.component.publish(Events.EBOOK_PATH_READY,media.id); + this._nextState({ bookPath: media.id }); diff --git a/src/modules/uv-ebookfooterpanel-module/FooterPanel.ts b/src/modules/uv-ebookfooterpanel-module/FooterPanel.ts new file mode 100644 index 000000000..93a1fd706 --- /dev/null +++ b/src/modules/uv-ebookfooterpanel-module/FooterPanel.ts @@ -0,0 +1,44 @@ +import {Events} from "../../extensions/uv-ebook-extension/Events"; +import {FooterPanel as BaseFooterPanel} from "../uv-shared-module/FooterPanel"; + +export class FooterPanel extends BaseFooterPanel { + + $printButton: JQuery; + + constructor($element: JQuery) { + super($element); + } + + create(): void { + + this.setConfig('ebookFooterPanel'); + + super.create(); + + this.$printButton = $(` + + `); + this.$options.prepend(this.$printButton); + + + var that = this; + + this.$printButton.onPressed(() => { + that.component.publish(Events.PRINT); + }); + + this.updatePrintButton(); + } + + updatePrintButton(): void { + const configEnabled: boolean = Utils.Bools.getBool(this.options.printEnabled, false); + + if (configEnabled){ + this.$printButton.show(); + } else { + this.$printButton.hide(); + } + } +} diff --git a/src/modules/uv-ebookfooterpanel-module/css/styles.less b/src/modules/uv-ebookfooterpanel-module/css/styles.less new file mode 100644 index 000000000..035270342 --- /dev/null +++ b/src/modules/uv-ebookfooterpanel-module/css/styles.less @@ -0,0 +1,293 @@ + +.uv{ + + .footerPanel{ + + @img-path: '../../../modules/uv-searchfooterpanel-module/img/'; + + .searchResults{ + position: relative; + height: 60px; + padding: 30px 9px 0 9px; + + .line{ + background: @gray; + height: 2px; + } + + .searchResultPlacemarker{ + position: absolute; + background: data-uri('@{img-path}placemarker_down.png'); + height: 24px; + width: 18px; + cursor: pointer; + margin: -24 0 0 -9; + + &.hover{ + background: data-uri('@{img-path}placemarker_down_hover.png'); + } + + &.current{ + background: data-uri('@{img-path}placemarker_down_hover.png'); + } + } + + .positionPlacemarker{ + position: absolute; + background: data-uri('@{img-path}placemarker_up.png'); + height: 24px; + width: 18px; + margin: 2px 0 0 -9px; + cursor: pointer; + } + + .placeMarkerDetails{ + position: absolute; + width: 200px; + z-index: 10; + margin: 13px 0 0 9px; + background: #fff; + cursor: pointer; + + h1{ + color: @text-secondary-color; + font-size: @font-size-small; + //border-bottom: 1px solid @gray-light; + font-weight: bold; + //background-image: url('@{img-path}arrow.png'); + background-position: 0 1px; + background-repeat: no-repeat; + margin: 5px; + padding: 0 @padding-small-horizontal @padding-small-vertical 0; + text-transform: none; + } + + p{ + font-size: @font-size-small; + font-weight: bold; + margin: @margin-small; + padding: 0; + color: @text-secondary-color; + } + + .top{ + display: inline; + } + + .bottom{ + display: inline; + } + } + + .label{ + position: absolute; + color: #fff; + margin: 8px @margin-large-horizontal 0 @margin-large-horizontal; + min-width: 160px; + + &.left{ + text-align: right; + } + + &.right{ + text-align: left; + } + } + } + + .search{ + position: relative; + background-color: @panel-dark-bg; + height: 32px; + + .searchTextContainer{ + background: #fff; + float: left; + width: 270px; + //border: 2px solid @gray; + position: relative; + + .autocomplete{ + position: absolute; + background: #fff; + width: 270px; + border: 2px solid @brand-primary-lighter; + list-style-type: none; + -webkit-margin-before: 0px; + -webkit-margin-after: 0px; + -webkit-margin-start: 0px; + -webkit-margin-end: 0px; + -webkit-padding-start: 0px; + margin: 0; + padding: 0; + max-height: 300px; + overflow-y: auto; + overflow-x: hidden; + + .result{ + padding: 4px; + width: 270px; + overflow: hidden; + + &.loading{ + background-image: data-uri(@loader-white-bg); + background-repeat: no-repeat; + background-position: 4px 4px; + height: 25px; + } + + &.selected{ + background: @gray-lighter; + } + } + } + + .searchText{ + width: 245px; + margin: 1px 0 0 0; + font-size: 12px; + height: 22px; + line-height: 22px; + padding: 0; + float: left; + border: none; + + &.searching { + background: data-uri('@{img-path}spinner.gif'); + background-repeat: no-repeat; + background-position: right 3px; + } + } + + a.imageButton.searchButton{ + background: data-uri('@{img-path}search.png'); + background-repeat: no-repeat; + height: 18px; + width: 18px; + margin: 2px 2px 0 0; + float: right; + cursor: pointer; + } + } + } + + .searchOptions{ + position: absolute; + width: 420px; + margin: 4px 0 0 0; + + .label{ + color: #fff; + font-weight: bold; + padding: 0 10px 0 0; + margin: 4px 0 0 0; + float: left; + } + } + + .searchPager{ + position: relative; + background-color: @panel-dark-bg; + height: 32px; + overflow: hidden; + + .controls{ + position: absolute; + margin-top: 1px; + // margin: @margin-small-vertical 0 0 0; + width: 585px; + + a.previousResult{ + .noselect(); + .icon-left('@{img-path}prev.png', 30px, 25px); + line-height: 30px; + float: left; + margin: 0 @margin-medium-horizontal 0 0; + + &.disabled { + .opacity(.25); + } + } + + a.nextResult{ + .noselect(); + .icon-right('@{img-path}next.png', 30px, 25px); + line-height: 30px; + float: right; + margin: 0 0 0 @margin-medium-horizontal; + + &.disabled { + .opacity(.25); + } + } + + a.clearSearch{ + .noselect(); + cursor: pointer; + color: @link-color; + text-decoration: none; + margin: 0 0 0 @margin-medium-horizontal; + font-size: 12px; + } + + .searchResultsInfo{ + margin: 4px 0 0 0; + color: #fff; + text-align: center; + font-size: 14px; + float: left; + width: 345px; + + .number{ + font-weight: bold; + } + + .terms{ + font-weight: bold; + } + } + } + } + } +} + +/* +.uv .footerPanel .searchOptions .autoCompleteWidget { + position: relative; +} + +.uv .footerPanel .searchOptions .autoCompleteWidget input[type="text"]{ + width: 300px; +} + +.uv .footerPanel .searchOptions .autoCompleteWidget .results { + position: absolute; + left: 0; + top: 50px; + overflow-x: hidden; + overflow-y: auto; + overflow: auto; + max-height: 300px; + width: 300px; + background: #fff; + border: 1px solid; +} + +.uv .footerPanel .searchOptions .autoCompleteWidget .results ul{ + list-style-type: none; + margin: 10px; + padding: 0; +} + +.uv .footerPanel .searchOptions .autoCompleteWidget .results ul li{ + padding: 2px; +} + +.uv .footerPanel .searchOptions .autoCompleteWidget .results ul li.selected{ + background: lightgrey; +} + +.uv .footerPanel .searchOptions .autoCompleteWidget .results ul li a:hover{ + text-decoration: none; +} +*/ diff --git a/src/modules/uv-ebookfooterpanel-module/img/next.png b/src/modules/uv-ebookfooterpanel-module/img/next.png new file mode 100644 index 0000000000000000000000000000000000000000..c3de98023eaf24b13ad9e9ed56ef4d8cf3198309 GIT binary patch literal 1067 zcmbVLy>HV%6gP^fpwNM>bU;^Esz7S|aj_lSYAA{A&`3=PNvdW-b?i%Gwf4F8mAGYN z>rjJ_*}nJg-tYH5?!CQw?f%r{%p}7w zQWc1QpR-dNF7ZQ(W|+mLB($9kL_i1iyr97Tdi#zAo?Bqo2&4b=CRcO%r?t+kxp z4M%g?rMqA;(J6tChz$~dGl=!1z@G5xR8F^f7Mz%njRJcbRJ&RS296Mrxm?x}L=h+o zCrYxShzkG;BIE`7Dp^s|WkrX1FnU<(Epoeh!z_<{QLVuC2?=$c9}EWEAjjdT$BUY# zr5q4usYN#435cC!gLrPtV4~QGypVV}04by0!P}(3(nwEJ@WX2Lj5vr#g`y?n6FcNZ zPT+k%&FjQECJppAjB~By)=r4{28!`^ePU^*3~^uGUvt*75Q2a5!9DU46K+@R4q2 zNTb#q4w>&?rixU}SIlB7`O#VbaBaGL`1+-F!*<{E`?Cl0``iJyKYuX$_0zpQDRa5z iya4U#^3lxJH|Ej=(>t6vlArf literal 0 HcmV?d00001 diff --git a/src/modules/uv-ebookfooterpanel-module/img/placemarker_down.png b/src/modules/uv-ebookfooterpanel-module/img/placemarker_down.png new file mode 100644 index 0000000000000000000000000000000000000000..53497471bc5e7a43de2fb259f93a53adb40c06e6 GIT binary patch literal 1214 zcmbVLU2GIp6dnqcS{9JD5cI(eQ({1!ou8fE**kVEWoMxqm|CZswwfB9pF7=2J9DQq zx9oNkgH%WW^??Y4kS3Uh2cW`(%7cF>F`5t!kH%np0~6ze32F=^5bkVuiw_MCPBL@P zxpU5UzVmlS(e*UvG3e(^O! zyLOHlNo%|ovl%VY--t7iiiNupc!FMM}n1jerx9Jm-0FUUlmT>+lhcWv!#qOaM6@Mrb;;NI#tJ zrZcJC;{(NpgpKlY=#r)wlPa>NJ?P`2nq$bHr0v>@!&@24;6>JyZIhKv$zijG09X;& zDQKD|FH1%fXF30@P)PH9J`J)$Mj-Mo8At_Dk_8nAvXB>>zC}O6hHt@UY?s7t_)3rU zRq`P;FbYcuO*W@su#7N@$|#`o`Fhvs?IW&lqe`?RZqs7cDh%EI(B2&)kFM8QahKsB zLd&sW3bK-IIjm$!85RJ?VtF|wNGU!GU%*&wH>RFEc&798r%z~O9Uok7NvtPGUFW{tyXMwEL|TFMfgx(= zZ$CRkd8?@Qm8v)K@mJTsO($0Wpl|KF#{PaEU7SC8>d@V}LwD}A^XBy%w+lx$U6?(n z&7b}I%+A>>&z)%h!`6Ea*q82HIyQWJ_?3n8-9cjEedPpf-SPnD0__BrNG6JE6&@x6wSVoxl0CjZ9@hk&KJ@{Jdm>R_LaYGKELpDTCFrJJk(~W&mIh4- z9#7EQP7P-VK?*q#M1#GI#)TpvCImy#-k1AFaZEbyhy}iACetv#wX(J@uh8H8uz|*;E_rtqCjXcWTnwzZ0_0L|tH0ysc_uoo7>T(@1UO%T0(byqWn0U~u!wj7!I;gx zO^2gMrm&~$A=qvvvq|ju8;QaxW9pjAaAB6Q?I5le+DAF?j~iQ}{lb_Fm>lrosAu4M zlsenWICn2M6acX|(lO7%MbSnSXpGvxK`BM1@JraVOsT{gaYJKyS{F>67W8O|?$$Vw z=0!6CbX{kKsMhA$N?(Zx@gx_CtDGuwoEq&{g{UHQiyW^e6Nz}Ft($Uuq&Ws?+qSUn z4c*vFb)}>SGz7f@gd^=P7^*-7{R(u+WU^It^4;T>W5Sw$FeuY{)C%ydbHE(%piQ>& zELmIl@ZaKJ*Ej!f{ut~O6Ew@enx}n*J2E(Kjsg}ohY2`%f;>DbmG~E5<1rf?N*C0* zxw%j%w79rftyY(omL?`9*4Ea#y1JH^mjM8)tE-JhV`XJ!dU|?lYRdQh`T6c`)7 tNc&Ho|NXT;cXGeo{^irY^a{DUAHL`uyn-zCmm`Wr*Kx+VYs literal 0 HcmV?d00001 diff --git a/src/modules/uv-ebookfooterpanel-module/img/prev.png b/src/modules/uv-ebookfooterpanel-module/img/prev.png new file mode 100644 index 0000000000000000000000000000000000000000..e70d135bcab57b10949230840291eca4e49f2f60 GIT binary patch literal 1070 zcmbVL&ui0A91jd+oA&NJ$TP)Xu;y2PCajLNNnLTRwe7GV$kODs4O{YJ@@BK0WXyvX z5fu;OVHZyW!Gk9cf;dpGP6Tgy7X1_IH*GULj0uJ$@B4l4`}ur-yzlp3t$H~&eQKIv zm{@sHt;2dc{3a*hf8yuO2e8agtwkH8L;JdinFW)yF)G`77uT_FZru8S=NM+9V>Mf} zRasIDVsmE-i<=&9Y*w4b z=Bgo^?EED(7brkrW2&RTUUPgU$g@LU1>|s>XVK7vuIAZMP_0T06^VyYnoA}OK@?FY z!-=VMCL_)wNf0GofH#v6Q%X9cNLe&~Sn%eV9i^_8#=bzyvpq^(h3EVIKG#oj#Ov~+ zEXyH>BqhKi;cqxp4-$?aj~G-0T=gut6n#x4#=4Ci zT2}KcoN%UPDp^TN%TPc$mlL#`Y%6g{j{;x!3bi#njzBb4|(;-X?BgDzaR z9Fz3@i{bT*vQ@EX-Nt6gBQ_e=SFsN9|L?pWn256Z#t zU>g}R(0a8o7%*Qx#uh+T%IZQh_}X51 zd;DbS`OB%DD@oz|qt42^^RdT!@z}$?MC{4g8&B_i+kRGhZ)|Vft?k@DrwPoYz;s_7 T`?O0w?*a=`)~f1@!phcf3D8Xt literal 0 HcmV?d00001 diff --git a/src/modules/uv-ebookfooterpanel-module/img/search.png b/src/modules/uv-ebookfooterpanel-module/img/search.png new file mode 100644 index 0000000000000000000000000000000000000000..6494c2a46949bc7d6cb771a03857993680af2280 GIT binary patch literal 380 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+3?vf;>QaFebFq_W2nPqp?T7vkfLx~lpAgrX zGiQGL_HEOqP51BLKXmBOym|B9ym@o!(xpX<7XAPKf9uw*D_5@k`0?ZZ{rew3eth)k z(LaCweE$6T=FOYSmMwen;>DRWXWrefdjd3#v%n*=n1O*CXe+l6~?~t{7dOTeI+^{gv0e Y&38FhKGgI}0y>Go)78&qol`;+0PRkq{Qv*} literal 0 HcmV?d00001 diff --git a/src/modules/uv-ebookfooterpanel-module/img/spinner.gif b/src/modules/uv-ebookfooterpanel-module/img/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..148005da279b97c0acc697d48a815645977dc723 GIT binary patch literal 1737 zcmYk+ZA?>H8o=>msePlC7H(UlOeuva6-udX=eG2X-nQJ9g5||K3}WrHKr7Zx(JnHq zYm9Sl?~UuSa${USIL0u>7~?RkfNPD*`ob8-IL0xKV;t8tt}(_n#yG|p*O+y6r*3#Y zo}4H7<@}T5Z^5mNF)7XZ9@^9BHL{rdI2d-q18QMcRe^ZC;0^r1tCZr{Fr`0(NC z>T0c4YcLp46m_{=$z<~M>C@%q<(W+8@#Du&o;;bKpWn4>S4T%jBoaAu=FHWrS8X<% zOePx}8#{LFSU4Qswr$(Jd-rIX7KucIgM$YS97rS*Cr_Tlaah-n{wj*|S@>Zf)JV^~8x2Gcz-7ZEam$UA?`%eSLi% zkH_I~T)1#yWMsr>G(LLtsJ6Ct_wL<2Jv};|PN`H*OiYAAq2l7=ojZ393=Ejf=8G3E zUcP+!!Gi~U=R0Kh!QmGv~cD#M_U#IdvW!_9YHXI*NeZFCMP!&tY zMpHwv0sV$_VhB|Jn+*hSFIK)O3^fz0y;w)HQEw<%^7csgZvS0G!2RP60Ld&xDXLb~ z(-g0~x>gTSn}re-e(+&k1GE^ND9Pd!D`^x#_JM-Jk}=?HazeIHGHr4Z{<1uku9sN;jT0*bq@ZR zy5l(W&#&;^(fMKyE012XSU8p!+6zAE5w2aQpn;?GDKjD1idkWAsSnflj1#qo+1HjNgl{r4E%i_$QP7s;6!vR z8hE*_oFdUOVKPNoBkKn{rBZL#Mj?+>4}=`_V10)I_KOn?5P!A~>PlR>U^)qn0Yi?^ z*F&Y*l%qb9`>$rBac>T_kw``2EM;^4K>9zbzzB=QfHX)^%I(#9J(%6yaGS>Yip)z@ z@t=GD;?C;|7VF0Ix+bks9I8zDY0xO=)+}GYHW><1SXCgUz@46TMePof&={?B;?p)e zZ0y!DARsJ&K^;FQ+4u=eC2TpQ_+vPf`i>z!$UvE+FBkl*75cTVT&T7R;!&%b*|ZEJ z8={SB1GGE`n<=E3#a9zf6Po_lgbEifEnPCSq8#DnjqJt7_lc3%P+X~zG|_-xw>d61 z2TF`G%I6Ts+$IxC@S(Vj#H|iH9aNRLp}SwffcV-JbXkdlVSeGHzfRj z;-!m$?-Lu`joLa1hR}e(to^|X-e!S|k}9Hp0=22jy1OwFb-Nm9k2&54o&0Z@p)Ls| zd?p6CxPyP4Ig3ZQP&&S_ss^g$zU%9$HNRND; z4%e^AlsXu!YD1y$%HE%U`TFj}`^22Zx}EvN7H5;)Wmg+$U?Y5d7Ur>bswq_3ATPx0w-9QSx`*AL7f4I3iUbdbvlHZ_8bb`@^p|+G4|{ zQXHj8)Py5_KA)4)&^Dymj*!?g{WyWSOt7jpG!FPOA8f6zn?k&eurN$ap}~GAtUohu zt2hbPuhCBVdL=MkxMfPB!yv1*XEQC6^A^BR$FQ-}iDRisxq_-wwI|zFMYzh?xSzLj Wc_{4u<=a1<$G!l-{_f-Z-~1P&zb^m) literal 0 HcmV?d00001 From 3dae40ba6b160c4214e1400d193ee2639d4632ae Mon Sep 17 00:00:00 2001 From: kumarochani <61007728+kumarochani@users.noreply.github.com> Date: Fri, 13 Mar 2020 15:48:25 +0000 Subject: [PATCH 05/17] Update uv.html --- src/uv.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/uv.html b/src/uv.html index ebb68c7f8..99f172f48 100644 --- a/src/uv.html +++ b/src/uv.html @@ -85,6 +85,8 @@ + + From f481ed512f8fda8f41846412d1b62deb47fb5af9 Mon Sep 17 00:00:00 2001 From: Ali Mohammad Date: Mon, 16 Mar 2020 14:34:40 +0000 Subject: [PATCH 06/17] Print epub document work done --- package.json | 2 +- src/extensions/uv-ebook-extension/Events.ts | 2 +- .../uv-ebook-extension/Extension.ts | 232 ++++++++++-------- .../uv-ebook-extension/theme/theme.less | 4 + .../EbookCenterPanel.ts | 10 +- 5 files changed, 147 insertions(+), 103 deletions(-) diff --git a/package.json b/package.json index 10df8cf20..d0ca1a144 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "@types/requirejs": "2.1.28", "@types/three": "0.84.20", "@universalviewer/uv-cy-gb-theme": "1.1.2", - "@universalviewer/uv-ebook-components": "^1.0.0", + "@universalviewer/uv-ebook-components": "^1.0.1", "@universalviewer/uv-en-gb-theme": "1.1.2", "core-js": "2.4.1", "dashjs": "2.6.7", diff --git a/src/extensions/uv-ebook-extension/Events.ts b/src/extensions/uv-ebook-extension/Events.ts index c1c64f566..0ae758562 100644 --- a/src/extensions/uv-ebook-extension/Events.ts +++ b/src/extensions/uv-ebook-extension/Events.ts @@ -8,5 +8,5 @@ export class Events { static RENDITION_ATTACHED: string = Events.namespace + "renditionAttached"; static TOC_READY: string = Events.namespace + "tocReady"; static PRINT: string = Events.namespace + 'print'; - static EBOOK_PATH_READY: string = Events.namespace + "ebookPathReady"; + static EBOOK_READY: string = Events.namespace + "ebookReady"; } \ No newline at end of file diff --git a/src/extensions/uv-ebook-extension/Extension.ts b/src/extensions/uv-ebook-extension/Extension.ts index ae3cfd650..3a5c1769d 100644 --- a/src/extensions/uv-ebook-extension/Extension.ts +++ b/src/extensions/uv-ebook-extension/Extension.ts @@ -14,6 +14,8 @@ import { SettingsDialogue } from "./SettingsDialogue"; import { ShareDialogue } from "./ShareDialogue"; import { IEbookExtensionData } from "./IEbookExtensionData"; +const PRINT_IFRAME = "ifrmPrintEbookContent"; + export class Extension extends BaseExtension implements IEbookExtension { $downloadDialogue: JQuery; @@ -33,11 +35,10 @@ export class Extension extends BaseExtension implements IEbookExtension { shareDialogue: ShareDialogue; cfiFragement: string; - private _toc:any; - //private _activePrint:boolean; private _spinner:JQuery; - //private _currentTocItemIndex:number = -1; - private _ebookPath:string; + private _ebook:any; + private _printDocument:any; + private _activePrint:boolean = false; create(): void { super.create(); @@ -51,23 +52,18 @@ export class Extension extends BaseExtension implements IEbookExtension { this.fire(Events.CFI_FRAGMENT_CHANGED, this.cfiFragement); }); - this.component.subscribe(Events.EBOOK_PATH_READY, (ebookPath) => { - alert(ebookPath); - this._ebookPath = ebookPath; + this.component.subscribe(Events.EBOOK_READY, (ebook) => { + this._ebook = ebook; }); this.component.subscribe(Events.PRINT, () => { - - if(this._ebookPath){ - this.print(); - } + this.printEbook(); }); - this.component.subscribe(Events.LOADED_NAVIGATION, (navigation: any) => { - alert('toc loaded'); - this._toc = navigation.toc; - alert(this._toc); - }); + //Remove the print doc iframe if already exists + let printDocIframe = document.getElementById(PRINT_IFRAME); + if(printDocIframe) + printDocIframe.remove(); } dependencyLoaded(_index: number, _dep: any): void { @@ -136,100 +132,140 @@ export class Extension extends BaseExtension implements IEbookExtension { this.footerPanel.init(); } - this._spinner = $("div.spinner"); + this._spinner = $("div#spinner"); this._spinner.hide(); } - print(){ - // TODO Printing Implementation - alert('Printing Done'); + getPrintContentwindow(iframe){ + return iframe.contentWindow; + } - // if(this._activePrint) - // return; + finalizePrint(contentWindow){ + contentWindow.print(); + this._activePrint = false; + this._spinner.hide(); + } + + printEbook(){ + if(!this._ebook){ + alert('Ebook is not loaded yet'); + return; + } + + //return if printing is already in progress + if(this._activePrint) + return; + + this._activePrint = true; + this._spinner.show(); - // this._activePrint = true; - // this._spinner.show(); - - // let rederedPages = this.renderBookContents(); - // rederedPages.then(() => { - // this._spinner.hide(); - // window.print(); - // this._activePrint = false; - // }); - - // rederedPages.catch((r)=> { - // this._spinner.hide(); - // this._activePrint = false; - // }); + let printDocIframe = document.getElementById(PRINT_IFRAME) as HTMLIFrameElement; + if(printDocIframe){ + this.finalizePrint(this.getPrintContentwindow(printDocIframe)); + return; + } + + this.renderContents() + .then(()=>{ + //remove document content meta tags + this._printDocument.querySelectorAll("[name^='dc.']") + .forEach(meta => { + meta.remove(); + }); + + let docHead = this._printDocument.head || this._printDocument.getElementsByTagName('head')[0]; + //add viewport meta tag to print document + let meta = document.createElement('meta'); + meta.setAttribute('name', 'viewport'); + meta.content = "width=device-width, initial-scale=1"; + docHead.appendChild(meta); + + //Add style to doc for page break after each chapter + let style = document.createElement('style'); + style.type = 'text/css'; + style.appendChild(document.createTextNode("body{margin: 0; padding: 0;} body > *{display: block; page-break-after: always; page-break-before: avoid;}")); + docHead.appendChild(style); + + //set document title + docHead.getElementsByTagName("title")[0].innerText = this._ebook.packaging.metadata.title; + + //create an iframe to load the doc contents + let ifrm = document.createElement('iframe'); + ifrm.setAttribute("id", "ifrmPrintEbookContent"); + ifrm.setAttribute("style", "display:none;"); + + //add iframe to body + document.body.appendChild(ifrm); + + // check if srcdoc supported for iframe for the browser + if(!!("srcdoc" in ifrm)){ + //add onload event to iframe + ifrm.onload = () => { + this.finalizePrint(this.getPrintContentwindow(ifrm)); + }; + + //add doc html to iframe srcdoc + ifrm.setAttribute("srcdoc", this._printDocument.documentElement.innerHTML); + return; + } + + //if scrdoc not supported for the browser + let contentWindow = this.getPrintContentwindow(ifrm); + contentWindow.document.write(this._printDocument.documentElement.innerHTML); + + setTimeout(() => { + this.finalizePrint(contentWindow); + }, 1000); + }); } - renderBookContents() { - // if(!this._toc){ - // return new Promise(() => { - // throw new Error(); - // }); - // } - - // const tocLength = this._toc.legth; - // const renderNextItem = (resolve, reject) => { - - // if (++this._currentTocItemIndex >= tocLength) { - // resolve(); - // return; - // } - - // const index = this._currentTocItemIndex; - // this.renderContent(index + 1) - // .then(this.useRenderedContent.bind(this)) - // .then(function() { - // renderNextItem(resolve, reject); - // }, reject); - // }; - - // return new Promise(renderNextItem); + renderContents() { + let tocCount = 144; + let currentTocIndex = -1; + + const renderNextSectionContent = (resolve, reject) => { + if (++currentTocIndex >= tocCount) { + resolve(); + return; + } + + this.renderSectionContent(currentTocIndex) + .then(() => { + renderNextSectionContent(resolve, reject); + }, reject); + }; + + return new Promise(renderNextSectionContent); } - useRenderedContent() { - // const img = document.createElement("img"); - - // const scratchCanvas = this._scratchCanvas; - // if ("toBlob" in scratchCanvas) { - // scratchCanvas.toBlob(function(blob) { - // img.src = URL.createObjectURL(blob); - // }); - // } else { - // img.src = scratchCanvas.toDataURL(); - // } - - // const wrapper = document.createElement("div"); - // wrapper.appendChild(img); - // this._printContainer.appendChild(wrapper); - - // return new Promise(function(resolve, reject) { - // img.onload = resolve; - // img.onerror = reject; - // }); - } - - renderContent(tocItemIndex) { - // const PRINT_UNITS = 0.72 * 2; - - // return this._pdfDoc - // .getPage(pageNumber) - // .then((pdfPage) => { - // //get pdf viewport - // let viewport = pdfPage.getViewport(1); + renderSectionContent(index) { + var section = this._ebook.spine.get(index); + if(!section) + return Promise.resolve(); + + return section.render(this._ebook.load.bind(this._ebook)) + .then(htmlDoc => { + let domparser = new DOMParser() + let doc = domparser.parseFromString(htmlDoc, "text/html"); + if(doc) { + if(index == 0) { + this._printDocument = doc; + return; + } - // let ctx = this.getCanvasContext(viewport, PRINT_UNITS); + //get cssclass and style if any for the section content + let docClass = doc.body.getAttribute("class") || ""; + let docStyle = doc.body.getAttribute("style") || ""; - // const renderContext = { - // canvasContext: ctx, - // transform: [PRINT_UNITS, 0, 0, PRINT_UNITS, 0, 0], - // viewport: viewport - // }; + //attach the cssClass and style to section wrapper + var sectionWrapper= document.createElement('div'); + sectionWrapper.setAttribute("class", (docClass ? docClass + " " : "") + "section-" + index ); + sectionWrapper.setAttribute("style", docStyle); - // return pdfPage.render(renderContext); - // }); + sectionWrapper.innerHTML= doc.body.innerHTML; + this._printDocument.body.appendChild(sectionWrapper); + } + }); } isLeftPanelEnabled(): boolean { diff --git a/src/extensions/uv-ebook-extension/theme/theme.less b/src/extensions/uv-ebook-extension/theme/theme.less index 5571a575a..ba3370520 100644 --- a/src/extensions/uv-ebook-extension/theme/theme.less +++ b/src/extensions/uv-ebook-extension/theme/theme.less @@ -1,3 +1,7 @@ +:root { + --reader-spinner-color: #bdbdbd; +} + @import '../../../modules/uv-dialogues-module/css/styles.less'; @import '../../../modules/uv-ebookcenterpanel-module/css/styles.less'; @import '../../../modules/uv-ebookleftpanel-module/css/styles.less'; diff --git a/src/modules/uv-ebookcenterpanel-module/EbookCenterPanel.ts b/src/modules/uv-ebookcenterpanel-module/EbookCenterPanel.ts index 8db8525a6..e203da003 100644 --- a/src/modules/uv-ebookcenterpanel-module/EbookCenterPanel.ts +++ b/src/modules/uv-ebookcenterpanel-module/EbookCenterPanel.ts @@ -31,6 +31,12 @@ export class EbookCenterPanel extends CenterPanel { this.component.publish(Events.LOADED_NAVIGATION, e.detail); }, false); + this._ebookReader.addEventListener("bookReady", (e: any) => { + this._ebookReader.getBook().then(ebook => { + this.component.publish(Events.EBOOK_READY, ebook); + }); + }, false); + this._ebookReader.addEventListener("relocated", (e: any) => { this.component.publish(Events.RELOCATED, e.detail); this._cfi = e.detail.start.cfi; @@ -78,7 +84,7 @@ export class EbookCenterPanel extends CenterPanel { } ); - this._$spinner = $('
'); + this._$spinner = $('
'); this.$content.append(this._$spinner); } @@ -96,8 +102,6 @@ export class EbookCenterPanel extends CenterPanel { const media: Manifesto.IAnnotationBody = body[0]; //const format: Manifesto.MediaType | null = media.getFormat(); - this.component.publish(Events.EBOOK_PATH_READY,media.id); - this._nextState({ bookPath: media.id }); From 5179d862fcda1ea79220187bcac203bc427137ea Mon Sep 17 00:00:00 2001 From: Shaukat Ali Date: Mon, 23 Mar 2020 14:44:04 +0000 Subject: [PATCH 07/17] fixed Next/Prev button issue for PDF appeared after print work --- src/extensions/uv-pdf-extension/Extension.ts | 4 ++-- src/modules/uv-pdfcenterpanel-module/PDFCenterPanel.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/extensions/uv-pdf-extension/Extension.ts b/src/extensions/uv-pdf-extension/Extension.ts index 7fac3d245..231bd1fa2 100644 --- a/src/extensions/uv-pdf-extension/Extension.ts +++ b/src/extensions/uv-pdf-extension/Extension.ts @@ -69,8 +69,8 @@ export class Extension extends BaseExtension implements IPDFExtension { } }); - this.component.subscribe(Events.PDF_LOADED, (pdfDetails: any) => { - this._pdfDoc = pdfDetails.pdfDoc; + this.component.subscribe(Events.PDF_LOADED, (pdfDoc: any) => { + this._pdfDoc = pdfDoc; }); this.component.subscribe(Events.PRINT, () => { diff --git a/src/modules/uv-pdfcenterpanel-module/PDFCenterPanel.ts b/src/modules/uv-pdfcenterpanel-module/PDFCenterPanel.ts index ca9efab8c..ec9b85c20 100644 --- a/src/modules/uv-pdfcenterpanel-module/PDFCenterPanel.ts +++ b/src/modules/uv-pdfcenterpanel-module/PDFCenterPanel.ts @@ -264,7 +264,7 @@ export class PDFCenterPanel extends CenterPanel { this._pdfDoc = pdfDoc; this._render(this._pageIndex); - this.component.publish(Events.PDF_LOADED, {pdfDoc:pdfDoc,pdfUri:parameter.url}); + this.component.publish(Events.PDF_LOADED, pdfDoc); this._$spinner.hide(); }); } From 1b6db2495c950129554284987dde8259a50a62d0 Mon Sep 17 00:00:00 2001 From: Shaukat Ali Date: Tue, 24 Mar 2020 10:16:26 +0000 Subject: [PATCH 08/17] ProgressDialog module created --- .../uv-dialogues-module/ProgressDialogue.ts | 61 +++++++++++++++++++ .../uv-dialogues-module/css/styles.less | 14 ++++- 2 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 src/modules/uv-dialogues-module/ProgressDialogue.ts diff --git a/src/modules/uv-dialogues-module/ProgressDialogue.ts b/src/modules/uv-dialogues-module/ProgressDialogue.ts new file mode 100644 index 000000000..0c167a1af --- /dev/null +++ b/src/modules/uv-dialogues-module/ProgressDialogue.ts @@ -0,0 +1,61 @@ +import {Dialogue} from "../uv-shared-module/Dialogue"; + +export class ProgressDialogue extends Dialogue { + + $label: JQuery; + $progressBar: JQuery; + value: number = 0; + + constructor($element: JQuery) { + super($element); + } + + create(): void { + + this.setConfig('progressDialogue'); + super.create(); + + //setting default options + this.options = $.extend(true, this.options, { + label: "Please wait...", + maxValue: 100, + showPercentage: false + }); + + this.disableClose(); + this.$buttons.remove(); + + this.$label = $(``); + this.$content.append(this.$label); + + this.$progressBar = $(``); + this.$content.append(this.$progressBar); + + this.$element.hide(); + } + + setOptions(options:any): void{ + this.options = $.extend(true, this.options, options); + + //reset value + this.value = 0; + + //reset content + this.$label.html(this.options.label); + this.$progressBar.attr('max', this.options.maxValue); + this.$progressBar.attr('value', this.value); + } + + setValue(value:number):void{ + this.value = value; + this.$progressBar.attr('value', this.value); + } + + open(): void { + super.open(); + } + + resize(): void { + super.resize(); + } +} \ No newline at end of file diff --git a/src/modules/uv-dialogues-module/css/styles.less b/src/modules/uv-dialogues-module/css/styles.less index 3ffd57501..f98117201 100644 --- a/src/modules/uv-dialogues-module/css/styles.less +++ b/src/modules/uv-dialogues-module/css/styles.less @@ -361,8 +361,20 @@ background: none; } } - } + &.progress{ + width: 250px; + .middle{ + .content{ + padding: 10px; + } + } + .progress-bar{ + width: 100%; + height: 15px; + } + } + } } @import 'mobile'; From 45ed6291c40547bd80bb4d822174c7d735819864 Mon Sep 17 00:00:00 2001 From: Shaukat Ali Date: Wed, 25 Mar 2020 09:23:47 +0000 Subject: [PATCH 09/17] ProgressDialog integrated with pdf --- src/extensions/uv-pdf-extension/Extension.ts | 37 ++++++++++++++++++- .../uv-pdf-extension/l10n/en-GB.json | 6 +++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/extensions/uv-pdf-extension/Extension.ts b/src/extensions/uv-pdf-extension/Extension.ts index 231bd1fa2..e8fb7ce67 100644 --- a/src/extensions/uv-pdf-extension/Extension.ts +++ b/src/extensions/uv-pdf-extension/Extension.ts @@ -10,7 +10,7 @@ import {PDFHeaderPanel} from "../../modules/uv-pdfheaderpanel-module/PDFHeaderPa import {ResourcesLeftPanel} from "../../modules/uv-resourcesleftpanel-module/ResourcesLeftPanel"; import {SettingsDialogue} from "./SettingsDialogue"; import {ShareDialogue} from "./ShareDialogue"; -//import {Dialogue} from "../../modules/uv-shared-module/Dialogue"; +import {ProgressDialogue} from "../../modules/uv-dialogues-module/ProgressDialogue"; import IThumb = Manifold.IThumb; import { Events } from "../uv-pdf-extension/Events"; @@ -21,6 +21,7 @@ export class Extension extends BaseExtension implements IPDFExtension { $shareDialogue: JQuery; $helpDialogue: JQuery; $settingsDialogue: JQuery; + $progressDialogue: JQuery; centerPanel: PDFCenterPanel; downloadDialogue: DownloadDialogue; shareDialogue: ShareDialogue; @@ -29,6 +30,7 @@ export class Extension extends BaseExtension implements IPDFExtension { leftPanel: ResourcesLeftPanel; rightPanel: MoreInfoRightPanel; settingsDialogue: SettingsDialogue; + progressDialogue: ProgressDialogue; $printFrame:any; private _pdfDoc:any; @@ -251,6 +253,11 @@ export class Extension extends BaseExtension implements IPDFExtension { this.shell.$overlays.append(this.$settingsDialogue); this.settingsDialogue = new SettingsDialogue(this.$settingsDialogue); + this.$progressDialogue = $(''); + this.shell.$overlays.append(this.$progressDialogue); + this.progressDialogue = new ProgressDialogue(this.$progressDialogue); + setTimeout(this.showDocLoadProgress.bind(this), 3000); + this._spinner = $("div.spinner"); // get spinner reference //init print container and scratch canvas to hold the rendered page @@ -272,6 +279,34 @@ export class Extension extends BaseExtension implements IPDFExtension { } } + showDocLoadProgress():void { + if(this._pdfDoc) + return; + + if(this.progressDialogue.content.docLoadingText) + this.progressDialogue.setOptions({label:this.progressDialogue.content.docLoadingText}); + + this.progressDialogue.open(); + + let num = 1; + let interval = setInterval(() => { + if(this._pdfDoc) + { + this.progressDialogue.setValue(100); + setTimeout(()=>{ + this.progressDialogue.close(); + }, 200); + clearInterval(interval); + return; + } + + if(num + 2 == 100) + return; //hack - stop the progress bar till doc ready + + this.progressDialogue.setValue(++num); + }, 200) + } + bookmark() : void { super.bookmark(); diff --git a/src/extensions/uv-pdf-extension/l10n/en-GB.json b/src/extensions/uv-pdf-extension/l10n/en-GB.json index 90dbbd654..ace9219dd 100644 --- a/src/extensions/uv-pdf-extension/l10n/en-GB.json +++ b/src/extensions/uv-pdf-extension/l10n/en-GB.json @@ -132,6 +132,12 @@ "size": "Size:", "width": "Width" } + }, + "progressDialogue":{ + "content": { + "docLoadingText": "Loading content...", + "docPrintProgressText" : "Preparing document for printing..." + } } } } \ No newline at end of file From 240b2991d86112e554d4699f4a899d62dd9f7ea9 Mon Sep 17 00:00:00 2001 From: Shaukat Ali Date: Wed, 25 Mar 2020 14:40:35 +0000 Subject: [PATCH 10/17] ProgressDialog integrated with ebook --- .../uv-ebook-extension/Extension.ts | 36 +++++++++++++++++++ .../uv-ebook-extension/l10n/en-GB.json | 6 ++++ 2 files changed, 42 insertions(+) diff --git a/src/extensions/uv-ebook-extension/Extension.ts b/src/extensions/uv-ebook-extension/Extension.ts index 3a5c1769d..fe133180a 100644 --- a/src/extensions/uv-ebook-extension/Extension.ts +++ b/src/extensions/uv-ebook-extension/Extension.ts @@ -13,6 +13,7 @@ import { MoreInfoRightPanel } from "../../modules/uv-moreinforightpanel-module/M import { SettingsDialogue } from "./SettingsDialogue"; import { ShareDialogue } from "./ShareDialogue"; import { IEbookExtensionData } from "./IEbookExtensionData"; +import {ProgressDialogue} from "../../modules/uv-dialogues-module/ProgressDialogue"; const PRINT_IFRAME = "ifrmPrintEbookContent"; @@ -22,6 +23,7 @@ export class Extension extends BaseExtension implements IEbookExtension { $moreInfoDialogue: JQuery; $multiSelectDialogue: JQuery; $settingsDialogue: JQuery; + $progressDialogue: JQuery; $shareDialogue: JQuery; centerPanel: EbookCenterPanel; downloadDialogue: DownloadDialogue; @@ -32,6 +34,7 @@ export class Extension extends BaseExtension implements IEbookExtension { moreInfoDialogue: MoreInfoDialogue; rightPanel: MoreInfoRightPanel; settingsDialogue: SettingsDialogue; + progressDialogue: ProgressDialogue; shareDialogue: ShareDialogue; cfiFragement: string; @@ -116,6 +119,11 @@ export class Extension extends BaseExtension implements IEbookExtension { this.shell.$overlays.append(this.$settingsDialogue); this.settingsDialogue = new SettingsDialogue(this.$settingsDialogue); + this.$progressDialogue = $(''); + this.shell.$overlays.append(this.$progressDialogue); + this.progressDialogue = new ProgressDialogue(this.$progressDialogue); + setTimeout(this.showDocLoadProgress.bind(this), 3000); + if (this.isHeaderPanelEnabled()) { this.headerPanel.init(); } @@ -136,6 +144,34 @@ export class Extension extends BaseExtension implements IEbookExtension { this._spinner.hide(); } + showDocLoadProgress():void { + if(this._ebook) + return; + + if(this.progressDialogue.content.docLoadingText) + this.progressDialogue.setOptions({label:this.progressDialogue.content.docLoadingText}); + + this.progressDialogue.open(); + + let num = 1; + let interval = setInterval(() => { + if(this._ebook) + { + this.progressDialogue.setValue(100); + setTimeout(()=>{ + this.progressDialogue.close(); + }, 200); + clearInterval(interval); + return; + } + + if(num + 2 == 100) + return; //hack - stop the progress bar till doc ready + + this.progressDialogue.setValue(++num); + }, 200) + } + getPrintContentwindow(iframe){ return iframe.contentWindow; } diff --git a/src/extensions/uv-ebook-extension/l10n/en-GB.json b/src/extensions/uv-ebook-extension/l10n/en-GB.json index 1974f34cd..a89c3da58 100644 --- a/src/extensions/uv-ebook-extension/l10n/en-GB.json +++ b/src/extensions/uv-ebook-extension/l10n/en-GB.json @@ -158,6 +158,12 @@ "size": "Size:", "width": "Width" } + }, + "progressDialogue":{ + "content": { + "docLoadingText": "Loading content...", + "docPrintProgressText" : "Preparing document for printing..." + } } } } From 97896ac56bad4780429b92f75ae401f7cd86f619 Mon Sep 17 00:00:00 2001 From: Shaukat Ali Date: Thu, 26 Mar 2020 09:17:34 +0000 Subject: [PATCH 11/17] ProgressDialog integrated for print pdf --- src/extensions/uv-pdf-extension/Extension.ts | 33 ++++++++++++------- .../uv-dialogues-module/ProgressDialogue.ts | 13 +++++++- .../uv-dialogues-module/css/styles.less | 6 ++++ 3 files changed, 40 insertions(+), 12 deletions(-) diff --git a/src/extensions/uv-pdf-extension/Extension.ts b/src/extensions/uv-pdf-extension/Extension.ts index e8fb7ce67..56fdf91a2 100644 --- a/src/extensions/uv-pdf-extension/Extension.ts +++ b/src/extensions/uv-pdf-extension/Extension.ts @@ -37,7 +37,6 @@ export class Extension extends BaseExtension implements IPDFExtension { private _currentPage:number = -1; private _printContainer: any; private _scratchCanvas:any; - private _spinner:JQuery; private _activePrint:boolean; create(): void { @@ -156,19 +155,19 @@ export class Extension extends BaseExtension implements IPDFExtension { renderPages() { if(!this._pdfDoc){ - return new Promise(() => { - throw new Error(); - }); + return Promise.reject("PDF document not ready"); } const pageCount = this._pdfDoc.numPages; const renderNextPage = (resolve, reject) => { - if (++this._currentPage >= pageCount) { + this.progressDialogue.setValue(this._currentPage); resolve(); return; } + this.progressDialogue.setValue(this._currentPage); + const index = this._currentPage; this.renderPage(index + 1) .then(this.useRenderedPage.bind(this)) @@ -185,17 +184,19 @@ export class Extension extends BaseExtension implements IPDFExtension { return; this._activePrint = true; - this._spinner.show(); + this.initPrintProgress(); let rederedPages = this.renderPages(); rederedPages.then(() => { - this._spinner.hide(); - window.print(); this._activePrint = false; + setTimeout(()=>{ + this.progressDialogue.close(); + window.print(); + }, 200); }); rederedPages.catch((r)=> { - this._spinner.hide(); + this.progressDialogue.close(); this._activePrint = false; }); } @@ -258,8 +259,6 @@ export class Extension extends BaseExtension implements IPDFExtension { this.progressDialogue = new ProgressDialogue(this.$progressDialogue); setTimeout(this.showDocLoadProgress.bind(this), 3000); - this._spinner = $("div.spinner"); // get spinner reference - //init print container and scratch canvas to hold the rendered page //if we're using PDF.js if (Utils.Bools.getBool(this.centerPanel.extension.data.config.options.usePdfJs, false)) { @@ -307,6 +306,18 @@ export class Extension extends BaseExtension implements IPDFExtension { }, 200) } + initPrintProgress():void{ + var options={ + maxValue: this._pdfDoc.numPages, + showPercentage: true + }; + if(this.progressDialogue.content.docPrintProgressText) + options["label"] = this.progressDialogue.content.docPrintProgressText; + + this.progressDialogue.setOptions(options); + this.progressDialogue.open(); + } + bookmark() : void { super.bookmark(); diff --git a/src/modules/uv-dialogues-module/ProgressDialogue.ts b/src/modules/uv-dialogues-module/ProgressDialogue.ts index 0c167a1af..7ab8d0a7c 100644 --- a/src/modules/uv-dialogues-module/ProgressDialogue.ts +++ b/src/modules/uv-dialogues-module/ProgressDialogue.ts @@ -3,6 +3,7 @@ import {Dialogue} from "../uv-shared-module/Dialogue"; export class ProgressDialogue extends Dialogue { $label: JQuery; + $percentLabel: JQuery; $progressBar: JQuery; value: number = 0; @@ -28,9 +29,13 @@ export class ProgressDialogue extends Dialogue { this.$label = $(``); this.$content.append(this.$label); + this.$percentLabel = $(''); + this.$content.append(this.$percentLabel); + this.$progressBar = $(``); this.$content.append(this.$progressBar); + this.$percentLabel.hide(); this.$element.hide(); } @@ -44,11 +49,17 @@ export class ProgressDialogue extends Dialogue { this.$label.html(this.options.label); this.$progressBar.attr('max', this.options.maxValue); this.$progressBar.attr('value', this.value); + + if(this.options.showPercentage) + this.$percentLabel.show(); } setValue(value:number):void{ this.value = value; - this.$progressBar.attr('value', this.value); + this.$progressBar.val(this.value); + + if(this.options.showPercentage) + this.$percentLabel.text(Math.floor(this.value / this.options.maxValue * 100) + '%'); } open(): void { diff --git a/src/modules/uv-dialogues-module/css/styles.less b/src/modules/uv-dialogues-module/css/styles.less index f98117201..6fa3fe4a9 100644 --- a/src/modules/uv-dialogues-module/css/styles.less +++ b/src/modules/uv-dialogues-module/css/styles.less @@ -373,6 +373,12 @@ width: 100%; height: 15px; } + + .progress-percent{ + position: absolute; + right: 10px; + font-weight: 600; + } } } } From 39865e06df10d92ae007518f2377323d1d95616a Mon Sep 17 00:00:00 2001 From: Shaukat Ali Date: Thu, 26 Mar 2020 15:06:01 +0000 Subject: [PATCH 12/17] ProgressDialog integrated for EPUB print --- .../uv-ebook-extension/Extension.ts | 139 ++++++++++-------- .../uv-ebook-extension/theme/theme.less | 4 - .../EbookCenterPanel.ts | 4 - 3 files changed, 77 insertions(+), 70 deletions(-) diff --git a/src/extensions/uv-ebook-extension/Extension.ts b/src/extensions/uv-ebook-extension/Extension.ts index fe133180a..b502b8f2a 100644 --- a/src/extensions/uv-ebook-extension/Extension.ts +++ b/src/extensions/uv-ebook-extension/Extension.ts @@ -38,7 +38,6 @@ export class Extension extends BaseExtension implements IEbookExtension { shareDialogue: ShareDialogue; cfiFragement: string; - private _spinner:JQuery; private _ebook:any; private _printDocument:any; private _activePrint:boolean = false; @@ -139,9 +138,6 @@ export class Extension extends BaseExtension implements IEbookExtension { if (this.isFooterPanelEnabled()) { this.footerPanel.init(); } - - this._spinner = $("div#spinner"); - this._spinner.hide(); } showDocLoadProgress():void { @@ -177,9 +173,9 @@ export class Extension extends BaseExtension implements IEbookExtension { } finalizePrint(contentWindow){ - contentWindow.print(); this._activePrint = false; - this._spinner.hide(); + this.progressDialogue.close(); + contentWindow.print(); } printEbook(){ @@ -193,7 +189,7 @@ export class Extension extends BaseExtension implements IEbookExtension { return; this._activePrint = true; - this._spinner.show(); + this.initPrintProgress(); let printDocIframe = document.getElementById(PRINT_IFRAME) as HTMLIFrameElement; if(printDocIframe){ @@ -201,62 +197,67 @@ export class Extension extends BaseExtension implements IEbookExtension { return; } - this.renderContents() - .then(()=>{ - //remove document content meta tags - this._printDocument.querySelectorAll("[name^='dc.']") - .forEach(meta => { - meta.remove(); - }); - - let docHead = this._printDocument.head || this._printDocument.getElementsByTagName('head')[0]; - //add viewport meta tag to print document - let meta = document.createElement('meta'); - meta.setAttribute('name', 'viewport'); - meta.content = "width=device-width, initial-scale=1"; - docHead.appendChild(meta); - - //Add style to doc for page break after each chapter - let style = document.createElement('style'); - style.type = 'text/css'; - style.appendChild(document.createTextNode("body{margin: 0; padding: 0;} body > *{display: block; page-break-after: always; page-break-before: avoid;}")); - docHead.appendChild(style); - - //set document title - docHead.getElementsByTagName("title")[0].innerText = this._ebook.packaging.metadata.title; - - //create an iframe to load the doc contents - let ifrm = document.createElement('iframe'); - ifrm.setAttribute("id", "ifrmPrintEbookContent"); - ifrm.setAttribute("style", "display:none;"); - - //add iframe to body - document.body.appendChild(ifrm); - - // check if srcdoc supported for iframe for the browser - if(!!("srcdoc" in ifrm)){ - //add onload event to iframe - ifrm.onload = () => { - this.finalizePrint(this.getPrintContentwindow(ifrm)); - }; - - //add doc html to iframe srcdoc - ifrm.setAttribute("srcdoc", this._printDocument.documentElement.innerHTML); - return; - } - - //if scrdoc not supported for the browser - let contentWindow = this.getPrintContentwindow(ifrm); - contentWindow.document.write(this._printDocument.documentElement.innerHTML); - - setTimeout(() => { - this.finalizePrint(contentWindow); - }, 1000); - }); + this.renderContents().then(()=>{ + let docHead = this._printDocument.head || this._printDocument.getElementsByTagName('head')[0]; + + //add viewport meta tag to print document + let meta = document.createElement('meta'); + meta.setAttribute('name', 'viewport'); + meta.content = "width=device-width, initial-scale=1"; + docHead.appendChild(meta); + + //Add style to doc for page break after each chapter + let style = document.createElement('style'); + style.type = 'text/css'; + style.appendChild(document.createTextNode("body{margin: 0; padding: 0;} body > .section{display: block; position:relative; min-height:1px; page-break-after: avoid; page-break-before: always;}")); + docHead.appendChild(style); + + //set document title + let docHeadTitle = docHead.getElementsByTagName("title")[0]; + if(docHeadTitle) + docHeadTitle.innerText = this._ebook.packaging.metadata.title; + else{ + docHeadTitle = document.createElement("title"); + docHeadTitle.innerText = this._ebook.packaging.metadata.title; + docHead.appendChild(docHeadTitle); + } + + this.createIframeAndExecPrint(); + }); + } + + createIframeAndExecPrint():void { + //create an iframe to load the doc contents + let ifrm = document.createElement('iframe'); + ifrm.setAttribute("id", "ifrmPrintEbookContent"); + ifrm.setAttribute("style", "display:none;"); + + //add iframe to body + document.body.appendChild(ifrm); + + // check if srcdoc supported for iframe for the browser + if(!!("srcdoc" in ifrm)){ + //add onload event to iframe + ifrm.onload = () => { + this.finalizePrint(this.getPrintContentwindow(ifrm)); + }; + + //add doc html to iframe srcdoc + ifrm.setAttribute("srcdoc", this._printDocument.documentElement.innerHTML); + return; + } + + //if scrdoc not supported for the browser + let contentWindow = this.getPrintContentwindow(ifrm); + contentWindow.document.write(this._printDocument.documentElement.innerHTML); + + setTimeout(() => { + this.finalizePrint(contentWindow); + }, 1000); } renderContents() { - let tocCount = 144; + let tocCount = this._ebook.spine.length; let currentTocIndex = -1; const renderNextSectionContent = (resolve, reject) => { @@ -279,6 +280,7 @@ export class Extension extends BaseExtension implements IEbookExtension { if(!section) return Promise.resolve(); + this.progressDialogue.setValue(index + 1); return section.render(this._ebook.load.bind(this._ebook)) .then(htmlDoc => { let domparser = new DOMParser() @@ -295,7 +297,7 @@ export class Extension extends BaseExtension implements IEbookExtension { //attach the cssClass and style to section wrapper var sectionWrapper= document.createElement('div'); - sectionWrapper.setAttribute("class", (docClass ? docClass + " " : "") + "section-" + index ); + sectionWrapper.setAttribute("class", (docClass ? docClass + " " : "") + "section section-" + index ); sectionWrapper.setAttribute("style", docStyle); sectionWrapper.innerHTML= doc.body.innerHTML; @@ -327,4 +329,17 @@ export class Extension extends BaseExtension implements IEbookExtension { this.component.publish(Events.CFI_FRAGMENT_CHANGED, cfi); } } -} + + initPrintProgress():void{ + var options={ + maxValue: this._ebook.spine.length, + showPercentage: true + }; + + if(this.progressDialogue.content.docPrintProgressText) + options["label"] = this.progressDialogue.content.docPrintProgressText; + + this.progressDialogue.setOptions(options); + this.progressDialogue.open(); + } +} \ No newline at end of file diff --git a/src/extensions/uv-ebook-extension/theme/theme.less b/src/extensions/uv-ebook-extension/theme/theme.less index ba3370520..5571a575a 100644 --- a/src/extensions/uv-ebook-extension/theme/theme.less +++ b/src/extensions/uv-ebook-extension/theme/theme.less @@ -1,7 +1,3 @@ -:root { - --reader-spinner-color: #bdbdbd; -} - @import '../../../modules/uv-dialogues-module/css/styles.less'; @import '../../../modules/uv-ebookcenterpanel-module/css/styles.less'; @import '../../../modules/uv-ebookleftpanel-module/css/styles.less'; diff --git a/src/modules/uv-ebookcenterpanel-module/EbookCenterPanel.ts b/src/modules/uv-ebookcenterpanel-module/EbookCenterPanel.ts index e203da003..8bc3eeb46 100644 --- a/src/modules/uv-ebookcenterpanel-module/EbookCenterPanel.ts +++ b/src/modules/uv-ebookcenterpanel-module/EbookCenterPanel.ts @@ -10,7 +10,6 @@ export class EbookCenterPanel extends CenterPanel { private _ebookReaderReady: boolean = false; private _state: any = {}; private _prevState: any = {}; - private _$spinner: JQuery; constructor($element: JQuery) { super($element); @@ -83,9 +82,6 @@ export class EbookCenterPanel extends CenterPanel { }); } ); - - this._$spinner = $('
'); - this.$content.append(this._$spinner); } openMedia(resources: Manifesto.IExternalResource[]) { From 1bd9c793e9eefd197d9db90ec996835fe27c2b1e Mon Sep 17 00:00:00 2001 From: Shaukat Ali Date: Tue, 31 Mar 2020 13:27:54 +0100 Subject: [PATCH 13/17] Removed commented code blocks --- src/extensions/uv-pdf-extension/Extension.ts | 3 +- .../uv-pdffooterpanel-module/FooterPanel.ts | 696 ------------------ 2 files changed, 1 insertion(+), 698 deletions(-) diff --git a/src/extensions/uv-pdf-extension/Extension.ts b/src/extensions/uv-pdf-extension/Extension.ts index 56fdf91a2..36534cd11 100644 --- a/src/extensions/uv-pdf-extension/Extension.ts +++ b/src/extensions/uv-pdf-extension/Extension.ts @@ -31,7 +31,6 @@ export class Extension extends BaseExtension implements IPDFExtension { rightPanel: MoreInfoRightPanel; settingsDialogue: SettingsDialogue; progressDialogue: ProgressDialogue; - $printFrame:any; private _pdfDoc:any; private _currentPage:number = -1; @@ -111,7 +110,7 @@ export class Extension extends BaseExtension implements IPDFExtension { } renderPage(pageNumber) { - const PRINT_UNITS = 0.72 * 2; + const PRINT_UNITS = 1; return this._pdfDoc .getPage(pageNumber) diff --git a/src/modules/uv-pdffooterpanel-module/FooterPanel.ts b/src/modules/uv-pdffooterpanel-module/FooterPanel.ts index b06aef4d6..646c38713 100644 --- a/src/modules/uv-pdffooterpanel-module/FooterPanel.ts +++ b/src/modules/uv-pdffooterpanel-module/FooterPanel.ts @@ -1,35 +1,8 @@ -//import {AutoComplete} from "../uv-shared-module/AutoComplete"; -//import {BaseEvents} from "../uv-shared-module/BaseEvents"; import {Events} from "../../extensions/uv-pdf-extension/Events"; import {FooterPanel as BaseFooterPanel} from "../uv-shared-module/FooterPanel"; -//import {ISeadragonExtension} from "../../extensions/uv-seadragon-extension/ISeadragonExtension"; -//import {Mode} from "../../extensions/uv-seadragon-extension/Mode"; -//import {AnnotationResults} from "../uv-shared-module/AnnotationResults"; -//import {UVUtils} from "../../Utils"; -//import AnnotationGroup = Manifold.AnnotationGroup; export class FooterPanel extends BaseFooterPanel { - - // $clearSearchResultsButton: JQuery; - // $line: JQuery; - // $nextResultButton: JQuery; - // $pagePositionLabel: JQuery; - // $pagePositionMarker: JQuery; - // $placemarkerDetails: JQuery; - // $placemarkerDetailsBottom: JQuery; - // $placemarkerDetailsTop: JQuery; - // $previousResultButton: JQuery; $printButton: JQuery; - // $searchButton: JQuery; - // $searchContainer: JQuery; - // $searchLabel: JQuery; - // $searchOptions: JQuery; - // $searchPagerContainer: JQuery; - // $searchPagerControls: JQuery; - // $searchResultsContainer: JQuery; - // $searchResultsInfo: JQuery; - // $searchText: JQuery; - // $searchTextContainer: JQuery; currentPlacemarkerIndex: number; placemarkerTouched: boolean = false; @@ -40,47 +13,9 @@ export class FooterPanel extends BaseFooterPanel { } create(): void { - this.setConfig('pdfFooterPanel'); - super.create(); - // this.component.subscribe(BaseEvents.CANVAS_INDEX_CHANGED, () => { - // this.canvasIndexChanged(); - // this.setCurrentSearchResultPlacemarker(); - // this.updatePrevButton(); - // this.updateNextButton(); - // }); - - // this.component.subscribe(BaseEvents.CLEAR_ANNOTATIONS, () => { - // this.clearSearchResults(); - // }); - - // // todo: this should be a setting - // this.component.subscribe(Events.MODE_CHANGED, () => { - // this.settingsChanged(); - // }); - - // this.component.subscribe(Events.SEARCH, (terms: string) => { - // this.terms = terms; - // }); - - // this.component.subscribe(BaseEvents.ANNOTATIONS, (annotationResults: AnnotationResults) => { - // this.displaySearchResults(annotationResults.annotations, annotationResults.terms); - // this.setCurrentSearchResultPlacemarker(); - // this.updatePrevButton(); - // this.updateNextButton(); - // }); - - // this.component.subscribe(BaseEvents.ANNOTATIONS_EMPTY, () => { - // this.hideSearchSpinner(); - // }); - - // this.component.subscribe(BaseEvents.ANNOTATION_CHANGED, () => { - // this.updatePrevButton(); - // this.updateNextButton(); - // }); - this.$printButton = $(`