2014-10-22 19:59:44 -07:00
( function e ( t , n , r ) { function s ( o , u ) { if ( ! n [ o ] ) { if ( ! t [ o ] ) { var a = typeof require == "function" && require ; if ( ! u && a ) return a ( o , ! 0 ) ; if ( i ) return i ( o , ! 0 ) ; var f = new Error ( "Cannot find module '" + o + "'" ) ; throw f . code = "MODULE_NOT_FOUND" , f } var l = n [ o ] = { exports : { } } ; t [ o ] [ 0 ] . call ( l . exports , function ( e ) { var n = t [ o ] [ 1 ] [ e ] ; return s ( n ? n : e ) } , l , l . exports , e , t , n , r ) } return n [ o ] . exports } var i = typeof require == "function" && require ; for ( var o = 0 ; o < r . length ; o ++ ) s ( r [ o ] ) ; return s } ) ( { "/home/radek/dev/burnchart.io/node_modules/browserify/node_modules/process/browser.js" : [ function ( require , module , exports ) {
// shim for using process in browser
var process = module . exports = { } ;
process . nextTick = ( function ( ) {
var canSetImmediate = typeof window !== 'undefined'
&& window . setImmediate ;
var canMutationObserver = typeof window !== 'undefined'
&& window . MutationObserver ;
var canPost = typeof window !== 'undefined'
&& window . postMessage && window . addEventListener
;
if ( canSetImmediate ) {
return function ( f ) { return window . setImmediate ( f ) } ;
}
var queue = [ ] ;
if ( canMutationObserver ) {
var hiddenDiv = document . createElement ( "div" ) ;
var observer = new MutationObserver ( function ( ) {
var queueList = queue . slice ( ) ;
queue . length = 0 ;
queueList . forEach ( function ( fn ) {
fn ( ) ;
} ) ;
} ) ;
observer . observe ( hiddenDiv , { attributes : true } ) ;
return function nextTick ( fn ) {
if ( ! queue . length ) {
hiddenDiv . setAttribute ( 'yes' , 'no' ) ;
}
queue . push ( fn ) ;
} ;
}
if ( canPost ) {
window . addEventListener ( 'message' , function ( ev ) {
var source = ev . source ;
if ( ( source === window || source === null ) && ev . data === 'process-tick' ) {
ev . stopPropagation ( ) ;
if ( queue . length > 0 ) {
var fn = queue . shift ( ) ;
fn ( ) ;
}
}
} , true ) ;
return function nextTick ( fn ) {
queue . push ( fn ) ;
window . postMessage ( 'process-tick' , '*' ) ;
} ;
}
return function nextTick ( fn ) {
setTimeout ( fn , 0 ) ;
} ;
} ) ( ) ;
process . title = 'browser' ;
process . browser = true ;
process . env = { } ;
process . argv = [ ] ;
function noop ( ) { }
process . on = noop ;
process . addListener = noop ;
process . once = noop ;
process . off = noop ;
process . removeListener = noop ;
process . removeAllListeners = noop ;
process . emit = noop ;
process . binding = function ( name ) {
throw new Error ( 'process.binding is not supported' ) ;
} ;
// TODO(shtylman)
process . cwd = function ( ) { return '/' } ;
process . chdir = function ( dir ) {
throw new Error ( 'process.chdir is not supported' ) ;
} ;
} , { } ] , "/home/radek/dev/burnchart.io/src/app.coffee" : [ function ( require , module , exports ) {
2014-10-18 16:57:16 -07:00
var Header , Notify , Ractive , app , router ;
Ractive = require ( './modules/vendor.coffee' ) . Ractive ;
require ( './utils/mixins.coffee' ) ;
require ( './models/projects.coffee' ) ;
Header = require ( './views/header.coffee' ) ;
Notify = require ( './views/notify.coffee' ) ;
router = require ( './modules/router.coffee' ) ;
app = new Ractive ( {
'template' : require ( './templates/app.html' ) ,
'el' : 'body' ,
'components' : {
Header : Header ,
Notify : Notify
} ,
onrender : function ( ) {
return router . init ( '/' ) ;
}
} ) ;
2014-10-21 20:16:42 -07:00
} , { "./models/projects.coffee" : "/home/radek/dev/burnchart.io/src/models/projects.coffee" , "./modules/router.coffee" : "/home/radek/dev/burnchart.io/src/modules/router.coffee" , "./modules/vendor.coffee" : "/home/radek/dev/burnchart.io/src/modules/vendor.coffee" , "./templates/app.html" : "/home/radek/dev/burnchart.io/src/templates/app.html" , "./utils/mixins.coffee" : "/home/radek/dev/burnchart.io/src/utils/mixins.coffee" , "./views/header.coffee" : "/home/radek/dev/burnchart.io/src/views/header.coffee" , "./views/notify.coffee" : "/home/radek/dev/burnchart.io/src/views/notify.coffee" } ] , "/home/radek/dev/burnchart.io/src/models/config.coffee" : [ function ( require , module , exports ) {
2014-10-18 16:57:16 -07:00
var Model ;
Model = require ( '../utils/model.coffee' ) ;
module . exports = new Model ( {
'name' : 'models/config' ,
"data" : {
"firebase" : "burnchart" ,
"provider" : "github" ,
"fields" : {
"milestone" : [ "closed_issues" , "created_at" , "description" , "due_on" , "number" , "open_issues" , "title" , "updated_at" ]
} ,
"chart" : {
"off_days" : [ ] ,
"datetime" : /^(\d{4}-\d{2}-\d{2})T(.*)/ ,
"size_label" : /^size (\d+)$/ ,
"location" : /^#!((\/[^\/]+){2,3})$/ ,
"points" : 'ONE_SIZE'
}
}
} ) ;
2014-10-21 20:16:42 -07:00
} , { "../utils/model.coffee" : "/home/radek/dev/burnchart.io/src/utils/model.coffee" } ] , "/home/radek/dev/burnchart.io/src/models/firebase.coffee" : [ function ( require , module , exports ) {
2014-10-18 16:57:16 -07:00
var Firebase , FirebaseSimpleLogin , Model , config , user , _ref ;
_ref = require ( '../modules/vendor.coffee' ) , Firebase = _ref . Firebase , FirebaseSimpleLogin = _ref . FirebaseSimpleLogin ;
Model = require ( '../utils/model.coffee' ) ;
user = require ( './user.coffee' ) ;
config = require ( './config.coffee' ) ;
module . exports = new Model ( {
'name' : 'models/firebase' ,
auth : function ( ) {
throw 'Not overriden' ;
} ,
login : function ( cb ) {
return this . auth . login ( config . data . provider , {
'rememberMe' : true ,
2014-10-22 19:59:44 -07:00
'scope' : 'private_repo'
2014-10-18 16:57:16 -07:00
} ) ;
} ,
logout : function ( ) {
var _ref1 ;
if ( ( _ref1 = this . auth ) != null ) {
_ref1 . logout ;
}
return user . reset ( ) ;
} ,
onrender : function ( ) {
var client ;
this . set ( 'client' , client = new Firebase ( "https://" + config . data . firebase + ".firebaseio.com" ) ) ;
return this . auth = new FirebaseSimpleLogin ( client , function ( err , obj ) {
if ( err ) {
throw err ;
}
if ( obj ) {
user . set ( obj ) ;
}
return user . set ( 'ready' , true ) ;
} ) ;
}
} ) ;
2014-10-21 20:16:42 -07:00
} , { "../modules/vendor.coffee" : "/home/radek/dev/burnchart.io/src/modules/vendor.coffee" , "../utils/model.coffee" : "/home/radek/dev/burnchart.io/src/utils/model.coffee" , "./config.coffee" : "/home/radek/dev/burnchart.io/src/models/config.coffee" , "./user.coffee" : "/home/radek/dev/burnchart.io/src/models/user.coffee" } ] , "/home/radek/dev/burnchart.io/src/models/projects.coffee" : [ function ( require , module , exports ) {
2014-10-22 19:59:44 -07:00
var Model , config , date , lscache , mediator , semver , sortedIndexCmp , stats , user , _ , _ref ,
_ _slice = [ ] . slice ;
2014-10-18 16:57:16 -07:00
2014-10-22 19:59:44 -07:00
_ref = require ( '../modules/vendor.coffee' ) , _ = _ref . _ , lscache = _ref . lscache , sortedIndexCmp = _ref . sortedIndexCmp , semver = _ref . semver ;
2014-10-18 16:57:16 -07:00
config = require ( '../models/config.coffee' ) ;
mediator = require ( '../modules/mediator.coffee' ) ;
2014-10-20 19:51:15 -07:00
stats = require ( '../modules/stats.coffee' ) ;
2014-10-18 16:57:16 -07:00
Model = require ( '../utils/model.coffee' ) ;
date = require ( '../utils/date.coffee' ) ;
user = require ( './user.coffee' ) ;
module . exports = new Model ( {
'name' : 'models/projects' ,
2014-10-20 19:51:15 -07:00
'data' : {
2014-10-22 21:33:03 -07:00
'sortBy' : 'priority' ,
'sortFns' : [ 'progress' , 'priority' , 'name' ]
2014-10-20 19:51:15 -07:00
} ,
2014-10-20 20:25:48 -07:00
comparator : function ( ) {
2014-10-21 20:46:15 -07:00
var deIdx , defaults , list , sortBy , _ref1 ;
2014-10-21 20:16:42 -07:00
_ref1 = this . data , list = _ref1 . list , sortBy = _ref1 . sortBy ;
2014-10-21 19:36:04 -07:00
deIdx = ( function ( _this ) {
return function ( fn ) {
2014-10-22 19:59:44 -07:00
return function ( ) {
var i , j , rest , _arg ;
_arg = arguments [ 0 ] , rest = 2 <= arguments . length ? _ _slice . call ( arguments , 1 ) : [ ] ;
2014-10-21 19:36:04 -07:00
i = _arg [ 0 ] , j = _arg [ 1 ] ;
2014-10-22 19:59:44 -07:00
return fn . apply ( _this , [ [ list [ i ] , list [ i ] . milestones [ j ] ] ] . concat ( rest ) ) ;
2014-10-21 19:36:04 -07:00
} ;
} ;
} ) ( this ) ;
2014-10-21 20:46:15 -07:00
defaults = function ( arr , hash ) {
var i , item , k , keys , p , ref , v , _i , _len , _results ;
_results = [ ] ;
for ( _i = 0 , _len = arr . length ; _i < _len ; _i ++ ) {
item = arr [ _i ] ;
_results . push ( ( function ( ) {
var _results1 ;
_results1 = [ ] ;
for ( k in hash ) {
v = hash [ k ] ;
ref = item ;
_results1 . push ( ( function ( ) {
var _j , _len1 , _ref2 , _results2 ;
_ref2 = keys = k . split ( '.' ) ;
_results2 = [ ] ;
for ( i = _j = 0 , _len1 = _ref2 . length ; _j < _len1 ; i = ++ _j ) {
p = _ref2 [ i ] ;
if ( i === keys . length - 1 ) {
_results2 . push ( ref [ p ] != null ? ref [ p ] : ref [ p ] = v ) ;
} else {
_results2 . push ( ref = ref [ p ] != null ? ref [ p ] : ref [ p ] = { } ) ;
}
}
return _results2 ;
} ) ( ) ) ;
}
return _results1 ;
} ) ( ) ) ;
}
return _results ;
} ;
2014-10-21 20:16:42 -07:00
switch ( sortBy ) {
2014-10-21 19:36:04 -07:00
case 'progress' :
2014-10-22 19:59:44 -07:00
return deIdx ( function ( _arg , _arg1 ) {
var aM , aP , bM , bP ;
aP = _arg [ 0 ] , aM = _arg [ 1 ] ;
bP = _arg1 [ 0 ] , bM = _arg1 [ 1 ] ;
defaults ( [ aM , bM ] , {
2014-10-21 20:46:15 -07:00
'stats.progress.points' : 0
} ) ;
2014-10-22 19:59:44 -07:00
return aM . stats . progress . points - bM . stats . progress . points ;
2014-10-21 19:36:04 -07:00
} ) ;
case 'priority' :
2014-10-22 19:59:44 -07:00
return deIdx ( function ( _arg , _arg1 ) {
var $a , $b , aM , aP , bM , bP , _ref2 ;
aP = _arg [ 0 ] , aM = _arg [ 1 ] ;
bP = _arg1 [ 0 ] , bM = _arg1 [ 1 ] ;
defaults ( [ aM , bM ] , {
2014-10-21 20:46:15 -07:00
'stats.progress.time' : 0 ,
'stats.days' : 1e3
} ) ;
2014-10-22 19:59:44 -07:00
_ref2 = _ . map ( [ aM , bM ] , function ( _arg2 ) {
2014-10-21 20:46:15 -07:00
var stats ;
2014-10-22 19:59:44 -07:00
stats = _arg2 . stats ;
2014-10-21 20:46:15 -07:00
return ( stats . progress . points - stats . progress . time ) * stats . days ;
} ) , $a = _ref2 [ 0 ] , $b = _ref2 [ 1 ] ;
return $b - $a ;
2014-10-21 20:16:42 -07:00
} ) ;
2014-10-22 19:59:44 -07:00
case 'name' :
return deIdx ( function ( _arg , _arg1 ) {
var aM , aP , bM , bP , name , owner ;
aP = _arg [ 0 ] , aM = _arg [ 1 ] ;
bP = _arg1 [ 0 ] , bM = _arg1 [ 1 ] ;
if ( owner = bP . owner . localeCompare ( aP . owner ) ) {
return owner ;
}
if ( name = bP . name . localeCompare ( aP . name ) ) {
return name ;
}
if ( semver . valid ( bM . title ) && semver . valid ( aM . title ) ) {
return semver . gt ( bM . title , aM . title ) ;
} else {
return bM . title . localeCompare ( aM . title ) ;
}
} ) ;
2014-10-20 20:25:48 -07:00
default :
return function ( ) {
return 0 ;
} ;
}
} ,
2014-10-18 16:57:16 -07:00
find : function ( project ) {
return _ . find ( this . data . list , project ) ;
} ,
exists : function ( ) {
return ! ! this . find . apply ( this , arguments ) ;
} ,
add : function ( project ) {
if ( ! this . exists ( project ) ) {
return this . push ( 'list' , project ) ;
}
} ,
2014-10-20 19:51:15 -07:00
findIndex : function ( _arg ) {
var name , owner ;
owner = _arg . owner , name = _arg . name ;
return _ . findIndex ( this . data . list , {
owner : owner ,
name : name
} ) ;
} ,
2014-10-18 16:57:16 -07:00
addMilestone : function ( project , milestone ) {
2014-10-21 20:16:42 -07:00
var i , j ;
2014-10-20 19:51:15 -07:00
_ . extend ( milestone , {
'stats' : stats ( milestone )
} ) ;
2014-10-21 20:16:42 -07:00
if ( ( i = this . findIndex ( project ) ) < 0 ) {
2014-10-18 16:57:16 -07:00
throw 500 ;
}
2014-10-21 20:16:42 -07:00
if ( project . milestones != null ) {
this . push ( "list." + i + ".milestones" , milestone ) ;
j = this . data . list [ i ] . milestones . length - 1 ;
} else {
this . set ( "list." + i + ".milestones" , [ milestone ] ) ;
j = 0 ;
}
2014-10-22 19:59:44 -07:00
return this . sort ( [ i , j ] , [ project , milestone ] ) ;
2014-10-18 16:57:16 -07:00
} ,
2014-10-20 19:51:15 -07:00
saveError : function ( project , err ) {
var idx ;
if ( ( idx = this . findIndex ( project ) ) > - 1 ) {
if ( project . errors != null ) {
return this . push ( "list." + idx + ".errors" , err ) ;
} else {
return this . set ( "list." + idx + ".errors" , [ err ] ) ;
}
} else {
throw 500 ;
}
} ,
2014-10-18 16:57:16 -07:00
clear : function ( ) {
return this . set ( 'list' , [ ] ) ;
} ,
2014-10-22 19:59:44 -07:00
sort : function ( ref , data ) {
var i , idx , index , j , m , p , _i , _j , _len , _len1 , _ref1 , _ref2 ;
2014-10-20 19:51:15 -07:00
index = this . data . index || [ ] ;
2014-10-22 19:59:44 -07:00
if ( ref ) {
idx = sortedIndexCmp ( index , data , this . comparator ( ) ) ;
2014-10-21 20:16:42 -07:00
index . splice ( idx , 0 , ref ) ;
} else {
_ref1 = this . data . list ;
for ( i = _i = 0 , _len = _ref1 . length ; _i < _len ; i = ++ _i ) {
p = _ref1 [ i ] ;
if ( p . milestones == null ) {
continue ;
}
_ref2 = p . milestones ;
for ( j = _j = 0 , _len1 = _ref2 . length ; _j < _len1 ; j = ++ _j ) {
m = _ref2 [ j ] ;
2014-10-22 21:33:03 -07:00
idx = sortedIndexCmp ( index , [ p , m ] , this . comparator ( ) ) ;
2014-10-21 20:16:42 -07:00
index . splice ( idx , 0 , [ i , j ] ) ;
}
2014-10-20 19:51:15 -07:00
}
}
return this . set ( 'index' , index ) ;
} ,
2014-10-18 16:57:16 -07:00
onconstruct : function ( ) {
mediator . on ( '!projects/add' , _ . bind ( this . add , this ) ) ;
return mediator . on ( '!projects/clear' , _ . bind ( this . clear , this ) ) ;
} ,
onrender : function ( ) {
this . set ( 'list' , lscache . get ( 'projects' ) || [ ] ) ;
2014-10-20 19:51:15 -07:00
this . observe ( 'list' , function ( projects ) {
2014-10-21 20:16:42 -07:00
return lscache . set ( 'projects' , _ . pluckMany ( projects , [ 'owner' , 'name' ] ) ) ;
2014-10-18 16:57:16 -07:00
} , {
'init' : false
} ) ;
2014-10-20 20:25:48 -07:00
return this . observe ( 'sortBy' , function ( ) {
2014-10-22 21:33:03 -07:00
this . set ( 'index' , null ) ;
2014-10-20 19:51:15 -07:00
return this . sort ( ) ;
2014-10-22 19:59:44 -07:00
} , {
'init' : false
2014-10-20 19:51:15 -07:00
} ) ;
2014-10-18 16:57:16 -07:00
}
} ) ;
2014-10-21 20:16:42 -07:00
} , { "../models/config.coffee" : "/home/radek/dev/burnchart.io/src/models/config.coffee" , "../modules/mediator.coffee" : "/home/radek/dev/burnchart.io/src/modules/mediator.coffee" , "../modules/stats.coffee" : "/home/radek/dev/burnchart.io/src/modules/stats.coffee" , "../modules/vendor.coffee" : "/home/radek/dev/burnchart.io/src/modules/vendor.coffee" , "../utils/date.coffee" : "/home/radek/dev/burnchart.io/src/utils/date.coffee" , "../utils/model.coffee" : "/home/radek/dev/burnchart.io/src/utils/model.coffee" , "./user.coffee" : "/home/radek/dev/burnchart.io/src/models/user.coffee" } ] , "/home/radek/dev/burnchart.io/src/models/system.coffee" : [ function ( require , module , exports ) {
2014-10-18 16:57:16 -07:00
var Model , async , counter , mediator , system ;
mediator = require ( '../modules/mediator.coffee' ) ;
Model = require ( '../utils/model.coffee' ) ;
system = new Model ( {
'name' : 'models/system' ,
'data' : {
'loading' : false
}
} ) ;
counter = 0 ;
async = function ( ) {
counter += 1 ;
system . set ( 'loading' , true ) ;
return function ( ) {
counter -= 1 ;
return system . set ( 'loading' , + counter ) ;
} ;
} ;
module . exports = {
system : system ,
async : async
} ;
2014-10-21 20:16:42 -07:00
} , { "../modules/mediator.coffee" : "/home/radek/dev/burnchart.io/src/modules/mediator.coffee" , "../utils/model.coffee" : "/home/radek/dev/burnchart.io/src/utils/model.coffee" } ] , "/home/radek/dev/burnchart.io/src/models/user.coffee" : [ function ( require , module , exports ) {
2014-10-18 16:57:16 -07:00
var Model , mediator ;
mediator = require ( '../modules/mediator.coffee' ) ;
Model = require ( '../utils/model.coffee' ) ;
module . exports = new Model ( {
'name' : 'models/user' ,
'data' : {
'provider' : "local" ,
'id' : "0" ,
'uid' : "local:0" ,
'token' : null
}
} ) ;
2014-10-21 20:16:42 -07:00
} , { "../modules/mediator.coffee" : "/home/radek/dev/burnchart.io/src/modules/mediator.coffee" , "../utils/model.coffee" : "/home/radek/dev/burnchart.io/src/utils/model.coffee" } ] , "/home/radek/dev/burnchart.io/src/modules/chart/axes.coffee" : [ function ( require , module , exports ) {
2014-10-18 16:57:16 -07:00
var d3 ;
d3 = require ( '../vendor.coffee' ) . d3 ;
module . exports = {
horizontal : function ( height , x ) {
return d3 . svg . axis ( ) . scale ( x ) . orient ( "bottom" ) . tickSize ( - height ) . tickFormat ( function ( d ) {
return d . getDate ( ) ;
} ) . tickPadding ( 10 ) ;
} ,
vertical : function ( width , y ) {
return d3 . svg . axis ( ) . scale ( y ) . orient ( "left" ) . tickSize ( - width ) . ticks ( 5 ) . tickPadding ( 10 ) ;
}
} ;
2014-10-21 20:16:42 -07:00
} , { "../vendor.coffee" : "/home/radek/dev/burnchart.io/src/modules/vendor.coffee" } ] , "/home/radek/dev/burnchart.io/src/modules/chart/lines.coffee" : [ function ( require , module , exports ) {
2014-10-18 16:57:16 -07:00
var config , d3 , _ , _ref ,
_ _indexOf = [ ] . indexOf || function ( item ) { for ( var i = 0 , l = this . length ; i < l ; i ++ ) { if ( i in this && this [ i ] === item ) return i ; } return - 1 ; } ;
_ref = require ( '../../modules/vendor.coffee' ) , _ = _ref . _ , d3 = _ref . d3 ;
config = require ( '../../models/config.coffee' ) ;
module . exports = {
actual : function ( issues , created _at , total ) {
var head , max , min , range , rest ;
head = [
{
'date' : new Date ( created _at ) ,
'points' : total
}
] ;
min = + Infinity ;
max = - Infinity ;
rest = _ . map ( issues , function ( issue ) {
var closed _at , size ;
size = issue . size , closed _at = issue . closed _at ;
if ( size < min ) {
min = size ;
}
if ( size > max ) {
max = size ;
}
issue . date = new Date ( closed _at ) ;
issue . points = total -= size ;
return issue ;
} ) ;
range = d3 . scale . linear ( ) . domain ( [ min , max ] ) . range ( [ 5 , 8 ] ) ;
rest = _ . map ( rest , function ( issue ) {
issue . radius = range ( issue . size ) ;
return issue ;
} ) ;
return [ ] . concat ( head , rest ) ;
} ,
ideal : function ( a , b , total ) {
var cutoff , d , days , length , m , now , once , velocity , y , _ref1 , _ref2 ;
if ( b < a ) {
_ref1 = [ a , b ] , b = _ref1 [ 0 ] , a = _ref1 [ 1 ] ;
}
_ref2 = _ . map ( a . match ( config . data . chart . datetime ) [ 1 ] . split ( '-' ) , function ( v ) {
return parseInt ( v ) ;
} ) , y = _ref2 [ 0 ] , m = _ref2 [ 1 ] , d = _ref2 [ 2 ] ;
cutoff = new Date ( b ) ;
days = [ ] ;
length = 0 ;
( once = function ( inc ) {
var day , day _of ;
day = new Date ( y , m - 1 , d + inc ) ;
if ( ! ( day _of = day . getDay ( ) ) ) {
day _of = 7 ;
}
if ( _ _indexOf . call ( config . data . chart . off _days , day _of ) >= 0 ) {
days . push ( {
date : day ,
off _day : true
} ) ;
} else {
length += 1 ;
days . push ( {
date : day
} ) ;
}
if ( ! ( day > cutoff ) ) {
return once ( inc + 1 ) ;
}
} ) ( 0 ) ;
velocity = total / ( length - 1 ) ;
days = _ . map ( days , function ( day , i ) {
day . points = total ;
if ( days [ i ] && ! days [ i ] . off _day ) {
total -= velocity ;
}
return day ;
} ) ;
if ( ( now = new Date ( ) ) > cutoff ) {
days . push ( {
date : now ,
points : 0
} ) ;
}
return days ;
} ,
trend : function ( actual , created _at , due _on ) {
var a , b , b1 , c1 , e , fn , intercept , l , last , slope , start , values ;
if ( ! actual . length ) {
return [ ] ;
}
start = + actual [ 0 ] . date ;
values = _ . map ( actual , function ( _arg ) {
var date , points ;
date = _arg . date , points = _arg . points ;
return [ + date - start , points ] ;
} ) ;
last = actual [ actual . length - 1 ] ;
values . push ( [ + new Date ( ) - start , last . points ] ) ;
b1 = 0 ;
e = 0 ;
c1 = 0 ;
a = ( l = values . length ) * _ . reduce ( values , function ( sum , _arg ) {
var a , b ;
a = _arg [ 0 ] , b = _arg [ 1 ] ;
b1 += a ;
e += b ;
c1 += Math . pow ( a , 2 ) ;
return sum + ( a * b ) ;
} , 0 ) ;
slope = ( a - ( b1 * e ) ) / ( ( l * c1 ) - ( Math . pow ( b1 , 2 ) ) ) ;
intercept = ( e - ( slope * b1 ) ) / l ;
fn = function ( x ) {
return slope * x + intercept ;
} ;
created _at = new Date ( created _at ) ;
due _on = due _on ? new Date ( due _on ) : new Date ( ) ;
a = created _at - start ;
b = due _on - start ;
return [
{
2014-10-20 19:51:15 -07:00
'date' : created _at ,
'points' : fn ( a )
2014-10-18 16:57:16 -07:00
} , {
2014-10-20 19:51:15 -07:00
'date' : due _on ,
'points' : fn ( b )
2014-10-18 16:57:16 -07:00
}
] ;
}
} ;
2014-10-21 20:16:42 -07:00
} , { "../../models/config.coffee" : "/home/radek/dev/burnchart.io/src/models/config.coffee" , "../../modules/vendor.coffee" : "/home/radek/dev/burnchart.io/src/modules/vendor.coffee" } ] , "/home/radek/dev/burnchart.io/src/modules/github/issues.coffee" : [ function ( require , module , exports ) {
2014-10-18 16:57:16 -07:00
var async , config , request , _ , _ref ;
_ref = require ( '../vendor.coffee' ) , _ = _ref . _ , async = _ref . async ;
config = require ( '../../models/config.coffee' ) ;
request = require ( './request.coffee' ) ;
module . exports = {
fetchAll : function ( repo , cb ) {
var calcSize , oneStatus ;
calcSize = function ( list , cb ) {
var issue , size , _i , _len ;
switch ( config . data . chart . points ) {
case 'ONE_SIZE' :
size = list . length ;
for ( _i = 0 , _len = list . length ; _i < _len ; _i ++ ) {
issue = list [ _i ] ;
issue . size = 1 ;
}
return cb ( null , {
list : list ,
size : size
} ) ;
case 'LABELS' :
size = 0 ;
list = _ . filter ( list , function ( issue ) {
var labels ;
if ( ! ( labels = issue . labels ) ) {
return false ;
}
issue . size = _ . reduce ( labels , function ( sum , label ) {
var matches ;
if ( ! ( matches = label . name . match ( config . data . chart . size _label ) ) ) {
return sum ;
}
return sum += parseInt ( matches [ 1 ] ) ;
} , 0 ) ;
size += issue . size ;
return ! ! issue . size ;
} ) ;
return cb ( null , {
list : list ,
size : size
} ) ;
}
} ;
oneStatus = function ( state , cb ) {
var fetchPage , results ;
results = [ ] ;
return ( fetchPage = function ( page ) {
return request . allIssues ( repo , {
state : state ,
page : page
} , function ( err , data ) {
if ( err ) {
return cb ( err ) ;
}
if ( ! data . length ) {
return cb ( null , results ) ;
}
results = results . concat ( _ . sortBy ( data , 'closed_at' ) ) ;
if ( data . length < 100 ) {
return cb ( null , results ) ;
}
return fetchPage ( page + 1 ) ;
} ) ;
} ) ( 1 ) ;
} ;
return async . parallel ( [ _ . partial ( async . waterfall , [ _ . partial ( oneStatus , 'open' ) , calcSize ] ) , _ . partial ( async . waterfall , [ _ . partial ( oneStatus , 'closed' ) , calcSize ] ) ] , function ( err , _arg ) {
var closed , open ;
open = _arg [ 0 ] , closed = _arg [ 1 ] ;
return cb ( err , {
open : open ,
closed : closed
} ) ;
} ) ;
}
} ;
2014-10-21 20:16:42 -07:00
} , { "../../models/config.coffee" : "/home/radek/dev/burnchart.io/src/models/config.coffee" , "../vendor.coffee" : "/home/radek/dev/burnchart.io/src/modules/vendor.coffee" , "./request.coffee" : "/home/radek/dev/burnchart.io/src/modules/github/request.coffee" } ] , "/home/radek/dev/burnchart.io/src/modules/github/milestones.coffee" : [ function ( require , module , exports ) {
2014-10-18 16:57:16 -07:00
var request ;
request = require ( './request.coffee' ) ;
module . exports = {
'fetch' : request . oneMilestone ,
'fetchAll' : request . allMilestones
} ;
2014-10-21 20:16:42 -07:00
} , { "./request.coffee" : "/home/radek/dev/burnchart.io/src/modules/github/request.coffee" } ] , "/home/radek/dev/burnchart.io/src/modules/github/request.coffee" : [ function ( require , module , exports ) {
2014-10-18 16:57:16 -07:00
var SuperAgent , defaults , error , headers , isReady , isValid , ready , request , response , stack , user , _ , _ref ;
_ref = require ( '../vendor.coffee' ) , _ = _ref . _ , SuperAgent = _ref . SuperAgent ;
user = require ( '../../models/user.coffee' ) ;
SuperAgent . parse = {
'application/json' : function ( res ) {
var e ;
try {
return JSON . parse ( res ) ;
} catch ( _error ) {
e = _error ;
return { } ;
}
}
} ;
defaults = {
'github' : {
'host' : 'api.github.com' ,
'protocol' : 'https'
}
} ;
module . exports = {
repo : function ( _arg , cb ) {
var name , owner ;
owner = _arg . owner , name = _arg . name ;
if ( ! isValid ( {
owner : owner ,
name : name
} ) ) {
return cb ( 'Request is malformed' ) ;
}
return ready ( function ( ) {
var data ;
data = _ . defaults ( {
'path' : "/repos/" + owner + "/" + name ,
'headers' : headers ( user . data . accessToken )
} , defaults . github ) ;
return request ( data , cb ) ;
} ) ;
} ,
allMilestones : function ( _arg , cb ) {
var name , owner ;
owner = _arg . owner , name = _arg . name ;
if ( ! isValid ( {
owner : owner ,
name : name
} ) ) {
return cb ( 'Request is malformed' ) ;
}
return ready ( function ( ) {
var data ;
data = _ . defaults ( {
'path' : "/repos/" + owner + "/" + name + "/milestones" ,
'query' : {
'state' : 'open' ,
'sort' : 'due_date' ,
'direction' : 'asc'
} ,
'headers' : headers ( user . data . accessToken )
} , defaults . github ) ;
return request ( data , cb ) ;
} ) ;
} ,
oneMilestone : function ( _arg , cb ) {
var milestone , name , owner ;
owner = _arg . owner , name = _arg . name , milestone = _arg . milestone ;
if ( ! isValid ( {
owner : owner ,
name : name ,
milestone : milestone
} ) ) {
return cb ( 'Request is malformed' ) ;
}
return ready ( function ( ) {
var data ;
data = _ . defaults ( {
'path' : "/repos/" + owner + "/" + name + "/milestones/" + milestone ,
'query' : {
'state' : 'open' ,
'sort' : 'due_date' ,
'direction' : 'asc'
} ,
'headers' : headers ( user . data . accessToken )
} , defaults . github ) ;
return request ( data , cb ) ;
} ) ;
} ,
allIssues : function ( _arg , query , cb ) {
var milestone , name , owner ;
owner = _arg . owner , name = _arg . name , milestone = _arg . milestone ;
if ( ! isValid ( {
owner : owner ,
name : name ,
milestone : milestone
} ) ) {
return cb ( 'Request is malformed' ) ;
}
return ready ( function ( ) {
var data ;
data = _ . defaults ( {
'path' : "/repos/" + owner + "/" + name + "/issues" ,
'query' : _ . extend ( query , {
milestone : milestone ,
'per_page' : '100'
} ) ,
'headers' : headers ( user . data . accessToken )
} , defaults . github ) ;
return request ( data , cb ) ;
} ) ;
}
} ;
request = function ( _arg , cb ) {
var exited , headers , host , k , path , protocol , q , query , req , timeout , v ;
protocol = _arg . protocol , host = _arg . host , path = _arg . path , query = _arg . query , headers = _arg . headers ;
exited = false ;
q = query ? '?' + ( ( function ( ) {
var _results ;
_results = [ ] ;
for ( k in query ) {
v = query [ k ] ;
_results . push ( "" + k + "=" + v ) ;
}
return _results ;
} ) ( ) ) . join ( '&' ) : '' ;
req = SuperAgent . get ( "" + protocol + "://" + host + path + q ) ;
for ( k in headers ) {
v = headers [ k ] ;
req . set ( k , v ) ;
}
timeout = setTimeout ( function ( ) {
exited = true ;
return cb ( 'Request has timed out' ) ;
} , 1e4 ) ;
return req . end ( function ( err , data ) {
if ( exited ) {
return ;
}
exited = true ;
clearTimeout ( timeout ) ;
return response ( err , data , cb ) ;
} ) ;
} ;
response = function ( err , data , cb ) {
var _ref1 ;
if ( err ) {
return cb ( error ( err ) ) ;
}
if ( data . statusType !== 2 ) {
if ( ( data != null ? ( _ref1 = data . body ) != null ? _ref1 . message : void 0 : void 0 ) != null ) {
return cb ( data . body . message ) ;
}
return cb ( data . error . message ) ;
}
return cb ( null , data . body ) ;
} ;
headers = function ( token ) {
var h ;
h = {
'Content-Type' : 'application/json' ,
'Accept' : 'application/vnd.github.v3'
} ;
if ( token != null ) {
h . Authorization = "token " + token ;
}
return h ;
} ;
isValid = function ( obj ) {
var key , rules , val ;
rules = {
'owner' : function ( val ) {
return val != null ;
} ,
'name' : function ( val ) {
return val != null ;
} ,
'milestone' : function ( val ) {
return _ . isInt ( val ) ;
}
} ;
for ( key in obj ) {
val = obj [ key ] ;
if ( key in rules && ! rules [ key ] ( val ) ) {
return false ;
}
}
return true ;
} ;
isReady = user . data . ready ;
stack = [ ] ;
ready = function ( cb ) {
if ( isReady ) {
return cb ( ) ;
} else {
return stack . push ( cb ) ;
}
} ;
user . observe ( 'ready' , function ( val ) {
var _results ;
isReady = val ;
if ( val ) {
_results = [ ] ;
while ( stack . length ) {
_results . push ( stack . shift ( ) ( ) ) ;
}
return _results ;
}
} ) ;
error = function ( err ) {
var message ;
switch ( false ) {
case ! _ . isString ( err ) :
message = err ;
break ;
case ! _ . isArray ( err ) :
message = err [ 1 ] ;
break ;
case ! ( _ . isObject ( err ) && _ . isString ( err . message ) ) :
message = err . message ;
}
if ( ! message ) {
try {
message = JSON . stringify ( err ) ;
} catch ( _error ) {
message = err . toString ( ) ;
}
}
return message ;
} ;
2014-10-21 20:16:42 -07:00
} , { "../../models/user.coffee" : "/home/radek/dev/burnchart.io/src/models/user.coffee" , "../vendor.coffee" : "/home/radek/dev/burnchart.io/src/modules/vendor.coffee" } ] , "/home/radek/dev/burnchart.io/src/modules/mediator.coffee" : [ function ( require , module , exports ) {
2014-10-18 16:57:16 -07:00
var Mediator , Ractive ;
Ractive = require ( './vendor.coffee' ) . Ractive ;
Mediator = Ractive . extend ( { } ) ;
module . exports = new Mediator ( ) ;
2014-10-21 20:16:42 -07:00
} , { "./vendor.coffee" : "/home/radek/dev/burnchart.io/src/modules/vendor.coffee" } ] , "/home/radek/dev/burnchart.io/src/modules/router.coffee" : [ function ( require , module , exports ) {
2014-10-18 16:57:16 -07:00
var addProject , c , director , el , mediator , pages , route , routes , system , view , _ , _ref ,
_ _slice = [ ] . slice ;
_ref = require ( './vendor.coffee' ) , _ = _ref . _ , director = _ref . director ;
mediator = require ( './mediator.coffee' ) ;
system = require ( '../models/system.coffee' ) ;
el = '#page' ;
pages = {
"index" : require ( "../views/pages/index.coffee" ) ,
"milestone" : require ( "../views/pages/milestone.coffee" ) ,
"new" : require ( "../views/pages/new.coffee" ) ,
"project" : require ( "../views/pages/project.coffee" )
} ;
addProject = function ( page , owner , name ) {
return mediator . fire ( '!projects/add' , {
owner : owner ,
name : name
} ) ;
} ;
c = function ( name , fns ) {
var fn , _i , _len , _results ;
if ( fns == null ) {
fns = [ ] ;
}
_results = [ ] ;
for ( _i = 0 , _len = fns . length ; _i < _len ; _i ++ ) {
fn = fns [ _i ] ;
_results . push ( _ . partial ( fn , name ) ) ;
}
return _results ;
} ;
view = null ;
route = function ( ) {
var Page , args , page ;
page = arguments [ 0 ] , args = 2 <= arguments . length ? _ _slice . call ( arguments , 1 ) : [ ] ;
if ( view != null ) {
view . teardown ( ) ;
}
mediator . fire ( '!app/notify/hide' ) ;
Page = pages [ page ] ;
return view = new Page ( {
el : el ,
'data' : {
'route' : args
}
} ) ;
} ;
routes = {
'/' : c ( 'index' , [ route ] ) ,
'/new/project' : c ( 'new' , [ route ] ) ,
'/:owner/:name' : c ( 'project' , [ addProject , route ] ) ,
'/:owner/:name/:milestone' : c ( 'milestone' , [ addProject , route ] ) ,
'/reset' : function ( ) {
mediator . fire ( '!projects/clear' ) ;
return window . location . hash = '#' ;
}
} ;
module . exports = director . Router ( routes ) . configure ( {
'strict' : false ,
notfound : function ( ) {
throw 404 ;
}
} ) ;
2014-10-21 20:16:42 -07:00
} , { "../models/system.coffee" : "/home/radek/dev/burnchart.io/src/models/system.coffee" , "../views/pages/index.coffee" : "/home/radek/dev/burnchart.io/src/views/pages/index.coffee" , "../views/pages/milestone.coffee" : "/home/radek/dev/burnchart.io/src/views/pages/milestone.coffee" , "../views/pages/new.coffee" : "/home/radek/dev/burnchart.io/src/views/pages/new.coffee" , "../views/pages/project.coffee" : "/home/radek/dev/burnchart.io/src/views/pages/project.coffee" , "./mediator.coffee" : "/home/radek/dev/burnchart.io/src/modules/mediator.coffee" , "./vendor.coffee" : "/home/radek/dev/burnchart.io/src/modules/vendor.coffee" } ] , "/home/radek/dev/burnchart.io/src/modules/stats.coffee" : [ function ( require , module , exports ) {
2014-10-20 20:25:48 -07:00
var moment , progress ;
moment = require ( './vendor.coffee' ) . moment ;
2014-10-20 19:51:15 -07:00
progress = function ( a , b ) {
return 100 * ( a / ( b + a ) ) ;
} ;
module . exports = function ( milestone ) {
2014-10-20 20:25:48 -07:00
var a , b , c , days , points , time ;
2014-10-20 19:51:15 -07:00
points = progress ( milestone . issues . closed . size , milestone . issues . open . size ) ;
if ( ! milestone . due _on ) {
return {
'isOnTime' : true ,
'progress' : {
points : points
}
} ;
}
a = + new Date ( milestone . created _at ) ;
b = + ( new Date ) ;
c = + new Date ( milestone . due _on ) ;
time = progress ( b - a , c - b ) ;
2014-10-21 20:46:15 -07:00
days = ( moment ( b ) . diff ( moment ( a ) , 'days' ) ) / 100 ;
2014-10-20 19:51:15 -07:00
return {
2014-10-20 20:25:48 -07:00
'isOnTime' : points > time ,
2014-10-20 19:51:15 -07:00
'progress' : {
points : points ,
time : time
2014-10-20 20:25:48 -07:00
} ,
'days' : days
2014-10-20 19:51:15 -07:00
} ;
} ;
2014-10-21 20:16:42 -07:00
} , { "./vendor.coffee" : "/home/radek/dev/burnchart.io/src/modules/vendor.coffee" } ] , "/home/radek/dev/burnchart.io/src/modules/vendor.coffee" : [ function ( require , module , exports ) {
2014-10-18 16:57:16 -07:00
module . exports = {
'_' : window . _ ,
'Ractive' : window . Ractive ,
'Firebase' : window . Firebase ,
'FirebaseSimpleLogin' : window . FirebaseSimpleLogin ,
'SuperAgent' : window . superagent ,
'async' : window . async ,
'moment' : window . moment ,
'd3' : window . d3 ,
'marked' : window . marked ,
'director' : {
'Router' : window . Router
} ,
2014-10-20 20:25:48 -07:00
'lscache' : window . lscache ,
2014-10-22 19:59:44 -07:00
'sortedIndexCmp' : window . sortedIndex ,
'semver' : require ( 'semver' )
2014-10-18 16:57:16 -07:00
} ;
2014-10-22 19:59:44 -07:00
} , { "semver" : "/home/radek/dev/burnchart.io/vendor/node-semver/semver.js" } ] , "/home/radek/dev/burnchart.io/src/templates/app.html" : [ function ( require , module , exports ) {
2014-10-20 19:51:15 -07:00
module . exports = { "v" : 1 , "t" : [ { "t" : 7 , "e" : "div" , "a" : { "id" : "app" } , "f" : [ { "t" : 7 , "e" : "Notify" } , " " , { "t" : 7 , "e" : "Header" } , " " , { "t" : 7 , "e" : "div" , "a" : { "id" : "page" } , "f" : [ ] } , " " , { "t" : 7 , "e" : "div" , "a" : { "id" : "footer" } , "f" : [ { "t" : 7 , "e" : "div" , "a" : { "class" : "wrap" } , "f" : [ "© 2012-2014 " , { "t" : 7 , "e" : "a" , "a" : { "href" : "http://cloudfi.re" } , "f" : [ "Cloudfire Systems" ] } ] } ] } ] } ] }
2014-10-21 20:16:42 -07:00
} , { } ] , "/home/radek/dev/burnchart.io/src/templates/chart.html" : [ function ( require , module , exports ) {
2014-10-20 19:51:15 -07:00
module . exports = { "v" : 1 , "t" : [ { "t" : 7 , "e" : "div" , "a" : { "id" : "chart" } } ] }
2014-10-21 20:16:42 -07:00
} , { } ] , "/home/radek/dev/burnchart.io/src/templates/header.html" : [ function ( require , module , exports ) {
2014-10-20 19:51:15 -07:00
module . exports = { "v" : 1 , "t" : [ { "t" : 7 , "e" : "div" , "a" : { "id" : "head" } , "f" : [ { "t" : 4 , "n" : 53 , "r" : "user" , "f" : [ { "t" : 4 , "r" : "ready" , "f" : [ { "t" : 7 , "e" : "div" , "a" : { "class" : "right" } , "t1" : "fade" , "f" : [ { "t" : 4 , "r" : "displayName" , "f" : [ { "t" : 2 , "r" : "displayName" } , " logged in" ] } , { "t" : 4 , "n" : 51 , "f" : [ { "t" : 7 , "e" : "a" , "a" : { "class" : "github" } , "v" : { "click" : "!login" } , "f" : [ { "t" : 7 , "e" : "Icons" , "a" : { "icon" : "github" } } , " Sign In" ] } ] , "r" : "displayName" } ] } ] } ] } , " " , { "t" : 7 , "e" : "a" , "a" : { "id" : "icon" , "href" : "#" } , "f" : [ { "t" : 7 , "e" : "Icons" , "a" : { "icon" : [ { "t" : 2 , "r" : "icon" } ] } } ] } , " " , { "t" : 7 , "e" : "ul" , "f" : [ { "t" : 7 , "e" : "li" , "f" : [ { "t" : 7 , "e" : "a" , "a" : { "href" : "#new/project" , "class" : "add" } , "f" : [ { "t" : 7 , "e" : "Icons" , "a" : { "icon" : "plus-circled" } } , " Add a Project" ] } ] } , " " , { "t" : 7 , "e" : "li" , "f" : [ { "t" : 7 , "e" : "a" , "a" : { "href" : "#" , "class" : "faq" } , "f" : [ "FAQ" ] } ] } , " " , { "t" : 7 , "e" : "li" , "f" : [ { "t" : 7 , "e" : "a" , "a" : { "href" : "#reset" } , "f" : [ "DB Reset" ] } ] } , " " , { "t" : 7 , "e" : "li" , "f" : [ { "t" : 7 , "e" : "a" , "a" : { "href" : "#notify" } , "f" : [ "Notify" ] } ] } ] } ] } ] }
2014-10-21 20:16:42 -07:00
} , { } ] , "/home/radek/dev/burnchart.io/src/templates/hero.html" : [ function ( require , module , exports ) {
2014-10-20 19:51:15 -07:00
module . exports = { "v" : 1 , "t" : [ { "t" : 7 , "e" : "div" , "a" : { "id" : "hero" } , "f" : [ { "t" : 7 , "e" : "div" , "a" : { "class" : "content" } , "f" : [ { "t" : 7 , "e" : "Icons" , "a" : { "icon" : "address" } } , " " , { "t" : 7 , "e" : "h2" , "f" : [ "See your project progress" ] } , " " , { "t" : 7 , "e" : "p" , "f" : [ "Not sure where to start? Just add a demo repo to see a chart. There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable." ] } , " " , { "t" : 7 , "e" : "div" , "a" : { "class" : "cta" } , "f" : [ { "t" : 7 , "e" : "a" , "a" : { "href" : "#new/project" , "class" : "primary" } , "f" : [ { "t" : 7 , "e" : "Icons" , "a" : { "icon" : "plus-circled" } } , " Add your project" ] } , " " , { "t" : 7 , "e" : "a" , "a" : { "href" : "#" , "class" : "secondary" } , "f" : [ "Read the Guide" ] } ] } ] } ] } ] }
2014-10-21 20:16:42 -07:00
} , { } ] , "/home/radek/dev/burnchart.io/src/templates/icons.html" : [ function ( require , module , exports ) {
2014-10-20 19:51:15 -07:00
module . exports = { "v" : 1 , "t" : [ { "t" : 4 , "r" : "code" , "f" : [ { "t" : 7 , "e" : "span" , "a" : { "class" : [ "icon " , { "t" : 2 , "r" : "icon" } ] } , "f" : [ { "t" : 3 , "x" : { "r" : [ "code" ] , "s" : "\"&#\"+_0+\";\"" } } ] } ] } ] }
2014-10-21 20:16:42 -07:00
} , { } ] , "/home/radek/dev/burnchart.io/src/templates/notify.html" : [ function ( require , module , exports ) {
2014-10-20 19:51:15 -07:00
module . exports = { "v" : 1 , "t" : [ { "t" : 4 , "r" : "text" , "f" : [ { "t" : 4 , "r" : "system" , "f" : [ { "t" : 7 , "e" : "div" , "a" : { "id" : "notify" , "class" : [ { "t" : 2 , "r" : "type" } , " system" ] , "style" : [ "top:" , { "t" : 2 , "r" : "top" } , "%" ] } , "f" : [ { "t" : 7 , "e" : "Icons" , "a" : { "icon" : [ { "t" : 2 , "r" : "icon" } ] } } , " " , { "t" : 7 , "e" : "p" , "f" : [ { "t" : 2 , "r" : "text" } ] } ] } ] } , { "t" : 4 , "n" : 51 , "f" : [ { "t" : 7 , "e" : "div" , "a" : { "id" : "notify" , "class" : [ { "t" : 2 , "r" : "type" } ] , "style" : [ "top:" , { "t" : 2 , "x" : { "r" : [ "top" ] , "s" : "-_0" } } , "px" ] } , "f" : [ { "t" : 7 , "e" : "span" , "a" : { "class" : "close" } , "v" : { "click" : "close" } } , " " , { "t" : 7 , "e" : "Icons" , "a" : { "icon" : [ { "t" : 2 , "r" : "icon" } ] } } , " " , { "t" : 7 , "e" : "p" , "f" : [ { "t" : 2 , "r" : "text" } ] } ] } ] , "r" : "system" } ] } ] }
2014-10-21 20:16:42 -07:00
} , { } ] , "/home/radek/dev/burnchart.io/src/templates/pages/index.html" : [ function ( require , module , exports ) {
2014-10-20 19:51:15 -07:00
module . exports = { "v" : 1 , "t" : [ { "t" : 7 , "e" : "div" , "a" : { "id" : "content" , "class" : "wrap" } , "f" : [ { "t" : 4 , "n" : 50 , "r" : "projects.list" , "f" : [ { "t" : 4 , "r" : "ready" , "f" : [ { "t" : 7 , "e" : "div" , "t1" : "fade" , "f" : [ { "t" : 7 , "e" : "Projects" , "a" : { "projects" : [ { "t" : 2 , "r" : "projects" } ] } } ] } ] } ] } , { "t" : 4 , "n" : 51 , "f" : [ { "t" : 7 , "e" : "Hero" } ] , "r" : "projects.list" } ] } ] }
2014-10-21 20:16:42 -07:00
} , { } ] , "/home/radek/dev/burnchart.io/src/templates/pages/milestone.html" : [ function ( require , module , exports ) {
2014-10-20 19:51:15 -07:00
module . exports = { "v" : 1 , "t" : [ { "t" : 4 , "r" : "ready" , "f" : [ { "t" : 7 , "e" : "div" , "t1" : "fade" , "f" : [ { "t" : 7 , "e" : "div" , "a" : { "id" : "title" } , "f" : [ { "t" : 7 , "e" : "div" , "a" : { "class" : "wrap" } , "f" : [ { "t" : 7 , "e" : "h2" , "a" : { "class" : "title" } , "f" : [ { "t" : 2 , "x" : { "r" : [ "format" , "milestone.title" ] , "s" : "_0.title(_1)" } } ] } , " " , { "t" : 7 , "e" : "span" , "a" : { "class" : "sub" } , "f" : [ { "t" : 3 , "x" : { "r" : [ "format" , "milestone.due_on" ] , "s" : "_0.due(_1)" } } ] } , " " , { "t" : 7 , "e" : "p" , "a" : { "class" : "description" } , "f" : [ { "t" : 3 , "x" : { "r" : [ "format" , "milestone.description" ] , "s" : "_0.markdown(_1)" } } ] } ] } ] } , " " , { "t" : 7 , "e" : "div" , "a" : { "id" : "content" , "class" : "wrap" } , "f" : [ { "t" : 7 , "e" : "Chart" , "a" : { "milestone" : [ { "t" : 2 , "r" : "milestone" } ] } } ] } ] } ] } ] }
2014-10-21 20:16:42 -07:00
} , { } ] , "/home/radek/dev/burnchart.io/src/templates/pages/new.html" : [ function ( require , module , exports ) {
2014-10-20 19:51:15 -07:00
module . exports = { "v" : 1 , "t" : [ { "t" : 7 , "e" : "div" , "a" : { "id" : "content" , "class" : "wrap" } , "f" : [ { "t" : 7 , "e" : "div" , "a" : { "id" : "add" } , "f" : [ { "t" : 7 , "e" : "div" , "a" : { "class" : "header" } , "f" : [ { "t" : 7 , "e" : "h2" , "f" : [ "Add a Project" ] } , " " , { "t" : 7 , "e" : "p" , "f" : [ "Type in the name of the repository as you would normally. If you'd like to add a private GitHub project, " , { "t" : 7 , "e" : "a" , "a" : { "href" : "#" } , "f" : [ "Sign In" ] } , " first." ] } ] } , " " , { "t" : 7 , "e" : "div" , "a" : { "class" : "form" } , "f" : [ { "t" : 7 , "e" : "table" , "f" : [ { "t" : 7 , "e" : "tr" , "f" : [ { "t" : 7 , "e" : "td" , "f" : [ { "t" : 7 , "e" : "input" , "a" : { "type" : "text" , "placeholder" : "user/repo" , "autocomplete" : "off" , "value" : [ { "t" : 2 , "r" : "value" } ] } , "v" : { "keyup" : { "n" : "submit" , "d" : [ { "t" : 2 , "r" : "value" } ] } } } ] } , " " , { "t" : 7 , "e" : "td" , "f" : [ { "t" : 7 , "e" : "a" , "v" : { "click" : { "n" : "submit" , "d" : [ { "t" : 2 , "r" : "value" } ] } } , "f" : [ "Add" ] } ] } ] } ] } ] } ] } ] } ] }
2014-10-21 20:16:42 -07:00
} , { } ] , "/home/radek/dev/burnchart.io/src/templates/pages/project.html" : [ function ( require , module , exports ) {
2014-10-20 19:51:15 -07:00
module . exports = { "v" : 1 , "t" : [ { "t" : 4 , "r" : "ready" , "f" : [ { "t" : 7 , "e" : "div" , "t1" : "fade" , "f" : [ { "t" : 7 , "e" : "div" , "a" : { "id" : "title" } , "f" : [ { "t" : 7 , "e" : "div" , "a" : { "class" : "wrap" } , "f" : [ { "t" : 7 , "e" : "h2" , "a" : { "class" : "title" } , "f" : [ { "t" : 2 , "x" : { "r" : [ "route" ] , "s" : "_0.join(\"/\")" } } ] } ] } ] } , " " , { "t" : 7 , "e" : "div" , "a" : { "id" : "content" , "class" : "wrap" } , "f" : [ { "t" : 7 , "e" : "Milestones" , "a" : { "project" : [ { "t" : 2 , "r" : "project" } ] } } ] } ] } ] } ] }
2014-10-21 20:16:42 -07:00
} , { } ] , "/home/radek/dev/burnchart.io/src/templates/tables/milestones.html" : [ function ( require , module , exports ) {
2014-10-22 21:33:03 -07:00
module . exports = { "v" : 1 , "t" : [ { "t" : 7 , "e" : "div" , "a" : { "id" : "projects" } , "f" : [ { "t" : 7 , "e" : "div" , "a" : { "class" : "header" } , "f" : [ { "t" : 7 , "e" : "a" , "a" : { "class" : "sort" } , "v" : { "click" : "sortBy" } , "f" : [ { "t" : 7 , "e" : "Icons" , "a" : { "icon" : "sort-alphabet" } } , " Sorted by " , { "t" : 2 , "r" : "projects.sortBy" } ] } , " " , { "t" : 7 , "e" : "h2" , "f" : [ "Milestones" ] } ] } , " " , { "t" : 7 , "e" : "table" , "f" : [ { "t" : 4 , "r" : "projects.index" , "f" : [ { "t" : 4 , "x" : { "r" : [ "." ] , "s" : "{index:_0}" } , "f" : [ { "t" : 4 , "x" : { "r" : [ "index.0" , "projects.list" ] , "s" : "{p:_1[_0]}" } , "f" : [ { "t" : 4 , "n" : 50 , "x" : { "r" : [ "p.owner" , "project.owner" , "p.name" , "project.name" ] , "s" : "_0==_1&&_2==_3" } , "f" : [ { "t" : 4 , "x" : { "r" : [ "index.1" , "project.milestones" ] , "s" : "{milestone:_1[_0]}" } , "f" : [ { "t" : 7 , "e" : "tr" , "f" : [ { "t" : 7 , "e" : "td" , "f" : [ { "t" : 7 , "e" : "a" , "a" : { "class" : "milestone" , "href" : [ "#" , { "t" : 2 , "r" : "project.owner" } , "/" , { "t" : 2 , "r" : "project.name" } , "/" , { "t" : 2 , "r" : "milestone.number" } ] } , "f" : [ { "t" : 2 , "r" : "milestone.title" } ] } ] } , " " , { "t" : 7 , "e" : "td" , "a" : { "style" : "width:1%" } , "f" : [ { "t" : 7 , "e" : "div" , "a" : { "class" : "progress" } , "f" : [ { "t" : 7 , "e" : "span" , "a" : { "class" : "percent" } , "f" : [ { "t" : 2 , "x" : { "r" : [ "milestone.stats.progress.points" ] , "s" : "Math.floor(_0)" } } , "%" ] } , " " , { "t" : 7 , "e" : "span" , "a" : { "class" : "due" } , "f" : [ { "t" : 3 , "x" : { "r" : [ "format" , "milestone.due_on" ] , "s" : "_0.due(_1)" } } ] } , " " , { "t" : 7 , "e" : "div" , "a" : { "class" : "outer bar" } , "f" : [ { "t" : 7 , "e" : "div" , "a" : { "class" : [ "inner bar " , { "t" : 2 , "x" : { "r" : [ "milestone.stats.isOnTime" ] , "s" : "(_0)?\"green\":\"red\"" } } ] , "style" : [ "width:" , { "t" : 2 , "r" : "milestone.stats.progress.points" } , "%" ] } } ] } ] } ] } ] } ] } ] } ] } ] } ] } ] } , " " , { "t" : 7 , "e" : "div" , "a" : { "class" : "footer" } , "f" : [ { "t" : 7 , "e" : "a" , "a" : { "href" : "#" } , "f" : [ { "t" : 7 , "e" : "Icons" , "a" : { "icon" : "cog" } } , " Edit" ] } ] } ] } ] }
2014-10-21 20:16:42 -07:00
} , { } ] , "/home/radek/dev/burnchart.io/src/templates/tables/projects.html" : [ function ( require , module , exports ) {
2014-10-23 19:20:50 -07:00
module . exports = { "v" : 1 , "t" : [ { "t" : 7 , "e" : "div" , "a" : { "id" : "projects" } , "f" : [ { "t" : 7 , "e" : "div" , "a" : { "class" : "header" } , "f" : [ { "t" : 7 , "e" : "a" , "a" : { "class" : "sort" } , "v" : { "click" : "sortBy" } , "f" : [ { "t" : 7 , "e" : "Icons" , "a" : { "icon" : "sort-alphabet" } } , " Sorted by " , { "t" : 2 , "r" : "projects.sortBy" } ] } , " " , { "t" : 7 , "e" : "h2" , "f" : [ "Projects" ] } ] } , " " , { "t" : 7 , "e" : "table" , "f" : [ { "t" : 4 , "r" : "projects.list" , "f" : [ { "t" : 4 , "n" : 50 , "r" : "errors" , "f" : [ { "t" : 7 , "e" : "tr" , "f" : [ { "t" : 7 , "e" : "td" , "a" : { "colspan" : "3" , "class" : "repo" } , "f" : [ { "t" : 7 , "e" : "div" , "a" : { "class" : "project" } , "f" : [ { "t" : 2 , "r" : "owner" } , "/" , { "t" : 2 , "r" : "name" } , " " , { "t" : 7 , "e" : "span" , "a" : { "class" : "error" , "title" : [ { "t" : 2 , "x" : { "r" : [ "errors" ] , "s" : "_0.join(\"\\n\")" } } ] } , "f" : [ { "t" : 7 , "e" : "Icons" , "a" : { "icon" : "attention" } } ] } ] } ] } ] } ] } ] } , " " , { "t" : 4 , "r" : "projects.index" , "f" : [ { "t" : 4 , "x" : { "r" : [ "." ] , "s" : "{index:_0}" } , "f" : [ { "t" : 4 , "x" : { "r" : [ "index.0" , "projects.list" ] , "s" : "{project:_1[_0]}" } , "f" : [ { "t" : 4 , "n" : 53 , "r" : "project" , "f" : [ { "t" : 4 , "x" : { "r" : [ "index.1" , "project.milestones" ] , "s" : "{milestone:_1[_0]}" } , "f" : [ { "t" : 7 , "e" : "tr" , "f" : [ { "t" : 7 , "e" : "td" , "a" : { "class" : "repo" } , "f" : [ { "t" : 7 , "e" : "a" , "a" : { "class" : "project" , "href" : [ "#" , { "t" : 2 , "r" : "owner" } , "/" , { "t" : 2 , "r" : "name" } ] } , "f" : [ { "t" : 2 , "r" : "owner" } , "/" , { "t" : 2 , "r" : "name" } ] } ] } , " " , { "t" : 7 , "e" : "td" , "f" : [ { "t" : 7 , "e" : "a" , "a" : { "class" : "milestone" , "href" : [ "#" , { "t" : 2 , "r" : "owner" } , "/" , { "t" : 2 , "r" : "name" } , "/" , { "t" : 2 , "r" : "milestone.number" } ] } , "f" : [ { "t" : 2 , "r" : "milestone.title" } ] } ] } , " " , { "t" : 7 , "e" : "td" , "a" : { "style" : "width:1%" } , "f" : [ { "t" : 7 , "e" : "div" , "a" : { "class" : "progress" } , "f" : [ { "t" : 7 , "e" : "span" , "a" : { "class" : "percent" } , "f" : [ { "t" : 2 , "x" : { "r" : [ "milestone.stats.progress.points" ] , "s" : "Math.floor(_0)" } } , "%" ] } , " " , { "t" : 7 , "e" : "span" , "a" : { "class" : "due" } , "f" : [ { "t" : 3 , "x" : { "r" : [ "format" , "milestone.due_on" ] , "s" : "_0.due(_1)" } } ] } , " " , { "t" : 7 , "e" : "div" , "a" : { "class" : "outer bar" } , "f" : [ { "t" : 7 , "e" : "div" , "a" : { "class" : [ "inner bar " , { "t" : 2 , "x" : { "r" : [ "milestone.stats.isOnTime" ] , "s" : "(_0)?\"green\":\"red\"" } } ] , "style" : [ "width:" , { "t" : 2 , "r" : "milestone.stats.progress.points" } , "%" ] } } ] } ] } ] } ] } ] } ] } ] } ] } ] } ] } , " " , { "t" : 7 , "e" : "div" , "a" : { "class" : "footer" } , "f" : [ { "t" : 7 , "e" : "a" , "a" : { "href" : "#" } , "f" : [ { "t" : 7 , "e" : "Icons" , "a" : { "icon" : "cog" } } , " Edit" ] } ] } ] } ] }
2014-10-21 20:16:42 -07:00
} , { } ] , "/home/radek/dev/burnchart.io/src/utils/date.coffee" : [ function ( require , module , exports ) {
2014-10-18 16:57:16 -07:00
module . exports = {
now : function ( ) {
return new Date ( ) . toJSON ( ) ;
}
} ;
2014-10-21 20:16:42 -07:00
} , { } ] , "/home/radek/dev/burnchart.io/src/utils/format.coffee" : [ function ( require , module , exports ) {
2014-10-20 19:51:15 -07:00
var marked , moment , _ , _ref ;
2014-10-18 16:57:16 -07:00
_ref = require ( '../modules/vendor.coffee' ) , _ = _ref . _ , moment = _ref . moment , marked = _ref . marked ;
module . exports = {
2014-10-20 19:51:15 -07:00
fromNow : _ . memoize ( function ( jsonDate ) {
2014-10-18 16:57:16 -07:00
return moment ( new Date ( jsonDate ) ) . fromNow ( ) ;
} ) ,
2014-10-20 19:51:15 -07:00
due : function ( jsonDate ) {
2014-10-18 16:57:16 -07:00
if ( ! jsonDate ) {
return ' ' ;
}
return [ 'due' , this . fromNow ( jsonDate ) ] . join ( ' ' ) ;
} ,
2014-10-20 19:51:15 -07:00
markdown : function ( markup ) {
2014-10-18 16:57:16 -07:00
return marked ( markup ) ;
} ,
2014-10-20 19:51:15 -07:00
title : function ( text ) {
2014-10-18 16:57:16 -07:00
if ( text . toLowerCase ( ) . indexOf ( 'milestone' ) > - 1 ) {
return text ;
} else {
return [ 'Milestone' , text ] . join ( ' ' ) ;
}
} ,
2014-10-20 19:51:15 -07:00
hexToDec : function ( hex ) {
2014-10-18 16:57:16 -07:00
return parseInt ( hex , 16 ) ;
}
} ;
2014-10-21 20:16:42 -07:00
} , { "../modules/vendor.coffee" : "/home/radek/dev/burnchart.io/src/modules/vendor.coffee" } ] , "/home/radek/dev/burnchart.io/src/utils/key.coffee" : [ function ( require , module , exports ) {
2014-10-18 16:57:16 -07:00
module . exports = {
is : function ( evt ) {
var _ref ;
return ( _ref = evt . original . type ) === 'keyup' || _ref === 'keydown' ;
} ,
isEnter : function ( evt ) {
return evt . original . which === 13 ;
}
} ;
2014-10-21 20:16:42 -07:00
} , { } ] , "/home/radek/dev/burnchart.io/src/utils/mixins.coffee" : [ function ( require , module , exports ) {
2014-10-18 16:57:16 -07:00
var _ ;
_ = require ( '../modules/vendor.coffee' ) . _ ;
_ . mixin ( {
'pluckMany' : function ( source , keys ) {
if ( ! _ . isArray ( keys ) ) {
throw '`keys` needs to be an Array' ;
}
return _ . map ( source , function ( item ) {
var obj ;
obj = { } ;
_ . each ( keys , function ( key ) {
return obj [ key ] = item [ key ] ;
} ) ;
return obj ;
} ) ;
} ,
'isInt' : function ( val ) {
return ! isNaN ( val ) && parseInt ( Number ( val ) ) === val && ! isNaN ( parseInt ( val , 10 ) ) ;
}
} ) ;
2014-10-21 20:16:42 -07:00
} , { "../modules/vendor.coffee" : "/home/radek/dev/burnchart.io/src/modules/vendor.coffee" } ] , "/home/radek/dev/burnchart.io/src/utils/model.coffee" : [ function ( require , module , exports ) {
2014-10-18 16:57:16 -07:00
var Ractive ;
Ractive = require ( '../modules/vendor.coffee' ) . Ractive ;
module . exports = function ( opts ) {
var Model , model ;
Model = Ractive . extend ( opts ) ;
model = new Model ( ) ;
model . render ( ) ;
return model ;
} ;
2014-10-21 20:16:42 -07:00
} , { "../modules/vendor.coffee" : "/home/radek/dev/burnchart.io/src/modules/vendor.coffee" } ] , "/home/radek/dev/burnchart.io/src/views/chart.coffee" : [ function ( require , module , exports ) {
2014-10-18 16:57:16 -07:00
var Ractive , axes , d3 , lines , _ref ;
_ref = require ( '../modules/vendor.coffee' ) , Ractive = _ref . Ractive , d3 = _ref . d3 ;
lines = require ( '../modules/chart/lines.coffee' ) ;
axes = require ( '../modules/chart/axes.coffee' ) ;
module . exports = Ractive . extend ( {
'name' : 'views/chart' ,
'template' : require ( '../templates/chart.html' ) ,
oncomplete : function ( ) {
var actual , head , height , ideal , issues , line , m , mAxis , margin , milestone , svg , tooltip , total , trend , width , x , xAxis , y , yAxis , _ref1 ;
milestone = this . data . milestone ;
issues = milestone . issues ;
total = issues . open . size + issues . closed . size ;
head = issues . closed . list [ 0 ] . closed _at ;
if ( issues . length && milestone . created _at > head ) {
milestone . created _at = head ;
}
actual = lines . actual ( issues . closed . list , milestone . created _at , total ) ;
ideal = lines . ideal ( milestone . created _at , milestone . due _on , total ) ;
trend = lines . trend ( actual , milestone . created _at , milestone . due _on ) ;
_ref1 = this . el . getBoundingClientRect ( ) , height = _ref1 . height , width = _ref1 . width ;
margin = {
'top' : 30 ,
'right' : 30 ,
'bottom' : 40 ,
'left' : 50
} ;
width -= margin . left + margin . right ;
height -= margin . top + margin . bottom ;
x = d3 . time . scale ( ) . range ( [ 0 , width ] ) ;
y = d3 . scale . linear ( ) . range ( [ height , 0 ] ) ;
xAxis = axes . horizontal ( height , x ) ;
yAxis = axes . vertical ( width , y ) ;
line = d3 . svg . line ( ) . interpolate ( "linear" ) . x ( function ( d ) {
return x ( d . date ) ;
} ) . y ( function ( d ) {
return y ( d . points ) ;
} ) ;
x . domain ( [ ideal [ 0 ] . date , ideal [ ideal . length - 1 ] . date ] ) ;
y . domain ( [ 0 , ideal [ 0 ] . points ] ) . nice ( ) ;
svg = d3 . select ( this . el . querySelector ( '#chart' ) ) . append ( "svg" ) . attr ( "width" , width + margin . left + margin . right ) . attr ( "height" , height + margin . top + margin . bottom ) . append ( "g" ) . attr ( "transform" , "translate(" + margin . left + "," + margin . top + ")" ) ;
svg . append ( "g" ) . attr ( "class" , "x axis day" ) . attr ( "transform" , "translate(0," + height + ")" ) . call ( xAxis ) ;
m = [ 'Jan' , 'Feb' , 'Mar' , 'Apr' , 'May' , 'Jun' , 'Jul' , 'Aug' , 'Sep' , 'Oct' , 'Nov' , 'Dec' ] ;
mAxis = xAxis . orient ( "top" ) . tickSize ( height ) . tickFormat ( function ( d ) {
return m [ d . getMonth ( ) ] ;
} ) . ticks ( 2 ) ;
svg . append ( "g" ) . attr ( "class" , "x axis month" ) . attr ( "transform" , "translate(0," + height + ")" ) . call ( mAxis ) ;
svg . append ( "g" ) . attr ( "class" , "y axis" ) . call ( yAxis ) ;
svg . append ( "svg:line" ) . attr ( "class" , "today" ) . attr ( "x1" , x ( new Date ( ) ) ) . attr ( "y1" , 0 ) . attr ( "x2" , x ( new Date ( ) ) ) . attr ( "y2" , height ) ;
svg . append ( "path" ) . attr ( "class" , "ideal line" ) . attr ( "d" , line . interpolate ( "basis" ) ( ideal ) ) ;
svg . append ( "path" ) . attr ( "class" , "trendline line" ) . attr ( "d" , line . interpolate ( "linear" ) ( trend ) ) ;
svg . append ( "path" ) . attr ( "class" , "actual line" ) . attr ( "d" , line . interpolate ( "linear" ) . y ( function ( d ) {
return y ( d . points ) ;
} ) ( actual ) ) ;
tooltip = d3 . tip ( ) . attr ( 'class' , 'd3-tip' ) . html ( function ( _arg ) {
var number , title ;
number = _arg . number , title = _arg . title ;
return "#" + number + ": " + title ;
} ) ;
svg . call ( tooltip ) ;
return svg . selectAll ( "a.issue" ) . data ( actual . slice ( 1 ) ) . enter ( ) . append ( 'svg:a' ) . attr ( "xlink:href" , function ( _arg ) {
var html _url ;
html _url = _arg . html _url ;
return html _url ;
} ) . attr ( "xlink:show" , 'new' ) . append ( 'svg:circle' ) . attr ( "cx" , function ( _arg ) {
var date ;
date = _arg . date ;
return x ( date ) ;
} ) . attr ( "cy" , function ( _arg ) {
var points ;
points = _arg . points ;
return y ( points ) ;
} ) . attr ( "r" , function ( _arg ) {
var radius ;
radius = _arg . radius ;
return 5 ;
} ) . on ( 'mouseover' , tooltip . show ) . on ( 'mouseout' , tooltip . hide ) ;
}
} ) ;
2014-10-21 20:16:42 -07:00
} , { "../modules/chart/axes.coffee" : "/home/radek/dev/burnchart.io/src/modules/chart/axes.coffee" , "../modules/chart/lines.coffee" : "/home/radek/dev/burnchart.io/src/modules/chart/lines.coffee" , "../modules/vendor.coffee" : "/home/radek/dev/burnchart.io/src/modules/vendor.coffee" , "../templates/chart.html" : "/home/radek/dev/burnchart.io/src/templates/chart.html" } ] , "/home/radek/dev/burnchart.io/src/views/header.coffee" : [ function ( require , module , exports ) {
2014-10-18 16:57:16 -07:00
var Icons , Ractive , firebase , system , user ;
Ractive = require ( '../modules/vendor.coffee' ) . Ractive ;
system = require ( '../models/system.coffee' ) . system ;
firebase = require ( '../models/firebase.coffee' ) ;
user = require ( '../models/user.coffee' ) ;
Icons = require ( './icons.coffee' ) ;
module . exports = Ractive . extend ( {
'name' : 'views/header' ,
'template' : require ( '../templates/header.html' ) ,
'data' : {
'user' : user ,
'icon' : 'fire-station'
} ,
'components' : {
Icons : Icons
} ,
'adapt' : [ Ractive . adaptors . Ractive ] ,
onconstruct : function ( ) {
return this . on ( '!login' , function ( ) {
return firebase . login ( function ( err ) {
if ( err ) {
throw err ;
}
} ) ;
} ) ;
} ,
onrender : function ( ) {
return system . observe ( 'loading' , ( function ( _this ) {
return function ( ya ) {
return _this . set ( 'icon' , ya ? 'spinner1' : 'fire-station' ) ;
} ;
} ) ( this ) ) ;
}
} ) ;
2014-10-21 20:16:42 -07:00
} , { "../models/firebase.coffee" : "/home/radek/dev/burnchart.io/src/models/firebase.coffee" , "../models/system.coffee" : "/home/radek/dev/burnchart.io/src/models/system.coffee" , "../models/user.coffee" : "/home/radek/dev/burnchart.io/src/models/user.coffee" , "../modules/vendor.coffee" : "/home/radek/dev/burnchart.io/src/modules/vendor.coffee" , "../templates/header.html" : "/home/radek/dev/burnchart.io/src/templates/header.html" , "./icons.coffee" : "/home/radek/dev/burnchart.io/src/views/icons.coffee" } ] , "/home/radek/dev/burnchart.io/src/views/hero.coffee" : [ function ( require , module , exports ) {
2014-10-18 16:57:16 -07:00
var Icons , Ractive , mediator ;
Ractive = require ( '../modules/vendor.coffee' ) . Ractive ;
mediator = require ( '../modules/mediator.coffee' ) ;
Icons = require ( './icons.coffee' ) ;
module . exports = Ractive . extend ( {
'name' : 'views/hero' ,
'template' : require ( '../templates/hero.html' ) ,
'components' : {
Icons : Icons
} ,
'adapt' : [ Ractive . adaptors . Ractive ]
} ) ;
2014-10-21 20:16:42 -07:00
} , { "../modules/mediator.coffee" : "/home/radek/dev/burnchart.io/src/modules/mediator.coffee" , "../modules/vendor.coffee" : "/home/radek/dev/burnchart.io/src/modules/vendor.coffee" , "../templates/hero.html" : "/home/radek/dev/burnchart.io/src/templates/hero.html" , "./icons.coffee" : "/home/radek/dev/burnchart.io/src/views/icons.coffee" } ] , "/home/radek/dev/burnchart.io/src/views/icons.coffee" : [ function ( require , module , exports ) {
2014-10-18 16:57:16 -07:00
var Ractive , codes , format ;
Ractive = require ( '../modules/vendor.coffee' ) . Ractive ;
format = require ( '../utils/format.coffee' ) ;
codes = {
'cog' : '\e800' ,
'search' : '\e801' ,
'github' : '\e802' ,
'address' : '\e803' ,
'plus-circled' : '\e804' ,
'fire-station' : '\e805' ,
'sort-alphabet' : '\e806' ,
'down-open' : '\e807' ,
'spin6' : '\e808' ,
'megaphone' : '\e809' ,
'spin4' : '\e80a' ,
'spinner1' : '\e80b' ,
'attention' : '\e80c'
} ;
module . exports = Ractive . extend ( {
'name' : 'views/icons' ,
'template' : require ( '../templates/icons.html' ) ,
'isolated' : true ,
onrender : function ( ) {
return this . observe ( 'icon' , function ( icon ) {
var hex ;
if ( icon && ( hex = codes [ icon ] ) ) {
2014-10-20 19:51:15 -07:00
return this . set ( 'code' , format . hexToDec ( hex ) ) ;
2014-10-18 16:57:16 -07:00
} else {
return this . set ( 'code' , null ) ;
}
} ) ;
}
} ) ;
2014-10-21 20:16:42 -07:00
} , { "../modules/vendor.coffee" : "/home/radek/dev/burnchart.io/src/modules/vendor.coffee" , "../templates/icons.html" : "/home/radek/dev/burnchart.io/src/templates/icons.html" , "../utils/format.coffee" : "/home/radek/dev/burnchart.io/src/utils/format.coffee" } ] , "/home/radek/dev/burnchart.io/src/views/notify.coffee" : [ function ( require , module , exports ) {
2014-10-18 16:57:16 -07:00
var HEIGHT , Icons , Ractive , d3 , mediator , _ , _ref ;
_ref = require ( '../modules/vendor.coffee' ) , _ = _ref . _ , Ractive = _ref . Ractive , d3 = _ref . d3 ;
mediator = require ( '../modules/mediator.coffee' ) ;
Icons = require ( './icons.coffee' ) ;
HEIGHT = 68 ;
module . exports = Ractive . extend ( {
'name' : 'views/notify' ,
'template' : require ( '../templates/notify.html' ) ,
'data' : {
'top' : HEIGHT ,
'hidden' : true ,
'defaults' : {
'text' : '' ,
'type' : '' ,
'system' : false ,
'icon' : 'megaphone' ,
'ttl' : 5e3
}
} ,
'components' : {
Icons : Icons
} ,
'adapt' : [ Ractive . adaptors . Ractive ] ,
show : function ( opts ) {
var pos ;
this . set ( 'hidden' , false ) ;
this . set ( opts = _ . defaults ( opts , this . data . defaults ) ) ;
pos = [ 0 , 50 ] [ + opts . system ] ;
this . animate ( 'top' , pos , {
'easing' : d3 . ease ( 'bounce' ) ,
'duration' : 800
} ) ;
if ( ! opts . ttl ) {
return ;
}
return _ . delay ( _ . bind ( this . hide , this ) , opts . ttl ) ;
} ,
hide : function ( ) {
if ( this . data . hidden ) {
return ;
}
this . set ( 'hidden' , true ) ;
return this . animate ( 'top' , HEIGHT , {
'easing' : d3 . ease ( 'back' ) ,
'complete' : ( function ( _this ) {
return function ( ) {
return _this . set ( 'text' , null ) ;
} ;
} ) ( this )
} ) ;
} ,
onconstruct : function ( ) {
mediator . on ( '!app/notify' , _ . bind ( this . show , this ) ) ;
mediator . on ( '!app/notify/hide' , _ . bind ( this . hide , this ) ) ;
return this . on ( 'close' , this . hide ) ;
}
} ) ;
2014-10-21 20:16:42 -07:00
} , { "../modules/mediator.coffee" : "/home/radek/dev/burnchart.io/src/modules/mediator.coffee" , "../modules/vendor.coffee" : "/home/radek/dev/burnchart.io/src/modules/vendor.coffee" , "../templates/notify.html" : "/home/radek/dev/burnchart.io/src/templates/notify.html" , "./icons.coffee" : "/home/radek/dev/burnchart.io/src/views/icons.coffee" } ] , "/home/radek/dev/burnchart.io/src/views/pages/index.coffee" : [ function ( require , module , exports ) {
2014-10-18 16:57:16 -07:00
var Hero , Projects , Ractive , async , issues , mediator , milestones , projects , system , _ , _ref ;
_ref = require ( '../../modules/vendor.coffee' ) , _ = _ref . _ , Ractive = _ref . Ractive , async = _ref . async ;
Hero = require ( '../hero.coffee' ) ;
Projects = require ( '../tables/projects.coffee' ) ;
projects = require ( '../../models/projects.coffee' ) ;
system = require ( '../../models/system.coffee' ) ;
milestones = require ( '../../modules/github/milestones.coffee' ) ;
issues = require ( '../../modules/github/issues.coffee' ) ;
mediator = require ( '../../modules/mediator.coffee' ) ;
module . exports = Ractive . extend ( {
'name' : 'views/pages/index' ,
'template' : require ( '../../templates/pages/index.html' ) ,
'components' : {
Hero : Hero ,
Projects : Projects
} ,
'data' : {
'projects' : projects ,
'ready' : false
} ,
'adapt' : [ Ractive . adaptors . Ractive ] ,
onrender : function ( ) {
var done ;
document . title = 'Burnchart: GitHub Burndown Chart as a Service' ;
if ( ! projects . list . length ) {
return this . set ( 'ready' , true ) ;
}
done = system . async ( ) ;
return async . map ( projects . data . list , function ( project , cb ) {
2014-10-20 19:51:15 -07:00
return milestones . fetchAll ( project , function ( err , list ) {
if ( err ) {
projects . saveError ( project , err ) ;
return cb ( ) ;
2014-10-18 16:57:16 -07:00
}
2014-10-20 19:51:15 -07:00
return async . each ( list , function ( milestone , cb ) {
if ( _ . find ( project . milestones , function ( _arg ) {
var number ;
number = _arg . number ;
return milestone . number === number ;
} ) ) {
return cb ( null ) ;
}
return issues . fetchAll ( {
'owner' : project . owner ,
'name' : project . name ,
2014-10-18 16:57:16 -07:00
'milestone' : milestone . number
2014-10-20 19:51:15 -07:00
} , function ( err , obj ) {
if ( err ) {
projects . saveError ( project , err ) ;
return cb ( ) ;
}
_ . extend ( milestone , {
2014-10-18 16:57:16 -07:00
'issues' : obj
2014-10-20 19:51:15 -07:00
} ) ;
projects . addMilestone ( project , milestone ) ;
return cb ( ) ;
2014-10-18 16:57:16 -07:00
} ) ;
2014-10-20 19:51:15 -07:00
} , cb ) ;
2014-10-18 16:57:16 -07:00
} ) ;
} , ( function ( _this ) {
2014-10-20 19:51:15 -07:00
return function ( ) {
2014-10-18 16:57:16 -07:00
done ( ) ;
2014-10-20 19:51:15 -07:00
return _this . set ( 'ready' , true ) ;
2014-10-18 16:57:16 -07:00
} ;
} ) ( this ) ) ;
}
} ) ;
2014-10-21 20:16:42 -07:00
} , { "../../models/projects.coffee" : "/home/radek/dev/burnchart.io/src/models/projects.coffee" , "../../models/system.coffee" : "/home/radek/dev/burnchart.io/src/models/system.coffee" , "../../modules/github/issues.coffee" : "/home/radek/dev/burnchart.io/src/modules/github/issues.coffee" , "../../modules/github/milestones.coffee" : "/home/radek/dev/burnchart.io/src/modules/github/milestones.coffee" , "../../modules/mediator.coffee" : "/home/radek/dev/burnchart.io/src/modules/mediator.coffee" , "../../modules/vendor.coffee" : "/home/radek/dev/burnchart.io/src/modules/vendor.coffee" , "../../templates/pages/index.html" : "/home/radek/dev/burnchart.io/src/templates/pages/index.html" , "../hero.coffee" : "/home/radek/dev/burnchart.io/src/views/hero.coffee" , "../tables/projects.coffee" : "/home/radek/dev/burnchart.io/src/views/tables/projects.coffee" } ] , "/home/radek/dev/burnchart.io/src/views/pages/milestone.coffee" : [ function ( require , module , exports ) {
2014-10-18 16:57:16 -07:00
var Chart , Ractive , async , format , issues , mediator , milestones , projects , system , _ , _ref ;
_ref = require ( '../../modules/vendor.coffee' ) , _ = _ref . _ , Ractive = _ref . Ractive , async = _ref . async ;
Chart = require ( '../chart.coffee' ) ;
projects = require ( '../../models/projects.coffee' ) ;
system = require ( '../../models/system.coffee' ) ;
milestones = require ( '../../modules/github/milestones.coffee' ) ;
issues = require ( '../../modules/github/issues.coffee' ) ;
mediator = require ( '../../modules/mediator.coffee' ) ;
format = require ( '../../utils/format.coffee' ) ;
module . exports = Ractive . extend ( {
'name' : 'views/pages/chart' ,
'template' : require ( '../../templates/pages/milestone.html' ) ,
'components' : {
Chart : Chart
} ,
'data' : {
'format' : format ,
'ready' : false
} ,
onrender : function ( ) {
var done , fetchIssues , fetchMilestone , milestone , name , obj , owner , project , _ref1 ;
_ref1 = this . get ( 'route' ) , owner = _ref1 [ 0 ] , name = _ref1 [ 1 ] , milestone = _ref1 [ 2 ] ;
milestone = parseInt ( milestone ) ;
document . title = "" + owner + "/" + name + "/" + milestone ;
project = projects . find ( {
owner : owner ,
name : name
} ) ;
if ( ! project ) {
throw 500 ;
}
obj = _ . find ( project . milestones , {
'number' : milestone
} ) ;
if ( obj != null ) {
return this . set ( {
'milestone' : obj ,
'ready' : true
} ) ;
}
done = system . async ( ) ;
fetchMilestone = function ( cb ) {
return milestones . fetch ( {
owner : owner ,
name : name ,
milestone : milestone
} , cb ) ;
} ;
fetchIssues = function ( data , cb ) {
return issues . fetchAll ( {
owner : owner ,
name : name ,
milestone : milestone
} , function ( err , obj ) {
return cb ( err , _ . extend ( data , {
'issues' : obj
} ) ) ;
} ) ;
} ;
return async . waterfall ( [ fetchMilestone , fetchIssues ] , ( function ( _this ) {
return function ( err , data ) {
done ( ) ;
if ( err ) {
return mediator . fire ( '!app/notify' , {
'text' : err . toString ( ) ,
'type' : 'alert' ,
'system' : true ,
'ttl' : null
} ) ;
}
projects . addMilestone ( project , data ) ;
return _this . set ( {
'milestone' : data ,
'ready' : true
} ) ;
} ;
} ) ( this ) ) ;
}
} ) ;
2014-10-21 20:16:42 -07:00
} , { "../../models/projects.coffee" : "/home/radek/dev/burnchart.io/src/models/projects.coffee" , "../../models/system.coffee" : "/home/radek/dev/burnchart.io/src/models/system.coffee" , "../../modules/github/issues.coffee" : "/home/radek/dev/burnchart.io/src/modules/github/issues.coffee" , "../../modules/github/milestones.coffee" : "/home/radek/dev/burnchart.io/src/modules/github/milestones.coffee" , "../../modules/mediator.coffee" : "/home/radek/dev/burnchart.io/src/modules/mediator.coffee" , "../../modules/vendor.coffee" : "/home/radek/dev/burnchart.io/src/modules/vendor.coffee" , "../../templates/pages/milestone.html" : "/home/radek/dev/burnchart.io/src/templates/pages/milestone.html" , "../../utils/format.coffee" : "/home/radek/dev/burnchart.io/src/utils/format.coffee" , "../chart.coffee" : "/home/radek/dev/burnchart.io/src/views/chart.coffee" } ] , "/home/radek/dev/burnchart.io/src/views/pages/new.coffee" : [ function ( require , module , exports ) {
2014-10-18 16:57:16 -07:00
var Ractive , key , mediator , system , user , _ , _ref ;
_ref = require ( '../../modules/vendor.coffee' ) , _ = _ref . _ , Ractive = _ref . Ractive ;
mediator = require ( '../../modules/mediator.coffee' ) ;
system = require ( '../../models/system.coffee' ) ;
user = require ( '../../models/user.coffee' ) ;
key = require ( '../../utils/key.coffee' ) ;
module . exports = Ractive . extend ( {
'name' : 'views/pages/new' ,
'template' : require ( '../../templates/pages/new.html' ) ,
'data' : {
'value' : 'radekstepan/disposable' ,
user : user
} ,
'adapt' : [ Ractive . adaptors . Ractive ] ,
submit : function ( evt , value ) {
var done , name , owner , _ref1 ;
if ( key . is ( evt ) && ! key . isEnter ( evt ) ) {
return ;
}
_ref1 = value . split ( '/' ) , owner = _ref1 [ 0 ] , name = _ref1 [ 1 ] ;
done = system . async ( ) ;
return mediator . fire ( '!projects/add' , {
owner : owner ,
name : name
} , function ( err ) {
done ( ) ;
mediator . fire ( '!app/notify' , {
'text' : err || ( "Project " + value + " saved." ) ,
'type' : err ? 'error' : 'success'
} ) ;
return window . location . hash = '#' ;
} ) ;
} ,
onrender : function ( ) {
var autocomplete ;
document . title = 'Add a new project' ;
autocomplete = function ( value ) { } ;
this . observe ( 'value' , _ . debounce ( autocomplete , 200 ) , {
'init' : false
} ) ;
this . el . querySelector ( 'input' ) . focus ( ) ;
return this . on ( 'submit' , this . submit ) ;
}
} ) ;
2014-10-21 20:16:42 -07:00
} , { "../../models/system.coffee" : "/home/radek/dev/burnchart.io/src/models/system.coffee" , "../../models/user.coffee" : "/home/radek/dev/burnchart.io/src/models/user.coffee" , "../../modules/mediator.coffee" : "/home/radek/dev/burnchart.io/src/modules/mediator.coffee" , "../../modules/vendor.coffee" : "/home/radek/dev/burnchart.io/src/modules/vendor.coffee" , "../../templates/pages/new.html" : "/home/radek/dev/burnchart.io/src/templates/pages/new.html" , "../../utils/key.coffee" : "/home/radek/dev/burnchart.io/src/utils/key.coffee" } ] , "/home/radek/dev/burnchart.io/src/views/pages/project.coffee" : [ function ( require , module , exports ) {
2014-10-18 16:57:16 -07:00
var Milestones , Ractive , async , issues , mediator , milestones , projects , system , _ , _ref ;
_ref = require ( '../../modules/vendor.coffee' ) , _ = _ref . _ , Ractive = _ref . Ractive , async = _ref . async ;
Milestones = require ( '../tables/milestones.coffee' ) ;
projects = require ( '../../models/projects.coffee' ) ;
system = require ( '../../models/system.coffee' ) ;
milestones = require ( '../../modules/github/milestones.coffee' ) ;
issues = require ( '../../modules/github/issues.coffee' ) ;
mediator = require ( '../../modules/mediator.coffee' ) ;
module . exports = Ractive . extend ( {
'name' : 'views/pages/project' ,
'template' : require ( '../../templates/pages/project.html' ) ,
'components' : {
Milestones : Milestones
} ,
'data' : {
2014-10-21 20:16:42 -07:00
'projects' : projects ,
2014-10-18 16:57:16 -07:00
'ready' : false
} ,
onrender : function ( ) {
var done , fetchIssues , fetchMilestones , findMilestone , name , owner , project , _ref1 ;
_ref1 = this . get ( 'route' ) , owner = _ref1 [ 0 ] , name = _ref1 [ 1 ] ;
document . title = "" + owner + "/" + name ;
this . set ( 'project' , project = projects . find ( {
owner : owner ,
name : name
} ) ) ;
if ( ! project ) {
throw 500 ;
}
done = system . async ( ) ;
findMilestone = function ( number ) {
return _ . find ( project . milestones || [ ] , {
number : number
} ) ;
} ;
fetchMilestones = function ( cb ) {
return milestones . fetchAll ( project , cb ) ;
} ;
fetchIssues = function ( allMilestones , cb ) {
return async . each ( allMilestones , function ( milestone , cb ) {
if ( findMilestone ( milestone . number ) ) {
return cb ( null ) ;
}
return issues . fetchAll ( {
owner : owner ,
name : name ,
'milestone' : milestone . number
} , function ( err , obj ) {
if ( err ) {
return cb ( err ) ;
}
projects . addMilestone ( project , _ . extend ( milestone , {
'issues' : obj
} ) ) ;
2014-10-20 19:51:15 -07:00
return cb ( ) ;
2014-10-18 16:57:16 -07:00
} ) ;
} , cb ) ;
} ;
return async . waterfall ( [ fetchMilestones , fetchIssues ] , ( function ( _this ) {
return function ( err ) {
done ( ) ;
if ( err ) {
return mediator . fire ( '!app/notify' , {
'text' : err . toString ( ) ,
'type' : 'alert' ,
'system' : true ,
'ttl' : null
} ) ;
}
return _this . set ( 'ready' , true ) ;
} ;
} ) ( this ) ) ;
}
} ) ;
2014-10-21 20:16:42 -07:00
} , { "../../models/projects.coffee" : "/home/radek/dev/burnchart.io/src/models/projects.coffee" , "../../models/system.coffee" : "/home/radek/dev/burnchart.io/src/models/system.coffee" , "../../modules/github/issues.coffee" : "/home/radek/dev/burnchart.io/src/modules/github/issues.coffee" , "../../modules/github/milestones.coffee" : "/home/radek/dev/burnchart.io/src/modules/github/milestones.coffee" , "../../modules/mediator.coffee" : "/home/radek/dev/burnchart.io/src/modules/mediator.coffee" , "../../modules/vendor.coffee" : "/home/radek/dev/burnchart.io/src/modules/vendor.coffee" , "../../templates/pages/project.html" : "/home/radek/dev/burnchart.io/src/templates/pages/project.html" , "../tables/milestones.coffee" : "/home/radek/dev/burnchart.io/src/views/tables/milestones.coffee" } ] , "/home/radek/dev/burnchart.io/src/views/tables/milestones.coffee" : [ function ( require , module , exports ) {
2014-10-22 21:33:03 -07:00
var Table ;
2014-10-18 16:57:16 -07:00
2014-10-22 21:33:03 -07:00
Table = require ( './table.coffee' ) ;
2014-10-18 16:57:16 -07:00
2014-10-22 21:33:03 -07:00
module . exports = Table . extend ( {
'name' : 'views/milestones' ,
'template' : require ( '../../templates/tables/milestones.html' )
} ) ;
2014-10-18 16:57:16 -07:00
2014-10-22 21:33:03 -07:00
} , { "../../templates/tables/milestones.html" : "/home/radek/dev/burnchart.io/src/templates/tables/milestones.html" , "./table.coffee" : "/home/radek/dev/burnchart.io/src/views/tables/table.coffee" } ] , "/home/radek/dev/burnchart.io/src/views/tables/projects.coffee" : [ function ( require , module , exports ) {
var Table ;
2014-10-18 16:57:16 -07:00
2014-10-22 21:33:03 -07:00
Table = require ( './table.coffee' ) ;
module . exports = Table . extend ( {
'name' : 'views/projects' ,
'template' : require ( '../../templates/tables/projects.html' )
2014-10-18 16:57:16 -07:00
} ) ;
2014-10-22 21:33:03 -07:00
} , { "../../templates/tables/projects.html" : "/home/radek/dev/burnchart.io/src/templates/tables/projects.html" , "./table.coffee" : "/home/radek/dev/burnchart.io/src/views/tables/table.coffee" } ] , "/home/radek/dev/burnchart.io/src/views/tables/table.coffee" : [ function ( require , module , exports ) {
var Icons , Ractive , format , projects ;
2014-10-18 16:57:16 -07:00
Ractive = require ( '../../modules/vendor.coffee' ) . Ractive ;
format = require ( '../../utils/format.coffee' ) ;
Icons = require ( '../icons.coffee' ) ;
2014-10-20 20:25:48 -07:00
projects = require ( '../../models/projects.coffee' ) ;
2014-10-18 16:57:16 -07:00
module . exports = Ractive . extend ( {
2014-10-22 21:33:03 -07:00
'name' : 'views/table' ,
2014-10-18 16:57:16 -07:00
'data' : {
format : format
} ,
'components' : {
Icons : Icons
} ,
2014-10-22 21:33:03 -07:00
'adapt' : [ Ractive . adaptors . Ractive ] ,
onconstruct : function ( ) {
return this . on ( 'sortBy' , function ( ) {
var fns , idx ;
fns = projects . data . sortFns ;
idx = 1 + fns . indexOf ( projects . data . sortBy ) ;
if ( idx === fns . length ) {
idx = 0 ;
}
return projects . set ( 'sortBy' , fns [ idx ] ) ;
} ) ;
}
2014-10-18 16:57:16 -07:00
} ) ;
2014-10-22 21:33:03 -07:00
} , { "../../models/projects.coffee" : "/home/radek/dev/burnchart.io/src/models/projects.coffee" , "../../modules/vendor.coffee" : "/home/radek/dev/burnchart.io/src/modules/vendor.coffee" , "../../utils/format.coffee" : "/home/radek/dev/burnchart.io/src/utils/format.coffee" , "../icons.coffee" : "/home/radek/dev/burnchart.io/src/views/icons.coffee" } ] , "/home/radek/dev/burnchart.io/vendor/node-semver/semver.js" : [ function ( require , module , exports ) {
2014-10-22 19:59:44 -07:00
( function ( process ) {
// export the class if we are in a Node-like system.
if ( typeof module === 'object' && module . exports === exports )
exports = module . exports = SemVer ;
// The debug function is excluded entirely from the minified version.
/* nomin */ var debug ;
/* nomin */ if ( typeof process === 'object' &&
/* nomin */ process . env &&
/* nomin */ process . env . NODE _DEBUG &&
/* nomin */ /\bsemver\b/i . test ( process . env . NODE _DEBUG ) )
/* nomin */ debug = function ( ) {
/* nomin */ var args = Array . prototype . slice . call ( arguments , 0 ) ;
/* nomin */ args . unshift ( 'SEMVER' ) ;
/* nomin */ console . log . apply ( console , args ) ;
/* nomin */ } ;
/* nomin */ else
/* nomin */ debug = function ( ) { } ;
// Note: this is the semver.org version of the spec that it implements
// Not necessarily the package version of this code.
exports . SEMVER _SPEC _VERSION = '2.0.0' ;
// The actual regexps go on exports.re
var re = exports . re = [ ] ;
var src = exports . src = [ ] ;
var R = 0 ;
// The following Regular Expressions can be used for tokenizing,
// validating, and parsing SemVer version strings.
// ## Numeric Identifier
// A single `0`, or a non-zero digit followed by zero or more digits.
var NUMERICIDENTIFIER = R ++ ;
src [ NUMERICIDENTIFIER ] = '0|[1-9]\\d*' ;
var NUMERICIDENTIFIERLOOSE = R ++ ;
src [ NUMERICIDENTIFIERLOOSE ] = '[0-9]+' ;
// ## Non-numeric Identifier
// Zero or more digits, followed by a letter or hyphen, and then zero or
// more letters, digits, or hyphens.
var NONNUMERICIDENTIFIER = R ++ ;
src [ NONNUMERICIDENTIFIER ] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*' ;
// ## Main Version
// Three dot-separated numeric identifiers.
var MAINVERSION = R ++ ;
src [ MAINVERSION ] = '(' + src [ NUMERICIDENTIFIER ] + ')\\.' +
'(' + src [ NUMERICIDENTIFIER ] + ')\\.' +
'(' + src [ NUMERICIDENTIFIER ] + ')' ;
var MAINVERSIONLOOSE = R ++ ;
src [ MAINVERSIONLOOSE ] = '(' + src [ NUMERICIDENTIFIERLOOSE ] + ')\\.' +
'(' + src [ NUMERICIDENTIFIERLOOSE ] + ')\\.' +
'(' + src [ NUMERICIDENTIFIERLOOSE ] + ')' ;
// ## Pre-release Version Identifier
// A numeric identifier, or a non-numeric identifier.
var PRERELEASEIDENTIFIER = R ++ ;
src [ PRERELEASEIDENTIFIER ] = '(?:' + src [ NUMERICIDENTIFIER ] +
'|' + src [ NONNUMERICIDENTIFIER ] + ')' ;
var PRERELEASEIDENTIFIERLOOSE = R ++ ;
src [ PRERELEASEIDENTIFIERLOOSE ] = '(?:' + src [ NUMERICIDENTIFIERLOOSE ] +
'|' + src [ NONNUMERICIDENTIFIER ] + ')' ;
// ## Pre-release Version
// Hyphen, followed by one or more dot-separated pre-release version
// identifiers.
var PRERELEASE = R ++ ;
src [ PRERELEASE ] = '(?:-(' + src [ PRERELEASEIDENTIFIER ] +
'(?:\\.' + src [ PRERELEASEIDENTIFIER ] + ')*))' ;
var PRERELEASELOOSE = R ++ ;
src [ PRERELEASELOOSE ] = '(?:-?(' + src [ PRERELEASEIDENTIFIERLOOSE ] +
'(?:\\.' + src [ PRERELEASEIDENTIFIERLOOSE ] + ')*))' ;
// ## Build Metadata Identifier
// Any combination of digits, letters, or hyphens.
var BUILDIDENTIFIER = R ++ ;
src [ BUILDIDENTIFIER ] = '[0-9A-Za-z-]+' ;
// ## Build Metadata
// Plus sign, followed by one or more period-separated build metadata
// identifiers.
var BUILD = R ++ ;
src [ BUILD ] = '(?:\\+(' + src [ BUILDIDENTIFIER ] +
'(?:\\.' + src [ BUILDIDENTIFIER ] + ')*))' ;
// ## Full Version String
// A main version, followed optionally by a pre-release version and
// build metadata.
// Note that the only major, minor, patch, and pre-release sections of
// the version string are capturing groups. The build metadata is not a
// capturing group, because it should not ever be used in version
// comparison.
var FULL = R ++ ;
var FULLPLAIN = 'v?' + src [ MAINVERSION ] +
src [ PRERELEASE ] + '?' +
src [ BUILD ] + '?' ;
src [ FULL ] = '^' + FULLPLAIN + '$' ;
// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.
// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty
// common in the npm registry.
var LOOSEPLAIN = '[v=\\s]*' + src [ MAINVERSIONLOOSE ] +
src [ PRERELEASELOOSE ] + '?' +
src [ BUILD ] + '?' ;
var LOOSE = R ++ ;
src [ LOOSE ] = '^' + LOOSEPLAIN + '$' ;
var GTLT = R ++ ;
src [ GTLT ] = '((?:<|>)?=?)' ;
// Something like "2.*" or "1.2.x".
// Note that "x.x" is a valid xRange identifer, meaning "any version"
// Only the first item is strictly required.
var XRANGEIDENTIFIERLOOSE = R ++ ;
src [ XRANGEIDENTIFIERLOOSE ] = src [ NUMERICIDENTIFIERLOOSE ] + '|x|X|\\*' ;
var XRANGEIDENTIFIER = R ++ ;
src [ XRANGEIDENTIFIER ] = src [ NUMERICIDENTIFIER ] + '|x|X|\\*' ;
var XRANGEPLAIN = R ++ ;
src [ XRANGEPLAIN ] = '[v=\\s]*(' + src [ XRANGEIDENTIFIER ] + ')' +
'(?:\\.(' + src [ XRANGEIDENTIFIER ] + ')' +
'(?:\\.(' + src [ XRANGEIDENTIFIER ] + ')' +
'(?:' + src [ PRERELEASE ] + ')?' +
src [ BUILD ] + '?' +
')?)?' ;
var XRANGEPLAINLOOSE = R ++ ;
src [ XRANGEPLAINLOOSE ] = '[v=\\s]*(' + src [ XRANGEIDENTIFIERLOOSE ] + ')' +
'(?:\\.(' + src [ XRANGEIDENTIFIERLOOSE ] + ')' +
'(?:\\.(' + src [ XRANGEIDENTIFIERLOOSE ] + ')' +
'(?:' + src [ PRERELEASELOOSE ] + ')?' +
src [ BUILD ] + '?' +
')?)?' ;
var XRANGE = R ++ ;
src [ XRANGE ] = '^' + src [ GTLT ] + '\\s*' + src [ XRANGEPLAIN ] + '$' ;
var XRANGELOOSE = R ++ ;
src [ XRANGELOOSE ] = '^' + src [ GTLT ] + '\\s*' + src [ XRANGEPLAINLOOSE ] + '$' ;
// Tilde ranges.
// Meaning is "reasonably at or greater than"
var LONETILDE = R ++ ;
src [ LONETILDE ] = '(?:~>?)' ;
var TILDETRIM = R ++ ;
src [ TILDETRIM ] = '(\\s*)' + src [ LONETILDE ] + '\\s+' ;
re [ TILDETRIM ] = new RegExp ( src [ TILDETRIM ] , 'g' ) ;
var tildeTrimReplace = '$1~' ;
var TILDE = R ++ ;
src [ TILDE ] = '^' + src [ LONETILDE ] + src [ XRANGEPLAIN ] + '$' ;
var TILDELOOSE = R ++ ;
src [ TILDELOOSE ] = '^' + src [ LONETILDE ] + src [ XRANGEPLAINLOOSE ] + '$' ;
// Caret ranges.
// Meaning is "at least and backwards compatible with"
var LONECARET = R ++ ;
src [ LONECARET ] = '(?:\\^)' ;
var CARETTRIM = R ++ ;
src [ CARETTRIM ] = '(\\s*)' + src [ LONECARET ] + '\\s+' ;
re [ CARETTRIM ] = new RegExp ( src [ CARETTRIM ] , 'g' ) ;
var caretTrimReplace = '$1^' ;
var CARET = R ++ ;
src [ CARET ] = '^' + src [ LONECARET ] + src [ XRANGEPLAIN ] + '$' ;
var CARETLOOSE = R ++ ;
src [ CARETLOOSE ] = '^' + src [ LONECARET ] + src [ XRANGEPLAINLOOSE ] + '$' ;
// A simple gt/lt/eq thing, or just "" to indicate "any version"
var COMPARATORLOOSE = R ++ ;
src [ COMPARATORLOOSE ] = '^' + src [ GTLT ] + '\\s*(' + LOOSEPLAIN + ')$|^$' ;
var COMPARATOR = R ++ ;
src [ COMPARATOR ] = '^' + src [ GTLT ] + '\\s*(' + FULLPLAIN + ')$|^$' ;
// An expression to strip any whitespace between the gtlt and the thing
// it modifies, so that `> 1.2.3` ==> `>1.2.3`
var COMPARATORTRIM = R ++ ;
src [ COMPARATORTRIM ] = '(\\s*)' + src [ GTLT ] +
'\\s*(' + LOOSEPLAIN + '|' + src [ XRANGEPLAIN ] + ')' ;
// this one has to use the /g flag
re [ COMPARATORTRIM ] = new RegExp ( src [ COMPARATORTRIM ] , 'g' ) ;
var comparatorTrimReplace = '$1$2$3' ;
// Something like `1.2.3 - 1.2.4`
// Note that these all use the loose form, because they'll be
// checked against either the strict or loose comparator form
// later.
var HYPHENRANGE = R ++ ;
src [ HYPHENRANGE ] = '^\\s*(' + src [ XRANGEPLAIN ] + ')' +
'\\s+-\\s+' +
'(' + src [ XRANGEPLAIN ] + ')' +
'\\s*$' ;
var HYPHENRANGELOOSE = R ++ ;
src [ HYPHENRANGELOOSE ] = '^\\s*(' + src [ XRANGEPLAINLOOSE ] + ')' +
'\\s+-\\s+' +
'(' + src [ XRANGEPLAINLOOSE ] + ')' +
'\\s*$' ;
// Star ranges basically just allow anything at all.
var STAR = R ++ ;
src [ STAR ] = '(<|>)?=?\\s*\\*' ;
// Compile to actual regexp objects.
// All are flag-free, unless they were created above with a flag.
for ( var i = 0 ; i < R ; i ++ ) {
debug ( i , src [ i ] ) ;
if ( ! re [ i ] )
re [ i ] = new RegExp ( src [ i ] ) ;
}
exports . parse = parse ;
function parse ( version , loose ) {
var r = loose ? re [ LOOSE ] : re [ FULL ] ;
return ( r . test ( version ) ) ? new SemVer ( version , loose ) : null ;
}
exports . valid = valid ;
function valid ( version , loose ) {
var v = parse ( version , loose ) ;
return v ? v . version : null ;
}
exports . clean = clean ;
function clean ( version , loose ) {
var s = parse ( version . trim ( ) . replace ( /^[=v]+/ , '' ) , loose ) ;
return s ? s . version : null ;
}
exports . SemVer = SemVer ;
function SemVer ( version , loose ) {
if ( version instanceof SemVer ) {
if ( version . loose === loose )
return version ;
else
version = version . version ;
} else if ( typeof version !== 'string' ) {
throw new TypeError ( 'Invalid Version: ' + version ) ;
}
if ( ! ( this instanceof SemVer ) )
return new SemVer ( version , loose ) ;
debug ( 'SemVer' , version , loose ) ;
this . loose = loose ;
var m = version . trim ( ) . match ( loose ? re [ LOOSE ] : re [ FULL ] ) ;
if ( ! m )
throw new TypeError ( 'Invalid Version: ' + version ) ;
this . raw = version ;
// these are actually numbers
this . major = + m [ 1 ] ;
this . minor = + m [ 2 ] ;
this . patch = + m [ 3 ] ;
// numberify any prerelease numeric ids
if ( ! m [ 4 ] )
this . prerelease = [ ] ;
else
this . prerelease = m [ 4 ] . split ( '.' ) . map ( function ( id ) {
return ( /^[0-9]+$/ . test ( id ) ) ? + id : id ;
} ) ;
this . build = m [ 5 ] ? m [ 5 ] . split ( '.' ) : [ ] ;
this . format ( ) ;
}
SemVer . prototype . format = function ( ) {
this . version = this . major + '.' + this . minor + '.' + this . patch ;
if ( this . prerelease . length )
this . version += '-' + this . prerelease . join ( '.' ) ;
return this . version ;
} ;
SemVer . prototype . inspect = function ( ) {
return '<SemVer "' + this + '">' ;
} ;
SemVer . prototype . toString = function ( ) {
return this . version ;
} ;
SemVer . prototype . compare = function ( other ) {
debug ( 'SemVer.compare' , this . version , this . loose , other ) ;
if ( ! ( other instanceof SemVer ) )
other = new SemVer ( other , this . loose ) ;
return this . compareMain ( other ) || this . comparePre ( other ) ;
} ;
SemVer . prototype . compareMain = function ( other ) {
if ( ! ( other instanceof SemVer ) )
other = new SemVer ( other , this . loose ) ;
return compareIdentifiers ( this . major , other . major ) ||
compareIdentifiers ( this . minor , other . minor ) ||
compareIdentifiers ( this . patch , other . patch ) ;
} ;
SemVer . prototype . comparePre = function ( other ) {
if ( ! ( other instanceof SemVer ) )
other = new SemVer ( other , this . loose ) ;
// NOT having a prerelease is > having one
if ( this . prerelease . length && ! other . prerelease . length )
return - 1 ;
else if ( ! this . prerelease . length && other . prerelease . length )
return 1 ;
else if ( ! this . prerelease . length && ! other . prerelease . length )
return 0 ;
var i = 0 ;
do {
var a = this . prerelease [ i ] ;
var b = other . prerelease [ i ] ;
debug ( 'prerelease compare' , i , a , b ) ;
if ( a === undefined && b === undefined )
return 0 ;
else if ( b === undefined )
return 1 ;
else if ( a === undefined )
return - 1 ;
else if ( a === b )
continue ;
else
return compareIdentifiers ( a , b ) ;
} while ( ++ i ) ;
} ;
// preminor will bump the version up to the next minor release, and immediately
// down to pre-release. premajor and prepatch work the same way.
SemVer . prototype . inc = function ( release , identifier ) {
switch ( release ) {
case 'premajor' :
this . prerelease . length = 0 ;
this . patch = 0 ;
this . minor = 0 ;
this . major ++ ;
this . inc ( 'pre' , identifier ) ;
break ;
case 'preminor' :
this . prerelease . length = 0 ;
this . patch = 0 ;
this . minor ++ ;
this . inc ( 'pre' , identifier ) ;
break ;
case 'prepatch' :
// If this is already a prerelease, it will bump to the next version
// drop any prereleases that might already exist, since they are not
// relevant at this point.
this . prerelease . length = 0 ;
this . inc ( 'patch' , identifier ) ;
this . inc ( 'pre' , identifier ) ;
break ;
// If the input is a non-prerelease version, this acts the same as
// prepatch.
case 'prerelease' :
if ( this . prerelease . length === 0 )
this . inc ( 'patch' , identifier ) ;
this . inc ( 'pre' , identifier ) ;
break ;
case 'major' :
// If this is a pre-major version, bump up to the same major version.
// Otherwise increment major.
// 1.0.0-5 bumps to 1.0.0
// 1.1.0 bumps to 2.0.0
if ( this . minor !== 0 || this . patch !== 0 || this . prerelease . length === 0 )
this . major ++ ;
this . minor = 0 ;
this . patch = 0 ;
this . prerelease = [ ] ;
break ;
case 'minor' :
// If this is a pre-minor version, bump up to the same minor version.
// Otherwise increment minor.
// 1.2.0-5 bumps to 1.2.0
// 1.2.1 bumps to 1.3.0
if ( this . patch !== 0 || this . prerelease . length === 0 )
this . minor ++ ;
this . patch = 0 ;
this . prerelease = [ ] ;
break ;
case 'patch' :
// If this is not a pre-release version, it will increment the patch.
// If it is a pre-release it will bump up to the same patch version.
// 1.2.0-5 patches to 1.2.0
// 1.2.0 patches to 1.2.1
if ( this . prerelease . length === 0 )
this . patch ++ ;
this . prerelease = [ ] ;
break ;
// This probably shouldn't be used publicly.
// 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction.
case 'pre' :
if ( this . prerelease . length === 0 )
this . prerelease = [ 0 ] ;
else {
var i = this . prerelease . length ;
while ( -- i >= 0 ) {
if ( typeof this . prerelease [ i ] === 'number' ) {
this . prerelease [ i ] ++ ;
i = - 2 ;
}
}
if ( i === - 1 ) // didn't increment anything
this . prerelease . push ( 0 ) ;
}
if ( identifier ) {
// 1.2.0-beta.1 bumps to 1.2.0-beta.2,
// 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
if ( this . prerelease [ 0 ] === identifier ) {
if ( isNaN ( this . prerelease [ 1 ] ) )
this . prerelease = [ identifier , 0 ] ;
} else
this . prerelease = [ identifier , 0 ] ;
}
break ;
default :
throw new Error ( 'invalid increment argument: ' + release ) ;
}
this . format ( ) ;
return this ;
} ;
exports . inc = inc ;
function inc ( version , release , loose , identifier ) {
if ( typeof ( loose ) === 'string' ) {
identifier = loose ;
loose = undefined ;
}
try {
return new SemVer ( version , loose ) . inc ( release , identifier ) . version ;
} catch ( er ) {
return null ;
}
}
exports . compareIdentifiers = compareIdentifiers ;
var numeric = /^[0-9]+$/ ;
function compareIdentifiers ( a , b ) {
var anum = numeric . test ( a ) ;
var bnum = numeric . test ( b ) ;
if ( anum && bnum ) {
a = + a ;
b = + b ;
}
return ( anum && ! bnum ) ? - 1 :
( bnum && ! anum ) ? 1 :
a < b ? - 1 :
a > b ? 1 :
0 ;
}
exports . rcompareIdentifiers = rcompareIdentifiers ;
function rcompareIdentifiers ( a , b ) {
return compareIdentifiers ( b , a ) ;
}
exports . compare = compare ;
function compare ( a , b , loose ) {
return new SemVer ( a , loose ) . compare ( b ) ;
}
exports . compareLoose = compareLoose ;
function compareLoose ( a , b ) {
return compare ( a , b , true ) ;
}
exports . rcompare = rcompare ;
function rcompare ( a , b , loose ) {
return compare ( b , a , loose ) ;
}
exports . sort = sort ;
function sort ( list , loose ) {
return list . sort ( function ( a , b ) {
return exports . compare ( a , b , loose ) ;
} ) ;
}
exports . rsort = rsort ;
function rsort ( list , loose ) {
return list . sort ( function ( a , b ) {
return exports . rcompare ( a , b , loose ) ;
} ) ;
}
exports . gt = gt ;
function gt ( a , b , loose ) {
return compare ( a , b , loose ) > 0 ;
}
exports . lt = lt ;
function lt ( a , b , loose ) {
return compare ( a , b , loose ) < 0 ;
}
exports . eq = eq ;
function eq ( a , b , loose ) {
return compare ( a , b , loose ) === 0 ;
}
exports . neq = neq ;
function neq ( a , b , loose ) {
return compare ( a , b , loose ) !== 0 ;
}
exports . gte = gte ;
function gte ( a , b , loose ) {
return compare ( a , b , loose ) >= 0 ;
}
exports . lte = lte ;
function lte ( a , b , loose ) {
return compare ( a , b , loose ) <= 0 ;
}
exports . cmp = cmp ;
function cmp ( a , op , b , loose ) {
var ret ;
switch ( op ) {
case '===' :
if ( typeof a === 'object' ) a = a . version ;
if ( typeof b === 'object' ) b = b . version ;
ret = a === b ;
break ;
case '!==' :
if ( typeof a === 'object' ) a = a . version ;
if ( typeof b === 'object' ) b = b . version ;
ret = a !== b ;
break ;
case '' : case '=' : case '==' : ret = eq ( a , b , loose ) ; break ;
case '!=' : ret = neq ( a , b , loose ) ; break ;
case '>' : ret = gt ( a , b , loose ) ; break ;
case '>=' : ret = gte ( a , b , loose ) ; break ;
case '<' : ret = lt ( a , b , loose ) ; break ;
case '<=' : ret = lte ( a , b , loose ) ; break ;
default : throw new TypeError ( 'Invalid operator: ' + op ) ;
}
return ret ;
}
exports . Comparator = Comparator ;
function Comparator ( comp , loose ) {
if ( comp instanceof Comparator ) {
if ( comp . loose === loose )
return comp ;
else
comp = comp . value ;
}
if ( ! ( this instanceof Comparator ) )
return new Comparator ( comp , loose ) ;
debug ( 'comparator' , comp , loose ) ;
this . loose = loose ;
this . parse ( comp ) ;
if ( this . semver === ANY )
this . value = '' ;
else
this . value = this . operator + this . semver . version ;
debug ( 'comp' , this ) ;
}
var ANY = { } ;
Comparator . prototype . parse = function ( comp ) {
var r = this . loose ? re [ COMPARATORLOOSE ] : re [ COMPARATOR ] ;
var m = comp . match ( r ) ;
if ( ! m )
throw new TypeError ( 'Invalid comparator: ' + comp ) ;
this . operator = m [ 1 ] ;
if ( this . operator === '=' )
this . operator = '' ;
// if it literally is just '>' or '' then allow anything.
if ( ! m [ 2 ] )
this . semver = ANY ;
else
this . semver = new SemVer ( m [ 2 ] , this . loose ) ;
} ;
Comparator . prototype . inspect = function ( ) {
return '<SemVer Comparator "' + this + '">' ;
} ;
Comparator . prototype . toString = function ( ) {
return this . value ;
} ;
Comparator . prototype . test = function ( version ) {
debug ( 'Comparator.test' , version , this . loose ) ;
if ( this . semver === ANY )
return true ;
if ( typeof version === 'string' )
version = new SemVer ( version , this . loose ) ;
return cmp ( version , this . operator , this . semver , this . loose ) ;
} ;
exports . Range = Range ;
function Range ( range , loose ) {
if ( ( range instanceof Range ) && range . loose === loose )
return range ;
if ( ! ( this instanceof Range ) )
return new Range ( range , loose ) ;
this . loose = loose ;
// First, split based on boolean or ||
this . raw = range ;
this . set = range . split ( /\s*\|\|\s*/ ) . map ( function ( range ) {
return this . parseRange ( range . trim ( ) ) ;
} , this ) . filter ( function ( c ) {
// throw out any that are not relevant for whatever reason
return c . length ;
} ) ;
if ( ! this . set . length ) {
throw new TypeError ( 'Invalid SemVer Range: ' + range ) ;
}
this . format ( ) ;
}
Range . prototype . inspect = function ( ) {
return '<SemVer Range "' + this . range + '">' ;
} ;
Range . prototype . format = function ( ) {
this . range = this . set . map ( function ( comps ) {
return comps . join ( ' ' ) . trim ( ) ;
} ) . join ( '||' ) . trim ( ) ;
return this . range ;
} ;
Range . prototype . toString = function ( ) {
return this . range ;
} ;
Range . prototype . parseRange = function ( range ) {
var loose = this . loose ;
range = range . trim ( ) ;
debug ( 'range' , range , loose ) ;
// `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`
var hr = loose ? re [ HYPHENRANGELOOSE ] : re [ HYPHENRANGE ] ;
range = range . replace ( hr , hyphenReplace ) ;
debug ( 'hyphen replace' , range ) ;
// `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`
range = range . replace ( re [ COMPARATORTRIM ] , comparatorTrimReplace ) ;
debug ( 'comparator trim' , range , re [ COMPARATORTRIM ] ) ;
// `~ 1.2.3` => `~1.2.3`
range = range . replace ( re [ TILDETRIM ] , tildeTrimReplace ) ;
// `^ 1.2.3` => `^1.2.3`
range = range . replace ( re [ CARETTRIM ] , caretTrimReplace ) ;
// normalize spaces
range = range . split ( /\s+/ ) . join ( ' ' ) ;
// At this point, the range is completely trimmed and
// ready to be split into comparators.
var compRe = loose ? re [ COMPARATORLOOSE ] : re [ COMPARATOR ] ;
var set = range . split ( ' ' ) . map ( function ( comp ) {
return parseComparator ( comp , loose ) ;
} ) . join ( ' ' ) . split ( /\s+/ ) ;
if ( this . loose ) {
// in loose mode, throw out any that are not valid comparators
set = set . filter ( function ( comp ) {
return ! ! comp . match ( compRe ) ;
} ) ;
}
set = set . map ( function ( comp ) {
return new Comparator ( comp , loose ) ;
} ) ;
return set ;
} ;
// Mostly just for testing and legacy API reasons
exports . toComparators = toComparators ;
function toComparators ( range , loose ) {
return new Range ( range , loose ) . set . map ( function ( comp ) {
return comp . map ( function ( c ) {
return c . value ;
} ) . join ( ' ' ) . trim ( ) . split ( ' ' ) ;
} ) ;
}
// comprised of xranges, tildes, stars, and gtlt's at this point.
// already replaced the hyphen ranges
// turn into a set of JUST comparators.
function parseComparator ( comp , loose ) {
debug ( 'comp' , comp ) ;
comp = replaceCarets ( comp , loose ) ;
debug ( 'caret' , comp ) ;
comp = replaceTildes ( comp , loose ) ;
debug ( 'tildes' , comp ) ;
comp = replaceXRanges ( comp , loose ) ;
debug ( 'xrange' , comp ) ;
comp = replaceStars ( comp , loose ) ;
debug ( 'stars' , comp ) ;
return comp ;
}
function isX ( id ) {
return ! id || id . toLowerCase ( ) === 'x' || id === '*' ;
}
// ~, ~> --> * (any, kinda silly)
// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0
// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0
// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0
// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0
// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0
function replaceTildes ( comp , loose ) {
return comp . trim ( ) . split ( /\s+/ ) . map ( function ( comp ) {
return replaceTilde ( comp , loose ) ;
} ) . join ( ' ' ) ;
}
function replaceTilde ( comp , loose ) {
var r = loose ? re [ TILDELOOSE ] : re [ TILDE ] ;
return comp . replace ( r , function ( _ , M , m , p , pr ) {
debug ( 'tilde' , comp , _ , M , m , p , pr ) ;
var ret ;
if ( isX ( M ) )
ret = '' ;
else if ( isX ( m ) )
ret = '>=' + M + '.0.0 <' + ( + M + 1 ) + '.0.0' ;
else if ( isX ( p ) )
// ~1.2 == >=1.2.0- <1.3.0-
ret = '>=' + M + '.' + m + '.0 <' + M + '.' + ( + m + 1 ) + '.0' ;
else if ( pr ) {
debug ( 'replaceTilde pr' , pr ) ;
if ( pr . charAt ( 0 ) !== '-' )
pr = '-' + pr ;
ret = '>=' + M + '.' + m + '.' + p + pr +
' <' + M + '.' + ( + m + 1 ) + '.0' ;
} else
// ~1.2.3 == >=1.2.3 <1.3.0
ret = '>=' + M + '.' + m + '.' + p +
' <' + M + '.' + ( + m + 1 ) + '.0' ;
debug ( 'tilde return' , ret ) ;
return ret ;
} ) ;
}
// ^ --> * (any, kinda silly)
// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0
// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0
// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0
// ^1.2.3 --> >=1.2.3 <2.0.0
// ^1.2.0 --> >=1.2.0 <2.0.0
function replaceCarets ( comp , loose ) {
return comp . trim ( ) . split ( /\s+/ ) . map ( function ( comp ) {
return replaceCaret ( comp , loose ) ;
} ) . join ( ' ' ) ;
}
function replaceCaret ( comp , loose ) {
debug ( 'caret' , comp , loose ) ;
var r = loose ? re [ CARETLOOSE ] : re [ CARET ] ;
return comp . replace ( r , function ( _ , M , m , p , pr ) {
debug ( 'caret' , comp , _ , M , m , p , pr ) ;
var ret ;
if ( isX ( M ) )
ret = '' ;
else if ( isX ( m ) )
ret = '>=' + M + '.0.0 <' + ( + M + 1 ) + '.0.0' ;
else if ( isX ( p ) ) {
if ( M === '0' )
ret = '>=' + M + '.' + m + '.0 <' + M + '.' + ( + m + 1 ) + '.0' ;
else
ret = '>=' + M + '.' + m + '.0 <' + ( + M + 1 ) + '.0.0' ;
} else if ( pr ) {
debug ( 'replaceCaret pr' , pr ) ;
if ( pr . charAt ( 0 ) !== '-' )
pr = '-' + pr ;
if ( M === '0' ) {
if ( m === '0' )
ret = '>=' + M + '.' + m + '.' + p + pr +
' <' + M + '.' + m + '.' + ( + p + 1 ) ;
else
ret = '>=' + M + '.' + m + '.' + p + pr +
' <' + M + '.' + ( + m + 1 ) + '.0' ;
} else
ret = '>=' + M + '.' + m + '.' + p + pr +
' <' + ( + M + 1 ) + '.0.0' ;
} else {
debug ( 'no pr' ) ;
if ( M === '0' ) {
if ( m === '0' )
ret = '>=' + M + '.' + m + '.' + p +
' <' + M + '.' + m + '.' + ( + p + 1 ) ;
else
ret = '>=' + M + '.' + m + '.' + p +
' <' + M + '.' + ( + m + 1 ) + '.0' ;
} else
ret = '>=' + M + '.' + m + '.' + p +
' <' + ( + M + 1 ) + '.0.0' ;
}
debug ( 'caret return' , ret ) ;
return ret ;
} ) ;
}
function replaceXRanges ( comp , loose ) {
debug ( 'replaceXRanges' , comp , loose ) ;
return comp . split ( /\s+/ ) . map ( function ( comp ) {
return replaceXRange ( comp , loose ) ;
} ) . join ( ' ' ) ;
}
function replaceXRange ( comp , loose ) {
comp = comp . trim ( ) ;
var r = loose ? re [ XRANGELOOSE ] : re [ XRANGE ] ;
return comp . replace ( r , function ( ret , gtlt , M , m , p , pr ) {
debug ( 'xRange' , comp , ret , gtlt , M , m , p , pr ) ;
var xM = isX ( M ) ;
var xm = xM || isX ( m ) ;
var xp = xm || isX ( p ) ;
var anyX = xp ;
if ( gtlt === '=' && anyX )
gtlt = '' ;
if ( xM ) {
if ( gtlt === '>' || gtlt === '<' ) {
// nothing is allowed
ret = '<0.0.0' ;
} else {
// nothing is forbidden
ret = '*' ;
}
} else if ( gtlt && anyX ) {
// replace X with 0
if ( xm )
m = 0 ;
if ( xp )
p = 0 ;
if ( gtlt === '>' ) {
// >1 => >=2.0.0
// >1.2 => >=1.3.0
// >1.2.3 => >= 1.2.4
gtlt = '>=' ;
if ( xm ) {
M = + M + 1 ;
m = 0 ;
p = 0 ;
} else if ( xp ) {
m = + m + 1 ;
p = 0 ;
}
} else if ( gtlt === '<=' ) {
// <=0.7.x is actually <0.8.0, since any 0.7.x should
// pass. Similarly, <=7.x is actually <8.0.0, etc.
gtlt = '<'
if ( xm )
M = + M + 1
else
m = + m + 1
}
ret = gtlt + M + '.' + m + '.' + p ;
} else if ( xm ) {
ret = '>=' + M + '.0.0 <' + ( + M + 1 ) + '.0.0' ;
} else if ( xp ) {
ret = '>=' + M + '.' + m + '.0 <' + M + '.' + ( + m + 1 ) + '.0' ;
}
debug ( 'xRange return' , ret ) ;
return ret ;
} ) ;
}
// Because * is AND-ed with everything else in the comparator,
// and '' means "any version", just remove the *s entirely.
function replaceStars ( comp , loose ) {
debug ( 'replaceStars' , comp , loose ) ;
// Looseness is ignored here. star is always as loose as it gets!
return comp . trim ( ) . replace ( re [ STAR ] , '' ) ;
}
// This function is passed to string.replace(re[HYPHENRANGE])
// M, m, patch, prerelease, build
// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do
// 1.2 - 3.4 => >=1.2.0 <3.5.0
function hyphenReplace ( $0 ,
from , fM , fm , fp , fpr , fb ,
to , tM , tm , tp , tpr , tb ) {
if ( isX ( fM ) )
from = '' ;
else if ( isX ( fm ) )
from = '>=' + fM + '.0.0' ;
else if ( isX ( fp ) )
from = '>=' + fM + '.' + fm + '.0' ;
else
from = '>=' + from ;
if ( isX ( tM ) )
to = '' ;
else if ( isX ( tm ) )
to = '<' + ( + tM + 1 ) + '.0.0' ;
else if ( isX ( tp ) )
to = '<' + tM + '.' + ( + tm + 1 ) + '.0' ;
else if ( tpr )
to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr ;
else
to = '<=' + to ;
return ( from + ' ' + to ) . trim ( ) ;
}
// if ANY of the sets match ALL of its comparators, then pass
Range . prototype . test = function ( version ) {
if ( ! version )
return false ;
if ( typeof version === 'string' )
version = new SemVer ( version , this . loose ) ;
for ( var i = 0 ; i < this . set . length ; i ++ ) {
if ( testSet ( this . set [ i ] , version ) )
return true ;
}
return false ;
} ;
function testSet ( set , version ) {
for ( var i = 0 ; i < set . length ; i ++ ) {
if ( ! set [ i ] . test ( version ) )
return false ;
}
if ( version . prerelease . length ) {
// Find the set of versions that are allowed to have prereleases
// For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0
// That should allow `1.2.3-pr.2` to pass.
// However, `1.2.4-alpha.notready` should NOT be allowed,
// even though it's within the range set by the comparators.
for ( var i = 0 ; i < set . length ; i ++ ) {
debug ( set [ i ] . semver ) ;
if ( set [ i ] . semver === ANY )
return true ;
if ( set [ i ] . semver . prerelease . length > 0 ) {
var allowed = set [ i ] . semver ;
if ( allowed . major === version . major &&
allowed . minor === version . minor &&
allowed . patch === version . patch )
return true ;
}
}
// Version has a -pre, but it's not one of the ones we like.
return false ;
}
return true ;
}
exports . satisfies = satisfies ;
function satisfies ( version , range , loose ) {
try {
range = new Range ( range , loose ) ;
} catch ( er ) {
return false ;
}
return range . test ( version ) ;
}
exports . maxSatisfying = maxSatisfying ;
function maxSatisfying ( versions , range , loose ) {
return versions . filter ( function ( version ) {
return satisfies ( version , range , loose ) ;
} ) . sort ( function ( a , b ) {
return rcompare ( a , b , loose ) ;
} ) [ 0 ] || null ;
}
exports . validRange = validRange ;
function validRange ( range , loose ) {
try {
// Return '*' instead of '' so that truthiness works.
// This will throw if it's invalid anyway
return new Range ( range , loose ) . range || '*' ;
} catch ( er ) {
return null ;
}
}
// Determine if version is less than all the versions possible in the range
exports . ltr = ltr ;
function ltr ( version , range , loose ) {
return outside ( version , range , '<' , loose ) ;
}
// Determine if version is greater than all the versions possible in the range.
exports . gtr = gtr ;
function gtr ( version , range , loose ) {
return outside ( version , range , '>' , loose ) ;
}
exports . outside = outside ;
function outside ( version , range , hilo , loose ) {
version = new SemVer ( version , loose ) ;
range = new Range ( range , loose ) ;
var gtfn , ltefn , ltfn , comp , ecomp ;
switch ( hilo ) {
case '>' :
gtfn = gt ;
ltefn = lte ;
ltfn = lt ;
comp = '>' ;
ecomp = '>=' ;
break ;
case '<' :
gtfn = lt ;
ltefn = gte ;
ltfn = gt ;
comp = '<' ;
ecomp = '<=' ;
break ;
default :
throw new TypeError ( 'Must provide a hilo val of "<" or ">"' ) ;
}
// If it satisifes the range it is not outside
if ( satisfies ( version , range , loose ) ) {
return false ;
}
// From now on, variable terms are as if we're in "gtr" mode.
// but note that everything is flipped for the "ltr" function.
for ( var i = 0 ; i < range . set . length ; ++ i ) {
var comparators = range . set [ i ] ;
var high = null ;
var low = null ;
comparators . forEach ( function ( comparator ) {
high = high || comparator ;
low = low || comparator ;
if ( gtfn ( comparator . semver , high . semver , loose ) ) {
high = comparator ;
} else if ( ltfn ( comparator . semver , low . semver , loose ) ) {
low = comparator ;
}
} ) ;
// If the edge version comparator has a operator then our version
// isn't outside it
if ( high . operator === comp || high . operator === ecomp ) {
return false ;
}
// If the lowest version comparator has an operator and our version
// is less than it then it isn't higher than the range
if ( ( ! low . operator || low . operator === comp ) &&
ltefn ( version , low . semver ) ) {
return false ;
} else if ( low . operator === ecomp && ltfn ( version , low . semver ) ) {
return false ;
}
}
return true ;
}
// Use the define() function if we're in AMD land
if ( typeof define === 'function' && define . amd )
define ( exports ) ;
} ) . call ( this , require ( '_process' ) )
} , { "_process" : "/home/radek/dev/burnchart.io/node_modules/browserify/node_modules/process/browser.js" } ] } , { } , [ "/home/radek/dev/burnchart.io/src/app.coffee" ] )
2014-10-23 19:20:50 -07:00
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwiL2hvbWUvcmFkZWsvZGV2L2J1cm5jaGFydC5pby9zcmMvYXBwLmNvZmZlZSIsIi9ob21lL3JhZGVrL2Rldi9idXJuY2hhcnQuaW8vc3JjL21vZGVscy9jb25maWcuY29mZmVlIiwiL2hvbWUvcmFkZWsvZGV2L2J1cm5jaGFydC5pby9zcmMvbW9kZWxzL2ZpcmViYXNlLmNvZmZlZSIsIi9ob21lL3JhZGVrL2Rldi9idXJuY2hhcnQuaW8vc3JjL21vZGVscy9wcm9qZWN0cy5jb2ZmZWUiLCIvaG9tZS9yYWRlay9kZXYvYnVybmNoYXJ0LmlvL3NyYy9tb2RlbHMvc3lzdGVtLmNvZmZlZSIsIi9ob21lL3JhZGVrL2Rldi9idXJuY2hhcnQuaW8vc3JjL21vZGVscy91c2VyLmNvZmZlZSIsIi9ob21lL3JhZGVrL2Rldi9idXJuY2hhcnQuaW8vc3JjL21vZHVsZXMvY2hhcnQvYXhlcy5jb2ZmZWUiLCIvaG9tZS9yYWRlay9kZXYvYnVybmNoYXJ0LmlvL3NyYy9tb2R1bGVzL2NoYXJ0L2xpbmVzLmNvZmZlZSIsIi9ob21lL3JhZGVrL2Rldi9idXJuY2hhcnQuaW8vc3JjL21vZHVsZXMvZ2l0aHViL2lzc3Vlcy5jb2ZmZWUiLCIvaG9tZS9yYWRlay9kZXYvYnVybmNoYXJ0LmlvL3NyYy9tb2R1bGVzL2dpdGh1Yi9taWxlc3RvbmVzLmNvZmZlZSIsIi9ob21lL3JhZGVrL2Rldi9idXJuY2hhcnQuaW8vc3JjL21vZHVsZXMvZ2l0aHViL3JlcXVlc3QuY29mZmVlIiwiL2hvbWUvcmFkZWsvZGV2L2J1cm5jaGFydC5pby9zcmMvbW9kdWxlcy9tZWRpYXRvci5jb2ZmZWUiLCIvaG9tZS9yYWRlay9kZXYvYnVybmNoYXJ0LmlvL3NyYy9tb2R1bGVzL3JvdXRlci5jb2ZmZWUiLCIvaG9tZS9yYWRlay9kZXYvYnVybmNoYXJ0LmlvL3NyYy9tb2R1bGVzL3N0YXRzLmNvZmZlZSIsIi9ob21lL3JhZGVrL2Rldi9idXJuY2hhcnQuaW8vc3JjL21vZHVsZXMvdmVuZG9yLmNvZmZlZSIsInNyYy90ZW1wbGF0ZXMvYXBwLmh0bWwiLCJzcmMvdGVtcGxhdGVzL2NoYXJ0Lmh0bWwiLCJzcmMvdGVtcGxhdGVzL2hlYWRlci5odG1sIiwic3JjL3RlbXBsYXRlcy9oZXJvLmh0bWwiLCJzcmMvdGVtcGxhdGVzL2ljb25zLmh0bWwiLCJzcmMvdGVtcGxhdGVzL25vdGlmeS5odG1sIiwic3JjL3RlbXBsYXRlcy9wYWdlcy9pbmRleC5odG1sIiwic3JjL3RlbXBsYXRlcy9wYWdlcy9taWxlc3RvbmUuaHRtbCIsInNyYy90ZW1wbGF0ZXMvcGFnZXMvbmV3Lmh0bWwiLCJzcmMvdGVtcGxhdGVzL3BhZ2VzL3Byb2plY3QuaHRtbCIsInNyYy90ZW1wbGF0ZXMvdGFibGVzL21pbGVzdG9uZXMuaHRtbCIsInNyYy90ZW1wbGF0ZXMvdGFibGVzL3Byb2plY3RzLmh0bWwiLCIvaG9tZS9yYWRlay9kZXYvYnVybmNoYXJ0LmlvL3NyYy91dGlscy9kYXRlLmNvZmZlZSIsIi9ob21lL3JhZGVrL2Rldi9idXJuY2hhcnQuaW8vc3JjL3V0aWxzL2Zvcm1hdC5jb2ZmZWUiLCIvaG9tZS9yYWRlay9kZXYvYnVybmNoYXJ0LmlvL3NyYy91dGlscy9rZXkuY29mZmVlIiwiL2hvbWUvcmFkZWsvZGV2L2J1cm5jaGFydC5pby9zcmMvdXRpbHMvbWl4aW5zLmNvZmZlZSIsIi9ob21lL3JhZGVrL2Rldi9idXJuY2hhcnQuaW8vc3JjL3V0aWxzL21vZGVsLmNvZmZlZSIsIi9ob21lL3JhZGVrL2Rldi9idXJuY2hhcnQuaW8vc3JjL3ZpZXdzL2NoYXJ0LmNvZmZlZSIsIi9ob21lL3JhZGVrL2Rldi9idXJuY2hhcnQuaW8vc3JjL3ZpZXdzL2hlYWRlci5jb2ZmZWUiLCIvaG9tZS9yYWRlay9kZXYvYnVybmNoYXJ0LmlvL3NyYy92aWV3cy9oZXJvLmNvZmZlZSIsIi9ob21lL3JhZGVrL2Rldi9idXJuY2hhcnQuaW8vc3JjL3ZpZXdzL2ljb25zLmNvZmZlZSIsIi9ob21lL3JhZGVrL2Rldi9idXJuY2hhcnQuaW8vc3JjL3ZpZXdzL25vdGlmeS5jb2ZmZWUiLCIvaG9tZS9yYWRlay9kZXYvYnVybmNoYXJ0LmlvL3NyYy92aWV3cy9wYWdlcy9pbmRleC5jb2ZmZWUiLCIvaG9tZS9yYWRlay9kZXYvYnVybmNoYXJ0LmlvL3NyYy92aWV3cy9wYWdlcy9taWxlc3RvbmUuY29mZmVlIiwiL2hvbWUvcmFkZWsvZGV2L2J1cm5jaGFydC5pby9zcmMvdmlld3MvcGFnZXMvbmV3LmNvZmZlZSIsIi9ob21lL3JhZGVrL2Rldi9idXJuY2hhcnQuaW8vc3JjL3ZpZXdzL3BhZ2VzL3Byb2plY3QuY29mZmVlIiwiL2hvbWUvcmFkZWsvZGV2L2J1cm5jaGFydC5pby9zcmMvdmlld3MvdGFibGVzL21pbGVzdG9uZXMuY29mZmVlIiwiL2hvbWUvcmFkZWsvZGV2L2J1cm5jaGFydC5pby9zcmMvdmlld3MvdGFibGVzL3Byb2plY3RzLmNvZmZlZSIsIi9ob21lL3JhZGVrL2Rldi9idXJuY2hhcnQuaW8vc3JjL3ZpZXdzL3RhYmxlcy90YWJsZS5jb2ZmZWUiLCJ2ZW5kb3Ivbm9kZS1zZW12ZXIvc2VtdmVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RGQSxJQUFBLG9DQUFBOztBQUFBLFVBQWMsT0FBQSxDQUFRLHlCQUFSLEVBQVosT0FBRixDQUFBOztBQUFBLE9BRUEsQ0FBUSx1QkFBUixDQUZBLENBQUE7O0FBQUEsT0FJQSxDQUFRLDBCQUFSLENBSkEsQ0FBQTs7QUFBQSxNQU1BLEdBQVMsT0FBQSxDQUFRLHVCQUFSLENBTlQsQ0FBQTs7Q