├── .gitignore ├── Gruntfile.js ├── LICENSE ├── README.md ├── bower.json ├── circular-progress.js ├── circular-progress.min.js ├── circular-progress.min.map ├── package.json ├── test └── index.html └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | # npm 2 | node_modules/ -------------------------------------------------------------------------------- /Gruntfile.js: -------------------------------------------------------------------------------- 1 | module.exports = function (grunt) { 2 | 'use strict'; 3 | 4 | grunt.initConfig({ 5 | uglify: { 6 | 'default': { 7 | options: { 8 | preserveComments: 'some', 9 | sourceMap: 'circular-progress.min.map' 10 | }, 11 | files: { 12 | 'circular-progress.min.js': 'circular-progress.js' 13 | } 14 | } 15 | } 16 | }); 17 | 18 | grunt.loadNpmTasks('grunt-contrib-uglify'); 19 | 20 | grunt.registerTask('default', ['uglify']); 21 | }; -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | Copyright (c) 2016 Bergé Greg 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 5 | 6 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 7 | 8 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Circular Progress 2 | 3 | A JavaScript circular progress widget, dependency-free and configurable. 4 | 5 | Example 6 | 7 | ## Example 8 | 9 | ```javascript 10 | var progress = new CircularProgress({ 11 | radius: 70, 12 | strokeStyle: 'black', 13 | lineCap: 'round', 14 | lineWidth: 4 15 | }); 16 | 17 | document.body.appendChild(progress.el); 18 | 19 | progress.update(40); 20 | ``` 21 | 22 | ## Usage 23 | 24 | ### new CircularProgress( options ) 25 | 26 | Other attributes are attached to the canvas 2D context. 27 | 28 | Options : 29 | 30 | * all 2D context properties. 31 | * `text` : Scopped to text, accept `value` and all 2D context properties. 32 | * `initial` : Scopped to initial circle, accept all 2D context properties. 33 | 34 | Example : 35 | 36 | ```javascript 37 | progress = new CircularProgress({ 38 | lineWidth: 2, 39 | initial: { 40 | strokeStyle: 'gray', 41 | lineWidth: 4 42 | } 43 | }); 44 | 45 | // update options 46 | progress.options.text = { 47 | font: '14px' 48 | }; 49 | ``` 50 | 51 | ### update( value ) 52 | 53 | Update percent and draw the canvas, `value` must be a float between 0 and 100. 54 | 55 | ## License 56 | 57 | MIT 58 | -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "circular-progress", 3 | "description": "A JavaScript circular progress widget, dependency-free and configurable.", 4 | "author": "Bergé Greg ", 5 | "version": "0.2.3", 6 | "main": "circular-progress.js", 7 | "ignore": [ 8 | ".gitignore", 9 | "Gruntfile.js", 10 | "package.json", 11 | "test" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /circular-progress.js: -------------------------------------------------------------------------------- 1 | /*! circular-progress - v0.2.3 - https://github.com/neoziro/circular-progress - © 2016 Greg Bergé MIT License */ 2 | 3 | (function () { 4 | 5 | // List of 2D context properties 6 | var ctxProperties = ['fillStyle', 'font', 'globalAlpha', 'globalCompositeOperation', 7 | 'lineCap', 'lineDashOffset', 'lineJoin', 'lineWidth', 8 | 'miterLimit', 'shadowBlur', 'shadowColor', 'shadowOffsetX', 9 | 'shadowOffsetY', 'strokeStyle', 'textAlign', 'textBaseLine']; 10 | 11 | // Autoscale function from https://github.com/component/autoscale-canvas 12 | var autoscale = function (canvas) { 13 | var ctx = canvas.getContext('2d'), 14 | ratio = window.devicePixelRatio || 1; 15 | 16 | if (1 !== ratio) { 17 | canvas.style.width = canvas.width + 'px'; 18 | canvas.style.height = canvas.height + 'px'; 19 | canvas.width *= ratio; 20 | canvas.height *= ratio; 21 | ctx.scale(ratio, ratio); 22 | } 23 | 24 | return canvas; 25 | }; 26 | 27 | // Utility function to extend a 2D context with some options 28 | var extendCtx = function (ctx, options) { 29 | for (var i in options) { 30 | if (ctxProperties.indexOf(i) === -1) continue; 31 | 32 | ctx[i] = options[i]; 33 | } 34 | }; 35 | 36 | // Main CircularProgress object exposes on global context 37 | var CircularProgress = this.CircularProgress = function (options) { 38 | var ctx, i, property; 39 | 40 | options = options || {}; 41 | this.el = document.createElement('canvas'); 42 | 43 | this.options = options; 44 | 45 | options.text = options.text || {}; 46 | options.text.value = options.text.value || null; 47 | 48 | ctx = this.el.getContext('2d'); 49 | 50 | for (i in ctxProperties) { 51 | property = ctxProperties[i]; 52 | options[property]= typeof options[property] !== 'undefined' ? options[property] : ctx[property]; 53 | } 54 | 55 | if (options.radius) this.radius(options.radius); 56 | }; 57 | 58 | // Update with a new `percent` value and redraw the canvas 59 | CircularProgress.prototype.update = function (value) { 60 | this._percent = value; 61 | this.draw(); 62 | return this; 63 | }; 64 | 65 | // Specify a new `radius` for the circle 66 | CircularProgress.prototype.radius = function (value) { 67 | var size = value * 2; 68 | this.el.width = size; 69 | this.el.height = size; 70 | autoscale(this.el); 71 | return this; 72 | }; 73 | 74 | // Draw the canvas 75 | CircularProgress.prototype.draw = function () { 76 | var tw, text, fontSize, 77 | options = this.options, 78 | ctx = this.el.getContext('2d'), 79 | percent = Math.min(this._percent, 100), 80 | ratio = window.devicePixelRatio || 1, 81 | angle = Math.PI * 2 * percent / 100, 82 | size = this.el.width / ratio, 83 | half = size / 2, 84 | x = half, 85 | y = half; 86 | 87 | ctx.clearRect(0, 0, size, size); 88 | 89 | // Initial circle 90 | if (options.initial) { 91 | extendCtx(ctx, options); 92 | extendCtx(ctx, options.initial); 93 | 94 | ctx.beginPath(); 95 | ctx.arc(x, y, half - ctx.lineWidth, 0, 2 * Math.PI, false); 96 | ctx.stroke(); 97 | } 98 | 99 | // Progress circle 100 | extendCtx(ctx, options); 101 | 102 | ctx.beginPath(); 103 | ctx.arc(x, y, half - ctx.lineWidth, 0, angle, false); 104 | ctx.stroke(); 105 | 106 | // Text 107 | if (options.text) { 108 | extendCtx(ctx, options); 109 | extendCtx(ctx, options.text); 110 | } 111 | 112 | text = options.text.value === null ? (percent | 0) + '%' : options.text.value; 113 | tw = ctx.measureText(text).width; 114 | fontSize = ctx.font.match(/(\d+)px/); 115 | fontSize = fontSize ? fontSize[1] : 0; 116 | 117 | ctx.fillText(text, x - tw / 2 + 1, y + fontSize / 2 - 1); 118 | 119 | return this; 120 | }; 121 | 122 | }).call(this); 123 | -------------------------------------------------------------------------------- /circular-progress.min.js: -------------------------------------------------------------------------------- 1 | /*! circular-progress - v0.2.3 - https://github.com/neoziro/circular-progress - © 2016 Greg Bergé MIT License */ 2 | (function(){var a=["fillStyle","font","globalAlpha","globalCompositeOperation","lineCap","lineDashOffset","lineJoin","lineWidth","miterLimit","shadowBlur","shadowColor","shadowOffsetX","shadowOffsetY","strokeStyle","textAlign","textBaseLine"],b=function(a){var b=a.getContext("2d"),c=window.devicePixelRatio||1;return 1!==c&&(a.style.width=a.width+"px",a.style.height=a.height+"px",a.width*=c,a.height*=c,b.scale(c,c)),a},c=function(b,c){for(var d in c)-1!==a.indexOf(d)&&(b[d]=c[d])},d=this.CircularProgress=function(b){var c,d,e;b=b||{},this.el=document.createElement("canvas"),this.options=b,b.text=b.text||{},b.text.value=b.text.value||null,c=this.el.getContext("2d");for(d in a)e=a[d],b[e]="undefined"!=typeof b[e]?b[e]:c[e];b.radius&&this.radius(b.radius)};d.prototype.update=function(a){return this._percent=a,this.draw(),this},d.prototype.radius=function(a){var c=2*a;return this.el.width=c,this.el.height=c,b(this.el),this},d.prototype.draw=function(){var a,b,d,e=this.options,f=this.el.getContext("2d"),g=Math.min(this._percent,100),h=window.devicePixelRatio||1,i=2*Math.PI*g/100,j=this.el.width/h,k=j/2,l=k,m=k;return f.clearRect(0,0,j,j),e.initial&&(c(f,e),c(f,e.initial),f.beginPath(),f.arc(l,m,k-f.lineWidth,0,2*Math.PI,!1),f.stroke()),c(f,e),f.beginPath(),f.arc(l,m,k-f.lineWidth,0,i,!1),f.stroke(),e.text&&(c(f,e),c(f,e.text)),b=null===e.text.value?(0|g)+"%":e.text.value,a=f.measureText(b).width,d=f.font.match(/(\d+)px/),d=d?d[1]:0,f.fillText(b,l-a/2+1,m+d/2-1),this}}).call(this); 3 | //# sourceMappingURL=circular-progress.min.map -------------------------------------------------------------------------------- /circular-progress.min.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"circular-progress.min.js","sources":["circular-progress.js"],"names":["ctxProperties","autoscale","canvas","ctx","getContext","ratio","window","devicePixelRatio","style","width","height","scale","extendCtx","options","i","indexOf","CircularProgress","this","property","el","document","createElement","text","value","radius","prototype","update","_percent","draw","size","tw","fontSize","percent","Math","min","angle","PI","half","x","y","clearRect","initial","beginPath","arc","lineWidth","stroke","measureText","font","match","fillText","call"],"mappings":";CAEA,WAGE,GAAIA,IAAiB,YAAa,OAAQ,cAAe,2BACnD,UAAW,iBAAkB,WAAY,YACzC,aAAc,aAAc,cAAe,gBAC3C,gBAAiB,cAAe,YAAa,gBAG/CC,EAAY,SAAUC,GACxB,GAAIC,GAAMD,EAAOE,WAAW,MAC5BC,EAAQC,OAAOC,kBAAoB,CAUnC,OARI,KAAMF,IACRH,EAAOM,MAAMC,MAAQP,EAAOO,MAAQ,KACpCP,EAAOM,MAAME,OAASR,EAAOQ,OAAS,KACtCR,EAAOO,OAASJ,EAChBH,EAAOQ,QAAUL,EACjBF,EAAIQ,MAAMN,EAAOA,IAGZH,GAILU,EAAY,SAAUT,EAAKU,GAC7B,IAAK,GAAIC,KAAKD,GACqB,KAA7Bb,EAAce,QAAQD,KAE1BX,EAAIW,GAAKD,EAAQC,KAKjBE,EAAmBC,KAAKD,iBAAmB,SAAUH,GACvD,GAAIV,GAAKW,EAAGI,CAEZL,GAAUA,MACVI,KAAKE,GAAKC,SAASC,cAAc,UAEjCJ,KAAKJ,QAAUA,EAEfA,EAAQS,KAAOT,EAAQS,SACvBT,EAAQS,KAAKC,MAAQV,EAAQS,KAAKC,OAAS,KAE3CpB,EAAMc,KAAKE,GAAGf,WAAW,KAEzB,KAAKU,IAAKd,GACRkB,EAAWlB,EAAcc,GACzBD,EAAQK,GAAwC,mBAAtBL,GAAQK,GAA4BL,EAAQK,GAAYf,EAAIe,EAGpFL,GAAQW,QAAQP,KAAKO,OAAOX,EAAQW,QAI1CR,GAAiBS,UAAUC,OAAS,SAAUH,GAG5C,MAFAN,MAAKU,SAAWJ,EAChBN,KAAKW,OACEX,MAITD,EAAiBS,UAAUD,OAAS,SAAUD,GAC5C,GAAIM,GAAe,EAARN,CAIX,OAHAN,MAAKE,GAAGV,MAAQoB,EAChBZ,KAAKE,GAAGT,OAASmB,EACjB5B,EAAUgB,KAAKE,IACRF,MAITD,EAAiBS,UAAUG,KAAO,WAChC,GAAIE,GAAIR,EAAMS,EACVlB,EAAUI,KAAKJ,QACfV,EAAMc,KAAKE,GAAGf,WAAW,MACzB4B,EAAUC,KAAKC,IAAIjB,KAAKU,SAAU,KAClCtB,EAAQC,OAAOC,kBAAoB,EACnC4B,EAAkB,EAAVF,KAAKG,GAASJ,EAAU,IAChCH,EAAOZ,KAAKE,GAAGV,MAAQJ,EACvBgC,EAAOR,EAAO,EACdS,EAAID,EACJE,EAAIF,CAkCR,OAhCAlC,GAAIqC,UAAU,EAAG,EAAGX,EAAMA,GAGtBhB,EAAQ4B,UACV7B,EAAUT,EAAKU,GACfD,EAAUT,EAAKU,EAAQ4B,SAEvBtC,EAAIuC,YACJvC,EAAIwC,IAAIL,EAAGC,EAAGF,EAAOlC,EAAIyC,UAAW,EAAG,EAAIX,KAAKG,IAAI,GACpDjC,EAAI0C,UAINjC,EAAUT,EAAKU,GAEfV,EAAIuC,YACJvC,EAAIwC,IAAIL,EAAGC,EAAGF,EAAOlC,EAAIyC,UAAW,EAAGT,GAAO,GAC9ChC,EAAI0C,SAGAhC,EAAQS,OACVV,EAAUT,EAAKU,GACfD,EAAUT,EAAKU,EAAQS,OAGzBA,EAA8B,OAAvBT,EAAQS,KAAKC,OAA4B,EAAVS,GAAe,IAAMnB,EAAQS,KAAKC,MACxEO,EAAK3B,EAAI2C,YAAYxB,GAAMb,MAC3BsB,EAAW5B,EAAI4C,KAAKC,MAAM,WAC1BjB,EAAWA,EAAWA,EAAS,GAAK,EAEpC5B,EAAI8C,SAAS3B,EAAMgB,EAAIR,EAAK,EAAI,EAAGS,EAAIR,EAAW,EAAI,GAE/Cd,QAGRiC,KAAKjC"} -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "circular-progress", 3 | "description": "A JavaScript circular progress widget, dependency-free and configurable.", 4 | "author": "Bergé Greg ", 5 | "version": "0.2.3", 6 | "devDependencies": { 7 | "grunt": "~0.4.1", 8 | "grunt-contrib-uglify": "~0.2.0" 9 | }, 10 | "files": [ 11 | "circular-progress.js", 12 | "circular-progress.min.js", 13 | "circular-progress.min.map", 14 | "LICENSE", 15 | "README.md", 16 | "package.json" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /test/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Circular Progress test 5 | 6 | 7 | 8 | 9 | 83 | 84 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | abbrev@1: 6 | version "1.0.9" 7 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" 8 | 9 | amdefine@>=0.0.4: 10 | version "1.0.1" 11 | resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" 12 | 13 | "argparse@~ 0.1.11": 14 | version "0.1.16" 15 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-0.1.16.tgz#cfd01e0fbba3d6caed049fbd758d40f65196f57c" 16 | dependencies: 17 | underscore "~1.7.0" 18 | underscore.string "~2.4.0" 19 | 20 | async@~0.1.22: 21 | version "0.1.22" 22 | resolved "https://registry.yarnpkg.com/async/-/async-0.1.22.tgz#0fc1aaa088a0e3ef0ebe2d8831bab0dcf8845061" 23 | 24 | async@~0.2.6: 25 | version "0.2.10" 26 | resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" 27 | 28 | camelcase@^1.0.2: 29 | version "1.2.1" 30 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" 31 | 32 | coffee-script@~1.3.3: 33 | version "1.3.3" 34 | resolved "https://registry.yarnpkg.com/coffee-script/-/coffee-script-1.3.3.tgz#150d6b4cb522894369efed6a2101c20bc7f4a4f4" 35 | 36 | colors@~0.6.2: 37 | version "0.6.2" 38 | resolved "https://registry.yarnpkg.com/colors/-/colors-0.6.2.tgz#2423fe6678ac0c5dae8852e5d0e5be08c997abcc" 39 | 40 | dateformat@1.0.2-1.2.3: 41 | version "1.0.2-1.2.3" 42 | resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.2-1.2.3.tgz#b0220c02de98617433b72851cf47de3df2cdbee9" 43 | 44 | decamelize@^1.0.0: 45 | version "1.2.0" 46 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 47 | 48 | "esprima@~ 1.0.2": 49 | version "1.0.4" 50 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.0.4.tgz#9f557e08fc3b4d26ece9dd34f8fbf476b62585ad" 51 | 52 | eventemitter2@~0.4.13: 53 | version "0.4.14" 54 | resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-0.4.14.tgz#8f61b75cde012b2e9eb284d4545583b5643b61ab" 55 | 56 | exit@~0.1.1: 57 | version "0.1.2" 58 | resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" 59 | 60 | findup-sync@~0.1.2: 61 | version "0.1.3" 62 | resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.1.3.tgz#7f3e7a97b82392c653bf06589bd85190e93c3683" 63 | dependencies: 64 | glob "~3.2.9" 65 | lodash "~2.4.1" 66 | 67 | getobject@~0.1.0: 68 | version "0.1.0" 69 | resolved "https://registry.yarnpkg.com/getobject/-/getobject-0.1.0.tgz#047a449789fa160d018f5486ed91320b6ec7885c" 70 | 71 | glob@~3.1.21: 72 | version "3.1.21" 73 | resolved "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz#d29e0a055dea5138f4d07ed40e8982e83c2066cd" 74 | dependencies: 75 | graceful-fs "~1.2.0" 76 | inherits "1" 77 | minimatch "~0.2.11" 78 | 79 | glob@~3.2.9: 80 | version "3.2.11" 81 | resolved "https://registry.yarnpkg.com/glob/-/glob-3.2.11.tgz#4a973f635b9190f715d10987d5c00fd2815ebe3d" 82 | dependencies: 83 | inherits "2" 84 | minimatch "0.3" 85 | 86 | graceful-fs@~1.2.0: 87 | version "1.2.3" 88 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.2.3.tgz#15a4806a57547cb2d2dbf27f42e89a8c3451b364" 89 | 90 | grunt-contrib-uglify@~0.2.0: 91 | version "0.2.7" 92 | resolved "https://registry.yarnpkg.com/grunt-contrib-uglify/-/grunt-contrib-uglify-0.2.7.tgz#e6bda51e0c40a1459f6cead423c65efd725a1bf7" 93 | dependencies: 94 | grunt-lib-contrib "~0.6.1" 95 | uglify-js "~2.4.0" 96 | 97 | grunt-legacy-log-utils@~0.1.1: 98 | version "0.1.1" 99 | resolved "https://registry.yarnpkg.com/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz#c0706b9dd9064e116f36f23fe4e6b048672c0f7e" 100 | dependencies: 101 | colors "~0.6.2" 102 | lodash "~2.4.1" 103 | underscore.string "~2.3.3" 104 | 105 | grunt-legacy-log@~0.1.0: 106 | version "0.1.3" 107 | resolved "https://registry.yarnpkg.com/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz#ec29426e803021af59029f87d2f9cd7335a05531" 108 | dependencies: 109 | colors "~0.6.2" 110 | grunt-legacy-log-utils "~0.1.1" 111 | hooker "~0.2.3" 112 | lodash "~2.4.1" 113 | underscore.string "~2.3.3" 114 | 115 | grunt-legacy-util@~0.2.0: 116 | version "0.2.0" 117 | resolved "https://registry.yarnpkg.com/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz#93324884dbf7e37a9ff7c026dff451d94a9e554b" 118 | dependencies: 119 | async "~0.1.22" 120 | exit "~0.1.1" 121 | getobject "~0.1.0" 122 | hooker "~0.2.3" 123 | lodash "~0.9.2" 124 | underscore.string "~2.2.1" 125 | which "~1.0.5" 126 | 127 | grunt-lib-contrib@~0.6.1: 128 | version "0.6.1" 129 | resolved "https://registry.yarnpkg.com/grunt-lib-contrib/-/grunt-lib-contrib-0.6.1.tgz#3f56adb7da06e814795ee2415b0ebe5fb8903ebb" 130 | dependencies: 131 | zlib-browserify "0.0.1" 132 | 133 | grunt@~0.4.1: 134 | version "0.4.5" 135 | resolved "https://registry.yarnpkg.com/grunt/-/grunt-0.4.5.tgz#56937cd5194324adff6d207631832a9d6ba4e7f0" 136 | dependencies: 137 | async "~0.1.22" 138 | coffee-script "~1.3.3" 139 | colors "~0.6.2" 140 | dateformat "1.0.2-1.2.3" 141 | eventemitter2 "~0.4.13" 142 | exit "~0.1.1" 143 | findup-sync "~0.1.2" 144 | getobject "~0.1.0" 145 | glob "~3.1.21" 146 | grunt-legacy-log "~0.1.0" 147 | grunt-legacy-util "~0.2.0" 148 | hooker "~0.2.3" 149 | iconv-lite "~0.2.11" 150 | js-yaml "~2.0.5" 151 | lodash "~0.9.2" 152 | minimatch "~0.2.12" 153 | nopt "~1.0.10" 154 | rimraf "~2.2.8" 155 | underscore.string "~2.2.1" 156 | which "~1.0.5" 157 | 158 | hooker@~0.2.3: 159 | version "0.2.3" 160 | resolved "https://registry.yarnpkg.com/hooker/-/hooker-0.2.3.tgz#b834f723cc4a242aa65963459df6d984c5d3d959" 161 | 162 | iconv-lite@~0.2.11: 163 | version "0.2.11" 164 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.2.11.tgz#1ce60a3a57864a292d1321ff4609ca4bb965adc8" 165 | 166 | inherits@1: 167 | version "1.0.2" 168 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b" 169 | 170 | inherits@2: 171 | version "2.0.3" 172 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 173 | 174 | js-yaml@~2.0.5: 175 | version "2.0.5" 176 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-2.0.5.tgz#a25ae6509999e97df278c6719da11bd0687743a8" 177 | dependencies: 178 | argparse "~ 0.1.11" 179 | esprima "~ 1.0.2" 180 | 181 | lodash@~0.9.2: 182 | version "0.9.2" 183 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-0.9.2.tgz#8f3499c5245d346d682e5b0d3b40767e09f1a92c" 184 | 185 | lodash@~2.4.1: 186 | version "2.4.2" 187 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-2.4.2.tgz#fadd834b9683073da179b3eae6d9c0d15053f73e" 188 | 189 | lru-cache@2: 190 | version "2.7.3" 191 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" 192 | 193 | minimatch@0.3: 194 | version "0.3.0" 195 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.3.0.tgz#275d8edaac4f1bb3326472089e7949c8394699dd" 196 | dependencies: 197 | lru-cache "2" 198 | sigmund "~1.0.0" 199 | 200 | minimatch@~0.2.11, minimatch@~0.2.12: 201 | version "0.2.14" 202 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz#c74e780574f63c6f9a090e90efbe6ef53a6a756a" 203 | dependencies: 204 | lru-cache "2" 205 | sigmund "~1.0.0" 206 | 207 | nopt@~1.0.10: 208 | version "1.0.10" 209 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" 210 | dependencies: 211 | abbrev "1" 212 | 213 | rimraf@~2.2.8: 214 | version "2.2.8" 215 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" 216 | 217 | sigmund@~1.0.0: 218 | version "1.0.1" 219 | resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" 220 | 221 | source-map@0.1.34: 222 | version "0.1.34" 223 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.34.tgz#a7cfe89aec7b1682c3b198d0acfb47d7d090566b" 224 | dependencies: 225 | amdefine ">=0.0.4" 226 | 227 | uglify-js@~2.4.0: 228 | version "2.4.24" 229 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.4.24.tgz#fad5755c1e1577658bb06ff9ab6e548c95bebd6e" 230 | dependencies: 231 | async "~0.2.6" 232 | source-map "0.1.34" 233 | uglify-to-browserify "~1.0.0" 234 | yargs "~3.5.4" 235 | 236 | uglify-to-browserify@~1.0.0: 237 | version "1.0.2" 238 | resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" 239 | 240 | underscore.string@~2.2.1: 241 | version "2.2.1" 242 | resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-2.2.1.tgz#d7c0fa2af5d5a1a67f4253daee98132e733f0f19" 243 | 244 | underscore.string@~2.3.3: 245 | version "2.3.3" 246 | resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-2.3.3.tgz#71c08bf6b428b1133f37e78fa3a21c82f7329b0d" 247 | 248 | underscore.string@~2.4.0: 249 | version "2.4.0" 250 | resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-2.4.0.tgz#8cdd8fbac4e2d2ea1e7e2e8097c42f442280f85b" 251 | 252 | underscore@~1.7.0: 253 | version "1.7.0" 254 | resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" 255 | 256 | which@~1.0.5: 257 | version "1.0.9" 258 | resolved "https://registry.yarnpkg.com/which/-/which-1.0.9.tgz#460c1da0f810103d0321a9b633af9e575e64486f" 259 | 260 | window-size@0.1.0: 261 | version "0.1.0" 262 | resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" 263 | 264 | wordwrap@0.0.2: 265 | version "0.0.2" 266 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" 267 | 268 | yargs@~3.5.4: 269 | version "3.5.4" 270 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.5.4.tgz#d8aff8f665e94c34bd259bdebd1bfaf0ddd35361" 271 | dependencies: 272 | camelcase "^1.0.2" 273 | decamelize "^1.0.0" 274 | window-size "0.1.0" 275 | wordwrap "0.0.2" 276 | 277 | zlib-browserify@0.0.1: 278 | version "0.0.1" 279 | resolved "https://registry.yarnpkg.com/zlib-browserify/-/zlib-browserify-0.0.1.tgz#4fa6a45d00dbc15f318a4afa1d9afc0258e176cc" 280 | --------------------------------------------------------------------------------