From 5bbfff5fae3cd500ef4805e681c1074547ac03fc Mon Sep 17 00:00:00 2001 From: npalomba Date: Sun, 31 Mar 2019 12:17:32 +0200 Subject: [PATCH 01/18] Added eraser icon, added management of eraser size, added event listener for R key (connected to the eraser tool). Started eraser cursor management in _updateCursors.js Signed-off-by: npalomba --- .gitignore | 3 +- css/pixel-editor.scss | 10 +- images/eraser.png | Bin 0 -> 4251 bytes js/_hotkeyListener.js | 4 + js/_toolButtons.js | 35 +- js/_updateCursor.js | 9 +- js/_variables.js | 2 + package-lock.json | 1543 ++++++++++++++++++++-------------------- package.json | 6 +- views/pixel-editor.hbs | 6 + 10 files changed, 830 insertions(+), 788 deletions(-) create mode 100644 images/eraser.png diff --git a/.gitignore b/.gitignore index 70fbaa0..ce38f27 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ _ext routes build -node_modules \ No newline at end of file +node_modules +.idea \ No newline at end of file diff --git a/css/pixel-editor.scss b/css/pixel-editor.scss index 185b214..746d925 100644 --- a/css/pixel-editor.scss +++ b/css/pixel-editor.scss @@ -414,19 +414,23 @@ svg { } #tools-menu li button#pencil-bigger-button, -#tools-menu li button#zoom-in-button { +#tools-menu li button#zoom-in-button, +#tools-menu li button#eraser-bigger-button{ left: 0; } #tools-menu li button#pencil-smaller-button, -#tools-menu li button#zoom-out-button { +#tools-menu li button#zoom-out-button, +#tools-menu li button#eraser-smaller-button{ right: 0; } #tools-menu li.selected button#pencil-bigger-button, #tools-menu li.selected button#pencil-smaller-button, #tools-menu li.selected button#zoom-in-button, -#tools-menu li.selected button#zoom-out-button { +#tools-menu li.selected button#zoom-out-button, +#tools-menu li.selected button#eraser-bigger-button, +#tools-menu li.selected button#eraser-smaller-button{ display: block; } diff --git a/images/eraser.png b/images/eraser.png new file mode 100644 index 0000000000000000000000000000000000000000..08e4cb753c70837dcd91c0d990398422521fe8d3 GIT binary patch literal 4251 zcmb_fdsq|Kw#RYMMvlePSZNQZf?A_TMZzj70W9Qh}hB! zzJM4ou?UJ@0Ywo-NDviN6h(?a!ow=^5~2{2nqg+nnqYg*`R*V0e&4$w z7a$!R?BQ)^2ZC%67*~NYaE%W=#pAh-&%zr>P%+AbtnHE|93#{2lTR$hnRDjM0)w#l zs#QFr9on>~Cm-J953Oc=XeVeLTcbQ1OxfBl1_m&}6NutZc_4wgawQk^fH_VAXTgF6 zpzGqo84n*a0JFdk*suZH=DXk5H`&kcfS+ITwr!hMttyC$8qLYkN~MHcPMtoT{MA=S ze0-k8#tt7m*c==CHYKGYCZ;bb=}}BfZ&Ff22RGpqK z2@QF9^l107W4R*HDUqnKurNRW3_MW+L1<`ba&mHXbab#lAolf5@cAa*=bMjZ%W5EH zVc%`?{L*9sG7&YMH2DL@6tlm4X#TPF^ck~e|J@4tC{It+&v z4*hUA{o;R3zx%wYW`i!ps4fLxvkv1uWhisI&Is|Pix=yRPMGvCTZpeHMuhi z4_GJd2{|!i`pN@IrtKAxFNEE9Q>+iAZSh&OYj*kkLum`zQf4nc-#p{etb9rRPY%Ut zk{lQPqoC-9${yFAgj1cI2eKa?_ryJwfR#mNxa~QjV{wU8lUT5=IZbOA5jF)yJXt2DR9utdYf0~ zaLqg62;V-?tRnwm&fx0}%0B&MneT8|%dK6~%)!^Dk%pe+RQ1}Bic_WCfnjYu6LBC^ zWukY#Yh9Fg=XN?o=e4K~?|48x2!8lAHF4MHSHE5n$7a_uJ$5nb{Mu*jJYo@4PXx>>ml{sMQ)kRbi#|gdLX6Wkv$x~ zHESC4+|2-_o5Ppu4l%>?csxr^@jYtU*H~vU!73nRU%oCcWvPewkjf z&hOsZwP7e3CULS2%D*~3#T$aDHQ8X_cNxy7WQw! z1YO&yuh$2E@2tP-C~LZ&ul+WMG%~|Ih>_>jYl#;pd7XrLZNF7B+9*{0x3;EV{9Hn#>{pqK67%fA!Xpg-!l)o7^R7XOKr#89ge zS|g~P6mf-&_p~M+jGFr+C!n^j;(~+$KUTbjEZI-9YUv2>#IwSp%AS^t|4igY^@?3ap8%&;)I0W9OOo14>KnX<3Hb zVOq|Y;Jr`p$YU+ldtK(tT6+BJKGlcz*O!*xzK4q3K!~4e)Iu*Y!AG@rt3ss*V6kcMe@%psIK6t;d7>2LC zdu>ICepjQg6`eB^8ajLMQ9j#OhmLt)aGWh*qbQZn8a5PQ&(%nWbTM~ z!fi(|&Z+I;Mg{hgnX^wSw-Ob?lBbUe8&gLt3RiUzHg{m#HBYGAYc&$(V`4-}P;ATc zS}iM5qccmyxg+=mT=lkupqkW{Wx!_drQ*epNligqek^|nlB~ZLfcI=C&O&&_XDByT z26~OR{&C@lkE@_^VqQJ+1D4T=`41nI7UI8g*q!fN1=2@ z-r0Hns$QlWv-=8;#nN9er;^j zb{E(d?ru?BVI1%8RH0iQD@wp}=QGr^6L`}HG(&oE2&ml0Eu67vB2J>5Vt`Q+VZMCS zHXP9p#YYuU8;Vv?)U^v*ZuGC99&eWrKvqQv#~dzaDX72`q_a)6#e8Kf&V6rEKDP8K}q7> zG(thX{gIG;i-h%oW(VVm0zW4gQu8FrZw%=>k-RZN=1PZ}FObhI?YX&}T86(h&nHu8 zGGgpe?Fh9Oe-&}SkmZDBzJ4p*KX8`1C+a4BNP~qFc2;3^bJT00Uh%3#ypFj~r&*m# zdY@FT$1NPOtOVEZo=`!*lHL;KQasBM+lBXpUC_noam5*iRwYg}Ygfn_e4}p*2ZfF3 zq&`K$;|mmamb}BA$L3K_6~%k{NRJ{z7MTN|cn_pOnY(b*sv5m9Aa-=4EIPDLte9Kt&{#N|7KxBBIBOP#As6T_^bg8L z(#l;pWaN0^nrA9dXhOGi8oTBW=$a3F1=P8A7%I_rC^s@&i4YM)qd?4;?-TR8HbG_Z zyy1p=Fxn}+PANjczV9!Ji)yO4a2SMtAv&q1h5>qwHY(YxW4O_Zx#R#tt0SyfZ|)DS zE#$Hy6PUd>pbKZds^GFV-h`om*$czSZOqJ@YwY0jS$|HgUwe$uE}NP0P9LvSKz z4JfRxfyNKy4CrX(4010ySN^ToEEq{1twnW?m>I# zHDq9}!3R3H2eOsj1`Rno7P5AN#ZIJ?$71h-&YnIS_+1~d7Dc}|@uk53CCHzZ!U^SJ zhb!TC%@TUvZe#iQ_hZ*sep9vK&8@#VZ9Kq8?$ismdSEv>Uvh97_&WcO} zg8c;U&w}(7pUEkY0NjFuaS1ZnatP;si|FAy77r(O@@4KJuDOh{FS;sHTBk^P&f(0uf^ekuiojZ0#t3@qjEP`HfeO7G0+Uh9 zx`Y2>j_n?oD`y0~fZ_R$yLb-Id9VQ_NEq;~Em;|WslhD5Y z3n#wEpql~14UYp)8ZwsYOnHC=^%+KJI&>OvE)8hQX-8VBxVK%wtq;JvAb<@tFn*5{ z|G=OCeD8x50G>2tY;ChJfx1(#-aC$m0q4?y_Wzo+@M?5uYty1DEygD+SSCq9P{`-2eQzpdov z?_k4_xpcnc&e9htsfg(LwOS#v$@#%Z=gg9IB5HE+H%<;qKeqi6{wJEObN6&BTIHYg EPuN>H9smFU literal 0 HcmV?d00001 diff --git a/js/_hotkeyListener.js b/js/_hotkeyListener.js index 104e5ab..e6cea11 100644 --- a/js/_hotkeyListener.js +++ b/js/_hotkeyListener.js @@ -33,6 +33,10 @@ function KeyPress(e) { case 53: changeTool('zoom'); break; + // eraser -6, r + case 54: case 72: + changeTool('eraser'); + break; //Z case 90: console.log('PRESSED Z ', keyboardEvent.ctrlKey) diff --git a/js/_toolButtons.js b/js/_toolButtons.js index 1678c56..ecad3fc 100644 --- a/js/_toolButtons.js +++ b/js/_toolButtons.js @@ -1,19 +1,36 @@ //pencil on('click',"pencil-button", function(){ - changeTool('pencil'); -}, false); + changeTool('pencil'); +}, false); //pencil bigger on('click',"pencil-bigger-button", function(){ - brushSize++; - updateCursor(); -}, false); + brushSize++; + updateCursor(); +}, false); //pencil smaller -on('click',"pencil-smaller-button", function(e){ - if(brushSize > 1) brushSize--; - updateCursor(); -}, false); +on('click',"pencil-smaller-button", function(){ + if(brushSize > 1) brushSize--; + updateCursor(); +}, false); + +//eraser +on('click',"eraser-button", function(){ + changeTool('eraser'); +}, false); + +//eraser bigger +on('click',"eraser-bigger-button", function(){ + eraserSize++; + updateCursor(); +}, false); + +//eraser smaller +on('click',"eraser-smaller-button", function(e){ + if(eraserSize > 1) eraserSize--; + updateCursor(); +}, false); //fill on('click',"fill-button", function(){ diff --git a/js/_updateCursor.js b/js/_updateCursor.js index 81bfe9e..45d19c9 100644 --- a/js/_updateCursor.js +++ b/js/_updateCursor.js @@ -6,7 +6,13 @@ function updateCursor () { brushPreview.style.display = 'block'; brushPreview.style.width = brushSize * zoom + 'px'; brushPreview.style.height = brushSize * zoom + 'px'; - } else + } else if (currentTool == 'eraser') { + console.log("Eraser size: " + eraserSize); + canvasView.style.cursor = 'crosshair'; + brushPreview.style.display = 'block'; + brushPreview.style.width = eraserSize * zoom + 'px'; + brushPreview.style.height = eraserSize * zoom + 'px'; + } else brushPreview.style.display = 'none'; if (currentTool == 'eyedropper') { @@ -28,5 +34,4 @@ function updateCursor () { if (currentTool == 'resize-brush') canvasView.style.cursor = 'default'; - } \ No newline at end of file diff --git a/js/_variables.js b/js/_variables.js index 819de71..90e3077 100644 --- a/js/_variables.js +++ b/js/_variables.js @@ -6,7 +6,9 @@ var canvasPosition; var currentTool = 'pencil'; var currentToolTemp = 'pencil'; var brushSize = 1; +var eraserSize = 1; var prevBrushSize = 1; +var prevEraserSize = 1; var menuOpen = false; var dialogueOpen = false; var documentCreated = false; diff --git a/package-lock.json b/package-lock.json index 2abd0da..38cc527 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "requires": { - "mime-types": "2.1.22", + "mime-types": "~2.1.18", "negotiator": "0.6.1" } }, @@ -18,7 +18,7 @@ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", "requires": { - "ansi-wrap": "0.1.0" + "ansi-wrap": "^0.1.0" } }, "ansi-gray": { @@ -49,8 +49,8 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "requires": { - "micromatch": "3.1.10", - "normalize-path": "2.1.1" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, "append-buffer": { @@ -58,7 +58,7 @@ "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", "requires": { - "buffer-equal": "1.0.0" + "buffer-equal": "^1.0.0" } }, "archy": { @@ -76,7 +76,7 @@ "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", "requires": { - "make-iterator": "1.0.1" + "make-iterator": "^1.0.0" } }, "arr-flatten": { @@ -89,7 +89,7 @@ "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=", "requires": { - "make-iterator": "1.0.1" + "make-iterator": "^1.0.0" } }, "arr-union": { @@ -117,8 +117,8 @@ "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=", "requires": { - "array-slice": "1.1.0", - "is-number": "4.0.0" + "array-slice": "^1.0.0", + "is-number": "^4.0.0" }, "dependencies": { "is-number": { @@ -133,7 +133,7 @@ "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", "requires": { - "is-number": "4.0.0" + "is-number": "^4.0.0" }, "dependencies": { "is-number": { @@ -153,9 +153,9 @@ "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", "requires": { - "default-compare": "1.0.0", - "get-value": "2.0.6", - "kind-of": "5.1.0" + "default-compare": "^1.0.0", + "get-value": "^2.0.6", + "kind-of": "^5.0.2" }, "dependencies": { "kind-of": { @@ -180,7 +180,7 @@ "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", "requires": { - "lodash": "4.17.11" + "lodash": "^4.17.11" } }, "async-done": { @@ -188,10 +188,10 @@ "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.1.tgz", "integrity": "sha512-R1BaUeJ4PMoLNJuk+0tLJgjmEqVsdN118+Z8O+alhnQDQgy0kmD5Mqi0DNEmMx2LM0Ed5yekKu+ZXYvIHceicg==", "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0", - "process-nextick-args": "1.0.7", - "stream-exhaust": "1.0.2" + "end-of-stream": "^1.1.0", + "once": "^1.3.2", + "process-nextick-args": "^1.0.7", + "stream-exhaust": "^1.0.1" } }, "async-each": { @@ -204,7 +204,7 @@ "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=", "requires": { - "async-done": "1.3.1" + "async-done": "^1.2.2" } }, "atob": { @@ -217,15 +217,15 @@ "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=", "requires": { - "arr-filter": "1.1.2", - "arr-flatten": "1.1.0", - "arr-map": "2.0.2", - "array-each": "1.0.1", - "array-initial": "1.1.0", - "array-last": "1.3.0", - "async-done": "1.3.1", - "async-settle": "1.0.0", - "now-and-later": "2.0.0" + "arr-filter": "^1.1.1", + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "array-each": "^1.0.0", + "array-initial": "^1.0.0", + "array-last": "^1.1.1", + "async-done": "^1.2.2", + "async-settle": "^1.0.0", + "now-and-later": "^2.0.0" } }, "balanced-match": { @@ -238,13 +238,13 @@ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.1", - "pascalcase": "0.1.1" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { "define-property": { @@ -252,7 +252,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -260,7 +260,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -268,7 +268,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -276,9 +276,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -294,15 +294,15 @@ "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", "requires": { "bytes": "3.0.0", - "content-type": "1.0.4", + "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.3", + "depd": "~1.1.2", + "http-errors": "~1.6.3", "iconv-lite": "0.4.23", - "on-finished": "2.3.0", + "on-finished": "~2.3.0", "qs": "6.5.2", "raw-body": "2.3.3", - "type-is": "1.6.16" + "type-is": "~1.6.16" } }, "brace-expansion": { @@ -310,7 +310,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -319,16 +319,16 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -336,7 +336,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -361,15 +361,15 @@ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" } }, "camelcase": { @@ -382,8 +382,8 @@ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "requires": { - "camelcase": "2.1.1", - "map-obj": "1.0.1" + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" }, "dependencies": { "camelcase": { @@ -398,11 +398,11 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", "requires": { - "ansi-styles": "1.1.0", - "escape-string-regexp": "1.0.5", - "has-ansi": "0.1.0", - "strip-ansi": "0.3.0", - "supports-color": "0.2.0" + "ansi-styles": "^1.1.0", + "escape-string-regexp": "^1.0.0", + "has-ansi": "^0.1.0", + "strip-ansi": "^0.3.0", + "supports-color": "^0.2.0" }, "dependencies": { "ansi-regex": { @@ -415,7 +415,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", "requires": { - "ansi-regex": "0.2.1" + "ansi-regex": "^0.2.1" } } } @@ -425,18 +425,18 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.5.tgz", "integrity": "sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A==", "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.2", - "braces": "2.3.2", - "fsevents": "1.2.7", - "glob-parent": "3.1.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "4.0.0", - "normalize-path": "3.0.0", - "path-is-absolute": "1.0.1", - "readdirp": "2.2.1", - "upath": "1.1.2" + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" }, "dependencies": { "normalize-path": { @@ -451,10 +451,10 @@ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { "define-property": { @@ -462,7 +462,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -472,9 +472,9 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" } }, "clone": { @@ -497,9 +497,9 @@ "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", "requires": { - "inherits": "2.0.3", - "process-nextick-args": "2.0.0", - "readable-stream": "2.3.6" + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" }, "dependencies": { "process-nextick-args": { @@ -519,9 +519,9 @@ "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=", "requires": { - "arr-map": "2.0.2", - "for-own": "1.0.0", - "make-iterator": "1.0.1" + "arr-map": "^2.0.2", + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" } }, "collection-visit": { @@ -529,8 +529,8 @@ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, "color-support": { @@ -559,10 +559,10 @@ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "requires": { - "buffer-from": "1.1.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "typedarray": "0.0.6" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "content-disposition": { @@ -580,7 +580,7 @@ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.1" } }, "cookie": { @@ -603,8 +603,8 @@ "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.4.tgz", "integrity": "sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A==", "requires": { - "each-props": "1.3.2", - "is-plain-object": "2.0.4" + "each-props": "^1.3.0", + "is-plain-object": "^2.0.1" } }, "core-util-is": { @@ -617,7 +617,7 @@ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "requires": { - "array-find-index": "1.0.2" + "array-find-index": "^1.0.1" } }, "d": { @@ -625,7 +625,7 @@ "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "requires": { - "es5-ext": "0.10.49" + "es5-ext": "^0.10.9" } }, "dateformat": { @@ -633,8 +633,8 @@ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", "requires": { - "get-stdin": "4.0.1", - "meow": "3.7.0" + "get-stdin": "^4.0.1", + "meow": "^3.3.0" } }, "debug": { @@ -660,7 +660,7 @@ "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", "requires": { - "kind-of": "5.1.0" + "kind-of": "^5.0.2" }, "dependencies": { "kind-of": { @@ -680,7 +680,7 @@ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "requires": { - "object-keys": "1.1.0" + "object-keys": "^1.0.12" } }, "define-property": { @@ -688,8 +688,8 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -697,7 +697,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -705,7 +705,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -713,9 +713,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -745,7 +745,7 @@ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", "requires": { - "readable-stream": "1.1.14" + "readable-stream": "~1.1.9" }, "dependencies": { "isarray": { @@ -758,10 +758,10 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -776,10 +776,10 @@ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "requires": { - "end-of-stream": "1.4.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "stream-shift": "1.0.0" + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" } }, "each-props": { @@ -787,8 +787,8 @@ "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", "requires": { - "is-plain-object": "2.0.4", - "object.defaults": "1.1.0" + "is-plain-object": "^2.0.1", + "object.defaults": "^1.1.0" } }, "ee-first": { @@ -806,7 +806,7 @@ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "requires": { - "once": "1.4.0" + "once": "^1.4.0" } }, "error-ex": { @@ -814,7 +814,7 @@ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" } }, "es5-ext": { @@ -822,9 +822,9 @@ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.49.tgz", "integrity": "sha512-3NMEhi57E31qdzmYp2jwRArIUsj1HI/RxbQ4bgnSB+AIKIxsAmTiK83bYMifIcpWvEc3P1X30DhUKOqEtF/kvg==", "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "next-tick": "1.0.0" + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "^1.0.0" } }, "es6-iterator": { @@ -832,9 +832,9 @@ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", "requires": { - "d": "1.0.0", - "es5-ext": "0.10.49", - "es6-symbol": "3.1.1" + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, "es6-symbol": { @@ -842,8 +842,8 @@ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", "requires": { - "d": "1.0.0", - "es5-ext": "0.10.49" + "d": "1", + "es5-ext": "~0.10.14" } }, "es6-weak-map": { @@ -851,10 +851,10 @@ "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", "requires": { - "d": "1.0.0", - "es5-ext": "0.10.49", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" + "d": "1", + "es5-ext": "^0.10.14", + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" } }, "escape-html": { @@ -877,13 +877,13 @@ "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.1.7.tgz", "integrity": "sha1-tMVAAS0P4UmEIPPYlGAI22OTw3o=", "requires": { - "duplexer": "0.1.1", - "from": "0.1.7", - "map-stream": "0.1.0", + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", "pause-stream": "0.0.11", - "split": "0.2.10", - "stream-combiner": "0.0.4", - "through": "2.3.8" + "split": "0.2", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" } }, "expand-brackets": { @@ -891,13 +891,13 @@ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -905,7 +905,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -913,7 +913,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -923,7 +923,7 @@ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", "requires": { - "homedir-polyfill": "1.0.3" + "homedir-polyfill": "^1.0.1" } }, "express": { @@ -931,36 +931,36 @@ "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.5", "array-flatten": "1.1.1", "body-parser": "1.18.3", "content-disposition": "0.5.2", - "content-type": "1.0.4", + "content-type": "~1.0.4", "cookie": "0.3.1", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "finalhandler": "1.1.1", "fresh": "0.5.2", "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.4", + "proxy-addr": "~2.0.4", "qs": "6.5.2", - "range-parser": "1.2.0", + "range-parser": "~1.2.0", "safe-buffer": "5.1.2", "send": "0.16.2", "serve-static": "1.13.2", "setprototypeof": "1.1.0", - "statuses": "1.4.0", - "type-is": "1.6.16", + "statuses": "~1.4.0", + "type-is": "~1.6.16", "utils-merge": "1.0.1", - "vary": "1.1.2" + "vary": "~1.1.2" } }, "extend": { @@ -973,8 +973,8 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -982,7 +982,7 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -992,14 +992,14 @@ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -1007,7 +1007,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { @@ -1015,7 +1015,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { @@ -1023,7 +1023,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -1031,7 +1031,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -1039,9 +1039,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -1051,10 +1051,10 @@ "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", "requires": { - "ansi-gray": "0.1.1", - "color-support": "1.1.3", - "parse-node-version": "1.0.1", - "time-stamp": "1.1.0" + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" } }, "fill-range": { @@ -1062,10 +1062,10 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { @@ -1073,7 +1073,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -1084,12 +1084,12 @@ "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", "requires": { "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.4.0", - "unpipe": "1.0.0" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" } }, "find-up": { @@ -1097,8 +1097,8 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "findup-sync": { @@ -1106,10 +1106,10 @@ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", "requires": { - "detect-file": "1.0.0", - "is-glob": "4.0.0", - "micromatch": "3.1.10", - "resolve-dir": "1.0.1" + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" } }, "fined": { @@ -1117,11 +1117,11 @@ "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.1.tgz", "integrity": "sha512-jQp949ZmEbiYHk3gkbdtpJ0G1+kgtLQBNdP5edFP7Fh+WAYceLQz6yO1SBj72Xkg8GVyTB3bBzAYrHJVh5Xd5g==", "requires": { - "expand-tilde": "2.0.2", - "is-plain-object": "2.0.4", - "object.defaults": "1.1.0", - "object.pick": "1.3.0", - "parse-filepath": "1.0.2" + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" } }, "flagged-respawn": { @@ -1134,8 +1134,8 @@ "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" } }, "for-in": { @@ -1148,7 +1148,7 @@ "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } }, "foreachasync": { @@ -1166,7 +1166,7 @@ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "requires": { - "map-cache": "0.2.2" + "map-cache": "^0.2.2" } }, "fresh": { @@ -1184,9 +1184,9 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "requires": { - "graceful-fs": "4.1.15", - "jsonfile": "4.0.0", - "universalify": "0.1.2" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, "fs-mkdirp-stream": { @@ -1194,8 +1194,8 @@ "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", "requires": { - "graceful-fs": "4.1.15", - "through2": "2.0.5" + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" } }, "fs.realpath": { @@ -1209,8 +1209,8 @@ "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", "optional": true, "requires": { - "nan": "2.13.2", - "node-pre-gyp": "0.10.3" + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" }, "dependencies": { "abbrev": { @@ -1232,8 +1232,8 @@ "bundled": true, "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "balanced-match": { @@ -1244,7 +1244,7 @@ "version": "1.1.11", "bundled": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -1298,7 +1298,7 @@ "bundled": true, "optional": true, "requires": { - "minipass": "2.3.5" + "minipass": "^2.2.1" } }, "fs.realpath": { @@ -1311,14 +1311,14 @@ "bundled": true, "optional": true, "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.3" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "glob": { @@ -1326,12 +1326,12 @@ "bundled": true, "optional": 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" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "has-unicode": { @@ -1344,7 +1344,7 @@ "bundled": true, "optional": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": ">= 2.1.2 < 3" } }, "ignore-walk": { @@ -1352,7 +1352,7 @@ "bundled": true, "optional": true, "requires": { - "minimatch": "3.0.4" + "minimatch": "^3.0.4" } }, "inflight": { @@ -1360,8 +1360,8 @@ "bundled": true, "optional": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -1377,7 +1377,7 @@ "version": "1.0.0", "bundled": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "isarray": { @@ -1389,7 +1389,7 @@ "version": "3.0.4", "bundled": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -1400,8 +1400,8 @@ "version": "2.3.5", "bundled": true, "requires": { - "safe-buffer": "5.1.2", - "yallist": "3.0.3" + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" } }, "minizlib": { @@ -1409,7 +1409,7 @@ "bundled": true, "optional": true, "requires": { - "minipass": "2.3.5" + "minipass": "^2.2.1" } }, "mkdirp": { @@ -1429,9 +1429,9 @@ "bundled": true, "optional": true, "requires": { - "debug": "2.6.9", - "iconv-lite": "0.4.24", - "sax": "1.2.4" + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" } }, "node-pre-gyp": { @@ -1439,16 +1439,16 @@ "bundled": true, "optional": true, "requires": { - "detect-libc": "1.0.3", - "mkdirp": "0.5.1", - "needle": "2.2.4", - "nopt": "4.0.1", - "npm-packlist": "1.2.0", - "npmlog": "4.1.2", - "rc": "1.2.8", - "rimraf": "2.6.3", - "semver": "5.6.0", - "tar": "4.4.8" + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" } }, "nopt": { @@ -1456,8 +1456,8 @@ "bundled": true, "optional": true, "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.5" + "abbrev": "1", + "osenv": "^0.1.4" } }, "npm-bundled": { @@ -1470,8 +1470,8 @@ "bundled": true, "optional": true, "requires": { - "ignore-walk": "3.0.1", - "npm-bundled": "1.0.5" + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" } }, "npmlog": { @@ -1479,10 +1479,10 @@ "bundled": true, "optional": true, "requires": { - "are-we-there-yet": "1.1.5", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "number-is-nan": { @@ -1498,7 +1498,7 @@ "version": "1.4.0", "bundled": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { @@ -1516,8 +1516,8 @@ "bundled": true, "optional": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { @@ -1535,10 +1535,10 @@ "bundled": true, "optional": true, "requires": { - "deep-extend": "0.6.0", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -1553,13 +1553,13 @@ "bundled": true, "optional": 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.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "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.1" } }, "rimraf": { @@ -1567,7 +1567,7 @@ "bundled": true, "optional": true, "requires": { - "glob": "7.1.3" + "glob": "^7.1.3" } }, "safe-buffer": { @@ -1603,9 +1603,9 @@ "version": "1.0.2", "bundled": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { @@ -1613,14 +1613,14 @@ "bundled": true, "optional": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { "version": "3.0.1", "bundled": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -1633,13 +1633,13 @@ "bundled": true, "optional": true, "requires": { - "chownr": "1.1.1", - "fs-minipass": "1.2.5", - "minipass": "2.3.5", - "minizlib": "1.2.1", - "mkdirp": "0.5.1", - "safe-buffer": "5.1.2", - "yallist": "3.0.3" + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" } }, "util-deprecate": { @@ -1652,7 +1652,7 @@ "bundled": true, "optional": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2 || 2" } }, "wrappy": { @@ -1690,12 +1690,12 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "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" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-parent": { @@ -1703,8 +1703,8 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" }, "dependencies": { "is-glob": { @@ -1712,7 +1712,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.0" } } } @@ -1722,16 +1722,16 @@ "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", "requires": { - "extend": "3.0.2", - "glob": "7.1.3", - "glob-parent": "3.1.0", - "is-negated-glob": "1.0.0", - "ordered-read-streams": "1.0.1", - "pumpify": "1.5.1", - "readable-stream": "2.3.6", - "remove-trailing-separator": "1.1.0", - "to-absolute-glob": "2.0.2", - "unique-stream": "2.3.1" + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" } }, "glob-watcher": { @@ -1739,12 +1739,12 @@ "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.3.tgz", "integrity": "sha512-8tWsULNEPHKQ2MR4zXuzSmqbdyV5PtwwCaWSGQ1WwHsJ07ilNeN1JB8ntxhckbnpSHaf9dXFUHzIWvm1I13dsg==", "requires": { - "anymatch": "2.0.0", - "async-done": "1.3.1", - "chokidar": "2.1.5", - "is-negated-glob": "1.0.0", - "just-debounce": "1.0.0", - "object.defaults": "1.1.0" + "anymatch": "^2.0.0", + "async-done": "^1.2.0", + "chokidar": "^2.0.0", + "is-negated-glob": "^1.0.0", + "just-debounce": "^1.0.0", + "object.defaults": "^1.1.0" } }, "global-modules": { @@ -1752,9 +1752,9 @@ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "requires": { - "global-prefix": "1.0.2", - "is-windows": "1.0.2", - "resolve-dir": "1.0.1" + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" } }, "global-prefix": { @@ -1762,11 +1762,11 @@ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", "requires": { - "expand-tilde": "2.0.2", - "homedir-polyfill": "1.0.3", - "ini": "1.3.5", - "is-windows": "1.0.2", - "which": "1.3.1" + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" } }, "glogg": { @@ -1774,7 +1774,7 @@ "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", "requires": { - "sparkles": "1.0.1" + "sparkles": "^1.0.0" } }, "graceful-fs": { @@ -1787,10 +1787,10 @@ "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.0.tgz", "integrity": "sha1-lXZsYB2t5Kd+0+eyttwDiBtZY2Y=", "requires": { - "glob-watcher": "5.0.3", - "gulp-cli": "2.1.0", - "undertaker": "1.2.0", - "vinyl-fs": "3.0.3" + "glob-watcher": "^5.0.0", + "gulp-cli": "^2.0.0", + "undertaker": "^1.0.0", + "vinyl-fs": "^3.0.0" }, "dependencies": { "gulp-cli": { @@ -1798,24 +1798,24 @@ "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.1.0.tgz", "integrity": "sha512-txzgdFVlEPShBZus6JJyGyKJoBVDq6Do0ZQgIgx5RAsmhNVTDjymmOxpQvo3c20m66FldilS68ZXj2Q9w5dKbA==", "requires": { - "ansi-colors": "1.1.0", - "archy": "1.0.0", - "array-sort": "1.0.0", - "color-support": "1.1.3", - "concat-stream": "1.6.2", - "copy-props": "2.0.4", - "fancy-log": "1.3.3", - "gulplog": "1.0.0", - "interpret": "1.2.0", - "isobject": "3.0.1", - "liftoff": "3.1.0", - "matchdep": "2.0.0", - "mute-stdout": "1.0.1", - "pretty-hrtime": "1.0.3", - "replace-homedir": "1.0.0", - "semver-greatest-satisfied-range": "1.1.0", - "v8flags": "3.1.2", - "yargs": "7.1.0" + "ansi-colors": "^1.0.1", + "archy": "^1.0.0", + "array-sort": "^1.0.0", + "color-support": "^1.1.3", + "concat-stream": "^1.6.0", + "copy-props": "^2.0.1", + "fancy-log": "^1.3.2", + "gulplog": "^1.0.0", + "interpret": "^1.1.0", + "isobject": "^3.0.1", + "liftoff": "^3.1.0", + "matchdep": "^2.0.0", + "mute-stdout": "^1.0.0", + "pretty-hrtime": "^1.0.0", + "replace-homedir": "^1.0.0", + "semver-greatest-satisfied-range": "^1.1.0", + "v8flags": "^3.0.1", + "yargs": "^7.1.0" } } } @@ -1825,12 +1825,12 @@ "resolved": "https://registry.npmjs.org/gulp-include/-/gulp-include-2.3.1.tgz", "integrity": "sha1-8eDtPw/QdMNHx+WfnPA409vbPjA=", "requires": { - "event-stream": "3.1.7", - "glob": "5.0.15", - "gulp-util": "2.2.20", - "source-map": "0.5.7", - "strip-bom": "2.0.0", - "vinyl-sourcemaps-apply": "0.2.1" + "event-stream": "~3.1.0", + "glob": "^5.0.12", + "gulp-util": "~2.2.10", + "source-map": "^0.5.1", + "strip-bom": "^2.0.0", + "vinyl-sourcemaps-apply": "^0.2.0" }, "dependencies": { "glob": { @@ -1838,11 +1838,11 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } } } @@ -1852,14 +1852,14 @@ "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-2.2.20.tgz", "integrity": "sha1-1xRuVyiRC9jwR6awseVJvCLb1kw=", "requires": { - "chalk": "0.5.1", - "dateformat": "1.0.12", - "lodash._reinterpolate": "2.4.1", - "lodash.template": "2.4.1", - "minimist": "0.2.0", - "multipipe": "0.1.2", - "through2": "0.5.1", - "vinyl": "0.2.3" + "chalk": "^0.5.0", + "dateformat": "^1.0.7-1.2.3", + "lodash._reinterpolate": "^2.4.1", + "lodash.template": "^2.4.1", + "minimist": "^0.2.0", + "multipipe": "^0.1.0", + "through2": "^0.5.0", + "vinyl": "^0.2.1" }, "dependencies": { "clone-stats": { @@ -1877,10 +1877,10 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -1893,8 +1893,8 @@ "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz", "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=", "requires": { - "readable-stream": "1.0.34", - "xtend": "3.0.0" + "readable-stream": "~1.0.17", + "xtend": "~3.0.0" } }, "vinyl": { @@ -1902,7 +1902,7 @@ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.2.3.tgz", "integrity": "sha1-vKk4IJWC7FpJrVOKAPofEl5RMlI=", "requires": { - "clone-stats": "0.0.1" + "clone-stats": "~0.0.1" } }, "xtend": { @@ -1917,7 +1917,7 @@ "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", "requires": { - "glogg": "1.0.2" + "glogg": "^1.0.0" } }, "handlebars": { @@ -1925,10 +1925,10 @@ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.13.tgz", "integrity": "sha512-uydY0jy4Z3wy/iGXsi64UtLD4t1fFJe16c/NFxsYE4WdQis8ZCzOXUZaPQNG0e5bgtLQV41QTfqBindhEjnpyQ==", "requires": { - "async": "2.6.2", - "optimist": "0.6.1", - "source-map": "0.6.1", - "uglify-js": "3.5.2" + "async": "^2.5.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" }, "dependencies": { "source-map": { @@ -1940,9 +1940,10 @@ }, "handlebars-helper-svg": { "version": "git+https://bitbucket.org/skeddles/npm-handlebars-helper-svg-lospec-open-source.git#2feeec5000aecce96ba2f714ec540880537ae208", + "from": "git+https://bitbucket.org/skeddles/npm-handlebars-helper-svg-lospec-open-source.git", "requires": { - "ltx": "2.8.1", - "resolve": "1.10.0" + "ltx": "^2.3.0", + "resolve": "^1.1.7" } }, "has-ansi": { @@ -1950,7 +1951,7 @@ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", "requires": { - "ansi-regex": "0.2.1" + "ansi-regex": "^0.2.0" }, "dependencies": { "ansi-regex": { @@ -1970,9 +1971,9 @@ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" } }, "has-values": { @@ -1980,8 +1981,8 @@ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "kind-of": { @@ -1989,7 +1990,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2005,17 +2006,19 @@ }, "hbs-register-helpers": { "version": "git+https://skeddles@bitbucket.org/skeddles/hbs-register-helpers.git#e1b4688039cdbe7a175902357ffda5679837664c", + "from": "git+https://skeddles@bitbucket.org/skeddles/hbs-register-helpers.git", "requires": { - "glob": "7.1.3", - "hbs": "4.0.3", - "path": "0.12.7" + "glob": "^7.1.3", + "hbs": "^4.0.3", + "path": "^0.12.7" } }, "hbs-register-partials": { "version": "git+https://skeddles@bitbucket.org/skeddles/hbs-register-partials.git#7618436ae3ea2d9536bcef3e64027729689f9ad3", + "from": "git+https://skeddles@bitbucket.org/skeddles/hbs-register-partials.git", "requires": { - "glob": "7.1.3", - "hbs": "4.0.3" + "glob": "^7.1.3", + "hbs": "^4.0.3" } }, "homedir-polyfill": { @@ -2023,7 +2026,7 @@ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", "requires": { - "parse-passwd": "1.0.0" + "parse-passwd": "^1.0.0" } }, "hosted-git-info": { @@ -2036,10 +2039,10 @@ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "requires": { - "depd": "1.1.2", + "depd": "~1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.0", - "statuses": "1.4.0" + "statuses": ">= 1.4.0 < 2" } }, "iconv-lite": { @@ -2047,7 +2050,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": ">= 2.1.2 < 3" } }, "indent-string": { @@ -2055,7 +2058,7 @@ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "inflight": { @@ -2063,8 +2066,8 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -2097,8 +2100,8 @@ "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", "requires": { - "is-relative": "1.0.0", - "is-windows": "1.0.2" + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" } }, "is-accessor-descriptor": { @@ -2106,7 +2109,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -2114,7 +2117,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2129,7 +2132,7 @@ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "requires": { - "binary-extensions": "1.13.0" + "binary-extensions": "^1.0.0" } }, "is-buffer": { @@ -2142,7 +2145,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -2150,7 +2153,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2160,9 +2163,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { @@ -2187,7 +2190,7 @@ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-fullwidth-code-point": { @@ -2195,7 +2198,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-glob": { @@ -2203,7 +2206,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.1" } }, "is-negated-glob": { @@ -2216,7 +2219,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -2224,7 +2227,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2234,7 +2237,7 @@ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "is-relative": { @@ -2242,7 +2245,7 @@ "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", "requires": { - "is-unc-path": "1.0.0" + "is-unc-path": "^1.0.0" } }, "is-unc-path": { @@ -2250,7 +2253,7 @@ "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", "requires": { - "unc-path-regex": "0.1.2" + "unc-path-regex": "^0.1.2" } }, "is-utf8": { @@ -2298,7 +2301,7 @@ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "requires": { - "graceful-fs": "4.1.15" + "graceful-fs": "^4.1.6" } }, "just-debounce": { @@ -2316,8 +2319,8 @@ "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", "requires": { - "default-resolution": "2.0.0", - "es6-weak-map": "2.0.2" + "default-resolution": "^2.0.0", + "es6-weak-map": "^2.0.1" } }, "lazystream": { @@ -2325,7 +2328,7 @@ "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", "requires": { - "readable-stream": "2.3.6" + "readable-stream": "^2.0.5" } }, "lcid": { @@ -2333,7 +2336,7 @@ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "requires": { - "invert-kv": "1.0.0" + "invert-kv": "^1.0.0" } }, "lead": { @@ -2341,7 +2344,7 @@ "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", "requires": { - "flush-write-stream": "1.1.1" + "flush-write-stream": "^1.0.2" } }, "liftoff": { @@ -2349,14 +2352,14 @@ "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", "requires": { - "extend": "3.0.2", - "findup-sync": "3.0.0", - "fined": "1.1.1", - "flagged-respawn": "1.0.1", - "is-plain-object": "2.0.4", - "object.map": "1.0.1", - "rechoir": "0.6.2", - "resolve": "1.10.0" + "extend": "^3.0.0", + "findup-sync": "^3.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" } }, "load-json-file": { @@ -2364,11 +2367,11 @@ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "requires": { - "graceful-fs": "4.1.15", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" } }, "lodash": { @@ -2381,7 +2384,7 @@ "resolved": "https://registry.npmjs.org/lodash._escapehtmlchar/-/lodash._escapehtmlchar-2.4.1.tgz", "integrity": "sha1-32fDu2t+jh6DGrSL+geVuSr+iZ0=", "requires": { - "lodash._htmlescapes": "2.4.1" + "lodash._htmlescapes": "~2.4.1" } }, "lodash._escapestringchar": { @@ -2414,8 +2417,8 @@ "resolved": "https://registry.npmjs.org/lodash._reunescapedhtml/-/lodash._reunescapedhtml-2.4.1.tgz", "integrity": "sha1-dHxPxAED6zu4oJduVx96JlnpO6c=", "requires": { - "lodash._htmlescapes": "2.4.1", - "lodash.keys": "2.4.1" + "lodash._htmlescapes": "~2.4.1", + "lodash.keys": "~2.4.1" } }, "lodash._shimkeys": { @@ -2423,7 +2426,7 @@ "resolved": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz", "integrity": "sha1-bpzJZm/wgfC1psl4uD4kLmlJ0gM=", "requires": { - "lodash._objecttypes": "2.4.1" + "lodash._objecttypes": "~2.4.1" } }, "lodash.defaults": { @@ -2431,8 +2434,8 @@ "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-2.4.1.tgz", "integrity": "sha1-p+iIXwXmiFEUS24SqPNngCa8TFQ=", "requires": { - "lodash._objecttypes": "2.4.1", - "lodash.keys": "2.4.1" + "lodash._objecttypes": "~2.4.1", + "lodash.keys": "~2.4.1" } }, "lodash.escape": { @@ -2440,9 +2443,9 @@ "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-2.4.1.tgz", "integrity": "sha1-LOEsXghNsKV92l5dHu659dF1o7Q=", "requires": { - "lodash._escapehtmlchar": "2.4.1", - "lodash._reunescapedhtml": "2.4.1", - "lodash.keys": "2.4.1" + "lodash._escapehtmlchar": "~2.4.1", + "lodash._reunescapedhtml": "~2.4.1", + "lodash.keys": "~2.4.1" } }, "lodash.isobject": { @@ -2450,7 +2453,7 @@ "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz", "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=", "requires": { - "lodash._objecttypes": "2.4.1" + "lodash._objecttypes": "~2.4.1" } }, "lodash.keys": { @@ -2458,9 +2461,9 @@ "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz", "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=", "requires": { - "lodash._isnative": "2.4.1", - "lodash._shimkeys": "2.4.1", - "lodash.isobject": "2.4.1" + "lodash._isnative": "~2.4.1", + "lodash._shimkeys": "~2.4.1", + "lodash.isobject": "~2.4.1" } }, "lodash.template": { @@ -2468,13 +2471,13 @@ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-2.4.1.tgz", "integrity": "sha1-nmEQB+32KRKal0qzxIuBez4c8g0=", "requires": { - "lodash._escapestringchar": "2.4.1", - "lodash._reinterpolate": "2.4.1", - "lodash.defaults": "2.4.1", - "lodash.escape": "2.4.1", - "lodash.keys": "2.4.1", - "lodash.templatesettings": "2.4.1", - "lodash.values": "2.4.1" + "lodash._escapestringchar": "~2.4.1", + "lodash._reinterpolate": "~2.4.1", + "lodash.defaults": "~2.4.1", + "lodash.escape": "~2.4.1", + "lodash.keys": "~2.4.1", + "lodash.templatesettings": "~2.4.1", + "lodash.values": "~2.4.1" } }, "lodash.templatesettings": { @@ -2482,8 +2485,8 @@ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz", "integrity": "sha1-6nbHXRHrhtTb6JqDiTu4YZKaxpk=", "requires": { - "lodash._reinterpolate": "2.4.1", - "lodash.escape": "2.4.1" + "lodash._reinterpolate": "~2.4.1", + "lodash.escape": "~2.4.1" } }, "lodash.values": { @@ -2491,7 +2494,7 @@ "resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-2.4.1.tgz", "integrity": "sha1-q/UUQ2s8twUAFieXjLzzCxKA7qQ=", "requires": { - "lodash.keys": "2.4.1" + "lodash.keys": "~2.4.1" } }, "loud-rejection": { @@ -2499,8 +2502,8 @@ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" } }, "ltx": { @@ -2508,7 +2511,7 @@ "resolved": "https://registry.npmjs.org/ltx/-/ltx-2.8.1.tgz", "integrity": "sha512-l4H1FS9I6IVqwvIpUHsSgyxE6t2jP7qd/2MeVG1UhmVK6vlHsQpfm2KNUcbdImeE0ai04vl1qTCF4CPCJqhknQ==", "requires": { - "inherits": "2.0.3" + "inherits": "^2.0.1" } }, "make-iterator": { @@ -2516,7 +2519,7 @@ "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.2" } }, "map-cache": { @@ -2539,7 +2542,7 @@ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "requires": { - "object-visit": "1.0.1" + "object-visit": "^1.0.0" } }, "matchdep": { @@ -2547,9 +2550,9 @@ "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", "requires": { - "findup-sync": "2.0.0", - "micromatch": "3.1.10", - "resolve": "1.10.0", + "findup-sync": "^2.0.0", + "micromatch": "^3.0.4", + "resolve": "^1.4.0", "stack-trace": "0.0.10" }, "dependencies": { @@ -2558,10 +2561,10 @@ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", "requires": { - "detect-file": "1.0.0", - "is-glob": "3.1.0", - "micromatch": "3.1.10", - "resolve-dir": "1.0.1" + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" } }, "is-glob": { @@ -2569,7 +2572,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.0" } } } @@ -2584,16 +2587,16 @@ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "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.5.0", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "redent": "1.0.0", - "trim-newlines": "1.0.0" + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" }, "dependencies": { "minimist": { @@ -2618,19 +2621,19 @@ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } }, "mime": { @@ -2648,7 +2651,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", "requires": { - "mime-db": "1.38.0" + "mime-db": "~1.38.0" } }, "minimatch": { @@ -2656,7 +2659,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -2669,8 +2672,8 @@ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -2678,7 +2681,7 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -2712,17 +2715,17 @@ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-windows": "1.0.2", - "kind-of": "6.0.2", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" } }, "negotiator": { @@ -2740,10 +2743,10 @@ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "requires": { - "hosted-git-info": "2.7.1", - "resolve": "1.10.0", - "semver": "5.6.0", - "validate-npm-package-license": "3.0.4" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, "normalize-path": { @@ -2751,7 +2754,7 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "now-and-later": { @@ -2759,7 +2762,7 @@ "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.0.tgz", "integrity": "sha1-vGHLtFbXnLMiB85HygUTb/Ln1u4=", "requires": { - "once": "1.4.0" + "once": "^1.3.2" } }, "number-is-nan": { @@ -2777,9 +2780,9 @@ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { "define-property": { @@ -2787,7 +2790,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "kind-of": { @@ -2795,7 +2798,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2810,7 +2813,7 @@ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.0" } }, "object.assign": { @@ -2818,10 +2821,10 @@ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "requires": { - "define-properties": "1.1.3", - "function-bind": "1.1.1", - "has-symbols": "1.0.0", - "object-keys": "1.1.0" + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" } }, "object.defaults": { @@ -2829,10 +2832,10 @@ "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", "requires": { - "array-each": "1.0.1", - "array-slice": "1.1.0", - "for-own": "1.0.0", - "isobject": "3.0.1" + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" } }, "object.map": { @@ -2840,8 +2843,8 @@ "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", "requires": { - "for-own": "1.0.0", - "make-iterator": "1.0.1" + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" } }, "object.pick": { @@ -2849,7 +2852,7 @@ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "object.reduce": { @@ -2857,8 +2860,8 @@ "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", "requires": { - "for-own": "1.0.0", - "make-iterator": "1.0.1" + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" } }, "on-finished": { @@ -2874,7 +2877,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "opn": { @@ -2882,7 +2885,7 @@ "resolved": "https://registry.npmjs.org/opn/-/opn-6.0.0.tgz", "integrity": "sha512-I9PKfIZC+e4RXZ/qr1RhgyCnGgYX0UEIlXgWnCOVACIvFgaC9rz6Won7xbdhoHrd8IIhV7YEpHjreNUNkqCGkQ==", "requires": { - "is-wsl": "1.1.0" + "is-wsl": "^1.1.0" } }, "optimist": { @@ -2890,8 +2893,8 @@ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "requires": { - "minimist": "0.0.10", - "wordwrap": "0.0.3" + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" }, "dependencies": { "minimist": { @@ -2906,7 +2909,7 @@ "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", "requires": { - "readable-stream": "2.3.6" + "readable-stream": "^2.0.1" } }, "os-locale": { @@ -2914,7 +2917,7 @@ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "requires": { - "lcid": "1.0.0" + "lcid": "^1.0.0" } }, "parse-filepath": { @@ -2922,9 +2925,9 @@ "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", "requires": { - "is-absolute": "1.0.0", - "map-cache": "0.2.2", - "path-root": "0.1.1" + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" } }, "parse-json": { @@ -2932,7 +2935,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "requires": { - "error-ex": "1.3.2" + "error-ex": "^1.2.0" } }, "parse-node-version": { @@ -2960,8 +2963,8 @@ "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=", "requires": { - "process": "0.11.10", - "util": "0.10.4" + "process": "^0.11.1", + "util": "^0.10.3" } }, "path-dirname": { @@ -2974,7 +2977,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "requires": { - "pinkie-promise": "2.0.1" + "pinkie-promise": "^2.0.0" } }, "path-is-absolute": { @@ -2992,7 +2995,7 @@ "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", "requires": { - "path-root-regex": "0.1.2" + "path-root-regex": "^0.1.0" } }, "path-root-regex": { @@ -3010,9 +3013,9 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "requires": { - "graceful-fs": "4.1.15", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "pause-stream": { @@ -3020,7 +3023,7 @@ "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", "requires": { - "through": "2.3.8" + "through": "~2.3" } }, "pify": { @@ -3038,7 +3041,7 @@ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "posix-character-classes": { @@ -3066,7 +3069,7 @@ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", "requires": { - "forwarded": "0.1.2", + "forwarded": "~0.1.2", "ipaddr.js": "1.8.0" } }, @@ -3075,8 +3078,8 @@ "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, "pumpify": { @@ -3084,9 +3087,9 @@ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "requires": { - "duplexify": "3.7.1", - "inherits": "2.0.3", - "pump": "2.0.1" + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" } }, "qs": { @@ -3115,9 +3118,9 @@ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.5.0", - "path-type": "1.1.0" + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" } }, "read-pkg-up": { @@ -3125,8 +3128,8 @@ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" } }, "readable-stream": { @@ -3134,13 +3137,13 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "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.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "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.1" }, "dependencies": { "process-nextick-args": { @@ -3155,9 +3158,9 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "requires": { - "graceful-fs": "4.1.15", - "micromatch": "3.1.10", - "readable-stream": "2.3.6" + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" } }, "rechoir": { @@ -3165,7 +3168,7 @@ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "requires": { - "resolve": "1.10.0" + "resolve": "^1.1.6" } }, "redent": { @@ -3173,8 +3176,8 @@ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" } }, "regex-not": { @@ -3182,8 +3185,8 @@ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, "remove-bom-buffer": { @@ -3191,8 +3194,8 @@ "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", "requires": { - "is-buffer": "1.1.6", - "is-utf8": "0.2.1" + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" } }, "remove-bom-stream": { @@ -3200,9 +3203,9 @@ "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", "requires": { - "remove-bom-buffer": "3.0.0", - "safe-buffer": "5.1.2", - "through2": "2.0.5" + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" } }, "remove-trailing-separator": { @@ -3225,7 +3228,7 @@ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" } }, "replace-ext": { @@ -3238,9 +3241,9 @@ "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", "requires": { - "homedir-polyfill": "1.0.3", - "is-absolute": "1.0.0", - "remove-trailing-separator": "1.1.0" + "homedir-polyfill": "^1.0.1", + "is-absolute": "^1.0.0", + "remove-trailing-separator": "^1.1.0" } }, "require-directory": { @@ -3258,7 +3261,7 @@ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", "requires": { - "path-parse": "1.0.6" + "path-parse": "^1.0.6" } }, "resolve-dir": { @@ -3266,8 +3269,8 @@ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", "requires": { - "expand-tilde": "2.0.2", - "global-modules": "1.0.0" + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" } }, "resolve-options": { @@ -3275,7 +3278,7 @@ "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", "requires": { - "value-or-function": "3.0.0" + "value-or-function": "^3.0.0" } }, "resolve-url": { @@ -3298,7 +3301,7 @@ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "requires": { - "ret": "0.1.15" + "ret": "~0.1.10" } }, "safer-buffer": { @@ -3311,7 +3314,7 @@ "resolved": "https://registry.npmjs.org/sass/-/sass-1.17.3.tgz", "integrity": "sha512-S4vJawbrNUxJUBiHLXPYUKZCoO6cvq3/3ZFBV66a+PafTxcDEFJB+FHLDFl0P+rUfha/703ajEXMuGTYhJESkQ==", "requires": { - "chokidar": "2.1.5" + "chokidar": "^2.0.0" } }, "semver": { @@ -3324,7 +3327,7 @@ "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", "requires": { - "sver-compat": "1.5.0" + "sver-compat": "^1.5.0" } }, "send": { @@ -3333,18 +3336,18 @@ "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", "requires": { "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.6.3", + "http-errors": "~1.6.2", "mime": "1.4.1", "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.4.0" + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" } }, "serve-static": { @@ -3352,9 +3355,9 @@ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", "send": "0.16.2" } }, @@ -3368,10 +3371,10 @@ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -3379,7 +3382,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -3399,14 +3402,14 @@ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.2", - "use": "3.1.1" + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" }, "dependencies": { "define-property": { @@ -3414,7 +3417,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -3422,7 +3425,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -3432,9 +3435,9 @@ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "dependencies": { "define-property": { @@ -3442,7 +3445,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -3450,7 +3453,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -3458,7 +3461,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -3466,9 +3469,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -3478,7 +3481,7 @@ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.2.0" }, "dependencies": { "kind-of": { @@ -3486,7 +3489,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -3501,11 +3504,11 @@ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "requires": { - "atob": "2.1.2", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, "source-map-url": { @@ -3523,8 +3526,8 @@ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", "requires": { - "spdx-expression-parse": "3.0.0", - "spdx-license-ids": "3.0.3" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-exceptions": { @@ -3537,8 +3540,8 @@ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "requires": { - "spdx-exceptions": "2.2.0", - "spdx-license-ids": "3.0.3" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { @@ -3551,7 +3554,7 @@ "resolved": "https://registry.npmjs.org/split/-/split-0.2.10.tgz", "integrity": "sha1-Zwl8YB1pfOE2j0GPBs0gHPBSGlc=", "requires": { - "through": "2.3.8" + "through": "2" } }, "split-string": { @@ -3559,7 +3562,7 @@ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "requires": { - "extend-shallow": "3.0.2" + "extend-shallow": "^3.0.0" } }, "stack-trace": { @@ -3572,8 +3575,8 @@ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { "define-property": { @@ -3581,7 +3584,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -3596,7 +3599,7 @@ "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", "requires": { - "duplexer": "0.1.1" + "duplexer": "~0.1.1" } }, "stream-exhaust": { @@ -3614,9 +3617,9 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { @@ -3624,7 +3627,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -3632,7 +3635,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-bom": { @@ -3640,7 +3643,7 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } }, "strip-indent": { @@ -3648,7 +3651,7 @@ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", "requires": { - "get-stdin": "4.0.1" + "get-stdin": "^4.0.1" } }, "supports-color": { @@ -3661,8 +3664,8 @@ "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=", "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" } }, "through": { @@ -3675,8 +3678,8 @@ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "requires": { - "readable-stream": "2.3.6", - "xtend": "4.0.1" + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" } }, "through2-filter": { @@ -3684,8 +3687,8 @@ "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", "requires": { - "through2": "2.0.5", - "xtend": "4.0.1" + "through2": "~2.0.0", + "xtend": "~4.0.0" } }, "time-stamp": { @@ -3698,8 +3701,8 @@ "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", "requires": { - "is-absolute": "1.0.0", - "is-negated-glob": "1.0.0" + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" } }, "to-object-path": { @@ -3707,7 +3710,7 @@ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -3715,7 +3718,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -3725,10 +3728,10 @@ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" } }, "to-regex-range": { @@ -3736,8 +3739,8 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } }, "to-through": { @@ -3745,7 +3748,7 @@ "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", "requires": { - "through2": "2.0.5" + "through2": "^2.0.3" } }, "trim-newlines": { @@ -3759,7 +3762,7 @@ "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.22" + "mime-types": "~2.1.18" } }, "typedarray": { @@ -3773,8 +3776,8 @@ "integrity": "sha512-imog1WIsi9Yb56yRt5TfYVxGmnWs3WSGU73ieSOlMVFwhJCA9W8fqFFMMj4kgDqiS/80LGdsYnWL7O9UcjEBlg==", "optional": true, "requires": { - "commander": "2.19.0", - "source-map": "0.6.1" + "commander": "~2.19.0", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -3795,15 +3798,15 @@ "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.2.0.tgz", "integrity": "sha1-M52kZGJS0ILcN45wgGcpl1DhG0k=", "requires": { - "arr-flatten": "1.1.0", - "arr-map": "2.0.2", - "bach": "1.2.0", - "collection-map": "1.0.0", - "es6-weak-map": "2.0.2", - "last-run": "1.1.1", - "object.defaults": "1.1.0", - "object.reduce": "1.0.1", - "undertaker-registry": "1.0.1" + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "bach": "^1.0.0", + "collection-map": "^1.0.0", + "es6-weak-map": "^2.0.1", + "last-run": "^1.1.0", + "object.defaults": "^1.0.0", + "object.reduce": "^1.0.0", + "undertaker-registry": "^1.0.0" } }, "undertaker-registry": { @@ -3816,10 +3819,10 @@ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" }, "dependencies": { "extend-shallow": { @@ -3827,7 +3830,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "set-value": { @@ -3835,10 +3838,10 @@ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } @@ -3848,8 +3851,8 @@ "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", "requires": { - "json-stable-stringify-without-jsonify": "1.0.1", - "through2-filter": "3.0.0" + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "^3.0.0" } }, "universalify": { @@ -3867,8 +3870,8 @@ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { "has-value": { @@ -3876,9 +3879,9 @@ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { "isobject": { @@ -3936,7 +3939,7 @@ "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.2.tgz", "integrity": "sha512-MtivA7GF24yMPte9Rp/BWGCYQNaUj86zeYxV/x2RRJMKagImbbv3u8iJC57lNhWLPcGLJmHcHmFWkNsplbbLWw==", "requires": { - "homedir-polyfill": "1.0.3" + "homedir-polyfill": "^1.0.1" } }, "validate-npm-package-license": { @@ -3944,8 +3947,8 @@ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "requires": { - "spdx-correct": "3.1.0", - "spdx-expression-parse": "3.0.0" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "value-or-function": { @@ -3963,12 +3966,12 @@ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", "requires": { - "clone": "2.1.2", - "clone-buffer": "1.0.0", - "clone-stats": "1.0.0", - "cloneable-readable": "1.1.2", - "remove-trailing-separator": "1.1.0", - "replace-ext": "1.0.0" + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" } }, "vinyl-fs": { @@ -3976,23 +3979,23 @@ "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", "requires": { - "fs-mkdirp-stream": "1.0.0", - "glob-stream": "6.1.0", - "graceful-fs": "4.1.15", - "is-valid-glob": "1.0.0", - "lazystream": "1.0.0", - "lead": "1.0.0", - "object.assign": "4.1.0", - "pumpify": "1.5.1", - "readable-stream": "2.3.6", - "remove-bom-buffer": "3.0.0", - "remove-bom-stream": "1.2.0", - "resolve-options": "1.1.0", - "through2": "2.0.5", - "to-through": "2.0.0", - "value-or-function": "3.0.0", - "vinyl": "2.2.0", - "vinyl-sourcemap": "1.1.0" + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" } }, "vinyl-sourcemap": { @@ -4000,13 +4003,13 @@ "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", "requires": { - "append-buffer": "1.0.2", - "convert-source-map": "1.6.0", - "graceful-fs": "4.1.15", - "normalize-path": "2.1.1", - "now-and-later": "2.0.0", - "remove-bom-buffer": "3.0.0", - "vinyl": "2.2.0" + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" } }, "vinyl-sourcemaps-apply": { @@ -4014,7 +4017,7 @@ "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", "requires": { - "source-map": "0.5.7" + "source-map": "^0.5.1" } }, "walk": { @@ -4022,7 +4025,7 @@ "resolved": "https://registry.npmjs.org/walk/-/walk-2.3.9.tgz", "integrity": "sha1-MbTbZnjyrgHDnqn7hyWpAx5Vins=", "requires": { - "foreachasync": "3.0.0" + "foreachasync": "^3.0.0" } }, "which": { @@ -4030,7 +4033,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { @@ -4048,8 +4051,8 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" } }, "wrappy": { @@ -4072,19 +4075,19 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.3", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "y18n": "3.2.1", - "yargs-parser": "5.0.0" + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.0" } }, "yargs-parser": { @@ -4092,7 +4095,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", "requires": { - "camelcase": "3.0.0" + "camelcase": "^3.0.0" } } } diff --git a/package.json b/package.json index 2af5d29..c2251a6 100644 --- a/package.json +++ b/package.json @@ -16,9 +16,9 @@ "gulp-include": "^2.3.1", "handlebars-helper-svg": "git+https://bitbucket.org/skeddles/npm-handlebars-helper-svg-lospec-open-source.git", "hbs": "^4.0.3", - "opn": "^6.0.0", - "sass": "^1.17.3", "hbs-register-helpers": "git+https://skeddles@bitbucket.org/skeddles/hbs-register-helpers.git", - "hbs-register-partials": "git+https://skeddles@bitbucket.org/skeddles/hbs-register-partials.git" + "hbs-register-partials": "git+https://skeddles@bitbucket.org/skeddles/hbs-register-partials.git", + "opn": "^6.0.0", + "sass": "^1.17.3" } } diff --git a/views/pixel-editor.hbs b/views/pixel-editor.hbs index e87e48c..f2fc012 100644 --- a/views/pixel-editor.hbs +++ b/views/pixel-editor.hbs @@ -33,6 +33,7 @@ +
    From 7b26ebb5fda723c43d7b6102c5a341f43ae32d4c Mon Sep 17 00:00:00 2001 From: npalomba Date: Sun, 31 Mar 2019 12:24:11 +0200 Subject: [PATCH 02/18] Fixed character hotkey for the eraser tool. Signed-off-by: npalomba --- js/_hotkeyListener.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/js/_hotkeyListener.js b/js/_hotkeyListener.js index e6cea11..5ef277f 100644 --- a/js/_hotkeyListener.js +++ b/js/_hotkeyListener.js @@ -34,8 +34,9 @@ function KeyPress(e) { changeTool('zoom'); break; // eraser -6, r - case 54: case 72: - changeTool('eraser'); + case 54: case 82: + console.log("Pressed r"); + changeTool('eraser'); break; //Z case 90: From 15e6d7b08aa5e860007f7bf3fb6685c3841963e6 Mon Sep 17 00:00:00 2001 From: npalomba Date: Sun, 31 Mar 2019 13:28:46 +0200 Subject: [PATCH 03/18] Added _checkerboard.js for transparency checkerboard management. Implemented generation of checkerboard (still need to test it properly, for example with weird height/width values). Signed-off-by: npalomba --- js/_checkerboard.js | 24 ++++++++++++++++++++++++ js/_colorChanged.js | 3 --- js/_drawLine.js | 8 ++++++-- js/_mouseEvents.js | 23 ++++++++++++++++++++++- js/_newPixel.js | 3 +++ js/_updateCursor.js | 3 ++- js/_variables.js | 3 +++ js/pixel-editor.js | 3 ++- 8 files changed, 62 insertions(+), 8 deletions(-) create mode 100644 js/_checkerboard.js diff --git a/js/_checkerboard.js b/js/_checkerboard.js new file mode 100644 index 0000000..6c5a380 --- /dev/null +++ b/js/_checkerboard.js @@ -0,0 +1,24 @@ +var currentColor = firstCheckerBoardColor; + +function fillCheckerboard() { + for (var i=0; i127) brushPreview.classList.remove('dark'); else brushPreview.classList.add('dark'); } + // Decided to write a different implementation in case of differences between the brush and the eraser tool + else if (currentTool == 'eraser') { + //move the brush preview + brushPreview.style.left = cursorLocation[0] + canvas.offsetLeft - brushSize * zoom / 2 + 'px'; + brushPreview.style.top = cursorLocation[1] + canvas.offsetTop - brushSize * zoom / 2 + 'px'; + + //hide brush preview outside of canvas / canvas view + if (mouseEvent.target == canvas || mouseEvent.target == canvasView) + brushPreview.style.visibility = 'visible'; + else + brushPreview.style.visibility = 'hidden'; + + //draw line to current pixel + if (dragging) { + if (mouseEvent.target == canvas || mouseEvent.target == canvasView) { + line(Math.floor(lastPos[0]/zoom),Math.floor(lastPos[1]/zoom),Math.floor(cursorLocation[0]/zoom),Math.floor(cursorLocation[1]/zoom)); + lastPos = cursorLocation; + } + } + } else if (currentTool == 'pan' && dragging) { diff --git a/js/_newPixel.js b/js/_newPixel.js index 21dc3ea..5b64c5e 100644 --- a/js/_newPixel.js +++ b/js/_newPixel.js @@ -56,10 +56,13 @@ function newPixel (width, height, palette) { addColor(defaultBackgroundColor); //fill background of canvas with bg color + fillCheckerboard(); + /* context.fillStyle = '#'+defaultBackgroundColor; context.fillRect(0, 0, canvasSize[0], canvasSize[1]); console.log('#'+defaultBackgroundColor) + */ //set current drawing color as foreground color context.fillStyle = '#'+defaultForegroundColor; diff --git a/js/_updateCursor.js b/js/_updateCursor.js index 45d19c9..587fc17 100644 --- a/js/_updateCursor.js +++ b/js/_updateCursor.js @@ -12,6 +12,7 @@ function updateCursor () { brushPreview.style.display = 'block'; brushPreview.style.width = eraserSize * zoom + 'px'; brushPreview.style.height = eraserSize * zoom + 'px'; + context.fillStyle = 'rgba(255, 0, 0, 0)'; } else brushPreview.style.display = 'none'; @@ -32,6 +33,6 @@ function updateCursor () { if (currentTool == 'zoom') canvasView.style.cursor = "url('/pixel-editor/zoom-in.png'), auto"; - if (currentTool == 'resize-brush') + if (currentTool == 'resize-brush') canvasView.style.cursor = 'default'; } \ No newline at end of file diff --git a/js/_variables.js b/js/_variables.js index 90e3077..52185fa 100644 --- a/js/_variables.js +++ b/js/_variables.js @@ -12,6 +12,9 @@ var prevEraserSize = 1; var menuOpen = false; var dialogueOpen = false; var documentCreated = false; +var firstCheckerBoardColor = 'rgba(139, 139, 139, 1)'; +var secondCheckerBoardColor = 'rgba(105, 105, 105, 1)'; +var checkerBoardSquareSize = 16; //common elements var brushPreview = document.getElementById("brush-preview"); diff --git a/js/pixel-editor.js b/js/pixel-editor.js index b507cac..9a8e11c 100644 --- a/js/pixel-editor.js +++ b/js/pixel-editor.js @@ -40,7 +40,8 @@ //=include _fill.js //=include _history.js //=include _deleteColor.js -//=include _replaceAllOfColor.js +//=include _replaceAllOfColor.js +//=include _checkerboard.js /**load file**/ From cf4f17d89155c4e8729c68a4c0f02e33537d1e26 Mon Sep 17 00:00:00 2001 From: npalomba Date: Sun, 31 Mar 2019 13:31:17 +0200 Subject: [PATCH 04/18] Tested checkerboard against weird canvas values. A check for negative values in the canvas dimentions should be added. Signed-off-by: npalomba --- js/_checkerboard.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/js/_checkerboard.js b/js/_checkerboard.js index 6c5a380..cf9bbf0 100644 --- a/js/_checkerboard.js +++ b/js/_checkerboard.js @@ -1,5 +1,9 @@ var currentColor = firstCheckerBoardColor; +/* TODO add check for canvas dimentions (right now negative values can be inserted and a canvas will be generated, it is just + necessary to add a conversion from negative to positive values. + */ + function fillCheckerboard() { for (var i=0; i Date: Sun, 31 Mar 2019 15:10:51 +0200 Subject: [PATCH 05/18] Fixed bug in checkerboard creation. Signed-off-by: npalomba --- js/_checkerboard.js | 46 +++++++++++++++++++++++++++++++++------------ js/_drawLine.js | 1 - 2 files changed, 34 insertions(+), 13 deletions(-) diff --git a/js/_checkerboard.js b/js/_checkerboard.js index cf9bbf0..97435cd 100644 --- a/js/_checkerboard.js +++ b/js/_checkerboard.js @@ -1,4 +1,5 @@ var currentColor = firstCheckerBoardColor; +var nSquaresFilled = 0; /* TODO add check for canvas dimentions (right now negative values can be inserted and a canvas will be generated, it is just necessary to add a conversion from negative to positive values. @@ -6,23 +7,44 @@ var currentColor = firstCheckerBoardColor; function fillCheckerboard() { for (var i=0; i Date: Sun, 31 Mar 2019 15:55:08 +0200 Subject: [PATCH 06/18] Added functions for canvas management in order to create multiple underlying canvases for implementing layers. Signed-off-by: npalomba --- css/pixel-editor.scss | 15 +++++++++++---- js/_canvas.js | 34 ++++++++++++++++++++++++++++++++++ js/_variables.js | 3 +++ js/pixel-editor.js | 1 + 4 files changed, 49 insertions(+), 4 deletions(-) create mode 100644 js/_canvas.js diff --git a/css/pixel-editor.scss b/css/pixel-editor.scss index 746d925..10a8c76 100644 --- a/css/pixel-editor.scss +++ b/css/pixel-editor.scss @@ -35,9 +35,9 @@ svg { outline: 0 !important; } -#pixel-canvas { +canvas { cursor: url('/pixel-art-where-to-start/pencil-tool-cursor.png'); - + border: solid 1px #fff; image-rendering:optimizeSpeed; /* Legal fallback */ image-rendering:-moz-crisp-edges; /* Firefox */ @@ -49,11 +49,19 @@ svg { -ms-interpolation-mode:nearest-neighbor; /* IE8+ */ width: 400px; height: 400px; - display: none; position: fixed; box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.64); } +#checkerboard { + z-index:1000; +} + +#pixel-canvas { + z-index:1; + background:transparent; +} + #eyedropper-preview { position: absolute; width: 45px; @@ -83,7 +91,6 @@ svg { } #canvas-view { - background: color(indent-dark); bottom: 0px; left: 64px; right: 48px; diff --git a/js/_canvas.js b/js/_canvas.js new file mode 100644 index 0000000..c8ecf5f --- /dev/null +++ b/js/_canvas.js @@ -0,0 +1,34 @@ +function Canvas(height, width, canvas) { + this.canvasSize = [width, height], + this.canvas = canvas, + this.initialize = function() { + var maxHorizontalZoom = Math.floor(window.innerWidth/canvasSize[0]*0.75); + var maxVerticalZoom = Math.floor(window.innerHeight/canvasSize[1]*0.75); + + zoom = Math.min(maxHorizontalZoom,maxVerticalZoom); + if (zoom < 1) zoom = 1; + + //resize canvas + this.canvas.width = canvasSize[0]; + this.canvas.height = canvasSize[1]; + this.canvas.style.width = (this.canvas.width*zoom)+'px'; + this.canvas.style.height = (this.canvas.height*zoom)+'px'; + + //unhide canvas + this.canvas.style.display = 'block'; + + //center canvas in window + this.canvas.style.left = 64+canvasView.clientWidth/2-(canvasSize[0]*zoom/2)+'px'; + this.canvas.style.top = 48+canvasView.clientHeight/2-(canvasSize[1]*zoom/2)+'px'; + }, + this.resize = function() { + let newWidth = (this.canvas.width*zoom)+'px'; + let newHeight = (this.canvas.height*zoom)+'px'; + + this.canvas.style.width = newWidth; + this.canvas.style.height = newHeight; + + this.width = newWidth; + this.height = newHeight; + } +} \ No newline at end of file diff --git a/js/_variables.js b/js/_variables.js index 52185fa..c9f21ca 100644 --- a/js/_variables.js +++ b/js/_variables.js @@ -12,9 +12,12 @@ var prevEraserSize = 1; var menuOpen = false; var dialogueOpen = false; var documentCreated = false; + +// Checkerboard management var firstCheckerBoardColor = 'rgba(139, 139, 139, 1)'; var secondCheckerBoardColor = 'rgba(105, 105, 105, 1)'; var checkerBoardSquareSize = 16; +//var checkerBoard = document.getElementById("checkerboard").getContext("2d"); //common elements var brushPreview = document.getElementById("brush-preview"); diff --git a/js/pixel-editor.js b/js/pixel-editor.js index 9a8e11c..728ae4d 100644 --- a/js/pixel-editor.js +++ b/js/pixel-editor.js @@ -42,6 +42,7 @@ //=include _deleteColor.js //=include _replaceAllOfColor.js //=include _checkerboard.js +//=include _canvas.js /**load file**/ From 42a8ce3c4a3e1bcb40610eed3f4d7b75ea77be25 Mon Sep 17 00:00:00 2001 From: npalomba Date: Sun, 31 Mar 2019 16:01:46 +0200 Subject: [PATCH 07/18] Fixed bugs in canvas intialization. Started layers implementation. Signed-off-by: npalomba --- js/_canvas.js | 14 +++++++------- js/_newPixel.js | 24 +++--------------------- js/_variables.js | 1 + 3 files changed, 11 insertions(+), 28 deletions(-) diff --git a/js/_canvas.js b/js/_canvas.js index c8ecf5f..cd39dd4 100644 --- a/js/_canvas.js +++ b/js/_canvas.js @@ -1,16 +1,16 @@ -function Canvas(height, width, canvas) { +function Canvas(width, height, canvas) { this.canvasSize = [width, height], this.canvas = canvas, this.initialize = function() { - var maxHorizontalZoom = Math.floor(window.innerWidth/canvasSize[0]*0.75); - var maxVerticalZoom = Math.floor(window.innerHeight/canvasSize[1]*0.75); + var maxHorizontalZoom = Math.floor(window.innerWidth/this.canvasSize[0]*0.75); + var maxVerticalZoom = Math.floor(window.innerHeight/this.canvasSize[1]*0.75); zoom = Math.min(maxHorizontalZoom,maxVerticalZoom); if (zoom < 1) zoom = 1; //resize canvas - this.canvas.width = canvasSize[0]; - this.canvas.height = canvasSize[1]; + this.canvas.width = this.canvasSize[0]; + this.canvas.height = this.canvasSize[1]; this.canvas.style.width = (this.canvas.width*zoom)+'px'; this.canvas.style.height = (this.canvas.height*zoom)+'px'; @@ -18,8 +18,8 @@ function Canvas(height, width, canvas) { this.canvas.style.display = 'block'; //center canvas in window - this.canvas.style.left = 64+canvasView.clientWidth/2-(canvasSize[0]*zoom/2)+'px'; - this.canvas.style.top = 48+canvasView.clientHeight/2-(canvasSize[1]*zoom/2)+'px'; + this.canvas.style.left = 64+canvasView.clientWidth/2-(this.canvasSize[0]*zoom/2)+'px'; + this.canvas.style.top = 48+canvasView.clientHeight/2-(this.canvasSize[1]*zoom/2)+'px'; }, this.resize = function() { let newWidth = (this.canvas.width*zoom)+'px'; diff --git a/js/_newPixel.js b/js/_newPixel.js index 5b64c5e..4177b37 100644 --- a/js/_newPixel.js +++ b/js/_newPixel.js @@ -1,27 +1,9 @@ function newPixel (width, height, palette) { - - canvasSize = [width,height]; - - var maxHorizontalZoom = Math.floor(window.innerWidth/canvasSize[0]*0.75); - var maxVerticalZoom = Math.floor(window.innerHeight/canvasSize[1]*0.75); - - zoom = Math.min(maxHorizontalZoom,maxVerticalZoom); - if (zoom < 1) zoom = 1; - - //resize canvas - canvas.width = canvasSize[0]; - canvas.height = canvasSize[1]; - canvas.style.width = (canvas.width*zoom)+'px'; - canvas.style.height = (canvas.height*zoom)+'px'; - - //unhide canvas - canvas.style.display = 'block'; - - //center canvas in window - canvas.style.left = 64+canvasView.clientWidth/2-(canvasSize[0]*zoom/2)+'px'; - canvas.style.top = 48+canvasView.clientHeight/2-(canvasSize[1]*zoom/2)+'px'; + var main = new Canvas(width, height, canvas); + main.initialize(); + canvasSize = main.canvasSize; //remove current palette colors = document.getElementsByClassName('color-button'); while (colors.length > 0) { diff --git a/js/_variables.js b/js/_variables.js index c9f21ca..beadf57 100644 --- a/js/_variables.js +++ b/js/_variables.js @@ -12,6 +12,7 @@ var prevEraserSize = 1; var menuOpen = false; var dialogueOpen = false; var documentCreated = false; +var layers = // Checkerboard management var firstCheckerBoardColor = 'rgba(139, 139, 139, 1)'; From a9d380ec1d5d37bc4795493c7f3afacb9be33a71 Mon Sep 17 00:00:00 2001 From: npalomba Date: Sun, 31 Mar 2019 16:32:49 +0200 Subject: [PATCH 08/18] Implemented eraser tool. Must move and resize layers at the same time. Signed-off-by: npalomba --- README.md | 6 +++--- css/pixel-editor.scss | 4 ++-- js/_canvas.js | 1 + js/_checkerboard.js | 2 ++ js/_clickedColor.js | 2 +- js/_createColorPalette.js | 6 +++--- js/_deleteColor.js | 2 +- js/_drawLine.js | 4 ++-- js/_history.js | 30 +++++++++++++------------- js/_jscolor.js | 18 ++++++++-------- js/_loadImage.js | 4 ++-- js/_mouseEvents.js | 44 +++++++++++++++++++-------------------- js/_newPixel.js | 15 +++++++------ js/_replaceAllOfColor.js | 4 ++-- js/_updateCursor.js | 2 +- js/_variables.js | 9 ++++++-- views/pixel-editor.hbs | 1 + 17 files changed, 83 insertions(+), 71 deletions(-) diff --git a/README.md b/README.md index d243e2e..680b966 100644 --- a/README.md +++ b/README.md @@ -21,9 +21,9 @@ Suggestions / Planned features: - Selections - New selection tool - - New canvas layer above the drawing layer + - New currentLayer.canvas layer above the drawing layer - Move when click and drag - - Merge with canvas when click outside + - Merge with currentLayer.canvas when click outside - Copy/paste - Add as selection @@ -35,7 +35,7 @@ Suggestions / Planned features: - Palette option remove unused colors - Pixel Grid - - Another canvas + - Another currentLayer.canvas - Must be rescaled each zoom - Possibly add collaborate function using together.js diff --git a/css/pixel-editor.scss b/css/pixel-editor.scss index 10a8c76..a8cce52 100644 --- a/css/pixel-editor.scss +++ b/css/pixel-editor.scss @@ -54,11 +54,11 @@ canvas { } #checkerboard { - z-index:1000; + z-index:1; } #pixel-canvas { - z-index:1; + z-index:2; background:transparent; } diff --git a/js/_canvas.js b/js/_canvas.js index cd39dd4..b9cb556 100644 --- a/js/_canvas.js +++ b/js/_canvas.js @@ -1,6 +1,7 @@ function Canvas(width, height, canvas) { this.canvasSize = [width, height], this.canvas = canvas, + this.context = canvas.getContext("2d"), this.initialize = function() { var maxHorizontalZoom = Math.floor(window.innerWidth/this.canvasSize[0]*0.75); var maxVerticalZoom = Math.floor(window.innerHeight/this.canvasSize[1]*0.75); diff --git a/js/_checkerboard.js b/js/_checkerboard.js index 97435cd..2deaef9 100644 --- a/js/_checkerboard.js +++ b/js/_checkerboard.js @@ -6,6 +6,8 @@ var nSquaresFilled = 0; */ function fillCheckerboard() { + var context = checkerBoard.context; + for (var i=0; i -canvasSize[0]*zoom*0.75 + 64) + currentLayer.canvas.offsetLeft + (cursorLocation[0] - lastPos[0]) > -canvasSize[0]*zoom*0.75 + 64) canvas.style.left = canvas.offsetLeft + (cursorLocation[0] - lastPos[0]) +'px'; if ( //bottom canvas.offsetTop + (cursorLocation[1] - lastPos[1]) < window.innerHeight-canvasSize[1]*zoom*0.25 && //top - canvas.offsetTop + (cursorLocation[1] - lastPos[1]) > -canvasSize[0]*zoom*0.75 + 48) - canvas.style.top = canvas.offsetTop + (cursorLocation[1] - lastPos[1]) +'px'; + currentLayer.canvas.offsetTop + (cursorLocation[1] - lastPos[1]) > -canvasSize[0]*zoom*0.75 + 48) + currentLayer.canvas.style.top = currentLayer.canvas.offsetTop + (cursorLocation[1] - lastPos[1]) +'px'; */ } - else if (currentTool == 'eyedropper' && dragging && mouseEvent.target == canvas) { + else if (currentTool == 'eyedropper' && dragging && mouseEvent.target == currentLayer.canvas) { var selectedColor = context.getImageData(Math.floor(cursorLocation[0]/zoom),Math.floor(cursorLocation[1]/zoom),1,1).data; eyedropperPreview.style.borderColor = '#'+rgbToHex(selectedColor[0],selectedColor[1],selectedColor[2]); eyedropperPreview.style.display = 'block'; - eyedropperPreview.style.left = cursorLocation[0] + canvas.offsetLeft - 30 + 'px'; - eyedropperPreview.style.top = cursorLocation[1] + canvas.offsetTop - 30 + 'px'; + eyedropperPreview.style.left = cursorLocation[0] + currentLayer.canvas.offsetLeft - 30 + 'px'; + eyedropperPreview.style.top = cursorLocation[1] + currentLayer.canvas.offsetTop - 30 + 'px'; var colorLightness = Math.max(selectedColor[0],selectedColor[1],selectedColor[2]); @@ -213,8 +213,8 @@ function draw (mouseEvent) { brushSize = Math.max(1,newBrushSize); //fix offset so the cursor stays centered - brushPreview.style.left = lastPos[0] + canvas.offsetLeft - brushSize * zoom / 2 + 'px'; - brushPreview.style.top = lastPos[1] + canvas.offsetTop - brushSize * zoom / 2 + 'px'; + brushPreview.style.left = lastPos[0] + currentLayer.canvas.offsetLeft - brushSize * zoom / 2 + 'px'; + brushPreview.style.top = lastPos[1] + currentLayer.canvas.offsetTop - brushSize * zoom / 2 + 'px'; updateCursor(); } diff --git a/js/_newPixel.js b/js/_newPixel.js index 4177b37..0fc6f5e 100644 --- a/js/_newPixel.js +++ b/js/_newPixel.js @@ -1,9 +1,12 @@ function newPixel (width, height, palette) { - var main = new Canvas(width, height, canvas); - main.initialize(); + currentLayer = new Canvas(width, height, canvas); + currentLayer.initialize(); - canvasSize = main.canvasSize; + checkerBoard = new Canvas(width, height, checkerBoard); + checkerBoard.initialize(); + + canvasSize = currentLayer.canvasSize; //remove current palette colors = document.getElementsByClassName('color-button'); while (colors.length > 0) { @@ -40,14 +43,14 @@ function newPixel (width, height, palette) { //fill background of canvas with bg color fillCheckerboard(); /* - context.fillStyle = '#'+defaultBackgroundColor; - context.fillRect(0, 0, canvasSize[0], canvasSize[1]); + currentLayer.context.fillStyle = '#'+defaultBackgroundColor; + currentLayer.context.fillRect(0, 0, canvasSize[0], canvasSize[1]); console.log('#'+defaultBackgroundColor) */ //set current drawing color as foreground color - context.fillStyle = '#'+defaultForegroundColor; + currentLayer.context.fillStyle = '#'+defaultForegroundColor; selectedPalette = 'none'; } diff --git a/js/_replaceAllOfColor.js b/js/_replaceAllOfColor.js index d7c9f3a..b6c7b6d 100644 --- a/js/_replaceAllOfColor.js +++ b/js/_replaceAllOfColor.js @@ -7,7 +7,7 @@ function replaceAllOfColor (oldColor, newColor) { if (typeof newColor === 'string') newColor = hexToRgb(newColor); //create temporary image from canvas to search through - var tempImage = context.getImageData(0, 0, canvasSize[0], canvasSize[1]); + var tempImage = currentLayer.context.getImageData(0, 0, canvasSize[0], canvasSize[1]); //loop through all pixels for (var i=0;i +
    From 16d816db189c23cf27826a9268eccc45e2be7028 Mon Sep 17 00:00:00 2001 From: npalomba Date: Sun, 31 Mar 2019 17:15:03 +0200 Subject: [PATCH 09/18] Fixed bug in canvas dragging, must fix the one on resizing. Signed-off-by: npalomba --- js/_canvas.js | 5 +---- js/_changeZoom.js | 11 ++++++----- js/_mouseEvents.js | 31 +++++++++++++++++++++++++------ js/_newPixel.js | 6 +++++- js/_setCanvasOffset.js | 16 ++++++++-------- js/_toolButtons.js | 10 +++++++--- js/_updateCursor.js | 1 - js/_variables.js | 2 +- 8 files changed, 53 insertions(+), 29 deletions(-) diff --git a/js/_canvas.js b/js/_canvas.js index b9cb556..5e39acf 100644 --- a/js/_canvas.js +++ b/js/_canvas.js @@ -1,7 +1,7 @@ function Canvas(width, height, canvas) { this.canvasSize = [width, height], this.canvas = canvas, - this.context = canvas.getContext("2d"), + this.context = this.canvas.getContext("2d"), this.initialize = function() { var maxHorizontalZoom = Math.floor(window.innerWidth/this.canvasSize[0]*0.75); var maxVerticalZoom = Math.floor(window.innerHeight/this.canvasSize[1]*0.75); @@ -25,11 +25,8 @@ function Canvas(width, height, canvas) { this.resize = function() { let newWidth = (this.canvas.width*zoom)+'px'; let newHeight = (this.canvas.height*zoom)+'px'; - this.canvas.style.width = newWidth; this.canvas.style.height = newHeight; - this.width = newWidth; - this.height = newHeight; } } \ No newline at end of file diff --git a/js/_changeZoom.js b/js/_changeZoom.js index 832cd07..2304438 100644 --- a/js/_changeZoom.js +++ b/js/_changeZoom.js @@ -1,5 +1,5 @@ -function changeZoom (direction, cursorLocation) { +function changeZoom (layer, direction, cursorLocation) { var oldWidth = canvasSize[0] * zoom; var oldHeight = canvasSize[1] * zoom; @@ -13,7 +13,7 @@ function changeZoom (direction, cursorLocation) { newHeight = canvasSize[1] * zoom; //adjust canvas position - setCanvasOffset(canvas.offsetLeft + (oldWidth - newWidth) *cursorLocation[0]/oldWidth, canvas.offsetTop + (oldHeight - newHeight) *cursorLocation[1]/oldWidth) + setCanvasOffset(layer.canvas, layer.canvas.offsetLeft + (oldWidth - newWidth) *cursorLocation[0]/oldWidth, layer.canvas.offsetTop + (oldHeight - newHeight) *cursorLocation[1]/oldWidth) } //if you want to zoom in else if (direction == 'in' && zoom + Math.ceil(zoom/10) < window.innerHeight/4){ @@ -22,12 +22,13 @@ function changeZoom (direction, cursorLocation) { newHeight = canvasSize[1] * zoom; //adjust canvas position - setCanvasOffset(canvas.offsetLeft - Math.round((newWidth - oldWidth)*cursorLocation[0]/oldWidth), canvas.offsetTop - Math.round((newHeight - oldHeight)*cursorLocation[1]/oldHeight)) + setCanvasOffset(layer.canvas, canvas, layer.canvas.offsetLeft - Math.round((newWidth - oldWidth)*cursorLocation[0]/oldWidth), layer.canvas.offsetTop - Math.round((newHeight - oldHeight)*cursorLocation[1]/oldHeight)) } //resize canvas - canvas.style.width = (canvas.width*zoom)+'px'; - canvas.style.height = (canvas.height*zoom)+'px'; + for (let i=0; i 0) changeZoom('out', getCursorPosition(mouseEvent)) + let mode; + if (mouseEvent.deltaY < 0){ + mode = 'in'; + } + else if (mouseEvent.deltaY > 0) { + mode = 'out'; + } + + for (let i=0; i 0) { diff --git a/js/_setCanvasOffset.js b/js/_setCanvasOffset.js index 3730fef..c1b8ecc 100644 --- a/js/_setCanvasOffset.js +++ b/js/_setCanvasOffset.js @@ -1,4 +1,4 @@ -function setCanvasOffset (offsetLeft, offsetTop) { +function setCanvasOffset (canvas, offsetLeft, offsetTop) { //horizontal offset var minXOffset = -canvasSize[0]*zoom+ 164; @@ -6,19 +6,19 @@ function setCanvasOffset (offsetLeft, offsetTop) { if (offsetLeft < minXOffset) canvas.style.left = minXOffset +'px'; - else if (offsetLeft > maxXOffset) - canvas.style.left = maxXOffset +'px'; + else if (offsetLeft > maxXOffset) + canvas.style.left = maxXOffset +'px'; else - canvas.style.left = offsetLeft +'px'; + canvas.style.left = offsetLeft +'px'; //vertical offset var minYOffset = -canvasSize[1]*zoom + 164; var maxYOffset = window.innerHeight-100; if (offsetTop < minYOffset) - canvas.style.top = minYOffset +'px'; - else if (offsetTop > maxYOffset) - canvas.style.top = maxYOffset +'px'; + canvas.style.top = minYOffset +'px'; + else if (offsetTop > maxYOffset) + canvas.style.top = maxYOffset +'px'; else - canvas.style.top = offsetTop +'px'; + canvas.style.top = offsetTop +'px'; } \ No newline at end of file diff --git a/js/_toolButtons.js b/js/_toolButtons.js index ecad3fc..aa72958 100644 --- a/js/_toolButtons.js +++ b/js/_toolButtons.js @@ -54,11 +54,15 @@ on('click',"zoom-button", function(){ //zoom in button on('click',"zoom-in-button", function(){ - //changeZoom('in',[window.innerWidth/2-canvas.offsetLeft,window.innerHeight/2-canvas.offsetTop]); - changeZoom('in',[canvasSize[0]*zoom/2,canvasSize[1]*zoom/2]); + //changeZoom('in',[window.innerWidth/2-canvas.offsetLeft,window.innerHeight/2-canvas.offsetTop]); + for (let i=0; i Date: Sun, 31 Mar 2019 18:41:08 +0200 Subject: [PATCH 10/18] Fixed zooming bug. Eraser tool implementation definitely completed. Signed-off-by: npalomba --- js/_canvas.js | 11 +++++++++-- js/_changeZoom.js | 7 ++----- js/_mouseEvents.js | 29 +++++++++-------------------- js/_setCanvasOffset.js | 3 +-- js/_toolButtons.js | 12 ++++++++---- js/pixel-editor.js | 1 + 6 files changed, 30 insertions(+), 33 deletions(-) diff --git a/js/_canvas.js b/js/_canvas.js index 5e39acf..0aaebe6 100644 --- a/js/_canvas.js +++ b/js/_canvas.js @@ -23,10 +23,17 @@ function Canvas(width, height, canvas) { this.canvas.style.top = 48+canvasView.clientHeight/2-(this.canvasSize[1]*zoom/2)+'px'; }, this.resize = function() { - let newWidth = (this.canvas.width*zoom)+'px'; - let newHeight = (this.canvas.height*zoom)+'px'; + let newWidth = (this.canvas.width * zoom) + 'px'; + let newHeight = (this.canvas.height *zoom)+ 'px'; + this.canvas.style.width = newWidth; this.canvas.style.height = newHeight; + }, + this.copyData = function(otherCanvas) { + this.canvas.style.width = otherCanvas.canvas.style.width; + this.canvas.style.height = otherCanvas.canvas.style.height; + this.canvas.style.left = otherCanvas.canvas.style.left; + this.canvas.style.top = otherCanvas.canvas.style.top; } } \ No newline at end of file diff --git a/js/_changeZoom.js b/js/_changeZoom.js index 2304438..57eb42f 100644 --- a/js/_changeZoom.js +++ b/js/_changeZoom.js @@ -1,6 +1,5 @@ function changeZoom (layer, direction, cursorLocation) { - var oldWidth = canvasSize[0] * zoom; var oldHeight = canvasSize[1] * zoom; var newWidth, newHeight; @@ -22,13 +21,11 @@ function changeZoom (layer, direction, cursorLocation) { newHeight = canvasSize[1] * zoom; //adjust canvas position - setCanvasOffset(layer.canvas, canvas, layer.canvas.offsetLeft - Math.round((newWidth - oldWidth)*cursorLocation[0]/oldWidth), layer.canvas.offsetTop - Math.round((newHeight - oldHeight)*cursorLocation[1]/oldHeight)) + setCanvasOffset(layer.canvas, layer.canvas.offsetLeft - Math.round((newWidth - oldWidth)*cursorLocation[0]/oldWidth), layer.canvas.offsetTop - Math.round((newHeight - oldHeight)*cursorLocation[1]/oldHeight)) } //resize canvas - for (let i=0; i -canvasSize[0]*zoom*0.75 + 64) - canvas.style.left = canvas.offsetLeft + (cursorLocation[0] - lastPos[0]) +'px'; - - if ( - //bottom - canvas.offsetTop + (cursorLocation[1] - lastPos[1]) < window.innerHeight-canvasSize[1]*zoom*0.25 && - //top - currentLayer.canvas.offsetTop + (cursorLocation[1] - lastPos[1]) > -canvasSize[0]*zoom*0.75 + 48) - currentLayer.canvas.style.top = currentLayer.canvas.offsetTop + (cursorLocation[1] - lastPos[1]) +'px'; - */ } else if (currentTool == 'eyedropper' && dragging && mouseEvent.target == currentLayer.canvas) { var selectedColor = context.getImageData(Math.floor(cursorLocation[0]/zoom),Math.floor(cursorLocation[1]/zoom),1,1).data; @@ -242,8 +229,10 @@ canvasView.addEventListener("wheel", function(mouseEvent){ mode = 'out'; } - for (let i=0; i Date: Sun, 31 Mar 2019 18:44:09 +0200 Subject: [PATCH 11/18] Fixed visibility of canvas before canvas generation. --- css/pixel-editor.scss | 1 + js/_canvas.js | 2 ++ js/_mouseEvents.js | 2 ++ 3 files changed, 5 insertions(+) diff --git a/css/pixel-editor.scss b/css/pixel-editor.scss index a8cce52..3854f2a 100644 --- a/css/pixel-editor.scss +++ b/css/pixel-editor.scss @@ -50,6 +50,7 @@ canvas { width: 400px; height: 400px; position: fixed; + display:none; box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.64); } diff --git a/js/_canvas.js b/js/_canvas.js index 0aaebe6..f1bc862 100644 --- a/js/_canvas.js +++ b/js/_canvas.js @@ -2,6 +2,7 @@ function Canvas(width, height, canvas) { this.canvasSize = [width, height], this.canvas = canvas, this.context = this.canvas.getContext("2d"), + // Initializes the canvas this.initialize = function() { var maxHorizontalZoom = Math.floor(window.innerWidth/this.canvasSize[0]*0.75); var maxVerticalZoom = Math.floor(window.innerHeight/this.canvasSize[1]*0.75); @@ -29,6 +30,7 @@ function Canvas(width, height, canvas) { this.canvas.style.width = newWidth; this.canvas.style.height = newHeight; }, + // Copies the otherCanvas' position and size this.copyData = function(otherCanvas) { this.canvas.style.width = otherCanvas.canvas.style.width; this.canvas.style.height = otherCanvas.canvas.style.height; diff --git a/js/_mouseEvents.js b/js/_mouseEvents.js index d2d72db..d0e0c7c 100644 --- a/js/_mouseEvents.js +++ b/js/_mouseEvents.js @@ -229,9 +229,11 @@ canvasView.addEventListener("wheel", function(mouseEvent){ mode = 'out'; } + // Changing zoom and position of the first layer changeZoom(layers[0], mode, getCursorPosition(mouseEvent)) for (let i=1; i Date: Sun, 31 Mar 2019 18:48:15 +0200 Subject: [PATCH 12/18] Fixed bug in canvas dragging (pan tool). Signed-off-by: npalomba --- js/_mouseEvents.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/js/_mouseEvents.js b/js/_mouseEvents.js index d0e0c7c..a0a13ee 100644 --- a/js/_mouseEvents.js +++ b/js/_mouseEvents.js @@ -178,9 +178,9 @@ function draw (mouseEvent) { } } else if (currentTool == 'pan' && dragging) { - - for (let i=0; i Date: Sun, 31 Mar 2019 19:53:39 +0200 Subject: [PATCH 13/18] Solved bug that made the colour picker appear in the canvas. Signed-off-by: npalomba --- css/pixel-editor.scss | 2 +- js/_addColorButton.js | 1 + js/_jscolor.js | 18 +++++++++--------- js/_mouseEvents.js | 2 +- views/pixel-editor.hbs | 6 ++---- 5 files changed, 14 insertions(+), 15 deletions(-) diff --git a/css/pixel-editor.scss b/css/pixel-editor.scss index 3854f2a..7552461 100644 --- a/css/pixel-editor.scss +++ b/css/pixel-editor.scss @@ -35,7 +35,7 @@ svg { outline: 0 !important; } -canvas { +.drawingCanvas { cursor: url('/pixel-art-where-to-start/pencil-tool-cursor.png'); border: solid 1px #fff; diff --git a/js/_addColorButton.js b/js/_addColorButton.js index 64597aa..b5124ae 100644 --- a/js/_addColorButton.js +++ b/js/_addColorButton.js @@ -52,6 +52,7 @@ on('click', 'add-color-button', function(){ //show color picker addedColor.firstElementChild.jscolor.show(); + console.log("showing picker"); //hide edit button addedColor.lastChild.classList.add('hidden'); diff --git a/js/_jscolor.js b/js/_jscolor.js index 16a89ae..d2ef234 100644 --- a/js/_jscolor.js +++ b/js/_jscolor.js @@ -547,7 +547,7 @@ var jsc = { //console.log(e.target,'=====================================') //if they clicked on the delete button [lospec] if (e.target.className == 'delete-color-button') { - //saveHistoryState({type: 'deletecolor', colorValue: jsc.picker.owner.toString(), canvas: currentLayer.context.getImageData(0, 0, canvasSize[0], canvasSize[1])}); + //saveHistoryState({type: 'deletecolor', colorValue: jsc.picker.owner.toString(), canvas: canvas.context.getImageData(0, 0, canvasSize[0], canvasSize[1])}); new HistoryStateDeleteColor(jsc.picker.owner.toString()); deleteColor(jsc.picker.owner.styleElement); @@ -784,15 +784,15 @@ var jsc = { // Canvas implementation for modern browsers var canvas = document.createElement('canvas'); - var ctx = currentLayer.canvas.getContext('2d'); + var ctx = canvas.getContext('2d'); var drawFunc = function (width, height, type) { - currentLayer.canvas.width = width; - currentLayer.canvas.height = height; + canvas.width = width; + canvas.height = height; - ctx.clearRect(0, 0, currentLayer.canvas.width, currentLayer.canvas.height); + ctx.clearRect(0, 0, canvas.width, canvas.height); - var hGrad = ctx.createLinearGradient(0, 0, currentLayer.canvas.width, 0); + var hGrad = ctx.createLinearGradient(0, 0, canvas.width, 0); hGrad.addColorStop(0 / 6, '#F00'); hGrad.addColorStop(1 / 6, '#FF0'); hGrad.addColorStop(2 / 6, '#0F0'); @@ -802,9 +802,9 @@ var jsc = { hGrad.addColorStop(6 / 6, '#F00'); ctx.fillStyle = hGrad; - ctx.fillRect(0, 0, currentLayer.canvas.width, currentLayer.canvas.height); + ctx.fillRect(0, 0, canvas.width, canvas.height); - var vGrad = ctx.createLinearGradient(0, 0, 0, currentLayer.canvas.height); + var vGrad = ctx.createLinearGradient(0, 0, 0, canvas.height); switch (type.toLowerCase()) { case 's': vGrad.addColorStop(0, 'rgba(255,255,255,0)'); @@ -816,7 +816,7 @@ var jsc = { break; } ctx.fillStyle = vGrad; - ctx.fillRect(0, 0, currentLayer.canvas.width, canvas.height); + ctx.fillRect(0, 0, canvas.width, canvas.height); }; paletteObj.elm = canvas; diff --git a/js/_mouseEvents.js b/js/_mouseEvents.js index a0a13ee..9a31b28 100644 --- a/js/_mouseEvents.js +++ b/js/_mouseEvents.js @@ -93,7 +93,7 @@ window.addEventListener("mouseup", function (mouseEvent) { //fill starting at the location fill(cursorLocation); } - else if (currentTool == 'zoom') { + else if (currentTool == 'zoom' && mouseEvent.target == canvasView) { let mode; if (mouseEvent.which == 1){ mode = "in"; diff --git a/views/pixel-editor.hbs b/views/pixel-editor.hbs index 3175b91..e48af1f 100644 --- a/views/pixel-editor.hbs +++ b/views/pixel-editor.hbs @@ -98,8 +98,8 @@
    - - + +
    @@ -109,9 +109,7 @@ - -
    #
    {{svg "warning.svg" width="14" height="12" }}
    From f7100ff9f7e462cc84e9014bd33490f2ae5df5c2 Mon Sep 17 00:00:00 2001 From: npalomba Date: Mon, 1 Apr 2019 21:37:53 +0200 Subject: [PATCH 14/18] Added comments, removed unused variables. Signed-off-by: npalomba --- js/_canvas.js | 7 +++++++ js/_checkerboard.js | 15 +++++++++++---- js/_drawLine.js | 3 +++ js/_mouseEvents.js | 7 ++++--- js/_updateCursor.js | 1 + js/_variables.js | 12 ++++++------ 6 files changed, 32 insertions(+), 13 deletions(-) diff --git a/js/_canvas.js b/js/_canvas.js index f1bc862..dafb44a 100644 --- a/js/_canvas.js +++ b/js/_canvas.js @@ -1,3 +1,9 @@ +/** Handler class for a single canvas (a single layer) + * + * @param width Canvas width + * @param height Canvas height + * @param canvas HTML canvas element + */ function Canvas(width, height, canvas) { this.canvasSize = [width, height], this.canvas = canvas, @@ -23,6 +29,7 @@ function Canvas(width, height, canvas) { this.canvas.style.left = 64+canvasView.clientWidth/2-(this.canvasSize[0]*zoom/2)+'px'; this.canvas.style.top = 48+canvasView.clientHeight/2-(this.canvasSize[1]*zoom/2)+'px'; }, + // Resizes canvas this.resize = function() { let newWidth = (this.canvas.width * zoom) + 'px'; let newHeight = (this.canvas.height *zoom)+ 'px'; diff --git a/js/_checkerboard.js b/js/_checkerboard.js index 2deaef9..9c4b7dc 100644 --- a/js/_checkerboard.js +++ b/js/_checkerboard.js @@ -1,13 +1,15 @@ +// This script contains all the functions used to manage the checkboard + +// Setting current colour (each square has a different colour var currentColor = firstCheckerBoardColor; +// Saving number of squares filled until now var nSquaresFilled = 0; -/* TODO add check for canvas dimentions (right now negative values can be inserted and a canvas will be generated, it is just - necessary to add a conversion from negative to positive values. - */ - function fillCheckerboard() { + // Getting checkerboard context var context = checkerBoard.context; + // Cycling through the canvas (using it as a matrix) for (var i=0; i Date: Mon, 1 Apr 2019 22:16:07 +0200 Subject: [PATCH 15/18] Fixed bug that caused the eraser preview to be shifted from the actual mouse position. Signed-off-by: npalomba --- js/_drawLine.js | 2 +- js/_mouseEvents.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/js/_drawLine.js b/js/_drawLine.js index 324f9d4..7008a7b 100644 --- a/js/_drawLine.js +++ b/js/_drawLine.js @@ -15,7 +15,7 @@ function line(x0,y0,x1,y1) { currentLayer.context.fillRect(x0-Math.floor(brushSize/2), y0-Math.floor(brushSize/2), brushSize, brushSize); } else if (currentTool == 'eraser') { // In case I'm using the eraser I must clear the rect - currentLayer.context.clearRect(x0-Math.floor(brushSize/2), y0-Math.floor(brushSize/2), eraserSize, eraserSize); + currentLayer.context.clearRect(x0-Math.floor(eraserSize/2), y0-Math.floor(eraserSize/2), eraserSize, eraserSize); } //if we've reached the end goal, exit the loop diff --git a/js/_mouseEvents.js b/js/_mouseEvents.js index dfe4723..02895e8 100644 --- a/js/_mouseEvents.js +++ b/js/_mouseEvents.js @@ -160,8 +160,8 @@ function draw (mouseEvent) { else if (currentTool == 'eraser') { // Uses the same preview as the brush //move the brush preview - brushPreview.style.left = cursorLocation[0] + canvas.offsetLeft - brushSize * zoom / 2 + 'px'; - brushPreview.style.top = cursorLocation[1] + canvas.offsetTop - brushSize * zoom / 2 + 'px'; + brushPreview.style.left = cursorLocation[0] + canvas.offsetLeft - eraserSize * zoom / 2 + 'px'; + brushPreview.style.top = cursorLocation[1] + canvas.offsetTop - eraserSize * zoom / 2 + 'px'; //hide brush preview outside of canvas / canvas view if (mouseEvent.target == currentLayer.canvas || mouseEvent.target == canvasView) From f6b1e3ce5b51b925bb2d5c2ac76d0d100a53c8c5 Mon Sep 17 00:00:00 2001 From: npalomba Date: Mon, 1 Apr 2019 22:22:15 +0200 Subject: [PATCH 16/18] Removed useless reference to _layers.js in pixel-editor.js. Signed-off-by: npalomba --- js/pixel-editor.js | 1 - 1 file changed, 1 deletion(-) diff --git a/js/pixel-editor.js b/js/pixel-editor.js index 18b723f..728ae4d 100644 --- a/js/pixel-editor.js +++ b/js/pixel-editor.js @@ -43,7 +43,6 @@ //=include _replaceAllOfColor.js //=include _checkerboard.js //=include _canvas.js -//=include _layers.js /**load file**/ From 46bd6a8adbf25f38f3f7777589e0e7b63b10943d Mon Sep 17 00:00:00 2001 From: npalomba Date: Tue, 2 Apr 2019 19:42:28 +0200 Subject: [PATCH 17/18] Added eraser resize when right clicking while having the eraser tool selected. Signed-off-by: npalomba --- js/_mouseEvents.js | 43 ++++++++++++++++++++++++++++++++----------- js/_updateCursor.js | 4 ++-- js/_variables.js | 1 + 3 files changed, 35 insertions(+), 13 deletions(-) diff --git a/js/_mouseEvents.js b/js/_mouseEvents.js index 02895e8..2ecc472 100644 --- a/js/_mouseEvents.js +++ b/js/_mouseEvents.js @@ -27,8 +27,12 @@ window.addEventListener("mousedown", function (mouseEvent) { } else if (currentTool == 'pencil' && mouseEvent.which == 3) { currentTool = 'resize-brush'; - prevBrushSize=brushSize; + prevBrushSize = brushSize; } + else if (currentTool == 'eraser' && mouseEvent.which == 3) { + currentTool = 'resize-eraser'; + prevEraserSize = eraserSize; + } if (currentTool == 'eyedropper' && mouseEvent.target == currentLayer.canvas) eyedropperPreview.style.display = 'block'; @@ -205,17 +209,34 @@ function draw (mouseEvent) { //var roundingAmount = 20 - Math.round(distanceFromClick/10); //this doesnt work in reverse... because... it's not basing it off of the brush size which it should be var brushSizeChange = Math.round(distanceFromClick/10); - var newBrushSize = prevBrushSize + brushSizeChange; - - //set the brush to the new size as long as its bigger than 1 - brushSize = Math.max(1,newBrushSize); - - //fix offset so the cursor stays centered - brushPreview.style.left = lastPos[0] + currentLayer.canvas.offsetLeft - brushSize * zoom / 2 + 'px'; - brushPreview.style.top = lastPos[1] + currentLayer.canvas.offsetTop - brushSize * zoom / 2 + 'px'; + var newBrushSize = prevBrushSize + brushSizeChange; - updateCursor(); - } + //set the brush to the new size as long as its bigger than 1 + brushSize = Math.max(1,newBrushSize); + + //fix offset so the cursor stays centered + brushPreview.style.left = lastPos[0] + currentLayer.canvas.offsetLeft - brushSize * zoom / 2 + 'px'; + brushPreview.style.top = lastPos[1] + currentLayer.canvas.offsetTop - brushSize * zoom / 2 + 'px'; + + updateCursor(); + } + else if (currentTool == 'resize-eraser' && dragging) { + //get new brush size based on x distance from original clicking location + var distanceFromClick = cursorLocation[0] - lastPos[0]; + //var roundingAmount = 20 - Math.round(distanceFromClick/10); + //this doesnt work in reverse... because... it's not basing it off of the brush size which it should be + var eraserSizeChange = Math.round(distanceFromClick/10); + var newEraserSizeChange = prevEraserSize + eraserSizeChange; + + //set the brush to the new size as long as its bigger than 1 + eraserSize = Math.max(1,newEraserSizeChange); + + //fix offset so the cursor stays centered + brushPreview.style.left = lastPos[0] + currentLayer.canvas.offsetLeft - eraserSize * zoom / 2 + 'px'; + brushPreview.style.top = lastPos[1] + currentLayer.canvas.offsetTop - eraserSize * zoom / 2 + 'px'; + + updateCursor(); + } } //mousewheel scrroll diff --git a/js/_updateCursor.js b/js/_updateCursor.js index 281be27..bc919a9 100644 --- a/js/_updateCursor.js +++ b/js/_updateCursor.js @@ -6,7 +6,7 @@ function updateCursor () { brushPreview.style.display = 'block'; brushPreview.style.width = brushSize * zoom + 'px'; brushPreview.style.height = brushSize * zoom + 'px'; - } else if (currentTool == 'eraser') { + } else if (currentTool == 'eraser' || currentTool == 'resize-eraser') { // Size management for the eraser console.log("Eraser size: " + eraserSize); canvasView.style.cursor = 'crosshair'; @@ -33,6 +33,6 @@ function updateCursor () { if (currentTool == 'zoom') canvasView.style.cursor = "url('/pixel-editor/zoom-in.png'), auto"; - if (currentTool == 'resize-brush') + if (currentTool == 'resize-brush' || currentTool == 'resize-eraser') canvasView.style.cursor = 'default'; } \ No newline at end of file diff --git a/js/_variables.js b/js/_variables.js index 2852b3c..7753952 100644 --- a/js/_variables.js +++ b/js/_variables.js @@ -7,6 +7,7 @@ var currentToolTemp = 'pencil'; var brushSize = 1; var eraserSize = 1; var prevBrushSize = 1; +var prevEraserSize = 1; var dialogueOpen = false; var documentCreated = false; From 3feee2ce5a85b469e2be941268ea1fb702e46cc0 Mon Sep 17 00:00:00 2001 From: npalomba Date: Tue, 2 Apr 2019 22:35:10 +0200 Subject: [PATCH 18/18] Fixed bug that caused the fill tool to not work on transparent areas. --- js/_fill.js | 37 ++++++++++++++++++++----------------- js/_updateCursor.js | 2 -- js/_variables.js | 4 ++-- 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/js/_fill.js b/js/_fill.js index 4b66e1c..f248a77 100644 --- a/js/_fill.js +++ b/js/_fill.js @@ -3,9 +3,15 @@ function fill(cursorLocation) { //changes a pixels color function colorPixel(tempImage, pixelPos, fillColor) { //console.log('colorPixel:',pixelPos); + tempImage.data[pixelPos] = fillColor.r; + tempImage.data[pixelPos + 1] = fillColor.g; + tempImage.data[pixelPos + 2] = fillColor.b; + tempImage.data[pixelPos + 3] = 255; + /* tempImage.data[pixelPos] = fillColor.r; tempImage.data[pixelPos + 1] = fillColor.g; tempImage.data[pixelPos + 2] = fillColor.b; + */ } //change x y to color value passed from the function and use that as the original color @@ -23,47 +29,45 @@ function fill(cursorLocation) { new HistoryStateEditCanvas(); //saveHistoryState({type: 'canvas', canvas: context.getImageData(0, 0, canvasSize[0], canvasSize[1])}); //console.log('filling at '+ Math.floor(cursorLocation[0]/zoom) + ','+ Math.floor(cursorLocation[1]/zoom)); - + //temporary image holds the data while we change it - var tempImage = context.getImageData(0, 0, canvasSize[0], canvasSize[1]); - + var tempImage = currentLayer.context.getImageData(0, 0, canvasSize[0], canvasSize[1]); + //this is an array that holds all of the pixels at the top of the cluster var topmostPixelsArray = [[Math.floor(cursorLocation[0]/zoom), Math.floor(cursorLocation[1]/zoom)]]; //console.log('topmostPixelsArray:',topmostPixelsArray) - + //the offset of the pixel in the temp image data to start with var startingPosition = (topmostPixelsArray[0][1] * canvasSize[0] + topmostPixelsArray[0][0]) * 4; - + //the color of the cluster that is being filled var clusterColor = [tempImage.data[startingPosition],tempImage.data[startingPosition+1],tempImage.data[startingPosition+2]]; - + //the new color to fill with - var fillColor = hexToRgb(context.fillStyle); - + var fillColor = hexToRgb(currentLayer.context.fillStyle); + //if you try to fill with the same color that's already there, exit the function if (clusterColor[0] == fillColor.r && clusterColor[1] == fillColor.g && clusterColor[2] == fillColor.b ) return; - + //loop until there are no more values left in this array while (topmostPixelsArray.length) { - var reachLeft, reachRight; - + //move the most recent pixel from the array and set it as our current working pixels var currentPixel = topmostPixelsArray.pop(); - + //set the values of this pixel to x/y variables just for readability var x = currentPixel[0]; var y = currentPixel[1]; //this variable holds the index of where the starting values for the current pixel are in the data array - //we multiply the number of rows down (y) times the width of each row, then add x. at the end we multiply by 4 because + //we multiply the number of rows down (y) times the width of each row, then add x. at the end we multiply by 4 because //each pixel has 4 values, rgba var pixelPos = (y * canvasSize[0] + x) * 4; - - + //move up in the image until you reach the top or the pixel you hit was not the right color while (y-- >= 0 && matchStartColor(tempImage, pixelPos, clusterColor)) { pixelPos -= canvasSize[0] * 4; @@ -74,7 +78,6 @@ function fill(cursorLocation) { reachRight = false; while (y++ < canvasSize[1] - 1 && matchStartColor(tempImage, pixelPos, clusterColor)) { colorPixel(tempImage, pixelPos, fillColor); - if (x > 0) { if (matchStartColor(tempImage, pixelPos - 4, clusterColor)) { if (!reachLeft) { @@ -102,6 +105,6 @@ function fill(cursorLocation) { pixelPos += canvasSize[0] * 4; } } - context.putImageData(tempImage, 0, 0); + currentLayer.context.putImageData(tempImage, 0, 0); //console.log('done filling') } \ No newline at end of file diff --git a/js/_updateCursor.js b/js/_updateCursor.js index bc919a9..9c3e300 100644 --- a/js/_updateCursor.js +++ b/js/_updateCursor.js @@ -7,8 +7,6 @@ function updateCursor () { brushPreview.style.width = brushSize * zoom + 'px'; brushPreview.style.height = brushSize * zoom + 'px'; } else if (currentTool == 'eraser' || currentTool == 'resize-eraser') { - // Size management for the eraser - console.log("Eraser size: " + eraserSize); canvasView.style.cursor = 'crosshair'; brushPreview.style.display = 'block'; brushPreview.style.width = eraserSize * zoom + 'px'; diff --git a/js/_variables.js b/js/_variables.js index 7753952..16b056d 100644 --- a/js/_variables.js +++ b/js/_variables.js @@ -13,9 +13,9 @@ var documentCreated = false; // Checkerboard management // Checkerboard color 1 -var firstCheckerBoardColor = 'rgba(139, 139, 139, 1)'; +var firstCheckerBoardColor = 'rgba(179, 173, 182, 1)'; // Checkerboard color 2 -var secondCheckerBoardColor = 'rgba(105, 105, 105, 1)'; +var secondCheckerBoardColor = 'rgba(204, 200, 206, 1)'; // Square size for the checkerboard var checkerBoardSquareSize = 16; // Checkerboard canvas