elements don't support innerText even when does.
contentKey = 'textContent' in document.documentElement ? 'textContent' : 'innerText';
}
return contentKey;
}
module.exports = getTextContentAccessor;
/***/ },
/* 163 */
/***/ function(module, exports, __webpack_require__) {
/**
* Copyright 2013-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
* @providesModule instantiateReactComponent
*/
'use strict';
var _prodInvariant = __webpack_require__(4),
_assign = __webpack_require__(6);
var ReactCompositeComponent = __webpack_require__(353);
var ReactEmptyComponent = __webpack_require__(147);
var ReactHostComponent = __webpack_require__(149);
var invariant = __webpack_require__(3);
var warning = __webpack_require__(5);
// To avoid a cyclic dependency, we create the final class in this module
var ReactCompositeComponentWrapper = function (element) {
this.construct(element);
};
_assign(ReactCompositeComponentWrapper.prototype, ReactCompositeComponent.Mixin, {
_instantiateReactComponent: instantiateReactComponent
});
function getDeclarationErrorAddendum(owner) {
if (owner) {
var name = owner.getName();
if (name) {
return ' Check the render method of `' + name + '`.';
}
}
return '';
}
/**
* Check if the type reference is a known internal type. I.e. not a user
* provided composite type.
*
* @param {function} type
* @return {boolean} Returns true if this is a valid internal type.
*/
function isInternalComponentType(type) {
return typeof type === 'function' && typeof type.prototype !== 'undefined' && typeof type.prototype.mountComponent === 'function' && typeof type.prototype.receiveComponent === 'function';
}
var nextDebugID = 1;
/**
* Given a ReactNode, create an instance that will actually be mounted.
*
* @param {ReactNode} node
* @param {boolean} shouldHaveDebugID
* @return {object} A new instance of the element's constructor.
* @protected
*/
function instantiateReactComponent(node, shouldHaveDebugID) {
var instance;
if (node === null || node === false) {
instance = ReactEmptyComponent.create(instantiateReactComponent);
} else if (typeof node === 'object') {
var element = node;
!(element && (typeof element.type === 'function' || typeof element.type === 'string')) ? false ? invariant(false, 'Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s', element.type == null ? element.type : typeof element.type, getDeclarationErrorAddendum(element._owner)) : _prodInvariant('130', element.type == null ? element.type : typeof element.type, getDeclarationErrorAddendum(element._owner)) : void 0;
// Special case string values
if (typeof element.type === 'string') {
instance = ReactHostComponent.createInternalComponent(element);
} else if (isInternalComponentType(element.type)) {
// This is temporarily available for custom components that are not string
// representations. I.e. ART. Once those are updated to use the string
// representation, we can drop this code path.
instance = new element.type(element);
// We renamed this. Allow the old name for compat. :(
if (!instance.getHostNode) {
instance.getHostNode = instance.getNativeNode;
}
} else {
instance = new ReactCompositeComponentWrapper(element);
}
} else if (typeof node === 'string' || typeof node === 'number') {
instance = ReactHostComponent.createInstanceForText(node);
} else {
true ? false ? invariant(false, 'Encountered invalid React node of type %s', typeof node) : _prodInvariant('131', typeof node) : void 0;
}
if (false) {
process.env.NODE_ENV !== 'production' ? warning(typeof instance.mountComponent === 'function' && typeof instance.receiveComponent === 'function' && typeof instance.getHostNode === 'function' && typeof instance.unmountComponent === 'function', 'Only React Components can be mounted.') : void 0;
}
// These two fields are used by the DOM and ART diffing algorithms
// respectively. Instead of using expandos on components, we should be
// storing the state needed by the diffing algorithms elsewhere.
instance._mountIndex = 0;
instance._mountImage = null;
if (false) {
instance._debugID = shouldHaveDebugID ? nextDebugID++ : 0;
}
// Internal instances should fully constructed at this point, so they should
// not get any new fields added to them at this point.
if (false) {
if (Object.preventExtensions) {
Object.preventExtensions(instance);
}
}
return instance;
}
module.exports = instantiateReactComponent;
/***/ },
/* 164 */
/***/ function(module, exports) {
/**
* Copyright 2013-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
* @providesModule isTextInputElement
*
*/
'use strict';
/**
* @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary
*/
var supportedInputTypes = {
'color': true,
'date': true,
'datetime': true,
'datetime-local': true,
'email': true,
'month': true,
'number': true,
'password': true,
'range': true,
'search': true,
'tel': true,
'text': true,
'time': true,
'url': true,
'week': true
};
function isTextInputElement(elem) {
var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();
if (nodeName === 'input') {
return !!supportedInputTypes[elem.type];
}
if (nodeName === 'textarea') {
return true;
}
return false;
}
module.exports = isTextInputElement;
/***/ },
/* 165 */
/***/ function(module, exports, __webpack_require__) {
/**
* Copyright 2013-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
* @providesModule setTextContent
*/
'use strict';
var ExecutionEnvironment = __webpack_require__(11);
var escapeTextContentForBrowser = __webpack_require__(57);
var setInnerHTML = __webpack_require__(58);
/**
* Set the textContent property of a node, ensuring that whitespace is preserved
* even in IE8. innerText is a poor substitute for textContent and, among many
* issues, inserts
instead of the literal newline chars. innerHTML behaves
* as it should.
*
* @param {DOMElement} node
* @param {string} text
* @internal
*/
var setTextContent = function (node, text) {
if (text) {
var firstChild = node.firstChild;
if (firstChild && firstChild === node.lastChild && firstChild.nodeType === 3) {
firstChild.nodeValue = text;
return;
}
}
node.textContent = text;
};
if (ExecutionEnvironment.canUseDOM) {
if (!('textContent' in document.documentElement)) {
setTextContent = function (node, text) {
setInnerHTML(node, escapeTextContentForBrowser(text));
};
}
}
module.exports = setTextContent;
/***/ },
/* 166 */
/***/ function(module, exports) {
"use strict";
exports.__esModule = true;
exports["default"] = compose;
/**
* Composes single-argument functions from right to left. The rightmost
* function can take multiple arguments as it provides the signature for
* the resulting composite function.
*
* @param {...Function} funcs The functions to compose.
* @returns {Function} A function obtained by composing the argument functions
* from right to left. For example, compose(f, g, h) is identical to doing
* (...args) => f(g(h(...args))).
*/
function compose() {
for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) {
funcs[_key] = arguments[_key];
}
if (funcs.length === 0) {
return function (arg) {
return arg;
};
}
if (funcs.length === 1) {
return funcs[0];
}
var last = funcs[funcs.length - 1];
var rest = funcs.slice(0, -1);
return function () {
return rest.reduceRight(function (composed, f) {
return f(composed);
}, last.apply(undefined, arguments));
};
}
/***/ },
/* 167 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
exports.__esModule = true;
exports.ActionTypes = undefined;
exports['default'] = createStore;
var _isPlainObject = __webpack_require__(71);
var _isPlainObject2 = _interopRequireDefault(_isPlainObject);
var _symbolObservable = __webpack_require__(410);
var _symbolObservable2 = _interopRequireDefault(_symbolObservable);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
/**
* These are private action types reserved by Redux.
* For any unknown actions, you must return the current state.
* If the current state is undefined, you must return the initial state.
* Do not reference these action types directly in your code.
*/
var ActionTypes = exports.ActionTypes = {
INIT: '@@redux/INIT'
};
/**
* Creates a Redux store that holds the state tree.
* The only way to change the data in the store is to call `dispatch()` on it.
*
* There should only be a single store in your app. To specify how different
* parts of the state tree respond to actions, you may combine several reducers
* into a single reducer function by using `combineReducers`.
*
* @param {Function} reducer A function that returns the next state tree, given
* the current state tree and the action to handle.
*
* @param {any} [preloadedState] The initial state. You may optionally specify it
* to hydrate the state from the server in universal apps, or to restore a
* previously serialized user session.
* If you use `combineReducers` to produce the root reducer function, this must be
* an object with the same shape as `combineReducers` keys.
*
* @param {Function} enhancer The store enhancer. You may optionally specify it
* to enhance the store with third-party capabilities such as middleware,
* time travel, persistence, etc. The only store enhancer that ships with Redux
* is `applyMiddleware()`.
*
* @returns {Store} A Redux store that lets you read the state, dispatch actions
* and subscribe to changes.
*/
function createStore(reducer, preloadedState, enhancer) {
var _ref2;
if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {
enhancer = preloadedState;
preloadedState = undefined;
}
if (typeof enhancer !== 'undefined') {
if (typeof enhancer !== 'function') {
throw new Error('Expected the enhancer to be a function.');
}
return enhancer(createStore)(reducer, preloadedState);
}
if (typeof reducer !== 'function') {
throw new Error('Expected the reducer to be a function.');
}
var currentReducer = reducer;
var currentState = preloadedState;
var currentListeners = [];
var nextListeners = currentListeners;
var isDispatching = false;
function ensureCanMutateNextListeners() {
if (nextListeners === currentListeners) {
nextListeners = currentListeners.slice();
}
}
/**
* Reads the state tree managed by the store.
*
* @returns {any} The current state tree of your application.
*/
function getState() {
return currentState;
}
/**
* Adds a change listener. It will be called any time an action is dispatched,
* and some part of the state tree may potentially have changed. You may then
* call `getState()` to read the current state tree inside the callback.
*
* You may call `dispatch()` from a change listener, with the following
* caveats:
*
* 1. The subscriptions are snapshotted just before every `dispatch()` call.
* If you subscribe or unsubscribe while the listeners are being invoked, this
* will not have any effect on the `dispatch()` that is currently in progress.
* However, the next `dispatch()` call, whether nested or not, will use a more
* recent snapshot of the subscription list.
*
* 2. The listener should not expect to see all state changes, as the state
* might have been updated multiple times during a nested `dispatch()` before
* the listener is called. It is, however, guaranteed that all subscribers
* registered before the `dispatch()` started will be called with the latest
* state by the time it exits.
*
* @param {Function} listener A callback to be invoked on every dispatch.
* @returns {Function} A function to remove this change listener.
*/
function subscribe(listener) {
if (typeof listener !== 'function') {
throw new Error('Expected listener to be a function.');
}
var isSubscribed = true;
ensureCanMutateNextListeners();
nextListeners.push(listener);
return function unsubscribe() {
if (!isSubscribed) {
return;
}
isSubscribed = false;
ensureCanMutateNextListeners();
var index = nextListeners.indexOf(listener);
nextListeners.splice(index, 1);
};
}
/**
* Dispatches an action. It is the only way to trigger a state change.
*
* The `reducer` function, used to create the store, will be called with the
* current state tree and the given `action`. Its return value will
* be considered the **next** state of the tree, and the change listeners
* will be notified.
*
* The base implementation only supports plain object actions. If you want to
* dispatch a Promise, an Observable, a thunk, or something else, you need to
* wrap your store creating function into the corresponding middleware. For
* example, see the documentation for the `redux-thunk` package. Even the
* middleware will eventually dispatch plain object actions using this method.
*
* @param {Object} action A plain object representing “what changed”. It is
* a good idea to keep actions serializable so you can record and replay user
* sessions, or use the time travelling `redux-devtools`. An action must have
* a `type` property which may not be `undefined`. It is a good idea to use
* string constants for action types.
*
* @returns {Object} For convenience, the same action object you dispatched.
*
* Note that, if you use a custom middleware, it may wrap `dispatch()` to
* return something else (for example, a Promise you can await).
*/
function dispatch(action) {
if (!(0, _isPlainObject2['default'])(action)) {
throw new Error('Actions must be plain objects. ' + 'Use custom middleware for async actions.');
}
if (typeof action.type === 'undefined') {
throw new Error('Actions may not have an undefined "type" property. ' + 'Have you misspelled a constant?');
}
if (isDispatching) {
throw new Error('Reducers may not dispatch actions.');
}
try {
isDispatching = true;
currentState = currentReducer(currentState, action);
} finally {
isDispatching = false;
}
var listeners = currentListeners = nextListeners;
for (var i = 0; i < listeners.length; i++) {
listeners[i]();
}
return action;
}
/**
* Replaces the reducer currently used by the store to calculate the state.
*
* You might need this if your app implements code splitting and you want to
* load some of the reducers dynamically. You might also need this if you
* implement a hot reloading mechanism for Redux.
*
* @param {Function} nextReducer The reducer for the store to use instead.
* @returns {void}
*/
function replaceReducer(nextReducer) {
if (typeof nextReducer !== 'function') {
throw new Error('Expected the nextReducer to be a function.');
}
currentReducer = nextReducer;
dispatch({ type: ActionTypes.INIT });
}
/**
* Interoperability point for observable/reactive libraries.
* @returns {observable} A minimal observable of state changes.
* For more information, see the observable proposal:
* https://github.com/zenparsing/es-observable
*/
function observable() {
var _ref;
var outerSubscribe = subscribe;
return _ref = {
/**
* The minimal observable subscription method.
* @param {Object} observer Any object that can be used as an observer.
* The observer object should have a `next` method.
* @returns {subscription} An object with an `unsubscribe` method that can
* be used to unsubscribe the observable from the store, and prevent further
* emission of values from the observable.
*/
subscribe: function subscribe(observer) {
if (typeof observer !== 'object') {
throw new TypeError('Expected the observer to be an object.');
}
function observeState() {
if (observer.next) {
observer.next(getState());
}
}
observeState();
var unsubscribe = outerSubscribe(observeState);
return { unsubscribe: unsubscribe };
}
}, _ref[_symbolObservable2['default']] = function () {
return this;
}, _ref;
}
// When a store is created, an "INIT" action is dispatched so that every
// reducer returns their initial state. This effectively populates
// the initial state tree.
dispatch({ type: ActionTypes.INIT });
return _ref2 = {
dispatch: dispatch,
subscribe: subscribe,
getState: getState,
replaceReducer: replaceReducer
}, _ref2[_symbolObservable2['default']] = observable, _ref2;
}
/***/ },
/* 168 */
/***/ function(module, exports) {
'use strict';
exports.__esModule = true;
exports['default'] = warning;
/**
* Prints a warning in the console if it exists.
*
* @param {String} message The warning message.
* @returns {void}
*/
function warning(message) {
/* eslint-disable no-console */
if (typeof console !== 'undefined' && typeof console.error === 'function') {
console.error(message);
}
/* eslint-enable no-console */
try {
// This error was thrown as a convenience so that if you enable
// "break on all exceptions" in your console,
// it would pause the execution at this line.
throw new Error(message);
/* eslint-disable no-empty */
} catch (e) {}
/* eslint-enable no-empty */
}
/***/ },
/* 169 */
/***/ function(module, exports) {
module.exports = function(module) {
if(!module.webpackPolyfill) {
module.deprecate = function() {};
module.paths = [];
// module.parent = undefined by default
module.children = [];
module.webpackPolyfill = 1;
}
return module;
}
/***/ },
/* 170 */
/***/ function(module, exports) {
(function(self) {
'use strict';
if (self.fetch) {
return
}
var support = {
searchParams: 'URLSearchParams' in self,
iterable: 'Symbol' in self && 'iterator' in Symbol,
blob: 'FileReader' in self && 'Blob' in self && (function() {
try {
new Blob()
return true
} catch(e) {
return false
}
})(),
formData: 'FormData' in self,
arrayBuffer: 'ArrayBuffer' in self
}
if (support.arrayBuffer) {
var viewClasses = [
'[object Int8Array]',
'[object Uint8Array]',
'[object Uint8ClampedArray]',
'[object Int16Array]',
'[object Uint16Array]',
'[object Int32Array]',
'[object Uint32Array]',
'[object Float32Array]',
'[object Float64Array]'
]
var isDataView = function(obj) {
return obj && DataView.prototype.isPrototypeOf(obj)
}
var isArrayBufferView = ArrayBuffer.isView || function(obj) {
return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1
}
}
function normalizeName(name) {
if (typeof name !== 'string') {
name = String(name)
}
if (/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(name)) {
throw new TypeError('Invalid character in header field name')
}
return name.toLowerCase()
}
function normalizeValue(value) {
if (typeof value !== 'string') {
value = String(value)
}
return value
}
// Build a destructive iterator for the value list
function iteratorFor(items) {
var iterator = {
next: function() {
var value = items.shift()
return {done: value === undefined, value: value}
}
}
if (support.iterable) {
iterator[Symbol.iterator] = function() {
return iterator
}
}
return iterator
}
function Headers(headers) {
this.map = {}
if (headers instanceof Headers) {
headers.forEach(function(value, name) {
this.append(name, value)
}, this)
} else if (headers) {
Object.getOwnPropertyNames(headers).forEach(function(name) {
this.append(name, headers[name])
}, this)
}
}
Headers.prototype.append = function(name, value) {
name = normalizeName(name)
value = normalizeValue(value)
var oldValue = this.map[name]
this.map[name] = oldValue ? oldValue+','+value : value
}
Headers.prototype['delete'] = function(name) {
delete this.map[normalizeName(name)]
}
Headers.prototype.get = function(name) {
name = normalizeName(name)
return this.has(name) ? this.map[name] : null
}
Headers.prototype.has = function(name) {
return this.map.hasOwnProperty(normalizeName(name))
}
Headers.prototype.set = function(name, value) {
this.map[normalizeName(name)] = normalizeValue(value)
}
Headers.prototype.forEach = function(callback, thisArg) {
for (var name in this.map) {
if (this.map.hasOwnProperty(name)) {
callback.call(thisArg, this.map[name], name, this)
}
}
}
Headers.prototype.keys = function() {
var items = []
this.forEach(function(value, name) { items.push(name) })
return iteratorFor(items)
}
Headers.prototype.values = function() {
var items = []
this.forEach(function(value) { items.push(value) })
return iteratorFor(items)
}
Headers.prototype.entries = function() {
var items = []
this.forEach(function(value, name) { items.push([name, value]) })
return iteratorFor(items)
}
if (support.iterable) {
Headers.prototype[Symbol.iterator] = Headers.prototype.entries
}
function consumed(body) {
if (body.bodyUsed) {
return Promise.reject(new TypeError('Already read'))
}
body.bodyUsed = true
}
function fileReaderReady(reader) {
return new Promise(function(resolve, reject) {
reader.onload = function() {
resolve(reader.result)
}
reader.onerror = function() {
reject(reader.error)
}
})
}
function readBlobAsArrayBuffer(blob) {
var reader = new FileReader()
var promise = fileReaderReady(reader)
reader.readAsArrayBuffer(blob)
return promise
}
function readBlobAsText(blob) {
var reader = new FileReader()
var promise = fileReaderReady(reader)
reader.readAsText(blob)
return promise
}
function readArrayBufferAsText(buf) {
var view = new Uint8Array(buf)
var chars = new Array(view.length)
for (var i = 0; i < view.length; i++) {
chars[i] = String.fromCharCode(view[i])
}
return chars.join('')
}
function bufferClone(buf) {
if (buf.slice) {
return buf.slice(0)
} else {
var view = new Uint8Array(buf.byteLength)
view.set(new Uint8Array(buf))
return view.buffer
}
}
function Body() {
this.bodyUsed = false
this._initBody = function(body) {
this._bodyInit = body
if (!body) {
this._bodyText = ''
} else if (typeof body === 'string') {
this._bodyText = body
} else if (support.blob && Blob.prototype.isPrototypeOf(body)) {
this._bodyBlob = body
} else if (support.formData && FormData.prototype.isPrototypeOf(body)) {
this._bodyFormData = body
} else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
this._bodyText = body.toString()
} else if (support.arrayBuffer && support.blob && isDataView(body)) {
this._bodyArrayBuffer = bufferClone(body.buffer)
// IE 10-11 can't handle a DataView body.
this._bodyInit = new Blob([this._bodyArrayBuffer])
} else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {
this._bodyArrayBuffer = bufferClone(body)
} else {
throw new Error('unsupported BodyInit type')
}
if (!this.headers.get('content-type')) {
if (typeof body === 'string') {
this.headers.set('content-type', 'text/plain;charset=UTF-8')
} else if (this._bodyBlob && this._bodyBlob.type) {
this.headers.set('content-type', this._bodyBlob.type)
} else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')
}
}
}
if (support.blob) {
this.blob = function() {
var rejected = consumed(this)
if (rejected) {
return rejected
}
if (this._bodyBlob) {
return Promise.resolve(this._bodyBlob)
} else if (this._bodyArrayBuffer) {
return Promise.resolve(new Blob([this._bodyArrayBuffer]))
} else if (this._bodyFormData) {
throw new Error('could not read FormData body as blob')
} else {
return Promise.resolve(new Blob([this._bodyText]))
}
}
this.arrayBuffer = function() {
if (this._bodyArrayBuffer) {
return consumed(this) || Promise.resolve(this._bodyArrayBuffer)
} else {
return this.blob().then(readBlobAsArrayBuffer)
}
}
}
this.text = function() {
var rejected = consumed(this)
if (rejected) {
return rejected
}
if (this._bodyBlob) {
return readBlobAsText(this._bodyBlob)
} else if (this._bodyArrayBuffer) {
return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))
} else if (this._bodyFormData) {
throw new Error('could not read FormData body as text')
} else {
return Promise.resolve(this._bodyText)
}
}
if (support.formData) {
this.formData = function() {
return this.text().then(decode)
}
}
this.json = function() {
return this.text().then(JSON.parse)
}
return this
}
// HTTP methods whose capitalization should be normalized
var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']
function normalizeMethod(method) {
var upcased = method.toUpperCase()
return (methods.indexOf(upcased) > -1) ? upcased : method
}
function Request(input, options) {
options = options || {}
var body = options.body
if (typeof input === 'string') {
this.url = input
} else {
if (input.bodyUsed) {
throw new TypeError('Already read')
}
this.url = input.url
this.credentials = input.credentials
if (!options.headers) {
this.headers = new Headers(input.headers)
}
this.method = input.method
this.mode = input.mode
if (!body && input._bodyInit != null) {
body = input._bodyInit
input.bodyUsed = true
}
}
this.credentials = options.credentials || this.credentials || 'omit'
if (options.headers || !this.headers) {
this.headers = new Headers(options.headers)
}
this.method = normalizeMethod(options.method || this.method || 'GET')
this.mode = options.mode || this.mode || null
this.referrer = null
if ((this.method === 'GET' || this.method === 'HEAD') && body) {
throw new TypeError('Body not allowed for GET or HEAD requests')
}
this._initBody(body)
}
Request.prototype.clone = function() {
return new Request(this, { body: this._bodyInit })
}
function decode(body) {
var form = new FormData()
body.trim().split('&').forEach(function(bytes) {
if (bytes) {
var split = bytes.split('=')
var name = split.shift().replace(/\+/g, ' ')
var value = split.join('=').replace(/\+/g, ' ')
form.append(decodeURIComponent(name), decodeURIComponent(value))
}
})
return form
}
function parseHeaders(rawHeaders) {
var headers = new Headers()
rawHeaders.split('\r\n').forEach(function(line) {
var parts = line.split(':')
var key = parts.shift().trim()
if (key) {
var value = parts.join(':').trim()
headers.append(key, value)
}
})
return headers
}
Body.call(Request.prototype)
function Response(bodyInit, options) {
if (!options) {
options = {}
}
this.type = 'default'
this.status = 'status' in options ? options.status : 200
this.ok = this.status >= 200 && this.status < 300
this.statusText = 'statusText' in options ? options.statusText : 'OK'
this.headers = new Headers(options.headers)
this.url = options.url || ''
this._initBody(bodyInit)
}
Body.call(Response.prototype)
Response.prototype.clone = function() {
return new Response(this._bodyInit, {
status: this.status,
statusText: this.statusText,
headers: new Headers(this.headers),
url: this.url
})
}
Response.error = function() {
var response = new Response(null, {status: 0, statusText: ''})
response.type = 'error'
return response
}
var redirectStatuses = [301, 302, 303, 307, 308]
Response.redirect = function(url, status) {
if (redirectStatuses.indexOf(status) === -1) {
throw new RangeError('Invalid status code')
}
return new Response(null, {status: status, headers: {location: url}})
}
self.Headers = Headers
self.Request = Request
self.Response = Response
self.fetch = function(input, init) {
return new Promise(function(resolve, reject) {
var request = new Request(input, init)
var xhr = new XMLHttpRequest()
xhr.onload = function() {
var options = {
status: xhr.status,
statusText: xhr.statusText,
headers: parseHeaders(xhr.getAllResponseHeaders() || '')
}
options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')
var body = 'response' in xhr ? xhr.response : xhr.responseText
resolve(new Response(body, options))
}
xhr.onerror = function() {
reject(new TypeError('Network request failed'))
}
xhr.ontimeout = function() {
reject(new TypeError('Network request failed'))
}
xhr.open(request.method, request.url, true)
if (request.credentials === 'include') {
xhr.withCredentials = true
}
if ('responseType' in xhr && support.blob) {
xhr.responseType = 'blob'
}
request.headers.forEach(function(value, name) {
xhr.setRequestHeader(name, value)
})
xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)
})
}
self.fetch.polyfill = true
})(typeof self !== 'undefined' ? self : this);
/***/ },
/* 171 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _reactMdl = __webpack_require__(9);
var _styles = __webpack_require__(246);
var _styles2 = _interopRequireDefault(_styles);
var _errorContainer = __webpack_require__(181);
var _errorContainer2 = _interopRequireDefault(_errorContainer);
var _userContainer = __webpack_require__(206);
var _userContainer2 = _interopRequireDefault(_userContainer);
var _showUserContainer = __webpack_require__(204);
var _showUserContainer2 = _interopRequireDefault(_showUserContainer);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
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; }
var App = function (_Component) {
_inherits(App, _Component);
function App(props) {
_classCallCheck(this, App);
var _this = _possibleConstructorReturn(this, (App.__proto__ || Object.getPrototypeOf(App)).call(this, props));
_this.onOverlayClick = function () {
return _this.setState({ drawerActive: false });
};
_this.state = { drawerActive: false };
_this.toggleDrawerActive = function () {
_this.setState({ drawerActive: !_this.state.drawerActive });
};
return _this;
}
_createClass(App, [{
key: 'componentDidMount',
value: function componentDidMount() {
document.title = this.getCurrentSection() + ' - Unleash Admin';
}
}, {
key: 'getCurrentSection',
value: function getCurrentSection() {
var routes = this.props.routes;
var lastRoute = routes[routes.length - 1];
return lastRoute ? lastRoute.pageTitle : '';
}
}, {
key: 'render',
value: function render() {
var _this2 = this;
var createListItem = function createListItem(path, caption) {
return _react2.default.createElement(
'a',
{
href: _this2.context.router.createHref(path),
className: _this2.context.router.isActive(path) ? _styles2.default.active : '' },
caption
);
};
return _react2.default.createElement(
'div',
{ style: {} },
_react2.default.createElement(_userContainer2.default, null),
_react2.default.createElement(
_reactMdl.Layout,
{ fixedHeader: true },
_react2.default.createElement(
_reactMdl.Header,
{ title: _react2.default.createElement(
'span',
null,
_react2.default.createElement(
'span',
{ style: { color: '#ddd' } },
'Unleash Admin / '
),
_react2.default.createElement(
'strong',
null,
this.getCurrentSection()
)
) },
_react2.default.createElement(
_reactMdl.Navigation,
null,
_react2.default.createElement(
'a',
{ href: 'https://github.com/Unleash', target: '_blank' },
'Github'
),
_react2.default.createElement(_showUserContainer2.default, null)
)
),
_react2.default.createElement(
_reactMdl.Drawer,
{ title: 'Unleash Admin' },
_react2.default.createElement(
_reactMdl.Navigation,
null,
createListItem('/features', 'Feature toggles'),
createListItem('/strategies', 'Strategies'),
createListItem('/history', 'Event history'),
createListItem('/archive', 'Archived toggles'),
_react2.default.createElement('hr', null),
createListItem('/applications', 'Applications'),
createListItem('/metrics', 'Client metrics'),
createListItem('/client-strategies', 'Client strategies'),
createListItem('/client-instances', 'Client instances')
)
),
_react2.default.createElement(
_reactMdl.Content,
null,
_react2.default.createElement(
_reactMdl.Grid,
null,
_react2.default.createElement(
_reactMdl.Cell,
{ col: 12 },
this.props.children,
_react2.default.createElement(_errorContainer2.default, null)
)
),
_react2.default.createElement(
_reactMdl.Footer,
{ size: 'mega' },
_react2.default.createElement(
_reactMdl.FooterSection,
{ type: 'middle' },
_react2.default.createElement(
_reactMdl.FooterDropDownSection,
{ title: 'Menu' },
_react2.default.createElement(
_reactMdl.FooterLinkList,
null,
createListItem('/features', 'Feature toggles'),
createListItem('/strategies', 'Strategies'),
createListItem('/history', 'Event history'),
createListItem('/archive', 'Archived toggles')
)
),
_react2.default.createElement(
_reactMdl.FooterDropDownSection,
{ title: 'Metrics' },
_react2.default.createElement(
_reactMdl.FooterLinkList,
null,
createListItem('/applications', 'Applications'),
createListItem('/metrics', 'Client metrics'),
createListItem('/client-strategies', 'Client strategies'),
createListItem('/client-instances', 'Client instances')
)
),
_react2.default.createElement(
_reactMdl.FooterDropDownSection,
{ title: 'FAQ' },
_react2.default.createElement(
_reactMdl.FooterLinkList,
null,
_react2.default.createElement(
'a',
{ href: '#' },
'Help'
),
_react2.default.createElement(
'a',
{ href: '#' },
'Privacy & Terms'
),
_react2.default.createElement(
'a',
{ href: '#' },
'Questions'
),
_react2.default.createElement(
'a',
{ href: '#' },
'Answers'
),
_react2.default.createElement(
'a',
{ href: '#' },
'Contact Us'
)
)
),
_react2.default.createElement(
_reactMdl.FooterDropDownSection,
{ title: 'Clients' },
_react2.default.createElement(
_reactMdl.FooterLinkList,
null,
_react2.default.createElement(
'a',
{ href: 'https://github.com/Unleash/unleash-node-client/' },
'Node.js'
),
_react2.default.createElement(
'a',
{ href: 'https://github.com/Unleash/unleash-java-client/' },
'Java'
)
)
)
),
_react2.default.createElement(
_reactMdl.FooterSection,
{ type: 'bottom', logo: 'Unleash Admin' },
_react2.default.createElement(
_reactMdl.FooterLinkList,
null,
_react2.default.createElement(
'a',
{ href: 'https://github.com/Unleash/unleash/', target: '_blank' },
'GitHub'
),
_react2.default.createElement(
'a',
{ href: 'https://finn.no', target: '_blank' },
_react2.default.createElement(
'small',
null,
'A product by'
),
' FINN.no'
)
)
)
)
)
)
);
return _react2.default.createElement(
'div',
{ className: _styles2.default.container },
_react2.default.createElement(AppBar, { title: 'Unleash Admin', leftIcon: 'menu', onLeftIconClick: this.toggleDrawerActive, className: _styles2.default.appBar }),
_react2.default.createElement(
'div',
{ className: _styles2.default.container, style: { top: '6.4rem' } },
_react2.default.createElement(
_reactMdl.Layout,
null,
_react2.default.createElement(
NavDrawer,
{ active: this.state.drawerActive, permanentAt: 'sm', onOverlayClick: this.onOverlayClick },
_react2.default.createElement(_reactMdl.Navigation, null)
),
_react2.default.createElement(
Panel,
{ scrollY: true },
_react2.default.createElement(
'div',
{ style: { padding: '1.8rem' } },
this.props.children
)
)
)
)
);
}
}]);
return App;
}(_react.Component);
App.contextTypes = {
router: _react2.default.PropTypes.object
};
exports.default = App;
;
/***/ },
/* 172 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _reactRouter = __webpack_require__(25);
var _reactMdl = __webpack_require__(9);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
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; }
var ClientStrategies = function (_Component) {
_inherits(ClientStrategies, _Component);
function ClientStrategies() {
_classCallCheck(this, ClientStrategies);
return _possibleConstructorReturn(this, (ClientStrategies.__proto__ || Object.getPrototypeOf(ClientStrategies)).apply(this, arguments));
}
_createClass(ClientStrategies, [{
key: 'componentDidMount',
value: function componentDidMount() {
this.props.fetchApplication(this.props.appName);
}
}, {
key: 'render',
value: function render() {
if (!this.props.application) {
return _react2.default.createElement(
'div',
null,
'Loading application info...'
);
}
var _props$application = this.props.application,
appName = _props$application.appName,
instances = _props$application.instances,
strategies = _props$application.strategies,
seenToggles = _props$application.seenToggles;
return _react2.default.createElement(
'div',
null,
_react2.default.createElement(
'h5',
null,
appName
),
_react2.default.createElement(
_reactMdl.Grid,
null,
_react2.default.createElement(
_reactMdl.Cell,
{ col: 4 },
_react2.default.createElement(
'h6',
null,
'Instances'
),
_react2.default.createElement(
'ol',
{ className: 'demo-list-item mdl-list' },
instances.map(function (_ref, i) {
var instanceId = _ref.instanceId;
return _react2.default.createElement(
'li',
{ className: 'mdl-list__item', key: i },
instanceId
);
})
)
),
_react2.default.createElement(
_reactMdl.Cell,
{ col: 4 },
_react2.default.createElement(
'h6',
null,
'Strategies'
),
_react2.default.createElement('ol', { className: 'demo-list-item mdl-list' })
),
_react2.default.createElement(
_reactMdl.Cell,
{ col: 4 },
_react2.default.createElement(
'h6',
null,
'Toggles'
),
_react2.default.createElement(
'ol',
{ className: 'demo-list-item mdl-list' },
seenToggles.map(function (name, i) {
return _react2.default.createElement(
'li',
{ className: 'mdl-list__item', key: i },
_react2.default.createElement(
_reactRouter.Link,
{ to: '/features/edit/' + name },
name
)
);
})
)
)
)
);
}
}]);
return ClientStrategies;
}(_react.Component);
exports.default = ClientStrategies;
/***/ },
/* 173 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _reactRedux = __webpack_require__(8);
var _applicationEditComponent = __webpack_require__(172);
var _applicationEditComponent2 = _interopRequireDefault(_applicationEditComponent);
var _actions = __webpack_require__(60);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var mapStateToProps = function mapStateToProps(state, props) {
var application = state.applications.getIn(['apps', props.appName]);
if (application) {
application = application.toJS();
}
return {
application: application
};
};
var Constainer = (0, _reactRedux.connect)(mapStateToProps, { fetchApplication: _actions.fetchApplication })(_applicationEditComponent2.default);
exports.default = Constainer;
/***/ },
/* 174 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _reactRouter = __webpack_require__(25);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
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; }
var ClientStrategies = function (_Component) {
_inherits(ClientStrategies, _Component);
function ClientStrategies() {
_classCallCheck(this, ClientStrategies);
return _possibleConstructorReturn(this, (ClientStrategies.__proto__ || Object.getPrototypeOf(ClientStrategies)).apply(this, arguments));
}
_createClass(ClientStrategies, [{
key: 'componentDidMount',
value: function componentDidMount() {
this.props.fetchAll();
}
}, {
key: 'render',
value: function render() {
var applications = this.props.applications;
if (!applications) {
return _react2.default.createElement(
'div',
null,
'loading...'
);
}
return _react2.default.createElement(
'div',
null,
applications.map(function (item) {
return _react2.default.createElement(
_reactRouter.Link,
{ key: item.appName, to: '/applications/' + item.appName },
'Link: ',
item.appName
);
})
);
}
}]);
return ClientStrategies;
}(_react.Component);
exports.default = ClientStrategies;
/***/ },
/* 175 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _reactRedux = __webpack_require__(8);
var _applicationListComponent = __webpack_require__(174);
var _applicationListComponent2 = _interopRequireDefault(_applicationListComponent);
var _actions = __webpack_require__(60);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var mapStateToProps = function mapStateToProps(state) {
return { applications: state.applications.get('list').toJS() };
};
var Container = (0, _reactRedux.connect)(mapStateToProps, { fetchAll: _actions.fetchAll })(_applicationListComponent2.default);
exports.default = Container;
/***/ },
/* 176 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _reactRedux = __webpack_require__(8);
var _archiveListComponent = __webpack_require__(177);
var _archiveListComponent2 = _interopRequireDefault(_archiveListComponent);
var _archiveActions = __webpack_require__(108);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var mapStateToProps = function mapStateToProps(state) {
var archive = state.archive.get('list').toArray();
return {
archive: archive
};
};
var ArchiveListContainer = (0, _reactRedux.connect)(mapStateToProps, { fetchArchive: _archiveActions.fetchArchive, revive: _archiveActions.revive })(_archiveListComponent2.default);
exports.default = ArchiveListContainer;
/***/ },
/* 177 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _reactMdl = __webpack_require__(9);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
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; }
var ArchiveList = function (_Component) {
_inherits(ArchiveList, _Component);
function ArchiveList() {
_classCallCheck(this, ArchiveList);
return _possibleConstructorReturn(this, (ArchiveList.__proto__ || Object.getPrototypeOf(ArchiveList)).apply(this, arguments));
}
_createClass(ArchiveList, [{
key: 'componentDidMount',
value: function componentDidMount() {
this.props.fetchArchive();
}
}, {
key: 'render',
value: function render() {
var _props = this.props,
archive = _props.archive,
revive = _props.revive;
return _react2.default.createElement(
'div',
null,
_react2.default.createElement(
'h6',
null,
'Toggle Archive'
),
_react2.default.createElement(
_reactMdl.DataTable,
{
rows: archive,
style: { width: '100%' } },
_react2.default.createElement(
_reactMdl.TableHeader,
{ style: { width: '25px' }, name: 'strategies', cellFormatter: function cellFormatter(name) {
return _react2.default.createElement(_reactMdl.IconButton, { colored: true, name: 'undo', onClick: function onClick() {
return revive(name);
} });
} },
'Revive'
),
_react2.default.createElement(
_reactMdl.TableHeader,
{ style: { width: '25px' }, name: 'enabled', cellFormatter: function cellFormatter(v) {
return v ? 'Yes' : '-';
} },
'Enabled'
),
_react2.default.createElement(
_reactMdl.TableHeader,
{ name: 'name' },
'Toggle name'
),
_react2.default.createElement(
_reactMdl.TableHeader,
{ numeric: true, name: 'createdAt' },
'Created'
)
)
);
}
}]);
return ArchiveList;
}(_react.Component);
exports.default = ArchiveList;
/***/ },
/* 178 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _reactMdl = __webpack_require__(9);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
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; }
var ClientStrategies = function (_Component) {
_inherits(ClientStrategies, _Component);
function ClientStrategies() {
_classCallCheck(this, ClientStrategies);
return _possibleConstructorReturn(this, (ClientStrategies.__proto__ || Object.getPrototypeOf(ClientStrategies)).apply(this, arguments));
}
_createClass(ClientStrategies, [{
key: 'componentDidMount',
value: function componentDidMount() {
this.props.fetchClientStrategies();
}
}, {
key: 'render',
value: function render() {
var source = this.props.clientStrategies
// temp hack for ignoring dumb data
.filter(function (item) {
return item.strategies;
}).map(function (item) {
return {
appName: item.appName,
strategies: item.strategies && item.strategies.join(', ')
};
});
return _react2.default.createElement(
_reactMdl.DataTable,
{
style: { width: '100%' },
rows: source,
selectable: false
},
_react2.default.createElement(
_reactMdl.TableHeader,
{ name: 'appName' },
'Application name'
),
_react2.default.createElement(
_reactMdl.TableHeader,
{ name: 'strategies' },
'Strategies'
)
);
}
}]);
return ClientStrategies;
}(_react.Component);
exports.default = ClientStrategies;
/***/ },
/* 179 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _reactRedux = __webpack_require__(8);
var _strategyComponent = __webpack_require__(178);
var _strategyComponent2 = _interopRequireDefault(_strategyComponent);
var _clientStrategyActions = __webpack_require__(109);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var mapStateToProps = function mapStateToProps(state) {
return { clientStrategies: state.clientStrategies.toJS() };
};
var StrategiesContainer = (0, _reactRedux.connect)(mapStateToProps, { fetchClientStrategies: _clientStrategyActions.fetchClientStrategies })(_strategyComponent2.default);
exports.default = StrategiesContainer;
/***/ },
/* 180 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _reactMdl = __webpack_require__(9);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
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; }
var ErrorComponent = function (_React$Component) {
_inherits(ErrorComponent, _React$Component);
function ErrorComponent() {
_classCallCheck(this, ErrorComponent);
return _possibleConstructorReturn(this, (ErrorComponent.__proto__ || Object.getPrototypeOf(ErrorComponent)).apply(this, arguments));
}
_createClass(ErrorComponent, [{
key: 'render',
value: function render() {
var _this2 = this;
var showError = this.props.errors.length > 0;
var error = showError ? this.props.errors[0] : undefined;
var muteError = function muteError() {
return _this2.props.muteError(error);
};
return _react2.default.createElement(_reactMdl.Snackbar, {
action: 'Dismiss',
active: showError,
icon: 'question_answer',
timeout: 10000,
label: error,
onClick: muteError,
onTimeout: muteError,
type: 'warning'
});
}
}], [{
key: 'propTypes',
value: function propTypes() {
return {
errors: _react.PropTypes.array.isRequired,
muteError: _react.PropTypes.func.isRequired
};
}
}]);
return ErrorComponent;
}(_react2.default.Component);
exports.default = ErrorComponent;
/***/ },
/* 181 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _reactRedux = __webpack_require__(8);
var _errorComponent = __webpack_require__(180);
var _errorComponent2 = _interopRequireDefault(_errorComponent);
var _errorActions = __webpack_require__(110);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var mapDispatchToProps = {
muteError: _errorActions.muteError
};
var mapStateToProps = function mapStateToProps(state) {
return {
errors: state.error.get('list').toArray()
};
};
exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_errorComponent2.default);
/***/ },
/* 182 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _reactRouter = __webpack_require__(25);
var _reactMdl = __webpack_require__(9);
var _percent = __webpack_require__(122);
var _percent2 = _interopRequireDefault(_percent);
var _progress = __webpack_require__(105);
var _progress2 = _interopRequireDefault(_progress);
var _feature = __webpack_require__(113);
var _feature2 = _interopRequireDefault(_feature);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var Feature = function Feature(_ref) {
var feature = _ref.feature,
onFeatureClick = _ref.onFeatureClick,
onFeatureRemove = _ref.onFeatureRemove,
settings = _ref.settings,
_ref$metricsLastHour = _ref.metricsLastHour,
metricsLastHour = _ref$metricsLastHour === undefined ? { yes: 0, no: 0, isFallback: true } : _ref$metricsLastHour,
_ref$metricsLastMinut = _ref.metricsLastMinute,
metricsLastMinute = _ref$metricsLastMinut === undefined ? { yes: 0, no: 0, isFallback: true } : _ref$metricsLastMinut;
var name = feature.name,
description = feature.description,
enabled = feature.enabled,
strategies = feature.strategies;
var _settings$showLastHou = settings.showLastHour,
showLastHour = _settings$showLastHou === undefined ? false : _settings$showLastHou;
var isStale = showLastHour ? metricsLastHour.isFallback : metricsLastMinute.isFallback;
var percent = 1 * (showLastHour ? _percent2.default.calc(metricsLastHour.yes, metricsLastHour.yes + metricsLastHour.no, 0) : _percent2.default.calc(metricsLastMinute.yes, metricsLastMinute.yes + metricsLastMinute.no, 0));
return _react2.default.createElement(
'li',
{ key: name, className: 'mdl-list__item' },
_react2.default.createElement(
'span',
{ className: 'mdl-list__item-primary-content' },
_react2.default.createElement(
'div',
{ style: { width: '40px', textAlign: 'center' } },
isStale ? _react2.default.createElement(_reactMdl.Icon, { style: { width: '25px', marginTop: '4px', fontSize: '25px', color: '#ccc' }, name: 'report problem', title: 'No metrics avaiable' }) : _react2.default.createElement(
'div',
null,
_react2.default.createElement(_progress2.default, { strokeWidth: 15, percentage: percent, width: '50' })
)
),
'\xA0',
_react2.default.createElement(
'span',
{ style: { display: 'inline-block', width: '45px' }, title: 'Toggle ' + name },
_react2.default.createElement(_reactMdl.Switch, { title: 'test', key: 'left-actions', onChange: function onChange() {
return onFeatureClick(feature);
}, checked: enabled })
),
_react2.default.createElement(
_reactRouter.Link,
{ to: '/features/edit/' + name, className: _feature2.default.link },
name,
' ',
_react2.default.createElement(
'small',
null,
description && description.substring(0, 100) || ''
)
)
),
_react2.default.createElement(
'span',
{ className: _feature2.default.iconList },
strategies && strategies.map(function (s, i) {
return _react2.default.createElement(
_reactMdl.Chip,
{ className: _feature2.default.iconListItemChip, key: i },
_react2.default.createElement(
'small',
null,
s.name
)
);
}),
_react2.default.createElement(
_reactRouter.Link,
{ to: '/features/edit/' + name, title: 'Edit ' + name, className: _feature2.default.iconListItem },
_react2.default.createElement(_reactMdl.IconButton, { name: 'edit' })
),
_react2.default.createElement(
_reactRouter.Link,
{ to: '/history/' + name, title: 'History htmlFor ' + name, className: _feature2.default.iconListItem },
_react2.default.createElement(_reactMdl.IconButton, { name: 'history' })
),
_react2.default.createElement(_reactMdl.IconButton, { name: 'delete', onClick: function onClick() {
return onFeatureRemove(name);
}, className: _feature2.default.iconListItem })
)
);
};
Feature.propTypes = {
feature: _react.PropTypes.object,
onFeatureClick: _react.PropTypes.func,
onFeatureRemove: _react.PropTypes.func
};
exports.default = Feature;
/***/ },
/* 183 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _reactRedux = __webpack_require__(8);
var _reactRouter = __webpack_require__(25);
var _featureActions = __webpack_require__(29);
var _inputHelpers = __webpack_require__(59);
var _form = __webpack_require__(104);
var _form2 = _interopRequireDefault(_form);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var ID = 'add-feature-toggle';
var mapStateToProps = (0, _inputHelpers.createMapper)({ id: ID });
var prepare = function prepare(methods, dispatch) {
methods.onSubmit = function (input) {
return function (e) {
e.preventDefault();
(0, _featureActions.createFeatureToggles)(input)(dispatch).then(function () {
return methods.clear();
}).then(function () {
return _reactRouter.hashHistory.push('/features');
});
};
};
methods.onCancel = function (evt) {
evt.preventDefault();
methods.clear();
_reactRouter.hashHistory.push('/features');
};
methods.addStrategy = function (v) {
methods.pushToList('strategies', v);
};
methods.updateStrategy = function (index, n) {
methods.updateInList('strategies', index, n);
};
methods.removeStrategy = function (index) {
methods.removeFromList('strategies', index);
};
methods.validateName = function (v) {
var featureToggleName = v.target.value;
(0, _featureActions.validateName)(featureToggleName).then(function () {
return methods.setValue('nameError', undefined);
}).catch(function (err) {
return methods.setValue('nameError', err.message);
});
};
return methods;
};
var actions = (0, _inputHelpers.createActions)({ id: ID, prepare: prepare });
exports.default = (0, _reactRedux.connect)(mapStateToProps, actions)(_form2.default);
/***/ },
/* 184 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _reactRedux = __webpack_require__(8);
var _reactRouter = __webpack_require__(25);
var _featureActions = __webpack_require__(29);
var _inputHelpers = __webpack_require__(59);
var _form = __webpack_require__(104);
var _form2 = _interopRequireDefault(_form);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var ID = 'edit-feature-toggle';
function getId(props) {
return [ID, props.featureToggle.name];
}
// TODO: need to scope to the active featureToggle
// best is to emulate the "input-storage"?
var mapStateToProps = (0, _inputHelpers.createMapper)({
id: getId,
getDefault: function getDefault(state, ownProps) {
return ownProps.featureToggle;
},
prepare: function prepare(props) {
props.editmode = true;
return props;
}
});
var prepare = function prepare(methods, dispatch) {
methods.onSubmit = function (input) {
return function (e) {
e.preventDefault();
// TODO: should add error handling
(0, _featureActions.requestUpdateFeatureToggle)(input)(dispatch).then(function () {
return methods.clear();
}).then(function () {
return window.history.back();
});
};
};
methods.onCancel = function (evt) {
evt.preventDefault();
methods.clear();
_reactRouter.hashHistory.push('/features');
};
methods.addStrategy = function (v) {
methods.pushToList('strategies', v);
};
methods.removeStrategy = function (index) {
methods.removeFromList('strategies', index);
};
methods.updateStrategy = function (index, n) {
methods.updateInList('strategies', index, n);
};
methods.validateName = function () {};
return methods;
};
var actions = (0, _inputHelpers.createActions)({
id: getId,
prepare: prepare
});
exports.default = (0, _reactRedux.connect)(mapStateToProps, actions)(_form2.default);
/***/ },
/* 185 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _reactMdl = __webpack_require__(9);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
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; }
var AddStrategy = function (_React$Component) {
_inherits(AddStrategy, _React$Component);
function AddStrategy() {
var _ref;
var _temp, _this, _ret;
_classCallCheck(this, AddStrategy);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = AddStrategy.__proto__ || Object.getPrototypeOf(AddStrategy)).call.apply(_ref, [this].concat(args))), _this), _this.addStrategy = function (strategyName) {
var selectedStrategy = _this.props.strategies.find(function (s) {
return s.name === strategyName;
});
var parameters = {};
var keys = Object.keys(selectedStrategy.parametersTemplate || {});
keys.forEach(function (prop) {
parameters[prop] = '';
});
_this.props.addStrategy({
name: selectedStrategy.name,
parameters: parameters
});
}, _temp), _possibleConstructorReturn(_this, _ret);
}
_createClass(AddStrategy, [{
key: 'stopPropagation',
value: function stopPropagation(e) {
e.stopPropagation();
e.preventDefault();
}
}, {
key: 'render',
value: function render() {
var _this2 = this;
return _react2.default.createElement(
'div',
{ style: { position: 'relative', width: '25px', height: '25px', display: 'inline-block' } },
_react2.default.createElement(_reactMdl.IconButton, { name: 'add', id: 'strategies-add', colored: true, title: 'Sort', onClick: this.stopPropagation }),
_react2.default.createElement(
_reactMdl.Menu,
{ target: 'strategies-add', valign: 'bottom', align: 'left', ripple: true, onClick: function onClick(e) {
return _this2.setSort(e.target.getAttribute('data-target'));
} },
_react2.default.createElement(
_reactMdl.MenuItem,
{ disabled: true },
'Add Strategy:'
),
this.props.strategies.map(function (s) {
return _react2.default.createElement(
_reactMdl.MenuItem,
{ key: s.name, onClick: function onClick() {
return _this2.addStrategy(s.name);
} },
s.name
);
})
)
);
}
}], [{
key: 'propTypes',
value: function propTypes() {
return {
strategies: _react.PropTypes.array.isRequired,
addStrategy: _react.PropTypes.func.isRequired,
fetchStrategies: _react.PropTypes.func.isRequired
};
}
}]);
return AddStrategy;
}(_react2.default.Component);
exports.default = AddStrategy;
/***/ },
/* 186 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _strategyConfigure = __webpack_require__(189);
var _strategyConfigure2 = _interopRequireDefault(_strategyConfigure);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
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; }
var StrategiesList = function (_React$Component) {
_inherits(StrategiesList, _React$Component);
function StrategiesList() {
_classCallCheck(this, StrategiesList);
return _possibleConstructorReturn(this, (StrategiesList.__proto__ || Object.getPrototypeOf(StrategiesList)).apply(this, arguments));
}
_createClass(StrategiesList, [{
key: 'render',
value: function render() {
var _this2 = this;
var _props = this.props,
strategies = _props.strategies,
configuredStrategies = _props.configuredStrategies;
if (!configuredStrategies || configuredStrategies.length === 0) {
return _react2.default.createElement(
'i',
{ style: { color: 'red' } },
'No strategies added'
);
}
var blocks = configuredStrategies.map(function (strat, i) {
return _react2.default.createElement(_strategyConfigure2.default, {
key: strat.name + '-' + i,
strategy: strat,
removeStrategy: _this2.props.removeStrategy.bind(null, i),
updateStrategy: _this2.props.updateStrategy.bind(null, i),
strategyDefinition: strategies.find(function (s) {
return s.name === strat.name;
}) });
});
return _react2.default.createElement(
'div',
null,
blocks
);
}
}], [{
key: 'propTypes',
value: function propTypes() {
return {
strategies: _react.PropTypes.array.isRequired,
configuredStrategies: _react.PropTypes.array.isRequired,
updateStrategy: _react.PropTypes.func.isRequired,
removeStrategy: _react.PropTypes.func.isRequired
};
}
}]);
return StrategiesList;
}(_react2.default.Component);
exports.default = StrategiesList;
/***/ },
/* 187 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _reactRedux = __webpack_require__(8);
var _strategiesSection = __webpack_require__(188);
var _strategiesSection2 = _interopRequireDefault(_strategiesSection);
var _strategyActions = __webpack_require__(45);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = (0, _reactRedux.connect)(function (state) {
return {
strategies: state.strategies.get('list').toArray()
};
}, { fetchStrategies: _strategyActions.fetchStrategies })(_strategiesSection2.default);
/***/ },
/* 188 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _strategiesList = __webpack_require__(186);
var _strategiesList2 = _interopRequireDefault(_strategiesList);
var _strategiesAdd = __webpack_require__(185);
var _strategiesAdd2 = _interopRequireDefault(_strategiesAdd);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
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; }
var headerStyle = {
marginBottom: '10px'
};
var StrategiesSection = function (_React$Component) {
_inherits(StrategiesSection, _React$Component);
function StrategiesSection() {
_classCallCheck(this, StrategiesSection);
return _possibleConstructorReturn(this, (StrategiesSection.__proto__ || Object.getPrototypeOf(StrategiesSection)).apply(this, arguments));
}
_createClass(StrategiesSection, [{
key: 'componentWillMount',
value: function componentWillMount() {
this.props.fetchStrategies();
}
}, {
key: 'render',
value: function render() {
if (!this.props.strategies || this.props.strategies.length === 0) {
return _react2.default.createElement(
'i',
null,
'Loding available strategies'
);
}
return _react2.default.createElement(
'div',
null,
_react2.default.createElement(
'h5',
{ style: headerStyle },
'Activation strategies ',
_react2.default.createElement(_strategiesAdd2.default, this.props),
' '
),
_react2.default.createElement(_strategiesList2.default, this.props)
);
}
}], [{
key: 'propTypes',
value: function propTypes() {
return {
strategies: _react.PropTypes.array.isRequired,
addStrategy: _react.PropTypes.func.isRequired,
removeStrategy: _react.PropTypes.func.isRequired,
updateStrategy: _react.PropTypes.func.isRequired,
fetchStrategies: _react.PropTypes.func.isRequired
};
}
}]);
return StrategiesSection;
}(_react2.default.Component);
exports.default = StrategiesSection;
/***/ },
/* 189 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _reactMdl = __webpack_require__(9);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
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; }
var StrategyConfigure = function (_React$Component) {
_inherits(StrategyConfigure, _React$Component);
function StrategyConfigure() {
var _ref;
var _temp, _this, _ret;
_classCallCheck(this, StrategyConfigure);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = StrategyConfigure.__proto__ || Object.getPrototypeOf(StrategyConfigure)).call.apply(_ref, [this].concat(args))), _this), _this.handleConfigChange = function (key, e) {
var parameters = _this.props.strategy.parameters || {};
parameters[key] = e.target.value;
var updatedStrategy = Object.assign({}, _this.props.strategy, { parameters: parameters });
_this.props.updateStrategy(updatedStrategy);
}, _this.handleRemove = function (evt) {
evt.preventDefault();
_this.props.removeStrategy();
}, _temp), _possibleConstructorReturn(_this, _ret);
}
_createClass(StrategyConfigure, [{
key: 'renderInputFields',
value: function renderInputFields(strategyDefinition) {
var _this2 = this;
if (strategyDefinition.parametersTemplate) {
return Object.keys(strategyDefinition.parametersTemplate).map(function (field) {
return _react2.default.createElement(_reactMdl.Textfield, {
key: field,
name: field,
label: field,
onChange: _this2.handleConfigChange.bind(_this2, field),
value: _this2.props.strategy.parameters[field]
});
});
}
}
}, {
key: 'render',
value: function render() {
if (!this.props.strategyDefinition) {
return _react2.default.createElement(
'div',
null,
_react2.default.createElement(
'h6',
null,
_react2.default.createElement(
'span',
{ style: { color: 'red' } },
'Strategy "',
this.props.strategy.name,
'" deleted'
)
),
_react2.default.createElement(_reactMdl.Button, { onClick: this.handleRemove, icon: 'remove', label: 'remove strategy', flat: true })
);
}
var inputFields = this.renderInputFields(this.props.strategyDefinition) || [];
return _react2.default.createElement(
'div',
{ style: { padding: '5px 15px', backgroundColor: '#f7f8ff', marginBottom: '10px' } },
_react2.default.createElement(
'h6',
null,
_react2.default.createElement(
'strong',
null,
this.props.strategy.name,
' '
),
'(',
_react2.default.createElement(
'a',
{ style: { color: '#ff4081' }, onClick: this.handleRemove, href: '#remove-strat' },
'remove'
),
')'
),
_react2.default.createElement(
'small',
null,
this.props.strategyDefinition.description
),
_react2.default.createElement(
'div',
null,
inputFields
)
);
}
}], [{
key: 'propTypes',
value: function propTypes() {
return {
strategy: _react.PropTypes.object.isRequired,
strategyDefinition: _react.PropTypes.object.isRequired,
updateStrategy: _react.PropTypes.func.isRequired,
removeStrategy: _react.PropTypes.func.isRequired
};
}
}]);
return StrategyConfigure;
}(_react2.default.Component);
exports.default = StrategyConfigure;
/***/ },
/* 190 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _featureListItemComponent = __webpack_require__(182);
var _featureListItemComponent2 = _interopRequireDefault(_featureListItemComponent);
var _reactRouter = __webpack_require__(25);
var _reactMdl = __webpack_require__(9);
var _feature = __webpack_require__(113);
var _feature2 = _interopRequireDefault(_feature);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
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; }
var FeatureListComponent = function (_React$PureComponent) {
_inherits(FeatureListComponent, _React$PureComponent);
function FeatureListComponent() {
_classCallCheck(this, FeatureListComponent);
return _possibleConstructorReturn(this, (FeatureListComponent.__proto__ || Object.getPrototypeOf(FeatureListComponent)).apply(this, arguments));
}
_createClass(FeatureListComponent, [{
key: 'componentDidMount',
value: function componentDidMount() {
var _this2 = this;
this.props.fetchFeatureToggles();
this.props.fetchFeatureMetrics();
this.timer = setInterval(function () {
_this2.props.fetchFeatureMetrics();
}, 5000);
}
}, {
key: 'componentWillUnmount',
value: function componentWillUnmount() {
clearInterval(this.timer);
}
}, {
key: 'toggleMetrics',
value: function toggleMetrics() {
this.props.updateSetting('showLastHour', !this.props.settings.showLastHour);
}
}, {
key: 'setFilter',
value: function setFilter(v) {
this.props.updateSetting('filter', typeof v === 'string' ? v.trim() : '');
}
}, {
key: 'setSort',
value: function setSort(v) {
this.props.updateSetting('sort', typeof v === 'string' ? v.trim() : '');
}
}, {
key: 'render',
value: function render() {
var _this3 = this;
var _props = this.props,
features = _props.features,
onFeatureClick = _props.onFeatureClick,
onFeatureRemove = _props.onFeatureRemove,
featureMetrics = _props.featureMetrics,
settings = _props.settings;
return _react2.default.createElement(
'div',
null,
_react2.default.createElement(
'div',
{ className: _feature2.default.topList },
_react2.default.createElement(
_reactMdl.Chip,
{ onClick: function onClick() {
return _this3.toggleMetrics();
}, className: _feature2.default.topListItem0 },
settings.showLastHour && _react2.default.createElement(
_reactMdl.ChipContact,
{ className: 'mdl-color--teal mdl-color-text--white' },
_react2.default.createElement(_reactMdl.Icon, { name: 'hourglass_full', style: { fontSize: '16px' } })
),
'1 hour'
),
'\xA0',
_react2.default.createElement(
_reactMdl.Chip,
{ onClick: function onClick() {
return _this3.toggleMetrics();
}, className: _feature2.default.topListItem0 },
!settings.showLastHour && _react2.default.createElement(
_reactMdl.ChipContact,
{ className: 'mdl-color--teal mdl-color-text--white' },
_react2.default.createElement(_reactMdl.Icon, { name: 'hourglass_empty', style: { fontSize: '16px' } })
),
'1 minute'
),
_react2.default.createElement(
'div',
{ className: _feature2.default.topListItem2, style: { margin: '-10px 10px 0 10px' } },
_react2.default.createElement(_reactMdl.Textfield, {
floatingLabel: true,
value: settings.filter,
onChange: function onChange(e) {
_this3.setFilter(e.target.value);
},
label: 'Filter toggles',
style: { width: '100%' }
})
),
_react2.default.createElement(
'div',
{ style: { position: 'relative' }, className: _feature2.default.topListItem0 },
_react2.default.createElement(_reactMdl.IconButton, { name: 'sort', id: 'demo-menu-top-right', colored: true, title: 'Sort' }),
_react2.default.createElement(
_reactMdl.Menu,
{ target: 'demo-menu-top-right', valign: 'bottom', align: 'right', ripple: true, onClick: function onClick(e) {
return _this3.setSort(e.target.getAttribute('data-target'));
} },
_react2.default.createElement(
_reactMdl.MenuItem,
{ disabled: true },
'Filter by:'
),
_react2.default.createElement(
_reactMdl.MenuItem,
{ disabled: !settings.sort || settings.sort === 'nosort', 'data-target': 'nosort' },
'Default'
),
_react2.default.createElement(
_reactMdl.MenuItem,
{ disabled: settings.sort === 'name', 'data-target': 'name' },
'Name'
),
_react2.default.createElement(
_reactMdl.MenuItem,
{ disabled: settings.sort === 'enabled', 'data-target': 'enabled' },
'Enabled'
),
_react2.default.createElement(
_reactMdl.MenuItem,
{ disabled: settings.sort === 'appName', 'data-target': 'appName' },
'Application name'
),
_react2.default.createElement(
_reactMdl.MenuItem,
{ disabled: settings.sort === 'created', 'data-target': 'created' },
'Created'
),
_react2.default.createElement(
_reactMdl.MenuItem,
{ disabled: settings.sort === 'strategies', 'data-target': 'strategies' },
'Strategies'
),
_react2.default.createElement(
_reactMdl.MenuItem,
{ disabled: settings.sort === 'metrics', 'data-target': 'metrics' },
'Metrics'
)
)
),
_react2.default.createElement(
_reactRouter.Link,
{ to: '/features/create', className: _feature2.default.topListItem0 },
_react2.default.createElement(
_reactMdl.FABButton,
{ ripple: true, component: 'span', mini: true },
_react2.default.createElement(_reactMdl.Icon, { name: 'add' })
)
)
),
_react2.default.createElement(
'ul',
{ className: 'demo-list-item mdl-list' },
features.map(function (feature, i) {
return _react2.default.createElement(_featureListItemComponent2.default, { key: i,
settings: settings,
metricsLastHour: featureMetrics.lastHour[feature.name],
metricsLastMinute: featureMetrics.lastMinute[feature.name],
feature: feature,
onFeatureClick: onFeatureClick,
onFeatureRemove: onFeatureRemove });
})
),
_react2.default.createElement('hr', null),
_react2.default.createElement(
_reactRouter.Link,
{ to: '/features/create', className: _feature2.default.topListItem0 },
_react2.default.createElement(
_reactMdl.FABButton,
{ ripple: true, component: 'span', mini: true },
_react2.default.createElement(_reactMdl.Icon, { name: 'add' })
)
)
);
}
}], [{
key: 'propTypes',
value: function propTypes() {
return {
onFeatureClick: _react.PropTypes.func.isRequired,
onFeatureRemove: _react.PropTypes.func.isRequired,
features: _react.PropTypes.array.isRequired,
featureMetrics: _react.PropTypes.object.isRequired,
fetchFeatureToggles: _react.PropTypes.func.isRequired,
fetchFeatureMetrics: _react.PropTypes.func.isRequired
};
}
}]);
return FeatureListComponent;
}(_react2.default.PureComponent);
FeatureListComponent.contextTypes = {
router: _react2.default.PropTypes.object
};
exports.default = FeatureListComponent;
/***/ },
/* 191 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _reactRedux = __webpack_require__(8);
var _featureActions = __webpack_require__(29);
var _featureMetricsActions = __webpack_require__(61);
var _actions = __webpack_require__(62);
var _listComponent = __webpack_require__(190);
var _listComponent2 = _interopRequireDefault(_listComponent);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var mapStateToProps = function mapStateToProps(state) {
var featureMetrics = state.featureMetrics.toJS();
var settings = state.settings.toJS().feature || {};
var features = state.features.toJS();
if (settings.filter) {
features = features.filter(function (feature) {
return feature.name.indexOf(settings.filter) > -1 || feature.description.indexOf(settings.filter) > -1 || feature.strategies.some(function (s) {
return s && s.name && s.name.indexOf(settings.filter) > -1;
});
});
}
if (settings.sort) {
if (settings.sort === 'enabled') {
features = features.sort(function (a, b) {
return (
// eslint-disable-next-line
a.enabled === b.enabled ? 0 : a.enabled ? -1 : 1
);
});
} else if (settings.sort === 'appName') {
// AppName
// features = features.sort((a, b) => {
// if (a.appName < b.appName) { return -1; }
// if (a.appName > b.appName) { return 1; }
// return 0;
// });
} else if (settings.sort === 'created') {
features = features.sort(function (a, b) {
return new Date(a.createdAt) > new Date(b.createdAt) ? -1 : 1;
});
} else if (settings.sort === 'name') {
features = features.sort(function (a, b) {
if (a.name < b.name) {
return -1;
}
if (a.name > b.name) {
return 1;
}
return 0;
});
} else if (settings.sort === 'strategies') {
features = features.sort(function (a, b) {
return a.strategies.length > b.strategies.length ? -1 : 1;
});
} else if (settings.sort === 'metrics') {
(function () {
var target = settings.showLastHour ? featureMetrics.lastHour : featureMetrics.lastMinute;
features = features.sort(function (a, b) {
if (!target[a.name]) {
return 1;
}
if (!target[b.name]) {
return -1;
}
if (target[a.name].yes > target[b.name].yes) {
return -1;
}
return 1;
});
})();
}
}
return {
features: features,
featureMetrics: featureMetrics,
settings: settings
};
};
var mapDispatchToProps = {
onFeatureClick: _featureActions.toggleFeature,
onFeatureRemove: _featureActions.removeFeatureToggle,
fetchFeatureToggles: _featureActions.fetchFeatureToggles,
fetchFeatureMetrics: _featureMetricsActions.fetchFeatureMetrics,
updateSetting: (0, _actions.updateSettingForGroup)('feature')
};
var FeatureListContainer = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_listComponent2.default);
exports.default = FeatureListContainer;
/***/ },
/* 192 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _reactMdl = __webpack_require__(9);
var _reactRouter = __webpack_require__(25);
var _percent = __webpack_require__(122);
var _percent2 = _interopRequireDefault(_percent);
var _progress = __webpack_require__(105);
var _progress2 = _interopRequireDefault(_progress);
var _reactRedux = __webpack_require__(8);
var _formEditContainer = __webpack_require__(184);
var _formEditContainer2 = _interopRequireDefault(_formEditContainer);
var _featureActions = __webpack_require__(29);
var _featureMetricsActions = __webpack_require__(61);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
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; }
var EditFeatureToggleWrapper = function (_React$Component) {
_inherits(EditFeatureToggleWrapper, _React$Component);
function EditFeatureToggleWrapper() {
_classCallCheck(this, EditFeatureToggleWrapper);
return _possibleConstructorReturn(this, (EditFeatureToggleWrapper.__proto__ || Object.getPrototypeOf(EditFeatureToggleWrapper)).apply(this, arguments));
}
_createClass(EditFeatureToggleWrapper, [{
key: 'componentWillMount',
value: function componentWillMount() {
var _this2 = this;
if (this.props.features.length === 0) {
this.props.fetchFeatureToggles();
}
this.props.fetchSeenApps();
this.props.fetchFeatureMetrics();
this.timer = setInterval(function () {
_this2.props.fetchSeenApps();
_this2.props.fetchFeatureMetrics();
}, 5000);
}
}, {
key: 'componentWillUnmount',
value: function componentWillUnmount() {
clearInterval(this.timer);
}
}, {
key: 'render',
value: function render() {
var _props = this.props,
toggleFeature = _props.toggleFeature,
features = _props.features,
featureToggleName = _props.featureToggleName,
_props$metrics = _props.metrics,
metrics = _props$metrics === undefined ? {} : _props$metrics;
var _metrics$lastHour = metrics.lastHour,
lastHour = _metrics$lastHour === undefined ? { yes: 0, no: 0, isFallback: true } : _metrics$lastHour,
_metrics$lastMinute = metrics.lastMinute,
lastMinute = _metrics$lastMinute === undefined ? { yes: 0, no: 0, isFallback: true } : _metrics$lastMinute,
_metrics$seenApps = metrics.seenApps,
seenApps = _metrics$seenApps === undefined ? [] : _metrics$seenApps;
var lastHourPercent = 1 * _percent2.default.calc(lastHour.yes, lastHour.yes + lastHour.no, 0);
var lastMinutePercent = 1 * _percent2.default.calc(lastMinute.yes, lastMinute.yes + lastMinute.no, 0);
var featureToggle = features.find(function (toggle) {
return toggle.name === featureToggleName;
});
if (!featureToggle) {
if (features.length === 0) {
return _react2.default.createElement(
'span',
null,
'Loading'
);
}
return _react2.default.createElement(
'span',
null,
'Could not find ',
this.props.featureToggleName
);
}
return _react2.default.createElement(
'div',
null,
_react2.default.createElement(
'h4',
null,
featureToggle.name,
' ',
_react2.default.createElement(
'small',
null,
featureToggle.enabled ? 'is enabled' : 'is disabled'
)
),
_react2.default.createElement('hr', null),
_react2.default.createElement(
'div',
{ style: { maxWidth: '200px' } },
_react2.default.createElement(
_reactMdl.Switch,
{ style: { cursor: 'pointer' }, onChange: function onChange() {
return toggleFeature(featureToggle);
}, checked: featureToggle.enabled },
'Toggle ',
featureToggle.name
)
),
_react2.default.createElement('hr', null),
_react2.default.createElement(
_reactMdl.Grid,
{ style: { textAlign: 'center' } },
_react2.default.createElement(
_reactMdl.Cell,
{ col: 3 },
lastMinute.isFallback ? _react2.default.createElement(_reactMdl.Icon, { style: { width: '100px', height: '100px', fontSize: '100px', color: '#ccc' }, name: 'report problem', title: 'No metrics avaiable' }) : _react2.default.createElement(
'div',
null,
_react2.default.createElement(_progress2.default, { strokeWidth: 10, percentage: lastMinutePercent, width: '50' })
),
_react2.default.createElement(
'p',
null,
_react2.default.createElement(
'strong',
null,
'Last minute'
),
_react2.default.createElement('br', null),
' Yes ',
lastMinute.yes,
', No: ',
lastMinute.no
)
),
_react2.default.createElement(
_reactMdl.Cell,
{ col: 3 },
lastHour.isFallback ? _react2.default.createElement(_reactMdl.Icon, { style: { width: '100px', height: '100px', fontSize: '100px', color: '#ccc' }, name: 'report problem', title: 'No metrics avaiable' }) : _react2.default.createElement(
'div',
null,
_react2.default.createElement(_progress2.default, { strokeWidth: 10, percentage: lastHourPercent, width: '50' })
),
_react2.default.createElement(
'p',
null,
_react2.default.createElement(
'strong',
null,
'Last hour'
),
_react2.default.createElement('br', null),
' Yes ',
lastHour.yes,
', No: ',
lastHour.no
)
),
_react2.default.createElement(
_reactMdl.Cell,
{ col: 3 },
seenApps.length > 0 ? _react2.default.createElement(
'div',
null,
_react2.default.createElement(
'strong',
null,
'Seen in applications:'
)
) : _react2.default.createElement(
'div',
null,
_react2.default.createElement(_reactMdl.Icon, { style: { width: '100px', height: '100px', fontSize: '100px', color: '#ccc' }, name: 'report problem', title: 'Not used in a app in the last hour' }),
_react2.default.createElement(
'div',
null,
_react2.default.createElement(
'small',
null,
_react2.default.createElement(
'strong',
null,
'Not used in a app in the last hour.'
),
' This might be due to your client implementation is not reporting usage.'
)
)
),
seenApps.length > 0 && seenApps.map(function (appName) {
return _react2.default.createElement(
_reactRouter.Link,
{ key: appName, to: '/applications/' + appName },
appName
);
}),
_react2.default.createElement(
'p',
null,
'add instances count?'
)
),
_react2.default.createElement(
_reactMdl.Cell,
{ col: 3 },
_react2.default.createElement(
'p',
null,
'add history'
)
)
),
_react2.default.createElement('hr', null),
_react2.default.createElement(
'h4',
null,
'Edit'
),
_react2.default.createElement(_formEditContainer2.default, { featureToggle: featureToggle })
);
}
}], [{
key: 'propTypes',
value: function propTypes() {
return {
featureToggleName: _react.PropTypes.string.isRequired,
features: _react.PropTypes.array.isRequired,
fetchFeatureToggles: _react.PropTypes.array.isRequired
};
}
}]);
return EditFeatureToggleWrapper;
}(_react2.default.Component);
function getMetricsForToggle(state, toggleName) {
if (!toggleName) {
return;
}
var result = {};
if (state.featureMetrics.hasIn(['seenApps', toggleName])) {
result.seenApps = state.featureMetrics.getIn(['seenApps', toggleName]);
}
if (state.featureMetrics.hasIn(['lastHour', toggleName])) {
result.lastHour = state.featureMetrics.getIn(['lastHour', toggleName]);
result.lastMinute = state.featureMetrics.getIn(['lastMinute', toggleName]);
}
return result;
}
exports.default = (0, _reactRedux.connect)(function (state, props) {
return {
features: state.features.toJS(),
metrics: getMetricsForToggle(state, props.featureToggleName)
};
}, {
fetchFeatureMetrics: _featureMetricsActions.fetchFeatureMetrics,
fetchFeatureToggles: _featureActions.fetchFeatureToggles,
toggleFeature: _featureActions.toggleFeature,
fetchSeenApps: _featureMetricsActions.fetchSeenApps
})(EditFeatureToggleWrapper);
/***/ },
/* 193 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _historyListContainer = __webpack_require__(106);
var _historyListContainer2 = _interopRequireDefault(_historyListContainer);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
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; }
var History = function (_PureComponent) {
_inherits(History, _PureComponent);
function History() {
_classCallCheck(this, History);
return _possibleConstructorReturn(this, (History.__proto__ || Object.getPrototypeOf(History)).apply(this, arguments));
}
_createClass(History, [{
key: 'componentDidMount',
value: function componentDidMount() {
this.props.fetchHistory();
}
}, {
key: 'toggleShowDiff',
value: function toggleShowDiff() {
this.setState({ showData: !this.state.showData });
}
}, {
key: 'render',
value: function render() {
var history = this.props.history;
if (history.length < 0) {
return;
}
return _react2.default.createElement(
'div',
null,
_react2.default.createElement(
'h5',
null,
'Last 100 changes'
),
_react2.default.createElement(_historyListContainer2.default, { history: history })
);
}
}]);
return History;
}(_react.PureComponent);
exports.default = History;
/***/ },
/* 194 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _reactRedux = __webpack_require__(8);
var _historyComponent = __webpack_require__(193);
var _historyComponent2 = _interopRequireDefault(_historyComponent);
var _historyActions = __webpack_require__(111);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var mapStateToProps = function mapStateToProps(state) {
var history = state.history.get('list').toArray();
return {
history: history
};
};
var HistoryListContainer = (0, _reactRedux.connect)(mapStateToProps, { fetchHistory: _historyActions.fetchHistory })(_historyComponent2.default);
exports.default = HistoryListContainer;
/***/ },
/* 195 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _reactMdl = __webpack_require__(9);
var _history = __webpack_require__(65);
var _history2 = _interopRequireDefault(_history);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
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; }
var DIFF_PREFIXES = {
A: ' ',
E: ' ',
D: '-',
N: '+'
};
var SPADEN_CLASS = {
A: _history2.default.blue, // array edited
E: _history2.default.blue, // edited
D: _history2.default.negative, // deleted
N: _history2.default.positive };
function getIcon(type) {
switch (type) {
case 'feature-updated':
return 'autorenew';
case 'feature-created':
return 'add';
case 'feature-deleted':
return 'remove';
case 'feature-archived':
return 'archived';
default:
return 'star';
}
}
function buildItemDiff(diff, key) {
var change = void 0;
if (diff.lhs !== undefined) {
change = _react2.default.createElement(
'div',
null,
_react2.default.createElement(
'div',
{ className: SPADEN_CLASS.D },
'- ',
key,
': ',
JSON.stringify(diff.lhs)
)
);
} else if (diff.rhs !== undefined) {
change = _react2.default.createElement(
'div',
null,
_react2.default.createElement(
'div',
{ className: SPADEN_CLASS.N },
'+ ',
key,
': ',
JSON.stringify(diff.rhs)
)
);
}
return change;
}
function buildDiff(diff, idx) {
var change = void 0;
var key = diff.path.join('.');
if (diff.item) {
change = buildItemDiff(diff.item, key);
} else if (diff.lhs !== undefined && diff.rhs !== undefined) {
change = _react2.default.createElement(
'div',
null,
_react2.default.createElement(
'div',
{ className: SPADEN_CLASS.D },
'- ',
key,
': ',
JSON.stringify(diff.lhs)
),
_react2.default.createElement(
'div',
{ className: SPADEN_CLASS.N },
'+ ',
key,
': ',
JSON.stringify(diff.rhs)
)
);
} else {
var spadenClass = SPADEN_CLASS[diff.kind];
var prefix = DIFF_PREFIXES[diff.kind];
change = _react2.default.createElement(
'div',
{ className: spadenClass },
prefix,
' ',
key,
': ',
JSON.stringify(diff.rhs || diff.item)
);
}
return _react2.default.createElement(
'div',
{ key: idx },
change
);
}
var HistoryItem = function (_PureComponent) {
_inherits(HistoryItem, _PureComponent);
function HistoryItem() {
_classCallCheck(this, HistoryItem);
return _possibleConstructorReturn(this, (HistoryItem.__proto__ || Object.getPrototypeOf(HistoryItem)).apply(this, arguments));
}
_createClass(HistoryItem, [{
key: 'renderEventDiff',
value: function renderEventDiff(logEntry) {
var changes = void 0;
if (logEntry.diffs) {
changes = logEntry.diffs.map(buildDiff);
} else {
// Just show the data if there is no diff yet.
changes = _react2.default.createElement(
'div',
{ className: SPADEN_CLASS.N },
JSON.stringify(logEntry.data, null, 2)
);
}
return _react2.default.createElement(
'code',
{ className: 'smalltext man' },
changes.length === 0 ? '(no changes)' : changes
);
}
}, {
key: 'render',
value: function render() {
var _props$entry = this.props.entry,
createdBy = _props$entry.createdBy,
id = _props$entry.id,
type = _props$entry.type;
var createdAt = new Date(this.props.entry.createdAt).toLocaleString('nb-NO');
var icon = getIcon(type);
var data = this.renderEventDiff(this.props.entry);
return _react2.default.createElement(
'div',
{ className: _history2.default['history-item'] },
_react2.default.createElement(
'dl',
null,
_react2.default.createElement(
'dt',
null,
'Id:'
),
_react2.default.createElement(
'dd',
null,
id
),
_react2.default.createElement(
'dt',
null,
'Type:'
),
_react2.default.createElement(
'dd',
null,
_react2.default.createElement(_reactMdl.Icon, { name: icon, title: type, style: { fontSize: '1.6rem' } }),
_react2.default.createElement(
'span',
null,
' ',
type
)
),
_react2.default.createElement(
'dt',
null,
'Timestamp:'
),
_react2.default.createElement(
'dd',
null,
createdAt
),
_react2.default.createElement(
'dt',
null,
'Username:'
),
_react2.default.createElement(
'dd',
null,
createdBy
),
_react2.default.createElement(
'dt',
null,
'Diff'
),
_react2.default.createElement(
'dd',
null,
data
)
)
);
}
}], [{
key: 'propTypes',
value: function propTypes() {
return {
entry: _react.PropTypes.object
};
}
}]);
return HistoryItem;
}(_react.PureComponent);
exports.default = HistoryItem;
/***/ },
/* 196 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _history = __webpack_require__(65);
var _history2 = _interopRequireDefault(_history);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
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; }
var HistoryItem = function (_PureComponent) {
_inherits(HistoryItem, _PureComponent);
function HistoryItem() {
_classCallCheck(this, HistoryItem);
return _possibleConstructorReturn(this, (HistoryItem.__proto__ || Object.getPrototypeOf(HistoryItem)).apply(this, arguments));
}
_createClass(HistoryItem, [{
key: 'render',
value: function render() {
var localEventData = JSON.parse(JSON.stringify(this.props.entry));
delete localEventData.description;
delete localEventData.name;
delete localEventData.diffs;
var prettyPrinted = JSON.stringify(localEventData, null, 2);
return _react2.default.createElement(
'div',
{ className: _history2.default['history-item'] },
_react2.default.createElement(
'div',
null,
_react2.default.createElement(
'code',
{ className: 'JSON smalltext man' },
prettyPrinted
)
)
);
}
}], [{
key: 'propTypes',
value: function propTypes() {
return {
entry: _react.PropTypes.object
};
}
}]);
return HistoryItem;
}(_react.PureComponent);
exports.default = HistoryItem;
/***/ },
/* 197 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _historyItemDiff = __webpack_require__(195);
var _historyItemDiff2 = _interopRequireDefault(_historyItemDiff);
var _historyItemJson = __webpack_require__(196);
var _historyItemJson2 = _interopRequireDefault(_historyItemJson);
var _reactMdl = __webpack_require__(9);
var _history = __webpack_require__(65);
var _history2 = _interopRequireDefault(_history);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
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; }
var HistoryList = function (_Component) {
_inherits(HistoryList, _Component);
function HistoryList() {
_classCallCheck(this, HistoryList);
return _possibleConstructorReturn(this, (HistoryList.__proto__ || Object.getPrototypeOf(HistoryList)).apply(this, arguments));
}
_createClass(HistoryList, [{
key: 'toggleShowDiff',
value: function toggleShowDiff() {
this.props.updateSetting('showData', !this.props.settings.showData);
}
}, {
key: 'render',
value: function render() {
var showData = this.props.settings.showData;
var history = this.props.history;
if (!history || history.length < 0) {
return null;
}
var entries = void 0;
if (showData) {
entries = history.map(function (entry) {
return _react2.default.createElement(_historyItemJson2.default, { key: 'log' + entry.id, entry: entry });
});
} else {
entries = history.map(function (entry) {
return _react2.default.createElement(_historyItemDiff2.default, { key: 'log' + entry.id, entry: entry });
});
}
return _react2.default.createElement(
'div',
{ className: _history2.default.history },
_react2.default.createElement(
_reactMdl.Switch,
{ checked: showData, onChange: this.toggleShowDiff.bind(this) },
'Show full events'
),
entries
);
}
}]);
return HistoryList;
}(_react.Component);
exports.default = HistoryList;
/***/ },
/* 198 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _historyListContainer = __webpack_require__(106);
var _historyListContainer2 = _interopRequireDefault(_historyListContainer);
var _historyApi = __webpack_require__(107);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
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; }
var HistoryListToggle = function (_Component) {
_inherits(HistoryListToggle, _Component);
function HistoryListToggle(props) {
_classCallCheck(this, HistoryListToggle);
var _this = _possibleConstructorReturn(this, (HistoryListToggle.__proto__ || Object.getPrototypeOf(HistoryListToggle)).call(this, props));
_this.state = {
fetching: true,
history: undefined
};
return _this;
}
_createClass(HistoryListToggle, [{
key: 'componentDidMount',
value: function componentDidMount() {
var _this2 = this;
(0, _historyApi.fetchHistoryForToggle)(this.props.toggleName).then(function (res) {
return _this2.setState({ history: res, fetching: false });
});
}
}, {
key: 'render',
value: function render() {
if (this.state.fetching) {
return _react2.default.createElement(
'span',
null,
'fetching..'
);
}
return _react2.default.createElement(
'div',
null,
_react2.default.createElement(
'h5',
null,
'Showing history for toggle: ',
_react2.default.createElement(
'strong',
null,
this.props.toggleName
)
),
_react2.default.createElement(_historyListContainer2.default, { history: this.state.history })
);
}
}], [{
key: 'propTypes',
value: function propTypes() {
return {
toggleName: _react.PropTypes.string.isRequired
};
}
}]);
return HistoryListToggle;
}(_react.Component);
exports.default = HistoryListToggle;
/***/ },
/* 199 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _reactRedux = __webpack_require__(8);
var _inputHelpers = __webpack_require__(59);
var _strategyActions = __webpack_require__(45);
var _addStrategy = __webpack_require__(200);
var _addStrategy2 = _interopRequireDefault(_addStrategy);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var ID = 'add-strategy';
var prepare = function prepare(methods, dispatch) {
methods.onSubmit = function (input) {
return function (e) {
e.preventDefault();
var parametersTemplate = {};
Object.keys(input).forEach(function (key) {
if (key.startsWith(_addStrategy.PARAM_PREFIX)) {
parametersTemplate[input[key]] = 'string';
}
});
input.parametersTemplate = parametersTemplate;
(0, _strategyActions.createStrategy)(input)(dispatch).then(function () {
return methods.clear();
})
// somewhat quickfix / hacky to go back..
.then(function () {
return window.history.back();
});
};
};
methods.onCancel = function (e) {
e.preventDefault();
methods.clear();
// somewhat quickfix / hacky to go back..
window.history.back();
};
return methods;
};
var actions = (0, _inputHelpers.createActions)({
id: ID,
prepare: prepare
});
exports.default = (0, _reactRedux.connect)((0, _inputHelpers.createMapper)({ id: ID }), actions)(_addStrategy2.default);
/***/ },
/* 200 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.PARAM_PREFIX = undefined;
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _reactMdl = __webpack_require__(9);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var trim = function trim(value) {
if (value && value.trim) {
return value.trim();
} else {
return value;
}
};
function gerArrayWithEntries(num) {
return Array.from(Array(num));
}
var PARAM_PREFIX = exports.PARAM_PREFIX = 'param_';
var genParams = function genParams(input) {
var num = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
var setValue = arguments[2];
return _react2.default.createElement(
'div',
null,
gerArrayWithEntries(num).map(function (v, i) {
var key = '' + PARAM_PREFIX + (i + 1);
return _react2.default.createElement(_reactMdl.Textfield, {
label: 'Parameter name ' + (i + 1),
name: key, key: key,
onChange: function onChange(_ref) {
var target = _ref.target;
return setValue(key, target.value);
},
value: input[key] });
})
);
};
var AddStrategy = function AddStrategy(_ref2) {
var input = _ref2.input,
setValue = _ref2.setValue,
incValue = _ref2.incValue,
onCancel = _ref2.onCancel,
onSubmit = _ref2.onSubmit;
return _react2.default.createElement(
'form',
{ onSubmit: onSubmit(input) },
_react2.default.createElement(
'section',
null,
_react2.default.createElement(_reactMdl.Textfield, { label: 'Strategy name',
name: 'name', required: true,
pattern: '^[0-9a-zA-Z\\.\\-]+$',
onChange: function onChange(_ref3) {
var target = _ref3.target;
return setValue('name', trim(target.value));
},
value: input.name
}),
_react2.default.createElement('br', null),
_react2.default.createElement(_reactMdl.Textfield, {
rows: 2,
label: 'Description',
name: 'description',
onChange: function onChange(_ref4) {
var target = _ref4.target;
return setValue('description', target.value);
},
value: input.description
})
),
_react2.default.createElement(
'section',
null,
genParams(input, input._params, setValue),
_react2.default.createElement(_reactMdl.IconButton, { name: 'add', title: 'Add parameter', onClick: function onClick(e) {
e.preventDefault();
incValue('_params');
} })
),
_react2.default.createElement('br', null),
_react2.default.createElement('hr', null),
_react2.default.createElement(
'section',
null,
_react2.default.createElement(
_reactMdl.Button,
{ type: 'submit', raised: true, primary: true },
'Create'
),
'\xA0',
_react2.default.createElement(
_reactMdl.Button,
{ type: 'cancel', raised: true, onClick: onCancel },
'Cancel'
)
)
);
};
AddStrategy.propTypes = {
input: _react.PropTypes.object,
setValue: _react.PropTypes.func,
incValue: _react.PropTypes.func,
clear: _react.PropTypes.func,
onCancel: _react.PropTypes.func,
onSubmit: _react.PropTypes.func
};
exports.default = AddStrategy;
/***/ },
/* 201 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _reactMdl = __webpack_require__(9);
var _strategies = __webpack_require__(245);
var _strategies2 = _interopRequireDefault(_strategies);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
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; }
var StrategiesListComponent = function (_Component) {
_inherits(StrategiesListComponent, _Component);
function StrategiesListComponent() {
_classCallCheck(this, StrategiesListComponent);
return _possibleConstructorReturn(this, (StrategiesListComponent.__proto__ || Object.getPrototypeOf(StrategiesListComponent)).apply(this, arguments));
}
_createClass(StrategiesListComponent, [{
key: 'componentDidMount',
value: function componentDidMount() {
this.props.fetchStrategies();
}
}, {
key: 'getParameterMap',
value: function getParameterMap(_ref) {
var parametersTemplate = _ref.parametersTemplate;
return Object.keys(parametersTemplate || {}).map(function (k) {
return _react2.default.createElement(
_reactMdl.Chip,
{ key: k },
_react2.default.createElement(
'small',
null,
k
)
);
});
}
}, {
key: 'render',
value: function render() {
var _this2 = this;
var _props = this.props,
strategies = _props.strategies,
removeStrategy = _props.removeStrategy;
return _react2.default.createElement(
'div',
null,
_react2.default.createElement(
'h5',
null,
'Strategies'
),
_react2.default.createElement(_reactMdl.IconButton, { name: 'add', onClick: function onClick() {
return _this2.context.router.push('/strategies/create');
}, title: 'Add new strategy' }),
_react2.default.createElement('hr', null),
_react2.default.createElement(
_reactMdl.List,
null,
strategies.length > 0 ? strategies.map(function (strategy, i) {
return _react2.default.createElement(
_reactMdl.ListItem,
{ key: i },
_react2.default.createElement(
_reactMdl.ListItemContent,
null,
_react2.default.createElement(
'strong',
null,
strategy.name
),
' ',
strategy.description
),
_react2.default.createElement(_reactMdl.IconButton, { name: 'delete', onClick: function onClick() {
return removeStrategy(strategy);
} })
);
}) : _react2.default.createElement(
_reactMdl.ListItem,
null,
'No entries'
)
)
);
}
}]);
return StrategiesListComponent;
}(_react.Component);
StrategiesListComponent.contextTypes = {
router: _react2.default.PropTypes.object
};
exports.default = StrategiesListComponent;
/***/ },
/* 202 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _reactRedux = __webpack_require__(8);
var _listComponent = __webpack_require__(201);
var _listComponent2 = _interopRequireDefault(_listComponent);
var _strategyActions = __webpack_require__(45);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var mapStateToProps = function mapStateToProps(state) {
var list = state.strategies.get('list').toArray();
return {
strategies: list
};
};
var mapDispatchToProps = function mapDispatchToProps(dispatch) {
return {
removeStrategy: function removeStrategy(strategy) {
if (window.confirm('Are you sure you want to remove this strategy?')) {
// eslint-disable-line no-alert
(0, _strategyActions.removeStrategy)(strategy)(dispatch);
}
},
fetchStrategies: function fetchStrategies() {
return (0, _strategyActions.fetchStrategies)()(dispatch);
}
};
};
var StrategiesListContainer = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_listComponent2.default);
exports.default = StrategiesListContainer;
/***/ },
/* 203 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
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; }
var ShowUserComponent = function (_React$Component) {
_inherits(ShowUserComponent, _React$Component);
function ShowUserComponent() {
var _ref;
var _temp, _this, _ret;
_classCallCheck(this, ShowUserComponent);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = ShowUserComponent.__proto__ || Object.getPrototypeOf(ShowUserComponent)).call.apply(_ref, [this].concat(args))), _this), _this.openEdit = function (evt) {
evt.preventDefault();
_this.props.openEdit();
}, _temp), _possibleConstructorReturn(_this, _ret);
}
_createClass(ShowUserComponent, [{
key: "render",
value: function render() {
return _react2.default.createElement(
"a",
{ className: "mdl-navigation__link", href: "#edit-user", onClick: this.openEdit, style: {} },
"Username:\xA0",
_react2.default.createElement(
"strong",
null,
this.props.user.userName || 'Unknown'
)
);
}
}], [{
key: "propTypes",
value: function propTypes() {
return {
user: _react.PropTypes.object.isRequired,
openEdit: _react.PropTypes.func.isRequired
};
}
}]);
return ShowUserComponent;
}(_react2.default.Component);
exports.default = ShowUserComponent;
/***/ },
/* 204 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _reactRedux = __webpack_require__(8);
var _showUserComponent = __webpack_require__(203);
var _showUserComponent2 = _interopRequireDefault(_showUserComponent);
var _actions = __webpack_require__(63);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var mapDispatchToProps = {
openEdit: _actions.openEdit
};
var mapStateToProps = function mapStateToProps(state) {
return {
user: state.user.toJS()
};
};
exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_showUserComponent2.default);
/***/ },
/* 205 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _reactMdl = __webpack_require__(9);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
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; }
var EditUserComponent = function (_React$Component) {
_inherits(EditUserComponent, _React$Component);
function EditUserComponent() {
var _ref;
var _temp, _this, _ret;
_classCallCheck(this, EditUserComponent);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = EditUserComponent.__proto__ || Object.getPrototypeOf(EditUserComponent)).call.apply(_ref, [this].concat(args))), _this), _this.handleSubmit = function (evt) {
evt.preventDefault();
_this.props.save();
}, _temp), _possibleConstructorReturn(_this, _ret);
}
_createClass(EditUserComponent, [{
key: 'render',
value: function render() {
var _this2 = this;
return _react2.default.createElement(
'div',
null,
_react2.default.createElement(
_reactMdl.Dialog,
{ open: this.props.user.showDialog },
_react2.default.createElement(
_reactMdl.DialogTitle,
null,
'Action required'
),
_react2.default.createElement(
_reactMdl.DialogContent,
null,
_react2.default.createElement(
'p',
null,
'You are logged in as:You hav to specify a username to use Unleash. This will allow us to track changes.'
),
_react2.default.createElement(
'form',
{ onSubmit: this.handleSubmit },
_react2.default.createElement(_reactMdl.Textfield, {
label: 'USERNAME',
name: 'username',
required: true,
value: this.props.user.userName,
onChange: function onChange(e) {
return _this2.props.updateUserName(e.target.value);
}
})
)
),
_react2.default.createElement(
_reactMdl.DialogActions,
null,
_react2.default.createElement(
_reactMdl.Button,
{ onClick: this.props.save },
'Save'
)
)
)
);
}
}], [{
key: 'propTypes',
value: function propTypes() {
return {
user: _react.PropTypes.object.isRequired,
updateUserName: _react.PropTypes.func.isRequired
};
}
}]);
return EditUserComponent;
}(_react2.default.Component);
exports.default = EditUserComponent;
/***/ },
/* 206 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _reactRedux = __webpack_require__(8);
var _userComponent = __webpack_require__(205);
var _userComponent2 = _interopRequireDefault(_userComponent);
var _actions = __webpack_require__(63);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var mapDispatchToProps = {
updateUserName: _actions.updateUserName,
save: _actions.save
};
var mapStateToProps = function mapStateToProps(state) {
return {
user: state.user.toJS()
};
};
exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_userComponent2.default);
/***/ },
/* 207 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
var _helper = __webpack_require__(19);
var URI = '/api/client/applications';
function fetchAll() {
return fetch(URI, { headers: _helper.headers }).then(_helper.throwIfNotSuccess).then(function (response) {
return response.json();
});
}
function fetchApplication(appName) {
return fetch(URI + '/' + appName, { headers: _helper.headers }).then(_helper.throwIfNotSuccess).then(function (response) {
return response.json();
});
}
module.exports = {
fetchApplication: fetchApplication,
fetchAll: fetchAll
};
/***/ },
/* 208 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
var _helper = __webpack_require__(19);
var URI = '/api/archive';
function fetchAll() {
return fetch(URI + '/features').then(_helper.throwIfNotSuccess).then(function (response) {
return response.json();
});
}
function revive(feature) {
return fetch(URI + '/revive', {
method: 'POST',
headers: _helper.headers,
body: JSON.stringify(feature),
credentials: 'include'
}).then(_helper.throwIfNotSuccess);
}
module.exports = {
fetchAll: fetchAll,
revive: revive
};
/***/ },
/* 209 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
var _helper = __webpack_require__(19);
var URI = '/api/client/instances';
function fetchAll() {
return fetch(URI, { headers: _helper.headers }).then(_helper.throwIfNotSuccess).then(function (response) {
return response.json();
});
}
module.exports = {
fetchAll: fetchAll
};
/***/ },
/* 210 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
var _helper = __webpack_require__(19);
var URI = '/api/client/strategies';
function fetchAll() {
return fetch(URI, { headers: _helper.headers }).then(_helper.throwIfNotSuccess).then(function (response) {
return response.json();
});
}
module.exports = {
fetchAll: fetchAll
};
/***/ },
/* 211 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
var _helper = __webpack_require__(19);
var URI = '/api/features';
var URI_VALIDATE = '/api/features-validate';
function validateToggle(featureToggle) {
return new Promise(function (resolve, reject) {
if (!featureToggle.strategies || featureToggle.strategies.length === 0) {
reject(new Error('You must add at least one activation strategy'));
} else {
resolve(featureToggle);
}
});
}
function fetchAll() {
return fetch(URI).then(_helper.throwIfNotSuccess).then(function (response) {
return response.json();
});
}
function create(featureToggle) {
return validateToggle(featureToggle).then(function () {
return fetch(URI, {
method: 'POST',
headers: _helper.headers,
credentials: 'include',
body: JSON.stringify(featureToggle)
});
}).then(_helper.throwIfNotSuccess);
}
function validate(featureToggle) {
return fetch(URI_VALIDATE, {
method: 'POST',
headers: _helper.headers,
credentials: 'include',
body: JSON.stringify(featureToggle)
}).then(_helper.throwIfNotSuccess);
}
function update(featureToggle) {
return validateToggle(featureToggle).then(function () {
return fetch(URI + '/' + featureToggle.name, {
method: 'PUT',
headers: _helper.headers,
credentials: 'include',
body: JSON.stringify(featureToggle)
});
}).then(_helper.throwIfNotSuccess);
}
function remove(featureToggleName) {
return fetch(URI + '/' + featureToggleName, {
method: 'DELETE',
credentials: 'include'
}).then(_helper.throwIfNotSuccess);
}
module.exports = {
fetchAll: fetchAll,
create: create,
validate: validate,
update: update,
remove: remove
};
/***/ },
/* 212 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
var _require = __webpack_require__(19),
throwIfNotSuccess = _require.throwIfNotSuccess;
var URI = '/api/client/metrics/feature-toggles';
function fetchFeatureMetrics() {
return fetch(URI).then(throwIfNotSuccess).then(function (response) {
return response.json();
});
}
var seenURI = '/api/client/seen-apps';
function fetchSeenApps() {
return fetch(seenURI).then(throwIfNotSuccess).then(function (response) {
return response.json();
});
}
module.exports = {
fetchFeatureMetrics: fetchFeatureMetrics,
fetchSeenApps: fetchSeenApps
};
/***/ },
/* 213 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
var _helper = __webpack_require__(19);
var URI = '/api/metrics';
function fetchAll() {
return fetch(URI).then(_helper.throwIfNotSuccess).then(function (response) {
return response.json();
});
}
module.exports = {
fetchAll: fetchAll
};
/***/ },
/* 214 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
var _helper = __webpack_require__(19);
var URI = '/api/strategies';
function fetchAll() {
return fetch(URI).then(_helper.throwIfNotSuccess).then(function (response) {
return response.json();
});
}
function create(strategy) {
return fetch(URI, {
method: 'POST',
headers: _helper.headers,
body: JSON.stringify(strategy),
credentials: 'include'
}).then(_helper.throwIfNotSuccess);
}
function remove(strategy) {
return fetch(URI + '/' + strategy.name, {
method: 'DELETE',
headers: _helper.headers,
credentials: 'include'
}).then(_helper.throwIfNotSuccess);
}
module.exports = {
fetchAll: fetchAll,
create: create,
remove: remove
};
/***/ },
/* 215 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
__webpack_require__(170);
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _reactDom = __webpack_require__(15);
var _reactDom2 = _interopRequireDefault(_reactDom);
var _reactRouter = __webpack_require__(25);
var _reactRedux = __webpack_require__(8);
var _reduxThunk = __webpack_require__(405);
var _reduxThunk2 = _interopRequireDefault(_reduxThunk);
var _redux = __webpack_require__(103);
var _store = __webpack_require__(236);
var _store2 = _interopRequireDefault(_store);
var _app = __webpack_require__(171);
var _app2 = _interopRequireDefault(_app);
var _features = __webpack_require__(222);
var _features2 = _interopRequireDefault(_features);
var _create = __webpack_require__(220);
var _create2 = _interopRequireDefault(_create);
var _edit = __webpack_require__(221);
var _edit2 = _interopRequireDefault(_edit);
var _strategies = __webpack_require__(226);
var _strategies2 = _interopRequireDefault(_strategies);
var _create3 = __webpack_require__(225);
var _create4 = _interopRequireDefault(_create3);
var _history = __webpack_require__(223);
var _history2 = _interopRequireDefault(_history);
var _toggle = __webpack_require__(224);
var _toggle2 = _interopRequireDefault(_toggle);
var _archive = __webpack_require__(218);
var _archive2 = _interopRequireDefault(_archive);
var _applications = __webpack_require__(216);
var _applications2 = _interopRequireDefault(_applications);
var _view = __webpack_require__(217);
var _view2 = _interopRequireDefault(_view);
var _clientStrategies = __webpack_require__(219);
var _clientStrategies2 = _interopRequireDefault(_clientStrategies);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var unleashStore = (0, _redux.createStore)(_store2.default, (0, _redux.applyMiddleware)(_reduxThunk2.default));
_reactDom2.default.render(_react2.default.createElement(
_reactRedux.Provider,
{ store: unleashStore },
_react2.default.createElement(
_reactRouter.Router,
{ history: _reactRouter.hashHistory },
_react2.default.createElement(
_reactRouter.Route,
{ path: '/', component: _app2.default },
_react2.default.createElement(_reactRouter.IndexRedirect, { to: '/features' }),
_react2.default.createElement(_reactRouter.Route, { pageTitle: 'Features', path: '/features', component: _features2.default }),
_react2.default.createElement(_reactRouter.Route, { pageTitle: 'Features', path: '/features/create', component: _create2.default }),
_react2.default.createElement(_reactRouter.Route, { pageTitle: 'Features', path: '/features/edit/:name', component: _edit2.default }),
_react2.default.createElement(_reactRouter.Route, { pageTitle: 'Strategies', path: '/strategies', component: _strategies2.default }),
_react2.default.createElement(_reactRouter.Route, { pageTitle: 'Strategies', path: '/strategies/create', component: _create4.default }),
_react2.default.createElement(_reactRouter.Route, { pageTitle: 'History', path: '/history', component: _history2.default }),
_react2.default.createElement(_reactRouter.Route, { pageTitle: 'History', path: '/history/:toggleName', component: _toggle2.default }),
_react2.default.createElement(_reactRouter.Route, { pageTitle: 'Archive', path: '/archive', component: _archive2.default }),
_react2.default.createElement(_reactRouter.Route, { pageTitle: 'Applications', path: '/applications', component: _applications2.default }),
_react2.default.createElement(_reactRouter.Route, { pageTitle: 'Applications', path: '/applications/:name', component: _view2.default }),
_react2.default.createElement(_reactRouter.Route, { pageTitle: 'Client strategies', ppath: '/client-strategies', component: _clientStrategies2.default })
)
)
), document.getElementById('app'));
/***/ },
/* 216 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _applicationListContainer = __webpack_require__(175);
var _applicationListContainer2 = _interopRequireDefault(_applicationListContainer);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var render = function render() {
return _react2.default.createElement(_applicationListContainer2.default, null);
};
exports.default = render;
/***/ },
/* 217 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _applicationEditContainer = __webpack_require__(173);
var _applicationEditContainer2 = _interopRequireDefault(_applicationEditContainer);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var render = function render(_ref) {
var params = _ref.params;
return _react2.default.createElement(_applicationEditContainer2.default, { appName: params.name });
};
exports.default = render;
/***/ },
/* 218 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _archiveContainer = __webpack_require__(176);
var _archiveContainer2 = _interopRequireDefault(_archiveContainer);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var render = function render() {
return _react2.default.createElement(_archiveContainer2.default, null);
};
exports.default = render;
/***/ },
/* 219 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _strategyContainer = __webpack_require__(179);
var _strategyContainer2 = _interopRequireDefault(_strategyContainer);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var render = function render() {
return _react2.default.createElement(
'div',
null,
_react2.default.createElement(
'h5',
null,
'Client Strategies'
),
_react2.default.createElement(_strategyContainer2.default, null)
);
};
exports.default = render;
/***/ },
/* 220 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _formAddContainer = __webpack_require__(183);
var _formAddContainer2 = _interopRequireDefault(_formAddContainer);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var render = function render() {
return _react2.default.createElement(
'div',
null,
_react2.default.createElement(
'h6',
null,
'Create feature toggle'
),
_react2.default.createElement(_formAddContainer2.default, null)
);
};
exports.default = render;
/***/ },
/* 221 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _viewEditContainer = __webpack_require__(192);
var _viewEditContainer2 = _interopRequireDefault(_viewEditContainer);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
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; }
var Features = function (_Component) {
_inherits(Features, _Component);
function Features() {
_classCallCheck(this, Features);
return _possibleConstructorReturn(this, (Features.__proto__ || Object.getPrototypeOf(Features)).apply(this, arguments));
}
_createClass(Features, [{
key: 'render',
value: function render() {
return _react2.default.createElement(_viewEditContainer2.default, { featureToggleName: this.props.params.name });
}
}], [{
key: 'propTypes',
value: function propTypes() {
return {
params: _react.PropTypes.object.isRequired
};
}
}]);
return Features;
}(_react.Component);
exports.default = Features;
;
/***/ },
/* 222 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _listContainer = __webpack_require__(191);
var _listContainer2 = _interopRequireDefault(_listContainer);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var render = function render() {
return _react2.default.createElement(_listContainer2.default, null);
};
exports.default = render;
/***/ },
/* 223 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _historyContainer = __webpack_require__(194);
var _historyContainer2 = _interopRequireDefault(_historyContainer);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var render = function render() {
return _react2.default.createElement(_historyContainer2.default, null);
};
exports.default = render;
/***/ },
/* 224 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _historyListToggleComponent = __webpack_require__(198);
var _historyListToggleComponent2 = _interopRequireDefault(_historyListToggleComponent);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var render = function render(_ref) {
var params = _ref.params;
return _react2.default.createElement(_historyListToggleComponent2.default, { toggleName: params.toggleName });
};
render.propTypes = {
params: _react.PropTypes.object.isRequired
};
exports.default = render;
/***/ },
/* 225 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _addContainer = __webpack_require__(199);
var _addContainer2 = _interopRequireDefault(_addContainer);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = function () {
return _react2.default.createElement(_addContainer2.default, null);
};
/***/ },
/* 226 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _react = __webpack_require__(1);
var _react2 = _interopRequireDefault(_react);
var _listContainer = __webpack_require__(202);
var _listContainer2 = _interopRequireDefault(_listContainer);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = function () {
return _react2.default.createElement(_listContainer2.default, null);
};
/***/ },
/* 227 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _immutable = __webpack_require__(12);
var _actions = __webpack_require__(60);
function getInitState() {
return (0, _immutable.fromJS)({ list: [], apps: {} });
}
var store = function store() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getInitState();
var action = arguments[1];
switch (action.type) {
case _actions.RECEIVE_APPLICATION:
return state.setIn(['apps', action.value.appName], new _immutable.Map(action.value));
case _actions.RECEIVE_ALL_APPLICATIONS:
return state.set('list', new _immutable.List(action.value.applications));
default:
return state;
}
};
exports.default = store;
/***/ },
/* 228 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _immutable = __webpack_require__(12);
var _archiveActions = __webpack_require__(108);
function getInitState() {
return new _immutable.Map({ list: new _immutable.List() });
}
var archiveStore = function archiveStore() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getInitState();
var action = arguments[1];
switch (action.type) {
case _archiveActions.REVIVE_TOGGLE:
return state.update('list', function (list) {
return list.remove(list.indexOf(action.value));
});
case _archiveActions.RECEIVE_ARCHIVE:
return state.set('list', new _immutable.List(action.value));
default:
return state;
}
};
exports.default = archiveStore;
/***/ },
/* 229 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ERROR_RECEIVE_CLIENT_INSTANCES = exports.RECEIVE_CLIENT_INSTANCES = undefined;
exports.fetchClientInstances = fetchClientInstances;
var _clientInstanceApi = __webpack_require__(209);
var _clientInstanceApi2 = _interopRequireDefault(_clientInstanceApi);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var RECEIVE_CLIENT_INSTANCES = exports.RECEIVE_CLIENT_INSTANCES = 'RECEIVE_CLIENT_INSTANCES';
var ERROR_RECEIVE_CLIENT_INSTANCES = exports.ERROR_RECEIVE_CLIENT_INSTANCES = 'ERROR_RECEIVE_CLIENT_INSTANCES';
var receiveClientInstances = function receiveClientInstances(json) {
return {
type: RECEIVE_CLIENT_INSTANCES,
value: json
};
};
var errorReceiveClientInstances = function errorReceiveClientInstances(statusCode) {
return {
type: RECEIVE_CLIENT_INSTANCES,
statusCode: statusCode
};
};
function fetchClientInstances() {
return function (dispatch) {
return _clientInstanceApi2.default.fetchAll().then(function (json) {
return dispatch(receiveClientInstances(json));
}).catch(function (error) {
return dispatch(errorReceiveClientInstances(error));
});
};
}
/***/ },
/* 230 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _immutable = __webpack_require__(12);
var _clientInstanceActions = __webpack_require__(229);
function getInitState() {
return (0, _immutable.fromJS)([]);
}
var store = function store() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getInitState();
var action = arguments[1];
switch (action.type) {
case _clientInstanceActions.RECEIVE_CLIENT_INSTANCES:
return (0, _immutable.fromJS)(action.value);
default:
return state;
}
};
exports.default = store;
/***/ },
/* 231 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _immutable = __webpack_require__(12);
var _clientStrategyActions = __webpack_require__(109);
function getInitState() {
return (0, _immutable.fromJS)([]);
}
var store = function store() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getInitState();
var action = arguments[1];
switch (action.type) {
case _clientStrategyActions.RECEIVE_CLIENT_STRATEGIES:
return (0, _immutable.fromJS)(action.value);
default:
return state;
}
};
exports.default = store;
/***/ },
/* 232 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _immutable = __webpack_require__(12);
var _errorActions = __webpack_require__(110);
var _featureActions = __webpack_require__(29);
var debug = __webpack_require__(64)('unleash:error-store');
function getInitState() {
return new _immutable.Map({
list: new _immutable.List()
});
}
function addErrorIfNotAlreadyInList(state, error) {
debug('Got error', error);
if (state.get('list').indexOf(error) < 0) {
return state.update('list', function (list) {
return list.push(error);
});
}
return state;
}
var strategies = function strategies() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getInitState();
var action = arguments[1];
switch (action.type) {
case _featureActions.ERROR_CREATING_FEATURE_TOGGLE:
case _featureActions.ERROR_REMOVE_FEATURE_TOGGLE:
case _featureActions.ERROR_FETCH_FEATURE_TOGGLES:
case _featureActions.ERROR_UPDATE_FEATURE_TOGGLE:
return addErrorIfNotAlreadyInList(state, action.error.message);
case _errorActions.MUTE_ERROR:
return state.update('list', function (list) {
return list.remove(list.indexOf(action.error));
});
default:
return state;
}
};
exports.default = strategies;
/***/ },
/* 233 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _immutable = __webpack_require__(12);
var _featureMetricsActions = __webpack_require__(61);
var metrics = function metrics() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : (0, _immutable.fromJS)({ lastHour: {}, lastMinute: {}, seenApps: {} });
var action = arguments[1];
switch (action.type) {
case _featureMetricsActions.RECEIVE_SEEN_APPS:
return state.set('seenApps', new _immutable.Map(action.value));
case _featureMetricsActions.RECEIVE_FEATURE_METRICS:
return state.withMutations(function (ctx) {
ctx.set('lastHour', new _immutable.Map(action.value.lastHour));
ctx.set('lastMinute', new _immutable.Map(action.value.lastMinute));
return ctx;
});
default:
return state;
}
};
exports.default = metrics;
/***/ },
/* 234 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _immutable = __webpack_require__(12);
var _featureActions = __webpack_require__(29);
var debug = __webpack_require__(64)('unleash:feature-store');
var features = function features() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new _immutable.List([]);
var action = arguments[1];
switch (action.type) {
case _featureActions.ADD_FEATURE_TOGGLE:
debug(_featureActions.ADD_FEATURE_TOGGLE, action);
return state.push(new _immutable.Map(action.featureToggle));
case _featureActions.REMOVE_FEATURE_TOGGLE:
debug(_featureActions.REMOVE_FEATURE_TOGGLE, action);
return state.filter(function (toggle) {
return toggle.get('name') !== action.featureToggleName;
});
case _featureActions.UPDATE_FEATURE_TOGGLE:
debug(_featureActions.UPDATE_FEATURE_TOGGLE, action);
return state.map(function (toggle) {
if (toggle.get('name') === action.featureToggle.name) {
return new _immutable.Map(action.featureToggle);
} else {
return toggle;
}
});
case _featureActions.RECEIVE_FEATURE_TOGGLES:
debug(_featureActions.RECEIVE_FEATURE_TOGGLES, action);
return new _immutable.List(action.featureToggles.map(_immutable.Map));
default:
return state;
}
};
exports.default = features;
/***/ },
/* 235 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _immutable = __webpack_require__(12);
var _historyActions = __webpack_require__(111);
function getInitState() {
return new _immutable.Map({ list: new _immutable.List() });
}
var historyStore = function historyStore() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getInitState();
var action = arguments[1];
switch (action.type) {
case _historyActions.RECEIVE_HISTORY:
return state.set('list', new _immutable.List(action.value));
default:
return state;
}
};
exports.default = historyStore;
/***/ },
/* 236 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _redux = __webpack_require__(103);
var _featureStore = __webpack_require__(234);
var _featureStore2 = _interopRequireDefault(_featureStore);
var _featureMetricsStore = __webpack_require__(233);
var _featureMetricsStore2 = _interopRequireDefault(_featureMetricsStore);
var _strategyStore = __webpack_require__(241);
var _strategyStore2 = _interopRequireDefault(_strategyStore);
var _inputStore = __webpack_require__(237);
var _inputStore2 = _interopRequireDefault(_inputStore);
var _historyStore = __webpack_require__(235);
var _historyStore2 = _interopRequireDefault(_historyStore);
var _archiveStore = __webpack_require__(228);
var _archiveStore2 = _interopRequireDefault(_archiveStore);
var _errorStore = __webpack_require__(232);
var _errorStore2 = _interopRequireDefault(_errorStore);
var _metricsStore = __webpack_require__(239);
var _metricsStore2 = _interopRequireDefault(_metricsStore);
var _clientStrategyStore = __webpack_require__(231);
var _clientStrategyStore2 = _interopRequireDefault(_clientStrategyStore);
var _clientInstanceStore = __webpack_require__(230);
var _clientInstanceStore2 = _interopRequireDefault(_clientInstanceStore);
var _settings = __webpack_require__(240);
var _settings2 = _interopRequireDefault(_settings);
var _user = __webpack_require__(242);
var _user2 = _interopRequireDefault(_user);
var _application = __webpack_require__(227);
var _application2 = _interopRequireDefault(_application);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// eslint-disable-line
var unleashStore = (0, _redux.combineReducers)({
features: _featureStore2.default,
featureMetrics: _featureMetricsStore2.default,
strategies: _strategyStore2.default,
input: _inputStore2.default,
history: _historyStore2.default,
archive: _archiveStore2.default,
error: _errorStore2.default,
metrics: _metricsStore2.default,
clientStrategies: _clientStrategyStore2.default,
clientInstances: _clientInstanceStore2.default,
settings: _settings2.default,
user: _user2.default,
applications: _application2.default
});
exports.default = unleashStore;
/***/ },
/* 237 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _immutable = __webpack_require__(12);
var _inputActions = __webpack_require__(112);
var _inputActions2 = _interopRequireDefault(_inputActions);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function getInitState() {
return new _immutable.Map();
}
function init(state, _ref) {
var id = _ref.id,
value = _ref.value;
state = assertId(state, id);
return state.setIn(id, (0, _immutable.fromJS)(value));
}
function assertId(state, id) {
if (!state.hasIn(id)) {
return state.setIn(id, new _immutable.Map({ inputId: id }));
}
return state;
}
function assertList(state, id, key) {
if (!state.getIn(id).has(key)) {
return state.setIn(id.concat([key]), new _immutable.List());
}
return state;
}
function setKeyValue(state, _ref2) {
var id = _ref2.id,
key = _ref2.key,
value = _ref2.value;
state = assertId(state, id);
return state.setIn(id.concat([key]), value);
}
function increment(state, _ref3) {
var id = _ref3.id,
key = _ref3.key;
state = assertId(state, id);
return state.updateIn(id.concat([key]), function () {
var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
return value + 1;
});
}
function clear(state, _ref4) {
var id = _ref4.id;
if (state.hasIn(id)) {
return state.removeIn(id);
}
return state;
}
function addToList(state, _ref5) {
var id = _ref5.id,
key = _ref5.key,
value = _ref5.value;
state = assertId(state, id);
state = assertList(state, id, key);
return state.updateIn(id.concat([key]), function (list) {
return list.push(value);
});
}
function updateInList(state, _ref6) {
var id = _ref6.id,
key = _ref6.key,
index = _ref6.index,
newValue = _ref6.newValue;
state = assertId(state, id);
state = assertList(state, id, key);
return state.updateIn(id.concat([key]), function (list) {
return list.set(index, newValue);
});
}
function removeFromList(state, _ref7) {
var id = _ref7.id,
key = _ref7.key,
index = _ref7.index;
state = assertId(state, id);
state = assertList(state, id, key);
return state.updateIn(id.concat([key]), function (list) {
return list.remove(index);
});
}
var inputState = function inputState() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getInitState();
var action = arguments[1];
if (!action.id) {
return state;
}
switch (action.type) {
case _inputActions2.default.INIT:
return init(state, action);
case _inputActions2.default.SET_VALUE:
if (_inputActions2.default.key != null && _inputActions2.default.value != null) {
throw new Error('Missing required key / value');
}
return setKeyValue(state, action);
case _inputActions2.default.INCREMENT_VALUE:
return increment(state, action);
case _inputActions2.default.LIST_PUSH:
return addToList(state, action);
case _inputActions2.default.LIST_POP:
return removeFromList(state, action);
case _inputActions2.default.LIST_UP:
return updateInList(state, action);
case _inputActions2.default.CLEAR:
return clear(state, action);
default:
// console.log('TYPE', action.type, action);
return state;
}
};
exports.default = inputState;
/***/ },
/* 238 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ERROR_RECEIVE_METRICS = exports.RECEIVE_METRICS = undefined;
exports.fetchMetrics = fetchMetrics;
var _metricsApi = __webpack_require__(213);
var _metricsApi2 = _interopRequireDefault(_metricsApi);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var RECEIVE_METRICS = exports.RECEIVE_METRICS = 'RECEIVE_METRICS';
var ERROR_RECEIVE_METRICS = exports.ERROR_RECEIVE_METRICS = 'ERROR_RECEIVE_METRICS';
var receiveMetrics = function receiveMetrics(json) {
return {
type: RECEIVE_METRICS,
value: json
};
};
var errorReceiveMetrics = function errorReceiveMetrics(statusCode) {
return {
type: ERROR_RECEIVE_METRICS,
statusCode: statusCode
};
};
function fetchMetrics() {
return function (dispatch) {
return _metricsApi2.default.fetchAll().then(function (json) {
return dispatch(receiveMetrics(json));
}).catch(function (error) {
return dispatch(errorReceiveMetrics(error));
});
};
}
/***/ },
/* 239 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _immutable = __webpack_require__(12);
var _metricsActions = __webpack_require__(238);
function getInitState() {
return (0, _immutable.fromJS)({
totalCount: 0,
apps: [],
clients: {}
});
}
var historyStore = function historyStore() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getInitState();
var action = arguments[1];
switch (action.type) {
case _metricsActions.RECEIVE_METRICS:
return (0, _immutable.fromJS)(action.value);
default:
return state;
}
};
exports.default = historyStore;
/***/ },
/* 240 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _immutable = __webpack_require__(12);
var _actions = __webpack_require__(62);
// TODO: provde a mock if localstorage does not exists?
var localStorage = window.localStorage || {};
var SETTINGS = 'settings';
function getInitState() {
try {
var state = JSON.parse(localStorage.getItem(SETTINGS));
return state ? (0, _immutable.fromJS)(state) : new _immutable.Map();
} catch (e) {
return new _immutable.Map();
}
}
function updateSetting(state, action) {
var newState = state.updateIn([action.group, action.field], function () {
return action.value;
});
localStorage.setItem(SETTINGS, JSON.stringify(newState.toJSON()));
return newState;
}
var settingStore = function settingStore() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getInitState();
var action = arguments[1];
switch (action.type) {
case _actions.UPDATE_SETTING:
return updateSetting(state, action);
default:
return state;
}
};
exports.default = settingStore;
/***/ },
/* 241 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _immutable = __webpack_require__(12);
var _strategyActions = __webpack_require__(45);
function getInitState() {
return new _immutable.Map({ list: new _immutable.List() });
}
function removeStrategy(state, action) {
var indexToRemove = state.get('list').indexOf(action.strategy);
if (indexToRemove !== -1) {
return state.update('list', function (list) {
return list.remove(indexToRemove);
});
}
return state;
}
var strategies = function strategies() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getInitState();
var action = arguments[1];
switch (action.type) {
case _strategyActions.RECEIVE_STRATEGIES:
return state.set('list', new _immutable.List(action.value));
case _strategyActions.REMOVE_STRATEGY:
return removeStrategy(state, action);
case _strategyActions.ADD_STRATEGY:
return state.update('list', function (list) {
return list.push(action.strategy);
});
default:
return state;
}
};
exports.default = strategies;
/***/ },
/* 242 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _immutable = __webpack_require__(12);
var _actions = __webpack_require__(63);
var COOKIE_NAME = 'username';
// Ref: http://stackoverflow.com/questions/10730362/get-cookie-by-name
function readCookie() {
var nameEQ = COOKIE_NAME + '=';
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') {
// eslint-disable-line eqeqeq
c = c.substring(1, c.length);
}
if (c.indexOf(nameEQ) === 0) {
return c.substring(nameEQ.length, c.length);
}
}
}
function writeCookie(userName) {
document.cookie = COOKIE_NAME + '=' + userName + '; expires=Thu, 18 Dec 2099 12:00:00 UTC';
}
function getInitState() {
var userName = readCookie(COOKIE_NAME);
var showDialog = !userName;
return new _immutable.Map({ userName: userName, showDialog: showDialog });
}
function updateUserName(state, action) {
return state.set('userName', action.value);
}
function save(state) {
var userName = state.get('userName');
if (userName) {
writeCookie(userName);
return state.set('showDialog', false);
} else {
return state;
}
}
var settingStore = function settingStore() {
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getInitState();
var action = arguments[1];
switch (action.type) {
case _actions.USER_UPDATE_USERNAME:
return updateUserName(state, action);
case _actions.USER_SAVE:
return save(state);
case _actions.USER_EDIT:
return state.set('showDialog', true);
default:
return state;
}
};
exports.default = settingStore;
/***/ },
/* 243 */
/***/ function(module, exports, __webpack_require__) {
/**
* This is the common logic for both the Node.js and web browser
* implementations of `debug()`.
*
* Expose `debug()` as the module.
*/
exports = module.exports = debug.debug = debug;
exports.coerce = coerce;
exports.disable = disable;
exports.enable = enable;
exports.enabled = enabled;
exports.humanize = __webpack_require__(274);
/**
* The currently active debug mode names, and names to skip.
*/
exports.names = [];
exports.skips = [];
/**
* Map of special "%n" handling functions, for the debug "format" argument.
*
* Valid key names are a single, lowercased letter, i.e. "n".
*/
exports.formatters = {};
/**
* Previously assigned color.
*/
var prevColor = 0;
/**
* Previous log timestamp.
*/
var prevTime;
/**
* Select a color.
*
* @return {Number}
* @api private
*/
function selectColor() {
return exports.colors[prevColor++ % exports.colors.length];
}
/**
* Create a debugger with the given `namespace`.
*
* @param {String} namespace
* @return {Function}
* @api public
*/
function debug(namespace) {
// define the `disabled` version
function disabled() {
}
disabled.enabled = false;
// define the `enabled` version
function enabled() {
var self = enabled;
// set `diff` timestamp
var curr = +new Date();
var ms = curr - (prevTime || curr);
self.diff = ms;
self.prev = prevTime;
self.curr = curr;
prevTime = curr;
// add the `color` if not set
if (null == self.useColors) self.useColors = exports.useColors();
if (null == self.color && self.useColors) self.color = selectColor();
var args = new Array(arguments.length);
for (var i = 0; i < args.length; i++) {
args[i] = arguments[i];
}
args[0] = exports.coerce(args[0]);
if ('string' !== typeof args[0]) {
// anything else let's inspect with %o
args = ['%o'].concat(args);
}
// apply any `formatters` transformations
var index = 0;
args[0] = args[0].replace(/%([a-z%])/g, function(match, format) {
// if we encounter an escaped % then don't increase the array index
if (match === '%%') return match;
index++;
var formatter = exports.formatters[format];
if ('function' === typeof formatter) {
var val = args[index];
match = formatter.call(self, val);
// now we need to remove `args[index]` since it's inlined in the `format`
args.splice(index, 1);
index--;
}
return match;
});
// apply env-specific formatting
args = exports.formatArgs.apply(self, args);
var logFn = enabled.log || exports.log || console.log.bind(console);
logFn.apply(self, args);
}
enabled.enabled = true;
var fn = exports.enabled(namespace) ? enabled : disabled;
fn.namespace = namespace;
return fn;
}
/**
* Enables a debug mode by namespaces. This can include modes
* separated by a colon and wildcards.
*
* @param {String} namespaces
* @api public
*/
function enable(namespaces) {
exports.save(namespaces);
var split = (namespaces || '').split(/[\s,]+/);
var len = split.length;
for (var i = 0; i < len; i++) {
if (!split[i]) continue; // ignore empty strings
namespaces = split[i].replace(/[\\^$+?.()|[\]{}]/g, '\\$&').replace(/\*/g, '.*?');
if (namespaces[0] === '-') {
exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
} else {
exports.names.push(new RegExp('^' + namespaces + '$'));
}
}
}
/**
* Disable debug output.
*
* @api public
*/
function disable() {
exports.enable('');
}
/**
* Returns true if the given mode name is enabled, false otherwise.
*
* @param {String} name
* @return {Boolean}
* @api public
*/
function enabled(name) {
var i, len;
for (i = 0, len = exports.skips.length; i < len; i++) {
if (exports.skips[i].test(name)) {
return false;
}
}
for (i = 0, len = exports.names.length; i < len; i++) {
if (exports.names[i].test(name)) {
return true;
}
}
return false;
}
/**
* Coerce `val`.
*
* @param {Mixed} val
* @return {Mixed}
* @api private
*/
function coerce(val) {
if (val instanceof Error) return val.stack || val.message;
return val;
}
/***/ },
/* 244 */
/***/ function(module, exports) {
// removed by extract-text-webpack-plugin
module.exports = {"path":"progress-styles__path___EWzvx","trail":"progress-styles__trail___33CET","text":"progress-styles__text___2Ny4s"};
/***/ },
/* 245 */
/***/ function(module, exports) {
// removed by extract-text-webpack-plugin
module.exports = {"non-style-button":"strategies__non-style-button___1iQRq"};
/***/ },
/* 246 */
/***/ function(module, exports) {
// removed by extract-text-webpack-plugin
module.exports = {"container":"styles__container___3RbZD","navigation":"styles__navigation___NYjO2","active":"styles__active___2VGIV"};
/***/ },
/* 247 */
/***/ function(module, exports) {
"use strict";
/**
* Copyright (c) 2013-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
* @typechecks
*/
var _hyphenPattern = /-(.)/g;
/**
* Camelcases a hyphenated string, for example:
*
* > camelize('background-color')
* < "backgroundColor"
*
* @param {string} string
* @return {string}
*/
function camelize(string) {
return string.replace(_hyphenPattern, function (_, character) {
return character.toUpperCase();
});
}
module.exports = camelize;
/***/ },
/* 248 */
/***/ function(module, exports, __webpack_require__) {
/**
* Copyright (c) 2013-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
* @typechecks
*/
'use strict';
var camelize = __webpack_require__(247);
var msPattern = /^-ms-/;
/**
* Camelcases a hyphenated CSS property name, for example:
*
* > camelizeStyleName('background-color')
* < "backgroundColor"
* > camelizeStyleName('-moz-transition')
* < "MozTransition"
* > camelizeStyleName('-ms-transition')
* < "msTransition"
*
* As Andi Smith suggests
* (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix
* is converted to lowercase `ms`.
*
* @param {string} string
* @return {string}
*/
function camelizeStyleName(string) {
return camelize(string.replace(msPattern, 'ms-'));
}
module.exports = camelizeStyleName;
/***/ },
/* 249 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
/**
* Copyright (c) 2013-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
*
*/
var isTextNode = __webpack_require__(257);
/*eslint-disable no-bitwise */
/**
* Checks if a given DOM node contains or is another DOM node.
*/
function containsNode(outerNode, innerNode) {
if (!outerNode || !innerNode) {
return false;
} else if (outerNode === innerNode) {
return true;
} else if (isTextNode(outerNode)) {
return false;
} else if (isTextNode(innerNode)) {
return containsNode(outerNode, innerNode.parentNode);
} else if ('contains' in outerNode) {
return outerNode.contains(innerNode);
} else if (outerNode.compareDocumentPosition) {
return !!(outerNode.compareDocumentPosition(innerNode) & 16);
} else {
return false;
}
}
module.exports = containsNode;
/***/ },
/* 250 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
/**
* Copyright (c) 2013-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
* @typechecks
*/
var invariant = __webpack_require__(3);
/**
* Convert array-like objects to arrays.
*
* This API assumes the caller knows the contents of the data type. For less
* well defined inputs use createArrayFromMixed.
*
* @param {object|function|filelist} obj
* @return {array}
*/
function toArray(obj) {
var length = obj.length;
// Some browsers builtin objects can report typeof 'function' (e.g. NodeList
// in old versions of Safari).
!(!Array.isArray(obj) && (typeof obj === 'object' || typeof obj === 'function')) ? false ? invariant(false, 'toArray: Array-like object expected') : invariant(false) : void 0;
!(typeof length === 'number') ? false ? invariant(false, 'toArray: Object needs a length property') : invariant(false) : void 0;
!(length === 0 || length - 1 in obj) ? false ? invariant(false, 'toArray: Object should have keys for indices') : invariant(false) : void 0;
!(typeof obj.callee !== 'function') ? false ? invariant(false, 'toArray: Object can\'t be `arguments`. Use rest params ' + '(function(...args) {}) or Array.from() instead.') : invariant(false) : void 0;
// Old IE doesn't give collections access to hasOwnProperty. Assume inputs
// without method will throw during the slice call and skip straight to the
// fallback.
if (obj.hasOwnProperty) {
try {
return Array.prototype.slice.call(obj);
} catch (e) {
// IE < 9 does not support Array#slice on collections objects
}
}
// Fall back to copying key by key. This assumes all keys have a value,
// so will not preserve sparsely populated inputs.
var ret = Array(length);
for (var ii = 0; ii < length; ii++) {
ret[ii] = obj[ii];
}
return ret;
}
/**
* Perform a heuristic test to determine if an object is "array-like".
*
* A monk asked Joshu, a Zen master, "Has a dog Buddha nature?"
* Joshu replied: "Mu."
*
* This function determines if its argument has "array nature": it returns
* true if the argument is an actual array, an `arguments' object, or an
* HTMLCollection (e.g. node.childNodes or node.getElementsByTagName()).
*
* It will return false for other array-like objects like Filelist.
*
* @param {*} obj
* @return {boolean}
*/
function hasArrayNature(obj) {
return (
// not null/false
!!obj && (
// arrays are objects, NodeLists are functions in Safari
typeof obj == 'object' || typeof obj == 'function') &&
// quacks like an array
'length' in obj &&
// not window
!('setInterval' in obj) &&
// no DOM node should be considered an array-like
// a 'select' element has 'length' and 'item' properties on IE8
typeof obj.nodeType != 'number' && (
// a real array
Array.isArray(obj) ||
// arguments
'callee' in obj ||
// HTMLCollection/NodeList
'item' in obj)
);
}
/**
* Ensure that the argument is an array by wrapping it in an array if it is not.
* Creates a copy of the argument if it is already an array.
*
* This is mostly useful idiomatically:
*
* var createArrayFromMixed = require('createArrayFromMixed');
*
* function takesOneOrMoreThings(things) {
* things = createArrayFromMixed(things);
* ...
* }
*
* This allows you to treat `things' as an array, but accept scalars in the API.
*
* If you need to convert an array-like object, like `arguments`, into an array
* use toArray instead.
*
* @param {*} obj
* @return {array}
*/
function createArrayFromMixed(obj) {
if (!hasArrayNature(obj)) {
return [obj];
} else if (Array.isArray(obj)) {
return obj.slice();
} else {
return toArray(obj);
}
}
module.exports = createArrayFromMixed;
/***/ },
/* 251 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
/**
* Copyright (c) 2013-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
* @typechecks
*/
/*eslint-disable fb-www/unsafe-html*/
var ExecutionEnvironment = __webpack_require__(11);
var createArrayFromMixed = __webpack_require__(250);
var getMarkupWrap = __webpack_require__(252);
var invariant = __webpack_require__(3);
/**
* Dummy container used to render all markup.
*/
var dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;
/**
* Pattern used by `getNodeName`.
*/
var nodeNamePattern = /^\s*<(\w+)/;
/**
* Extracts the `nodeName` of the first element in a string of markup.
*
* @param {string} markup String of markup.
* @return {?string} Node name of the supplied markup.
*/
function getNodeName(markup) {
var nodeNameMatch = markup.match(nodeNamePattern);
return nodeNameMatch && nodeNameMatch[1].toLowerCase();
}
/**
* Creates an array containing the nodes rendered from the supplied markup. The
* optionally supplied `handleScript` function will be invoked once for each
*