From 2cc22f3f6898f8c5f365c8a604ced5c100476f8d Mon Sep 17 00:00:00 2001 From: Justin Obara Date: Fri, 3 Aug 2018 09:47:05 -0400 Subject: [PATCH 01/12] GPII-3154: removing package-lock.json --- package-lock.json | 2351 --------------------------------------------- 1 file changed, 2351 deletions(-) delete mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index ff3af86..0000000 --- a/package-lock.json +++ /dev/null @@ -1,2351 +0,0 @@ -{ - "name": "ui-options-chrome", - "version": "0.1.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "JSV": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz", - "integrity": "sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c=", - "dev": true - }, - "URIjs": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/URIjs/-/URIjs-1.16.1.tgz", - "integrity": "sha1-7evGeLi3SyawXStIHhI4P1rgS4s=", - "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==", - "dev": true - }, - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "dev": true, - "requires": { - "acorn": "3.3.0" - } - }, - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "ajv-keywords": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", - "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", - "dev": true - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, - "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "archiver": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-1.3.0.tgz", - "integrity": "sha1-TyGU1tj5nfP1MeaIHxTxXVX6ryI=", - "dev": true, - "requires": { - "archiver-utils": "1.3.0", - "async": "2.6.0", - "buffer-crc32": "0.2.13", - "glob": "7.1.2", - "lodash": "4.17.5", - "readable-stream": "2.3.6", - "tar-stream": "1.5.5", - "walkdir": "0.0.11", - "zip-stream": "1.2.0" - }, - "dependencies": { - "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", - "dev": true, - "requires": { - "lodash": "4.17.5" - } - } - } - }, - "archiver-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz", - "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=", - "dev": true, - "requires": { - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "lazystream": "1.0.0", - "lodash": "4.17.5", - "normalize-path": "2.1.1", - "readable-stream": "2.3.6" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "1.0.3" - } - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "1.0.3" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true - }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "bl": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", - "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", - "dev": true, - "requires": { - "readable-stream": "2.3.6", - "safe-buffer": "5.1.1" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } - }, - "browserify-zlib": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", - "dev": true, - "requires": { - "pako": "0.2.9" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true - }, - "buffer-from": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", - "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", - "dev": true - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "requires": { - "callsites": "0.2.0" - } - }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true - }, - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, - "requires": { - "camelcase": "2.1.1", - "map-obj": "1.0.1" - } - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true - }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true, - "requires": { - "restore-cursor": "1.0.1" - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "coffee-script": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.10.0.tgz", - "integrity": "sha1-EpOLz5vhlI+gBvkuDEyegXBRCMA=", - "dev": true - }, - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true - }, - "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", - "dev": true - }, - "compress-commons": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz", - "integrity": "sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8=", - "dev": true, - "requires": { - "buffer-crc32": "0.2.13", - "crc32-stream": "2.0.0", - "normalize-path": "2.1.1", - "readable-stream": "2.3.6" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "1.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "typedarray": "0.0.6" - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "crc": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.5.0.tgz", - "integrity": "sha1-mLi6fUiWZbo5efWbITgTdBAaGWQ=", - "dev": true - }, - "crc32-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz", - "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=", - "dev": true, - "requires": { - "crc": "3.5.0", - "readable-stream": "2.3.6" - } - }, - "crx": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/crx/-/crx-3.2.1.tgz", - "integrity": "sha1-Fyk+51790IxtHIs+F0nS1XV89Cs=", - "dev": true, - "requires": { - "archiver": "1.3.0", - "commander": "2.11.0", - "es6-promise": "3.3.1", - "node-rsa": "0.2.30" - } - }, - "css-parse": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz", - "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=", - "dev": true - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "requires": { - "array-find-index": "1.0.2" - } - }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, - "requires": { - "es5-ext": "0.10.42" - } - }, - "dateformat": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", - "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", - "dev": true, - "requires": { - "get-stdin": "4.0.1", - "meow": "3.7.0" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true, - "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.1", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.2" - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" - } - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, - "requires": { - "once": "1.4.0" - } - }, - "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "dev": true, - "requires": { - "is-arrayish": "0.2.1" - } - }, - "es5-ext": { - "version": "0.10.42", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.42.tgz", - "integrity": "sha512-AJxO1rmPe1bDEfSR6TJ/FgMFYuTBhR5R57KW58iCkYACMyFbrkqVyzXSurYoScDGvgyMpk7uRF/lPUPPTmsRSA==", - "dev": true, - "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "next-tick": "1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.42", - "es6-symbol": "3.1.1" - } - }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.42", - "es6-iterator": "2.0.3", - "es6-set": "0.1.5", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } - }, - "es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", - "dev": true - }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.42", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.42" - } - }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.42", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", - "dev": true, - "requires": { - "es6-map": "0.1.5", - "es6-weak-map": "2.0.2", - "esrecurse": "4.2.1", - "estraverse": "4.2.0" - } - }, - "eslint-config-fluid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-fluid/-/eslint-config-fluid-1.0.0.tgz", - "integrity": "sha1-/R/owUQ5xq/ACbMcBmW+DVdNKJI=", - "dev": true - }, - "espree": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.1.4.tgz", - "integrity": "sha1-BybXrIOvl6fISY2ps2OjYJ0qaKE=", - "dev": true, - "requires": { - "acorn": "3.3.0", - "acorn-jsx": "3.0.1" - } - }, - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", - "dev": true - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, - "requires": { - "estraverse": "4.2.0" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.42" - } - }, - "eventemitter2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", - "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", - "dev": true - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" - } - }, - "file-entry-cache": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-1.3.1.tgz", - "integrity": "sha1-RMYepgeuS+nBQC9B9EJwy/4zT/g=", - "dev": true, - "requires": { - "flat-cache": "1.3.0", - "object-assign": "4.1.1" - } - }, - "file-sync-cmp": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz", - "integrity": "sha1-peeo/7+kk7Q7kju9TKiaU7Y7YSs=", - "dev": true - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - }, - "findup-sync": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", - "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", - "dev": true, - "requires": { - "glob": "5.0.15" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } - } - }, - "flat-cache": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", - "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", - "dev": true, - "requires": { - "circular-json": "0.3.3", - "del": "2.2.2", - "graceful-fs": "4.1.11", - "write": "0.2.1" - } - }, - "fluid-eslint": { - "version": "2.10.2", - "resolved": "https://registry.npmjs.org/fluid-eslint/-/fluid-eslint-2.10.2.tgz", - "integrity": "sha1-/naYSwotFMZQ/dDRMow8y5ET+ew=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "concat-stream": "1.6.2", - "debug": "2.6.9", - "doctrine": "1.5.0", - "es6-map": "0.1.5", - "escope": "3.6.0", - "espree": "3.1.4", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "file-entry-cache": "1.3.1", - "glob": "7.1.2", - "globals": "9.18.0", - "ignore": "3.3.7", - "imurmurhash": "0.1.4", - "inquirer": "0.12.0", - "is-my-json-valid": "2.17.2", - "is-resolvable": "1.1.0", - "js-yaml": "3.11.0", - "json-stable-stringify": "1.0.1", - "lodash": "4.17.5", - "mkdirp": "0.5.1", - "optionator": "0.8.2", - "path-is-absolute": "1.0.1", - "path-is-inside": "1.0.2", - "pluralize": "1.2.1", - "progress": "1.1.8", - "require-uncached": "1.0.3", - "shelljs": "0.6.1", - "strip-json-comments": "1.0.4", - "table": "3.8.3", - "text-table": "0.2.0", - "user-home": "2.0.0" - } - }, - "fluid-grunt-eslint": { - "version": "18.1.1", - "resolved": "https://registry.npmjs.org/fluid-grunt-eslint/-/fluid-grunt-eslint-18.1.1.tgz", - "integrity": "sha1-7bz9YFJU2LjvLPgJ5YOvIgGKgmk=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "fluid-eslint": "2.10.2" - } - }, - "fluid-resolve": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fluid-resolve/-/fluid-resolve-1.3.0.tgz", - "integrity": "sha1-ODAp6xphlpgCvYVoTI4obm0sDf0=" - }, - "formatio": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.1.1.tgz", - "integrity": "sha1-XtPM1jZVEJc4NGXZlhmRAOhhYek=", - "dev": true, - "requires": { - "samsam": "1.1.2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "generate-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", - "dev": true - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true, - "requires": { - "is-property": "1.0.2" - } - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "getobject": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", - "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "grunt": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.1.tgz", - "integrity": "sha1-6HeHZOlEsY8yuw8QuQeEdcnftWs=", - "dev": true, - "requires": { - "coffee-script": "1.10.0", - "dateformat": "1.0.12", - "eventemitter2": "0.4.14", - "exit": "0.1.2", - "findup-sync": "0.3.0", - "glob": "7.0.6", - "grunt-cli": "1.2.0", - "grunt-known-options": "1.1.0", - "grunt-legacy-log": "1.0.1", - "grunt-legacy-util": "1.0.0", - "iconv-lite": "0.4.21", - "js-yaml": "3.5.5", - "minimatch": "3.0.4", - "nopt": "3.0.6", - "path-is-absolute": "1.0.1", - "rimraf": "2.2.8" - }, - "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "glob": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", - "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "grunt-cli": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz", - "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=", - "dev": true, - "requires": { - "findup-sync": "0.3.0", - "grunt-known-options": "1.1.0", - "nopt": "3.0.6", - "resolve": "1.1.7" - } - }, - "js-yaml": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.5.5.tgz", - "integrity": "sha1-A3fDgBfKvHMisNH7zSWkkWQfL74=", - "dev": true, - "requires": { - "argparse": "1.0.10", - "esprima": "2.7.3" - } - }, - "rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", - "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", - "dev": true - } - } - }, - "grunt-contrib-clean": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-1.0.0.tgz", - "integrity": "sha1-ay7ZQRfix//jLuBFeMlv5GJam20=", - "dev": true, - "requires": { - "async": "1.5.2", - "rimraf": "2.6.2" - } - }, - "grunt-contrib-copy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz", - "integrity": "sha1-cGDGWB6QS4qw0A8HbgqPbj58NXM=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "file-sync-cmp": "0.1.1" - } - }, - "grunt-contrib-stylus": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-stylus/-/grunt-contrib-stylus-1.2.0.tgz", - "integrity": "sha1-R9RG7wVESW7/naQY0A9XdFQ0crs=", - "dev": true, - "requires": { - "async": "1.5.2", - "chalk": "1.1.3", - "lodash": "4.17.5", - "nib": "1.1.2", - "stylus": "0.54.5" - } - }, - "grunt-contrib-uglify": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-3.0.1.tgz", - "integrity": "sha1-/etfk4pMgEL46Grkb2NVTo6VEcs=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "maxmin": "1.1.0", - "uglify-js": "3.0.28", - "uri-path": "1.0.0" - } - }, - "grunt-crx": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/grunt-crx/-/grunt-crx-1.0.5.tgz", - "integrity": "sha1-nU5QHO8WtyF3KmBBxNQdH5KFirU=", - "dev": true, - "requires": { - "crx": "3.2.1", - "es6-promise": "3.3.1", - "mkdirp": "0.5.1", - "os-homedir": "1.0.2", - "xtend": "4.0.1" - } - }, - "grunt-jsonlint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grunt-jsonlint/-/grunt-jsonlint-1.0.4.tgz", - "integrity": "sha1-tmMaKd57ervP2ENReqX1WeOhb3A=", - "dev": true, - "requires": { - "jsonlint": "1.6.0" - } - }, - "grunt-known-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.0.tgz", - "integrity": "sha1-pCdO6zL6dl2lp6OxcSYXzjsUQUk=", - "dev": true - }, - "grunt-legacy-log": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-1.0.1.tgz", - "integrity": "sha512-rwuyqNKlI0IPz0DvxzJjcEiQEBaBNVeb1LFoZKxSmHLETFUwhwUrqOsPIxURTKSwNZHZ4ht1YLBYmVU0YZAzHQ==", - "dev": true, - "requires": { - "colors": "1.1.2", - "grunt-legacy-log-utils": "1.0.0", - "hooker": "0.2.3", - "lodash": "4.17.5", - "underscore.string": "3.3.4" - } - }, - "grunt-legacy-log-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-1.0.0.tgz", - "integrity": "sha1-p7ji0Ps1taUPSvmG/BEnSevJbz0=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "lodash": "4.3.0" - }, - "dependencies": { - "lodash": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz", - "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ=", - "dev": true - } - } - }, - "grunt-legacy-util": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.0.0.tgz", - "integrity": "sha1-OGqnjcbtUJhsKxiVcmWxtIq7m4Y=", - "dev": true, - "requires": { - "async": "1.5.2", - "exit": "0.1.2", - "getobject": "0.1.0", - "hooker": "0.2.3", - "lodash": "4.3.0", - "underscore.string": "3.2.3", - "which": "1.2.14" - }, - "dependencies": { - "lodash": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz", - "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ=", - "dev": true - }, - "underscore.string": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.2.3.tgz", - "integrity": "sha1-gGmSYzZl1eX8tNsfs6hi62jp5to=", - "dev": true - } - } - }, - "grunt-shell": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/grunt-shell/-/grunt-shell-1.3.0.tgz", - "integrity": "sha1-3lYGCpNN+OzuZAdLYcYwSQDXEVg=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "npm-run-path": "1.0.0", - "object-assign": "4.1.1" - } - }, - "gzip-size": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-1.0.0.tgz", - "integrity": "sha1-Zs+LEBBHInuVus5uodoMF37Vwi8=", - "dev": true, - "requires": { - "browserify-zlib": "0.1.4", - "concat-stream": "1.6.2" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "has-color": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", - "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", - "dev": true - }, - "hooker": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", - "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", - "dev": true - }, - "hosted-git-info": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", - "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", - "dev": true - }, - "iconv-lite": { - "version": "0.4.21", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.21.tgz", - "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==", - "dev": true, - "requires": { - "safer-buffer": "2.1.2" - } - }, - "ignore": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", - "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "2.0.1" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "infusion": { - "version": "3.0.0-dev.20180720T113347Z.272cf70", - "resolved": "https://registry.npmjs.org/infusion/-/infusion-3.0.0-dev.20180720T113347Z.272cf70.tgz", - "integrity": "sha512-R+V7DX1teUzwel1gK0SgdTS8hugblV9NxJZqtGhHFcR6aN0yj9RViajaXTRgKWLJj5unwOjftHI76+T4g7rr5A==", - "requires": { - "fluid-resolve": "1.3.0" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "inquirer": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", - "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", - "dev": true, - "requires": { - "ansi-escapes": "1.4.0", - "ansi-regex": "2.1.1", - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "cli-width": "2.2.0", - "figures": "1.7.0", - "lodash": "4.17.5", - "readline2": "1.0.1", - "run-async": "0.1.0", - "rx-lite": "3.1.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "through": "2.3.8" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "1.1.1" - } - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-my-ip-valid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", - "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", - "dev": true - }, - "is-my-json-valid": { - "version": "2.17.2", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz", - "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", - "dev": true, - "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "is-my-ip-valid": "1.0.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" - } - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "dev": true, - "requires": { - "is-path-inside": "1.0.1" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "1.0.2" - } - }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "js-yaml": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", - "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", - "dev": true, - "requires": { - "argparse": "1.0.10", - "esprima": "4.0.0" - } - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, - "jsonlint": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/jsonlint/-/jsonlint-1.6.0.tgz", - "integrity": "sha1-iKpGvCiaesk7tGyuLVihh6m7SUo=", - "dev": true, - "requires": { - "JSV": "4.0.2", - "nomnom": "1.8.1" - } - }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", - "dev": true - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "requires": { - "readable-stream": "2.3.6" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" - } - }, - "lodash": { - "version": "4.17.5", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", - "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", - "dev": true - }, - "lolex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.3.2.tgz", - "integrity": "sha1-fD2mL/yzDw9agKJWbKJORdigHzE=", - "dev": true - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" - } - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, - "maxmin": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-1.1.0.tgz", - "integrity": "sha1-cTZehKmd2Piz99X94vANHn9zvmE=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "figures": "1.7.0", - "gzip-size": "1.0.0", - "pretty-bytes": "1.0.4" - } - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "2.1.0", - "decamelize": "1.2.0", - "loud-rejection": "1.6.0", - "map-obj": "1.0.1", - "minimist": "1.2.0", - "normalize-package-data": "2.4.0", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "redent": "1.0.0", - "trim-newlines": "1.0.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.11" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "mute-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", - "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", - "dev": true - }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, - "nib": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/nib/-/nib-1.1.2.tgz", - "integrity": "sha1-amnt5AgblcDe+L4CSkyK4MLLtsc=", - "dev": true, - "requires": { - "stylus": "0.54.5" - } - }, - "node-jqunit": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/node-jqunit/-/node-jqunit-1.1.4.tgz", - "integrity": "sha1-aClWpK2rMljh2pttmMrEiK4SJ0Q=", - "dev": true, - "requires": { - "infusion": "2.0.0-dev.20151130T180545Z.18ee3f8" - }, - "dependencies": { - "infusion": { - "version": "2.0.0-dev.20151130T180545Z.18ee3f8", - "resolved": "https://registry.npmjs.org/infusion/-/infusion-2.0.0-dev.20151130T180545Z.18ee3f8.tgz", - "integrity": "sha1-B63iNXTwEheL4iGKj1FBurFL2qI=", - "dev": true, - "requires": { - "resolve": "1.1.6" - } - }, - "resolve": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.6.tgz", - "integrity": "sha1-00kq0FTKgA9b76YS5hvqwe7Jj48=", - "dev": true - } - } - }, - "node-rsa": { - "version": "0.2.30", - "resolved": "https://registry.npmjs.org/node-rsa/-/node-rsa-0.2.30.tgz", - "integrity": "sha1-iRLiw7G2TM5sp4PKsa8oKzAK3uY=", - "dev": true, - "requires": { - "asn1": "0.2.3", - "lodash": "3.3.0" - }, - "dependencies": { - "lodash": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.3.0.tgz", - "integrity": "sha1-ARzlLQGxTmDq7qdqy5uLpCxwWBs=", - "dev": true - } - } - }, - "nomnom": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", - "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", - "dev": true, - "requires": { - "chalk": "0.4.0", - "underscore": "1.6.0" - }, - "dependencies": { - "ansi-styles": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", - "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", - "dev": true - }, - "chalk": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", - "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", - "dev": true, - "requires": { - "ansi-styles": "1.0.0", - "has-color": "0.1.7", - "strip-ansi": "0.1.1" - } - }, - "strip-ansi": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", - "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", - "dev": true - } - } - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1.1.1" - } - }, - "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==", - "dev": true, - "requires": { - "hosted-git-info": "2.6.0", - "is-builtin-module": "1.0.0", - "semver": "5.5.0", - "validate-npm-package-license": "3.0.3" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "1.1.0" - } - }, - "npm-run-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-1.0.0.tgz", - "integrity": "sha1-9cMr9ZX+ga6Sfa7FLoL4sACsPI8=", - "dev": true, - "requires": { - "path-key": "1.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" - } - }, - "options": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", - "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=" - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", - "dev": true - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "1.3.1" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "2.0.1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-1.0.0.tgz", - "integrity": "sha1-XVPVeAGWRsDWiADbThRua9wqx68=", - "dev": true - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "2.0.4" - } - }, - "pluralize": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", - "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "pretty-bytes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", - "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", - "dev": true, - "requires": { - "get-stdin": "4.0.1", - "meow": "3.7.0" - } - }, - "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==", - "dev": true - }, - "progress": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", - "dev": true - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - } - }, - "readline2": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", - "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "mute-stream": "0.0.5" - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "1.0.2" - } - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "0.1.0", - "resolve-from": "1.0.1" - } - }, - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - }, - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true, - "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "7.1.2" - } - }, - "run-async": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", - "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", - "dev": true, - "requires": { - "once": "1.4.0" - } - }, - "rx-lite": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", - "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", - "dev": true - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "samsam": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.1.2.tgz", - "integrity": "sha1-vsEf3IOp/aBjQBIQ5AF2wwJNFWc=", - "dev": true - }, - "sax": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz", - "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=", - "dev": true - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - }, - "shelljs": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.6.1.tgz", - "integrity": "sha1-7GIRvtGSBEIIj+D3Cyg3Iy7SyKg=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "sinon": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-1.17.7.tgz", - "integrity": "sha1-RUKk9JugxFwF6y6d2dID4rjv4L8=", - "dev": true, - "requires": { - "formatio": "1.1.1", - "lolex": "1.3.2", - "samsam": "1.1.2", - "util": "0.10.3" - } - }, - "sinon-chrome": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sinon-chrome/-/sinon-chrome-1.1.2.tgz", - "integrity": "sha1-iubziM3bJgwgb4cABtYf6mr6dkM=", - "dev": true, - "requires": { - "URIjs": "1.16.1", - "lodash": "3.10.1", - "sinon": "1.17.7" - }, - "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - } - } - }, - "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", - "dev": true - }, - "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - }, - "spdx-correct": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", - "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", - "dev": true, - "requires": { - "spdx-expression-parse": "3.0.0", - "spdx-license-ids": "3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "spdx-exceptions": "2.1.0", - "spdx-license-ids": "3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", - "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "4.0.1" - } - }, - "strip-json-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", - "dev": true - }, - "stylus": { - "version": "0.54.5", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.5.tgz", - "integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=", - "dev": true, - "requires": { - "css-parse": "1.7.0", - "debug": "2.6.9", - "glob": "7.0.6", - "mkdirp": "0.5.1", - "sax": "0.5.8", - "source-map": "0.1.43" - }, - "dependencies": { - "glob": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", - "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "table": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", - "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", - "dev": true, - "requires": { - "ajv": "4.11.8", - "ajv-keywords": "1.5.1", - "chalk": "1.1.3", - "lodash": "4.17.5", - "slice-ansi": "0.0.4", - "string-width": "2.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - } - } - }, - "tar-stream": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.5.tgz", - "integrity": "sha512-mQdgLPc/Vjfr3VWqWbfxW8yQNiJCbAZ+Gf6GDu1Cy0bdb33ofyiNGBtAY96jHFhDuivCwgW1H9DgTON+INiXgg==", - "dev": true, - "requires": { - "bl": "1.2.2", - "end-of-stream": "1.4.1", - "readable-stream": "2.3.6", - "xtend": "4.0.1" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "1.1.2" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "uglify-js": { - "version": "3.0.28", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.0.28.tgz", - "integrity": "sha512-0h/qGay016GG2lVav3Kz174F3T2Vjlz2v6HCt+WDQpoXfco0hWwF5gHK9yh88mUYvIC+N7Z8NT8WpjSp1yoqGA==", - "dev": true, - "requires": { - "commander": "2.11.0", - "source-map": "0.5.7" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "ultron": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" - }, - "underscore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", - "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", - "dev": true - }, - "underscore.string": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.4.tgz", - "integrity": "sha1-LCo/n4PmR2L9xF5s6sZRQoZCE9s=", - "dev": true, - "requires": { - "sprintf-js": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "uri-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/uri-path/-/uri-path-1.0.0.tgz", - "integrity": "sha1-l0fwGDWJM8Md4PzP2C0TjmcmLjI=", - "dev": true - }, - "user-home": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", - "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", - "dev": true, - "requires": { - "os-homedir": "1.0.2" - } - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", - "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", - "dev": true, - "requires": { - "spdx-correct": "3.0.0", - "spdx-expression-parse": "3.0.0" - } - }, - "walkdir": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.11.tgz", - "integrity": "sha1-oW0CXrkxvQO1LzCMrtD0D86+lTI=", - "dev": true - }, - "which": { - "version": "1.2.14", - "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", - "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", - "dev": true, - "requires": { - "isexe": "2.0.0" - } - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, - "requires": { - "mkdirp": "0.5.1" - } - }, - "ws": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.0.tgz", - "integrity": "sha1-wdb9FRXTzv8fCuJ1m/X9dwMKrR0=", - "requires": { - "options": "0.0.6", - "ultron": "1.0.2" - } - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, - "zip-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz", - "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=", - "dev": true, - "requires": { - "archiver-utils": "1.3.0", - "compress-commons": "1.2.2", - "lodash": "4.17.5", - "readable-stream": "2.3.6" - } - } - } -} From c4735a1658e1eb954f4f693d3ac9ad95ea4b96b5 Mon Sep 17 00:00:00 2001 From: Justin Obara Date: Tue, 7 Aug 2018 12:58:53 -0400 Subject: [PATCH 02/12] GPII-3154: In progress captions integration. --- Gruntfile.js | 40 +- extension/manifest.json | 8 +- extension/messages/ytCaptions.json | 6 + extension/src/content_scripts/domEnactor.js | 59 +- .../src/content_scripts/fontInjection.js | 41 -- extension/src/content_scripts/webInjection.js | 68 +++ extension/src/lib/PrefsEditor.js | 16 +- extension/src/lib/captionsEnactor.js | 566 ++++++++++++++++++ extension/src/lib/chromeSettings.js | 3 +- extension/src/lib/domSettingsApplier.js | 6 +- extension/templates/PrefsEditorPanel.html | 1 + package.json | 3 +- tests/browser/all-tests.html | 3 +- tests/browser/html/captionsEnactorTests.html | 34 ++ tests/browser/html/domEnactorTests.html | 2 +- tests/browser/html/portBindingTests.html | 2 +- tests/browser/html/prefsEditorTests.html | 2 +- tests/browser/html/simplificationTests.html | 2 +- tests/browser/html/utilsTests.html | 2 +- tests/browser/html/zoomTests.html | 2 +- tests/browser/js/captionsEnactorTests.js | 101 ++++ tests/browser/js/domEnactorTests.js | 40 +- tests/browser/js/prefsEditorTests.js | 36 +- 23 files changed, 939 insertions(+), 104 deletions(-) create mode 100644 extension/messages/ytCaptions.json delete mode 100644 extension/src/content_scripts/fontInjection.js create mode 100644 extension/src/content_scripts/webInjection.js create mode 100644 extension/src/lib/captionsEnactor.js create mode 100644 tests/browser/html/captionsEnactorTests.html create mode 100644 tests/browser/js/captionsEnactorTests.js diff --git a/Gruntfile.js b/Gruntfile.js index 4635ddd..f694ede 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -27,7 +27,24 @@ module.exports = function (grunt) { "node_modules/infusion/src/framework/core/js/ModelTransformation.js", "node_modules/infusion/src/framework/core/js/ModelTransformationTransforms.js" ], - + webScriptsLib: [ + "node_modules/infusion/src/lib/jquery/core/js/jquery.js", + "node_modules/infusion/src/framework/core/js/Fluid.js", + "node_modules/infusion/src/framework/core/js/FluidPromises.js", + "node_modules/infusion/src/framework/core/js/FluidDocument.js", + "node_modules/infusion/src/framework/core/js/FluidDOMUtilities.js", + "node_modules/infusion/src/framework/core/js/FluidIoC.js", + "node_modules/infusion/src/framework/core/js/DataBinding.js", + "node_modules/infusion/src/framework/core/js/FluidView.js", + "node_modules/infusion/src/framework/core/js/FluidRequests.js", + "node_modules/infusion/src/lib/fastXmlPull/js/fastXmlPull.js", + "node_modules/infusion/src/framework/renderer/js/fluidParser.js", + "node_modules/infusion/src/framework/enhancement/js/ContextAwareness.js", + "node_modules/infusion/src/framework/enhancement/js/ProgressiveEnhancement.js", + "node_modules/infusion/src/framework/preferences/js/Enactors.js", + "node_modules/infusion/src/framework/preferences/js/CaptionsEnactor.js", + "extension/src/lib/captionsEnactor.js" + ], contentScriptsLib: [ "node_modules/infusion/src/lib/jquery/core/js/jquery.js", "node_modules/infusion/src/framework/core/js/Fluid.js", @@ -55,7 +72,8 @@ module.exports = function (grunt) { "node_modules/infusion/src/components/textToSpeech/js/TextToSpeech.js", "node_modules/infusion/src/components/orator/js/Orator.js", "node_modules/infusion/src/framework/preferences/js/SelfVoicingEnactor.js", - "node_modules/infusion/src/framework/preferences/js/LetterSpaceEnactor.js" + "node_modules/infusion/src/framework/preferences/js/LetterSpaceEnactor.js", + "node_modules/infusion/src/framework/preferences/js/CaptionsEnactor.js" ], adjustersLib: [ // jQuery @@ -100,8 +118,10 @@ module.exports = function (grunt) { "node_modules/infusion/src/framework/preferences/js/Panels.js", "node_modules/infusion/src/framework/preferences/js/SelfVoicingPanel.js", "node_modules/infusion/src/framework/preferences/js/LetterSpacePanel.js", + "node_modules/infusion/src/framework/preferences/js/CaptionsPanel.js", "node_modules/infusion/src/framework/preferences/js/Enactors.js", "node_modules/infusion/src/framework/preferences/js/LetterSpaceEnactor.js", + "node_modules/infusion/src/framework/preferences/js/CaptionsEnactor.js", "node_modules/infusion/src/framework/preferences/js/StarterGrades.js", "node_modules/infusion/src/framework/preferences/js/ArrowScrolling.js", "node_modules/infusion/src/framework/preferences/js/SeparatedPanelPrefsEditor.js", @@ -111,6 +131,7 @@ module.exports = function (grunt) { "node_modules/infusion/src/framework/preferences/js/StarterSchemas.js", "node_modules/infusion/src/framework/preferences/js/SelfVoicingSchemas.js", "node_modules/infusion/src/framework/preferences/js/LetterSpaceSchemas.js", + "node_modules/infusion/src/framework/preferences/js/CaptionsSchemas.js", "node_modules/infusion/src/framework/preferences/js/Builder.js", // from extension @@ -120,13 +141,7 @@ module.exports = function (grunt) { ], templates: [ "node_modules/infusion/src/components/tableOfContents/html/TableOfContents.html", - "node_modules/infusion/src/framework/preferences/html/PrefsEditorTemplate-textSize.html", - "node_modules/infusion/src/framework/preferences/html/PrefsEditorTemplate-lineSpace.html", - "node_modules/infusion/src/framework/preferences/html/PrefsEditorTemplate-letterSpace.html", - "node_modules/infusion/src/framework/preferences/html/PrefsEditorTemplate-contrast.html", - "node_modules/infusion/src/framework/preferences/html/PrefsEditorTemplate-layout.html", - "node_modules/infusion/src/framework/preferences/html/PrefsEditorTemplate-enhanceInputs.html", - "node_modules/infusion/src/framework/preferences/html/PrefsEditorTemplate-speak.html" + "node_modules/infusion/src/framework/preferences/html/PrefsEditorTemplate-*.html" ], messages: [ "node_modules/infusion/src/framework/preferences/messages/*.json" @@ -185,6 +200,9 @@ module.exports = function (grunt) { files.extensionLib, files.extension ), + "dist/<%= pkg.name %>-webScriptsLib.min.js" : [].concat( + files.webScriptsLib + ), "dist/<%= pkg.name %>-contentScriptsLib.min.js" : [].concat( files.contentScriptsLib ), @@ -222,6 +240,10 @@ module.exports = function (grunt) { src: ["extension/src/lib/adjusterScriptLoader.js"], dest: "build/src/adjusterScriptLoader.js" }, + { + src: ["extension/src/lib/captionsEnactor.js"], + dest: "build/src/captionsEnactor.js" + }, { expand: true, cwd: "extension/css/", diff --git a/extension/manifest.json b/extension/manifest.json index 88c3f56..1532d95 100644 --- a/extension/manifest.json +++ b/extension/manifest.json @@ -43,8 +43,9 @@ "all_frames": true }, { "matches": [""], + "exclude_globs": ["https://www.youtube.com/embed/*"], "js": [ - "content_scripts/fontInjection.js", + "content_scripts/webInjection.js", "content_scripts/utils.js", "content_scripts/simplification.js", "content_scripts/domEnactor.js", @@ -62,11 +63,12 @@ "src/background.js" ] }, - "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'", + "content_security_policy": "script-src 'self' https://youtube.com https://ytimg.com; object-src 'self'", "web_accessible_resources": [ "images/gpii.png", "templates/TableOfContents.html", "fonts/Orator-Icons.ttf", - "fonts/Orator-Icons.eot" + "fonts/Orator-Icons.eot", + "src/captionsEnactor.js" ] } diff --git a/extension/messages/ytCaptions.json b/extension/messages/ytCaptions.json new file mode 100644 index 0000000..9d5d653 --- /dev/null +++ b/extension/messages/ytCaptions.json @@ -0,0 +1,6 @@ +{ + "label": "youtube Captions", + "description": "Request embedded YouTube videos to display captions.", + "switchOn": "ON", + "switchOff": "OFF" +} diff --git a/extension/src/content_scripts/domEnactor.js b/extension/src/content_scripts/domEnactor.js index 619ff92..0c39640 100644 --- a/extension/src/content_scripts/domEnactor.js +++ b/extension/src/content_scripts/domEnactor.js @@ -38,7 +38,8 @@ "onIncomingSettings.updateModel": { changePath: "", value: "{arguments}.0" - } + }, + "onIncomingSettings.postSettingsToWebPage": "{that}.postSettingsToWebPage" }, contextAwareness: { simplify: { @@ -50,6 +51,23 @@ } } }, + webSettings: { + namespace: "UIO+_Settings", + filter: { + keys: ["captionsEnabled"], + exclude: false + } + }, + invokers: { + postSettingsToWebPage: { + funcName: "gpii.chrome.domEnactor.postSettingsToWebPage", + args: [ + "{that}.options.webSettings.namespace", + "{arguments}.0", + {filter: "{that}.options.webSettings.filter"} + ] + } + }, distributeOptions: { record: "{that}.container", target: "{that > fluid.prefs.enactor}.container" @@ -115,6 +133,38 @@ } }); + gpii.chrome.domEnactor.bindPortEvents = function (that) { + that.port = chrome.runtime.connect({name: "domEnactor-" + that.id}); + that.port.onMessage.addListener(function (data) { + that.events.onIncomingSettings.fire(data.settings); + }); + }; + + /** + * Posts a message to the webpage allowing for communication from the content script to the + * web page context. This is typically used to pass the model values from the extension to + * related enactores running in the web page context. + * + * @param {String} namespace - the key to use to pass the message in the posts data object + * @param {Object} settings - the settings to post to the web page context + * @param {Object} options - optional directives for filtering the settings to be posted. + * this allows the removal of settings that are not handled by + * the web page context, allowing for the remainder to be kept + * private. Options take the following form: + * {filter: {keys: [array of keys], exclude: true/false}} The + * exclude option determines if the filter keys are removed (true) + * or included (false). + */ + gpii.chrome.domEnactor.postSettingsToWebPage = function (namespace, settings, options) { + var data = {}; + var keysToFilter = fluid.get(options, ["filter", "keys"]); + if (keysToFilter && keysToFilter.length) { + settings = fluid.filterKeys(settings, keysToFilter, options.filter.exclude); + } + data[namespace] = settings; + window.postMessage(data, "*"); + }; + fluid.defaults("gpii.chrome.domEnactor.simplify", { components: { simplify: { @@ -128,13 +178,6 @@ } }); - gpii.chrome.domEnactor.bindPortEvents = function (that) { - that.port = chrome.runtime.connect({name: "domEnactor-" + that.id}); - that.port.onMessage.addListener(function (data) { - that.events.onIncomingSettings.fire(data.settings); - }); - }; - // High contrast fluid.defaults("gpii.chrome.enactor.contrast", { gradeNames: ["fluid.prefs.enactor.contrast"], diff --git a/extension/src/content_scripts/fontInjection.js b/extension/src/content_scripts/fontInjection.js deleted file mode 100644 index ce8175a..0000000 --- a/extension/src/content_scripts/fontInjection.js +++ /dev/null @@ -1,41 +0,0 @@ -/* - * GPII Chrome Extension for Google Chrome - * - * Copyright 2018 OCAD University - * - * Licensed under the New BSD license. You may not use this file except in - * compliance with this license. - * - * You may obtain a copy of the license at - * https://github.com/GPII/gpii-chrome-extension/blob/master/LICENSE.txt - */ - -/* global fluid, gpii, chrome */ -"use strict"; - -fluid.registerNamespace("gpii.chrome.fontInjection"); - -gpii.chrome.fontInjection.fonts = [{ - fontFamily: "Orator-Icons", - urls: [ - chrome.runtime.getURL("fonts/Orator-Icons.ttf"), - chrome.runtime.getURL("fonts/Orator-Icons.eot") - ] -}]; - -gpii.chrome.fontInjection.styleTemplate = ""; - -fluid.each(gpii.chrome.fontInjection.fonts, function (fontInfo) { - var urls = fluid.transform(fluid.makeArray(fontInfo.urls), function (url) { - return "url(\"" + url + "\")"; - }); - - var info = { - fontFamily: fontInfo.fontFamily, - src: urls.join(",") - }; - - var styleElm = $(fluid.stringTemplate(gpii.chrome.fontInjection.styleTemplate, info)); - - $("head").append(styleElm); -}); diff --git a/extension/src/content_scripts/webInjection.js b/extension/src/content_scripts/webInjection.js new file mode 100644 index 0000000..8a5caf1 --- /dev/null +++ b/extension/src/content_scripts/webInjection.js @@ -0,0 +1,68 @@ +/* + * GPII Chrome Extension for Google Chrome + * + * Copyright 2018 OCAD University + * + * Licensed under the New BSD license. You may not use this file except in + * compliance with this license. + * + * You may obtain a copy of the license at + * https://github.com/GPII/gpii-chrome-extension/blob/master/LICENSE.txt + */ + +/* global fluid, gpii, chrome */ +"use strict"; + +(function ($, fluid) { + + fluid.registerNamespace("gpii.chrome.webInjection"); + + gpii.chrome.webInjection.fonts = [{ + fontFamily: "Orator-Icons", + urls: [ + chrome.runtime.getURL("fonts/Orator-Icons.ttf"), + chrome.runtime.getURL("fonts/Orator-Icons.eot") + ] + }]; + + // Listed in the order the scripts will appear on the web page + gpii.chrome.webInjection.scripts = [ + "https://www.youtube.com/iframe_api", + // chrome.runtime.getURL("dist/ui-options-chrome-webScriptsLib.min.js") + chrome.runtime.getURL("src/captionsEnactor.js") + ]; + + gpii.chrome.webInjection.styleTemplate = ""; + + // inject fonts + fluid.each(gpii.chrome.webInjection.fonts, function (fontInfo) { + var urls = fluid.transform(fluid.makeArray(fontInfo.urls), function (url) { + return "url(\"" + url + "\")"; + }); + + var info = { + fontFamily: fontInfo.fontFamily, + src: urls.join(",") + }; + + var styleElm = $(fluid.stringTemplate(gpii.chrome.webInjection.styleTemplate, info)); + + $("head").append(styleElm); + }); + + // inject scripts + fluid.each(gpii.chrome.webInjection.scripts.reverse(), function (src) { + var existingScript = $("script[src=\"" + src + "\"]"); + + // if the script doesn't already exist on the page, inject it. + if (existingScript.length === 0) { + var script = $(" diff --git a/tests/browser/html/captionsEnactorTests.html b/tests/browser/html/captionsEnactorTests.html new file mode 100644 index 0000000..12d42a7 --- /dev/null +++ b/tests/browser/html/captionsEnactorTests.html @@ -0,0 +1,34 @@ + + + + + GPII Chrome extension captionsEnactor tests + + + + + + + + + + + + + + + + + + + +

GPII Chrome extension captionsEnactor tests

+

+
+

+
    + + +
    + + diff --git a/tests/browser/html/domEnactorTests.html b/tests/browser/html/domEnactorTests.html index c0a8f28..26350e5 100644 --- a/tests/browser/html/domEnactorTests.html +++ b/tests/browser/html/domEnactorTests.html @@ -17,7 +17,7 @@ - + diff --git a/tests/browser/html/portBindingTests.html b/tests/browser/html/portBindingTests.html index 0637d16..17592de 100644 --- a/tests/browser/html/portBindingTests.html +++ b/tests/browser/html/portBindingTests.html @@ -12,7 +12,7 @@ - + diff --git a/tests/browser/html/prefsEditorTests.html b/tests/browser/html/prefsEditorTests.html index 7ed3e1b..9de33a8 100644 --- a/tests/browser/html/prefsEditorTests.html +++ b/tests/browser/html/prefsEditorTests.html @@ -12,7 +12,7 @@ - + diff --git a/tests/browser/html/simplificationTests.html b/tests/browser/html/simplificationTests.html index ce4e67c..b2ad01d 100644 --- a/tests/browser/html/simplificationTests.html +++ b/tests/browser/html/simplificationTests.html @@ -15,7 +15,7 @@ - + diff --git a/tests/browser/html/utilsTests.html b/tests/browser/html/utilsTests.html index 5e0b717..f344908 100644 --- a/tests/browser/html/utilsTests.html +++ b/tests/browser/html/utilsTests.html @@ -15,7 +15,7 @@ - + diff --git a/tests/browser/html/zoomTests.html b/tests/browser/html/zoomTests.html index 5aa316d..538aba0 100644 --- a/tests/browser/html/zoomTests.html +++ b/tests/browser/html/zoomTests.html @@ -16,7 +16,7 @@ - + diff --git a/tests/browser/js/captionsEnactorTests.js b/tests/browser/js/captionsEnactorTests.js new file mode 100644 index 0000000..09cfb97 --- /dev/null +++ b/tests/browser/js/captionsEnactorTests.js @@ -0,0 +1,101 @@ +/* + * GPII Chrome Extension for Google Chrome + * + * Copyright 2018 OCAD University + * + * Licensed under the New BSD license. You may not use this file except in + * compliance with this license. + * + * You may obtain a copy of the license at + * https://github.com/GPII/gpii-chrome-extension/blob/master/LICENSE.txt + */ + +/* global fluid, gpii */ +"use strict"; + +(function ($) { + + $(document).ready(function () { + + fluid.registerNamespace("gpii.tests"); + + fluid.defaults("gpii.tests.captionsEnactorTests", { + gradeNames: ["fluid.test.testEnvironment"], + components: { + captionsEnactor: { + type: "gpii.chrome.enactor.captions", + container: ".gpii-test-captionsEnactor" + }, + captionsEnactorTester: { + type: "gpii.tests.captionsEnactorTester" + } + } + }); + + fluid.defaults("gpii.tests.captionsEnactorTester", { + gradeNames: ["fluid.test.testCaseHolder"], + modules: [{ + name: "Captions Enactor Tests", + tests: [{ + name: "Model Changes", + expect: 5, + sequence: [{ + // Post valid message + func: "gpii.tests.captionsEnactorTester.postMessage", + args: ["UIO+_Settings", {captionsEnabled: true}] + }, { + changeEvent: "{captionsEnactor}.applier.modelChanged", + path: "enabled", + listener: "jqUnit.assertTrue", + args: ["The model.value should be set to \"true\"", "pink", "{captionsEnactor}.model.enabled"] + }, { + // Post message not from UIO+ + func: "gpii.tests.captionsEnactorTester.postMessage", + args: ["other", {captionsEnabled: false}] + }, { + funcName: "jqUnit.assertTrue", + args: ["The model.value should still be set to \"true\"", "pink", "{captionsEnactor}.model.enabled"] + }, { + // Post message without captionsEnabled setting + func: "gpii.tests.captionsEnactorTester.postMessage", + args: ["UIO+_Settings", {selfVoicingEnabled: false}] + }, { + funcName: "jqUnit.assertTrue", + args: ["The model.value should still be set to \"true\"", "pink", "{captionsEnactor}.model.enabled"] + }, { + // Post message not from window + func: "{captionsEnactor}.updateModelFromMessage", + args: [{ + source: "other", + data: { + "UIO+_Settings": {captionsEnabled: false} + } + }] + }, { + funcName: "jqUnit.assertTrue", + args: ["The model.value should still be set to \"true\"", "pink", "{captionsEnactor}.model.enabled"] + }, { + // Post valid message + func: "gpii.tests.captionsEnactorTester.postMessage", + args: ["UIO+_Settings", {captionsEnabled: false}] + }, { + changeEvent: "{captionsEnactor}.applier.modelChanged", + path: "enabled", + listener: "jqUnit.assertTrue", + args: ["The model.value should be set to \"true\"", "pink", "{captionsEnactor}.model.enabled"] + }] + }] + }] + }); + + gpii.tests.captionsEnactorTester.postMessage = function (namespace, message) { + var data = {}; + data[namespace] = message; + window.postMessage(data, "*"); + }; + + fluid.test.runTests([ + "gpii.tests.captionsEnactorTests" + ]); + }); +})(jQuery); diff --git a/tests/browser/js/domEnactorTests.js b/tests/browser/js/domEnactorTests.js index 99f5367..2215d20 100644 --- a/tests/browser/js/domEnactorTests.js +++ b/tests/browser/js/domEnactorTests.js @@ -131,7 +131,7 @@ } }, selectionHighlightTester: { - type: "fluid.tests.selectionHighlightTester" + type: "gpii.tests.selectionHighlightTester" } } }); @@ -141,7 +141,7 @@ jqUnit.assertTrue("The node with selector '" + expectedSelector + "' should be selected", $(selectedNode).is(expectedSelector)); }; - fluid.defaults("fluid.tests.selectionHighlightTester", { + fluid.defaults("gpii.tests.selectionHighlightTester", { gradeNames: ["fluid.test.testCaseHolder"], modules: [{ name: "Selection Highlight Tests", @@ -252,12 +252,12 @@ } }, contrastTester: { - type: "fluid.tests.contrastTester" + type: "gpii.tests.contrastTester" } } }); - fluid.defaults("fluid.tests.contrastTester", { + fluid.defaults("gpii.tests.contrastTester", { gradeNames: ["fluid.test.testCaseHolder"], modules: [{ name: "Contrast Tests", @@ -377,7 +377,7 @@ } }, lineSpaceTester: { - type: "fluid.tests.lineSpaceTester" + type: "gpii.tests.lineSpaceTester" } } }); @@ -389,7 +389,7 @@ jqUnit.assertEquals("The line height should be set to " + expectedLineHeight, "line-height: " + expectedLineHeight + ";", that.container.attr("style")); }; - fluid.defaults("fluid.tests.lineSpaceTester", { + fluid.defaults("gpii.tests.lineSpaceTester", { gradeNames: ["fluid.test.testCaseHolder"], modules: [{ name: "Line Space Tests", @@ -445,7 +445,7 @@ } }, charSpaceTester: { - type: "fluid.tests.charSpaceTester" + type: "gpii.tests.charSpaceTester" } } }); @@ -459,7 +459,7 @@ jqUnit.assertEquals("The letter-spacing should be set to " + expectedLetterSpacing, "letter-spacing: " + expectedLetterSpacing + ";", that.container.attr("style")); }; - fluid.defaults("fluid.tests.charSpaceTester", { + fluid.defaults("gpii.tests.charSpaceTester", { gradeNames: ["fluid.test.testCaseHolder"], modules: [{ name: "Character Space Tests", @@ -515,7 +515,7 @@ } }, inputsLargerTester: { - type: "fluid.tests.inputsLargerTester" + type: "gpii.tests.inputsLargerTester" } } }); @@ -532,7 +532,7 @@ } }; - fluid.defaults("fluid.tests.inputsLargerTester", { + fluid.defaults("gpii.tests.inputsLargerTester", { gradeNames: ["fluid.test.testCaseHolder"], modules: [{ name: "Inputs Larger Tests", @@ -583,7 +583,7 @@ } }, tocTester: { - type: "fluid.tests.tocTester" + type: "gpii.tests.tocTester" } } }); @@ -598,7 +598,7 @@ } }; - fluid.defaults("fluid.tests.tocTester", { + fluid.defaults("gpii.tests.tocTester", { gradeNames: ["fluid.test.testCaseHolder"], modules: [{ name: "Table of Contents Tests", @@ -649,12 +649,12 @@ } }, selfVoicingTester: { - type: "fluid.tests.selfVoicingTester" + type: "gpii.tests.selfVoicingTester" } } }); - fluid.defaults("fluid.tests.selfVoicingTester", { + fluid.defaults("gpii.tests.selfVoicingTester", { gradeNames: ["fluid.test.testCaseHolder"], modules: [{ name: "Self Voicing Tests", @@ -671,7 +671,7 @@ }, { event: "{selfVoicing}.events.onInitOrator", spec: {priority: "last:testing"}, - listener: "fluid.tests.selfVoicingTester.assertOratorInit", + listener: "gpii.tests.selfVoicingTester.assertOratorInit", args: ["{selfVoicing}"] }, { func: "{selfVoicing}.applier.change", @@ -686,7 +686,7 @@ }] }); - fluid.tests.selfVoicingTester.assertOratorInit = function (that) { + gpii.tests.selfVoicingTester.assertOratorInit = function (that) { var controller = that.orator.controller; var domReader = that.orator.domReader; @@ -707,7 +707,7 @@ container: ".gpii-test-domEnactor" }, domEnactorTester: { - type: "fluid.tests.domEnactorTester" + type: "gpii.tests.domEnactorTester" } } }); @@ -721,7 +721,7 @@ jqUnit.assertEquals("The " + grade + " grade should " + (expected ? "" : "not ") + "be applied", expected, fluid.hasGrade(that.options, grade)); }; - fluid.defaults("fluid.tests.domEnactorTester", { + fluid.defaults("gpii.tests.domEnactorTester", { gradeNames: ["fluid.test.testCaseHolder"], testOpts: { messages: { @@ -779,7 +779,7 @@ createOnEvent: "afterSetup" }, domEnactorTester: { - type: "fluid.tests.domEnactorWithoutSimplificationTester", + type: "gpii.tests.domEnactorWithoutSimplificationTester", createOnEvent: "afterSetup" } }, @@ -796,7 +796,7 @@ that.events.afterSetup.fire(); }; - fluid.defaults("fluid.tests.domEnactorWithoutSimplificationTester", { + fluid.defaults("gpii.tests.domEnactorWithoutSimplificationTester", { gradeNames: ["fluid.test.testCaseHolder"], modules: [{ name: "domEnactor without Simplify Tests", diff --git a/tests/browser/js/prefsEditorTests.js b/tests/browser/js/prefsEditorTests.js index 98b1c6c..01ef347 100644 --- a/tests/browser/js/prefsEditorTests.js +++ b/tests/browser/js/prefsEditorTests.js @@ -35,7 +35,8 @@ selfVoicingEnabled: "test-selfVoicingEnabled", simplifiedUiEnabled: "test-simplifiedUiEnabled", selectionTheme: "test-selectionTheme", - clickToSelectEnabled: "test-clickToSelectEnabled" + clickToSelectEnabled: "test-clickToSelectEnabled", + captionsEnabled: "test-captionsEnabled" } }, testPrefs: { @@ -49,7 +50,8 @@ fluid_prefs_speak: "test-selfVoicingEnabled", gpii_chrome_prefs_simplify: "test-simplifiedUiEnabled", gpii_chrome_prefs_highlight: "test-selectionTheme", - gpii_chrome_prefs_clickToSelect: "test-clickToSelectEnabled" + gpii_chrome_prefs_clickToSelect: "test-clickToSelectEnabled", + fluid_prefs_captions: "test-captionsEnabled" } } }; @@ -753,7 +755,8 @@ lineSpace: 1, characterSpace: 1, simplifiedUiEnabled: false, - fontSize: 1 + fontSize: 1, + captionsEnabled: false } }, defaultModel:{ @@ -767,7 +770,8 @@ gpii_chrome_prefs_clickToSelect: false, gpii_chrome_prefs_lineSpace: 1, gpii_chrome_prefs_simplify: false, - gpii_chrome_prefs_textSize: 1 + gpii_chrome_prefs_textSize: 1, + fluid_prefs_captions: false } }, newModel: { @@ -781,7 +785,8 @@ gpii_chrome_prefs_clickToSelect: true, gpii_chrome_prefs_lineSpace: 2.7, gpii_chrome_prefs_simplify: true, - gpii_chrome_prefs_textSize: 3.1 + gpii_chrome_prefs_textSize: 3.1, + fluid_prefs_captions: true } }, newSettings: { @@ -795,7 +800,8 @@ lineSpace: 2.7, characterSpace: 1.2, simplifiedUiEnabled: true, - fontSize: 3.1 + fontSize: 3.1, + captionsEnabled: true } }, modelChanges: { @@ -814,14 +820,15 @@ "gpii_chrome_prefs_panel_highlight", "gpii_chrome_prefs_panel_lineSpace", "gpii_chrome_prefs_panel_simplify", - "gpii_chrome_prefs_panel_textSize" + "gpii_chrome_prefs_panel_textSize", + "fluid_prefs_panel_captions" ] }, modules: [{ name: "Prefs Editor Tests", tests: [{ name: "Instantiation", - expect:21, + expect:22, sequence: [{ event: "{testEnvironment prefsEditorStack prefsEditorLoader}.events.onReady", listener: "gpii.tests.prefsEditorTests.assertInit", @@ -830,7 +837,7 @@ }] }, { name: "Model Change", - expect:22, + expect:24, sequence: [{ // contrast model change func: "gpii.tests.themePicker.changeChecked", @@ -941,6 +948,17 @@ changeEvent: "{prefsEditorStack}.prefsEditorLoader.prefsEditor.applier.modelChanged" }, { func: "{prefsEditorStack}.prefsEditorLoader.prefsEditor.cancel" + }, { + // captions model change + jQueryTrigger: "click", + element: "{prefsEditorStack}.prefsEditorLoader.prefsEditor.fluid_prefs_panel_captions.switchUI.dom.control" + }, { + listener: "gpii.tests.prefsEditorTests.assertSettingChanged", + args: ["{prefsEditorStack}", "preferences.fluid_prefs_captions", "{that}.options.testOpts.newModel.preferences.fluid_prefs_captions", "{that}.options.testOpts.modelChanges.captionsEnabled"], + spec: {path: "preferences.fluid_prefs_captions", priority: "last:testing"}, + changeEvent: "{prefsEditorStack}.prefsEditorLoader.prefsEditor.applier.modelChanged" + }, { + func: "{prefsEditorStack}.prefsEditorLoader.prefsEditor.cancel" }, { // simulate external model change func: "gpii.tests.mockPort.trigger.onMessage", From f2dc45b6c003dbba262ea79c3526e6a6218788f9 Mon Sep 17 00:00:00 2001 From: Justin Obara Date: Fri, 10 Aug 2018 07:45:24 -0400 Subject: [PATCH 03/12] GPII-3154: Touching up captions integration and tests. --- extension/manifest.json | 2 +- extension/src/content_scripts/webInjection.js | 1 - extension/src/lib/captionsEnactor.js | 10 +- tests/browser/html/captionsEnactorTests.html | 25 +- tests/browser/js/captionsEnactorTests.js | 439 +++++++++++++++--- tests/browser/js/domEnactorTests.js | 35 +- 6 files changed, 426 insertions(+), 86 deletions(-) diff --git a/extension/manifest.json b/extension/manifest.json index 1532d95..f2fe867 100644 --- a/extension/manifest.json +++ b/extension/manifest.json @@ -2,7 +2,7 @@ "manifest_version": 2, "name": "UI Options Plus (UIO+)", "short_name": "UIO+", - "version": "0.1.0.4", + "version": "0.1.0.5", "description": "User Interface Options Plus (UIO+) allows you to customize websites to match your own personal needs and preferences.", "author": "Fluid Project", "permissions": [ diff --git a/extension/src/content_scripts/webInjection.js b/extension/src/content_scripts/webInjection.js index 8a5caf1..1882333 100644 --- a/extension/src/content_scripts/webInjection.js +++ b/extension/src/content_scripts/webInjection.js @@ -28,7 +28,6 @@ // Listed in the order the scripts will appear on the web page gpii.chrome.webInjection.scripts = [ "https://www.youtube.com/iframe_api", - // chrome.runtime.getURL("dist/ui-options-chrome-webScriptsLib.min.js") chrome.runtime.getURL("src/captionsEnactor.js") ]; diff --git a/extension/src/lib/captionsEnactor.js b/extension/src/lib/captionsEnactor.js index c7dd392..5623d52 100644 --- a/extension/src/lib/captionsEnactor.js +++ b/extension/src/lib/captionsEnactor.js @@ -63,13 +63,11 @@ var gpii = gpii || {}; }; that.player = gpii.uioPlus.player.createYTPlayer(videoElm, { - // events: { - // onApiChange: that.setCaptions - // } + events: { + onApiChange: that.setCaptions + } }); - that.player.addEventListener("onApiChange", that.setCaptions); - return that; }; @@ -139,7 +137,7 @@ var gpii = gpii || {}; gpii.uioPlus.captions.updateFromMessage = function (model, event, callback) { var settings = event.data["UIO+_Settings"]; if (event.source === window && settings && model.captionsEnabled !== settings.captionsEnabled) { - model.captionsEnabled = settings.captionsEnabled; + model.captionsEnabled = !!settings.captionsEnabled; callback(model.captionsEnabled); } }; diff --git a/tests/browser/html/captionsEnactorTests.html b/tests/browser/html/captionsEnactorTests.html index 12d42a7..13da6e0 100644 --- a/tests/browser/html/captionsEnactorTests.html +++ b/tests/browser/html/captionsEnactorTests.html @@ -7,14 +7,13 @@ - + - @@ -29,6 +28,26 @@

      -
      +
        +
      • no id
      • +
      • no id
      • +
      • existing id
      • +
      + + + + diff --git a/tests/browser/js/captionsEnactorTests.js b/tests/browser/js/captionsEnactorTests.js index 09cfb97..59114ab 100644 --- a/tests/browser/js/captionsEnactorTests.js +++ b/tests/browser/js/captionsEnactorTests.js @@ -10,92 +10,385 @@ * https://github.com/GPII/gpii-chrome-extension/blob/master/LICENSE.txt */ -/* global fluid, gpii */ +/* global fluid, gpii, jqUnit, sinon */ "use strict"; (function ($) { $(document).ready(function () { - fluid.registerNamespace("gpii.tests"); + /************************************************************************************************************** + * Mock for the YT.Player + **************************************************************************************************************/ - fluid.defaults("gpii.tests.captionsEnactorTests", { - gradeNames: ["fluid.test.testEnvironment"], - components: { - captionsEnactor: { - type: "gpii.chrome.enactor.captions", - container: ".gpii-test-captionsEnactor" - }, - captionsEnactorTester: { - type: "gpii.tests.captionsEnactorTester" + fluid.registerNamespace("gpii.tests.mock.YT"); + + // Thisist object to be created with the new constructor to match YT.Player api + gpii.tests.mock.YT.player = function (id, options) { + this.id = id; + this.options = options; + this.loadModule = sinon.stub(); + this.unloadModule = sinon.stub(); + this.setOption = sinon.stub(); + this.getOption = sinon.stub(); + }; + + gpii.tests.mock.YT.createGlobal = function () { + window.YT = { + Player: gpii.tests.mock.YT.player + }; + }; + + gpii.tests.mock.YT.removeGlobal = function () { + delete window.YT; + }; + + /************************************************************************************************************** + * gpii.uioPlus.allocateSimpleId tests + **************************************************************************************************************/ + + gpii.tests.allocateSimpleIdTests = [{ + name: "No ID", + selector: ".no-id", + expected: "gpii-uioPlus-id-timestamp-0" + }, { + name: "Second without ID", + selector: ".no-id-2", + expected: "gpii-uioPlus-id-timestamp-1" + }, { + name: "Existing ID", + selector: ".existing-id", + expected:"existing-id" + }]; + + jqUnit.test("Test gpii.uioPlus.allocateSimpleId", function () { + // setup + gpii.uioPlus.guid = 0; + var dateStub = sinon.stub(Date, "now"); + dateStub.returns("timestamp"); + + // test + fluid.each(gpii.tests.allocateSimpleIdTests, function (testCase) { + var elm = $(testCase.selector); + var returnedID = gpii.uioPlus.allocateSimpleId(elm[0]); + jqUnit.assertEquals(testCase.name + ": the id should be returned", testCase.expected, returnedID); + jqUnit.assertEquals(testCase.name + ": the id should be added", testCase.expected, elm.attr("id")); + }); + + // cleanup + dateStub.restore(); + gpii.uioPlus.guid = 0; + }); + + /************************************************************************************************************** + * gpii.uioPlus.player.enableJSAPI tests + **************************************************************************************************************/ + + fluid.registerNamespace("gpii.tests.player"); + + gpii.tests.player.enableJSAPITestCases = [{ + name: "no query parameters", + src: "https://localhost:8888/embed/SjnXy0Iplvs" + }, { + name: "jsapi disabled", + src: "https://localhost:8888/embed/SjnXy0Iplvs/?enablejsapi=0" + }, { + name: "jsapi invalid", + src: "https://localhost:8888/embed/SjnXy0Iplvs/?enablejsapi=false" + }, { + name: "jsapi enabled", + src: "https://localhost:8888/embed/SjnXy0Iplvs/?enablejsapi=1" + }, { + name: "other params", + src: "https://localhost:8888/embed/SjnXy0Iplvs/?controls=0&loop=1" + }]; + + jqUnit.test("Test gpii.uioPlus.player.enableJSAPI", function () { + var expected = "1"; + fluid.each(gpii.tests.player.enableJSAPITestCases, function (testCase) { + var elm = $("