diff --git a/build/main.js b/build/main.js
index c209cd9..c42c933 100644
--- a/build/main.js
+++ b/build/main.js
@@ -1781,6 +1781,309 @@ module.exports = isArray || function (val) {
};
},{}],5:[function(require,module,exports){
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+function EventEmitter() {
+ this._events = this._events || {};
+ this._maxListeners = this._maxListeners || undefined;
+}
+module.exports = EventEmitter;
+
+// Backwards-compat with node 0.10.x
+EventEmitter.EventEmitter = EventEmitter;
+
+EventEmitter.prototype._events = undefined;
+EventEmitter.prototype._maxListeners = undefined;
+
+// By default EventEmitters will print a warning if more than 10 listeners are
+// added to it. This is a useful default which helps finding memory leaks.
+EventEmitter.defaultMaxListeners = 10;
+
+// Obviously not all Emitters should be limited to 10. This function allows
+// that to be increased. Set to zero for unlimited.
+EventEmitter.prototype.setMaxListeners = function(n) {
+ if (!isNumber(n) || n < 0 || isNaN(n))
+ throw TypeError('n must be a positive number');
+ this._maxListeners = n;
+ return this;
+};
+
+EventEmitter.prototype.emit = function(type) {
+ var er, handler, len, args, i, listeners;
+
+ if (!this._events)
+ this._events = {};
+
+ // If there is no 'error' event listener then throw.
+ if (type === 'error') {
+ if (!this._events.error ||
+ (isObject(this._events.error) && !this._events.error.length)) {
+ er = arguments[1];
+ if (er instanceof Error) {
+ throw er; // Unhandled 'error' event
+ }
+ throw TypeError('Uncaught, unspecified "error" event.');
+ }
+ }
+
+ handler = this._events[type];
+
+ if (isUndefined(handler))
+ return false;
+
+ if (isFunction(handler)) {
+ switch (arguments.length) {
+ // fast cases
+ case 1:
+ handler.call(this);
+ break;
+ case 2:
+ handler.call(this, arguments[1]);
+ break;
+ case 3:
+ handler.call(this, arguments[1], arguments[2]);
+ break;
+ // slower
+ default:
+ len = arguments.length;
+ args = new Array(len - 1);
+ for (i = 1; i < len; i++)
+ args[i - 1] = arguments[i];
+ handler.apply(this, args);
+ }
+ } else if (isObject(handler)) {
+ len = arguments.length;
+ args = new Array(len - 1);
+ for (i = 1; i < len; i++)
+ args[i - 1] = arguments[i];
+
+ listeners = handler.slice();
+ len = listeners.length;
+ for (i = 0; i < len; i++)
+ listeners[i].apply(this, args);
+ }
+
+ return true;
+};
+
+EventEmitter.prototype.addListener = function(type, listener) {
+ var m;
+
+ if (!isFunction(listener))
+ throw TypeError('listener must be a function');
+
+ if (!this._events)
+ this._events = {};
+
+ // To avoid recursion in the case that type === "newListener"! Before
+ // adding it to the listeners, first emit "newListener".
+ if (this._events.newListener)
+ this.emit('newListener', type,
+ isFunction(listener.listener) ?
+ listener.listener : listener);
+
+ if (!this._events[type])
+ // Optimize the case of one listener. Don't need the extra array object.
+ this._events[type] = listener;
+ else if (isObject(this._events[type]))
+ // If we've already got an array, just append.
+ this._events[type].push(listener);
+ else
+ // Adding the second element, need to change to array.
+ this._events[type] = [this._events[type], listener];
+
+ // Check for listener leak
+ if (isObject(this._events[type]) && !this._events[type].warned) {
+ var m;
+ if (!isUndefined(this._maxListeners)) {
+ m = this._maxListeners;
+ } else {
+ m = EventEmitter.defaultMaxListeners;
+ }
+
+ if (m && m > 0 && this._events[type].length > m) {
+ this._events[type].warned = true;
+ console.error('(node) warning: possible EventEmitter memory ' +
+ 'leak detected. %d listeners added. ' +
+ 'Use emitter.setMaxListeners() to increase limit.',
+ this._events[type].length);
+ if (typeof console.trace === 'function') {
+ // not supported in IE 10
+ console.trace();
+ }
+ }
+ }
+
+ return this;
+};
+
+EventEmitter.prototype.on = EventEmitter.prototype.addListener;
+
+EventEmitter.prototype.once = function(type, listener) {
+ if (!isFunction(listener))
+ throw TypeError('listener must be a function');
+
+ var fired = false;
+
+ function g() {
+ this.removeListener(type, g);
+
+ if (!fired) {
+ fired = true;
+ listener.apply(this, arguments);
+ }
+ }
+
+ g.listener = listener;
+ this.on(type, g);
+
+ return this;
+};
+
+// emits a 'removeListener' event iff the listener was removed
+EventEmitter.prototype.removeListener = function(type, listener) {
+ var list, position, length, i;
+
+ if (!isFunction(listener))
+ throw TypeError('listener must be a function');
+
+ if (!this._events || !this._events[type])
+ return this;
+
+ list = this._events[type];
+ length = list.length;
+ position = -1;
+
+ if (list === listener ||
+ (isFunction(list.listener) && list.listener === listener)) {
+ delete this._events[type];
+ if (this._events.removeListener)
+ this.emit('removeListener', type, listener);
+
+ } else if (isObject(list)) {
+ for (i = length; i-- > 0;) {
+ if (list[i] === listener ||
+ (list[i].listener && list[i].listener === listener)) {
+ position = i;
+ break;
+ }
+ }
+
+ if (position < 0)
+ return this;
+
+ if (list.length === 1) {
+ list.length = 0;
+ delete this._events[type];
+ } else {
+ list.splice(position, 1);
+ }
+
+ if (this._events.removeListener)
+ this.emit('removeListener', type, listener);
+ }
+
+ return this;
+};
+
+EventEmitter.prototype.removeAllListeners = function(type) {
+ var key, listeners;
+
+ if (!this._events)
+ return this;
+
+ // not listening for removeListener, no need to emit
+ if (!this._events.removeListener) {
+ if (arguments.length === 0)
+ this._events = {};
+ else if (this._events[type])
+ delete this._events[type];
+ return this;
+ }
+
+ // emit removeListener for all listeners on all events
+ if (arguments.length === 0) {
+ for (key in this._events) {
+ if (key === 'removeListener') continue;
+ this.removeAllListeners(key);
+ }
+ this.removeAllListeners('removeListener');
+ this._events = {};
+ return this;
+ }
+
+ listeners = this._events[type];
+
+ if (isFunction(listeners)) {
+ this.removeListener(type, listeners);
+ } else {
+ // LIFO order
+ while (listeners.length)
+ this.removeListener(type, listeners[listeners.length - 1]);
+ }
+ delete this._events[type];
+
+ return this;
+};
+
+EventEmitter.prototype.listeners = function(type) {
+ var ret;
+ if (!this._events || !this._events[type])
+ ret = [];
+ else if (isFunction(this._events[type]))
+ ret = [this._events[type]];
+ else
+ ret = this._events[type].slice();
+ return ret;
+};
+
+EventEmitter.listenerCount = function(emitter, type) {
+ var ret;
+ if (!emitter._events || !emitter._events[type])
+ ret = 0;
+ else if (isFunction(emitter._events[type]))
+ ret = 1;
+ else
+ ret = emitter._events[type].length;
+ return ret;
+};
+
+function isFunction(arg) {
+ return typeof arg === 'function';
+}
+
+function isNumber(arg) {
+ return typeof arg === 'number';
+}
+
+function isObject(arg) {
+ return typeof arg === 'object' && arg !== null;
+}
+
+function isUndefined(arg) {
+ return arg === void 0;
+}
+
+},{}],6:[function(require,module,exports){
// shim for using process in browser
var process = module.exports = {};
@@ -1873,7 +2176,7 @@ process.chdir = function (dir) {
};
process.umask = function() { return 0; };
-},{}],6:[function(require,module,exports){
+},{}],7:[function(require,module,exports){
/*! Hammer.JS - v2.0.4 - 2014-09-28
* http://hammerjs.github.io/
*
@@ -4338,7 +4641,7 @@ if (typeof define == TYPE_FUNCTION && define.amd) {
})(window, document, 'Hammer');
-},{}],7:[function(require,module,exports){
+},{}],8:[function(require,module,exports){
/**
* Copyright (c) 2014-2015, Facebook, Inc.
* All rights reserved.
@@ -9299,7 +9602,7 @@ if (typeof define == TYPE_FUNCTION && define.amd) {
return Immutable;
}));
-},{}],8:[function(require,module,exports){
+},{}],9:[function(require,module,exports){
'use strict';
// private property
var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
@@ -9371,7 +9674,7 @@ exports.decode = function(input, utf8) {
};
-},{}],9:[function(require,module,exports){
+},{}],10:[function(require,module,exports){
'use strict';
function CompressedObject() {
this.compressedSize = 0;
@@ -9401,7 +9704,7 @@ CompressedObject.prototype = {
};
module.exports = CompressedObject;
-},{}],10:[function(require,module,exports){
+},{}],11:[function(require,module,exports){
'use strict';
exports.STORE = {
magic: "\x00\x00",
@@ -9416,7 +9719,7 @@ exports.STORE = {
};
exports.DEFLATE = require('./flate');
-},{"./flate":15}],11:[function(require,module,exports){
+},{"./flate":16}],12:[function(require,module,exports){
'use strict';
var utils = require('./utils');
@@ -9520,7 +9823,7 @@ module.exports = function crc32(input, crc) {
};
// vim: set shiftwidth=4 softtabstop=4:
-},{"./utils":28}],12:[function(require,module,exports){
+},{"./utils":29}],13:[function(require,module,exports){
'use strict';
var utils = require('./utils');
@@ -9629,7 +9932,7 @@ DataReader.prototype = {
};
module.exports = DataReader;
-},{"./utils":28}],13:[function(require,module,exports){
+},{"./utils":29}],14:[function(require,module,exports){
'use strict';
exports.base64 = false;
exports.binary = false;
@@ -9642,7 +9945,7 @@ exports.comment = null;
exports.unixPermissions = null;
exports.dosPermissions = null;
-},{}],14:[function(require,module,exports){
+},{}],15:[function(require,module,exports){
'use strict';
var utils = require('./utils');
@@ -9749,7 +10052,7 @@ exports.isRegExp = function (object) {
};
-},{"./utils":28}],15:[function(require,module,exports){
+},{"./utils":29}],16:[function(require,module,exports){
'use strict';
var USE_TYPEDARRAY = (typeof Uint8Array !== 'undefined') && (typeof Uint16Array !== 'undefined') && (typeof Uint32Array !== 'undefined');
@@ -9767,7 +10070,7 @@ exports.uncompress = function(input) {
return pako.inflateRaw(input);
};
-},{"pako":31}],16:[function(require,module,exports){
+},{"pako":32}],17:[function(require,module,exports){
'use strict';
var base64 = require('./base64');
@@ -9848,7 +10151,7 @@ JSZip.base64 = {
JSZip.compressions = require('./compressions');
module.exports = JSZip;
-},{"./base64":8,"./compressions":10,"./defaults":13,"./deprecatedPublicUtils":14,"./load":17,"./object":20,"./support":24}],17:[function(require,module,exports){
+},{"./base64":9,"./compressions":11,"./defaults":14,"./deprecatedPublicUtils":15,"./load":18,"./object":21,"./support":25}],18:[function(require,module,exports){
'use strict';
var base64 = require('./base64');
var ZipEntries = require('./zipEntries');
@@ -9881,7 +10184,7 @@ module.exports = function(data, options) {
return this;
};
-},{"./base64":8,"./zipEntries":29}],18:[function(require,module,exports){
+},{"./base64":9,"./zipEntries":30}],19:[function(require,module,exports){
(function (Buffer){
'use strict';
module.exports = function(data, encoding){
@@ -9892,7 +10195,7 @@ module.exports.test = function(b){
};
}).call(this,require("buffer").Buffer)
-},{"buffer":1}],19:[function(require,module,exports){
+},{"buffer":1}],20:[function(require,module,exports){
'use strict';
var Uint8ArrayReader = require('./uint8ArrayReader');
@@ -9914,7 +10217,7 @@ NodeBufferReader.prototype.readData = function(size) {
};
module.exports = NodeBufferReader;
-},{"./uint8ArrayReader":25}],20:[function(require,module,exports){
+},{"./uint8ArrayReader":26}],21:[function(require,module,exports){
'use strict';
var support = require('./support');
var utils = require('./utils');
@@ -10799,7 +11102,7 @@ var out = {
};
module.exports = out;
-},{"./base64":8,"./compressedObject":9,"./compressions":10,"./crc32":11,"./defaults":13,"./nodeBuffer":18,"./signature":21,"./stringWriter":23,"./support":24,"./uint8ArrayWriter":26,"./utf8":27,"./utils":28}],21:[function(require,module,exports){
+},{"./base64":9,"./compressedObject":10,"./compressions":11,"./crc32":12,"./defaults":14,"./nodeBuffer":19,"./signature":22,"./stringWriter":24,"./support":25,"./uint8ArrayWriter":27,"./utf8":28,"./utils":29}],22:[function(require,module,exports){
'use strict';
exports.LOCAL_FILE_HEADER = "PK\x03\x04";
exports.CENTRAL_FILE_HEADER = "PK\x01\x02";
@@ -10808,7 +11111,7 @@ exports.ZIP64_CENTRAL_DIRECTORY_LOCATOR = "PK\x06\x07";
exports.ZIP64_CENTRAL_DIRECTORY_END = "PK\x06\x06";
exports.DATA_DESCRIPTOR = "PK\x07\x08";
-},{}],22:[function(require,module,exports){
+},{}],23:[function(require,module,exports){
'use strict';
var DataReader = require('./dataReader');
var utils = require('./utils');
@@ -10846,7 +11149,7 @@ StringReader.prototype.readData = function(size) {
};
module.exports = StringReader;
-},{"./dataReader":12,"./utils":28}],23:[function(require,module,exports){
+},{"./dataReader":13,"./utils":29}],24:[function(require,module,exports){
'use strict';
var utils = require('./utils');
@@ -10878,7 +11181,7 @@ StringWriter.prototype = {
module.exports = StringWriter;
-},{"./utils":28}],24:[function(require,module,exports){
+},{"./utils":29}],25:[function(require,module,exports){
(function (Buffer){
'use strict';
exports.base64 = true;
@@ -10916,7 +11219,7 @@ else {
}
}).call(this,require("buffer").Buffer)
-},{"buffer":1}],25:[function(require,module,exports){
+},{"buffer":1}],26:[function(require,module,exports){
'use strict';
var DataReader = require('./dataReader');
@@ -10965,7 +11268,7 @@ Uint8ArrayReader.prototype.readData = function(size) {
};
module.exports = Uint8ArrayReader;
-},{"./dataReader":12}],26:[function(require,module,exports){
+},{"./dataReader":13}],27:[function(require,module,exports){
'use strict';
var utils = require('./utils');
@@ -11003,7 +11306,7 @@ Uint8ArrayWriter.prototype = {
module.exports = Uint8ArrayWriter;
-},{"./utils":28}],27:[function(require,module,exports){
+},{"./utils":29}],28:[function(require,module,exports){
'use strict';
var utils = require('./utils');
@@ -11212,7 +11515,7 @@ exports.utf8decode = function utf8decode(buf) {
};
// vim: set shiftwidth=4 softtabstop=4:
-},{"./nodeBuffer":18,"./support":24,"./utils":28}],28:[function(require,module,exports){
+},{"./nodeBuffer":19,"./support":25,"./utils":29}],29:[function(require,module,exports){
'use strict';
var support = require('./support');
var compressions = require('./compressions');
@@ -11540,7 +11843,7 @@ exports.isRegExp = function (object) {
};
-},{"./compressions":10,"./nodeBuffer":18,"./support":24}],29:[function(require,module,exports){
+},{"./compressions":11,"./nodeBuffer":19,"./support":25}],30:[function(require,module,exports){
'use strict';
var StringReader = require('./stringReader');
var NodeBufferReader = require('./nodeBufferReader');
@@ -11763,7 +12066,7 @@ ZipEntries.prototype = {
// }}} end of ZipEntries
module.exports = ZipEntries;
-},{"./nodeBufferReader":19,"./object":20,"./signature":21,"./stringReader":22,"./support":24,"./uint8ArrayReader":25,"./utils":28,"./zipEntry":30}],30:[function(require,module,exports){
+},{"./nodeBufferReader":20,"./object":21,"./signature":22,"./stringReader":23,"./support":25,"./uint8ArrayReader":26,"./utils":29,"./zipEntry":31}],31:[function(require,module,exports){
'use strict';
var StringReader = require('./stringReader');
var utils = require('./utils');
@@ -12075,7 +12378,7 @@ ZipEntry.prototype = {
};
module.exports = ZipEntry;
-},{"./compressedObject":9,"./object":20,"./stringReader":22,"./utils":28}],31:[function(require,module,exports){
+},{"./compressedObject":10,"./object":21,"./stringReader":23,"./utils":29}],32:[function(require,module,exports){
// Top level file is just a mixin of submodules & constants
'use strict';
@@ -12091,7 +12394,7 @@ assign(pako, deflate, inflate, constants);
module.exports = pako;
-},{"./lib/deflate":32,"./lib/inflate":33,"./lib/utils/common":34,"./lib/zlib/constants":37}],32:[function(require,module,exports){
+},{"./lib/deflate":33,"./lib/inflate":34,"./lib/utils/common":35,"./lib/zlib/constants":38}],33:[function(require,module,exports){
'use strict';
@@ -12469,7 +12772,7 @@ exports.deflate = deflate;
exports.deflateRaw = deflateRaw;
exports.gzip = gzip;
-},{"./utils/common":34,"./utils/strings":35,"./zlib/deflate.js":39,"./zlib/messages":44,"./zlib/zstream":46}],33:[function(require,module,exports){
+},{"./utils/common":35,"./utils/strings":36,"./zlib/deflate.js":40,"./zlib/messages":45,"./zlib/zstream":47}],34:[function(require,module,exports){
'use strict';
@@ -12871,7 +13174,7 @@ exports.inflate = inflate;
exports.inflateRaw = inflateRaw;
exports.ungzip = inflate;
-},{"./utils/common":34,"./utils/strings":35,"./zlib/constants":37,"./zlib/gzheader":40,"./zlib/inflate.js":42,"./zlib/messages":44,"./zlib/zstream":46}],34:[function(require,module,exports){
+},{"./utils/common":35,"./utils/strings":36,"./zlib/constants":38,"./zlib/gzheader":41,"./zlib/inflate.js":43,"./zlib/messages":45,"./zlib/zstream":47}],35:[function(require,module,exports){
'use strict';
@@ -12975,7 +13278,7 @@ exports.setTyped = function (on) {
exports.setTyped(TYPED_OK);
-},{}],35:[function(require,module,exports){
+},{}],36:[function(require,module,exports){
// String encode/decode helpers
'use strict';
@@ -13162,7 +13465,7 @@ exports.utf8border = function(buf, max) {
return (pos + _utf8len[buf[pos]] > max) ? pos : max;
};
-},{"./common":34}],36:[function(require,module,exports){
+},{"./common":35}],37:[function(require,module,exports){
'use strict';
// Note: adler32 takes 12% for level 0 and 2% for level 6.
@@ -13196,7 +13499,7 @@ function adler32(adler, buf, len, pos) {
module.exports = adler32;
-},{}],37:[function(require,module,exports){
+},{}],38:[function(require,module,exports){
module.exports = {
/* Allowed flush values; see deflate() and inflate() below for details */
@@ -13245,7 +13548,7 @@ module.exports = {
//Z_NULL: null // Use -1 or null inline, depending on var type
};
-},{}],38:[function(require,module,exports){
+},{}],39:[function(require,module,exports){
'use strict';
// Note: we can't get significant speed boost here.
@@ -13288,7 +13591,7 @@ function crc32(crc, buf, len, pos) {
module.exports = crc32;
-},{}],39:[function(require,module,exports){
+},{}],40:[function(require,module,exports){
'use strict';
var utils = require('../utils/common');
@@ -15055,7 +15358,7 @@ exports.deflatePrime = deflatePrime;
exports.deflateTune = deflateTune;
*/
-},{"../utils/common":34,"./adler32":36,"./crc32":38,"./messages":44,"./trees":45}],40:[function(require,module,exports){
+},{"../utils/common":35,"./adler32":37,"./crc32":39,"./messages":45,"./trees":46}],41:[function(require,module,exports){
'use strict';
@@ -15097,7 +15400,7 @@ function GZheader() {
module.exports = GZheader;
-},{}],41:[function(require,module,exports){
+},{}],42:[function(require,module,exports){
'use strict';
// See state defs from inflate.js
@@ -15425,7 +15728,7 @@ module.exports = function inflate_fast(strm, start) {
return;
};
-},{}],42:[function(require,module,exports){
+},{}],43:[function(require,module,exports){
'use strict';
@@ -16930,7 +17233,7 @@ exports.inflateSyncPoint = inflateSyncPoint;
exports.inflateUndermine = inflateUndermine;
*/
-},{"../utils/common":34,"./adler32":36,"./crc32":38,"./inffast":41,"./inftrees":43}],43:[function(require,module,exports){
+},{"../utils/common":35,"./adler32":37,"./crc32":39,"./inffast":42,"./inftrees":44}],44:[function(require,module,exports){
'use strict';
@@ -17259,7 +17562,7 @@ module.exports = function inflate_table(type, lens, lens_index, codes, table, ta
return 0;
};
-},{"../utils/common":34}],44:[function(require,module,exports){
+},{"../utils/common":35}],45:[function(require,module,exports){
'use strict';
module.exports = {
@@ -17274,7 +17577,7 @@ module.exports = {
'-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */
};
-},{}],45:[function(require,module,exports){
+},{}],46:[function(require,module,exports){
'use strict';
@@ -18475,7 +18778,7 @@ exports._tr_flush_block = _tr_flush_block;
exports._tr_tally = _tr_tally;
exports._tr_align = _tr_align;
-},{"../utils/common":34}],46:[function(require,module,exports){
+},{"../utils/common":35}],47:[function(require,module,exports){
'use strict';
@@ -18506,7 +18809,7 @@ function ZStream() {
module.exports = ZStream;
-},{}],47:[function(require,module,exports){
+},{}],48:[function(require,module,exports){
/** Used as the `TypeError` message for "Functions" methods. */
var FUNC_ERROR_TEXT = 'Expected a function';
@@ -18566,7 +18869,7 @@ function restParam(func, start) {
module.exports = restParam;
-},{}],48:[function(require,module,exports){
+},{}],49:[function(require,module,exports){
(function (global){
var cachePush = require('./cachePush'),
getNative = require('./getNative');
@@ -18599,7 +18902,7 @@ SetCache.prototype.push = cachePush;
module.exports = SetCache;
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"./cachePush":60,"./getNative":66}],49:[function(require,module,exports){
+},{"./cachePush":61,"./getNative":67}],50:[function(require,module,exports){
/**
* A specialized version of `_.map` for arrays without support for callback
* shorthands and `this` binding.
@@ -18622,7 +18925,7 @@ function arrayMap(array, iteratee) {
module.exports = arrayMap;
-},{}],50:[function(require,module,exports){
+},{}],51:[function(require,module,exports){
/**
* Appends the elements of `values` to `array`.
*
@@ -18644,7 +18947,7 @@ function arrayPush(array, values) {
module.exports = arrayPush;
-},{}],51:[function(require,module,exports){
+},{}],52:[function(require,module,exports){
var baseIndexOf = require('./baseIndexOf'),
cacheIndexOf = require('./cacheIndexOf'),
createCache = require('./createCache');
@@ -18701,7 +19004,7 @@ function baseDifference(array, values) {
module.exports = baseDifference;
-},{"./baseIndexOf":55,"./cacheIndexOf":59,"./createCache":62}],52:[function(require,module,exports){
+},{"./baseIndexOf":56,"./cacheIndexOf":60,"./createCache":63}],53:[function(require,module,exports){
var arrayPush = require('./arrayPush'),
isArguments = require('../lang/isArguments'),
isArray = require('../lang/isArray'),
@@ -18744,7 +19047,7 @@ function baseFlatten(array, isDeep, isStrict, result) {
module.exports = baseFlatten;
-},{"../lang/isArguments":76,"../lang/isArray":77,"./arrayPush":50,"./isArrayLike":68,"./isObjectLike":72}],53:[function(require,module,exports){
+},{"../lang/isArguments":77,"../lang/isArray":78,"./arrayPush":51,"./isArrayLike":69,"./isObjectLike":73}],54:[function(require,module,exports){
var createBaseFor = require('./createBaseFor');
/**
@@ -18763,7 +19066,7 @@ var baseFor = createBaseFor();
module.exports = baseFor;
-},{"./createBaseFor":61}],54:[function(require,module,exports){
+},{"./createBaseFor":62}],55:[function(require,module,exports){
var baseFor = require('./baseFor'),
keysIn = require('../object/keysIn');
@@ -18782,7 +19085,7 @@ function baseForIn(object, iteratee) {
module.exports = baseForIn;
-},{"../object/keysIn":81,"./baseFor":53}],55:[function(require,module,exports){
+},{"../object/keysIn":82,"./baseFor":54}],56:[function(require,module,exports){
var indexOfNaN = require('./indexOfNaN');
/**
@@ -18811,7 +19114,7 @@ function baseIndexOf(array, value, fromIndex) {
module.exports = baseIndexOf;
-},{"./indexOfNaN":67}],56:[function(require,module,exports){
+},{"./indexOfNaN":68}],57:[function(require,module,exports){
/**
* The base implementation of `_.property` without support for deep paths.
*
@@ -18827,7 +19130,7 @@ function baseProperty(key) {
module.exports = baseProperty;
-},{}],57:[function(require,module,exports){
+},{}],58:[function(require,module,exports){
/**
* Converts `value` to a string if it's not one. An empty string is returned
* for `null` or `undefined` values.
@@ -18842,7 +19145,7 @@ function baseToString(value) {
module.exports = baseToString;
-},{}],58:[function(require,module,exports){
+},{}],59:[function(require,module,exports){
var identity = require('../utility/identity');
/**
@@ -18883,7 +19186,7 @@ function bindCallback(func, thisArg, argCount) {
module.exports = bindCallback;
-},{"../utility/identity":86}],59:[function(require,module,exports){
+},{"../utility/identity":87}],60:[function(require,module,exports){
var isObject = require('../lang/isObject');
/**
@@ -18904,7 +19207,7 @@ function cacheIndexOf(cache, value) {
module.exports = cacheIndexOf;
-},{"../lang/isObject":80}],60:[function(require,module,exports){
+},{"../lang/isObject":81}],61:[function(require,module,exports){
var isObject = require('../lang/isObject');
/**
@@ -18926,7 +19229,7 @@ function cachePush(value) {
module.exports = cachePush;
-},{"../lang/isObject":80}],61:[function(require,module,exports){
+},{"../lang/isObject":81}],62:[function(require,module,exports){
var toObject = require('./toObject');
/**
@@ -18955,7 +19258,7 @@ function createBaseFor(fromRight) {
module.exports = createBaseFor;
-},{"./toObject":75}],62:[function(require,module,exports){
+},{"./toObject":76}],63:[function(require,module,exports){
(function (global){
var SetCache = require('./SetCache'),
getNative = require('./getNative');
@@ -18980,7 +19283,7 @@ function createCache(values) {
module.exports = createCache;
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"./SetCache":48,"./getNative":66}],63:[function(require,module,exports){
+},{"./SetCache":49,"./getNative":67}],64:[function(require,module,exports){
var deburr = require('../string/deburr'),
words = require('../string/words');
@@ -19008,7 +19311,7 @@ function createCompounder(callback) {
module.exports = createCompounder;
-},{"../string/deburr":84,"../string/words":85}],64:[function(require,module,exports){
+},{"../string/deburr":85,"../string/words":86}],65:[function(require,module,exports){
/** Used to map latin-1 supplementary letters to basic latin letters. */
var deburredLetters = {
'\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A',
@@ -19043,7 +19346,7 @@ function deburrLetter(letter) {
module.exports = deburrLetter;
-},{}],65:[function(require,module,exports){
+},{}],66:[function(require,module,exports){
var baseProperty = require('./baseProperty');
/**
@@ -19060,7 +19363,7 @@ var getLength = baseProperty('length');
module.exports = getLength;
-},{"./baseProperty":56}],66:[function(require,module,exports){
+},{"./baseProperty":57}],67:[function(require,module,exports){
var isNative = require('../lang/isNative');
/**
@@ -19078,7 +19381,7 @@ function getNative(object, key) {
module.exports = getNative;
-},{"../lang/isNative":79}],67:[function(require,module,exports){
+},{"../lang/isNative":80}],68:[function(require,module,exports){
/**
* Gets the index at which the first occurrence of `NaN` is found in `array`.
*
@@ -19103,7 +19406,7 @@ function indexOfNaN(array, fromIndex, fromRight) {
module.exports = indexOfNaN;
-},{}],68:[function(require,module,exports){
+},{}],69:[function(require,module,exports){
var getLength = require('./getLength'),
isLength = require('./isLength');
@@ -19120,7 +19423,7 @@ function isArrayLike(value) {
module.exports = isArrayLike;
-},{"./getLength":65,"./isLength":71}],69:[function(require,module,exports){
+},{"./getLength":66,"./isLength":72}],70:[function(require,module,exports){
/** Used to detect unsigned integer values. */
var reIsUint = /^\d+$/;
@@ -19146,7 +19449,7 @@ function isIndex(value, length) {
module.exports = isIndex;
-},{}],70:[function(require,module,exports){
+},{}],71:[function(require,module,exports){
var isArrayLike = require('./isArrayLike'),
isIndex = require('./isIndex'),
isObject = require('../lang/isObject');
@@ -19176,7 +19479,7 @@ function isIterateeCall(value, index, object) {
module.exports = isIterateeCall;
-},{"../lang/isObject":80,"./isArrayLike":68,"./isIndex":69}],71:[function(require,module,exports){
+},{"../lang/isObject":81,"./isArrayLike":69,"./isIndex":70}],72:[function(require,module,exports){
/**
* Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)
* of an array-like value.
@@ -19198,7 +19501,7 @@ function isLength(value) {
module.exports = isLength;
-},{}],72:[function(require,module,exports){
+},{}],73:[function(require,module,exports){
/**
* Checks if `value` is object-like.
*
@@ -19212,7 +19515,7 @@ function isObjectLike(value) {
module.exports = isObjectLike;
-},{}],73:[function(require,module,exports){
+},{}],74:[function(require,module,exports){
var toObject = require('./toObject');
/**
@@ -19242,7 +19545,7 @@ function pickByArray(object, props) {
module.exports = pickByArray;
-},{"./toObject":75}],74:[function(require,module,exports){
+},{"./toObject":76}],75:[function(require,module,exports){
var baseForIn = require('./baseForIn');
/**
@@ -19266,7 +19569,7 @@ function pickByCallback(object, predicate) {
module.exports = pickByCallback;
-},{"./baseForIn":54}],75:[function(require,module,exports){
+},{"./baseForIn":55}],76:[function(require,module,exports){
var isObject = require('../lang/isObject');
/**
@@ -19282,7 +19585,7 @@ function toObject(value) {
module.exports = toObject;
-},{"../lang/isObject":80}],76:[function(require,module,exports){
+},{"../lang/isObject":81}],77:[function(require,module,exports){
var isArrayLike = require('../internal/isArrayLike'),
isObjectLike = require('../internal/isObjectLike');
@@ -19318,7 +19621,7 @@ function isArguments(value) {
module.exports = isArguments;
-},{"../internal/isArrayLike":68,"../internal/isObjectLike":72}],77:[function(require,module,exports){
+},{"../internal/isArrayLike":69,"../internal/isObjectLike":73}],78:[function(require,module,exports){
var getNative = require('../internal/getNative'),
isLength = require('../internal/isLength'),
isObjectLike = require('../internal/isObjectLike');
@@ -19360,7 +19663,7 @@ var isArray = nativeIsArray || function(value) {
module.exports = isArray;
-},{"../internal/getNative":66,"../internal/isLength":71,"../internal/isObjectLike":72}],78:[function(require,module,exports){
+},{"../internal/getNative":67,"../internal/isLength":72,"../internal/isObjectLike":73}],79:[function(require,module,exports){
var isObject = require('./isObject');
/** `Object#toString` result references. */
@@ -19400,7 +19703,7 @@ function isFunction(value) {
module.exports = isFunction;
-},{"./isObject":80}],79:[function(require,module,exports){
+},{"./isObject":81}],80:[function(require,module,exports){
var isFunction = require('./isFunction'),
isObjectLike = require('../internal/isObjectLike');
@@ -19450,7 +19753,7 @@ function isNative(value) {
module.exports = isNative;
-},{"../internal/isObjectLike":72,"./isFunction":78}],80:[function(require,module,exports){
+},{"../internal/isObjectLike":73,"./isFunction":79}],81:[function(require,module,exports){
/**
* Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
* (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
@@ -19480,7 +19783,7 @@ function isObject(value) {
module.exports = isObject;
-},{}],81:[function(require,module,exports){
+},{}],82:[function(require,module,exports){
var isArguments = require('../lang/isArguments'),
isArray = require('../lang/isArray'),
isIndex = require('../internal/isIndex'),
@@ -19546,7 +19849,7 @@ function keysIn(object) {
module.exports = keysIn;
-},{"../internal/isIndex":69,"../internal/isLength":71,"../lang/isArguments":76,"../lang/isArray":77,"../lang/isObject":80}],82:[function(require,module,exports){
+},{"../internal/isIndex":70,"../internal/isLength":72,"../lang/isArguments":77,"../lang/isArray":78,"../lang/isObject":81}],83:[function(require,module,exports){
var arrayMap = require('../internal/arrayMap'),
baseDifference = require('../internal/baseDifference'),
baseFlatten = require('../internal/baseFlatten'),
@@ -19595,7 +19898,7 @@ var omit = restParam(function(object, props) {
module.exports = omit;
-},{"../function/restParam":47,"../internal/arrayMap":49,"../internal/baseDifference":51,"../internal/baseFlatten":52,"../internal/bindCallback":58,"../internal/pickByArray":73,"../internal/pickByCallback":74,"./keysIn":81}],83:[function(require,module,exports){
+},{"../function/restParam":48,"../internal/arrayMap":50,"../internal/baseDifference":52,"../internal/baseFlatten":53,"../internal/bindCallback":59,"../internal/pickByArray":74,"../internal/pickByCallback":75,"./keysIn":82}],84:[function(require,module,exports){
var createCompounder = require('../internal/createCompounder');
/**
@@ -19624,7 +19927,7 @@ var camelCase = createCompounder(function(result, word, index) {
module.exports = camelCase;
-},{"../internal/createCompounder":63}],84:[function(require,module,exports){
+},{"../internal/createCompounder":64}],85:[function(require,module,exports){
var baseToString = require('../internal/baseToString'),
deburrLetter = require('../internal/deburrLetter');
@@ -19655,7 +19958,7 @@ function deburr(string) {
module.exports = deburr;
-},{"../internal/baseToString":57,"../internal/deburrLetter":64}],85:[function(require,module,exports){
+},{"../internal/baseToString":58,"../internal/deburrLetter":65}],86:[function(require,module,exports){
var baseToString = require('../internal/baseToString'),
isIterateeCall = require('../internal/isIterateeCall');
@@ -19695,7 +19998,7 @@ function words(string, pattern, guard) {
module.exports = words;
-},{"../internal/baseToString":57,"../internal/isIterateeCall":70}],86:[function(require,module,exports){
+},{"../internal/baseToString":58,"../internal/isIterateeCall":71}],87:[function(require,module,exports){
/**
* This method returns the first argument provided to it.
*
@@ -19717,7 +20020,7 @@ function identity(value) {
module.exports = identity;
-},{}],87:[function(require,module,exports){
+},{}],88:[function(require,module,exports){
'use strict';
exports.__esModule = true;
@@ -19741,7 +20044,7 @@ function createAll(React) {
}
module.exports = exports['default'];
-},{"./createConnect":88,"./createProvider":89}],88:[function(require,module,exports){
+},{"./createConnect":89,"./createProvider":90}],89:[function(require,module,exports){
(function (process){
'use strict';
@@ -20010,7 +20313,7 @@ function createConnect(React) {
module.exports = exports['default'];
}).call(this,require('_process'))
-},{"../utils/createStoreShape":91,"../utils/isPlainObject":92,"../utils/shallowEqual":93,"../utils/wrapActionCreators":94,"_process":5,"invariant":95}],89:[function(require,module,exports){
+},{"../utils/createStoreShape":92,"../utils/isPlainObject":93,"../utils/shallowEqual":94,"../utils/wrapActionCreators":95,"_process":6,"invariant":96}],90:[function(require,module,exports){
'use strict';
exports.__esModule = true;
@@ -20128,7 +20431,7 @@ function createProvider(React) {
}
module.exports = exports['default'];
-},{"../utils/createStoreShape":91}],90:[function(require,module,exports){
+},{"../utils/createStoreShape":92}],91:[function(require,module,exports){
'use strict';
exports.__esModule = true;
@@ -20149,7 +20452,7 @@ var Provider = _createAll.Provider;
var connect = _createAll.connect;
exports.Provider = Provider;
exports.connect = connect;
-},{"./components/createAll":87,"react":250}],91:[function(require,module,exports){
+},{"./components/createAll":88,"react":251}],92:[function(require,module,exports){
"use strict";
exports.__esModule = true;
@@ -20164,7 +20467,7 @@ function createStoreShape(PropTypes) {
}
module.exports = exports["default"];
-},{}],92:[function(require,module,exports){
+},{}],93:[function(require,module,exports){
'use strict';
exports.__esModule = true;
@@ -20195,7 +20498,7 @@ function isPlainObject(obj) {
}
module.exports = exports['default'];
-},{}],93:[function(require,module,exports){
+},{}],94:[function(require,module,exports){
"use strict";
exports.__esModule = true;
@@ -20225,7 +20528,7 @@ function shallowEqual(objA, objB) {
}
module.exports = exports["default"];
-},{}],94:[function(require,module,exports){
+},{}],95:[function(require,module,exports){
'use strict';
exports.__esModule = true;
@@ -20240,7 +20543,7 @@ function wrapActionCreators(actionCreators) {
}
module.exports = exports['default'];
-},{"redux":252}],95:[function(require,module,exports){
+},{"redux":253}],96:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -20297,7 +20600,7 @@ var invariant = function(condition, format, a, b, c, d, e, f) {
module.exports = invariant;
}).call(this,require('_process'))
-},{"_process":5}],96:[function(require,module,exports){
+},{"_process":6}],97:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -20324,7 +20627,7 @@ var AutoFocusMixin = {
module.exports = AutoFocusMixin;
-},{"./focusNode":214}],97:[function(require,module,exports){
+},{"./focusNode":215}],98:[function(require,module,exports){
/**
* Copyright 2013-2015 Facebook, Inc.
* All rights reserved.
@@ -20819,7 +21122,7 @@ var BeforeInputEventPlugin = {
module.exports = BeforeInputEventPlugin;
-},{"./EventConstants":109,"./EventPropagators":114,"./ExecutionEnvironment":115,"./FallbackCompositionState":116,"./SyntheticCompositionEvent":188,"./SyntheticInputEvent":192,"./keyOf":236}],98:[function(require,module,exports){
+},{"./EventConstants":110,"./EventPropagators":115,"./ExecutionEnvironment":116,"./FallbackCompositionState":117,"./SyntheticCompositionEvent":189,"./SyntheticInputEvent":193,"./keyOf":237}],99:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -20944,7 +21247,7 @@ var CSSProperty = {
module.exports = CSSProperty;
-},{}],99:[function(require,module,exports){
+},{}],100:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -21126,7 +21429,7 @@ var CSSPropertyOperations = {
module.exports = CSSPropertyOperations;
}).call(this,require('_process'))
-},{"./CSSProperty":98,"./ExecutionEnvironment":115,"./camelizeStyleName":203,"./dangerousStyleValue":208,"./hyphenateStyleName":228,"./memoizeStringOnly":238,"./warning":249,"_process":5}],100:[function(require,module,exports){
+},{"./CSSProperty":99,"./ExecutionEnvironment":116,"./camelizeStyleName":204,"./dangerousStyleValue":209,"./hyphenateStyleName":229,"./memoizeStringOnly":239,"./warning":250,"_process":6}],101:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -21226,7 +21529,7 @@ PooledClass.addPoolingTo(CallbackQueue);
module.exports = CallbackQueue;
}).call(this,require('_process'))
-},{"./Object.assign":121,"./PooledClass":122,"./invariant":230,"_process":5}],101:[function(require,module,exports){
+},{"./Object.assign":122,"./PooledClass":123,"./invariant":231,"_process":6}],102:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -21608,7 +21911,7 @@ var ChangeEventPlugin = {
module.exports = ChangeEventPlugin;
-},{"./EventConstants":109,"./EventPluginHub":111,"./EventPropagators":114,"./ExecutionEnvironment":115,"./ReactUpdates":182,"./SyntheticEvent":190,"./isEventSupported":231,"./isTextInputElement":233,"./keyOf":236}],102:[function(require,module,exports){
+},{"./EventConstants":110,"./EventPluginHub":112,"./EventPropagators":115,"./ExecutionEnvironment":116,"./ReactUpdates":183,"./SyntheticEvent":191,"./isEventSupported":232,"./isTextInputElement":234,"./keyOf":237}],103:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -21633,7 +21936,7 @@ var ClientReactRootIndex = {
module.exports = ClientReactRootIndex;
-},{}],103:[function(require,module,exports){
+},{}],104:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -21771,7 +22074,7 @@ var DOMChildrenOperations = {
module.exports = DOMChildrenOperations;
}).call(this,require('_process'))
-},{"./Danger":106,"./ReactMultiChildUpdateTypes":167,"./invariant":230,"./setTextContent":244,"_process":5}],104:[function(require,module,exports){
+},{"./Danger":107,"./ReactMultiChildUpdateTypes":168,"./invariant":231,"./setTextContent":245,"_process":6}],105:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -22070,7 +22373,7 @@ var DOMProperty = {
module.exports = DOMProperty;
}).call(this,require('_process'))
-},{"./invariant":230,"_process":5}],105:[function(require,module,exports){
+},{"./invariant":231,"_process":6}],106:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -22262,7 +22565,7 @@ var DOMPropertyOperations = {
module.exports = DOMPropertyOperations;
}).call(this,require('_process'))
-},{"./DOMProperty":104,"./quoteAttributeValueForBrowser":242,"./warning":249,"_process":5}],106:[function(require,module,exports){
+},{"./DOMProperty":105,"./quoteAttributeValueForBrowser":243,"./warning":250,"_process":6}],107:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -22449,7 +22752,7 @@ var Danger = {
module.exports = Danger;
}).call(this,require('_process'))
-},{"./ExecutionEnvironment":115,"./createNodesFromMarkup":207,"./emptyFunction":209,"./getMarkupWrap":222,"./invariant":230,"_process":5}],107:[function(require,module,exports){
+},{"./ExecutionEnvironment":116,"./createNodesFromMarkup":208,"./emptyFunction":210,"./getMarkupWrap":223,"./invariant":231,"_process":6}],108:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -22488,7 +22791,7 @@ var DefaultEventPluginOrder = [
module.exports = DefaultEventPluginOrder;
-},{"./keyOf":236}],108:[function(require,module,exports){
+},{"./keyOf":237}],109:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -22628,7 +22931,7 @@ var EnterLeaveEventPlugin = {
module.exports = EnterLeaveEventPlugin;
-},{"./EventConstants":109,"./EventPropagators":114,"./ReactMount":165,"./SyntheticMouseEvent":194,"./keyOf":236}],109:[function(require,module,exports){
+},{"./EventConstants":110,"./EventPropagators":115,"./ReactMount":166,"./SyntheticMouseEvent":195,"./keyOf":237}],110:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -22700,7 +23003,7 @@ var EventConstants = {
module.exports = EventConstants;
-},{"./keyMirror":235}],110:[function(require,module,exports){
+},{"./keyMirror":236}],111:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -22790,7 +23093,7 @@ var EventListener = {
module.exports = EventListener;
}).call(this,require('_process'))
-},{"./emptyFunction":209,"_process":5}],111:[function(require,module,exports){
+},{"./emptyFunction":210,"_process":6}],112:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -23068,7 +23371,7 @@ var EventPluginHub = {
module.exports = EventPluginHub;
}).call(this,require('_process'))
-},{"./EventPluginRegistry":112,"./EventPluginUtils":113,"./accumulateInto":200,"./forEachAccumulated":215,"./invariant":230,"_process":5}],112:[function(require,module,exports){
+},{"./EventPluginRegistry":113,"./EventPluginUtils":114,"./accumulateInto":201,"./forEachAccumulated":216,"./invariant":231,"_process":6}],113:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -23348,7 +23651,7 @@ var EventPluginRegistry = {
module.exports = EventPluginRegistry;
}).call(this,require('_process'))
-},{"./invariant":230,"_process":5}],113:[function(require,module,exports){
+},{"./invariant":231,"_process":6}],114:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -23569,7 +23872,7 @@ var EventPluginUtils = {
module.exports = EventPluginUtils;
}).call(this,require('_process'))
-},{"./EventConstants":109,"./invariant":230,"_process":5}],114:[function(require,module,exports){
+},{"./EventConstants":110,"./invariant":231,"_process":6}],115:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -23711,7 +24014,7 @@ var EventPropagators = {
module.exports = EventPropagators;
}).call(this,require('_process'))
-},{"./EventConstants":109,"./EventPluginHub":111,"./accumulateInto":200,"./forEachAccumulated":215,"_process":5}],115:[function(require,module,exports){
+},{"./EventConstants":110,"./EventPluginHub":112,"./accumulateInto":201,"./forEachAccumulated":216,"_process":6}],116:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -23755,7 +24058,7 @@ var ExecutionEnvironment = {
module.exports = ExecutionEnvironment;
-},{}],116:[function(require,module,exports){
+},{}],117:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -23846,7 +24149,7 @@ PooledClass.addPoolingTo(FallbackCompositionState);
module.exports = FallbackCompositionState;
-},{"./Object.assign":121,"./PooledClass":122,"./getTextContentAccessor":225}],117:[function(require,module,exports){
+},{"./Object.assign":122,"./PooledClass":123,"./getTextContentAccessor":226}],118:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -24057,7 +24360,7 @@ var HTMLDOMPropertyConfig = {
module.exports = HTMLDOMPropertyConfig;
-},{"./DOMProperty":104,"./ExecutionEnvironment":115}],118:[function(require,module,exports){
+},{"./DOMProperty":105,"./ExecutionEnvironment":116}],119:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -24213,7 +24516,7 @@ var LinkedValueUtils = {
module.exports = LinkedValueUtils;
}).call(this,require('_process'))
-},{"./ReactPropTypes":173,"./invariant":230,"_process":5}],119:[function(require,module,exports){
+},{"./ReactPropTypes":174,"./invariant":231,"_process":6}],120:[function(require,module,exports){
(function (process){
/**
* Copyright 2014-2015, Facebook, Inc.
@@ -24270,7 +24573,7 @@ var LocalEventTrapMixin = {
module.exports = LocalEventTrapMixin;
}).call(this,require('_process'))
-},{"./ReactBrowserEventEmitter":125,"./accumulateInto":200,"./forEachAccumulated":215,"./invariant":230,"_process":5}],120:[function(require,module,exports){
+},{"./ReactBrowserEventEmitter":126,"./accumulateInto":201,"./forEachAccumulated":216,"./invariant":231,"_process":6}],121:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -24328,7 +24631,7 @@ var MobileSafariClickEventPlugin = {
module.exports = MobileSafariClickEventPlugin;
-},{"./EventConstants":109,"./emptyFunction":209}],121:[function(require,module,exports){
+},{"./EventConstants":110,"./emptyFunction":210}],122:[function(require,module,exports){
/**
* Copyright 2014-2015, Facebook, Inc.
* All rights reserved.
@@ -24377,7 +24680,7 @@ function assign(target, sources) {
module.exports = assign;
-},{}],122:[function(require,module,exports){
+},{}],123:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -24493,7 +24796,7 @@ var PooledClass = {
module.exports = PooledClass;
}).call(this,require('_process'))
-},{"./invariant":230,"_process":5}],123:[function(require,module,exports){
+},{"./invariant":231,"_process":6}],124:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -24645,7 +24948,7 @@ React.version = '0.13.3';
module.exports = React;
}).call(this,require('_process'))
-},{"./EventPluginUtils":113,"./ExecutionEnvironment":115,"./Object.assign":121,"./ReactChildren":127,"./ReactClass":128,"./ReactComponent":129,"./ReactContext":133,"./ReactCurrentOwner":134,"./ReactDOM":135,"./ReactDOMTextComponent":146,"./ReactDefaultInjection":149,"./ReactElement":152,"./ReactElementValidator":153,"./ReactInstanceHandles":161,"./ReactMount":165,"./ReactPerf":170,"./ReactPropTypes":173,"./ReactReconciler":176,"./ReactServerRendering":179,"./findDOMNode":212,"./onlyChild":239,"_process":5}],124:[function(require,module,exports){
+},{"./EventPluginUtils":114,"./ExecutionEnvironment":116,"./Object.assign":122,"./ReactChildren":128,"./ReactClass":129,"./ReactComponent":130,"./ReactContext":134,"./ReactCurrentOwner":135,"./ReactDOM":136,"./ReactDOMTextComponent":147,"./ReactDefaultInjection":150,"./ReactElement":153,"./ReactElementValidator":154,"./ReactInstanceHandles":162,"./ReactMount":166,"./ReactPerf":171,"./ReactPropTypes":174,"./ReactReconciler":177,"./ReactServerRendering":180,"./findDOMNode":213,"./onlyChild":240,"_process":6}],125:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -24676,7 +24979,7 @@ var ReactBrowserComponentMixin = {
module.exports = ReactBrowserComponentMixin;
-},{"./findDOMNode":212}],125:[function(require,module,exports){
+},{"./findDOMNode":213}],126:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -25029,7 +25332,7 @@ var ReactBrowserEventEmitter = assign({}, ReactEventEmitterMixin, {
module.exports = ReactBrowserEventEmitter;
-},{"./EventConstants":109,"./EventPluginHub":111,"./EventPluginRegistry":112,"./Object.assign":121,"./ReactEventEmitterMixin":156,"./ViewportMetrics":199,"./isEventSupported":231}],126:[function(require,module,exports){
+},{"./EventConstants":110,"./EventPluginHub":112,"./EventPluginRegistry":113,"./Object.assign":122,"./ReactEventEmitterMixin":157,"./ViewportMetrics":200,"./isEventSupported":232}],127:[function(require,module,exports){
/**
* Copyright 2014-2015, Facebook, Inc.
* All rights reserved.
@@ -25156,7 +25459,7 @@ var ReactChildReconciler = {
module.exports = ReactChildReconciler;
-},{"./ReactReconciler":176,"./flattenChildren":213,"./instantiateReactComponent":229,"./shouldUpdateReactComponent":246}],127:[function(require,module,exports){
+},{"./ReactReconciler":177,"./flattenChildren":214,"./instantiateReactComponent":230,"./shouldUpdateReactComponent":247}],128:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -25309,7 +25612,7 @@ var ReactChildren = {
module.exports = ReactChildren;
}).call(this,require('_process'))
-},{"./PooledClass":122,"./ReactFragment":158,"./traverseAllChildren":248,"./warning":249,"_process":5}],128:[function(require,module,exports){
+},{"./PooledClass":123,"./ReactFragment":159,"./traverseAllChildren":249,"./warning":250,"_process":6}],129:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -26255,7 +26558,7 @@ var ReactClass = {
module.exports = ReactClass;
}).call(this,require('_process'))
-},{"./Object.assign":121,"./ReactComponent":129,"./ReactCurrentOwner":134,"./ReactElement":152,"./ReactErrorUtils":155,"./ReactInstanceMap":162,"./ReactLifeCycle":163,"./ReactPropTypeLocationNames":171,"./ReactPropTypeLocations":172,"./ReactUpdateQueue":181,"./invariant":230,"./keyMirror":235,"./keyOf":236,"./warning":249,"_process":5}],129:[function(require,module,exports){
+},{"./Object.assign":122,"./ReactComponent":130,"./ReactCurrentOwner":135,"./ReactElement":153,"./ReactErrorUtils":156,"./ReactInstanceMap":163,"./ReactLifeCycle":164,"./ReactPropTypeLocationNames":172,"./ReactPropTypeLocations":173,"./ReactUpdateQueue":182,"./invariant":231,"./keyMirror":236,"./keyOf":237,"./warning":250,"_process":6}],130:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -26409,7 +26712,7 @@ if ("production" !== process.env.NODE_ENV) {
module.exports = ReactComponent;
}).call(this,require('_process'))
-},{"./ReactUpdateQueue":181,"./invariant":230,"./warning":249,"_process":5}],130:[function(require,module,exports){
+},{"./ReactUpdateQueue":182,"./invariant":231,"./warning":250,"_process":6}],131:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -26456,7 +26759,7 @@ var ReactComponentBrowserEnvironment = {
module.exports = ReactComponentBrowserEnvironment;
-},{"./ReactDOMIDOperations":139,"./ReactMount":165}],131:[function(require,module,exports){
+},{"./ReactDOMIDOperations":140,"./ReactMount":166}],132:[function(require,module,exports){
(function (process){
/**
* Copyright 2014-2015, Facebook, Inc.
@@ -26517,7 +26820,7 @@ var ReactComponentEnvironment = {
module.exports = ReactComponentEnvironment;
}).call(this,require('_process'))
-},{"./invariant":230,"_process":5}],132:[function(require,module,exports){
+},{"./invariant":231,"_process":6}],133:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -27430,7 +27733,7 @@ var ReactCompositeComponent = {
module.exports = ReactCompositeComponent;
}).call(this,require('_process'))
-},{"./Object.assign":121,"./ReactComponentEnvironment":131,"./ReactContext":133,"./ReactCurrentOwner":134,"./ReactElement":152,"./ReactElementValidator":153,"./ReactInstanceMap":162,"./ReactLifeCycle":163,"./ReactNativeComponent":168,"./ReactPerf":170,"./ReactPropTypeLocationNames":171,"./ReactPropTypeLocations":172,"./ReactReconciler":176,"./ReactUpdates":182,"./emptyObject":210,"./invariant":230,"./shouldUpdateReactComponent":246,"./warning":249,"_process":5}],133:[function(require,module,exports){
+},{"./Object.assign":122,"./ReactComponentEnvironment":132,"./ReactContext":134,"./ReactCurrentOwner":135,"./ReactElement":153,"./ReactElementValidator":154,"./ReactInstanceMap":163,"./ReactLifeCycle":164,"./ReactNativeComponent":169,"./ReactPerf":171,"./ReactPropTypeLocationNames":172,"./ReactPropTypeLocations":173,"./ReactReconciler":177,"./ReactUpdates":183,"./emptyObject":211,"./invariant":231,"./shouldUpdateReactComponent":247,"./warning":250,"_process":6}],134:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -27508,7 +27811,7 @@ var ReactContext = {
module.exports = ReactContext;
}).call(this,require('_process'))
-},{"./Object.assign":121,"./emptyObject":210,"./warning":249,"_process":5}],134:[function(require,module,exports){
+},{"./Object.assign":122,"./emptyObject":211,"./warning":250,"_process":6}],135:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -27542,7 +27845,7 @@ var ReactCurrentOwner = {
module.exports = ReactCurrentOwner;
-},{}],135:[function(require,module,exports){
+},{}],136:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -27721,7 +28024,7 @@ var ReactDOM = mapObject({
module.exports = ReactDOM;
}).call(this,require('_process'))
-},{"./ReactElement":152,"./ReactElementValidator":153,"./mapObject":237,"_process":5}],136:[function(require,module,exports){
+},{"./ReactElement":153,"./ReactElementValidator":154,"./mapObject":238,"_process":6}],137:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -27785,7 +28088,7 @@ var ReactDOMButton = ReactClass.createClass({
module.exports = ReactDOMButton;
-},{"./AutoFocusMixin":96,"./ReactBrowserComponentMixin":124,"./ReactClass":128,"./ReactElement":152,"./keyMirror":235}],137:[function(require,module,exports){
+},{"./AutoFocusMixin":97,"./ReactBrowserComponentMixin":125,"./ReactClass":129,"./ReactElement":153,"./keyMirror":236}],138:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -28295,7 +28598,7 @@ ReactDOMComponent.injection = {
module.exports = ReactDOMComponent;
}).call(this,require('_process'))
-},{"./CSSPropertyOperations":99,"./DOMProperty":104,"./DOMPropertyOperations":105,"./Object.assign":121,"./ReactBrowserEventEmitter":125,"./ReactComponentBrowserEnvironment":130,"./ReactMount":165,"./ReactMultiChild":166,"./ReactPerf":170,"./escapeTextContentForBrowser":211,"./invariant":230,"./isEventSupported":231,"./keyOf":236,"./warning":249,"_process":5}],138:[function(require,module,exports){
+},{"./CSSPropertyOperations":100,"./DOMProperty":105,"./DOMPropertyOperations":106,"./Object.assign":122,"./ReactBrowserEventEmitter":126,"./ReactComponentBrowserEnvironment":131,"./ReactMount":166,"./ReactMultiChild":167,"./ReactPerf":171,"./escapeTextContentForBrowser":212,"./invariant":231,"./isEventSupported":232,"./keyOf":237,"./warning":250,"_process":6}],139:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -28344,7 +28647,7 @@ var ReactDOMForm = ReactClass.createClass({
module.exports = ReactDOMForm;
-},{"./EventConstants":109,"./LocalEventTrapMixin":119,"./ReactBrowserComponentMixin":124,"./ReactClass":128,"./ReactElement":152}],139:[function(require,module,exports){
+},{"./EventConstants":110,"./LocalEventTrapMixin":120,"./ReactBrowserComponentMixin":125,"./ReactClass":129,"./ReactElement":153}],140:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -28512,7 +28815,7 @@ ReactPerf.measureMethods(ReactDOMIDOperations, 'ReactDOMIDOperations', {
module.exports = ReactDOMIDOperations;
}).call(this,require('_process'))
-},{"./CSSPropertyOperations":99,"./DOMChildrenOperations":103,"./DOMPropertyOperations":105,"./ReactMount":165,"./ReactPerf":170,"./invariant":230,"./setInnerHTML":243,"_process":5}],140:[function(require,module,exports){
+},{"./CSSPropertyOperations":100,"./DOMChildrenOperations":104,"./DOMPropertyOperations":106,"./ReactMount":166,"./ReactPerf":171,"./invariant":231,"./setInnerHTML":244,"_process":6}],141:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -28557,7 +28860,7 @@ var ReactDOMIframe = ReactClass.createClass({
module.exports = ReactDOMIframe;
-},{"./EventConstants":109,"./LocalEventTrapMixin":119,"./ReactBrowserComponentMixin":124,"./ReactClass":128,"./ReactElement":152}],141:[function(require,module,exports){
+},{"./EventConstants":110,"./LocalEventTrapMixin":120,"./ReactBrowserComponentMixin":125,"./ReactClass":129,"./ReactElement":153}],142:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -28603,7 +28906,7 @@ var ReactDOMImg = ReactClass.createClass({
module.exports = ReactDOMImg;
-},{"./EventConstants":109,"./LocalEventTrapMixin":119,"./ReactBrowserComponentMixin":124,"./ReactClass":128,"./ReactElement":152}],142:[function(require,module,exports){
+},{"./EventConstants":110,"./LocalEventTrapMixin":120,"./ReactBrowserComponentMixin":125,"./ReactClass":129,"./ReactElement":153}],143:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -28780,7 +29083,7 @@ var ReactDOMInput = ReactClass.createClass({
module.exports = ReactDOMInput;
}).call(this,require('_process'))
-},{"./AutoFocusMixin":96,"./DOMPropertyOperations":105,"./LinkedValueUtils":118,"./Object.assign":121,"./ReactBrowserComponentMixin":124,"./ReactClass":128,"./ReactElement":152,"./ReactMount":165,"./ReactUpdates":182,"./invariant":230,"_process":5}],143:[function(require,module,exports){
+},{"./AutoFocusMixin":97,"./DOMPropertyOperations":106,"./LinkedValueUtils":119,"./Object.assign":122,"./ReactBrowserComponentMixin":125,"./ReactClass":129,"./ReactElement":153,"./ReactMount":166,"./ReactUpdates":183,"./invariant":231,"_process":6}],144:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -28832,7 +29135,7 @@ var ReactDOMOption = ReactClass.createClass({
module.exports = ReactDOMOption;
}).call(this,require('_process'))
-},{"./ReactBrowserComponentMixin":124,"./ReactClass":128,"./ReactElement":152,"./warning":249,"_process":5}],144:[function(require,module,exports){
+},{"./ReactBrowserComponentMixin":125,"./ReactClass":129,"./ReactElement":153,"./warning":250,"_process":6}],145:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -29010,7 +29313,7 @@ var ReactDOMSelect = ReactClass.createClass({
module.exports = ReactDOMSelect;
-},{"./AutoFocusMixin":96,"./LinkedValueUtils":118,"./Object.assign":121,"./ReactBrowserComponentMixin":124,"./ReactClass":128,"./ReactElement":152,"./ReactUpdates":182}],145:[function(require,module,exports){
+},{"./AutoFocusMixin":97,"./LinkedValueUtils":119,"./Object.assign":122,"./ReactBrowserComponentMixin":125,"./ReactClass":129,"./ReactElement":153,"./ReactUpdates":183}],146:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -29223,7 +29526,7 @@ var ReactDOMSelection = {
module.exports = ReactDOMSelection;
-},{"./ExecutionEnvironment":115,"./getNodeForCharacterOffset":223,"./getTextContentAccessor":225}],146:[function(require,module,exports){
+},{"./ExecutionEnvironment":116,"./getNodeForCharacterOffset":224,"./getTextContentAccessor":226}],147:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -29340,7 +29643,7 @@ assign(ReactDOMTextComponent.prototype, {
module.exports = ReactDOMTextComponent;
-},{"./DOMPropertyOperations":105,"./Object.assign":121,"./ReactComponentBrowserEnvironment":130,"./ReactDOMComponent":137,"./escapeTextContentForBrowser":211}],147:[function(require,module,exports){
+},{"./DOMPropertyOperations":106,"./Object.assign":122,"./ReactComponentBrowserEnvironment":131,"./ReactDOMComponent":138,"./escapeTextContentForBrowser":212}],148:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -29480,7 +29783,7 @@ var ReactDOMTextarea = ReactClass.createClass({
module.exports = ReactDOMTextarea;
}).call(this,require('_process'))
-},{"./AutoFocusMixin":96,"./DOMPropertyOperations":105,"./LinkedValueUtils":118,"./Object.assign":121,"./ReactBrowserComponentMixin":124,"./ReactClass":128,"./ReactElement":152,"./ReactUpdates":182,"./invariant":230,"./warning":249,"_process":5}],148:[function(require,module,exports){
+},{"./AutoFocusMixin":97,"./DOMPropertyOperations":106,"./LinkedValueUtils":119,"./Object.assign":122,"./ReactBrowserComponentMixin":125,"./ReactClass":129,"./ReactElement":153,"./ReactUpdates":183,"./invariant":231,"./warning":250,"_process":6}],149:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -29553,7 +29856,7 @@ var ReactDefaultBatchingStrategy = {
module.exports = ReactDefaultBatchingStrategy;
-},{"./Object.assign":121,"./ReactUpdates":182,"./Transaction":198,"./emptyFunction":209}],149:[function(require,module,exports){
+},{"./Object.assign":122,"./ReactUpdates":183,"./Transaction":199,"./emptyFunction":210}],150:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -29712,7 +30015,7 @@ module.exports = {
};
}).call(this,require('_process'))
-},{"./BeforeInputEventPlugin":97,"./ChangeEventPlugin":101,"./ClientReactRootIndex":102,"./DefaultEventPluginOrder":107,"./EnterLeaveEventPlugin":108,"./ExecutionEnvironment":115,"./HTMLDOMPropertyConfig":117,"./MobileSafariClickEventPlugin":120,"./ReactBrowserComponentMixin":124,"./ReactClass":128,"./ReactComponentBrowserEnvironment":130,"./ReactDOMButton":136,"./ReactDOMComponent":137,"./ReactDOMForm":138,"./ReactDOMIDOperations":139,"./ReactDOMIframe":140,"./ReactDOMImg":141,"./ReactDOMInput":142,"./ReactDOMOption":143,"./ReactDOMSelect":144,"./ReactDOMTextComponent":146,"./ReactDOMTextarea":147,"./ReactDefaultBatchingStrategy":148,"./ReactDefaultPerf":150,"./ReactElement":152,"./ReactEventListener":157,"./ReactInjection":159,"./ReactInstanceHandles":161,"./ReactMount":165,"./ReactReconcileTransaction":175,"./SVGDOMPropertyConfig":183,"./SelectEventPlugin":184,"./ServerReactRootIndex":185,"./SimpleEventPlugin":186,"./createFullPageComponent":206,"_process":5}],150:[function(require,module,exports){
+},{"./BeforeInputEventPlugin":98,"./ChangeEventPlugin":102,"./ClientReactRootIndex":103,"./DefaultEventPluginOrder":108,"./EnterLeaveEventPlugin":109,"./ExecutionEnvironment":116,"./HTMLDOMPropertyConfig":118,"./MobileSafariClickEventPlugin":121,"./ReactBrowserComponentMixin":125,"./ReactClass":129,"./ReactComponentBrowserEnvironment":131,"./ReactDOMButton":137,"./ReactDOMComponent":138,"./ReactDOMForm":139,"./ReactDOMIDOperations":140,"./ReactDOMIframe":141,"./ReactDOMImg":142,"./ReactDOMInput":143,"./ReactDOMOption":144,"./ReactDOMSelect":145,"./ReactDOMTextComponent":147,"./ReactDOMTextarea":148,"./ReactDefaultBatchingStrategy":149,"./ReactDefaultPerf":151,"./ReactElement":153,"./ReactEventListener":158,"./ReactInjection":160,"./ReactInstanceHandles":162,"./ReactMount":166,"./ReactReconcileTransaction":176,"./SVGDOMPropertyConfig":184,"./SelectEventPlugin":185,"./ServerReactRootIndex":186,"./SimpleEventPlugin":187,"./createFullPageComponent":207,"_process":6}],151:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -29978,7 +30281,7 @@ var ReactDefaultPerf = {
module.exports = ReactDefaultPerf;
-},{"./DOMProperty":104,"./ReactDefaultPerfAnalysis":151,"./ReactMount":165,"./ReactPerf":170,"./performanceNow":241}],151:[function(require,module,exports){
+},{"./DOMProperty":105,"./ReactDefaultPerfAnalysis":152,"./ReactMount":166,"./ReactPerf":171,"./performanceNow":242}],152:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -30184,7 +30487,7 @@ var ReactDefaultPerfAnalysis = {
module.exports = ReactDefaultPerfAnalysis;
-},{"./Object.assign":121}],152:[function(require,module,exports){
+},{"./Object.assign":122}],153:[function(require,module,exports){
(function (process){
/**
* Copyright 2014-2015, Facebook, Inc.
@@ -30492,7 +30795,7 @@ ReactElement.isValidElement = function(object) {
module.exports = ReactElement;
}).call(this,require('_process'))
-},{"./Object.assign":121,"./ReactContext":133,"./ReactCurrentOwner":134,"./warning":249,"_process":5}],153:[function(require,module,exports){
+},{"./Object.assign":122,"./ReactContext":134,"./ReactCurrentOwner":135,"./warning":250,"_process":6}],154:[function(require,module,exports){
(function (process){
/**
* Copyright 2014-2015, Facebook, Inc.
@@ -30957,7 +31260,7 @@ var ReactElementValidator = {
module.exports = ReactElementValidator;
}).call(this,require('_process'))
-},{"./ReactCurrentOwner":134,"./ReactElement":152,"./ReactFragment":158,"./ReactNativeComponent":168,"./ReactPropTypeLocationNames":171,"./ReactPropTypeLocations":172,"./getIteratorFn":221,"./invariant":230,"./warning":249,"_process":5}],154:[function(require,module,exports){
+},{"./ReactCurrentOwner":135,"./ReactElement":153,"./ReactFragment":159,"./ReactNativeComponent":169,"./ReactPropTypeLocationNames":172,"./ReactPropTypeLocations":173,"./getIteratorFn":222,"./invariant":231,"./warning":250,"_process":6}],155:[function(require,module,exports){
(function (process){
/**
* Copyright 2014-2015, Facebook, Inc.
@@ -31052,7 +31355,7 @@ var ReactEmptyComponent = {
module.exports = ReactEmptyComponent;
}).call(this,require('_process'))
-},{"./ReactElement":152,"./ReactInstanceMap":162,"./invariant":230,"_process":5}],155:[function(require,module,exports){
+},{"./ReactElement":153,"./ReactInstanceMap":163,"./invariant":231,"_process":6}],156:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -31084,7 +31387,7 @@ var ReactErrorUtils = {
module.exports = ReactErrorUtils;
-},{}],156:[function(require,module,exports){
+},{}],157:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -31134,7 +31437,7 @@ var ReactEventEmitterMixin = {
module.exports = ReactEventEmitterMixin;
-},{"./EventPluginHub":111}],157:[function(require,module,exports){
+},{"./EventPluginHub":112}],158:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -31317,7 +31620,7 @@ var ReactEventListener = {
module.exports = ReactEventListener;
-},{"./EventListener":110,"./ExecutionEnvironment":115,"./Object.assign":121,"./PooledClass":122,"./ReactInstanceHandles":161,"./ReactMount":165,"./ReactUpdates":182,"./getEventTarget":220,"./getUnboundedScrollPosition":226}],158:[function(require,module,exports){
+},{"./EventListener":111,"./ExecutionEnvironment":116,"./Object.assign":122,"./PooledClass":123,"./ReactInstanceHandles":162,"./ReactMount":166,"./ReactUpdates":183,"./getEventTarget":221,"./getUnboundedScrollPosition":227}],159:[function(require,module,exports){
(function (process){
/**
* Copyright 2015, Facebook, Inc.
@@ -31502,7 +31805,7 @@ var ReactFragment = {
module.exports = ReactFragment;
}).call(this,require('_process'))
-},{"./ReactElement":152,"./warning":249,"_process":5}],159:[function(require,module,exports){
+},{"./ReactElement":153,"./warning":250,"_process":6}],160:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -31544,7 +31847,7 @@ var ReactInjection = {
module.exports = ReactInjection;
-},{"./DOMProperty":104,"./EventPluginHub":111,"./ReactBrowserEventEmitter":125,"./ReactClass":128,"./ReactComponentEnvironment":131,"./ReactDOMComponent":137,"./ReactEmptyComponent":154,"./ReactNativeComponent":168,"./ReactPerf":170,"./ReactRootIndex":178,"./ReactUpdates":182}],160:[function(require,module,exports){
+},{"./DOMProperty":105,"./EventPluginHub":112,"./ReactBrowserEventEmitter":126,"./ReactClass":129,"./ReactComponentEnvironment":132,"./ReactDOMComponent":138,"./ReactEmptyComponent":155,"./ReactNativeComponent":169,"./ReactPerf":171,"./ReactRootIndex":179,"./ReactUpdates":183}],161:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -31679,7 +31982,7 @@ var ReactInputSelection = {
module.exports = ReactInputSelection;
-},{"./ReactDOMSelection":145,"./containsNode":204,"./focusNode":214,"./getActiveElement":216}],161:[function(require,module,exports){
+},{"./ReactDOMSelection":146,"./containsNode":205,"./focusNode":215,"./getActiveElement":217}],162:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -32015,7 +32318,7 @@ var ReactInstanceHandles = {
module.exports = ReactInstanceHandles;
}).call(this,require('_process'))
-},{"./ReactRootIndex":178,"./invariant":230,"_process":5}],162:[function(require,module,exports){
+},{"./ReactRootIndex":179,"./invariant":231,"_process":6}],163:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -32064,7 +32367,7 @@ var ReactInstanceMap = {
module.exports = ReactInstanceMap;
-},{}],163:[function(require,module,exports){
+},{}],164:[function(require,module,exports){
/**
* Copyright 2015, Facebook, Inc.
* All rights reserved.
@@ -32101,7 +32404,7 @@ var ReactLifeCycle = {
module.exports = ReactLifeCycle;
-},{}],164:[function(require,module,exports){
+},{}],165:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -32149,7 +32452,7 @@ var ReactMarkupChecksum = {
module.exports = ReactMarkupChecksum;
-},{"./adler32":201}],165:[function(require,module,exports){
+},{"./adler32":202}],166:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -33040,7 +33343,7 @@ ReactPerf.measureMethods(ReactMount, 'ReactMount', {
module.exports = ReactMount;
}).call(this,require('_process'))
-},{"./DOMProperty":104,"./ReactBrowserEventEmitter":125,"./ReactCurrentOwner":134,"./ReactElement":152,"./ReactElementValidator":153,"./ReactEmptyComponent":154,"./ReactInstanceHandles":161,"./ReactInstanceMap":162,"./ReactMarkupChecksum":164,"./ReactPerf":170,"./ReactReconciler":176,"./ReactUpdateQueue":181,"./ReactUpdates":182,"./containsNode":204,"./emptyObject":210,"./getReactRootElementInContainer":224,"./instantiateReactComponent":229,"./invariant":230,"./setInnerHTML":243,"./shouldUpdateReactComponent":246,"./warning":249,"_process":5}],166:[function(require,module,exports){
+},{"./DOMProperty":105,"./ReactBrowserEventEmitter":126,"./ReactCurrentOwner":135,"./ReactElement":153,"./ReactElementValidator":154,"./ReactEmptyComponent":155,"./ReactInstanceHandles":162,"./ReactInstanceMap":163,"./ReactMarkupChecksum":165,"./ReactPerf":171,"./ReactReconciler":177,"./ReactUpdateQueue":182,"./ReactUpdates":183,"./containsNode":205,"./emptyObject":211,"./getReactRootElementInContainer":225,"./instantiateReactComponent":230,"./invariant":231,"./setInnerHTML":244,"./shouldUpdateReactComponent":247,"./warning":250,"_process":6}],167:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -33470,7 +33773,7 @@ var ReactMultiChild = {
module.exports = ReactMultiChild;
-},{"./ReactChildReconciler":126,"./ReactComponentEnvironment":131,"./ReactMultiChildUpdateTypes":167,"./ReactReconciler":176}],167:[function(require,module,exports){
+},{"./ReactChildReconciler":127,"./ReactComponentEnvironment":132,"./ReactMultiChildUpdateTypes":168,"./ReactReconciler":177}],168:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -33503,7 +33806,7 @@ var ReactMultiChildUpdateTypes = keyMirror({
module.exports = ReactMultiChildUpdateTypes;
-},{"./keyMirror":235}],168:[function(require,module,exports){
+},{"./keyMirror":236}],169:[function(require,module,exports){
(function (process){
/**
* Copyright 2014-2015, Facebook, Inc.
@@ -33610,7 +33913,7 @@ var ReactNativeComponent = {
module.exports = ReactNativeComponent;
}).call(this,require('_process'))
-},{"./Object.assign":121,"./invariant":230,"_process":5}],169:[function(require,module,exports){
+},{"./Object.assign":122,"./invariant":231,"_process":6}],170:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -33722,7 +34025,7 @@ var ReactOwner = {
module.exports = ReactOwner;
}).call(this,require('_process'))
-},{"./invariant":230,"_process":5}],170:[function(require,module,exports){
+},{"./invariant":231,"_process":6}],171:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -33826,7 +34129,7 @@ function _noMeasure(objName, fnName, func) {
module.exports = ReactPerf;
}).call(this,require('_process'))
-},{"_process":5}],171:[function(require,module,exports){
+},{"_process":6}],172:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -33854,7 +34157,7 @@ if ("production" !== process.env.NODE_ENV) {
module.exports = ReactPropTypeLocationNames;
}).call(this,require('_process'))
-},{"_process":5}],172:[function(require,module,exports){
+},{"_process":6}],173:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -33878,7 +34181,7 @@ var ReactPropTypeLocations = keyMirror({
module.exports = ReactPropTypeLocations;
-},{"./keyMirror":235}],173:[function(require,module,exports){
+},{"./keyMirror":236}],174:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -34227,7 +34530,7 @@ function getPreciseType(propValue) {
module.exports = ReactPropTypes;
-},{"./ReactElement":152,"./ReactFragment":158,"./ReactPropTypeLocationNames":171,"./emptyFunction":209}],174:[function(require,module,exports){
+},{"./ReactElement":153,"./ReactFragment":159,"./ReactPropTypeLocationNames":172,"./emptyFunction":210}],175:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -34283,7 +34586,7 @@ PooledClass.addPoolingTo(ReactPutListenerQueue);
module.exports = ReactPutListenerQueue;
-},{"./Object.assign":121,"./PooledClass":122,"./ReactBrowserEventEmitter":125}],175:[function(require,module,exports){
+},{"./Object.assign":122,"./PooledClass":123,"./ReactBrowserEventEmitter":126}],176:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -34459,7 +34762,7 @@ PooledClass.addPoolingTo(ReactReconcileTransaction);
module.exports = ReactReconcileTransaction;
-},{"./CallbackQueue":100,"./Object.assign":121,"./PooledClass":122,"./ReactBrowserEventEmitter":125,"./ReactInputSelection":160,"./ReactPutListenerQueue":174,"./Transaction":198}],176:[function(require,module,exports){
+},{"./CallbackQueue":101,"./Object.assign":122,"./PooledClass":123,"./ReactBrowserEventEmitter":126,"./ReactInputSelection":161,"./ReactPutListenerQueue":175,"./Transaction":199}],177:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -34583,7 +34886,7 @@ var ReactReconciler = {
module.exports = ReactReconciler;
}).call(this,require('_process'))
-},{"./ReactElementValidator":153,"./ReactRef":177,"_process":5}],177:[function(require,module,exports){
+},{"./ReactElementValidator":154,"./ReactRef":178,"_process":6}],178:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -34654,7 +34957,7 @@ ReactRef.detachRefs = function(instance, element) {
module.exports = ReactRef;
-},{"./ReactOwner":169}],178:[function(require,module,exports){
+},{"./ReactOwner":170}],179:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -34685,7 +34988,7 @@ var ReactRootIndex = {
module.exports = ReactRootIndex;
-},{}],179:[function(require,module,exports){
+},{}],180:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -34767,7 +35070,7 @@ module.exports = {
};
}).call(this,require('_process'))
-},{"./ReactElement":152,"./ReactInstanceHandles":161,"./ReactMarkupChecksum":164,"./ReactServerRenderingTransaction":180,"./emptyObject":210,"./instantiateReactComponent":229,"./invariant":230,"_process":5}],180:[function(require,module,exports){
+},{"./ReactElement":153,"./ReactInstanceHandles":162,"./ReactMarkupChecksum":165,"./ReactServerRenderingTransaction":181,"./emptyObject":211,"./instantiateReactComponent":230,"./invariant":231,"_process":6}],181:[function(require,module,exports){
/**
* Copyright 2014-2015, Facebook, Inc.
* All rights reserved.
@@ -34880,7 +35183,7 @@ PooledClass.addPoolingTo(ReactServerRenderingTransaction);
module.exports = ReactServerRenderingTransaction;
-},{"./CallbackQueue":100,"./Object.assign":121,"./PooledClass":122,"./ReactPutListenerQueue":174,"./Transaction":198,"./emptyFunction":209}],181:[function(require,module,exports){
+},{"./CallbackQueue":101,"./Object.assign":122,"./PooledClass":123,"./ReactPutListenerQueue":175,"./Transaction":199,"./emptyFunction":210}],182:[function(require,module,exports){
(function (process){
/**
* Copyright 2015, Facebook, Inc.
@@ -35179,7 +35482,7 @@ var ReactUpdateQueue = {
module.exports = ReactUpdateQueue;
}).call(this,require('_process'))
-},{"./Object.assign":121,"./ReactCurrentOwner":134,"./ReactElement":152,"./ReactInstanceMap":162,"./ReactLifeCycle":163,"./ReactUpdates":182,"./invariant":230,"./warning":249,"_process":5}],182:[function(require,module,exports){
+},{"./Object.assign":122,"./ReactCurrentOwner":135,"./ReactElement":153,"./ReactInstanceMap":163,"./ReactLifeCycle":164,"./ReactUpdates":183,"./invariant":231,"./warning":250,"_process":6}],183:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -35461,7 +35764,7 @@ var ReactUpdates = {
module.exports = ReactUpdates;
}).call(this,require('_process'))
-},{"./CallbackQueue":100,"./Object.assign":121,"./PooledClass":122,"./ReactCurrentOwner":134,"./ReactPerf":170,"./ReactReconciler":176,"./Transaction":198,"./invariant":230,"./warning":249,"_process":5}],183:[function(require,module,exports){
+},{"./CallbackQueue":101,"./Object.assign":122,"./PooledClass":123,"./ReactCurrentOwner":135,"./ReactPerf":171,"./ReactReconciler":177,"./Transaction":199,"./invariant":231,"./warning":250,"_process":6}],184:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -35555,7 +35858,7 @@ var SVGDOMPropertyConfig = {
module.exports = SVGDOMPropertyConfig;
-},{"./DOMProperty":104}],184:[function(require,module,exports){
+},{"./DOMProperty":105}],185:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -35750,7 +36053,7 @@ var SelectEventPlugin = {
module.exports = SelectEventPlugin;
-},{"./EventConstants":109,"./EventPropagators":114,"./ReactInputSelection":160,"./SyntheticEvent":190,"./getActiveElement":216,"./isTextInputElement":233,"./keyOf":236,"./shallowEqual":245}],185:[function(require,module,exports){
+},{"./EventConstants":110,"./EventPropagators":115,"./ReactInputSelection":161,"./SyntheticEvent":191,"./getActiveElement":217,"./isTextInputElement":234,"./keyOf":237,"./shallowEqual":246}],186:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -35781,7 +36084,7 @@ var ServerReactRootIndex = {
module.exports = ServerReactRootIndex;
-},{}],186:[function(require,module,exports){
+},{}],187:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -36209,7 +36512,7 @@ var SimpleEventPlugin = {
module.exports = SimpleEventPlugin;
}).call(this,require('_process'))
-},{"./EventConstants":109,"./EventPluginUtils":113,"./EventPropagators":114,"./SyntheticClipboardEvent":187,"./SyntheticDragEvent":189,"./SyntheticEvent":190,"./SyntheticFocusEvent":191,"./SyntheticKeyboardEvent":193,"./SyntheticMouseEvent":194,"./SyntheticTouchEvent":195,"./SyntheticUIEvent":196,"./SyntheticWheelEvent":197,"./getEventCharCode":217,"./invariant":230,"./keyOf":236,"./warning":249,"_process":5}],187:[function(require,module,exports){
+},{"./EventConstants":110,"./EventPluginUtils":114,"./EventPropagators":115,"./SyntheticClipboardEvent":188,"./SyntheticDragEvent":190,"./SyntheticEvent":191,"./SyntheticFocusEvent":192,"./SyntheticKeyboardEvent":194,"./SyntheticMouseEvent":195,"./SyntheticTouchEvent":196,"./SyntheticUIEvent":197,"./SyntheticWheelEvent":198,"./getEventCharCode":218,"./invariant":231,"./keyOf":237,"./warning":250,"_process":6}],188:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -36254,7 +36557,7 @@ SyntheticEvent.augmentClass(SyntheticClipboardEvent, ClipboardEventInterface);
module.exports = SyntheticClipboardEvent;
-},{"./SyntheticEvent":190}],188:[function(require,module,exports){
+},{"./SyntheticEvent":191}],189:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -36299,7 +36602,7 @@ SyntheticEvent.augmentClass(
module.exports = SyntheticCompositionEvent;
-},{"./SyntheticEvent":190}],189:[function(require,module,exports){
+},{"./SyntheticEvent":191}],190:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -36338,7 +36641,7 @@ SyntheticMouseEvent.augmentClass(SyntheticDragEvent, DragEventInterface);
module.exports = SyntheticDragEvent;
-},{"./SyntheticMouseEvent":194}],190:[function(require,module,exports){
+},{"./SyntheticMouseEvent":195}],191:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -36504,7 +36807,7 @@ PooledClass.addPoolingTo(SyntheticEvent, PooledClass.threeArgumentPooler);
module.exports = SyntheticEvent;
-},{"./Object.assign":121,"./PooledClass":122,"./emptyFunction":209,"./getEventTarget":220}],191:[function(require,module,exports){
+},{"./Object.assign":122,"./PooledClass":123,"./emptyFunction":210,"./getEventTarget":221}],192:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -36543,7 +36846,7 @@ SyntheticUIEvent.augmentClass(SyntheticFocusEvent, FocusEventInterface);
module.exports = SyntheticFocusEvent;
-},{"./SyntheticUIEvent":196}],192:[function(require,module,exports){
+},{"./SyntheticUIEvent":197}],193:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -36589,7 +36892,7 @@ SyntheticEvent.augmentClass(
module.exports = SyntheticInputEvent;
-},{"./SyntheticEvent":190}],193:[function(require,module,exports){
+},{"./SyntheticEvent":191}],194:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -36676,7 +36979,7 @@ SyntheticUIEvent.augmentClass(SyntheticKeyboardEvent, KeyboardEventInterface);
module.exports = SyntheticKeyboardEvent;
-},{"./SyntheticUIEvent":196,"./getEventCharCode":217,"./getEventKey":218,"./getEventModifierState":219}],194:[function(require,module,exports){
+},{"./SyntheticUIEvent":197,"./getEventCharCode":218,"./getEventKey":219,"./getEventModifierState":220}],195:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -36757,7 +37060,7 @@ SyntheticUIEvent.augmentClass(SyntheticMouseEvent, MouseEventInterface);
module.exports = SyntheticMouseEvent;
-},{"./SyntheticUIEvent":196,"./ViewportMetrics":199,"./getEventModifierState":219}],195:[function(require,module,exports){
+},{"./SyntheticUIEvent":197,"./ViewportMetrics":200,"./getEventModifierState":220}],196:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -36805,7 +37108,7 @@ SyntheticUIEvent.augmentClass(SyntheticTouchEvent, TouchEventInterface);
module.exports = SyntheticTouchEvent;
-},{"./SyntheticUIEvent":196,"./getEventModifierState":219}],196:[function(require,module,exports){
+},{"./SyntheticUIEvent":197,"./getEventModifierState":220}],197:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -36867,7 +37170,7 @@ SyntheticEvent.augmentClass(SyntheticUIEvent, UIEventInterface);
module.exports = SyntheticUIEvent;
-},{"./SyntheticEvent":190,"./getEventTarget":220}],197:[function(require,module,exports){
+},{"./SyntheticEvent":191,"./getEventTarget":221}],198:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -36928,7 +37231,7 @@ SyntheticMouseEvent.augmentClass(SyntheticWheelEvent, WheelEventInterface);
module.exports = SyntheticWheelEvent;
-},{"./SyntheticMouseEvent":194}],198:[function(require,module,exports){
+},{"./SyntheticMouseEvent":195}],199:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -37169,7 +37472,7 @@ var Transaction = {
module.exports = Transaction;
}).call(this,require('_process'))
-},{"./invariant":230,"_process":5}],199:[function(require,module,exports){
+},{"./invariant":231,"_process":6}],200:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -37198,7 +37501,7 @@ var ViewportMetrics = {
module.exports = ViewportMetrics;
-},{}],200:[function(require,module,exports){
+},{}],201:[function(require,module,exports){
(function (process){
/**
* Copyright 2014-2015, Facebook, Inc.
@@ -37264,7 +37567,7 @@ function accumulateInto(current, next) {
module.exports = accumulateInto;
}).call(this,require('_process'))
-},{"./invariant":230,"_process":5}],201:[function(require,module,exports){
+},{"./invariant":231,"_process":6}],202:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -37298,7 +37601,7 @@ function adler32(data) {
module.exports = adler32;
-},{}],202:[function(require,module,exports){
+},{}],203:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -37330,7 +37633,7 @@ function camelize(string) {
module.exports = camelize;
-},{}],203:[function(require,module,exports){
+},{}],204:[function(require,module,exports){
/**
* Copyright 2014-2015, Facebook, Inc.
* All rights reserved.
@@ -37372,7 +37675,7 @@ function camelizeStyleName(string) {
module.exports = camelizeStyleName;
-},{"./camelize":202}],204:[function(require,module,exports){
+},{"./camelize":203}],205:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -37416,7 +37719,7 @@ function containsNode(outerNode, innerNode) {
module.exports = containsNode;
-},{"./isTextNode":234}],205:[function(require,module,exports){
+},{"./isTextNode":235}],206:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -37502,7 +37805,7 @@ function createArrayFromMixed(obj) {
module.exports = createArrayFromMixed;
-},{"./toArray":247}],206:[function(require,module,exports){
+},{"./toArray":248}],207:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -37564,7 +37867,7 @@ function createFullPageComponent(tag) {
module.exports = createFullPageComponent;
}).call(this,require('_process'))
-},{"./ReactClass":128,"./ReactElement":152,"./invariant":230,"_process":5}],207:[function(require,module,exports){
+},{"./ReactClass":129,"./ReactElement":153,"./invariant":231,"_process":6}],208:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -37654,7 +37957,7 @@ function createNodesFromMarkup(markup, handleScript) {
module.exports = createNodesFromMarkup;
}).call(this,require('_process'))
-},{"./ExecutionEnvironment":115,"./createArrayFromMixed":205,"./getMarkupWrap":222,"./invariant":230,"_process":5}],208:[function(require,module,exports){
+},{"./ExecutionEnvironment":116,"./createArrayFromMixed":206,"./getMarkupWrap":223,"./invariant":231,"_process":6}],209:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -37712,7 +38015,7 @@ function dangerousStyleValue(name, value) {
module.exports = dangerousStyleValue;
-},{"./CSSProperty":98}],209:[function(require,module,exports){
+},{"./CSSProperty":99}],210:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -37746,7 +38049,7 @@ emptyFunction.thatReturnsArgument = function(arg) { return arg; };
module.exports = emptyFunction;
-},{}],210:[function(require,module,exports){
+},{}],211:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -37770,7 +38073,7 @@ if ("production" !== process.env.NODE_ENV) {
module.exports = emptyObject;
}).call(this,require('_process'))
-},{"_process":5}],211:[function(require,module,exports){
+},{"_process":6}],212:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -37810,7 +38113,7 @@ function escapeTextContentForBrowser(text) {
module.exports = escapeTextContentForBrowser;
-},{}],212:[function(require,module,exports){
+},{}],213:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -37883,7 +38186,7 @@ function findDOMNode(componentOrElement) {
module.exports = findDOMNode;
}).call(this,require('_process'))
-},{"./ReactCurrentOwner":134,"./ReactInstanceMap":162,"./ReactMount":165,"./invariant":230,"./isNode":232,"./warning":249,"_process":5}],213:[function(require,module,exports){
+},{"./ReactCurrentOwner":135,"./ReactInstanceMap":163,"./ReactMount":166,"./invariant":231,"./isNode":233,"./warning":250,"_process":6}],214:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -37941,7 +38244,7 @@ function flattenChildren(children) {
module.exports = flattenChildren;
}).call(this,require('_process'))
-},{"./traverseAllChildren":248,"./warning":249,"_process":5}],214:[function(require,module,exports){
+},{"./traverseAllChildren":249,"./warning":250,"_process":6}],215:[function(require,module,exports){
/**
* Copyright 2014-2015, Facebook, Inc.
* All rights reserved.
@@ -37970,7 +38273,7 @@ function focusNode(node) {
module.exports = focusNode;
-},{}],215:[function(require,module,exports){
+},{}],216:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -38001,7 +38304,7 @@ var forEachAccumulated = function(arr, cb, scope) {
module.exports = forEachAccumulated;
-},{}],216:[function(require,module,exports){
+},{}],217:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -38030,7 +38333,7 @@ function getActiveElement() /*?DOMElement*/ {
module.exports = getActiveElement;
-},{}],217:[function(require,module,exports){
+},{}],218:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -38082,7 +38385,7 @@ function getEventCharCode(nativeEvent) {
module.exports = getEventCharCode;
-},{}],218:[function(require,module,exports){
+},{}],219:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -38187,7 +38490,7 @@ function getEventKey(nativeEvent) {
module.exports = getEventKey;
-},{"./getEventCharCode":217}],219:[function(require,module,exports){
+},{"./getEventCharCode":218}],220:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -38234,7 +38537,7 @@ function getEventModifierState(nativeEvent) {
module.exports = getEventModifierState;
-},{}],220:[function(require,module,exports){
+},{}],221:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -38265,7 +38568,7 @@ function getEventTarget(nativeEvent) {
module.exports = getEventTarget;
-},{}],221:[function(require,module,exports){
+},{}],222:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -38309,7 +38612,7 @@ function getIteratorFn(maybeIterable) {
module.exports = getIteratorFn;
-},{}],222:[function(require,module,exports){
+},{}],223:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -38428,7 +38731,7 @@ function getMarkupWrap(nodeName) {
module.exports = getMarkupWrap;
}).call(this,require('_process'))
-},{"./ExecutionEnvironment":115,"./invariant":230,"_process":5}],223:[function(require,module,exports){
+},{"./ExecutionEnvironment":116,"./invariant":231,"_process":6}],224:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -38503,7 +38806,7 @@ function getNodeForCharacterOffset(root, offset) {
module.exports = getNodeForCharacterOffset;
-},{}],224:[function(require,module,exports){
+},{}],225:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -38538,7 +38841,7 @@ function getReactRootElementInContainer(container) {
module.exports = getReactRootElementInContainer;
-},{}],225:[function(require,module,exports){
+},{}],226:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -38575,7 +38878,7 @@ function getTextContentAccessor() {
module.exports = getTextContentAccessor;
-},{"./ExecutionEnvironment":115}],226:[function(require,module,exports){
+},{"./ExecutionEnvironment":116}],227:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -38615,7 +38918,7 @@ function getUnboundedScrollPosition(scrollable) {
module.exports = getUnboundedScrollPosition;
-},{}],227:[function(require,module,exports){
+},{}],228:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -38648,7 +38951,7 @@ function hyphenate(string) {
module.exports = hyphenate;
-},{}],228:[function(require,module,exports){
+},{}],229:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -38689,7 +38992,7 @@ function hyphenateStyleName(string) {
module.exports = hyphenateStyleName;
-},{"./hyphenate":227}],229:[function(require,module,exports){
+},{"./hyphenate":228}],230:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -38827,7 +39130,7 @@ function instantiateReactComponent(node, parentCompositeType) {
module.exports = instantiateReactComponent;
}).call(this,require('_process'))
-},{"./Object.assign":121,"./ReactCompositeComponent":132,"./ReactEmptyComponent":154,"./ReactNativeComponent":168,"./invariant":230,"./warning":249,"_process":5}],230:[function(require,module,exports){
+},{"./Object.assign":122,"./ReactCompositeComponent":133,"./ReactEmptyComponent":155,"./ReactNativeComponent":169,"./invariant":231,"./warning":250,"_process":6}],231:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -38884,7 +39187,7 @@ var invariant = function(condition, format, a, b, c, d, e, f) {
module.exports = invariant;
}).call(this,require('_process'))
-},{"_process":5}],231:[function(require,module,exports){
+},{"_process":6}],232:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -38949,7 +39252,7 @@ function isEventSupported(eventNameSuffix, capture) {
module.exports = isEventSupported;
-},{"./ExecutionEnvironment":115}],232:[function(require,module,exports){
+},{"./ExecutionEnvironment":116}],233:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -38976,7 +39279,7 @@ function isNode(object) {
module.exports = isNode;
-},{}],233:[function(require,module,exports){
+},{}],234:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -39019,7 +39322,7 @@ function isTextInputElement(elem) {
module.exports = isTextInputElement;
-},{}],234:[function(require,module,exports){
+},{}],235:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -39044,7 +39347,7 @@ function isTextNode(object) {
module.exports = isTextNode;
-},{"./isNode":232}],235:[function(require,module,exports){
+},{"./isNode":233}],236:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -39099,7 +39402,7 @@ var keyMirror = function(obj) {
module.exports = keyMirror;
}).call(this,require('_process'))
-},{"./invariant":230,"_process":5}],236:[function(require,module,exports){
+},{"./invariant":231,"_process":6}],237:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -39135,7 +39438,7 @@ var keyOf = function(oneKeyObj) {
module.exports = keyOf;
-},{}],237:[function(require,module,exports){
+},{}],238:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -39188,7 +39491,7 @@ function mapObject(object, callback, context) {
module.exports = mapObject;
-},{}],238:[function(require,module,exports){
+},{}],239:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -39221,7 +39524,7 @@ function memoizeStringOnly(callback) {
module.exports = memoizeStringOnly;
-},{}],239:[function(require,module,exports){
+},{}],240:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -39261,7 +39564,7 @@ function onlyChild(children) {
module.exports = onlyChild;
}).call(this,require('_process'))
-},{"./ReactElement":152,"./invariant":230,"_process":5}],240:[function(require,module,exports){
+},{"./ReactElement":153,"./invariant":231,"_process":6}],241:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -39289,7 +39592,7 @@ if (ExecutionEnvironment.canUseDOM) {
module.exports = performance || {};
-},{"./ExecutionEnvironment":115}],241:[function(require,module,exports){
+},{"./ExecutionEnvironment":116}],242:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -39317,7 +39620,7 @@ var performanceNow = performance.now.bind(performance);
module.exports = performanceNow;
-},{"./performance":240}],242:[function(require,module,exports){
+},{"./performance":241}],243:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -39345,7 +39648,7 @@ function quoteAttributeValueForBrowser(value) {
module.exports = quoteAttributeValueForBrowser;
-},{"./escapeTextContentForBrowser":211}],243:[function(require,module,exports){
+},{"./escapeTextContentForBrowser":212}],244:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -39434,7 +39737,7 @@ if (ExecutionEnvironment.canUseDOM) {
module.exports = setInnerHTML;
-},{"./ExecutionEnvironment":115}],244:[function(require,module,exports){
+},{"./ExecutionEnvironment":116}],245:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -39476,7 +39779,7 @@ if (ExecutionEnvironment.canUseDOM) {
module.exports = setTextContent;
-},{"./ExecutionEnvironment":115,"./escapeTextContentForBrowser":211,"./setInnerHTML":243}],245:[function(require,module,exports){
+},{"./ExecutionEnvironment":116,"./escapeTextContentForBrowser":212,"./setInnerHTML":244}],246:[function(require,module,exports){
/**
* Copyright 2013-2015, Facebook, Inc.
* All rights reserved.
@@ -39520,7 +39823,7 @@ function shallowEqual(objA, objB) {
module.exports = shallowEqual;
-},{}],246:[function(require,module,exports){
+},{}],247:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -39624,7 +39927,7 @@ function shouldUpdateReactComponent(prevElement, nextElement) {
module.exports = shouldUpdateReactComponent;
}).call(this,require('_process'))
-},{"./warning":249,"_process":5}],247:[function(require,module,exports){
+},{"./warning":250,"_process":6}],248:[function(require,module,exports){
(function (process){
/**
* Copyright 2014-2015, Facebook, Inc.
@@ -39696,7 +39999,7 @@ function toArray(obj) {
module.exports = toArray;
}).call(this,require('_process'))
-},{"./invariant":230,"_process":5}],248:[function(require,module,exports){
+},{"./invariant":231,"_process":6}],249:[function(require,module,exports){
(function (process){
/**
* Copyright 2013-2015, Facebook, Inc.
@@ -39949,7 +40252,7 @@ function traverseAllChildren(children, callback, traverseContext) {
module.exports = traverseAllChildren;
}).call(this,require('_process'))
-},{"./ReactElement":152,"./ReactFragment":158,"./ReactInstanceHandles":161,"./getIteratorFn":221,"./invariant":230,"./warning":249,"_process":5}],249:[function(require,module,exports){
+},{"./ReactElement":153,"./ReactFragment":159,"./ReactInstanceHandles":162,"./getIteratorFn":222,"./invariant":231,"./warning":250,"_process":6}],250:[function(require,module,exports){
(function (process){
/**
* Copyright 2014-2015, Facebook, Inc.
@@ -40012,10 +40315,10 @@ if ("production" !== process.env.NODE_ENV) {
module.exports = warning;
}).call(this,require('_process'))
-},{"./emptyFunction":209,"_process":5}],250:[function(require,module,exports){
+},{"./emptyFunction":210,"_process":6}],251:[function(require,module,exports){
module.exports = require('./lib/React');
-},{"./lib/React":123}],251:[function(require,module,exports){
+},{"./lib/React":124}],252:[function(require,module,exports){
'use strict';
exports.__esModule = true;
@@ -40180,7 +40483,7 @@ function createStore(reducer, initialState) {
replaceReducer: replaceReducer
};
}
-},{"./utils/isPlainObject":257}],252:[function(require,module,exports){
+},{"./utils/isPlainObject":258}],253:[function(require,module,exports){
'use strict';
exports.__esModule = true;
@@ -40212,7 +40515,7 @@ exports.combineReducers = _utilsCombineReducers2['default'];
exports.bindActionCreators = _utilsBindActionCreators2['default'];
exports.applyMiddleware = _utilsApplyMiddleware2['default'];
exports.compose = _utilsCompose2['default'];
-},{"./createStore":251,"./utils/applyMiddleware":253,"./utils/bindActionCreators":254,"./utils/combineReducers":255,"./utils/compose":256}],253:[function(require,module,exports){
+},{"./createStore":252,"./utils/applyMiddleware":254,"./utils/bindActionCreators":255,"./utils/combineReducers":256,"./utils/compose":257}],254:[function(require,module,exports){
'use strict';
exports.__esModule = true;
@@ -40274,7 +40577,7 @@ function applyMiddleware() {
}
module.exports = exports['default'];
-},{"./compose":256}],254:[function(require,module,exports){
+},{"./compose":257}],255:[function(require,module,exports){
'use strict';
exports.__esModule = true;
@@ -40329,7 +40632,7 @@ function bindActionCreators(actionCreators, dispatch) {
}
module.exports = exports['default'];
-},{"../utils/mapValues":258}],255:[function(require,module,exports){
+},{"../utils/mapValues":259}],256:[function(require,module,exports){
(function (process){
'use strict';
@@ -40449,7 +40752,7 @@ function combineReducers(reducers) {
module.exports = exports['default'];
}).call(this,require('_process'))
-},{"../createStore":251,"../utils/isPlainObject":257,"../utils/mapValues":258,"../utils/pick":259,"_process":5}],256:[function(require,module,exports){
+},{"../createStore":252,"../utils/isPlainObject":258,"../utils/mapValues":259,"../utils/pick":260,"_process":6}],257:[function(require,module,exports){
/**
* Composes functions from left to right.
*
@@ -40474,9 +40777,9 @@ function compose() {
}
module.exports = exports["default"];
-},{}],257:[function(require,module,exports){
-arguments[4][92][0].apply(exports,arguments)
-},{"dup":92}],258:[function(require,module,exports){
+},{}],258:[function(require,module,exports){
+arguments[4][93][0].apply(exports,arguments)
+},{"dup":93}],259:[function(require,module,exports){
/**
* Applies a function to every key-value pair inside an object.
*
@@ -40497,7 +40800,7 @@ function mapValues(obj, fn) {
}
module.exports = exports["default"];
-},{}],259:[function(require,module,exports){
+},{}],260:[function(require,module,exports){
/**
* Picks key-value pairs from an object where values satisfy a predicate.
*
@@ -40520,7 +40823,7 @@ function pick(obj, fn) {
}
module.exports = exports["default"];
-},{}],260:[function(require,module,exports){
+},{}],261:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -40540,7 +40843,7 @@ function changedir(dir) {
module.exports = exports['default'];
-},{"actions/types":270}],261:[function(require,module,exports){
+},{"actions/types":271}],262:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -40565,7 +40868,7 @@ function decompress(file) {
};
}
-},{"./types":270}],262:[function(require,module,exports){
+},{"./types":271}],263:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -40617,7 +40920,7 @@ function hideAll() {
}, props);
}
-},{"actions/types":270}],263:[function(require,module,exports){
+},{"actions/types":271}],264:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -40686,7 +40989,7 @@ function remove(file) {
};
}
-},{"actions/types":270}],264:[function(require,module,exports){
+},{"actions/types":271}],265:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -40734,7 +41037,7 @@ function search(keywords) {
};
}
-},{"actions/types":270,"store":"store"}],265:[function(require,module,exports){
+},{"actions/types":271,"store":"store"}],266:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -40786,7 +41089,7 @@ function hideAll() {
}, props);
}
-},{"actions/types":270}],266:[function(require,module,exports){
+},{"actions/types":271}],267:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -40819,7 +41122,7 @@ function toggle() {
};
}
-},{"actions/types":270}],267:[function(require,module,exports){
+},{"actions/types":271}],268:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -40844,7 +41147,7 @@ function disable() {
};
}
-},{"actions/types":270}],268:[function(require,module,exports){
+},{"actions/types":271}],269:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -40863,7 +41166,7 @@ exports['default'] = function (props) {
module.exports = exports['default'];
-},{"actions/types":270}],269:[function(require,module,exports){
+},{"actions/types":271}],270:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -40896,7 +41199,7 @@ function toggle() {
};
}
-},{"actions/types":270}],270:[function(require,module,exports){
+},{"actions/types":271}],271:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -40940,7 +41243,7 @@ var TYPES = {
exports['default'] = TYPES;
module.exports = exports['default'];
-},{}],271:[function(require,module,exports){
+},{}],272:[function(require,module,exports){
'use strict';
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
@@ -40957,7 +41260,36 @@ navigator.mozSetMessageHandler('activity', function (request) {
}
});
-},{"actions/pick":267,"store":"store"}],272:[function(require,module,exports){
+},{"actions/pick":268,"store":"store"}],273:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+var _ftp = require('./ftp');
+
+var ftp = _interopRequireWildcard(_ftp);
+
+var _files = require('./files');
+
+var files = _interopRequireWildcard(_files);
+
+['getFile', 'children', 'isDirectory', 'readFile', 'writeFile', 'createFile', 'createDirectory', 'remove', 'move', 'copy'].forEach(function (method) {
+ exports[method] = function () {
+ return window.ftpMode ? ftp[method].apply(ftp, arguments) : files[method].apply(files, arguments);
+ };
+});
+
+var CACHE = files.CACHE;
+var FTP_CACHE = ftp.FTP_CACHE;
+
+exports.CACHE = CACHE;
+exports.FTP_CACHE = FTP_CACHE;
+
+},{"./files":274,"./ftp":275}],274:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -40986,7 +41318,14 @@ var getFile = _asyncToGenerator(function* () {
if (dir === '/' || !dir) return parent;
- return yield parent.get((0, _utils.normalize)(dir));
+ var file = yield parent.get((0, _utils.normalize)(dir));
+
+ Object.defineProperty(file, 'type', {
+ value: (0, _utils.type)(file),
+ enumerable: true
+ });
+
+ return file;
});
exports.getFile = getFile;
@@ -41000,16 +41339,44 @@ var children = _asyncToGenerator(function* (dir, gatherInfo) {
}
var childs = yield parent.getFilesAndDirectories();
+ var _iteratorNormalCompletion = true;
+ var _didIteratorError = false;
+ var _iteratorError = undefined;
+
+ try {
+ for (var _iterator = childs[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+ var child = _step.value;
+
+ Object.defineProperty(child, 'type', {
+ value: (0, _utils.type)(child),
+ enumerable: true
+ });
+ }
+ } catch (err) {
+ _didIteratorError = true;
+ _iteratorError = err;
+ } finally {
+ try {
+ if (!_iteratorNormalCompletion && _iterator['return']) {
+ _iterator['return']();
+ }
+ } finally {
+ if (_didIteratorError) {
+ throw _iteratorError;
+ }
+ }
+ }
+
if (gatherInfo && !window.needsShim) {
- var _iteratorNormalCompletion = true;
- var _didIteratorError = false;
- var _iteratorError = undefined;
+ var _iteratorNormalCompletion2 = true;
+ var _didIteratorError2 = false;
+ var _iteratorError2 = undefined;
try {
- for (var _iterator = childs[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
- var child = _step.value;
+ for (var _iterator2 = childs[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
+ var child = _step2.value;
- if ((0, _utils.type)(child) === 'Directory') {
+ if (child.type === 'Directory') {
var subchildren = undefined;
try {
subchildren = yield shimDirectory(child).getFilesAndDirectories();
@@ -41025,16 +41392,16 @@ var children = _asyncToGenerator(function* (dir, gatherInfo) {
}
}
} catch (err) {
- _didIteratorError = true;
- _iteratorError = err;
+ _didIteratorError2 = true;
+ _iteratorError2 = err;
} finally {
try {
- if (!_iteratorNormalCompletion && _iterator['return']) {
- _iterator['return']();
+ if (!_iteratorNormalCompletion2 && _iterator2['return']) {
+ _iterator2['return']();
}
} finally {
- if (_didIteratorError) {
- throw _iteratorError;
+ if (_didIteratorError2) {
+ throw _iteratorError2;
}
}
}
@@ -41148,13 +41515,13 @@ var copy = _asyncToGenerator(function* (file, newPath) {
yield parent.createDirectory(newPath);
var childs = yield shimDirectory(target).getFilesAndDirectories();
- var _iteratorNormalCompletion2 = true;
- var _didIteratorError2 = false;
- var _iteratorError2 = undefined;
+ var _iteratorNormalCompletion3 = true;
+ var _didIteratorError3 = false;
+ var _iteratorError3 = undefined;
try {
- for (var _iterator2 = childs[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
- var child = _step2.value;
+ for (var _iterator3 = childs[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
+ var child = _step3.value;
if ((0, _utils.type)(child) === 'File') {
Object.defineProperty(child, 'path', {
@@ -41167,16 +41534,16 @@ var copy = _asyncToGenerator(function* (file, newPath) {
yield copy(child, newPath + '/' + child.name);
}
} catch (err) {
- _didIteratorError2 = true;
- _iteratorError2 = err;
+ _didIteratorError3 = true;
+ _iteratorError3 = err;
} finally {
try {
- if (!_iteratorNormalCompletion2 && _iterator2['return']) {
- _iterator2['return']();
+ if (!_iteratorNormalCompletion3 && _iterator3['return']) {
+ _iterator3['return']();
}
} finally {
- if (_didIteratorError2) {
- throw _iteratorError2;
+ if (_didIteratorError3) {
+ throw _iteratorError3;
}
}
}
@@ -41218,7 +41585,385 @@ function sdcard() {
var ROOT_CACHE = undefined;
-},{"actions/files-view":264,"store":"store","utils":"utils"}],273:[function(require,module,exports){
+},{"actions/files-view":265,"store":"store","utils":"utils"}],275:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+
+var connect = _asyncToGenerator(function* () {
+ var properties = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
+ var host = properties.host;
+ var port = properties.port;
+ var username = properties.username;
+ var password = properties.password;
+
+ var url = encodeURI(host);
+ socket = navigator.mozTCPSocket.open(url, port);
+
+ socket.ondata = function (e) {
+ console.log('<', e.data);
+ connection.emit('data', e.data);
+ };
+
+ socket.onerror = function (e) {
+ connection.emit('error', e.data);
+ };
+
+ socket.onclose = function (e) {
+ connection.emit('close', e.data);
+ };
+
+ return new Promise(function (resolve, reject) {
+ socket.onopen = function () {
+ send('USER ' + username);
+ send('PASS ' + password);
+ resolve(socket);
+
+ window.ftpMode = true;
+ };
+
+ socket.onerror = reject;
+ socket.onclose = reject;
+ });
+});
+
+exports.connect = connect;
+
+var disconnect = _asyncToGenerator(function* () {
+ socket.close();
+ window.ftpMode = false;
+});
+
+exports.disconnect = disconnect;
+exports.listen = listen;
+exports.send = send;
+
+var cwd = _asyncToGenerator(function* () {
+ var dir = arguments.length <= 0 || arguments[0] === undefined ? '' : arguments[0];
+
+ send('CWD', dir);
+ wd = dir;
+});
+
+exports.cwd = cwd;
+
+var pwd = _asyncToGenerator(function* () {
+ return new Promise(function (resolve, reject) {
+ connection.on('data', function listener(data) {
+ if (data.indexOf('current directory') === -1) return;
+ var dir = data.match(PWD_REGEX)[1];
+ resolve((0, _utils.normalize)(dir));
+
+ connection.removeListener('data', listener);
+ });
+ send('PWD');
+ });
+});
+
+exports.pwd = pwd;
+
+var pasv = _asyncToGenerator(function* () {
+ return new Promise(function (resolve, reject) {
+ connection.on('data', function listener(data) {
+ if (data.indexOf('Passive') === -1) return;
+
+ // format: |||port|
+ var port = parseInt(data.match(/\|{3}(\d+)\|/)[1]);
+
+ connection.removeListener('data', listener);
+
+ return resolve(port);
+ });
+
+ send('EPSV');
+ });
+});
+
+exports.pasv = pasv;
+
+var list = _asyncToGenerator(function* () {
+ var dir = arguments.length <= 0 || arguments[0] === undefined ? '' : arguments[0];
+
+ return pasv().then(function (port) {
+ return secondary({ host: socket.host, port: port }).then(function (_ref) {
+ var data = _ref.data;
+
+ send('LIST', dir);
+
+ return data.then(function (items) {
+ return items.split('\n').map(function (item) {
+ if (item.indexOf('total') > -1 || !item) return;
+
+ var match = item.match(LIST_EXTRACTOR);
+
+ return {
+ path: (0, _utils.normalize)(wd) + '/',
+ type: match[1][0] === 'd' ? 'Directory' : 'File',
+ permissions: match[1].slice(1),
+ links: +match[2],
+ owner: match[3],
+ group: match[4],
+ size: +match[5],
+ lastModification: {
+ month: match[6],
+ day: match[7],
+ time: match[8]
+ },
+ name: match[9]
+ };
+ }).filter(function (item) {
+ return item;
+ });
+ }, _utils.reportError);
+ });
+ });
+});
+
+exports.list = list;
+
+var namelist = _asyncToGenerator(function* () {
+ var dir = arguments.length <= 0 || arguments[0] === undefined ? '' : arguments[0];
+
+ return pasv().then(function (port) {
+ return secondary({ host: socket.host, port: port }).then(function (_ref2) {
+ var data = _ref2.data;
+
+ send('NLST', dir);
+
+ return data.then(function (names) {
+ return names.split('\n');
+ }, _utils.reportError);
+ });
+ });
+});
+
+exports.namelist = namelist;
+
+var secondary = _asyncToGenerator(function* () {
+ var properties = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
+ var host = properties.host;
+ var port = properties.port;
+
+ var url = encodeURI(host);
+
+ return new Promise(function (resolve, reject) {
+ var alt = navigator.mozTCPSocket.open(url, port);
+
+ alt.onopen = function () {
+ var data = new Promise(function (resolve, reject) {
+ alt.ondata = function (e) {
+ resolve(e.data);
+ };
+ alt.onerror = function (e) {
+ reject(e.data);
+ };
+ alt.onclose = function (e) {
+ resolve('');
+ };
+ });
+ resolve({ data: data });
+ };
+ });
+});
+
+exports.secondary = secondary;
+
+var secondaryWrite = _asyncToGenerator(function* (properties, content) {
+ if (properties === undefined) properties = {};
+ var host = properties.host;
+ var port = properties.port;
+
+ var url = encodeURI(host);
+
+ return new Promise(function (resolve, reject) {
+ var alt = navigator.mozTCPSocket.open(url, port);
+
+ alt.onopen = function () {
+ alt.send(content);
+
+ setImmediate(function () {
+ alt.close();
+ });
+ };
+
+ alt.onclose = function () {
+ resolve();
+ };
+ });
+});
+
+exports.secondaryWrite = secondaryWrite;
+
+var children = _asyncToGenerator(function* (dir, gatherInfo) {
+ if (dir === undefined) dir = '';
+
+ dir = (0, _utils.normalize)(dir);
+ if (FTP_CACHE[dir]) return FTP_CACHE[dir];
+
+ var childs = gatherInfo ? (yield list(dir)) : (yield namelist());
+
+ FTP_CACHE[dir] = childs;
+
+ return childs;
+});
+
+exports.children = children;
+
+var getFile = _asyncToGenerator(function* () {
+ var path = arguments.length <= 0 || arguments[0] === undefined ? '' : arguments[0];
+
+ path = (0, _utils.normalize)(path);
+
+ var ls = yield list(path);
+
+ return ls[0];
+});
+
+exports.getFile = getFile;
+
+var isDirectory = _asyncToGenerator(function* () {
+ var path = arguments.length <= 0 || arguments[0] === undefined ? '' : arguments[0];
+
+ return (yield getFile(path)).type === 'Directory';
+});
+
+exports.isDirectory = isDirectory;
+
+var readFile = _asyncToGenerator(function* () {
+ var path = arguments.length <= 0 || arguments[0] === undefined ? '' : arguments[0];
+
+ path = (0, _utils.normalize)(path);
+
+ return pasv().then(function (port) {
+ return secondary({ host: socket.host, port: port }).then(function (_ref3) {
+ var data = _ref3.data;
+
+ send('RETR', path);
+
+ return data;
+ });
+ })['catch'](_utils.reportError);
+});
+
+exports.readFile = readFile;
+
+var writeFile = _asyncToGenerator(function* (path, content) {
+ if (path === undefined) path = '';
+
+ path = (0, _utils.normalize)(path);
+
+ return pasv().then(function (port) {
+ send('STOR', path);
+ return secondaryWrite({ host: socket.host, port: port }, content).then(function () {});
+ })['catch'](_utils.reportError);
+});
+
+exports.writeFile = writeFile;
+
+var createFile = _asyncToGenerator(function* () {
+ var path = arguments.length <= 0 || arguments[0] === undefined ? '' : arguments[0];
+
+ return writeFile(path, '');
+});
+
+exports.createFile = createFile;
+
+var createDirectory = _asyncToGenerator(function* () {
+ var path = arguments.length <= 0 || arguments[0] === undefined ? '' : arguments[0];
+
+ path = (0, _utils.normalize)(path);
+
+ send('MKD', path);
+});
+
+exports.createDirectory = createDirectory;
+
+var remove = _asyncToGenerator(function* () {
+ var path = arguments.length <= 0 || arguments[0] === undefined ? '' : arguments[0];
+
+ path = (0, _utils.normalize)(path);
+
+ send('RMD', path);
+ send('DELE', path);
+});
+
+exports.remove = remove;
+
+var move = _asyncToGenerator(function* () {
+ var path = arguments.length <= 0 || arguments[0] === undefined ? '' : arguments[0];
+ var newPath = arguments.length <= 1 || arguments[1] === undefined ? '' : arguments[1];
+
+ path = (0, _utils.normalize)(path);
+ newPath = (0, _utils.normalize)(newPath);
+
+ send('RNFR', path);
+ send('RNTO', newPath);
+});
+
+exports.move = move;
+
+var copy = _asyncToGenerator(function* () {
+ var path = arguments.length <= 0 || arguments[0] === undefined ? '' : arguments[0];
+ var newPath = arguments.length <= 1 || arguments[1] === undefined ? '' : arguments[1];
+
+ path = (0, _utils.normalize)(path);
+ newPath = (0, _utils.normalize)(newPath);
+
+ var content = yield readFile(path);
+
+ return writeFile(newPath, content);
+});
+
+exports.copy = copy;
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { var callNext = step.bind(null, 'next'); var callThrow = step.bind(null, 'throw'); function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(callNext, callThrow); } } callNext(); }); }; }
+
+var _actionsFilesView = require('actions/files-view');
+
+var _store = require('store');
+
+var _events = require('events');
+
+var _events2 = _interopRequireDefault(_events);
+
+var _utils = require('utils');
+
+var FTP_CACHE = {};
+exports.FTP_CACHE = FTP_CACHE;
+var socket = undefined;
+var connection = new _events2['default']();
+connection.setMaxListeners(99);
+var wd = '';
+var currentRequest = undefined;
+var queue = 0;
+
+function listen(ev, fn) {
+ socket.listen(ev, fn);
+}
+
+function send(command) {
+ for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+ args[_key - 1] = arguments[_key];
+ }
+
+ args = args.filter(function (arg) {
+ return arg;
+ });
+ var cmd = command + (args.length ? ' ' : '') + args.join(' ');
+
+ console.log('>', cmd);
+ socket.send(cmd + '\n');
+}
+
+var PWD_REGEX = /257 "(.*)"/;
+
+var LIST_EXTRACTOR = /(.*?)\s+(\d+)\s+(\w+)\s+(\w+)\s+(\w+)\s+(\w+)\s+(\d+)\s+(\d+:?\d+)+\s+(.*)/;
+
+},{"actions/files-view":265,"events":5,"store":"store","utils":"utils"}],276:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -41350,7 +42095,7 @@ function props(state) {
}
module.exports = exports['default'];
-},{"actions/changedir":260,"react":250,"react-redux":90,"store":"store"}],274:[function(require,module,exports){
+},{"actions/changedir":261,"react":251,"react-redux":91,"store":"store"}],277:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -41453,7 +42198,7 @@ var Dialog = (function (_Component) {
exports['default'] = Dialog;
module.exports = exports['default'];
-},{"react":250,"utils":"utils"}],275:[function(require,module,exports){
+},{"react":251,"utils":"utils"}],278:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -41547,7 +42292,7 @@ var Directory = (function (_Component) {
exports['default'] = Directory;
module.exports = exports['default'];
-},{"./mixins/entry":280,"actions/changedir":260,"react":250,"store":"store"}],276:[function(require,module,exports){
+},{"./mixins/entry":283,"actions/changedir":261,"react":251,"store":"store"}],279:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -41558,17 +42303,8 @@ var _createClass = (function () { function defineProperties(target, props) { for
var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
-var getFiles = _asyncToGenerator(function* (dir) {
- var storage = navigator.getDeviceStorage('sdcard');
- var root = yield storage.get(dir);
-
- return yield root.getFilesAndDirectories();
-});
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { var callNext = step.bind(null, 'next'); var callThrow = step.bind(null, 'throw'); function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(callNext, callThrow); } } callNext(); }); }; }
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
@@ -41624,7 +42360,7 @@ var FileList = (function (_Component) {
var els = files.map(function (file, index) {
var selected = activeFile.indexOf(file) > -1;
- if ((0, _utils.type)(file) === 'File') {
+ if (file.type === 'File') {
return _react2['default'].createElement(_file2['default'], { selectView: selectView, selected: selected, key: index, index: index, name: file.name, size: file.size, type: file.type });
} else {
return _react2['default'].createElement(_directory2['default'], { selectView: selectView, selected: selected, key: index, index: index, name: file.name, children: file.children, type: file.type });
@@ -41671,10 +42407,9 @@ function props(state) {
view: state.get('settings').view || 'list'
};
}
-
module.exports = exports['default'];
-},{"./directory":275,"./file":277,"actions/changedir":260,"hammerjs":6,"react":250,"react-redux":90,"store":"store","utils":"utils"}],277:[function(require,module,exports){
+},{"./directory":278,"./file":280,"actions/changedir":261,"hammerjs":7,"react":251,"react-redux":91,"store":"store","utils":"utils"}],280:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -41773,7 +42508,7 @@ var File = (function (_Component) {
exports['default'] = File;
module.exports = exports['default'];
-},{"./mixins/entry":280,"react":250,"store":"store","utils":"utils"}],278:[function(require,module,exports){
+},{"./mixins/entry":283,"react":251,"store":"store","utils":"utils"}],281:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -41864,7 +42599,7 @@ function props(state) {
}
module.exports = exports['default'];
-},{"actions/dialog":262,"actions/files-view":264,"actions/navigation":266,"react":250,"react-redux":90,"store":"store"}],279:[function(require,module,exports){
+},{"actions/dialog":263,"actions/files-view":265,"actions/navigation":267,"react":251,"react-redux":91,"store":"store"}],282:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -41940,7 +42675,7 @@ var Menu = (function (_Component) {
exports['default'] = Menu;
-},{"react":250}],280:[function(require,module,exports){
+},{"react":251}],283:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -42007,7 +42742,7 @@ exports['default'] = {
};
module.exports = exports['default'];
-},{"actions/file":263,"actions/menu":265,"components/menu":279,"react":250}],281:[function(require,module,exports){
+},{"actions/file":264,"actions/menu":266,"components/menu":282,"react":251}],284:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -42302,7 +43037,7 @@ function props(store) {
}
module.exports = exports['default'];
-},{"actions/navigation":266,"actions/settings":268,"lodash/string/camelCase":83,"react":250,"react-redux":90,"store":"store"}],282:[function(require,module,exports){
+},{"actions/navigation":267,"actions/settings":269,"lodash/string/camelCase":84,"react":251,"react-redux":91,"store":"store"}],285:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -42498,7 +43233,7 @@ exports['default'] = Root;
;
module.exports = exports['default'];
-},{"actions/changedir":260,"actions/dialog":262,"actions/menu":265,"components/breadcrumb":273,"components/dialog":274,"components/file-list":276,"components/header":278,"components/menu":279,"components/navigation":281,"components/spinner":283,"components/toolbar":284,"react":250,"react-redux":90,"store":"store","tour":"tour"}],283:[function(require,module,exports){
+},{"actions/changedir":261,"actions/dialog":263,"actions/menu":266,"components/breadcrumb":276,"components/dialog":277,"components/file-list":279,"components/header":281,"components/menu":282,"components/navigation":284,"components/spinner":286,"components/toolbar":287,"react":251,"react-redux":91,"store":"store","tour":"tour"}],286:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -42564,7 +43299,7 @@ function props(state) {
}
module.exports = exports['default'];
-},{"react":250,"react-redux":90}],284:[function(require,module,exports){
+},{"react":251,"react-redux":91}],287:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -42681,7 +43416,7 @@ var Toolbar = (function (_Component) {
exports['default'] = Toolbar;
module.exports = exports['default'];
-},{"./menu":279,"actions/dialog":262,"actions/file":263,"actions/files-view":264,"actions/menu":265,"actions/settings":268,"react":250,"store":"store"}],285:[function(require,module,exports){
+},{"./menu":282,"actions/dialog":263,"actions/file":264,"actions/files-view":265,"actions/menu":266,"actions/settings":269,"react":251,"store":"store"}],288:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -42889,15 +43624,21 @@ exports['default'] = {
};
module.exports = exports['default'];
-},{"actions/compress":261,"actions/dialog":262,"actions/file":263,"actions/files-view":264,"react":250,"store":"store"}],286:[function(require,module,exports){
+},{"actions/compress":262,"actions/dialog":263,"actions/file":264,"actions/files-view":265,"react":251,"store":"store"}],289:[function(require,module,exports){
'use strict';
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
+var _apiFtp = require('api/ftp');
+
+var ftp = _interopRequireWildcard(_apiFtp);
+
var _componentsRoot = require('components/root');
var _componentsRoot2 = _interopRequireDefault(_componentsRoot);
@@ -42910,6 +43651,16 @@ var _reactRedux = require('react-redux');
require('./activities');
+ftp.connect({
+ host: '192.168.1.76',
+ port: 21,
+ username: 'mahdi',
+ password: 'heater0!'
+}).then(function (socket) {
+ window.socket = socket;
+ window.ftp = ftp;
+}, console.error);
+
var wrapper = document.getElementById('wrapper');
_react2['default'].render(_react2['default'].createElement(
_reactRedux.Provider,
@@ -42919,7 +43670,7 @@ _react2['default'].render(_react2['default'].createElement(
}
), wrapper);
-},{"./activities":271,"components/root":282,"react":250,"react-redux":90,"store":"store"}],287:[function(require,module,exports){
+},{"./activities":272,"api/ftp":275,"components/root":285,"react":251,"react-redux":91,"store":"store"}],290:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -43103,7 +43854,7 @@ exports['default'] = {
};
module.exports = exports['default'];
-},{"actions/compress":261,"actions/dialog":262,"actions/file":263,"actions/files-view":264,"actions/menu":265,"store":"store"}],288:[function(require,module,exports){
+},{"actions/compress":262,"actions/dialog":263,"actions/file":264,"actions/files-view":265,"actions/menu":266,"store":"store"}],291:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -43124,7 +43875,7 @@ exports['default'] = function (state, action) {
module.exports = exports['default'];
-},{"actions/types":270}],289:[function(require,module,exports){
+},{"actions/types":271}],292:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -43214,7 +43965,7 @@ exports['default'] = function (state, action) {
module.exports = exports['default'];
-},{"./active-file":288,"./cwd":290,"./dialog":291,"./files":292,"./lwd":293,"./menu":294,"./navigation":295,"./pick":296,"./search":297,"./select-view":298,"./settings":299,"./spinner":300,"immutable":7}],290:[function(require,module,exports){
+},{"./active-file":291,"./cwd":293,"./dialog":294,"./files":295,"./lwd":296,"./menu":297,"./navigation":298,"./pick":299,"./search":300,"./select-view":301,"./settings":302,"./spinner":303,"immutable":8}],293:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -43225,7 +43976,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'd
var _actionsTypes = require('actions/types');
-var _apiFiles = require('api/files');
+var _apiAuto = require('api/auto');
var _store = require('store');
@@ -43245,7 +43996,8 @@ exports['default'] = function (state, action) {
}
if (action.type === _actionsTypes.REFRESH) {
- _apiFiles.CACHE[state] = null;
+ _apiAuto.CACHE[state] = null;
+ _apiAuto.FTP_CACHE[state] = null;
}
if (action.type === _actionsTypes.REFRESH || action.type === _actionsTypes.SETTINGS) {
@@ -43259,13 +44011,13 @@ exports['default'] = function (state, action) {
function changeTo(dir) {
dir = (0, _utils.normalize)(dir);
- (0, _apiFiles.children)(dir, true).then(function (files) {
+ (0, _apiAuto.children)(dir, true).then(function (files) {
_store2['default'].dispatch((0, _actionsFilesView.listFiles)(files));
}, _utils.reportError);
}
module.exports = exports['default'];
-},{"actions/files-view":264,"actions/types":270,"api/files":272,"store":"store","utils":"utils"}],291:[function(require,module,exports){
+},{"actions/files-view":265,"actions/types":271,"api/auto":273,"store":"store","utils":"utils"}],294:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -43307,13 +44059,15 @@ exports['default'] = function (state, action, id) {
module.exports = exports['default'];
-},{"actions/types":270,"immutable":7,"lodash/object/omit":82}],292:[function(require,module,exports){
+},{"actions/types":271,"immutable":8,"lodash/object/omit":83}],295:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
value: true
});
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var _actionsTypes = require('actions/types');
@@ -43324,7 +44078,9 @@ var _jszip2 = _interopRequireDefault(_jszip);
var _actionsFilesView = require('actions/files-view');
-var _apiFiles = require('api/files');
+var _apiAuto = require('api/auto');
+
+var auto = _interopRequireWildcard(_apiAuto);
var _actionsDialog = require('actions/dialog');
@@ -43374,7 +44130,7 @@ exports['default'] = function (state, action) {
}
if (action.type === _actionsTypes.CREATE_FILE) {
- var fn = action.directory ? _apiFiles.createDirectory : _apiFiles.createFile;
+ var fn = action.directory ? auto.createDirectory : auto.createFile;
fn(action.path).then(boundRefresh, _utils.reportError);
return state;
@@ -43383,7 +44139,7 @@ exports['default'] = function (state, action) {
if (action.type === _actionsTypes.RENAME_FILE) {
var all = Promise.all(action.file.map(function (file) {
var cwd = _store2['default'].getState().get('cwd');
- return (0, _apiFiles.move)(file, cwd + '/' + action.name);
+ return auto.move(file, cwd + '/' + action.name);
}));
all.then(boundRefresh, _utils.reportError);
@@ -43392,7 +44148,7 @@ exports['default'] = function (state, action) {
if (action.type === _actionsTypes.MOVE_FILE) {
var all = Promise.all(action.file.map(function (file) {
- return (0, _apiFiles.move)(file, action.newPath + '/' + file.name);
+ return auto.move(file, action.newPath + '/' + file.name);
}));
all.then(boundRefresh, _utils.reportError);
@@ -43401,7 +44157,7 @@ exports['default'] = function (state, action) {
if (action.type === _actionsTypes.COPY_FILE) {
var all = Promise.all(action.file.map(function (file) {
- return (0, _apiFiles.copy)(file, action.newPath + '/' + file.name);
+ return auto.copy(file, action.newPath + '/' + file.name);
}));
all.then(boundRefresh, _utils.reportError);
@@ -43411,7 +44167,7 @@ exports['default'] = function (state, action) {
if (action.type === _actionsTypes.DELETE_FILE) {
var all = Promise.all(action.file.map(function (file) {
var path = (0, _utils.normalize)((file.path || '') + file.name);
- return (0, _apiFiles.remove)(path, true);
+ return auto.remove(path, true);
}));
all.then(boundRefresh, _utils.reportError);
@@ -43431,14 +44187,14 @@ exports['default'] = function (state, action) {
if (!(file instanceof Blob)) {
var folder = archive.folder(file.name);
- return (0, _apiFiles.children)(path).then(function (files) {
+ return auto.children(path).then(function (files) {
return Promise.all(files.map(function (child) {
return addFile(child);
}));
});
}
- return (0, _apiFiles.readFile)(path).then(function (content) {
+ return auto.readFile(path).then(function (content) {
archive.file(archivePath, content);
});
}));
@@ -43450,7 +44206,7 @@ exports['default'] = function (state, action) {
var cwd = _store2['default'].getState().get('cwd');
var path = (0, _utils.normalize)(cwd + '/' + action.name);
console.log(path);
- return (0, _apiFiles.writeFile)(path, blob);
+ return auto.writeFile(path, blob);
}).then(boundRefresh)['catch'](_utils.reportError);
return {
@@ -43464,7 +44220,7 @@ exports['default'] = function (state, action) {
if (action.type === _actionsTypes.DECOMPRESS) {
var file = action.file[0];
var path = (0, _utils.normalize)((file.path || '') + file.name);
- (0, _apiFiles.readFile)(path).then(function (content) {
+ auto.readFile(path).then(function (content) {
var archive = new _jszip2['default'](content);
var files = Object.keys(archive.files);
@@ -43475,7 +44231,7 @@ exports['default'] = function (state, action) {
var cwd = _store2['default'].getState().get('cwd');
var filePath = (0, _utils.normalize)(cwd + '/' + name);
- return (0, _apiFiles.writeFile)(filePath, blob);
+ return auto.writeFile(filePath, blob);
}));
all.then(boundRefresh, _utils.reportError);
@@ -43485,12 +44241,9 @@ exports['default'] = function (state, action) {
return state;
};
-function mov(file, newPath) {
- return;
-}
module.exports = exports['default'];
-},{"actions/dialog":262,"actions/files-view":264,"actions/types":270,"api/files":272,"jszip":16,"store":"store","utils":"utils"}],293:[function(require,module,exports){
+},{"actions/dialog":263,"actions/files-view":265,"actions/types":271,"api/auto":273,"jszip":17,"store":"store","utils":"utils"}],296:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -43510,7 +44263,7 @@ exports['default'] = function (state, action) {
module.exports = exports['default'];
-},{"actions/types":270}],294:[function(require,module,exports){
+},{"actions/types":271}],297:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -43552,7 +44305,7 @@ exports['default'] = function (state, action, id) {
module.exports = exports['default'];
-},{"actions/types":270,"immutable":7,"lodash/object/omit":82}],295:[function(require,module,exports){
+},{"actions/types":271,"immutable":8,"lodash/object/omit":83}],298:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -43573,7 +44326,7 @@ exports['default'] = function (state, action) {
module.exports = exports['default'];
-},{"actions/types":270}],296:[function(require,module,exports){
+},{"actions/types":271}],299:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -43594,7 +44347,7 @@ exports['default'] = function (state, action) {
module.exports = exports['default'];
-},{"actions/types":270}],297:[function(require,module,exports){
+},{"actions/types":271}],300:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -43613,7 +44366,7 @@ var _utils = require('utils');
var _actionsFilesView = require('actions/files-view');
-var _apiFiles = require('api/files');
+var _apiAuto = require('api/auto');
exports['default'] = function (state, action) {
if (state === undefined) state = '';
@@ -43634,7 +44387,7 @@ exports['default'] = function (state, action) {
function search(keywords) {
if (!keywords) {
var cwd = _store2['default'].getState().get('cwd');
- (0, _apiFiles.children)(cwd, true).then(function (files) {
+ (0, _apiAuto.children)(cwd, true).then(function (files) {
_store2['default'].dispatch((0, _actionsFilesView.listFiles)(files));
}, _utils.reportError);
return '';
@@ -43646,7 +44399,7 @@ function search(keywords) {
// We don't want to show all the currently visible files from the
// first iteration
var once = true;
- (0, _apiFiles.children)('', true).then(function showResults(files) {
+ (0, _apiAuto.children)('', true).then(function showResults(files) {
if (!_store2['default'].getState().get('search')) return;
var current = once ? [] : _store2['default'].getState().get('files');
@@ -43655,7 +44408,7 @@ function search(keywords) {
var filtered = files.filter(function (file) {
if ((0, _utils.type)(file) === 'Directory') {
var path = (0, _utils.normalize)(file.path + file.name);
- (0, _apiFiles.children)(path, true).then(showResults, _utils.reportError);
+ (0, _apiAuto.children)(path, true).then(showResults, _utils.reportError);
}
return keys.some(function (key) {
return file.name.toLowerCase().indexOf(key) > -1;
@@ -43668,7 +44421,7 @@ function search(keywords) {
}
module.exports = exports['default'];
-},{"actions/files-view":264,"actions/types":270,"api/files":272,"store":"store","utils":"utils"}],298:[function(require,module,exports){
+},{"actions/files-view":265,"actions/types":271,"api/auto":273,"store":"store","utils":"utils"}],301:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -43689,7 +44442,7 @@ exports['default'] = function (state, action) {
module.exports = exports['default'];
-},{"actions/types":270}],299:[function(require,module,exports){
+},{"actions/types":271}],302:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -43726,7 +44479,7 @@ exports['default'] = function (state, action) {
module.exports = exports['default'];
-},{"actions/types":270,"lodash/object/omit":82}],300:[function(require,module,exports){
+},{"actions/types":271,"lodash/object/omit":83}],303:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -43766,7 +44519,7 @@ exports['default'] = function (state, action) {
module.exports = exports['default'];
-},{"actions/types":270}],"store":[function(require,module,exports){
+},{"actions/types":271}],"store":[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -43815,7 +44568,7 @@ exports['default'] = store;
store.dispatch((0, _actionsChangedir2['default'])(DEFAULT.get('dir')));
-},{"./dialogs":285,"./menus":287,"actions/changedir":260,"immutable":7,"reducers/all":289,"redux":252}],"tour":[function(require,module,exports){
+},{"./dialogs":288,"./menus":290,"actions/changedir":261,"immutable":8,"reducers/all":292,"redux":253}],"tour":[function(require,module,exports){
'use strict';
Object.defineProperty(exports, '__esModule', {
@@ -44051,4 +44804,4 @@ function humanSize(size) {
}
}
-},{"actions/dialog":262,"store":"store"}]},{},[260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,"store","tour","utils"]);
+},{"actions/dialog":263,"store":"store"}]},{},[261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,"store","tour","utils"]);
diff --git a/build/manifest.webapp b/build/manifest.webapp
index 88e90d1..6d90cdb 100644
--- a/build/manifest.webapp
+++ b/build/manifest.webapp
@@ -30,6 +30,9 @@
"device-storage:music": {
"access": "readwrite",
"description": "We need access to your files in order to give you the functionality of listing, reading, opening and writing files in your storage"
+ },
+ "tcp-socket": {
+ "description": "FTP Browser: Used to connect to FTP servers"
}
},
"installs_allowed_from": [
diff --git a/src/js/api/auto.js b/src/js/api/auto.js
new file mode 100644
index 0000000..8a268ae
--- /dev/null
+++ b/src/js/api/auto.js
@@ -0,0 +1,14 @@
+import * as ftp from './ftp';
+import * as files from './files';
+
+['getFile', 'children', 'isDirectory', 'readFile', 'writeFile',
+ 'createFile', 'createDirectory', 'remove', 'move', 'copy'].forEach(method => {
+ exports[method] = (...args) => {
+ return window.ftpMode ? ftp[method](...args) : files[method](...args);
+ }
+ });
+
+let CACHE = files.CACHE;
+let FTP_CACHE = ftp.FTP_CACHE;
+
+export { CACHE, FTP_CACHE };
diff --git a/src/js/api/files.js b/src/js/api/files.js
index 7a931eb..1446305 100644
--- a/src/js/api/files.js
+++ b/src/js/api/files.js
@@ -34,7 +34,14 @@ export async function getFile(dir = '/') {
if (dir === '/' || !dir) return parent;
- return await parent.get(normalize(dir));
+ let file = await parent.get(normalize(dir));
+
+ Object.defineProperty(file, 'type', {
+ value: type(file),
+ enumerable: true
+ });
+
+ return file;
}
export async function children(dir, gatherInfo) {
@@ -46,9 +53,16 @@ export async function children(dir, gatherInfo) {
}
let childs = await parent.getFilesAndDirectories();
+ for (let child of childs) {
+ Object.defineProperty(child, 'type', {
+ value: type(child),
+ enumerable: true
+ });
+ }
+
if (gatherInfo && !window.needsShim) {
for (let child of childs) {
- if (type(child) === 'Directory') {
+ if (child.type === 'Directory') {
let subchildren;
try {
subchildren = await shimDirectory(child).getFilesAndDirectories();
diff --git a/src/js/api/ftp.js b/src/js/api/ftp.js
new file mode 100644
index 0000000..453e7d6
--- /dev/null
+++ b/src/js/api/ftp.js
@@ -0,0 +1,267 @@
+import { refresh } from 'actions/files-view';
+import { bind } from 'store';
+import Eventconnection from 'events';
+import { humanSize, reportError, normalize, type } from 'utils';
+
+export let FTP_CACHE = {};
+let socket;
+let connection = new Eventconnection();
+connection.setMaxListeners(99);
+let wd = '';
+let currentRequest;
+let queue = 0;
+
+export async function connect(properties = {}) {
+ let { host, port, username, password } = properties;
+
+ let url = encodeURI(host);
+ socket = navigator.mozTCPSocket.open(url, port);
+
+ socket.ondata = e => {
+ console.log('<', e.data);
+ connection.emit('data', e.data);
+ }
+
+ socket.onerror = e => {
+ connection.emit('error', e.data);
+ }
+
+ socket.onclose = e => {
+ connection.emit('close', e.data);
+ }
+
+ return new Promise((resolve, reject) => {
+ socket.onopen = () => {
+ send(`USER ${username}`);
+ send(`PASS ${password}`);
+ resolve(socket);
+
+ window.ftpMode = true;
+ }
+
+ socket.onerror = reject;
+ socket.onclose = reject;
+ });
+}
+
+export async function disconnect() {
+ socket.close();
+ window.ftpMode = false;
+}
+
+export function listen(ev, fn) {
+ socket.listen(ev, fn);
+}
+
+export function send(command, ...args) {
+ args = args.filter(arg => arg);
+ let cmd = command + (args.length ? ' ' : '') + args.join(' ');
+
+ console.log('>', cmd);
+ socket.send(cmd + '\n');
+}
+
+export async function cwd(dir = '') {
+ send('CWD', dir);
+ wd = dir;
+}
+
+const PWD_REGEX = /257 "(.*)"/;
+export async function pwd() {
+ return new Promise((resolve, reject) => {
+ connection.on('data', function listener(data) {
+ if (data.indexOf('current directory') === -1) return;
+ let dir = data.match(PWD_REGEX)[1];
+ resolve(normalize(dir));
+
+ connection.removeListener('data', listener);
+ });
+ send('PWD');
+ });
+}
+
+export async function pasv() {
+ return new Promise((resolve, reject) => {
+ connection.on('data', function listener(data) {
+ if (data.indexOf('Passive') === -1) return;
+
+ // format: |||port|
+ let port = parseInt(data.match(/\|{3}(\d+)\|/)[1]);
+
+ connection.removeListener('data', listener);
+
+ return resolve(port);
+ });
+
+ send('EPSV');
+ });
+}
+
+const LIST_EXTRACTOR = /(.*?)\s+(\d+)\s+(\w+)\s+(\w+)\s+(\w+)\s+(\w+)\s+(\d+)\s+(\d+:?\d+)+\s+(.*)/;
+export async function list(dir = '') {
+ return pasv().then(port => {
+ return secondary({ host: socket.host, port }).then(({data}) => {
+ send('LIST', dir);
+
+ return data.then(items => {
+ return items.split('\n').map(item => {
+ if (item.indexOf('total') > -1 || !item) return;
+
+ let match = item.match(LIST_EXTRACTOR);
+
+ return {
+ path: normalize(wd) + '/',
+ type: match[1][0] === 'd' ? 'Directory' : 'File',
+ permissions: match[1].slice(1),
+ links: +match[2],
+ owner: match[3],
+ group: match[4],
+ size: +match[5],
+ lastModification: {
+ month: match[6],
+ day: match[7],
+ time: match[8]
+ },
+ name: match[9]
+ }
+ }).filter(item => item);
+ }, reportError)
+ });
+ });
+}
+
+export async function namelist(dir = '') {
+ return pasv().then(port => {
+ return secondary({ host: socket.host, port }).then(({data}) => {
+ send('NLST', dir);
+
+ return data.then(names => names.split('\n'), reportError);
+ });
+ })
+}
+
+export async function secondary(properties = {}) {
+ let { host, port } = properties;
+
+ let url = encodeURI(host);
+
+ return new Promise((resolve, reject) => {
+ let alt = navigator.mozTCPSocket.open(url, port);
+
+ alt.onopen = () => {
+ let data = new Promise((resolve, reject) => {
+ alt.ondata = e => {
+ resolve(e.data);
+ }
+ alt.onerror = e => {
+ reject(e.data);
+ }
+ alt.onclose = e => {
+ resolve('');
+ }
+ });
+ resolve({data});
+ }
+ })
+}
+
+export async function secondaryWrite(properties = {}, content) {
+ let { host, port } = properties;
+
+ let url = encodeURI(host);
+
+ return new Promise((resolve, reject) => {
+ let alt = navigator.mozTCPSocket.open(url, port);
+
+ alt.onopen = () => {
+ alt.send(content);
+
+ setImmediate(() => {
+ alt.close();
+ })
+ }
+
+ alt.onclose = () => {
+ resolve();
+ }
+ })
+}
+
+export async function children(dir = '', gatherInfo) {
+ dir = normalize(dir);
+ if (FTP_CACHE[dir]) return FTP_CACHE[dir];
+
+ let childs = gatherInfo ? await list(dir) : await namelist();
+
+ FTP_CACHE[dir] = childs;
+
+ return childs;
+}
+
+export async function getFile(path = '') {
+ path = normalize(path);
+
+ let ls = await list(path);
+
+ return ls[0];
+}
+
+export async function isDirectory(path = '') {
+ return (await getFile(path)).type === 'Directory';
+}
+
+export async function readFile(path = '') {
+ path = normalize(path);
+
+ return pasv().then(port => {
+ return secondary({ host: socket.host, port }).then(({data}) => {
+ send('RETR', path);
+
+ return data;
+ });
+ }).catch(reportError);
+}
+
+export async function writeFile(path = '', content) {
+ path = normalize(path);
+
+ return pasv().then(port => {
+ send('STOR', path);
+ return secondaryWrite({ host: socket.host, port }, content).then(() => {
+ })
+ }).catch(reportError);
+}
+
+export async function createFile(path = '') {
+ return writeFile(path, '');
+}
+
+export async function createDirectory(path = '') {
+ path = normalize(path);
+
+ send('MKD', path);
+}
+
+export async function remove(path = '') {
+ path = normalize(path);
+
+ send('RMD', path);
+ send('DELE', path);
+}
+
+export async function move(path = '', newPath = '') {
+ path = normalize(path);
+ newPath = normalize(newPath);
+
+ send('RNFR', path);
+ send('RNTO', newPath);
+}
+
+export async function copy(path = '', newPath = '') {
+ path = normalize(path);
+ newPath = normalize(newPath);
+
+ let content = await readFile(path);
+
+ return writeFile(newPath, content);
+}
diff --git a/src/js/components/file-list.js b/src/js/components/file-list.js
index a4b6f31..c5600b3 100644
--- a/src/js/components/file-list.js
+++ b/src/js/components/file-list.js
@@ -20,7 +20,7 @@ export default class FileList extends Component {
let els = files.map((file, index) => {
let selected = activeFile.indexOf(file) > -1;
- if (type(file) === 'File') {
+ if (file.type === 'File') {
return ;
} else {
return
@@ -59,10 +59,3 @@ function props(state) {
view: state.get('settings').view || 'list'
}
}
-
-async function getFiles(dir) {
- let storage = navigator.getDeviceStorage('sdcard');
- let root = await storage.get(dir);
-
- return await root.getFilesAndDirectories();
-}
diff --git a/src/js/main.js b/src/js/main.js
index b9a422f..6ec8c23 100644
--- a/src/js/main.js
+++ b/src/js/main.js
@@ -1,8 +1,19 @@
import React from 'react';
+import * as ftp from 'api/ftp';
import Root from 'components/root';
import store from 'store';
import { Provider } from 'react-redux';
import './activities';
+ftp.connect({
+ host: '192.168.1.76',
+ port: 21,
+ username: 'mahdi',
+ password: 'heater0!'
+}).then(socket => {
+ window.socket = socket;
+ window.ftp = ftp;
+}, console.error)
+
let wrapper = document.getElementById('wrapper');
React.render({() => }, wrapper);
diff --git a/src/js/reducers/cwd.js b/src/js/reducers/cwd.js
index 4016eb7..a5cd3b8 100644
--- a/src/js/reducers/cwd.js
+++ b/src/js/reducers/cwd.js
@@ -1,5 +1,5 @@
import { CHANGE_DIRECTORY, REFRESH, SETTINGS } from 'actions/types';
-import { children, CACHE } from 'api/files';
+import { children, CACHE, FTP_CACHE } from 'api/auto';
import store from 'store';
import { reportError, normalize } from 'utils';
import { listFiles } from 'actions/files-view';
@@ -13,6 +13,7 @@ export default function(state = '', action) {
if (action.type === REFRESH) {
CACHE[state] = null;
+ FTP_CACHE[state] = null;
}
if (action.type === REFRESH || action.type === SETTINGS) {
diff --git a/src/js/reducers/files.js b/src/js/reducers/files.js
index 4405a7b..8384050 100644
--- a/src/js/reducers/files.js
+++ b/src/js/reducers/files.js
@@ -1,7 +1,7 @@
import { LIST_FILES, RENAME_FILE, DELETE_FILE, CREATE_FILE, MOVE_FILE, COPY_FILE, SEARCH, COMPRESS, DECOMPRESS } from 'actions/types';
import zip from 'jszip';
import { refresh } from 'actions/files-view';
-import { move, remove, sdcard, createFile, readFile, writeFile, createDirectory, getFile, copy, children } from 'api/files';
+import * as auto from 'api/auto';
import { show } from 'actions/dialog';
import store, { bind } from 'store';
import { reportError, type, normalize } from 'utils';
@@ -39,7 +39,7 @@ export default function(state = [], action) {
}
if (action.type === CREATE_FILE) {
- let fn = action.directory ? createDirectory : createFile;
+ let fn = action.directory ? auto.createDirectory : auto.createFile;
fn(action.path).then(boundRefresh, reportError);
return state;
@@ -48,7 +48,7 @@ export default function(state = [], action) {
if (action.type === RENAME_FILE) {
let all = Promise.all(action.file.map(file => {
let cwd = store.getState().get('cwd');
- return move(file, cwd + '/' + action.name);
+ return auto.move(file, cwd + '/' + action.name);
}));
all.then(boundRefresh, reportError);
@@ -57,7 +57,7 @@ export default function(state = [], action) {
if (action.type === MOVE_FILE) {
let all = Promise.all(action.file.map(file => {
- return move(file, action.newPath + '/' + file.name);
+ return auto.move(file, action.newPath + '/' + file.name);
}));
all.then(boundRefresh, reportError);
@@ -66,7 +66,7 @@ export default function(state = [], action) {
if (action.type === COPY_FILE) {
let all = Promise.all(action.file.map(file => {
- return copy(file, action.newPath + '/' + file.name);
+ return auto.copy(file, action.newPath + '/' + file.name);
}));
all.then(boundRefresh, reportError);
@@ -76,7 +76,7 @@ export default function(state = [], action) {
if (action.type === DELETE_FILE) {
let all = Promise.all(action.file.map(file => {
let path = normalize((file.path || '') + file.name);
- return remove(path, true);
+ return auto.remove(path, true);
}))
all.then(boundRefresh, reportError);
@@ -95,14 +95,14 @@ export default function(state = [], action) {
if (!(file instanceof Blob)) {
let folder = archive.folder(file.name);
- return children(path).then(files => {
+ return auto.children(path).then(files => {
return Promise.all(files.map(child => {
return addFile(child);
}));
});
}
- return readFile(path).then(content => {
+ return auto.readFile(path).then(content => {
archive.file(archivePath, content);
});
}))
@@ -114,7 +114,7 @@ export default function(state = [], action) {
let cwd = store.getState().get('cwd');
let path = normalize(cwd + '/' + action.name);
console.log(path);
- return writeFile(path, blob);
+ return auto.writeFile(path, blob);
}).then(boundRefresh).catch(reportError);
return state;
@@ -123,7 +123,7 @@ export default function(state = [], action) {
if (action.type === DECOMPRESS) {
let file = action.file[0];
let path = normalize((file.path || '') + file.name);
- readFile(path).then(content => {
+ auto.readFile(path).then(content => {
let archive = new zip(content);
let files = Object.keys(archive.files);
@@ -134,7 +134,7 @@ export default function(state = [], action) {
let cwd = store.getState().get('cwd');
let filePath = normalize(cwd + '/' + name);
- return writeFile(filePath, blob);
+ return auto.writeFile(filePath, blob);
}));
all.then(boundRefresh, reportError);
@@ -143,7 +143,3 @@ export default function(state = [], action) {
return state;
}
-
-function mov(file, newPath) {
- return
-}
diff --git a/src/js/reducers/search.js b/src/js/reducers/search.js
index 47c250f..acb33b2 100644
--- a/src/js/reducers/search.js
+++ b/src/js/reducers/search.js
@@ -2,7 +2,7 @@ import { SEARCH, CHANGE_DIRECTORY, REFRESH } from 'actions/types';
import store from 'store';
import { reportError } from 'utils';
import { listFiles } from 'actions/files-view';
-import { children } from 'api/files';
+import { children } from 'api/auto';
import { type, normalize } from 'utils';
export default function(state = '', action) {
diff --git a/src/manifest.webapp b/src/manifest.webapp
index 88e90d1..6d90cdb 100644
--- a/src/manifest.webapp
+++ b/src/manifest.webapp
@@ -30,6 +30,9 @@
"device-storage:music": {
"access": "readwrite",
"description": "We need access to your files in order to give you the functionality of listing, reading, opening and writing files in your storage"
+ },
+ "tcp-socket": {
+ "description": "FTP Browser: Used to connect to FTP servers"
}
},
"installs_allowed_from": [