Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

added istanbul code coverage and bumped deps

  • Loading branch information...
commit b22dc4e09a67e90a71ed42a786a0acb723be9f45 1 parent b979f9b
@twobit authored
View
4 .gitignore
@@ -1,4 +1,4 @@
node_modules
testing
-coverage.html
-lib-cov
+lib-cov
+html-report
View
16 Makefile
@@ -1,4 +1,6 @@
-all: bootstrap test
+BIN = ./node_modules/.bin
+
+all: bootstrap test coverage
bootstrap:
node bootstrap.js
@@ -6,10 +8,16 @@ bootstrap:
test:
npm test
-test-cov: lib-cov
- @GEAR_COV=1 mocha --require should --reporter html-cov > coverage.html
+coverage: lib-cov
+ @COVER=1 $(BIN)/mocha --require should --reporter mocha-istanbul
lib-cov:
- @jscoverage lib lib-cov
+ @$(BIN)/istanbul instrument --output lib-cov --no-compact --variable global.__coverage__ lib
+
+clean: clean-coverage
+
+clean-coverage:
+ -rm -rf lib-cov
+ -rm -rf html-report
.PHONY: test
View
466 build/gear.js
@@ -2038,20 +2038,17 @@ var requirejs, require, define;
define('async', ['require', 'exports', 'module'], function(require, exports, module) {
-/*global setTimeout: false, console: false */
+/*global setImmediate: false, setTimeout: false, console: false */
(function () {
var async = {};
// global on the server, window in the browser
- var root = this,
- previous_async = root.async;
+ var root, previous_async;
- if (typeof module !== 'undefined' && module.exports) {
- module.exports = async;
- }
- else {
- root.async = async;
+ root = this;
+ if (root != null) {
+ previous_async = root.async;
}
async.noConflict = function () {
@@ -2059,9 +2056,18 @@ define('async', ['require', 'exports', 'module'], function(require, exports, mod
return async;
};
+ function only_once(fn) {
+ var called = false;
+ return function() {
+ if (called) throw new Error("Callback was already called.");
+ called = true;
+ fn.apply(root, arguments);
+ }
+ }
+
//// cross-browser compatiblity functions ////
- var _forEach = function (arr, iterator) {
+ var _each = function (arr, iterator) {
if (arr.forEach) {
return arr.forEach(iterator);
}
@@ -2075,7 +2081,7 @@ define('async', ['require', 'exports', 'module'], function(require, exports, mod
return arr.map(iterator);
}
var results = [];
- _forEach(arr, function (x, i, a) {
+ _each(arr, function (x, i, a) {
results.push(iterator(x, i, a));
});
return results;
@@ -2085,7 +2091,7 @@ define('async', ['require', 'exports', 'module'], function(require, exports, mod
if (arr.reduce) {
return arr.reduce(iterator, memo);
}
- _forEach(arr, function (x, i, a) {
+ _each(arr, function (x, i, a) {
memo = iterator(memo, x, i, a);
});
return memo;
@@ -2108,43 +2114,52 @@ define('async', ['require', 'exports', 'module'], function(require, exports, mod
//// nextTick implementation with browser-compatible fallback ////
if (typeof process === 'undefined' || !(process.nextTick)) {
- async.nextTick = function (fn) {
- setTimeout(fn, 0);
- };
+ if (typeof setImmediate === 'function') {
+ async.nextTick = function (fn) {
+ setImmediate(fn);
+ };
+ }
+ else {
+ async.nextTick = function (fn) {
+ setTimeout(fn, 0);
+ };
+ }
}
else {
async.nextTick = process.nextTick;
}
- async.forEach = function (arr, iterator, callback) {
+ async.each = function (arr, iterator, callback) {
callback = callback || function () {};
if (!arr.length) {
return callback();
}
var completed = 0;
- _forEach(arr, function (x) {
- iterator(x, function (err) {
+ _each(arr, function (x) {
+ iterator(x, only_once(function (err) {
if (err) {
callback(err);
callback = function () {};
}
else {
completed += 1;
- if (completed === arr.length) {
+ if (completed >= arr.length) {
callback(null);
}
}
- });
+ }));
});
};
+ async.forEach = async.each;
- async.forEachSeries = function (arr, iterator, callback) {
+ async.eachSeries = function (arr, iterator, callback) {
callback = callback || function () {};
if (!arr.length) {
return callback();
}
var completed = 0;
var iterate = function () {
+ var sync = true;
iterator(arr[completed], function (err) {
if (err) {
callback(err);
@@ -2152,66 +2167,88 @@ define('async', ['require', 'exports', 'module'], function(require, exports, mod
}
else {
completed += 1;
- if (completed === arr.length) {
+ if (completed >= arr.length) {
callback(null);
}
else {
- iterate();
+ if (sync) {
+ async.nextTick(iterate);
+ }
+ else {
+ iterate();
+ }
}
}
});
+ sync = false;
};
iterate();
};
+ async.forEachSeries = async.eachSeries;
- async.forEachLimit = function (arr, limit, iterator, callback) {
- callback = callback || function () {};
- if (!arr.length || limit <= 0) {
- return callback();
- }
- var completed = 0;
- var started = 0;
- var running = 0;
+ async.eachLimit = function (arr, limit, iterator, callback) {
+ var fn = _eachLimit(limit);
+ fn.apply(null, [arr, iterator, callback]);
+ };
+ async.forEachLimit = async.eachLimit;
- (function replenish () {
- if (completed === arr.length) {
+ var _eachLimit = function (limit) {
+
+ return function (arr, iterator, callback) {
+ callback = callback || function () {};
+ if (!arr.length || limit <= 0) {
return callback();
}
-
- while (running < limit && started < arr.length) {
- started += 1;
- running += 1;
- iterator(arr[started - 1], function (err) {
- if (err) {
- callback(err);
- callback = function () {};
- }
- else {
- completed += 1;
- running -= 1;
- if (completed === arr.length) {
- callback();
+ var completed = 0;
+ var started = 0;
+ var running = 0;
+
+ (function replenish () {
+ if (completed >= arr.length) {
+ return callback();
+ }
+
+ while (running < limit && started < arr.length) {
+ started += 1;
+ running += 1;
+ iterator(arr[started - 1], function (err) {
+ if (err) {
+ callback(err);
+ callback = function () {};
}
else {
- replenish();
+ completed += 1;
+ running -= 1;
+ if (completed >= arr.length) {
+ callback();
+ }
+ else {
+ replenish();
+ }
}
- }
- });
- }
- })();
+ });
+ }
+ })();
+ };
};
var doParallel = function (fn) {
return function () {
var args = Array.prototype.slice.call(arguments);
- return fn.apply(null, [async.forEach].concat(args));
+ return fn.apply(null, [async.each].concat(args));
+ };
+ };
+ var doParallelLimit = function(limit, fn) {
+ return function () {
+ var args = Array.prototype.slice.call(arguments);
+ return fn.apply(null, [_eachLimit(limit)].concat(args));
};
};
var doSeries = function (fn) {
return function () {
var args = Array.prototype.slice.call(arguments);
- return fn.apply(null, [async.forEachSeries].concat(args));
+ return fn.apply(null, [async.eachSeries].concat(args));
};
};
@@ -2232,12 +2269,18 @@ define('async', ['require', 'exports', 'module'], function(require, exports, mod
};
async.map = doParallel(_asyncMap);
async.mapSeries = doSeries(_asyncMap);
+ async.mapLimit = function (arr, limit, iterator, callback) {
+ return _mapLimit(limit)(arr, iterator, callback);
+ };
+ var _mapLimit = function(limit) {
+ return doParallelLimit(limit, _asyncMap);
+ };
// reduce only has a series version, as doing reduce in parallel won't
// work in many situations.
async.reduce = function (arr, memo, iterator, callback) {
- async.forEachSeries(arr, function (x, callback) {
+ async.eachSeries(arr, function (x, callback) {
iterator(memo, x, function (err, v) {
memo = v;
callback(err);
@@ -2328,7 +2371,7 @@ define('async', ['require', 'exports', 'module'], function(require, exports, mod
async.detectSeries = doSeries(_detect);
async.some = function (arr, iterator, main_callback) {
- async.forEach(arr, function (x, callback) {
+ async.each(arr, function (x, callback) {
iterator(x, function (v) {
if (v) {
main_callback(true);
@@ -2344,7 +2387,7 @@ define('async', ['require', 'exports', 'module'], function(require, exports, mod
async.any = async.some;
async.every = function (arr, iterator, main_callback) {
- async.forEach(arr, function (x, callback) {
+ async.each(arr, function (x, callback) {
iterator(x, function (v) {
if (!v) {
main_callback(false);
@@ -2407,7 +2450,7 @@ define('async', ['require', 'exports', 'module'], function(require, exports, mod
}
};
var taskComplete = function () {
- _forEach(listeners.slice(0), function (fn) {
+ _each(listeners.slice(0), function (fn) {
fn();
});
};
@@ -2419,21 +2462,26 @@ define('async', ['require', 'exports', 'module'], function(require, exports, mod
}
});
- _forEach(keys, function (k) {
+ _each(keys, function (k) {
var task = (tasks[k] instanceof Function) ? [tasks[k]]: tasks[k];
var taskCallback = function (err) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ if (args.length <= 1) {
+ args = args[0];
+ }
if (err) {
- callback(err);
+ var safeResults = {};
+ _each(_keys(results), function(rkey) {
+ safeResults[rkey] = results[rkey];
+ });
+ safeResults[k] = args;
+ callback(err, safeResults);
// stop subsequent errors hitting callback multiple times
callback = function () {};
}
else {
- var args = Array.prototype.slice.call(arguments, 1);
- if (args.length <= 1) {
- args = args[0];
- }
results[k] = args;
- taskComplete();
+ async.nextTick(taskComplete);
}
};
var requires = task.slice(0, Math.abs(task.length - 1)) || [];
@@ -2465,7 +2513,7 @@ define('async', ['require', 'exports', 'module'], function(require, exports, mod
var wrapIterator = function (iterator) {
return function (err) {
if (err) {
- callback(err);
+ callback.apply(null, arguments);
callback = function () {};
}
else {
@@ -2486,10 +2534,10 @@ define('async', ['require', 'exports', 'module'], function(require, exports, mod
wrapIterator(async.iterator(tasks))();
};
- async.parallel = function (tasks, callback) {
+ var _parallel = function(eachfn, tasks, callback) {
callback = callback || function () {};
if (tasks.constructor === Array) {
- async.map(tasks, function (fn, callback) {
+ eachfn.map(tasks, function (fn, callback) {
if (fn) {
fn(function (err) {
var args = Array.prototype.slice.call(arguments, 1);
@@ -2503,7 +2551,7 @@ define('async', ['require', 'exports', 'module'], function(require, exports, mod
}
else {
var results = {};
- async.forEach(_keys(tasks), function (k, callback) {
+ eachfn.each(_keys(tasks), function (k, callback) {
tasks[k](function (err) {
var args = Array.prototype.slice.call(arguments, 1);
if (args.length <= 1) {
@@ -2518,6 +2566,14 @@ define('async', ['require', 'exports', 'module'], function(require, exports, mod
}
};
+ async.parallel = function (tasks, callback) {
+ _parallel({ map: async.map, each: async.each }, tasks, callback);
+ };
+
+ async.parallelLimit = function(tasks, limit, callback) {
+ _parallel({ map: _mapLimit(limit), each: _eachLimit(limit) }, tasks, callback);
+ };
+
async.series = function (tasks, callback) {
callback = callback || function () {};
if (tasks.constructor === Array) {
@@ -2535,7 +2591,7 @@ define('async', ['require', 'exports', 'module'], function(require, exports, mod
}
else {
var results = {};
- async.forEachSeries(_keys(tasks), function (k, callback) {
+ async.eachSeries(_keys(tasks), function (k, callback) {
tasks[k](function (err) {
var args = Array.prototype.slice.call(arguments, 1);
if (args.length <= 1) {
@@ -2591,33 +2647,123 @@ define('async', ['require', 'exports', 'module'], function(require, exports, mod
async.whilst = function (test, iterator, callback) {
if (test()) {
+ var sync = true;
iterator(function (err) {
if (err) {
return callback(err);
}
- async.whilst(test, iterator, callback);
+ if (sync) {
+ async.nextTick(function () {
+ async.whilst(test, iterator, callback);
+ });
+ }
+ else {
+ async.whilst(test, iterator, callback);
+ }
});
+ sync = false;
}
else {
callback();
}
};
+ async.doWhilst = function (iterator, test, callback) {
+ var sync = true;
+ iterator(function (err) {
+ if (err) {
+ return callback(err);
+ }
+ if (test()) {
+ if (sync) {
+ async.nextTick(function () {
+ async.doWhilst(iterator, test, callback);
+ });
+ }
+ else {
+ async.doWhilst(iterator, test, callback);
+ }
+ }
+ else {
+ callback();
+ }
+ });
+ sync = false;
+ };
+
async.until = function (test, iterator, callback) {
if (!test()) {
+ var sync = true;
iterator(function (err) {
if (err) {
return callback(err);
}
- async.until(test, iterator, callback);
+ if (sync) {
+ async.nextTick(function () {
+ async.until(test, iterator, callback);
+ });
+ }
+ else {
+ async.until(test, iterator, callback);
+ }
});
+ sync = false;
}
else {
callback();
}
};
+ async.doUntil = function (iterator, test, callback) {
+ var sync = true;
+ iterator(function (err) {
+ if (err) {
+ return callback(err);
+ }
+ if (!test()) {
+ if (sync) {
+ async.nextTick(function () {
+ async.doUntil(iterator, test, callback);
+ });
+ }
+ else {
+ async.doUntil(iterator, test, callback);
+ }
+ }
+ else {
+ callback();
+ }
+ });
+ sync = false;
+ };
+
async.queue = function (worker, concurrency) {
+ if (concurrency === undefined) {
+ concurrency = 1;
+ }
+ function _insert(q, data, pos, callback) {
+ if(data.constructor !== Array) {
+ data = [data];
+ }
+ _each(data, function(task) {
+ var item = {
+ data: task,
+ callback: typeof callback === 'function' ? callback : null
+ };
+
+ if (pos) {
+ q.tasks.unshift(item);
+ } else {
+ q.tasks.push(item);
+ }
+
+ if (q.saturated && q.tasks.length === concurrency) {
+ q.saturated();
+ }
+ async.nextTick(q.process);
+ });
+ }
+
var workers = 0;
var q = {
tasks: [],
@@ -2626,33 +2772,42 @@ define('async', ['require', 'exports', 'module'], function(require, exports, mod
empty: null,
drain: null,
push: function (data, callback) {
- if(data.constructor !== Array) {
- data = [data];
- }
- _forEach(data, function(task) {
- q.tasks.push({
- data: task,
- callback: typeof callback === 'function' ? callback : null
- });
- if (q.saturated && q.tasks.length == concurrency) {
- q.saturated();
- }
- async.nextTick(q.process);
- });
+ _insert(q, data, false, callback);
+ },
+ unshift: function (data, callback) {
+ _insert(q, data, true, callback);
},
process: function () {
if (workers < q.concurrency && q.tasks.length) {
var task = q.tasks.shift();
- if(q.empty && q.tasks.length == 0) q.empty();
+ if (q.empty && q.tasks.length === 0) {
+ q.empty();
+ }
workers += 1;
- worker(task.data, function () {
+ var sync = true;
+ var next = function () {
workers -= 1;
if (task.callback) {
task.callback.apply(task, arguments);
}
- if(q.drain && q.tasks.length + workers == 0) q.drain();
+ if (q.drain && q.tasks.length + workers === 0) {
+ q.drain();
+ }
q.process();
+ };
+ var cb = only_once(function () {
+ var cbArgs = arguments;
+
+ if (sync) {
+ async.nextTick(function () {
+ next.apply(null, cbArgs);
+ });
+ } else {
+ next.apply(null, arguments);
+ }
});
+ worker(task.data, cb);
+ sync = false;
}
},
length: function () {
@@ -2665,6 +2820,71 @@ define('async', ['require', 'exports', 'module'], function(require, exports, mod
return q;
};
+ async.cargo = function (worker, payload) {
+ var working = false,
+ tasks = [];
+
+ var cargo = {
+ tasks: tasks,
+ payload: payload,
+ saturated: null,
+ empty: null,
+ drain: null,
+ push: function (data, callback) {
+ if(data.constructor !== Array) {
+ data = [data];
+ }
+ _each(data, function(task) {
+ tasks.push({
+ data: task,
+ callback: typeof callback === 'function' ? callback : null
+ });
+ if (cargo.saturated && tasks.length === payload) {
+ cargo.saturated();
+ }
+ });
+ async.nextTick(cargo.process);
+ },
+ process: function process() {
+ if (working) return;
+ if (tasks.length === 0) {
+ if(cargo.drain) cargo.drain();
+ return;
+ }
+
+ var ts = typeof payload === 'number'
+ ? tasks.splice(0, payload)
+ : tasks.splice(0);
+
+ var ds = _map(ts, function (task) {
+ return task.data;
+ });
+
+ if(cargo.empty) cargo.empty();
+ working = true;
+ worker(ds, function () {
+ working = false;
+
+ var args = arguments;
+ _each(ts, function (data) {
+ if (data.callback) {
+ data.callback.apply(null, args);
+ }
+ });
+
+ process();
+ });
+ },
+ length: function () {
+ return tasks.length;
+ },
+ running: function () {
+ return working;
+ }
+ };
+ return cargo;
+ };
+
var _console_fn = function (name) {
return function (fn) {
var args = Array.prototype.slice.call(arguments, 1);
@@ -2677,7 +2897,7 @@ define('async', ['require', 'exports', 'module'], function(require, exports, mod
}
}
else if (console[name]) {
- _forEach(args, function (x) {
+ _each(args, function (x) {
console[name](x);
});
}
@@ -2719,6 +2939,7 @@ define('async', ['require', 'exports', 'module'], function(require, exports, mod
}]));
}
};
+ memoized.memo = memo;
memoized.unmemoized = fn;
return memoized;
};
@@ -2729,6 +2950,75 @@ define('async', ['require', 'exports', 'module'], function(require, exports, mod
};
};
+ async.times = function (count, iterator, callback) {
+ var counter = [];
+ for (var i = 0; i < count; i++) {
+ counter.push(i);
+ }
+ return async.map(counter, iterator, callback);
+ };
+
+ async.timesSeries = function (count, iterator, callback) {
+ var counter = [];
+ for (var i = 0; i < count; i++) {
+ counter.push(i);
+ }
+ return async.mapSeries(counter, iterator, callback);
+ };
+
+ async.compose = function (/* functions... */) {
+ var fns = Array.prototype.reverse.call(arguments);
+ return function () {
+ var that = this;
+ var args = Array.prototype.slice.call(arguments);
+ var callback = args.pop();
+ async.reduce(fns, args, function (newargs, fn, cb) {
+ fn.apply(that, newargs.concat([function () {
+ var err = arguments[0];
+ var nextargs = Array.prototype.slice.call(arguments, 1);
+ cb(err, nextargs);
+ }]))
+ },
+ function (err, results) {
+ callback.apply(that, [err].concat(results));
+ });
+ };
+ };
+
+ async.applyEach = function (fns /*args...*/) {
+ var go = function () {
+ var that = this;
+ var args = Array.prototype.slice.call(arguments);
+ var callback = args.pop();
+ return async.each(fns, function (fn, cb) {
+ fn.apply(that, args.concat([cb]));
+ },
+ callback);
+ };
+ if (arguments.length > 1) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ return go.apply(this, args);
+ }
+ else {
+ return go;
+ }
+ };
+
+ // AMD / RequireJS
+ if (typeof define !== 'undefined' && define.amd) {
+ define([], function () {
+ return async;
+ });
+ }
+ // Node.js
+ else if (typeof module !== 'undefined' && module.exports) {
+ module.exports = async;
+ }
+ // included directly via <script> tag
+ else {
+ root.async = async;
+ }
+
}());
View
2  build/gear.min.js
@@ -1 +1 @@
-var requirejs,require,define;(function(global){"use strict";var version="2.0.2",commentRegExp=/(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,cjsRequireRegExp=/require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,jsSuffixRegExp=/\.js$/,currDirRegExp=/^\.\//,ostring=Object.prototype.toString,ap=Array.prototype,aps=ap.slice,apsp=ap.splice,isBrowser=!!(typeof window!=="undefined"&&navigator&&document),isWebWorker=!isBrowser&&typeof importScripts!=="undefined",readyRegExp=isBrowser&&navigator.platform==="PLAYSTATION 3"?/^complete$/:/^(complete|loaded)$/,defContextName="_",isOpera=typeof opera!=="undefined"&&opera.toString()==="[object Opera]",contexts={},cfg={},globalDefQueue=[],useInteractive=false,req,s,head,baseElement,dataMain,src,interactiveScript,currentlyAddingScript,mainScript,subPath;function isFunction(it){return ostring.call(it)==="[object Function]"}function isArray(it){return ostring.call(it)==="[object Array]"}function each(ary,func){if(ary){var i;for(i=0;i<ary.length;i+=1){if(ary[i]&&func(ary[i],i,ary)){break}}}}function eachReverse(ary,func){if(ary){var i;for(i=ary.length-1;i>-1;i-=1){if(ary[i]&&func(ary[i],i,ary)){break}}}}function hasProp(obj,prop){return obj.hasOwnProperty(prop)}function eachProp(obj,func){var prop;for(prop in obj){if(obj.hasOwnProperty(prop)){if(func(obj[prop],prop)){break}}}}function mixin(target,source,force,deepStringMixin){if(source){eachProp(source,function(value,prop){if(force||!hasProp(target,prop)){if(deepStringMixin&&typeof value!=="string"){if(!target[prop]){target[prop]={}}mixin(target[prop],value,force,deepStringMixin)}else{target[prop]=value}}})}return target}function bind(obj,fn){return function(){return fn.apply(obj,arguments)}}function scripts(){return document.getElementsByTagName("script")}function getGlobal(value){if(!value){return value}var g=global;each(value.split("."),function(part){g=g[part]});return g}function makeContextModuleFunc(func,relMap,enableBuildCallback){return function(){var args=aps.call(arguments,0),lastArg;if(enableBuildCallback&&isFunction(lastArg=args[args.length-1])){lastArg.__requireJsBuild=true}args.push(relMap);return func.apply(null,args)}}function addRequireMethods(req,context,relMap){each([["toUrl"],["undef"],["defined","requireDefined"],["specified","requireSpecified"]],function(item){var prop=item[1]||item[0];req[item[0]]=context?makeContextModuleFunc(context[prop],relMap):function(){var ctx=contexts[defContextName];return ctx[prop].apply(ctx,arguments)}})}function makeError(id,msg,err,requireModules){var e=new Error(msg+"\nhttp://requirejs.org/docs/errors.html#"+id);e.requireType=id;e.requireModules=requireModules;if(err){e.originalError=err}return e}if(typeof define!=="undefined"){return}if(typeof requirejs!=="undefined"){if(isFunction(requirejs)){return}cfg=requirejs;requirejs=undefined}if(typeof require!=="undefined"&&!isFunction(require)){cfg=require;require=undefined}function newContext(contextName){var config={waitSeconds:7,baseUrl:"./",paths:{},pkgs:{},shim:{}},registry={},undefEvents={},defQueue=[],defined={},urlFetched={},requireCounter=1,unnormalizedCounter=1,waitAry=[],inCheckLoaded,Module,context,handlers,checkLoadedTimeoutId;function trimDots(ary){var i,part;for(i=0;ary[i];i+=1){part=ary[i];if(part==="."){ary.splice(i,1);i-=1}else if(part===".."){if(i===1&&(ary[2]===".."||ary[0]==="..")){break}else if(i>0){ary.splice(i-1,2);i-=2}}}}function normalize(name,baseName,applyMap){var baseParts=baseName&&baseName.split("/"),map=config.map,starMap=map&&map["*"],pkgName,pkgConfig,mapValue,nameParts,i,j,nameSegment,foundMap;if(name&&name.charAt(0)==="."){if(baseName){if(config.pkgs[baseName]){baseParts=[baseName]}else{baseParts=baseParts.slice(0,baseParts.length-1)}name=baseParts.concat(name.split("/"));trimDots(name);pkgConfig=config.pkgs[pkgName=name[0]];name=name.join("/");if(pkgConfig&&name===pkgName+"/"+pkgConfig.main){name=pkgName}}else if(name.indexOf("./")===0){name=name.substring(2)}}if(applyMap&&(baseParts||starMap)&&map){nameParts=name.split("/");for(i=nameParts.length;i>0;i-=1){nameSegment=nameParts.slice(0,i).join("/");if(baseParts){for(j=baseParts.length;j>0;j-=1){mapValue=map[baseParts.slice(0,j).join("/")];if(mapValue){mapValue=mapValue[nameSegment];if(mapValue){foundMap=mapValue;break}}}}if(!foundMap&&starMap&&starMap[nameSegment]){foundMap=starMap[nameSegment]}if(foundMap){nameParts.splice(0,i,foundMap);name=nameParts.join("/");break}}}return name}function removeScript(name){if(isBrowser){each(scripts(),function(scriptNode){if(scriptNode.getAttribute("data-requiremodule")===name&&scriptNode.getAttribute("data-requirecontext")===context.contextName){scriptNode.parentNode.removeChild(scriptNode);return true}})}}function hasPathFallback(id){var pathConfig=config.paths[id];if(pathConfig&&isArray(pathConfig)&&pathConfig.length>1){removeScript(id);pathConfig.shift();context.undef(id);context.require([id]);return true}}function makeModuleMap(name,parentModuleMap,isNormalized,applyMap){var index=name?name.indexOf("!"):-1,prefix=null,parentName=parentModuleMap?parentModuleMap.name:null,originalName=name,isDefine=true,normalizedName="",url,pluginModule,suffix;if(!name){isDefine=false;name="_@r"+(requireCounter+=1)}if(index!==-1){prefix=name.substring(0,index);name=name.substring(index+1,name.length)}if(prefix){prefix=normalize(prefix,parentName,applyMap);pluginModule=defined[prefix]}if(name){if(prefix){if(pluginModule&&pluginModule.normalize){normalizedName=pluginModule.normalize(name,function(name){return normalize(name,parentName,applyMap)})}else{normalizedName=normalize(name,parentName,applyMap)}}else{normalizedName=normalize(name,parentName,applyMap);url=context.nameToUrl(name,null,parentModuleMap)}}suffix=prefix&&!pluginModule&&!isNormalized?"_unnormalized"+(unnormalizedCounter+=1):"";return{prefix:prefix,name:normalizedName,parentMap:parentModuleMap,unnormalized:!!suffix,url:url,originalName:originalName,isDefine:isDefine,id:(prefix?prefix+"!"+normalizedName:normalizedName)+suffix}}function getModule(depMap){var id=depMap.id,mod=registry[id];if(!mod){mod=registry[id]=new context.Module(depMap)}return mod}function on(depMap,name,fn){var id=depMap.id,mod=registry[id];if(hasProp(defined,id)&&(!mod||mod.defineEmitComplete)){if(name==="defined"){fn(defined[id])}}else{getModule(depMap).on(name,fn)}}function onError(err,errback){var ids=err.requireModules,notified=false;if(errback){errback(err)}else{each(ids,function(id){var mod=registry[id];if(mod){mod.error=err;if(mod.events.error){notified=true;mod.emit("error",err)}}});if(!notified){req.onError(err)}}}function takeGlobalQueue(){if(globalDefQueue.length){apsp.apply(defQueue,[defQueue.length-1,0].concat(globalDefQueue));globalDefQueue=[]}}function makeRequire(mod,enableBuildCallback,altRequire){var relMap=mod&&mod.map,modRequire=makeContextModuleFunc(altRequire||context.require,relMap,enableBuildCallback);addRequireMethods(modRequire,context,relMap);modRequire.isBrowser=isBrowser;return modRequire}handlers={require:function(mod){return makeRequire(mod)},exports:function(mod){mod.usingExports=true;if(mod.map.isDefine){return mod.exports=defined[mod.map.id]={}}},module:function(mod){return mod.module={id:mod.map.id,uri:mod.map.url,config:function(){return config.config&&config.config[mod.map.id]||{}},exports:defined[mod.map.id]}}};function removeWaiting(id){delete registry[id];each(waitAry,function(mod,i){if(mod.map.id===id){waitAry.splice(i,1);if(!mod.defined){context.waitCount-=1}return true}})}function findCycle(mod,traced){var id=mod.map.id,depArray=mod.depMaps,foundModule;if(!mod.inited){return}if(traced[id]){return mod}traced[id]=true;each(depArray,function(depMap){var depId=depMap.id,depMod=registry[depId];if(!depMod){return}if(!depMod.inited||!depMod.enabled){foundModule=null;delete traced[id];return true}return foundModule=findCycle(depMod,mixin({},traced))});return foundModule}function forceExec(mod,traced,uninited){var id=mod.map.id,depArray=mod.depMaps;if(!mod.inited||!mod.map.isDefine){return}if(traced[id]){return defined[id]}traced[id]=mod;each(depArray,function(depMap){var depId=depMap.id,depMod=registry[depId],value;if(handlers[depId]){return}if(depMod){if(!depMod.inited||!depMod.enabled){uninited[id]=true;return}value=forceExec(depMod,traced,uninited);if(!uninited[depId]){mod.defineDepById(depId,value)}}});mod.check(true);return defined[id]}function modCheck(mod){mod.check()}function checkLoaded(){var waitInterval=config.waitSeconds*1e3,expired=waitInterval&&context.startTime+waitInterval<(new Date).getTime(),noLoads=[],stillLoading=false,needCycleCheck=true,map,modId,err,usingPathFallback;if(inCheckLoaded){return}inCheckLoaded=true;eachProp(registry,function(mod){map=mod.map;modId=map.id;if(!mod.enabled){return}if(!mod.error){if(!mod.inited&&expired){if(hasPathFallback(modId)){usingPathFallback=true;stillLoading=true}else{noLoads.push(modId);removeScript(modId)}}else if(!mod.inited&&mod.fetched&&map.isDefine){stillLoading=true;if(!map.prefix){return needCycleCheck=false}}}});if(expired&&noLoads.length){err=makeError("timeout","Load timeout for modules: "+noLoads,null,noLoads);err.contextName=context.contextName;return onError(err)}if(needCycleCheck){each(waitAry,function(mod){if(mod.defined){return}var cycleMod=findCycle(mod,{}),traced={};if(cycleMod){forceExec(cycleMod,traced,{});eachProp(traced,modCheck)}});eachProp(registry,modCheck)}if((!expired||usingPathFallback)&&stillLoading){if((isBrowser||isWebWorker)&&!checkLoadedTimeoutId){checkLoadedTimeoutId=setTimeout(function(){checkLoadedTimeoutId=0;checkLoaded()},50)}}inCheckLoaded=false}Module=function(map){this.events=undefEvents[map.id]||{};this.map=map;this.shim=config.shim[map.id];this.depExports=[];this.depMaps=[];this.depMatched=[];this.pluginMaps={};this.depCount=0};Module.prototype={init:function(depMaps,factory,errback,options){options=options||{};if(this.inited){return}this.factory=factory;if(errback){this.on("error",errback)}else if(this.events.error){errback=bind(this,function(err){this.emit("error",err)})}this.depMaps=depMaps&&depMaps.slice(0);this.depMaps.rjsSkipMap=depMaps.rjsSkipMap;this.errback=errback;this.inited=true;this.ignore=options.ignore;if(options.enabled||this.enabled){this.enable()}else{this.check()}},defineDepById:function(id,depExports){var i;each(this.depMaps,function(map,index){if(map.id===id){i=index;return true}});return this.defineDep(i,depExports)},defineDep:function(i,depExports){if(!this.depMatched[i]){this.depMatched[i]=true;this.depCount-=1;this.depExports[i]=depExports}},fetch:function(){if(this.fetched){return}this.fetched=true;context.startTime=(new Date).getTime();var map=this.map;if(this.shim){makeRequire(this,true)(this.shim.deps||[],bind(this,function(){return map.prefix?this.callPlugin():this.load()}))}else{return map.prefix?this.callPlugin():this.load()}},load:function(){var url=this.map.url;if(!urlFetched[url]){urlFetched[url]=true;context.load(this.map.id,url)}},check:function(silent){if(!this.enabled||this.enabling){return}var id=this.map.id,depExports=this.depExports,exports=this.exports,factory=this.factory,err,cjsModule;if(!this.inited){this.fetch()}else if(this.error){this.emit("error",this.error)}else if(!this.defining){this.defining=true;if(this.depCount<1&&!this.defined){if(isFunction(factory)){if(this.events.error){try{exports=context.execCb(id,factory,depExports,exports)}catch(e){err=e}}else{exports=context.execCb(id,factory,depExports,exports)}if(this.map.isDefine){cjsModule=this.module;if(cjsModule&&cjsModule.exports!==undefined&&cjsModule.exports!==this.exports){exports=cjsModule.exports}else if(exports===undefined&&this.usingExports){exports=this.exports}}if(err){err.requireMap=this.map;err.requireModules=[this.map.id];err.requireType="define";return onError(this.error=err)}}else{exports=factory}this.exports=exports;if(this.map.isDefine&&!this.ignore){defined[id]=exports;if(req.onResourceLoad){req.onResourceLoad(context,this.map,this.depMaps)}}delete registry[id];this.defined=true;context.waitCount-=1;if(context.waitCount===0){waitAry=[]}}this.defining=false;if(!silent){if(this.defined&&!this.defineEmitted){this.defineEmitted=true;this.emit("defined",this.exports);this.defineEmitComplete=true}}}},callPlugin:function(){var map=this.map,id=map.id,pluginMap=makeModuleMap(map.prefix,null,false,true);on(pluginMap,"defined",bind(this,function(plugin){var name=this.map.name,parentName=this.map.parentMap?this.map.parentMap.name:null,load,normalizedMap,normalizedMod;if(this.map.unnormalized){if(plugin.normalize){name=plugin.normalize(name,function(name){return normalize(name,parentName,true)})||""}normalizedMap=makeModuleMap(map.prefix+"!"+name,this.map.parentMap,false,true);on(normalizedMap,"defined",bind(this,function(value){this.init([],function(){return value},null,{enabled:true,ignore:true})}));normalizedMod=registry[normalizedMap.id];if(normalizedMod){if(this.events.error){normalizedMod.on("error",bind(this,function(err){this.emit("error",err)}))}normalizedMod.enable()}return}load=bind(this,function(value){this.init([],function(){return value},null,{enabled:true})});load.error=bind(this,function(err){this.inited=true;this.error=err;err.requireModules=[id];eachProp(registry,function(mod){if(mod.map.id.indexOf(id+"_unnormalized")===0){removeWaiting(mod.map.id)}});onError(err)});load.fromText=function(moduleName,text){var hasInteractive=useInteractive;if(hasInteractive){useInteractive=false}getModule(makeModuleMap(moduleName));req.exec(text);if(hasInteractive){useInteractive=true}context.completeLoad(moduleName)};plugin.load(map.name,makeRequire(map.parentMap,true,function(deps,cb){deps.rjsSkipMap=true;return context.require(deps,cb)}),load,config)}));context.enable(pluginMap,this);this.pluginMaps[pluginMap.id]=pluginMap},enable:function(){this.enabled=true;if(!this.waitPushed){waitAry.push(this);context.waitCount+=1;this.waitPushed=true}this.enabling=true;each(this.depMaps,bind(this,function(depMap,i){var id,mod,handler;if(typeof depMap==="string"){depMap=makeModuleMap(depMap,this.map.isDefine?this.map:this.map.parentMap,false,!this.depMaps.rjsSkipMap);this.depMaps[i]=depMap;handler=handlers[depMap.id];if(handler){this.depExports[i]=handler(this);return}this.depCount+=1;on(depMap,"defined",bind(this,function(depExports){this.defineDep(i,depExports);this.check()}));if(this.errback){on(depMap,"error",this.errback)}}id=depMap.id;mod=registry[id];if(!handlers[id]&&mod&&!mod.enabled){context.enable(depMap,this)}}));eachProp(this.pluginMaps,bind(this,function(pluginMap){var mod=registry[pluginMap.id];if(mod&&!mod.enabled){context.enable(pluginMap,this)}}));this.enabling=false;this.check()},on:function(name,cb){var cbs=this.events[name];if(!cbs){cbs=this.events[name]=[]}cbs.push(cb)},emit:function(name,evt){each(this.events[name],function(cb){cb(evt)});if(name==="error"){delete this.events[name]}}};function callGetModule(args){getModule(makeModuleMap(args[0],null,true)).init(args[1],args[2])}function removeListener(node,func,name,ieName){if(node.detachEvent&&!isOpera){if(ieName){node.detachEvent(ieName,func)}}else{node.removeEventListener(name,func,false)}}function getScriptData(evt){var node=evt.currentTarget||evt.srcElement;removeListener(node,context.onScriptLoad,"load","onreadystatechange");removeListener(node,context.onScriptError,"error");return{node:node,id:node&&node.getAttribute("data-requiremodule")}}return context={config:config,contextName:contextName,registry:registry,defined:defined,urlFetched:urlFetched,waitCount:0,defQueue:defQueue,Module:Module,makeModuleMap:makeModuleMap,configure:function(cfg){if(cfg.baseUrl){if(cfg.baseUrl.charAt(cfg.baseUrl.length-1)!=="/"){cfg.baseUrl+="/"}}var pkgs=config.pkgs,shim=config.shim,paths=config.paths,map=config.map;mixin(config,cfg,true);config.paths=mixin(paths,cfg.paths,true);if(cfg.map){config.map=mixin(map||{},cfg.map,true,true)}if(cfg.shim){eachProp(cfg.shim,function(value,id){if(isArray(value)){value={deps:value}}if(value.exports&&!value.exports.__buildReady){value.exports=context.makeShimExports(value.exports)}shim[id]=value});config.shim=shim}if(cfg.packages){each(cfg.packages,function(pkgObj){var location;pkgObj=typeof pkgObj==="string"?{name:pkgObj}:pkgObj;location=pkgObj.location;pkgs[pkgObj.name]={name:pkgObj.name,location:location||pkgObj.name,main:(pkgObj.main||"main").replace(currDirRegExp,"").replace(jsSuffixRegExp,"")}});config.pkgs=pkgs}eachProp(registry,function(mod,id){mod.map=makeModuleMap(id)});if(cfg.deps||cfg.callback){context.require(cfg.deps||[],cfg.callback)}},makeShimExports:function(exports){var func;if(typeof exports==="string"){func=function(){return getGlobal(exports)};func.exports=exports;return func}else{return function(){return exports.apply(global,arguments)}}},requireDefined:function(id,relMap){return hasProp(defined,makeModuleMap(id,relMap,false,true).id)},requireSpecified:function(id,relMap){id=makeModuleMap(id,relMap,false,true).id;return hasProp(defined,id)||hasProp(registry,id)},require:function(deps,callback,errback,relMap){var moduleName,id,map,requireMod,args;if(typeof deps==="string"){if(isFunction(callback)){return onError(makeError("requireargs","Invalid require call"),errback)}if(req.get){return req.get(context,deps,callback)}moduleName=deps;relMap=callback;map=makeModuleMap(moduleName,relMap,false,true);id=map.id;if(!hasProp(defined,id)){return onError(makeError("notloaded",'Module name "'+id+'" has not been loaded yet for context: '+contextName))}return defined[id]}if(errback&&!isFunction(errback)){relMap=errback;errback=undefined}if(callback&&!isFunction(callback)){relMap=callback;callback=undefined}takeGlobalQueue();while(defQueue.length){args=defQueue.shift();if(args[0]===null){return onError(makeError("mismatch","Mismatched anonymous define() module: "+args[args.length-1]))}else{callGetModule(args)}}requireMod=getModule(makeModuleMap(null,relMap));requireMod.init(deps,callback,errback,{enabled:true});checkLoaded();return context.require},undef:function(id){var map=makeModuleMap(id,null,true),mod=registry[id];delete defined[id];delete urlFetched[map.url];delete undefEvents[id];if(mod){if(mod.events.defined){undefEvents[id]=mod.events}removeWaiting(id)}},enable:function(depMap,parent){var mod=registry[depMap.id];if(mod){getModule(depMap).enable()}},completeLoad:function(moduleName){var shim=config.shim[moduleName]||{},shExports=shim.exports&&shim.exports.exports,found,args,mod;takeGlobalQueue();while(defQueue.length){args=defQueue.shift();if(args[0]===null){args[0]=moduleName;if(found){break}found=true}else if(args[0]===moduleName){found=true}callGetModule(args)}mod=registry[moduleName];if(!found&&!defined[moduleName]&&mod&&!mod.inited){if(config.enforceDefine&&(!shExports||!getGlobal(shExports))){if(hasPathFallback(moduleName)){return}else{return onError(makeError("nodefine","No define call for "+moduleName,null,[moduleName]))}}else{callGetModule([moduleName,shim.deps||[],shim.exports])}}checkLoaded()},toUrl:function(moduleNamePlusExt,relModuleMap){var index=moduleNamePlusExt.lastIndexOf("."),ext=null;if(index!==-1){ext=moduleNamePlusExt.substring(index,moduleNamePlusExt.length);moduleNamePlusExt=moduleNamePlusExt.substring(0,index)}return context.nameToUrl(moduleNamePlusExt,ext,relModuleMap)},nameToUrl:function(moduleName,ext,relModuleMap){var paths,pkgs,pkg,pkgPath,syms,i,parentModule,url,parentPath;moduleName=normalize(moduleName,relModuleMap&&relModuleMap.id,true);if(req.jsExtRegExp.test(moduleName)){url=moduleName+(ext||"")}else{paths=config.paths;pkgs=config.pkgs;syms=moduleName.split("/");for(i=syms.length;i>0;i-=1){parentModule=syms.slice(0,i).join("/");pkg=pkgs[parentModule];parentPath=paths[parentModule];if(parentPath){if(isArray(parentPath)){parentPath=parentPath[0]}syms.splice(0,i,parentPath);break}else if(pkg){if(moduleName===pkg.name){pkgPath=pkg.location+"/"+pkg.main}else{pkgPath=pkg.location}syms.splice(0,i,pkgPath);break}}url=syms.join("/")+(ext||".js");url=(url.charAt(0)==="/"||url.match(/^[\w\+\.\-]+:/)?"":config.baseUrl)+url}return config.urlArgs?url+((url.indexOf("?")===-1?"?":"&")+config.urlArgs):url},load:function(id,url){req.load(context,id,url)},execCb:function(name,callback,args,exports){return callback.apply(exports,args)},onScriptLoad:function(evt){if(evt.type==="load"||readyRegExp.test((evt.currentTarget||evt.srcElement).readyState)){interactiveScript=null;var data=getScriptData(evt);context.completeLoad(data.id)}},onScriptError:function(evt){var data=getScriptData(evt);if(!hasPathFallback(data.id)){return onError(makeError("scripterror","Script error",evt,[data.id]))}}}}req=requirejs=function(deps,callback,errback,optional){var contextName=defContextName,context,config;if(!isArray(deps)&&typeof deps!=="string"){config=deps;if(isArray(callback)){deps=callback;callback=errback;errback=optional}else{deps=[]}}if(config&&config.context){contextName=config.context}context=contexts[contextName];if(!context){context=contexts[contextName]=req.s.newContext(contextName)}if(config){context.configure(config)}return context.require(deps,callback,errback)};req.config=function(config){return req(config)};if(!require){require=req}req.version=version;req.jsExtRegExp=/^\/|:|\?|\.js$/;req.isBrowser=isBrowser;s=req.s={contexts:contexts,newContext:newContext};req({});addRequireMethods(req);if(isBrowser){head=s.head=document.getElementsByTagName("head")[0];baseElement=document.getElementsByTagName("base")[0];if(baseElement){head=s.head=baseElement.parentNode}}req.onError=function(err){throw err};req.load=function(context,moduleName,url){var config=context&&context.config||{},node;if(isBrowser){node=config.xhtml?document.createElementNS("http://www.w3.org/1999/xhtml","html:script"):document.createElement("script");node.type=config.scriptType||"text/javascript";node.charset="utf-8";node.setAttribute("data-requirecontext",context.contextName);node.setAttribute("data-requiremodule",moduleName);if(node.attachEvent&&!(node.attachEvent.toString&&node.attachEvent.toString().indexOf("[native code")<0)&&!isOpera){useInteractive=true;node.attachEvent("onreadystatechange",context.onScriptLoad)}else{node.addEventListener("load",context.onScriptLoad,false);node.addEventListener("error",context.onScriptError,false)}node.src=url;currentlyAddingScript=node;if(baseElement){head.insertBefore(node,baseElement)}else{head.appendChild(node)}currentlyAddingScript=null;return node}else if(isWebWorker){importScripts(url);context.completeLoad(moduleName)}};function getInteractiveScript(){if(interactiveScript&&interactiveScript.readyState==="interactive"){return interactiveScript}eachReverse(scripts(),function(script){if(script.readyState==="interactive"){return interactiveScript=script}});return interactiveScript}if(isBrowser){eachReverse(scripts(),function(script){if(!head){head=script.parentNode}dataMain=script.getAttribute("data-main");if(dataMain){src=dataMain.split("/");mainScript=src.pop();subPath=src.length?src.join("/")+"/":"./";if(!cfg.baseUrl){cfg.baseUrl=subPath}dataMain=mainScript.replace(jsSuffixRegExp,"");cfg.deps=cfg.deps?cfg.deps.concat(dataMain):[dataMain];return true}})}define=function(name,deps,callback){var node,context;if(typeof name!=="string"){callback=deps;deps=name;name=null}if(!isArray(deps)){callback=deps;deps=[]}if(!deps.length&&isFunction(callback)){if(callback.length){callback.toString().replace(commentRegExp,"").replace(cjsRequireRegExp,function(match,dep){deps.push(dep)});deps=(callback.length===1?["require"]:["require","exports","module"]).concat(deps)}}if(useInteractive){node=currentlyAddingScript||getInteractiveScript();if(node){if(!name){name=node.getAttribute("data-requiremodule")}context=contexts[node.getAttribute("data-requirecontext")]}}(context?context.defQueue:globalDefQueue).push([name,deps,callback])};define.amd={jQuery:true};req.exec=function(text){return eval(text)};req(cfg)})(this);define("async",["require","exports","module"],function(require,exports,module){(function(){var async={};var root=this,previous_async=root.async;if(typeof module!=="undefined"&&module.exports){module.exports=async}else{root.async=async}async.noConflict=function(){root.async=previous_async;return async};var _forEach=function(arr,iterator){if(arr.forEach){return arr.forEach(iterator)}for(var i=0;i<arr.length;i+=1){iterator(arr[i],i,arr)}};var _map=function(arr,iterator){if(arr.map){return arr.map(iterator)}var results=[];_forEach(arr,function(x,i,a){results.push(iterator(x,i,a))});return results};var _reduce=function(arr,iterator,memo){if(arr.reduce){return arr.reduce(iterator,memo)}_forEach(arr,function(x,i,a){memo=iterator(memo,x,i,a)});return memo};var _keys=function(obj){if(Object.keys){return Object.keys(obj)}var keys=[];for(var k in obj){if(obj.hasOwnProperty(k)){keys.push(k)}}return keys};if(typeof process==="undefined"||!process.nextTick){async.nextTick=function(fn){setTimeout(fn,0)}}else{async.nextTick=process.nextTick}async.forEach=function(arr,iterator,callback){callback=callback||function(){};if(!arr.length){return callback()}var completed=0;_forEach(arr,function(x){iterator(x,function(err){if(err){callback(err);callback=function(){}}else{completed+=1;if(completed===arr.length){callback(null)}}})})};async.forEachSeries=function(arr,iterator,callback){callback=callback||function(){};if(!arr.length){return callback()}var completed=0;var iterate=function(){iterator(arr[completed],function(err){if(err){callback(err);callback=function(){}}else{completed+=1;if(completed===arr.length){callback(null)}else{iterate()}}})};iterate()};async.forEachLimit=function(arr,limit,iterator,callback){callback=callback||function(){};if(!arr.length||limit<=0){return callback()}var completed=0;var started=0;var running=0;(function replenish(){if(completed===arr.length){return callback()}while(running<limit&&started<arr.length){started+=1;running+=1;iterator(arr[started-1],function(err){if(err){callback(err);callback=function(){}}else{completed+=1;running-=1;if(completed===arr.length){callback()}else{replenish()}}})}})()};var doParallel=function(fn){return function(){var args=Array.prototype.slice.call(arguments);return fn.apply(null,[async.forEach].concat(args))}};var doSeries=function(fn){return function(){var args=Array.prototype.slice.call(arguments);return fn.apply(null,[async.forEachSeries].concat(args))}};var _asyncMap=function(eachfn,arr,iterator,callback){var results=[];arr=_map(arr,function(x,i){return{index:i,value:x}});eachfn(arr,function(x,callback){iterator(x.value,function(err,v){results[x.index]=v;callback(err)})},function(err){callback(err,results)})};async.map=doParallel(_asyncMap);async.mapSeries=doSeries(_asyncMap);async.reduce=function(arr,memo,iterator,callback){async.forEachSeries(arr,function(x,callback){iterator(memo,x,function(err,v){memo=v;callback(err)})},function(err){callback(err,memo)})};async.inject=async.reduce;async.foldl=async.reduce;async.reduceRight=function(arr,memo,iterator,callback){var reversed=_map(arr,function(x){return x}).reverse();async.reduce(reversed,memo,iterator,callback)};async.foldr=async.reduceRight;var _filter=function(eachfn,arr,iterator,callback){var results=[];arr=_map(arr,function(x,i){return{index:i,value:x}});eachfn(arr,function(x,callback){iterator(x.value,function(v){if(v){results.push(x)}callback()})},function(err){callback(_map(results.sort(function(a,b){return a.index-b.index}),function(x){return x.value}))})};async.filter=doParallel(_filter);async.filterSeries=doSeries(_filter);async.select=async.filter;async.selectSeries=async.filterSeries;var _reject=function(eachfn,arr,iterator,callback){var results=[];arr=_map(arr,function(x,i){return{index:i,value:x}});eachfn(arr,function(x,callback){iterator(x.value,function(v){if(!v){results.push(x)}callback()})},function(err){callback(_map(results.sort(function(a,b){return a.index-b.index}),function(x){return x.value}))})};async.reject=doParallel(_reject);async.rejectSeries=doSeries(_reject);var _detect=function(eachfn,arr,iterator,main_callback){eachfn(arr,function(x,callback){iterator(x,function(result){if(result){main_callback(x);main_callback=function(){}}else{callback()}})},function(err){main_callback()})};async.detect=doParallel(_detect);async.detectSeries=doSeries(_detect);async.some=function(arr,iterator,main_callback){async.forEach(arr,function(x,callback){iterator(x,function(v){if(v){main_callback(true);main_callback=function(){}}callback()})},function(err){main_callback(false)})};async.any=async.some;async.every=function(arr,iterator,main_callback){async.forEach(arr,function(x,callback){iterator(x,function(v){if(!v){main_callback(false);main_callback=function(){}}callback()})},function(err){main_callback(true)})};async.all=async.every;async.sortBy=function(arr,iterator,callback){async.map(arr,function(x,callback){iterator(x,function(err,criteria){if(err){callback(err)}else{callback(null,{value:x,criteria:criteria})}})},function(err,results){if(err){return callback(err)}else{var fn=function(left,right){var a=left.criteria,b=right.criteria;return a<b?-1:a>b?1:0};callback(null,_map(results.sort(fn),function(x){return x.value}))}})};async.auto=function(tasks,callback){callback=callback||function(){};var keys=_keys(tasks);if(!keys.length){return callback(null)}var results={};var listeners=[];var addListener=function(fn){listeners.unshift(fn)};var removeListener=function(fn){for(var i=0;i<listeners.length;i+=1){if(listeners[i]===fn){listeners.splice(i,1);return}}};var taskComplete=function(){_forEach(listeners.slice(0),function(fn){fn()})};addListener(function(){if(_keys(results).length===keys.length){callback(null,results);callback=function(){}}});_forEach(keys,function(k){var task=tasks[k]instanceof Function?[tasks[k]]:tasks[k];var taskCallback=function(err){if(err){callback(err);callback=function(){}}else{var args=Array.prototype.slice.call(arguments,1);if(args.length<=1){args=args[0]}results[k]=args;taskComplete()}};var requires=task.slice(0,Math.abs(task.length-1))||[];var ready=function(){return _reduce(requires,function(a,x){return a&&results.hasOwnProperty(x)},true)&&!results.hasOwnProperty(k)};if(ready()){task[task.length-1](taskCallback,results)}else{var listener=function(){if(ready()){removeListener(listener);task[task.length-1](taskCallback,results)}};addListener(listener)}})};async.waterfall=function(tasks,callback){callback=callback||function(){};if(!tasks.length){return callback()}var wrapIterator=function(iterator){return function(err){if(err){callback(err);callback=function(){}}else{var args=Array.prototype.slice.call(arguments,1);var next=iterator.next();if(next){args.push(wrapIterator(next))}else{args.push(callback)}async.nextTick(function(){iterator.apply(null,args)})}}};wrapIterator(async.iterator(tasks))()};async.parallel=function(tasks,callback){callback=callback||function(){};if(tasks.constructor===Array){async.map(tasks,function(fn,callback){if(fn){fn(function(err){var args=Array.prototype.slice.call(arguments,1);if(args.length<=1){args=args[0]}callback.call(null,err,args)})}},callback)}else{var results={};async.forEach(_keys(tasks),function(k,callback){tasks[k](function(err){var args=Array.prototype.slice.call(arguments,1);if(args.length<=1){args=args[0]}results[k]=args;callback(err)})},function(err){callback(err,results)})}};async.series=function(tasks,callback){callback=callback||function(){};if(tasks.constructor===Array){async.mapSeries(tasks,function(fn,callback){if(fn){fn(function(err){var args=Array.prototype.slice.call(arguments,1);if(args.length<=1){args=args[0]}callback.call(null,err,args)})}},callback)}else{var results={};async.forEachSeries(_keys(tasks),function(k,callback){tasks[k](function(err){var args=Array.prototype.slice.call(arguments,1);if(args.length<=1){args=args[0]}results[k]=args;callback(err)})},function(err){callback(err,results)})}};async.iterator=function(tasks){var makeCallback=function(index){var fn=function(){if(tasks.length){tasks[index].apply(null,arguments)}return fn.next()};fn.next=function(){return index<tasks.length-1?makeCallback(index+1):null};return fn};return makeCallback(0)};async.apply=function(fn){var args=Array.prototype.slice.call(arguments,1);return function(){return fn.apply(null,args.concat(Array.prototype.slice.call(arguments)))}};var _concat=function(eachfn,arr,fn,callback){var r=[];eachfn(arr,function(x,cb){fn(x,function(err,y){r=r.concat(y||[]);cb(err)})},function(err){callback(err,r)})};async.concat=doParallel(_concat);async.concatSeries=doSeries(_concat);async.whilst=function(test,iterator,callback){if(test()){iterator(function(err){if(err){return callback(err)}async.whilst(test,iterator,callback)})}else{callback()}};async.until=function(test,iterator,callback){if(!test()){iterator(function(err){if(err){return callback(err)}async.until(test,iterator,callback)})}else{callback()}};async.queue=function(worker,concurrency){var workers=0;var q={tasks:[],concurrency:concurrency,saturated:null,empty:null,drain:null,push:function(data,callback){if(data.constructor!==Array){data=[data]}_forEach(data,function(task){q.tasks.push({data:task,callback:typeof callback==="function"?callback:null});if(q.saturated&&q.tasks.length==concurrency){q.saturated()}async.nextTick(q.process)})},process:function(){if(workers<q.concurrency&&q.tasks.length){var task=q.tasks.shift();if(q.empty&&q.tasks.length==0)q.empty();workers+=1;worker(task.data,function(){workers-=1;if(task.callback){task.callback.apply(task,arguments)}if(q.drain&&q.tasks.length+workers==0)q.drain();q.process()})}},length:function(){return q.tasks.length},running:function(){return workers}};return q};var _console_fn=function(name){return function(fn){var args=Array.prototype.slice.call(arguments,1);fn.apply(null,args.concat([function(err){var args=Array.prototype.slice.call(arguments,1);if(typeof console!=="undefined"){if(err){if(console.error){console.error(err)}}else if(console[name]){_forEach(args,function(x){console[name](x)})}}}]))}};async.log=_console_fn("log");async.dir=_console_fn("dir");async.memoize=function(fn,hasher){var memo={};var queues={};hasher=hasher||function(x){return x};var memoized=function(){var args=Array.prototype.slice.call(arguments);var callback=args.pop();var key=hasher.apply(null,args);if(key in memo){callback.apply(null,memo[key])}else if(key in queues){queues[key].push(callback)}else{queues[key]=[callback];fn.apply(null,args.concat([function(){memo[key]=arguments;var q=queues[key];delete queues[key];for(var i=0,l=q.length;i<l;i++){q[i].apply(null,arguments)}}]))}};memoized.unmemoized=fn;return memoized};async.unmemoize=function(fn){return function(){return(fn.unmemoized||fn).apply(null,arguments)}}})()});define("./blob",["require","exports"],function(require,exports){var Blob=exports.Blob=function Blob(parts,properties){parts=typeof parts==="undefined"?[]:Array.prototype.concat(parts);properties=properties||{};function mergeProps(object,props){Object.keys(props).forEach(function(prop){object[prop]=props[prop]})}var result=parts.length?parts.shift():"",props={},self=this;if(result instanceof Blob){mergeProps(props,result);result=result.result}parts.forEach(function(part){if(part instanceof Blob){mergeProps(props,part);result+=part.result}else{result+=part}});mergeProps(props,properties);Object.keys(props).forEach(function(prop){if(prop!=="result"){Object.defineProperty(self,prop,{enumerable:true,value:props[prop]})}});Object.defineProperty(this,"result",{value:result})};Blob.prototype.toString=function(){return this.result};var readFile={server:function(name,encoding,callback,sync){var fs=require("fs");if(sync){readFile.serverSync(name,encoding,callback)}else{fs.readFile(name,encoding==="bin"?undefined:encoding,function(err,data){if(err){callback(err)}else{callback(null,new Blob(data,{name:name}))}})}},serverSync:function(name,encoding,callback){var fs=require("fs"),data;try{data=fs.readFileSync(name,encoding==="bin"?undefined:encoding);callback(null,new Blob(data,{name:name}))}catch(e){callback(e)}},client:function(name,encoding,callback){if(name in localStorage){callback(null,new Blob(localStorage[name],{name:name}))}else{callback("localStorage has no item "+name)}}};Blob.readFile=Blob.prototype.readFile=typeof module==="undefined"?readFile.client:readFile.server;var writeFile={server:function(name,blob,encoding,callback){var fs=require("fs"),path=require("path"),nodeExists=fs.exists||path.exists,mkdirp=require("mkdirp").mkdirp,Crypto=require("crypto");function writeFile(filename,b){fs.writeFile(filename,b.result,encoding==="bin"?undefined:encoding,function(err){callback(err,new Blob(b,{name:filename}))})}var dirname=path.resolve(path.dirname(name)),checksum;if(name.indexOf("{checksum}")>-1){checksum=Crypto.createHash("md5");checksum.update(blob.result);name=name.replace("{checksum}",checksum.digest("hex"))}nodeExists(dirname,function(exists){if(!exists){mkdirp(dirname,"0755",function(err){if(err){callback(err)}else{writeFile(name,blob)}})}else{writeFile(name,blob)}})},client:function(name,blob,encoding,callback){localStorage[name]=blob.result;callback(null,new blob.constructor(blob,{name:name}))}};Blob.writeFile=Blob.prototype.writeFile=typeof module==="undefined"?writeFile.client:writeFile.server});define("./tasks/concat",["require","exports"],function(require,exports){exports.concat=function(options,prev,blob,done){options=options||{};done(null,new blob.constructor([prev,options.callback?options.callback(blob):blob]))}});define("./tasks/core",["require","exports","../blob"],function(require,exports){var Blob=require("../blob").Blob;exports.load=function(string,done){done(null,new Blob(string))};var test=exports.test=function(options,blob,done){options=options||{};done(options.callback?options.callback(blob):null)};test.type="each";var get=exports.get=function get(index,blobs,done){done(null,blobs.slice(index,index+1))};get.type="collect";var log=exports.log=function log(string,blobs,done){this._log(string);done(null,blobs)};log.type="collect";var inspect=exports.inspect=function inspect(options,blobs,done){var self=this;blobs.forEach(function(blob,index){var obj={result:blob.result};Object.keys(blob).forEach(function(attr){obj[attr]=blob[attr]});self._log("blob "+(index+1)+": "+JSON.stringify(obj,null," "))});done(null,blobs)};inspect.type="collect";exports.noop=function(dummy,blob,done){done(null,blob)}});define("./tasks/read",["require","exports","../blob"],function(require,exports){var Blob=require("../blob").Blob;exports.read=function(options,done){options=typeof options==="string"?{name:options}:options;var encoding=options.encoding||"utf8";Blob.readFile(options.name,encoding,done,options.sync)}});define("./tasks/write",["require","exports"],function(require,exports){var write=exports.write=function write(options,blob,done){options=typeof options==="string"?{name:options}:options;var encoding=options.encoding||"utf8";blob.writeFile(options.name,blob,encoding,done)};write.type="slice"});define("./tasks/tasks",["require","exports","async"],function(require,exports){var async=require("async");var tasks=exports.tasks=function tasks(workflow,blobs,done){var item,task,name,requires,fn,auto={},self=this;function runTask(name,options,requires){return function(callback,result){var new_blobs=requires.length?[]:blobs;result=result||[];requires.forEach(function(item){new_blobs=new_blobs.concat(result[item])});self._dispatch(name,options,new_blobs,callback)}}for(item in workflow){task=workflow[item].task;if(task===undefined){task=["noop"]}else{if(!Array.isArray(task)){task=[task]}}requires=workflow[item].requires;if(requires===undefined){requires=[]}else{if(!Array.isArray(requires)){requires=[requires]}}fn=runTask(task[0],task[1],requires);auto[item]=requires?requires.concat(fn):fn}async.auto(auto,function(err,results){if(err){done(err);return}done(err,results.join?results.join:[])})};tasks.type="collect"});define("./registry",["require","exports","./tasks/concat","./default_tasks"],function(require,exports){if(typeof module!=="undefined"){var fs=require("fs"),path=require("path"),existsSync=fs.existsSync||path.existsSync}else{var default_tasks=require("./default_tasks")}var Registry=exports.Registry=function Registry(options){var self=this;this._tasks={};if(typeof __dirname!=="undefined"){this.load({dirname:__dirname+"/tasks"})}else if(typeof default_tasks!=="undefined"){this.load({tasks:default_tasks})}if(options){this.load(options)}Object.defineProperty(this,"tasks",{get:function(){return Object.keys(self._tasks)}})};Registry.prototype={load:function(options){options=options||{};if(options.module){this._loadModule(options.module)}if(options.dirname){this._loadDir(options.dirname)}if(options.filename){this._loadFile(options.filename)}if(options.tasks){this._loadTasks(options.tasks)}return this},_loadModule:function(name){this._loadDir(path.resolve("node_modules",name,"lib"))},_loadDir:function(dirname){if(!existsSync(dirname)){throw new Error("Directory "+dirname+" doesn't exist")}var fs=require("fs"),files=fs.readdirSync(dirname),self=this;files.forEach(function(filename){self._loadFile(path.join(dirname,filename))})},_loadFile:function(filename){if(path.extname(filename)!==".js"){return}if(!existsSync(filename)){throw new Error("File "+filename+" doesn't exist")}this._loadTasks(require(filename))},_loadTasks:function(tasks){var name;for(name in tasks){this._tasks[name]=tasks[name]}},task:function(name){if(!(name in this._tasks)){throw new Error("Task "+name+" doesn't exist")}return this._tasks[name]}}});define("./queue",["require","exports","async","./registry","./blob"],function(require,exports){var async=require("async"),Registry=require("./registry").Registry,Blob=require("./blob").Blob;function zip(arr1,arr2){var zipped=[];for(var i=0;i<Math.min(arr1.length,arr2.length);i++){zipped.push([arr1[i],arr2[i]])}return zipped}function arrayize(arr){return typeof arr==="undefined"?[]:Array.prototype.concat(arr)}var Queue=exports.Queue=function Queue(options){var self=this;options=options||{};this._logger=options.logger||console;this._registry=options.registry||new Registry;this._clear();this._registry.tasks.forEach(function(name){self[name]=self.task.bind(self,name)})};Queue.prototype._clear=function(){this._queue=[function(callback){callback(null,[])}]};Queue.prototype._log=function(message){this._logger.log(message)};Queue.prototype._dispatch=function(name,options,blobs,done){var task=this._registry.task(name),types={2:"append",3:"map",4:"reduce"},type=task.type?task.type:types[task.length];function doneWrap(err,res){if(err){err={task:name,error:err}}done(err,res)}switch(type){case"append":async.map(arrayize(options),task.bind(this),function(err,results){doneWrap(err,blobs.concat(results))});break;case"collect":task.call(this,options,blobs,doneWrap);break;case"slice":async.map(zip(arrayize(options),blobs),function(arr,cb){task.call(this,arr[0],arr[1],cb)}.bind(this),doneWrap);break;case"each":async.forEach(blobs,task.bind(this,options),function(err){doneWrap(err,blobs)});break;case"map":async.map(blobs,task.bind(this,options),doneWrap);break;case"syncmap":async.mapSeries(blobs,task.bind(this,options),doneWrap);break;case"reduce":async.reduce(blobs,new Blob,task.bind(this,options),function(err,results){doneWrap(err,[results])});break;default:throw new Error('Task "'+name+'" has unknown type. Add a type property to the task function.')}};Queue.prototype.task=function(name,options){this._queue.push(this._dispatch.bind(this,name,options));return this};Queue.prototype.run=function(callback){async.waterfall(this._queue,callback)}});define("../blob",["require","exports","blob"],function(require,exports,blob){exports.Blob=blob.Blob});define("./default_tasks",["require","exports","./tasks/concat","./tasks/core","./tasks/read","./tasks/write","./tasks/tasks"],function(require,exports){var tasks=[];tasks.push(require("./tasks/concat"));tasks.push(require("./tasks/core"));tasks.push(require("./tasks/read"));tasks.push(require("./tasks/write"));tasks.push(require("./tasks/tasks"));tasks.forEach(function(mod){for(var task in mod){exports[task]=mod[task]}})});define("gear",["require","exports","blob","registry","queue"],function(require,exports,blob,registry,queue){exports.Blob=blob.Blob;exports.Registry=registry.Registry;exports.Queue=queue.Queue});
+var requirejs,require,define;(function(global){"use strict";var version="2.0.2",commentRegExp=/(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,cjsRequireRegExp=/require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,jsSuffixRegExp=/\.js$/,currDirRegExp=/^\.\//,ostring=Object.prototype.toString,ap=Array.prototype,aps=ap.slice,apsp=ap.splice,isBrowser=!!(typeof window!=="undefined"&&navigator&&document),isWebWorker=!isBrowser&&typeof importScripts!=="undefined",readyRegExp=isBrowser&&navigator.platform==="PLAYSTATION 3"?/^complete$/:/^(complete|loaded)$/,defContextName="_",isOpera=typeof opera!=="undefined"&&opera.toString()==="[object Opera]",contexts={},cfg={},globalDefQueue=[],useInteractive=false,req,s,head,baseElement,dataMain,src,interactiveScript,currentlyAddingScript,mainScript,subPath;function isFunction(it){return ostring.call(it)==="[object Function]"}function isArray(it){return ostring.call(it)==="[object Array]"}function each(ary,func){if(ary){var i;for(i=0;i<ary.length;i+=1){if(ary[i]&&func(ary[i],i,ary)){break}}}}function eachReverse(ary,func){if(ary){var i;for(i=ary.length-1;i>-1;i-=1){if(ary[i]&&func(ary[i],i,ary)){break}}}}function hasProp(obj,prop){return obj.hasOwnProperty(prop)}function eachProp(obj,func){var prop;for(prop in obj){if(obj.hasOwnProperty(prop)){if(func(obj[prop],prop)){break}}}}function mixin(target,source,force,deepStringMixin){if(source){eachProp(source,function(value,prop){if(force||!hasProp(target,prop)){if(deepStringMixin&&typeof value!=="string"){if(!target[prop]){target[prop]={}}mixin(target[prop],value,force,deepStringMixin)}else{target[prop]=value}}})}return target}function bind(obj,fn){return function(){return fn.apply(obj,arguments)}}function scripts(){return document.getElementsByTagName("script")}function getGlobal(value){if(!value){return value}var g=global;each(value.split("."),function(part){g=g[part]});return g}function makeContextModuleFunc(func,relMap,enableBuildCallback){return function(){var args=aps.call(arguments,0),lastArg;if(enableBuildCallback&&isFunction(lastArg=args[args.length-1])){lastArg.__requireJsBuild=true}args.push(relMap);return func.apply(null,args)}}function addRequireMethods(req,context,relMap){each([["toUrl"],["undef"],["defined","requireDefined"],["specified","requireSpecified"]],function(item){var prop=item[1]||item[0];req[item[0]]=context?makeContextModuleFunc(context[prop],relMap):function(){var ctx=contexts[defContextName];return ctx[prop].apply(ctx,arguments)}})}function makeError(id,msg,err,requireModules){var e=new Error(msg+"\nhttp://requirejs.org/docs/errors.html#"+id);e.requireType=id;e.requireModules=requireModules;if(err){e.originalError=err}return e}if(typeof define!=="undefined"){return}if(typeof requirejs!=="undefined"){if(isFunction(requirejs)){return}cfg=requirejs;requirejs=undefined}if(typeof require!=="undefined"&&!isFunction(require)){cfg=require;require=undefined}function newContext(contextName){var config={waitSeconds:7,baseUrl:"./",paths:{},pkgs:{},shim:{}},registry={},undefEvents={},defQueue=[],defined={},urlFetched={},requireCounter=1,unnormalizedCounter=1,waitAry=[],inCheckLoaded,Module,context,handlers,checkLoadedTimeoutId;function trimDots(ary){var i,part;for(i=0;ary[i];i+=1){part=ary[i];if(part==="."){ary.splice(i,1);i-=1}else if(part===".."){if(i===1&&(ary[2]===".."||ary[0]==="..")){break}else if(i>0){ary.splice(i-1,2);i-=2}}}}function normalize(name,baseName,applyMap){var baseParts=baseName&&baseName.split("/"),map=config.map,starMap=map&&map["*"],pkgName,pkgConfig,mapValue,nameParts,i,j,nameSegment,foundMap;if(name&&name.charAt(0)==="."){if(baseName){if(config.pkgs[baseName]){baseParts=[baseName]}else{baseParts=baseParts.slice(0,baseParts.length-1)}name=baseParts.concat(name.split("/"));trimDots(name);pkgConfig=config.pkgs[pkgName=name[0]];name=name.join("/");if(pkgConfig&&name===pkgName+"/"+pkgConfig.main){name=pkgName}}else if(name.indexOf("./")===0){name=name.substring(2)}}if(applyMap&&(baseParts||starMap)&&map){nameParts=name.split("/");for(i=nameParts.length;i>0;i-=1){nameSegment=nameParts.slice(0,i).join("/");if(baseParts){for(j=baseParts.length;j>0;j-=1){mapValue=map[baseParts.slice(0,j).join("/")];if(mapValue){mapValue=mapValue[nameSegment];if(mapValue){foundMap=mapValue;break}}}}if(!foundMap&&starMap&&starMap[nameSegment]){foundMap=starMap[nameSegment]}if(foundMap){nameParts.splice(0,i,foundMap);name=nameParts.join("/");break}}}return name}function removeScript(name){if(isBrowser){each(scripts(),function(scriptNode){if(scriptNode.getAttribute("data-requiremodule")===name&&scriptNode.getAttribute("data-requirecontext")===context.contextName){scriptNode.parentNode.removeChild(scriptNode);return true}})}}function hasPathFallback(id){var pathConfig=config.paths[id];if(pathConfig&&isArray(pathConfig)&&pathConfig.length>1){removeScript(id);pathConfig.shift();context.undef(id);context.require([id]);return true}}function makeModuleMap(name,parentModuleMap,isNormalized,applyMap){var index=name?name.indexOf("!"):-1,prefix=null,parentName=parentModuleMap?parentModuleMap.name:null,originalName=name,isDefine=true,normalizedName="",url,pluginModule,suffix;if(!name){isDefine=false;name="_@r"+(requireCounter+=1)}if(index!==-1){prefix=name.substring(0,index);name=name.substring(index+1,name.length)}if(prefix){prefix=normalize(prefix,parentName,applyMap);pluginModule=defined[prefix]}if(name){if(prefix){if(pluginModule&&pluginModule.normalize){normalizedName=pluginModule.normalize(name,function(name){return normalize(name,parentName,applyMap)})}else{normalizedName=normalize(name,parentName,applyMap)}}else{normalizedName=normalize(name,parentName,applyMap);url=context.nameToUrl(name,null,parentModuleMap)}}suffix=prefix&&!pluginModule&&!isNormalized?"_unnormalized"+(unnormalizedCounter+=1):"";return{prefix:prefix,name:normalizedName,parentMap:parentModuleMap,unnormalized:!!suffix,url:url,originalName:originalName,isDefine:isDefine,id:(prefix?prefix+"!"+normalizedName:normalizedName)+suffix}}function getModule(depMap){var id=depMap.id,mod=registry[id];if(!mod){mod=registry[id]=new context.Module(depMap)}return mod}function on(depMap,name,fn){var id=depMap.id,mod=registry[id];if(hasProp(defined,id)&&(!mod||mod.defineEmitComplete)){if(name==="defined"){fn(defined[id])}}else{getModule(depMap).on(name,fn)}}function onError(err,errback){var ids=err.requireModules,notified=false;if(errback){errback(err)}else{each(ids,function(id){var mod=registry[id];if(mod){mod.error=err;if(mod.events.error){notified=true;mod.emit("error",err)}}});if(!notified){req.onError(err)}}}function takeGlobalQueue(){if(globalDefQueue.length){apsp.apply(defQueue,[defQueue.length-1,0].concat(globalDefQueue));globalDefQueue=[]}}function makeRequire(mod,enableBuildCallback,altRequire){var relMap=mod&&mod.map,modRequire=makeContextModuleFunc(altRequire||context.require,relMap,enableBuildCallback);addRequireMethods(modRequire,context,relMap);modRequire.isBrowser=isBrowser;return modRequire}handlers={require:function(mod){return makeRequire(mod)},exports:function(mod){mod.usingExports=true;if(mod.map.isDefine){return mod.exports=defined[mod.map.id]={}}},module:function(mod){return mod.module={id:mod.map.id,uri:mod.map.url,config:function(){return config.config&&config.config[mod.map.id]||{}},exports:defined[mod.map.id]}}};function removeWaiting(id){delete registry[id];each(waitAry,function(mod,i){if(mod.map.id===id){waitAry.splice(i,1);if(!mod.defined){context.waitCount-=1}return true}})}function findCycle(mod,traced){var id=mod.map.id,depArray=mod.depMaps,foundModule;if(!mod.inited){return}if(traced[id]){return mod}traced[id]=true;each(depArray,function(depMap){var depId=depMap.id,depMod=registry[depId];if(!depMod){return}if(!depMod.inited||!depMod.enabled){foundModule=null;delete traced[id];return true}return foundModule=findCycle(depMod,mixin({},traced))});return foundModule}function forceExec(mod,traced,uninited){var id=mod.map.id,depArray=mod.depMaps;if(!mod.inited||!mod.map.isDefine){return}if(traced[id]){return defined[id]}traced[id]=mod;each(depArray,function(depMap){var depId=depMap.id,depMod=registry[depId],value;if(handlers[depId]){return}if(depMod){if(!depMod.inited||!depMod.enabled){uninited[id]=true;return}value=forceExec(depMod,traced,uninited);if(!uninited[depId]){mod.defineDepById(depId,value)}}});mod.check(true);return defined[id]}function modCheck(mod){mod.check()}function checkLoaded(){var waitInterval=config.waitSeconds*1e3,expired=waitInterval&&context.startTime+waitInterval<(new Date).getTime(),noLoads=[],stillLoading=false,needCycleCheck=true,map,modId,err,usingPathFallback;if(inCheckLoaded){return}inCheckLoaded=true;eachProp(registry,function(mod){map=mod.map;modId=map.id;if(!mod.enabled){return}if(!mod.error){if(!mod.inited&&expired){if(hasPathFallback(modId)){usingPathFallback=true;stillLoading=true}else{noLoads.push(modId);removeScript(modId)}}else if(!mod.inited&&mod.fetched&&map.isDefine){stillLoading=true;if(!map.prefix){return needCycleCheck=false}}}});if(expired&&noLoads.length){err=makeError("timeout","Load timeout for modules: "+noLoads,null,noLoads);err.contextName=context.contextName;return onError(err)}if(needCycleCheck){each(waitAry,function(mod){if(mod.defined){return}var cycleMod=findCycle(mod,{}),traced={};if(cycleMod){forceExec(cycleMod,traced,{});eachProp(traced,modCheck)}});eachProp(registry,modCheck)}if((!expired||usingPathFallback)&&stillLoading){if((isBrowser||isWebWorker)&&!checkLoadedTimeoutId){checkLoadedTimeoutId=setTimeout(function(){checkLoadedTimeoutId=0;checkLoaded()},50)}}inCheckLoaded=false}Module=function(map){this.events=undefEvents[map.id]||{};this.map=map;this.shim=config.shim[map.id];this.depExports=[];this.depMaps=[];this.depMatched=[];this.pluginMaps={};this.depCount=0};Module.prototype={init:function(depMaps,factory,errback,options){options=options||{};if(this.inited){return}this.factory=factory;if(errback){this.on("error",errback)}else if(this.events.error){errback=bind(this,function(err){this.emit("error",err)})}this.depMaps=depMaps&&depMaps.slice(0);this.depMaps.rjsSkipMap=depMaps.rjsSkipMap;this.errback=errback;this.inited=true;this.ignore=options.ignore;if(options.enabled||this.enabled){this.enable()}else{this.check()}},defineDepById:function(id,depExports){var i;each(this.depMaps,function(map,index){if(map.id===id){i=index;return true}});return this.defineDep(i,depExports)},defineDep:function(i,depExports){if(!this.depMatched[i]){this.depMatched[i]=true;this.depCount-=1;this.depExports[i]=depExports}},fetch:function(){if(this.fetched){return}this.fetched=true;context.startTime=(new Date).getTime();var map=this.map;if(this.shim){makeRequire(this,true)(this.shim.deps||[],bind(this,function(){return map.prefix?this.callPlugin():this.load()}))}else{return map.prefix?this.callPlugin():this.load()}},load:function(){var url=this.map.url;if(!urlFetched[url]){urlFetched[url]=true;context.load(this.map.id,url)}},check:function(silent){if(!this.enabled||this.enabling){return}var id=this.map.id,depExports=this.depExports,exports=this.exports,factory=this.factory,err,cjsModule;if(!this.inited){this.fetch()}else if(this.error){this.emit("error",this.error)}else if(!this.defining){this.defining=true;if(this.depCount<1&&!this.defined){if(isFunction(factory)){if(this.events.error){try{exports=context.execCb(id,factory,depExports,exports)}catch(e){err=e}}else{exports=context.execCb(id,factory,depExports,exports)}if(this.map.isDefine){cjsModule=this.module;if(cjsModule&&cjsModule.exports!==undefined&&cjsModule.exports!==this.exports){exports=cjsModule.exports}else if(exports===undefined&&this.usingExports){exports=this.exports}}if(err){err.requireMap=this.map;err.requireModules=[this.map.id];err.requireType="define";return onError(this.error=err)}}else{exports=factory}this.exports=exports;if(this.map.isDefine&&!this.ignore){defined[id]=exports;if(req.onResourceLoad){req.onResourceLoad(context,this.map,this.depMaps)}}delete registry[id];this.defined=true;context.waitCount-=1;if(context.waitCount===0){waitAry=[]}}this.defining=false;if(!silent){if(this.defined&&!this.defineEmitted){this.defineEmitted=true;this.emit("defined",this.exports);this.defineEmitComplete=true}}}},callPlugin:function(){var map=this.map,id=map.id,pluginMap=makeModuleMap(map.prefix,null,false,true);on(pluginMap,"defined",bind(this,function(plugin){var name=this.map.name,parentName=this.map.parentMap?this.map.parentMap.name:null,load,normalizedMap,normalizedMod;if(this.map.unnormalized){if(plugin.normalize){name=plugin.normalize(name,function(name){return normalize(name,parentName,true)})||""}normalizedMap=makeModuleMap(map.prefix+"!"+name,this.map.parentMap,false,true);on(normalizedMap,"defined",bind(this,function(value){this.init([],function(){return value},null,{enabled:true,ignore:true})}));normalizedMod=registry[normalizedMap.id];if(normalizedMod){if(this.events.error){normalizedMod.on("error",bind(this,function(err){this.emit("error",err)}))}normalizedMod.enable()}return}load=bind(this,function(value){this.init([],function(){return value},null,{enabled:true})});load.error=bind(this,function(err){this.inited=true;this.error=err;err.requireModules=[id];eachProp(registry,function(mod){if(mod.map.id.indexOf(id+"_unnormalized")===0){removeWaiting(mod.map.id)}});onError(err)});load.fromText=function(moduleName,text){var hasInteractive=useInteractive;if(hasInteractive){useInteractive=false}getModule(makeModuleMap(moduleName));req.exec(text);if(hasInteractive){useInteractive=true}context.completeLoad(moduleName)};plugin.load(map.name,makeRequire(map.parentMap,true,function(deps,cb){deps.rjsSkipMap=true;return context.require(deps,cb)}),load,config)}));context.enable(pluginMap,this);this.pluginMaps[pluginMap.id]=pluginMap},enable:function(){this.enabled=true;if(!this.waitPushed){waitAry.push(this);context.waitCount+=1;this.waitPushed=true}this.enabling=true;each(this.depMaps,bind(this,function(depMap,i){var id,mod,handler;if(typeof depMap==="string"){depMap=makeModuleMap(depMap,this.map.isDefine?this.map:this.map.parentMap,false,!this.depMaps.rjsSkipMap);this.depMaps[i]=depMap;handler=handlers[depMap.id];if(handler){this.depExports[i]=handler(this);return}this.depCount+=1;on(depMap,"defined",bind(this,function(depExports){this.defineDep(i,depExports);this.check()}));if(this.errback){on(depMap,"error",this.errback)}}id=depMap.id;mod=registry[id];if(!handlers[id]&&mod&&!mod.enabled){context.enable(depMap,this)}}));eachProp(this.pluginMaps,bind(this,function(pluginMap){var mod=registry[pluginMap.id];if(mod&&!mod.enabled){context.enable(pluginMap,this)}}));this.enabling=false;this.check()},on:function(name,cb){var cbs=this.events[name];if(!cbs){cbs=this.events[name]=[]}cbs.push(cb)},emit:function(name,evt){each(this.events[name],function(cb){cb(evt)});if(name==="error"){delete this.events[name]}}};function callGetModule(args){getModule(makeModuleMap(args[0],null,true)).init(args[1],args[2])}function removeListener(node,func,name,ieName){if(node.detachEvent&&!isOpera){if(ieName){node.detachEvent(ieName,func)}}else{node.removeEventListener(name,func,false)}}function getScriptData(evt){var node=evt.currentTarget||evt.srcElement;removeListener(node,context.onScriptLoad,"load","onreadystatechange");removeListener(node,context.onScriptError,"error");return{node:node,id:node&&node.getAttribute("data-requiremodule")}}return context={config:config,contextName:contextName,registry:registry,defined:defined,urlFetched:urlFetched,waitCount:0,defQueue:defQueue,Module:Module,makeModuleMap:makeModuleMap,configure:function(cfg){if(cfg.baseUrl){if(cfg.baseUrl.charAt(cfg.baseUrl.length-1)!=="/"){cfg.baseUrl+="/"}}var pkgs=config.pkgs,shim=config.shim,paths=config.paths,map=config.map;mixin(config,cfg,true);config.paths=mixin(paths,cfg.paths,true);if(cfg.map){config.map=mixin(map||{},cfg.map,true,true)}if(cfg.shim){eachProp(cfg.shim,function(value,id){if(isArray(value)){value={deps:value}}if(value.exports&&!value.exports.__buildReady){value.exports=context.makeShimExports(value.exports)}shim[id]=value});config.shim=shim}if(cfg.packages){each(cfg.packages,function(pkgObj){var location;pkgObj=typeof pkgObj==="string"?{name:pkgObj}:pkgObj;location=pkgObj.location;pkgs[pkgObj.name]={name:pkgObj.name,location:location||pkgObj.name,main:(pkgObj.main||"main").replace(currDirRegExp,"").replace(jsSuffixRegExp,"")}});config.pkgs=pkgs}eachProp(registry,function(mod,id){mod.map=makeModuleMap(id)});if(cfg.deps||cfg.callback){context.require(cfg.deps||[],cfg.callback)}},makeShimExports:function(exports){var func;if(typeof exports==="string"){func=function(){return getGlobal(exports)};func.exports=exports;return func}else{return function(){return exports.apply(global,arguments)}}},requireDefined:function(id,relMap){return hasProp(defined,makeModuleMap(id,relMap,false,true).id)},requireSpecified:function(id,relMap){id=makeModuleMap(id,relMap,false,true).id;return hasProp(defined,id)||hasProp(registry,id)},require:function(deps,callback,errback,relMap){var moduleName,id,map,requireMod,args;if(typeof deps==="string"){if(isFunction(callback)){return onError(makeError("requireargs","Invalid require call"),errback)}if(req.get){return req.get(context,deps,callback)}moduleName=deps;relMap=callback;map=makeModuleMap(moduleName,relMap,false,true);id=map.id;if(!hasProp(defined,id)){return onError(makeError("notloaded",'Module name "'+id+'" has not been loaded yet for context: '+contextName))}return defined[id]}if(errback&&!isFunction(errback)){relMap=errback;errback=undefined}if(callback&&!isFunction(callback)){relMap=callback;callback=undefined}takeGlobalQueue();while(defQueue.length){args=defQueue.shift();if(args[0]===null){return onError(makeError("mismatch","Mismatched anonymous define() module: "+args[args.length-1]))}else{callGetModule(args)}}requireMod=getModule(makeModuleMap(null,relMap));requireMod.init(deps,callback,errback,{enabled:true});checkLoaded();return context.require},undef:function(id){var map=makeModuleMap(id,null,true),mod=registry[id];delete defined[id];delete urlFetched[map.url];delete undefEvents[id];if(mod){if(mod.events.defined){undefEvents[id]=mod.events}removeWaiting(id)}},enable:function(depMap,parent){var mod=registry[depMap.id];if(mod){getModule(depMap).enable()}},completeLoad:function(moduleName){var shim=config.shim[moduleName]||{},shExports=shim.exports&&shim.exports.exports,found,args,mod;takeGlobalQueue();while(defQueue.length){args=defQueue.shift();if(args[0]===null){args[0]=moduleName;if(found){break}found=true}else if(args[0]===moduleName){found=true}callGetModule(args)}mod=registry[moduleName];if(!found&&!defined[moduleName]&&mod&&!mod.inited){if(config.enforceDefine&&(!shExports||!getGlobal(shExports))){if(hasPathFallback(moduleName)){return}else{return onError(makeError("nodefine","No define call for "+moduleName,null,[moduleName]))}}else{callGetModule([moduleName,shim.deps||[],shim.exports])}}checkLoaded()},toUrl:function(moduleNamePlusExt,relModuleMap){var index=moduleNamePlusExt.lastIndexOf("."),ext=null;if(index!==-1){ext=moduleNamePlusExt.substring(index,moduleNamePlusExt.length);moduleNamePlusExt=moduleNamePlusExt.substring(0,index)}return context.nameToUrl(moduleNamePlusExt,ext,relModuleMap)},nameToUrl:function(moduleName,ext,relModuleMap){var paths,pkgs,pkg,pkgPath,syms,i,parentModule,url,parentPath;moduleName=normalize(moduleName,relModuleMap&&relModuleMap.id,true);if(req.jsExtRegExp.test(moduleName)){url=moduleName+(ext||"")}else{paths=config.paths;pkgs=config.pkgs;syms=moduleName.split("/");for(i=syms.length;i>0;i-=1){parentModule=syms.slice(0,i).join("/");pkg=pkgs[parentModule];parentPath=paths[parentModule];if(parentPath){if(isArray(parentPath)){parentPath=parentPath[0]}syms.splice(0,i,parentPath);break}else if(pkg){if(moduleName===pkg.name){pkgPath=pkg.location+"/"+pkg.main}else{pkgPath=pkg.location}syms.splice(0,i,pkgPath);break}}url=syms.join("/")+(ext||".js");url=(url.charAt(0)==="/"||url.match(/^[\w\+\.\-]+:/)?"":config.baseUrl)+url}return config.urlArgs?url+((url.indexOf("?")===-1?"?":"&")+config.urlArgs):url},load:function(id,url){req.load(context,id,url)},execCb:function(name,callback,args,exports){return callback.apply(exports,args)},onScriptLoad:function(evt){if(evt.type==="load"||readyRegExp.test((evt.currentTarget||evt.srcElement).readyState)){interactiveScript=null;var data=getScriptData(evt);context.completeLoad(data.id)}},onScriptError:function(evt){var data=getScriptData(evt);if(!hasPathFallback(data.id)){return onError(makeError("scripterror","Script error",evt,[data.id]))}}}}req=requirejs=function(deps,callback,errback,optional){var contextName=defContextName,context,config;if(!isArray(deps)&&typeof deps!=="string"){config=deps;if(isArray(callback)){deps=callback;callback=errback;errback=optional}else{deps=[]}}if(config&&config.context){contextName=config.context}context=contexts[contextName];if(!context){context=contexts[contextName]=req.s.newContext(contextName)}if(config){context.configure(config)}return context.require(deps,callback,errback)};req.config=function(config){return req(config)};if(!require){require=req}req.version=version;req.jsExtRegExp=/^\/|:|\?|\.js$/;req.isBrowser=isBrowser;s=req.s={contexts:contexts,newContext:newContext};req({});addRequireMethods(req);if(isBrowser){head=s.head=document.getElementsByTagName("head")[0];baseElement=document.getElementsByTagName("base")[0];if(baseElement){head=s.head=baseElement.parentNode}}req.onError=function(err){throw err};req.load=function(context,moduleName,url){var config=context&&context.config||{},node;if(isBrowser){node=config.xhtml?document.createElementNS("http://www.w3.org/1999/xhtml","html:script"):document.createElement("script");node.type=config.scriptType||"text/javascript";node.charset="utf-8";node.setAttribute("data-requirecontext",context.contextName);node.setAttribute("data-requiremodule",moduleName);if(node.attachEvent&&!(node.attachEvent.toString&&node.attachEvent.toString().indexOf("[native code")<0)&&!isOpera){useInteractive=true;node.attachEvent("onreadystatechange",context.onScriptLoad)}else{node.addEventListener("load",context.onScriptLoad,false);node.addEventListener("error",context.onScriptError,false)}node.src=url;currentlyAddingScript=node;if(baseElement){head.insertBefore(node,baseElement)}else{head.appendChild(node)}currentlyAddingScript=null;return node}else if(isWebWorker){importScripts(url);context.completeLoad(moduleName)}};function getInteractiveScript(){if(interactiveScript&&interactiveScript.readyState==="interactive"){return interactiveScript}eachReverse(scripts(),function(script){if(script.readyState==="interactive"){return interactiveScript=script}});return interactiveScript}if(isBrowser){eachReverse(scripts(),function(script){if(!head){head=script.parentNode}dataMain=script.getAttribute("data-main");if(dataMain){src=dataMain.split("/");mainScript=src.pop();subPath=src.length?src.join("/")+"/":"./";if(!cfg.baseUrl){cfg.baseUrl=subPath}dataMain=mainScript.replace(jsSuffixRegExp,"");cfg.deps=cfg.deps?cfg.deps.concat(dataMain):[dataMain];return true}})}define=function(name,deps,callback){var node,context;if(typeof name!=="string"){callback=deps;deps=name;name=null}if(!isArray(deps)){callback=deps;deps=[]}if(!deps.length&&isFunction(callback)){if(callback.length){callback.toString().replace(commentRegExp,"").replace(cjsRequireRegExp,function(match,dep){deps.push(dep)});deps=(callback.length===1?["require"]:["require","exports","module"]).concat(deps)}}if(useInteractive){node=currentlyAddingScript||getInteractiveScript();if(node){if(!name){name=node.getAttribute("data-requiremodule")}context=contexts[node.getAttribute("data-requirecontext")]}}(context?context.defQueue:globalDefQueue).push([name,deps,callback])};define.amd={jQuery:true};req.exec=function(text){return eval(text)};req(cfg)})(this);define("async",["require","exports","module"],function(require,exports,module){(function(){var async={};var root,previous_async;root=this;if(root!=null){previous_async=root.async}async.noConflict=function(){root.async=previous_async;return async};function only_once(fn){var called=false;return function(){if(called)throw new Error("Callback was already called.");called=true;fn.apply(root,arguments)}}var _each=function(arr,iterator){if(arr.forEach){return arr.forEach(iterator)}for(var i=0;i<arr.length;i+=1){iterator(arr[i],i,arr)}};var _map=function(arr,iterator){if(arr.map){return arr.map(iterator)}var results=[];_each(arr,function(x,i,a){results.push(iterator(x,i,a))});return results};var _reduce=function(arr,iterator,memo){if(arr.reduce){return arr.reduce(iterator,memo)}_each(arr,function(x,i,a){memo=iterator(memo,x,i,a)});return memo};var _keys=function(obj){if(Object.keys){return Object.keys(obj)}var keys=[];for(var k in obj){if(obj.hasOwnProperty(k)){keys.push(k)}}return keys};if(typeof process==="undefined"||!process.nextTick){if(typeof setImmediate==="function"){async.nextTick=function(fn){setImmediate(fn)}}else{async.nextTick=function(fn){setTimeout(fn,0)}}}else{async.nextTick=process.nextTick}async.each=function(arr,iterator,callback){callback=callback||function(){};if(!arr.length){return callback()}var completed=0;_each(arr,function(x){iterator(x,only_once(function(err){if(err){callback(err);callback=function(){}}else{completed+=1;if(completed>=arr.length){callback(null)}}}))})};async.forEach=async.each;async.eachSeries=function(arr,iterator,callback){callback=callback||function(){};if(!arr.length){return callback()}var completed=0;var iterate=function(){var sync=true;iterator(arr[completed],function(err){if(err){callback(err);callback=function(){}}else{completed+=1;if(completed>=arr.length){callback(null)}else{if(sync){async.nextTick(iterate)}else{iterate()}}}});sync=false};iterate()};async.forEachSeries=async.eachSeries;async.eachLimit=function(arr,limit,iterator,callback){var fn=_eachLimit(limit);fn.apply(null,[arr,iterator,callback])};async.forEachLimit=async.eachLimit;var _eachLimit=function(limit){return function(arr,iterator,callback){callback=callback||function(){};if(!arr.length||limit<=0){return callback()}var completed=0;var started=0;var running=0;(function replenish(){if(completed>=arr.length){return callback()}while(running<limit&&started<arr.length){started+=1;running+=1;iterator(arr[started-1],function(err){if(err){callback(err);callback=function(){}}else{completed+=1;running-=1;if(completed>=arr.length){callback()}else{replenish()}}})}})()}};var doParallel=function(fn){return function(){var args=Array.prototype.slice.call(arguments);return fn.apply(null,[async.each].concat(args))}};var doParallelLimit=function(limit,fn){return function(){var args=Array.prototype.slice.call(arguments);return fn.apply(null,[_eachLimit(limit)].concat(args))}};var doSeries=function(fn){return function(){var args=Array.prototype.slice.call(arguments);return fn.apply(null,[async.eachSeries].concat(args))}};var _asyncMap=function(eachfn,arr,iterator,callback){var results=[];arr=_map(arr,function(x,i){return{index:i,value:x}});eachfn(arr,function(x,callback){iterator(x.value,function(err,v){results[x.index]=v;callback(err)})},function(err){callback(err,results)})};async.map=doParallel(_asyncMap);async.mapSeries=doSeries(_asyncMap);async.mapLimit=function(arr,limit,iterator,callback){return _mapLimit(limit)(arr,iterator,callback)};var _mapLimit=function(limit){return doParallelLimit(limit,_asyncMap)};async.reduce=function(arr,memo,iterator,callback){async.eachSeries(arr,function(x,callback){iterator(memo,x,function(err,v){memo=v;callback(err)})},function(err){callback(err,memo)})};async.inject=async.reduce;async.foldl=async.reduce;async.reduceRight=function(arr,memo,iterator,callback){var reversed=_map(arr,function(x){return x}).reverse();async.reduce(reversed,memo,iterator,callback)};async.foldr=async.reduceRight;var _filter=function(eachfn,arr,iterator,callback){var results=[];arr=_map(arr,function(x,i){return{index:i,value:x}});eachfn(arr,function(x,callback){iterator(x.value,function(v){if(v){results.push(x)}callback()})},function(err){callback(_map(results.sort(function(a,b){return a.index-b.index}),function(x){return x.value}))})};async.filter=doParallel(_filter);async.filterSeries=doSeries(_filter);async.select=async.filter;async.selectSeries=async.filterSeries;var _reject=function(eachfn,arr,iterator,callback){var results=[];arr=_map(arr,function(x,i){return{index:i,value:x}});eachfn(arr,function(x,callback){iterator(x.value,function(v){if(!v){results.push(x)}callback()})},function(err){callback(_map(results.sort(function(a,b){return a.index-b.index}),function(x){return x.value}))})};async.reject=doParallel(_reject);async.rejectSeries=doSeries(_reject);var _detect=function(eachfn,arr,iterator,main_callback){eachfn(arr,function(x,callback){iterator(x,function(result){if(result){main_callback(x);main_callback=function(){}}else{callback()}})},function(err){main_callback()})};async.detect=doParallel(_detect);async.detectSeries=doSeries(_detect);async.some=function(arr,iterator,main_callback){async.each(arr,function(x,callback){iterator(x,function(v){if(v){main_callback(true);main_callback=function(){}}callback()})},function(err){main_callback(false)})};async.any=async.some;async.every=function(arr,iterator,main_callback){async.each(arr,function(x,callback){iterator(x,function(v){if(!v){main_callback(false);main_callback=function(){}}callback()})},function(err){main_callback(true)})};async.all=async.every;async.sortBy=function(arr,iterator,callback){async.map(arr,function(x,callback){iterator(x,function(err,criteria){if(err){callback(err)}else{callback(null,{value:x,criteria:criteria})}})},function(err,results){if(err){return callback(err)}else{var fn=function(left,right){var a=left.criteria,b=right.criteria;return a<b?-1:a>b?1:0};callback(null,_map(results.sort(fn),function(x){return x.value}))}})};async.auto=function(tasks,callback){callback=callback||function(){};var keys=_keys(tasks);if(!keys.length){return callback(null)}var results={};var listeners=[];var addListener=function(fn){listeners.unshift(fn)};var removeListener=function(fn){for(var i=0;i<listeners.length;i+=1){if(listeners[i]===fn){listeners.splice(i,1);return}}};var taskComplete=function(){_each(listeners.slice(0),function(fn){fn()})};addListener(function(){if(_keys(results).length===keys.length){callback(null,results);callback=function(){}}});_each(keys,function(k){var task=tasks[k]instanceof Function?[tasks[k]]:tasks[k];var taskCallback=function(err){var args=Array.prototype.slice.call(arguments,1);if(args.length<=1){args=args[0]}if(err){var safeResults={};_each(_keys(results),function(rkey){safeResults[rkey]=results[rkey]});safeResults[k]=args;callback(err,safeResults);callback=function(){}}else{results[k]=args;async.nextTick(taskComplete)}};var requires=task.slice(0,Math.abs(task.length-1))||[];var ready=function(){return _reduce(requires,function(a,x){return a&&results.hasOwnProperty(x)},true)&&!results.hasOwnProperty(k)};if(ready()){task[task.length-1](taskCallback,results)}else{var listener=function(){if(ready()){removeListener(listener);task[task.length-1](taskCallback,results)}};addListener(listener)}})};async.waterfall=function(tasks,callback){callback=callback||function(){};if(!tasks.length){return callback()}var wrapIterator=function(iterator){return function(err){if(err){callback.apply(null,arguments);callback=function(){}}else{var args=Array.prototype.slice.call(arguments,1);var next=iterator.next();if(next){args.push(wrapIterator(next))}else{args.push(callback)}async.nextTick(function(){iterator.apply(null,args)})}}};wrapIterator(async.iterator(tasks))()};var _parallel=function(eachfn,tasks,callback){callback=callback||function(){};if(tasks.constructor===Array){eachfn.map(tasks,function(fn,callback){if(fn){fn(function(err){var args=Array.prototype.slice.call(arguments,1);if(args.length<=1){args=args[0]}callback.call(null,err,args)})}},callback)}else{var results={};eachfn.each(_keys(tasks),function(k,callback){tasks[k](function(err){var args=Array.prototype.slice.call(arguments,1);if(args.length<=1){args=args[0]}results[k]=args;callback(err)})},function(err){callback(err,results)})}};async.parallel=function(tasks,callback){_parallel({map:async.map,each:async.each},tasks,callback)};async.parallelLimit=function(tasks,limit,callback){_parallel({map:_mapLimit(limit),each:_eachLimit(limit)},tasks,callback)};async.series=function(tasks,callback){callback=callback||function(){};if(tasks.constructor===Array){async.mapSeries(tasks,function(fn,callback){if(fn){fn(function(err){var args=Array.prototype.slice.call(arguments,1);if(args.length<=1){args=args[0]}callback.call(null,err,args)})}},callback)}else{var results={};async.eachSeries(_keys(tasks),function(k,callback){tasks[k](function(err){var args=Array.prototype.slice.call(arguments,1);if(args.length<=1){args=args[0]}results[k]=args;callback(err)})},function(err){callback(err,results)})}};async.iterator=function(tasks){var makeCallback=function(index){var fn=function(){if(tasks.length){tasks[index].apply(null,arguments)}return fn.next()};fn.next=function(){return index<tasks.length-1?makeCallback(index+1):null};return fn};return makeCallback(0)};async.apply=function(fn){var args=Array.prototype.slice.call(arguments,1);return function(){return fn.apply(null,args.concat(Array.prototype.slice.call(arguments)))}};var _concat=function(eachfn,arr,fn,callback){var r=[];eachfn(arr,function(x,cb){fn(x,function(err,y){r=r.concat(y||[]);cb(err)})},function(err){callback(err,r)})};async.concat=doParallel(_concat);async.concatSeries=doSeries(_concat);async.whilst=function(test,iterator,callback){if(test()){var sync=true;iterator(function(err){if(err){return callback(err)}if(sync){async.nextTick(function(){async.whilst(test,iterator,callback)})}else{async.whilst(test,iterator,callback)}});sync=false}else{callback()}};async.doWhilst=function(iterator,test,callback){var sync=true;iterator(function(err){if(err){return callback(err)}if(test()){if(sync){async.nextTick(function(){async.doWhilst(iterator,test,callback)})}else{async.doWhilst(iterator,test,callback)}}else{callback()}});sync=false};async.until=function(test,iterator,callback){if(!test()){var sync=true;iterator(function(err){if(err){return callback(err)}if(sync){async.nextTick(function(){async.until(test,iterator,callback)})}else{async.until(test,iterator,callback)}});sync=false}else{callback()}};async.doUntil=function(iterator,test,callback){var sync=true;iterator(function(err){if(err){return callback(err)}if(!test()){if(sync){async.nextTick(function(){async.doUntil(iterator,test,callback)})}else{async.doUntil(iterator,test,callback)}}else{callback()}});sync=false};async.queue=function(worker,concurrency){if(concurrency===undefined){concurrency=1}function _insert(q,data,pos,callback){if(data.constructor!==Array){data=[data]}_each(data,function(task){var item={data:task,callback:typeof callback==="function"?callback:null};if(pos){q.tasks.unshift(item)}else{q.tasks.push(item)}if(q.saturated&&q.tasks.length===concurrency){q.saturated()}async.nextTick(q.process)})}var workers=0;var q={tasks:[],concurrency:concurrency,saturated:null,empty:null,drain:null,push:function(data,callback){_insert(q,data,false,callback)},unshift:function(data,callback){_insert(q,data,true,callback)},process:function(){if(workers<q.concurrency&&q.tasks.length){var task=q.tasks.shift();if(q.empty&&q.tasks.length===0){q.empty()}workers+=1;var sync=true;var next=function(){workers-=1;if(task.callback){task.callback.apply(task,arguments)}if(q.drain&&q.tasks.length+workers===0){q.drain()}q.process()};var cb=only_once(function(){var cbArgs=arguments;if(sync){async.nextTick(function(){next.apply(null,cbArgs)})}else{next.apply(null,arguments)}});worker(task.data,cb);sync=false}},length:function(){return q.tasks.length},running:function(){return workers}};return q};async.cargo=function(worker,payload){var working=false,tasks=[];var cargo={tasks:tasks,payload:payload,saturated:null,empty:null,drain:null,push:function(data,callback){if(data.constructor!==Array){data=[data]}_each(data,function(task){tasks.push({data:task,callback:typeof callback==="function"?callback:null});if(cargo.saturated&&tasks.length===payload){cargo.saturated()}});async.nextTick(cargo.process)},process:function process(){if(working)return;if(tasks.length===0){if(cargo.drain)cargo.drain();return}var ts=typeof payload==="number"?tasks.splice(0,payload):tasks.splice(0);var ds=_map(ts,function(task){return task.data});if(cargo.empty)cargo.empty();working=true;worker(ds,function(){working=false;var args=arguments;_each(ts,function(data){if(data.callback){data.callback.apply(null,args)}});process()})},length:function(){return tasks.length},running:function(){return working}};return cargo};var _console_fn=function(name){return function(fn){var args=Array.prototype.slice.call(arguments,1);fn.apply(null,args.concat([function(err){var args=Array.prototype.slice.call(arguments,1);if(typeof console!=="undefined"){if(err){if(console.error){console.error(err)}}else if(console[name]){_each(args,function(x){console[name](x)})}}}]))}};async.log=_console_fn("log");async.dir=_console_fn("dir");async.memoize=function(fn,hasher){var memo={};var queues={};hasher=hasher||function(x){return x};var memoized=function(){var args=Array.prototype.slice.call(arguments);var callback=args.pop();var key=hasher.apply(null,args);if(key in memo){callback.apply(null,memo[key])}else if(key in queues){queues[key].push(callback)}else{queues[key]=[callback];fn.apply(null,args.concat([function(){memo[key]=arguments;var q=queues[key];delete queues[key];for(var i=0,l=q.length;i<l;i++){q[i].apply(null,arguments)}}]))}};memoized.memo=memo;memoized.unmemoized=fn;return memoized};async.unmemoize=function(fn){return function(){return(fn.unmemoized||fn).apply(null,arguments)}};async.times=function(count,iterator,callback){var counter=[];for(var i=0;i<count;i++){counter.push(i)}return async.map(counter,iterator,callback)};async.timesSeries=function(count,iterator,callback){var counter=[];for(var i=0;i<count;i++){counter.push(i)}return async.mapSeries(counter,iterator,callback)};async.compose=function(){var fns=Array.prototype.reverse.call(arguments);return function(){var that=this;var args=Array.prototype.slice.call(arguments);var callback=args.pop();async.reduce(fns,args,function(newargs,fn,cb){fn.apply(that,newargs.concat([function(){var err=arguments[0];var nextargs=Array.prototype.slice.call(arguments,1);cb(err,nextargs)}]))},function(err,results){callback.apply(that,[err].concat(results))})}};async.applyEach=function(fns){var go=function(){var that=this;var args=Array.prototype.slice.call(arguments);var callback=args.pop();return async.each(fns,function(fn,cb){fn.apply(that,args.concat([cb]))},callback)};if(arguments.length>1){var args=Array.prototype.slice.call(arguments,1);return go.apply(this,args)}else{return go}};if(typeof define!=="undefined"&&define.amd){define([],function(){return async})}else if(typeof module!=="undefined"&&module.exports){module.exports=async}else{root.async=async}})()});define("./blob",["require","exports"],function(require,exports){var Blob=exports.Blob=function Blob(parts,properties){parts=typeof parts==="undefined"?[]:Array.prototype.concat(parts);properties=properties||{};function mergeProps(object,props){Object.keys(props).forEach(function(prop){object[prop]=props[prop]})}var result=parts.length?parts.shift():"",props={},self=this;if(result instanceof Blob){mergeProps(props,result);result=result.result}parts.forEach(function(part){if(part instanceof Blob){mergeProps(props,part);result+=part.result}else{result+=part}});mergeProps(props,properties);Object.keys(props).forEach(function(prop){if(prop!=="result"){Object.defineProperty(self,prop,{enumerable:true,value:props[prop]})}});Object.defineProperty(this,"result",{value:result})};Blob.prototype.toString=function(){return this.result};var readFile={server:function(name,encoding,callback,sync){var fs=require("fs");if(sync){readFile.serverSync(name,encoding,callback)}else{fs.readFile(name,encoding==="bin"?undefined:encoding,function(err,data){if(err){callback(err)}else{callback(null,new Blob(data,{name:name}))}})}},serverSync:function(name,encoding,callback){var fs=require("fs"),data;try{data=fs.readFileSync(name,encoding==="bin"?undefined:encoding);callback(null,new Blob(data,{name:name}))}catch(e){callback(e)}},client:function(name,encoding,callback){if(name in localStorage){callback(null,new Blob(localStorage[name],{name:name}))}else{callback("localStorage has no item "+name)}}};Blob.readFile=Blob.prototype.readFile=typeof module==="undefined"?readFile.client:readFile.server;var writeFile={server:function(name,blob,encoding,callback){var fs=require("fs"),path=require("path"),nodeExists=fs.exists||path.exists,mkdirp=require("mkdirp").mkdirp,Crypto=require("crypto");function writeFile(filename,b){fs.writeFile(filename,b.result,encoding==="bin"?undefined:encoding,function(err){callback(err,new Blob(b,{name:filename}))})}var dirname=path.resolve(path.dirname(name)),checksum;if(name.indexOf("{checksum}")>-1){checksum=Crypto.createHash("md5");checksum.update(blob.result);name=name.replace("{checksum}",checksum.digest("hex"))}nodeExists(dirname,function(exists){if(!exists){mkdirp(dirname,"0755",function(err){if(err){callback(err)}else{writeFile(name,blob)}})}else{writeFile(name,blob)}})},client:function(name,blob,encoding,callback){localStorage[name]=blob.result;callback(null,new blob.constructor(blob,{name:name}))}};Blob.writeFile=Blob.prototype.writeFile=typeof module==="undefined"?writeFile.client:writeFile.server});define("./tasks/concat",["require","exports"],function(require,exports){exports.concat=function(options,prev,blob,done){options=options||{};done(null,new blob.constructor([prev,options.callback?options.callback(blob):blob]))}});define("./tasks/core",["require","exports","../blob"],function(require,exports){var Blob=require("../blob").Blob;exports.load=function(string,done){done(null,new Blob(string))};var test=exports.test=function(options,blob,done){options=options||{};done(options.callback?options.callback(blob):null)};test.type="each";var get=exports.get=function get(index,blobs,done){done(null,blobs.slice(index,index+1))};get.type="collect";var log=exports.log=function log(string,blobs,done){this._log(string);done(null,blobs)};log.type="collect";var inspect=exports.inspect=function inspect(options,blobs,done){var self=this;blobs.forEach(function(blob,index){var obj={result:blob.result};Object.keys(blob).forEach(function(attr){obj[attr]=blob[attr]});self._log("blob "+(index+1)+": "+JSON.stringify(obj,null," "))});done(null,blobs)};inspect.type="collect";exports.noop=function(dummy,blob,done){done(null,blob)}});define("./tasks/read",["require","exports","../blob"],function(require,exports){var Blob=require("../blob").Blob;exports.read=function(options,done){options=typeof options==="string"?{name:options}:options;var encoding=options.encoding||"utf8";Blob.readFile(options.name,encoding,done,options.sync)}});define("./tasks/write",["require","exports"],function(require,exports){var write=exports.write=function write(options,blob,done){options=typeof options==="string"?{name:options}:options;var encoding=options.encoding||"utf8";blob.writeFile(options.name,blob,encoding,done)};write.type="slice"});define("./tasks/tasks",["require","exports","async"],function(require,exports){var async=require("async");var tasks=exports.tasks=function tasks(workflow,blobs,done){var item,task,name,requires,fn,auto={},self=this;function runTask(name,options,requires){return function(callback,result){var new_blobs=requires.length?[]:blobs;result=result||[];requires.forEach(function(item){new_blobs=new_blobs.concat(result[item])});self._dispatch(name,options,new_blobs,callback)}}for(item in workflow){task=workflow[item].task;if(task===undefined){task=["noop"]}else{if(!Array.isArray(task)){task=[task]}}requires=workflow[item].requires;if(requires===undefined){requires=[]}else{if(!Array.isArray(requires)){requires=[requires]}}fn=runTask(task[0],task[1],requires);auto[item]=requires?requires.concat(fn):fn}async.auto(auto,function(err,results){if(err){done(err);return}done(err,results.join?results.join:[])})};tasks.type="collect"});define("./registry",["require","exports","./tasks/concat","./default_tasks"],function(require,exports){if(typeof module!=="undefined"){var fs=require("fs"),path=require("path"),existsSync=fs.existsSync||path.existsSync}else{var default_tasks=require("./default_tasks")}var Registry=exports.Registry=function Registry(options){var self=this;this._tasks={};if(typeof __dirname!=="undefined"){this.load({dirname:__dirname+"/tasks"})}else if(typeof default_tasks!=="undefined"){this.load({tasks:default_tasks})}if(options){this.load(options)}Object.defineProperty(this,"tasks",{get:function(){return Object.keys(self._tasks)}})};Registry.prototype={load:function(options){options=options||{};if(options.module){this._loadModule(options.module)}if(options.dirname){this._loadDir(options.dirname)}if(options.filename){this._loadFile(options.filename)}if(options.tasks){this._loadTasks(options.tasks)}return this},_loadModule:function(name){this._loadDir(path.resolve("node_modules",name,"lib"))},_loadDir:function(dirname){if(!existsSync(dirname)){throw new Error("Directory "+dirname+" doesn't exist")}var fs=require("fs"),files=fs.readdirSync(dirname),self=this;files.forEach(function(filename){self._loadFile(path.join(dirname,filename))})},_loadFile:function(filename){if(path.extname(filename)!==".js"){return}if(!existsSync(filename)){throw new Error("File "+filename+" doesn't exist")}this._loadTasks(require(filename))},_loadTasks:function(tasks){var name;for(name in tasks){this._tasks[name]=tasks[name]}},task:function(name){if(!(name in this._tasks)){throw new Error("Task "+name+" doesn't exist")}return this._tasks[name]}}});define("./queue",["require","exports","async","./registry","./blob"],function(require,exports){var async=require("async"),Registry=require("./registry").Registry,Blob=require("./blob").Blob;function zip(arr1,arr2){var zipped=[];for(var i=0;i<Math.min(arr1.length,arr2.length);i++){zipped.push([arr1[i],arr2[i]])}return zipped}function arrayize(arr){return typeof arr==="undefined"?[]:Array.prototype.concat(arr)}var Queue=exports.Queue=function Queue(options){var self=this;options=options||{};this._logger=options.logger||console;this._registry=options.registry||new Registry;this._clear();this._registry.tasks.forEach(function(name){self[name]=self.task.bind(self,name)})};Queue.prototype._clear=function(){this._queue=[function(callback){callback(null,[])}]};Queue.prototype._log=function(message){this._logger.log(message)};Queue.prototype._dispatch=function(name,options,blobs,done){var task=this._registry.task(name),types={2:"append",3:"map",4:"reduce"},type=task.type?task.type:types[task.length];function doneWrap(err,res){if(err){err={task:name,error:err}}done(err,res)}switch(type){case"append":async.map(arrayize(options),task.bind(this),function(err,results){doneWrap(err,blobs.concat(results))});break;case"collect":task.call(this,options,blobs,doneWrap);break;case"slice":async.map(zip(arrayize(options),blobs),function(arr,cb){task.call(this,arr[0],arr[1],cb)}.bind(this),doneWrap);break;case"each":async.forEach(blobs,task.bind(this,options),function(err){doneWrap(err,blobs)});break;case"map":async.map(blobs,task.bind(this,options),doneWrap);break;case"syncmap":async.mapSeries(blobs,task.bind(this,options),doneWrap);break;case"reduce":async.reduce(blobs,new Blob,task.bind(this,options),function(err,results){doneWrap(err,[results])});break;default:throw new Error('Task "'+name+'" has unknown type. Add a type property to the task function.')}};Queue.prototype.task=function(name,options){this._queue.push(this._dispatch.bind(this,name,options));return this};Queue.prototype.run=function(callback){async.waterfall(this._queue,callback)}});define("../blob",["require","exports","blob"],function(require,exports,blob){exports.Blob=blob.Blob});define("./default_tasks",["require","exports","./tasks/concat","./tasks/core","./tasks/read","./tasks/write","./tasks/tasks"],function(require,exports){var tasks=[];tasks.push(require("./tasks/concat"));tasks.push(require("./tasks/core"));tasks.push(require("./tasks/read"));tasks.push(require("./tasks/write"));tasks.push(require("./tasks/tasks"));tasks.forEach(function(mod){for(var task in mod){exports[task]=mod[task]}})});define("gear",["require","exports","blob","registry","queue"],function(require,exports,blob,registry,queue){exports.Blob=blob.Blob;exports.Registry=registry.Registry;exports.Queue=queue.Queue});
View
14 index.js
@@ -4,12 +4,8 @@
* See the accompanying LICENSE file for terms.
*/
-if (process.env.GEAR_COV) {
- exports.Registry = require('./lib-cov/registry').Registry;
- exports.Queue = require('./lib-cov/queue').Queue;
- exports.Blob = require('./lib-cov/blob').Blob;
-} else {
- exports.Registry = require('./lib/registry').Registry;
- exports.Queue = require('./lib/queue').Queue;
- exports.Blob = require('./lib/blob').Blob;
-}
+var lib = process.env.COVER ? './lib-cov/' : './lib/';
+
+exports.Registry = require(lib + 'registry').Registry;
+exports.Queue = require(lib + 'queue').Queue;
+exports.Blob = require(lib + 'blob').Blob;
View
10 package.json
@@ -1,6 +1,6 @@
{
"name": "gear",
- "version": "0.8.3",
+ "version": "0.8.4",
"description": "Gear.js - Build System for Node.js and the Browser",
"author": "Stephen Murphy <stephen@hypernaut.com>",
"keywords": ["task", "build"],
@@ -12,12 +12,14 @@
"test": "mocha --require should"
},
"dependencies": {
- "async": "0.1.x",
+ "async": "0.2.x",
"mkdirp": "0.3.x"
},
"devDependencies": {
- "should": "1.2.x",
- "mocha": "1.7.x",
+ "should": "*",
+ "mocha": "*",
+ "mocha-istanbul": "*",
+ "istanbul": "*",
"gear-lib": ">= 0.8.x"
}
}
View
6 test/blob.js
@@ -1,5 +1,5 @@
-var Blob = require('../lib/blob').Blob,
- path = require('path'),
+var lib = process.env.COVER ? '../lib-cov/' : '../lib/',
+ Blob = require(lib + 'blob').Blob,
fs = require('fs'),
Crypto = require('crypto'),
fixtures = {
@@ -22,7 +22,7 @@ describe('Blob', function() {
Blob.readFile(fixtures.input, 'bin', function(err, blob) {
Blob.writeFile(fixtures.output, blob, 'bin', function() {
var file = fixtures.output.replace('{checksum}', checksum.digest('hex'));
- path.existsSync(file).should.equal(true);
+ fs.existsSync(file).should.equal(true);
done();
});
});
View
7 test/concat.js
@@ -1,6 +1,7 @@
-var should = require('should'),
- Blob = require('../lib/blob').Blob,
- concat = require('../lib/tasks/concat').concat,
+var lib = process.env.COVER ? '../lib-cov/' : '../lib/',
+ should = require('should'),
+ Blob = require(lib + 'blob').Blob,
+ concat = require(lib + 'tasks/concat').concat,
fixtures = {
prev: new Blob('abc'),
cur: new Blob('def')
View
7 test/core.js
@@ -1,6 +1,7 @@
-var should = require('should'),
- Blob = require('../lib/blob').Blob,
- test = require('../lib/tasks/core').test,
+var lib = process.env.COVER ? '../lib-cov/' : '../lib/',
+ should = require('should'),
+ Blob = require(lib + 'blob').Blob,
+ test = require(lib + 'tasks/core').test,
fixtures = {
blob: new Blob('HELLO'),
result: 'HELLO'
View
7 test/queue.js
@@ -1,6 +1,7 @@
-var should = require('should'),
+var lib = process.env.COVER ? '../lib-cov/' : '../lib/',
+ should = require('should'),
path = require('path'),
- gear = require(path.join(process.cwd(), './index')),
+ gear = require('..'),
fixtures = {
file: {name: 'test/fixtures/test1.js'},
files: [{name: 'test/fixtures/test1.js'}, {name: 'test/fixtures/test2.js'}],
@@ -71,5 +72,5 @@ describe('Queue', function() {
});
});
- it('should execute task callback');
+ // it('should execute task callback');
});
View
5 test/read.js
@@ -1,5 +1,6 @@
-var should = require('should'),
- read = require('../lib/tasks/read').read,
+var lib = process.env.COVER ? '../lib-cov/' : '../lib/',
+ should = require('should'),
+ read = require(lib + 'tasks/read').read,
fixtures = {
filename: 'test/fixtures/test1.js',
file: {name: 'test/fixtures/test1.js'},
View
3  test/registry.js
@@ -1,4 +1,5 @@
-var Registry = require('../lib/registry').Registry,
+var lib = process.env.COVER ? '../lib-cov/' : '../lib/',
+ Registry = require(lib + 'registry').Registry,
path = require('path'),
fixtures = {
dirname: path.join(process.cwd(), "test/fixtures/test-tasks"),
View
9 test/tasks.js
@@ -1,7 +1,8 @@
-var should = require('should'),
+var lib = process.env.COVER ? '../lib-cov/' : '../lib/',
+ should = require('should'),
path = require('path'),
- gear = require(path.join(process.cwd(), './index')),
- tasks = require('../lib/tasks/tasks').tasks,
+ gear = require('..'),
+ tasks = require(lib + 'tasks/tasks').tasks,
fixtures = {
files: [{name: 'test/fixtures/test1.js'}],
missing_files: [{name: 'test/fixtures/missing_file.js'}],
@@ -44,5 +45,5 @@ describe('tasks()', function() {
});
});
- it('should accept existing data');
+ // it('should accept existing data');
});
View
14 test/write.js
@@ -1,7 +1,7 @@
-var path = require('path'),
+var lib = process.env.COVER ? '../lib-cov/' : '../lib/',
fs = require('fs'),
- Blob = require('../lib/blob').Blob,
- write = require('../lib/tasks/write').write,
+ Blob = require(lib + 'blob').Blob,
+ write = require(lib + 'tasks/write').write,
fixtures = {
filename: 'testing/write.txt',
filename2: 'testing/write2.txt',
@@ -11,7 +11,7 @@ var path = require('path'),
};
function remove(filename) {
- if (path.existsSync(filename)) {
+ if (fs.existsSync(filename)) {
fs.unlinkSync(filename);
}
}
@@ -20,7 +20,7 @@ describe('write()', function() {
it('should write file', function(done) {
remove(fixtures.filename);
write(fixtures.filename, fixtures.blob, function(err, blob) {
- path.existsSync(fixtures.filename).should.equal(true);
+ fs.existsSync(fixtures.filename).should.equal(true);
done(err);
});
});
@@ -28,7 +28,7 @@ describe('write()', function() {
it('should write file with options', function(done) {
remove(fixtures.filename);
write({name: fixtures.filename2}, fixtures.blob, function(err, blob) {
- path.existsSync(fixtures.filename2).should.equal(true);
+ fs.existsSync(fixtures.filename2).should.equal(true);
done(err);
});
});
@@ -36,7 +36,7 @@ describe('write()', function() {
it('should replace {checksum} in filename', function(done) {
remove(fixtures.checksum_replaced);
write({name: fixtures.checksum}, fixtures.blob, function(err, blob) {
- path.existsSync(fixtures.checksum_replaced).should.equal(true);
+ fs.existsSync(fixtures.checksum_replaced).should.equal(true);
done(err);
});
});
Please sign in to comment.
Something went wrong with that request. Please try again.