calculator-bundle.js
function getNumberFormat(n, t, i) {
"use strict";
var f = Math.pow(10, -t),
e, r, u;
return i = i || "decimal", i === "percent" ? f /= 100 : i !== "decimal" && (e = i, i = "currency"), window.Intl && Intl.NumberFormat ? r = Intl.NumberFormat(n, {
style: i,
currency: e,
maximumFractionDigits: t,
minimumFractionDigits: t
}).format : (u = function (n) {
var i = Math.pow(10, t);
return (Math.round(n * i) / i).toFixed(t)
}, r = i === "percent" ? function (n) {
return u(n * 100) + "%"
} : i === "decimal" ? function (n) {
return u(n)
} : function (n) {
return formatCurrency(n, t)
}),
function (n) {
return r(n > 0 ? Math.max(f, n) : n)
}
}
var DocClickMixin, Tooltip;
! function (n) {
if ("object" == typeof exports && "undefined" != typeof module) module.exports = n();
else if ("function" == typeof define && define.amd) define([], n);
else {
var t;
t = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this;
t.React = n()
}
}(function () {
return function n(t, i, r) {
function u(f, o) {
var h, c, s;
if (!i[f]) {
if (!t[f]) {
if (h = "function" == typeof require && require, !o && h) return h(f, !0);
if (e) return e(f, !0);
c = new Error("Cannot find module '" + f + "'");
throw c.code = "MODULE_NOT_FOUND", c;
}
s = i[f] = {
exports: {}
};
t[f][0].call(s.exports, function (n) {
var i = t[f][1][n];
return u(i ? i : n)
}, s, s.exports, n, t, i, r)
}
return i[f].exports
}
for (var e = "function" == typeof require && require, f = 0; f < r.length; f++) u(r[f]);
return u
}({
1: [function (n, t) {
"use strict";
var o = n(19),
u = n(32),
s = n(34),
h = n(33),
c = n(38),
l = n(39),
r = n(55),
a = (n(56), n(40)),
v = n(51),
y = n(54),
p = n(64),
i = n(68),
w = n(73),
b = n(76),
k = n(79),
f = n(82),
d = n(27),
g = n(115),
nt = n(142);
y.inject();
var tt = r.createElement,
it = r.createFactory,
rt = r.cloneElement,
ut = w.measure("React", "render", i.render),
e = {
Children: {
map: u.map,
forEach: u.forEach,
count: u.count,
only: nt
},
Component: s,
DOM: a,
PropTypes: b,
initializeTouchEvents: function (n) {
o.useTouchEvents = n
},
createClass: h.createClass,
createElement: tt,
cloneElement: rt,
createFactory: it,
createMixin: function (n) {
return n
},
constructAndRenderComponent: i.constructAndRenderComponent,
constructAndRenderComponentByID: i.constructAndRenderComponentByID,
findDOMNode: g,
render: ut,
renderToString: f.renderToString,
renderToStaticMarkup: f.renderToStaticMarkup,
unmountComponentAtNode: i.unmountComponentAtNode,
isValidElement: r.isValidElement,
withContext: c.withContext,
__spread: d
};
"undefined" != typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" == typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject && __REACT_DEVTOOLS_GLOBAL_HOOK__.inject({
CurrentOwner: l,
InstanceHandles: p,
Mount: i,
Reconciler: k,
TextComponent: v
});
e.version = "0.13.1";
t.exports = e
}, {
115: 115,
142: 142,
19: 19,
27: 27,
32: 32,
33: 33,
34: 34,
38: 38,
39: 39,
40: 40,
51: 51,
54: 54,
55: 55,
56: 56,
64: 64,
68: 68,
73: 73,
76: 76,
79: 79,
82: 82
}],
2: [function (n, t) {
"use strict";
var i = n(117),
r = {
componentDidMount: function () {
this.props.autoFocus && i(this.getDOMNode())
}
};
t.exports = r
}, {
117: 117
}],
3: [function (n, t) {
"use strict";
function k() {
var n = window.opera;
return "object" == typeof n && "function" == typeof n.version && parseInt(n.version(), 10) <= 12
}
function d(n) {
return (n.ctrlKey || n.altKey || n.metaKey) && !(n.ctrlKey && n.altKey)
}
function g(n) {
switch (n) {
case i.topCompositionStart:
return r.compositionStart;
case i.topCompositionEnd:
return r.compositionEnd;
case i.topCompositionUpdate:
return r.compositionUpdate
}
}
function nt(n, t) {
return n === i.topKeyDown && t.keyCode === a
}
function s(n, t) {
switch (n) {
case i.topKeyUp:
return -1 !== st.indexOf(t.keyCode);
case i.topKeyDown:
return t.keyCode !== a;
case i.topKeyPress:
case i.topMouseDown:
case i.topBlur:
return !0;
default:
return !1
}
}
function h(n) {
var t = n.detail;
return "object" == typeof t && "data" in t ? t.data : null
}
function tt(n, t, i, f) {
var e, a, o, p;
return (v ? e = g(n) : u ? s(n, f) && (e = r.compositionEnd) : nt(n, f) && (e = r.compositionStart), !e) ? null : (y && (u || e !== r.compositionStart ? e === r.compositionEnd && u && (a = u.getData()) : u = l.getPooled(t)), o = et.getPooled(e, i, f), a ? o.data = a : (p = h(f), null !== p && (o.data = p)), c.accumulateTwoPhaseDispatches(o), o)
}
function it(n, t) {
var u, r;
switch (n) {
case i.topCompositionEnd:
return h(t);
case i.topKeyPress:
return u = t.which, u !== p ? null : (b = !0, w);
case i.topTextInput:
return r = t.data, r === w && b ? null : r;
default:
return null
}
}
function rt(n, t) {
if (u) {
if (n === i.topCompositionEnd || s(n, t)) {
var r = u.getData();
return l.release(u), u = null, r
}
return null
}
switch (n) {
case i.topPaste:
return null;
case i.topKeyPress:
return t.which && !d(t) ? String.fromCharCode(t.which) : null;
case i.topCompositionEnd:
return y ? null : t.data;
default:
return null
}
}
function ut(n, t, i, u) {
var e, f;
return (e = ht ? it(n, u) : rt(n, u), !e) ? null : (f = ot.getPooled(r.beforeInput, i, u), f.data = e, c.accumulateTwoPhaseDispatches(f), f)
}
var ft = n(15),
c = n(20),
o = n(21),
l = n(22),
et = n(91),
ot = n(95),
f = n(139),
st = [9, 13, 27, 32],
a = 229,
v = o.canUseDOM && "CompositionEvent" in window,
e = null;
o.canUseDOM && "documentMode" in document && (e = document.documentMode);
var ht = o.canUseDOM && "TextEvent" in window && !e && !k(),
y = o.canUseDOM && (!v || e && e > 8 && 11 >= e),
p = 32,
w = String.fromCharCode(p),
i = ft.topLevelTypes,
r = {
beforeInput: {
phasedRegistrationNames: {
bubbled: f({
onBeforeInput: null
}),
captured: f({
onBeforeInputCapture: null
})
},
dependencies: [i.topCompositionEnd, i.topKeyPress, i.topTextInput, i.topPaste]
},
compositionEnd: {
phasedRegistrationNames: {
bubbled: f({
onCompositionEnd: null
}),
captured: f({
onCompositionEndCapture: null
})
},
dependencies: [i.topBlur, i.topCompositionEnd, i.topKeyDown, i.topKeyPress, i.topKeyUp, i.topMouseDown]
},
compositionStart: {
phasedRegistrationNames: {
bubbled: f({
onCompositionStart: null
}),
captured: f({
onCompositionStartCapture: null
})
},
dependencies: [i.topBlur, i.topCompositionStart, i.topKeyDown, i.topKeyPress, i.topKeyUp, i.topMouseDown]
},
compositionUpdate: {
phasedRegistrationNames: {
bubbled: f({
onCompositionUpdate: null
}),
captured: f({
onCompositionUpdateCapture: null
})
},
dependencies: [i.topBlur, i.topCompositionUpdate, i.topKeyDown, i.topKeyPress, i.topKeyUp, i.topMouseDown]
}
},
b = !1,
u = null,
ct = {
eventTypes: r,
extractEvents: function (n, t, i, r) {
return [tt(n, t, i, r), ut(n, t, i, r)]
}
};
t.exports = ct
}, {
139: 139,
15: 15,
20: 20,
21: 21,
22: 22,
91: 91,
95: 95
}],
4: [function (n, t) {
"use strict";
function f(n, t) {
return n + t.charAt(0).toUpperCase() + t.substring(1)
}
var i = {
boxFlex: !0,
boxFlexGroup: !0,
columnCount: !0,
flex: !0,
flexGrow: !0,
flexShrink: !0,
fontWeight: !0,
lineClamp: !0,
lineHeight: !0,
opacity: !0,
order: !0,
orphans: !0,
widows: !0,
zIndex: !0,
zoom: !0,
fillOpacity: !0,
strokeOpacity: !0
},
e = ["Webkit", "ms", "Moz", "O"],
r, u;
Object.keys(i).forEach(function (n) {
e.forEach(function (t) {
i[f(t, n)] = i[n]
})
});
r = {
background: {
backgroundImage: !0,
backgroundPosition: !0,
backgroundRepeat: !0,
backgroundColor: !0
},
border: {
borderWidth: !0,
borderStyle: !0,
borderColor: !0
},
borderBottom: {
borderBottomWidth: !0,
borderBottomStyle: !0,
borderBottomColor: !0
},
borderLeft: {
borderLeftWidth: !0,
borderLeftStyle: !0,
borderLeftColor: !0
},
borderRight: {
borderRightWidth: !0,
borderRightStyle: !0,
borderRightColor: !0
},
borderTop: {
borderTopWidth: !0,
borderTopStyle: !0,
borderTopColor: !0
},
font: {
fontStyle: !0,
fontVariant: !0,
fontWeight: !0,
fontSize: !0,
lineHeight: !0,
fontFamily: !0
}
};
u = {
isUnitlessNumber: i,
shorthandPropertyExpansions: r
};
t.exports = u
}, {}],
5: [function (n, t) {
"use strict";
var f = n(4),
e = n(21),
i = (n(106), n(111)),
o = n(131),
s = n(141),
h = (n(150), s(function (n) {
return o(n)
})),
r = "cssFloat",
u;
e.canUseDOM && void 0 === document.documentElement.style.cssFloat && (r = "styleFloat");
u = {
createMarkupForStyles: function (n) {
var r = "",
t, u;
for (t in n) n.hasOwnProperty(t) && (u = n[t], null != u && (r += h(t) + ":", r += i(t, u) + ";"));
return r || null
},
setValueForStyles: function (n, t) {
var e = n.style,
u, o, s, h;
for (u in t)
if (t.hasOwnProperty(u))
if (o = i(u, t[u]), "float" === u && (u = r), o) e[u] = o;
else if (s = f.shorthandPropertyExpansions[u], s)
for (h in s) e[h] = "";
else e[u] = ""
}
};
t.exports = u
}, {
106: 106,
111: 111,
131: 131,
141: 141,
150: 150,
21: 21,
4: 4
}],
6: [function (n, t) {
"use strict";
function i() {
this._callbacks = null;
this._contexts = null
}
var r = n(28),
u = n(27),
f = n(133);
u(i.prototype, {
enqueue: function (n, t) {
this._callbacks = this._callbacks || [];
this._contexts = this._contexts || [];
this._callbacks.push(n);
this._contexts.push(t)
},
notifyAll: function () {
var n = this._callbacks,
i = this._contexts,
t, r;
if (n) {
for (f(n.length === i.length), this._callbacks = null, this._contexts = null, t = 0, r = n.length; r > t; t++) n[t].call(i[t]);
n.length = 0;
i.length = 0
}
},
reset: function () {
this._callbacks = null;
this._contexts = null
},
destructor: function () {
this.reset()
}
});
r.addPoolingTo(i);
t.exports = i
}, {
133: 133,
27: 27,
28: 28
}],
7: [function (n, t) {
"use strict";
function tt(n) {
return "SELECT" === n.nodeName || "INPUT" === n.nodeName && "file" === n.type
}
function o(n) {
var t = w.getPooled(s.change, f, n);
y.accumulateTwoPhaseDispatches(t);
vt.batchedUpdates(it, t)
}
function it(n) {
v.enqueueEvents(n);
v.processEventQueue()
}
function rt(n, t) {
r = n;
f = t;
r.attachEvent("onchange", o)
}
function c() {
r && (r.detachEvent("onchange", o), r = null, f = null)
}
function ut(n, t, r) {
if (n === i.topChange) return r
}
function ft(n, t, r) {
n === i.topFocus ? (c(), rt(t, r)) : n === i.topBlur && c()
}
function et(n, t) {
r = n;
f = t;
u = n.value;
e = Object.getOwnPropertyDescriptor(n.constructor.prototype, "value");
Object.defineProperty(r, "value", g);
r.attachEvent("onpropertychange", a)
}
function l() {
r && (delete r.value, r.detachEvent("onpropertychange", a), r = null, f = null, u = null, e = null)
}
function a(n) {
if ("value" === n.propertyName) {
var t = n.srcElement.value;
t !== u && (u = t, o(n))
}
}
function ot(n, t, r) {
if (n === i.topInput) return r
}
function st(n, t, r) {
n === i.topFocus ? (l(), et(t, r)) : n === i.topBlur && l()
}
function ht(n) {
if ((n === i.topSelectionChange || n === i.topKeyUp || n === i.topKeyDown) && r && r.value !== u) return (u = r.value, f)
}
function ct(n) {
return "INPUT" === n.nodeName && ("checkbox" === n.type || "radio" === n.type)
}
function lt(n, t, r) {
if (n === i.topClick) return r
}
var at = n(15),
v = n(17),
y = n(20),
p = n(21),
vt = n(85),
w = n(93),
b = n(134),
yt = n(136),
k = n(139),
i = at.topLevelTypes,
s = {
change: {
phasedRegistrationNames: {
bubbled: k({
onChange: null
}),
captured: k({
onChangeCapture: null
})
},
dependencies: [i.topBlur, i.topChange, i.topClick, i.topFocus, i.topInput, i.topKeyDown, i.topKeyUp, i.topSelectionChange]
}
},
r = null,
f = null,
u = null,
e = null,
d = !1,
h, g, nt;
p.canUseDOM && (d = b("change") && (!("documentMode" in document) || document.documentMode > 8));
h = !1;
p.canUseDOM && (h = b("input") && (!("documentMode" in document) || document.documentMode > 9));
g = {
get: function () {
return e.get.call(this)
},
set: function (n) {
u = "" + n;
e.set.call(this, n)
}
};
nt = {
eventTypes: s,
extractEvents: function (n, t, i, r) {
var u, f, e, o;
if ((tt(t) ? d ? u = ut : f = ft : yt(t) ? h ? u = ot : (u = ht, f = st) : ct(t) && (u = lt), u) && (e = u(n, t, i), e)) return o = w.getPooled(s.change, e, r), y.accumulateTwoPhaseDispatches(o), o;
f && f(n, t, i)
}
};
t.exports = nt
}, {
134: 134,
136: 136,
139: 139,
15: 15,
17: 17,
20: 20,
21: 21,
85: 85,
93: 93
}],
8: [function (n, t) {
"use strict";
var i = 0,
r = {
createReactRootIndex: function () {
return i++
}
};
t.exports = r
}, {}],
9: [function (n, t) {
"use strict";
function r(n, t, i) {
n.insertBefore(t, n.childNodes[i] || null)
}
var u = n(12),
i = n(70),
f = n(145),
e = n(133),
o = {
dangerouslyReplaceNodeWithMarkup: u.dangerouslyReplaceNodeWithMarkup,
updateTextContent: f,
processUpdates: function (n, t) {
for (var w, c, l, o, h = null, s = null, a = 0; a < n.length; a++)
if (o = n[a], o.type === i.MOVE_EXISTING || o.type === i.REMOVE_NODE) {
var p = o.fromIndex,
v = o.parentNode.childNodes[p],
y = o.parentID;
e(v);
h = h || {};
h[y] = h[y] || [];
h[y][p] = v;
s = s || [];
s.push(v)
}
if (w = u.dangerouslyRenderMarkup(t), s)
for (c = 0; c < s.length; c++) s[c].parentNode.removeChild(s[c]);
for (l = 0; l < n.length; l++) switch (o = n[l], o.type) {
case i.INSERT_MARKUP:
r(o.parentNode, w[o.markupIndex], o.toIndex);
break;
case i.MOVE_EXISTING:
r(o.parentNode, h[o.parentID][o.fromIndex], o.toIndex);
break;
case i.TEXT_CONTENT:
f(o.parentNode, o.textContent)
}
}
};
t.exports = o
}, {
12: 12,
133: 133,
145: 145,
70: 70
}],
10: [function (n, t) {
"use strict";
function u(n, t) {
return (n & t) === t
}
var f = n(133),
r = {
MUST_USE_ATTRIBUTE: 1,
MUST_USE_PROPERTY: 2,
HAS_SIDE_EFFECTS: 4,
HAS_BOOLEAN_VALUE: 8,
HAS_NUMERIC_VALUE: 16,
HAS_POSITIVE_NUMERIC_VALUE: 48,
HAS_OVERLOADED_BOOLEAN_VALUE: 64,
injectDOMPropertyConfig: function (n) {
var h = n.Properties || {},
c = n.DOMAttributeNames || {},
l = n.DOMPropertyNames || {},
a = n.DOMMutationMethods || {},
t, o, s, e;
n.isCustomAttribute && i._isCustomAttributeFunctions.push(n.isCustomAttribute);
for (t in h) f(!i.isStandardName.hasOwnProperty(t)), i.isStandardName[t] = !0, o = t.toLowerCase(), (i.getPossibleStandardName[o] = t, c.hasOwnProperty(t)) ? (s = c[t], i.getPossibleStandardName[s] = t, i.getAttributeName[t] = s) : i.getAttributeName[t] = o, i.getPropertyName[t] = l.hasOwnProperty(t) ? l[t] : t, i.getMutationMethod[t] = a.hasOwnProperty(t) ? a[t] : null, e = h[t], i.mustUseAttribute[t] = u(e, r.MUST_USE_ATTRIBUTE), i.mustUseProperty[t] = u(e, r.MUST_USE_PROPERTY), i.hasSideEffects[t] = u(e, r.HAS_SIDE_EFFECTS), i.hasBooleanValue[t] = u(e, r.HAS_BOOLEAN_VALUE), i.hasNumericValue[t] = u(e, r.HAS_NUMERIC_VALUE), i.hasPositiveNumericValue[t] = u(e, r.HAS_POSITIVE_NUMERIC_VALUE), i.hasOverloadedBooleanValue[t] = u(e, r.HAS_OVERLOADED_BOOLEAN_VALUE), f(!i.mustUseAttribute[t] || !i.mustUseProperty[t]), f(i.mustUseProperty[t] || !i.hasSideEffects[t]), f(!!i.hasBooleanValue[t] + !!i.hasNumericValue[t] + !!i.hasOverloadedBooleanValue[t] <= 1)
}
},
e = {},
i = {
ID_ATTRIBUTE_NAME: "data-reactid",
isStandardName: {},
getPossibleStandardName: {},
getAttributeName: {},
getPropertyName: {},
getMutationMethod: {},
mustUseAttribute: {},
mustUseProperty: {},
hasSideEffects: {},
hasBooleanValue: {},
hasNumericValue: {},
hasPositiveNumericValue: {},
hasOverloadedBooleanValue: {},
_isCustomAttributeFunctions: [],
isCustomAttribute: function (n) {
for (var r, t = 0; t < i._isCustomAttributeFunctions.length; t++)
if (r = i._isCustomAttributeFunctions[t], r(n)) return !0;
return !1
},
getDefaultValueForProperty: function (n, t) {
var r, i = e[n];
return i || (e[n] = i = {}), t in i || (r = document.createElement(n), i[t] = r[t]), i[t]
},
injection: r
};
t.exports = i
}, {
133: 133
}],
11: [function (n, t) {
"use strict";
function u(n, t) {
return null == t || i.hasBooleanValue[n] && !t || i.hasNumericValue[n] && isNaN(t) || i.hasPositiveNumericValue[n] && 1 > t || i.hasOverloadedBooleanValue[n] && t === !1
}
var i = n(10),
r = n(143),
f = (n(150), {
createMarkupForID: function (n) {
return i.ID_ATTRIBUTE_NAME + "=" + r(n)
},
createMarkupForProperty: function (n, t) {
if (i.isStandardName.hasOwnProperty(n) && i.isStandardName[n]) {
if (u(n, t)) return "";
var f = i.getAttributeName[n];
return i.hasBooleanValue[n] || i.hasOverloadedBooleanValue[n] && t === !0 ? f : f + "=" + r(t)
}
return i.isCustomAttribute(n) ? null == t ? "" : n + "=" + r(t) : null
},
setValueForProperty: function (n, t, r) {
var f, e;
i.isStandardName.hasOwnProperty(t) && i.isStandardName[t] ? (f = i.getMutationMethod[t], f ? f(n, r) : u(t, r) ? this.deleteValueForProperty(n, t) : i.mustUseAttribute[t] ? n.setAttribute(i.getAttributeName[t], "" + r) : (e = i.getPropertyName[t], i.hasSideEffects[t] && "" + n[e] == "" + r || (n[e] = r))) : i.isCustomAttribute(t) && (null == r ? n.removeAttribute(t) : n.setAttribute(t, "" + r))
},
deleteValueForProperty: function (n, t) {
var u, r, f;
i.isStandardName.hasOwnProperty(t) && i.isStandardName[t] ? (u = i.getMutationMethod[t], u ? u(n, void 0) : i.mustUseAttribute[t] ? n.removeAttribute(i.getAttributeName[t]) : (r = i.getPropertyName[t], f = i.getDefaultValueForProperty(n.nodeName, r), i.hasSideEffects[t] && "" + n[r] === f || (n[r] = f))) : i.isCustomAttribute(t) && n.removeAttribute(t)
}
});
t.exports = f
}, {
10: 10,
143: 143,
150: 150
}],
12: [function (n, t) {
"use strict";
function o(n) {
return n.substring(1, n.indexOf(" "))
}
var u = n(21),
f = n(110),
e = n(112),
s = n(125),
i = n(133),
h = /^(<[^ \/>]+)/,
r = "data-danger-index",
c = {
dangerouslyRenderMarkup: function (n) {
var t, l, a, v, b, c, y, d, k, w, p;
for (i(u.canUseDOM), l = {}, a = 0; a < n.length; a++) i(n[a]), t = o(n[a]), t = s(t) ? t : "*", l[t] = l[t] || [], l[t][a] = n[a];
v = [];
b = 0;
for (t in l)
if (l.hasOwnProperty(t)) {
y = l[t];
for (c in y) y.hasOwnProperty(c) && (d = y[c], y[c] = d.replace(h, "$1 " + r + '="' + c + '" '));
for (k = f(y.join(""), e), w = 0; w < k.length; ++w) p = k[w], p.hasAttribute && p.hasAttribute(r) && (c = +p.getAttribute(r), p.removeAttribute(r), i(!v.hasOwnProperty(c)), v[c] = p, b += 1)
}
return i(b === v.length), i(v.length === n.length), v
},
dangerouslyReplaceNodeWithMarkup: function (n, t) {
i(u.canUseDOM);
i(t);
i("html" !== n.tagName.toLowerCase());
var r = f(t, e)[0];
n.parentNode.replaceChild(r, n)
}
};
t.exports = c
}, {
110: 110,
112: 112,
125: 125,
133: 133,
21: 21
}],
13: [function (n, t) {
"use strict";
var i = n(139),
r = [i({
ResponderEventPlugin: null
}), i({
SimpleEventPlugin: null
}), i({
TapEventPlugin: null
}), i({
EnterLeaveEventPlugin: null
}), i({
ChangeEventPlugin: null
}), i({
SelectEventPlugin: null
}), i({
BeforeInputEventPlugin: null
}), i({
AnalyticsEventPlugin: null
}), i({
MobileSafariClickEventPlugin: null
})];
t.exports = r
}, {
139: 139
}],
14: [function (n, t) {
"use strict";
var s = n(15),
h = n(20),
e = n(97),
r = n(68),
o = n(139),
i = s.topLevelTypes,
c = r.getFirstReactDOM,
u = {
mouseEnter: {
registrationName: o({
onMouseEnter: null
}),
dependencies: [i.topMouseOut, i.topMouseOver]
},
mouseLeave: {
registrationName: o({
onMouseLeave: null
}),
dependencies: [i.topMouseOut, i.topMouseOver]
}
},
f = [null, null],
l = {
eventTypes: u,
extractEvents: function (n, t, o, s) {
var p, w, l, a, v;
if (n === i.topMouseOver && (s.relatedTarget || s.fromElement) || n !== i.topMouseOut && n !== i.topMouseOver || (t.window === t ? p = t : (w = t.ownerDocument, p = w ? w.defaultView || w.parentWindow : window), n === i.topMouseOut ? (l = t, a = c(s.relatedTarget || s.toElement) || p) : (l = p, a = t), l === a)) return null;
var b = l ? r.getID(l) : "",
k = a ? r.getID(a) : "",
y = e.getPooled(u.mouseLeave, b, s);
return y.type = "mouseleave", y.target = l, y.relatedTarget = a, v = e.getPooled(u.mouseEnter, k, s), v.type = "mouseenter", v.target = a, v.relatedTarget = l, h.accumulateEnterLeaveDispatches(y, v, b, k), f[0] = y, f[1] = v, f
}
};
t.exports = l
}, {
139: 139,
15: 15,
20: 20,
68: 68,
97: 97
}],
15: [function (n, t) {
"use strict";
var i = n(138),
r = i({
bubbled: null,
captured: null
}),
u = i({
topBlur: null,
topChange: null,
topClick: null,
topCompositionEnd: null,
topCompositionStart: null,
topCompositionUpdate: null,
topContextMenu: null,
topCopy: null,
topCut: null,
topDoubleClick: null,
topDrag: null,
topDragEnd: null,
topDragEnter: null,
topDragExit: null,
topDragLeave: null,
topDragOver: null,
topDragStart: null,
topDrop: null,
topError: null,
topFocus: null,
topInput: null,
topKeyDown: null,
topKeyPress: null,
topKeyUp: null,
topLoad: null,
topMouseDown: null,
topMouseMove: null,
topMouseOut: null,
topMouseOver: null,
topMouseUp: null,
topPaste: null,
topReset: null,
topScroll: null,
topSelectionChange: null,
topSubmit: null,
topTextInput: null,
topTouchCancel: null,
topTouchEnd: null,
topTouchMove: null,
topTouchStart: null,
topWheel: null
}),
f = {
topLevelTypes: u,
PropagationPhases: r
};
t.exports = f
}, {
138: 138
}],
16: [function (n, t) {
var i = n(112),
r = {
listen: function (n, t, i) {
return n.addEventListener ? (n.addEventListener(t, i, !1), {
remove: function () {
n.removeEventListener(t, i, !1)
}
}) : n.attachEvent ? (n.attachEvent("on" + t, i), {
remove: function () {
n.detachEvent("on" + t, i)
}
}) : void 0
},
capture: function (n, t, r) {
return n.addEventListener ? (n.addEventListener(t, r, !0), {
remove: function () {
n.removeEventListener(t, r, !0)
}
}) : {
remove: i
}
},
registerDefault: function () {}
};
t.exports = r
}, {
112: 112
}],
17: [function (n, t) {
"use strict";
var r = n(18),
f = n(19),
e = n(103),
h = n(118),
o = n(133),
i = {},
u = null,
c = function (n) {
if (n) {
var i = f.executeDispatch,
t = r.getPluginModuleForEvent(n);
t && t.executeDispatch && (i = t.executeDispatch);
f.executeDispatchesInOrder(n, i);
n.isPersistent() || n.constructor.release(n)
}
},
s = null,
l = {
injection: {
injectMount: f.injection.injectMount,
injectInstanceHandle: function (n) {
s = n
},
getInstanceHandle: function () {
return s
},
injectEventPluginOrder: r.injectEventPluginOrder,
injectEventPluginsByName: r.injectEventPluginsByName
},
eventNameDispatchConfigs: r.eventNameDispatchConfigs,
registrationNameModules: r.registrationNameModules,
putListener: function (n, t, r) {
o(!r || "function" == typeof r);
var u = i[t] || (i[t] = {});
u[n] = r
},
getListener: function (n, t) {
var r = i[t];
return r && r[n]
},
deleteListener: function (n, t) {
var r = i[t];
r && delete r[n]
},
deleteAllListeners: function (n) {
for (var t in i) delete i[t][n]
},
extractEvents: function (n, t, i, u) {
for (var s, h, f, c = r.plugins, o = 0, l = c.length; l > o; o++) s = c[o], s && (h = s.extractEvents(n, t, i, u), h && (f = e(f, h)));
return f
},
enqueueEvents: function (n) {
n && (u = e(u, n))
},
processEventQueue: function () {
var n = u;
u = null;
h(n, c);
o(!u)
},
__purge: function () {
i = {}
},
__getListenerBank: function () {
return i
}
};
t.exports = l
}, {
103: 103,
118: 118,
133: 133,
18: 18,
19: 19
}],
18: [function (n, t) {
"use strict";
function e() {
var e, n, t, o, h;
if (f)
for (e in r)
if (n = r[e], t = f.indexOf(e), u(t > -1), !i.plugins[t]) {
u(n.extractEvents);
i.plugins[t] = n;
o = n.eventTypes;
for (h in o) u(s(o[h], n, h))
}
}
function s(n, t, r) {
var f, e, s;
if (u(!i.eventNameDispatchConfigs.hasOwnProperty(r)), i.eventNameDispatchConfigs[r] = n, f = n.phasedRegistrationNames, f) {
for (e in f) f.hasOwnProperty(e) && (s = f[e], o(s, t, r));
return !0
}
return n.registrationName ? (o(n.registrationName, t, r), !0) : !1
}
function o(n, t, r) {
u(!i.registrationNameModules[n]);
i.registrationNameModules[n] = t;
i.registrationNameDependencies[n] = t.eventTypes[r].dependencies
}
var u = n(133),
f = null,
r = {},
i = {
plugins: [],
eventNameDispatchConfigs: {},
registrationNameModules: {},
registrationNameDependencies: {},
injectEventPluginOrder: function (n) {
u(!f);
f = Array.prototype.slice.call(n);
e()
},
injectEventPluginsByName: function (n) {
var f = !1,
t, i;
for (t in n) n.hasOwnProperty(t) && (i = n[t], r.hasOwnProperty(t) && r[t] === i || (u(!r[t]), r[t] = i, f = !0));
f && e()
},
getPluginModuleForEvent: function (n) {
var t = n.dispatchConfig,
r, u;
if (t.registrationName) return i.registrationNameModules[t.registrationName] || null;
for (r in t.phasedRegistrationNames)
if (t.phasedRegistrationNames.hasOwnProperty(r) && (u = i.registrationNameModules[t.phasedRegistrationNames[r]], u)) return u;
return null
},
_resetEventPlugins: function () {
var u, n, e, t, o;
f = null;
for (u in r) r.hasOwnProperty(u) && delete r[u];
i.plugins.length = 0;
n = i.eventNameDispatchConfigs;
for (e in n) n.hasOwnProperty(e) && delete n[e];
t = i.registrationNameModules;
for (o in t) t.hasOwnProperty(o) && delete t[o]
}
};
t.exports = i
}, {
133: 133
}],
19: [function (n, t) {
"use strict";
function u(n) {
return n === i.topMouseUp || n === i.topTouchEnd || n === i.topTouchCancel
}
function f(n) {
return n === i.topMouseMove || n === i.topTouchMove
}
function e(n) {
return n === i.topMouseDown || n === i.topTouchStart
}
function o(n, t) {
var i = n._dispatchListeners,
u = n._dispatchIDs,
r;
if (Array.isArray(i))
for (r = 0; r < i.length && !n.isPropagationStopped(); r++) t(n, i[r], u[r]);
else i && t(n, i, u)
}
function s(n, t, i) {
n.currentTarget = r.Mount.getNode(i);
var u = t(n, i);
return n.currentTarget = null, u
}
function h(n, t) {
o(n, t);
n._dispatchListeners = null;
n._dispatchIDs = null
}
function c(n) {
var i = n._dispatchListeners,
r = n._dispatchIDs,
t;
if (Array.isArray(i)) {
for (t = 0; t < i.length && !n.isPropagationStopped(); t++)
if (i[t](n, r[t])) return r[t]
} else if (i && i(n, r)) return r;
return null
}
function l(n) {
var t = c(n);
return n._dispatchIDs = null, n._dispatchListeners = null, t
}
function a(n) {
var t = n._dispatchListeners,
r = n._dispatchIDs,
i;
return p(!Array.isArray(t)), i = t ? t(n, r) : null, n._dispatchListeners = null, n._dispatchIDs = null, i
}
function v(n) {
return !!n._dispatchListeners
}
var y = n(15),
p = n(133),
r = {
Mount: null,
injectMount: function (n) {
r.Mount = n
}
},
i = y.topLevelTypes,
w = {
isEndish: u,
isMoveish: f,
isStartish: e,
executeDirectDispatch: a,
executeDispatch: s,
executeDispatchesInOrder: h,
executeDispatchesInOrderStopAtTrue: l,
hasDispatches: v,
injection: r,
useTouchEvents: !1
};
t.exports = w
}, {
133: 133,
15: 15
}],
20: [function (n, t) {
"use strict";
function s(n, t, i) {
var r = t.dispatchConfig.phasedRegistrationNames[i];
return o(n, r)
}
function h(n, t, r) {
var f = t ? e.bubbled : e.captured,
u = s(n, r, f);
u && (r._dispatchListeners = i(r._dispatchListeners, u), r._dispatchIDs = i(r._dispatchIDs, n))
}
function c(n) {
n && n.dispatchConfig.phasedRegistrationNames && r.injection.getInstanceHandle().traverseTwoPhase(n.dispatchMarker, h, n)
}
function u(n, t, r) {
if (r && r.dispatchConfig.registrationName) {
var f = r.dispatchConfig.registrationName,
u = o(n, f);
u && (r._dispatchListeners = i(r._dispatchListeners, u), r._dispatchIDs = i(r._dispatchIDs, n))
}
}
function l(n) {
n && n.dispatchConfig.registrationName && u(n.dispatchMarker, null, n)
}
function a(n) {
f(n, c)
}
function v(n, t, i, f) {
r.injection.getInstanceHandle().traverseEnterLeave(i, f, u, n, t)
}
function y(n) {
f(n, l)
}
var p = n(15),
r = n(17),
i = n(103),
f = n(118),
e = p.PropagationPhases,
o = r.getListener,
w = {
accumulateTwoPhaseDispatches: a,
accumulateDirectDispatches: y,
accumulateEnterLeaveDispatches: v
};
t.exports = w
}, {
103: 103,
118: 118,
15: 15,
17: 17
}],
21: [function (n, t) {
"use strict";
var i = !("undefined" == typeof window || !window.document || !window.document.createElement),
r = {
canUseDOM: i,
canUseWorkers: "undefined" != typeof Worker,
canUseEventListeners: i && !(!window.addEventListener && !window.attachEvent),
canUseViewport: i && !!window.screen,
isInWorker: !i
};
t.exports = r
}, {}],
22: [function (n, t) {
"use strict";
function i(n) {
this._root = n;
this._startText = this.getText();
this._fallbackText = null
}
var r = n(28),
u = n(27),
f = n(128);
u(i.prototype, {
getText: function () {
return "value" in this._root ? this._root.value : this._root[f()]
},
getData: function () {
var f, e;
if (this._fallbackText) return this._fallbackText;
for (var t, r = this._startText, u = r.length, i = this.getText(), o = i.length, n = 0; u > n && r[n] === i[n]; n++);
for (f = u - n, t = 1; f >= t && r[u - t] === i[o - t]; t++);
return e = t > 1 ? 1 - t : void 0, this._fallbackText = i.slice(n, e), this._fallbackText
}
});
r.addPoolingTo(i);
t.exports = i
}, {
128: 128,
27: 27,
28: 28
}],
23: [function (n, t) {
"use strict";
var s, f = n(10),
c = n(21),
i = f.injection.MUST_USE_ATTRIBUTE,
u = f.injection.MUST_USE_PROPERTY,
r = f.injection.HAS_BOOLEAN_VALUE,
l = f.injection.HAS_SIDE_EFFECTS,
a = f.injection.HAS_NUMERIC_VALUE,
e = f.injection.HAS_POSITIVE_NUMERIC_VALUE,
v = f.injection.HAS_OVERLOADED_BOOLEAN_VALUE,
o, h;
c.canUseDOM && (o = document.implementation, s = o && o.hasFeature && o.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1"));
h = {
isCustomAttribute: RegExp.prototype.test.bind(/^(data|aria)-[a-z_][a-z\d_.\-]*$/),
Properties: {
accept: null,
acceptCharset: null,
accessKey: null,
action: null,
allowFullScreen: i | r,
allowTransparency: i,
alt: null,
async: r,
autoComplete: null,
autoPlay: r,
cellPadding: null,
cellSpacing: null,
charSet: i,
checked: u | r,
classID: i,
className: s ? i : u,
cols: i | e,
colSpan: null,
content: null,
contentEditable: null,
contextMenu: i,
controls: u | r,
coords: null,
crossOrigin: null,
data: null,
dateTime: i,
defer: r,
dir: null,
disabled: i | r,
download: v,
draggable: null,
encType: null,
form: i,
formAction: i,
formEncType: i,
formMethod: i,
formNoValidate: r,
formTarget: i,
frameBorder: i,
headers: null,
height: i,
hidden: i | r,
href: null,
hrefLang: null,
htmlFor: null,
httpEquiv: null,
icon: null,
id: u,
label: null,
lang: null,
list: i,
loop: u | r,
manifest: i,
marginHeight: null,
marginWidth: null,
max: null,
maxLength: i,
media: i,
mediaGroup: null,
method: null,
min: null,
multiple: u | r,
muted: u | r,
name: null,
noValidate: r,
open: r,
pattern: null,
placeholder: null,
poster: null,
preload: null,
radioGroup: null,
readOnly: u | r,
rel: null,
required: r,
role: i,
rows: i | e,
rowSpan: null,
sandbox: null,
scope: null,
scrolling: null,
seamless: i | r,
selected: u | r,
shape: null,
size: i | e,
sizes: i,
span: e,
spellCheck: null,
src: null,
srcDoc: u,
srcSet: i,
start: a,
step: null,
style: null,
tabIndex: null,
target: null,
title: null,
type: null,
useMap: null,
value: u | l,
width: i,
wmode: i,
autoCapitalize: null,
autoCorrect: null,
itemProp: i,
itemScope: i | r,
itemType: i,
itemID: i,
itemRef: i,
property: null
},
DOMAttributeNames: {
acceptCharset: "accept-charset",
className: "class",
htmlFor: "for",
httpEquiv: "http-equiv"
},
DOMPropertyNames: {
autoCapitalize: "autocapitalize",
autoComplete: "autocomplete",
autoCorrect: "autocorrect",
autoFocus: "autofocus",
autoPlay: "autoplay",
encType: "encoding",
hrefLang: "hreflang",
radioGroup: "radiogroup",
spellCheck: "spellcheck",
srcDoc: "srcdoc",
srcSet: "srcset"
}
};
t.exports = h
}, {
10: 10,
21: 21
}],
24: [function (n, t) {
"use strict";
function r(n) {
i(null == n.props.checkedLink || null == n.props.valueLink)
}
function u(n) {
r(n);
i(null == n.props.value && null == n.props.onChange)
}
function f(n) {
r(n);
i(null == n.props.checked && null == n.props.onChange)
}
function e(n) {
this.props.valueLink.requestChange(n.target.value)
}
function o(n) {
this.props.checkedLink.requestChange(n.target.checked)
}
var s = n(76),
i = n(133),
h = {
button: !0,
checkbox: !0,
image: !0,
hidden: !0,
radio: !0,
reset: !0,
submit: !0
},
c = {
Mixin: {
propTypes: {
value: function (n, t) {
return !n[t] || h[n.type] || n.onChange || n.readOnly || n.disabled ? null : new Error("You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`.")
},
checked: function (n, t) {
return !n[t] || n.onChange || n.readOnly || n.disabled ? null : new Error("You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`.")
},
onChange: s.func
}
},
getValue: function (n) {
return n.props.valueLink ? (u(n), n.props.valueLink.value) : n.props.value
},
getChecked: function (n) {
return n.props.checkedLink ? (f(n), n.props.checkedLink.value) : n.props.checked
},
getOnChange: function (n) {
return n.props.valueLink ? (u(n), e) : n.props.checkedLink ? (f(n), o) : n.props.onChange
}
};
t.exports = c
}, {
133: 133,
76: 76
}],
25: [function (n, t) {
"use strict";
function r(n) {
n.remove()
}
var u = n(30),
f = n(103),
e = n(118),
i = n(133),
o = {
trapBubbledEvent: function (n, t) {
var r, e;
i(this.isMounted());
r = this.getDOMNode();
i(r);
e = u.trapBubbledEvent(n, t, r);
this._localEventListeners = f(this._localEventListeners, e)
},
componentWillUnmount: function () {
this._localEventListeners && e(this._localEventListeners, r)
}
};
t.exports = o
}, {
103: 103,
118: 118,
133: 133,
30: 30
}],
26: [function (n, t) {
"use strict";
var i = n(15),
r = n(112),
u = i.topLevelTypes,
f = {
eventTypes: null,
extractEvents: function (n, t, i, f) {
if (n === u.topTouchStart) {
var e = f.target;
e && !e.onclick && (e.onclick = r)
}
}
};
t.exports = f
}, {
112: 112,
15: 15
}],
27: [function (n, t) {
"use strict";
function i(n) {
var u, t, i;
if (null == n) throw new TypeError("Object.assign target cannot be null or undefined");
for (var f = Object(n), e = Object.prototype.hasOwnProperty, r = 1; r < arguments.length; r++)
if (u = arguments[r], null != u) {
t = Object(u);
for (i in t) e.call(t, i) && (f[i] = t[i])
}
return f
}
t.exports = i
}, {}],
28: [function (n, t) {
"use strict";
var r = n(133),
i = function (n) {
var t = this,
i;
return t.instancePool.length ? (i = t.instancePool.pop(), t.call(i, n), i) : new t(n)
},
u = function (n, t) {
var i = this,
r;
return i.instancePool.length ? (r = i.instancePool.pop(), i.call(r, n, t), r) : new i(n, t)
},
f = function (n, t, i) {
var r = this,
u;
return r.instancePool.length ? (u = r.instancePool.pop(), r.call(u, n, t, i), u) : new r(n, t, i)
},
e = function (n, t, i, r, u) {
var f = this,
e;
return f.instancePool.length ? (e = f.instancePool.pop(), f.call(e, n, t, i, r, u), e) : new f(n, t, i, r, u)
},
o = function (n) {
var t = this;
r(n instanceof t);
n.destructor && n.destructor();
t.instancePool.length < t.poolSize && t.instancePool.push(n)
},
s = 10,
h = i,
c = function (n, t) {
var i = n;
return i.instancePool = [], i.getPooled = t || h, i.poolSize || (i.poolSize = s), i.release = o, i
},
l = {
addPoolingTo: c,
oneArgumentPooler: i,
twoArgumentPooler: u,
threeArgumentPooler: f,
fiveArgumentPooler: e
};
t.exports = l
}, {
133: 133
}],
29: [function (n, t) {
"use strict";
var i = n(115),
r = {
getDOMNode: function () {
return i(this)
}
};
t.exports = r
}, {
115: 115
}],
30: [function (n, t) {
"use strict";
function h(n) {
return Object.prototype.hasOwnProperty.call(n, f) || (n[f] = p++, e[n[f]] = {}), e[n[f]]
}
var c = n(15),
r = n(17),
l = n(18),
a = n(59),
v = n(102),
y = n(27),
u = n(134),
e = {},
o = !1,
p = 0,
s = {
topBlur: "blur",
topChange: "change",
topClick: "click",
topCompositionEnd: "compositionend",
topCompositionStart: "compositionstart",
topCompositionUpdate: "compositionupdate",
topContextMenu: "contextmenu",
topCopy: "copy",
topCut: "cut",
topDoubleClick: "dblclick",
topDrag: "drag",
topDragEnd: "dragend",
topDragEnter: "dragenter",
topDragExit: "dragexit",
topDragLeave: "dragleave",
topDragOver: "dragover",
topDragStart: "dragstart",
topDrop: "drop",
topFocus: "focus",
topInput: "input",
topKeyDown: "keydown",
topKeyPress: "keypress",
topKeyUp: "keyup",
topMouseDown: "mousedown",
topMouseMove: "mousemove",
topMouseOut: "mouseout",
topMouseOver: "mouseover",
topMouseUp: "mouseup",
topPaste: "paste",
topScroll: "scroll",
topSelectionChange: "selectionchange",
topTextInput: "textInput",
topTouchCancel: "touchcancel",
topTouchEnd: "touchend",
topTouchMove: "touchmove",
topTouchStart: "touchstart",
topWheel: "wheel"
},
f = "_reactListenersID" + String(Math.random()).slice(2),
i = y({}, a, {
ReactEventListener: null,
injection: {
injectReactEventListener: function (n) {
n.setHandleTopLevel(i.handleTopLevel);
i.ReactEventListener = n
}
},
setEnabled: function (n) {
i.ReactEventListener && i.ReactEventListener.setEnabled(n)
},
isEnabled: function () {
return !(!i.ReactEventListener || !i.ReactEventListener.isEnabled())
},
listenTo: function (n, t) {
for (var f, e = t, o = h(e), v = l.registrationNameDependencies[n], r = c.topLevelTypes, a = 0, y = v.length; y > a; a++) f = v[a], o.hasOwnProperty(f) && o[f] || (f === r.topWheel ? u("wheel") ? i.ReactEventListener.trapBubbledEvent(r.topWheel, "wheel", e) : u("mousewheel") ? i.ReactEventListener.trapBubbledEvent(r.topWheel, "mousewheel", e) : i.ReactEventListener.trapBubbledEvent(r.topWheel, "DOMMouseScroll", e) : f === r.topScroll ? u("scroll", !0) ? i.ReactEventListener.trapCapturedEvent(r.topScroll, "scroll", e) : i.ReactEventListener.trapBubbledEvent(r.topScroll, "scroll", i.ReactEventListener.WINDOW_HANDLE) : f === r.topFocus || f === r.topBlur ? (u("focus", !0) ? (i.ReactEventListener.trapCapturedEvent(r.topFocus, "focus", e), i.ReactEventListener.trapCapturedEvent(r.topBlur, "blur", e)) : u("focusin") && (i.ReactEventListener.trapBubbledEvent(r.topFocus, "focusin", e), i.ReactEventListener.trapBubbledEvent(r.topBlur, "focusout", e)), o[r.topBlur] = !0, o[r.topFocus] = !0) : s.hasOwnProperty(f) && i.ReactEventListener.trapBubbledEvent(f, s[f], e), o[f] = !0)
},
trapBubbledEvent: function (n, t, r) {
return i.ReactEventListener.trapBubbledEvent(n, t, r)
},
trapCapturedEvent: function (n, t, r) {
return i.ReactEventListener.trapCapturedEvent(n, t, r)
},
ensureScrollValueMonitoring: function () {
if (!o) {
var n = v.refreshScrollValues;
i.ReactEventListener.monitorScrollValue(n);
o = !0
}
},
eventNameDispatchConfigs: r.eventNameDispatchConfigs,
registrationNameModules: r.registrationNameModules,
putListener: r.putListener,
getListener: r.getListener,
deleteListener: r.deleteListener,
deleteAllListeners: r.deleteAllListeners
});
t.exports = i
}, {
102: 102,
134: 134,
15: 15,
17: 17,
18: 18,
27: 27,
59: 59
}],
31: [function (n, t) {
"use strict";
var i = n(79),
r = n(116),
u = n(132),
f = n(147),
e = {
instantiateChildren: function (n) {
var t = r(n),
i, f, e;
for (i in t) t.hasOwnProperty(i) && (f = t[i], e = u(f, null), t[i] = e);
return t
},
updateChildren: function (n, t, e, o) {
var h = r(t),
s, a;
if (!h && !n) return null;
for (s in h)
if (h.hasOwnProperty(s)) {
var c = n && n[s],
v = c && c._currentElement,
l = h[s];
f(v, l) ? (i.receiveComponent(c, l, e, o), h[s] = c) : (c && i.unmountComponent(c, s), a = u(l, null), h[s] = a)
}
for (s in n) !n.hasOwnProperty(s) || h && h.hasOwnProperty(s) || i.unmountComponent(n[s]);
return h
},
unmountChildren: function (n) {
var t, r;
for (t in n) r = n[t], i.unmountComponent(r)
}
};
t.exports = e
}, {
116: 116,
132: 132,
147: 147,
79: 79
}],
32: [function (n, t) {
"use strict";
function r(n, t) {
this.forEachFunction = n;
this.forEachContext = t
}
function o(n, t, i, r) {
var u = n;
u.forEachFunction.call(u.forEachContext, t, r)
}
function s(n, t, i) {
if (null == n) return n;
var u = r.getPooled(t, i);
f(n, o, u);
r.release(u)
}
function u(n, t, i) {
this.mapResult = n;
this.mapFunction = t;
this.mapContext = i
}
function h(n, t, i, r) {
var u = n,
f = u.mapResult,
o = !f.hasOwnProperty(i),
e;
o && (e = u.mapFunction.call(u.mapContext, t, r), f[i] = e)
}
function c(n, t, i) {
if (null == n) return n;
var r = {},
e = u.getPooled(r, t, i);
return f(n, h, e), u.release(e), v.create(r)
}
function l() {
return null
}
function a(n) {
return f(n, l, null)
}
var i = n(28),
v = n(61),
f = n(149),
y = (n(150), i.twoArgumentPooler),
p = i.threeArgumentPooler,
e;
i.addPoolingTo(r, y);
i.addPoolingTo(u, p);
e = {
forEach: s,
map: c,
count: a
};
t.exports = e
}, {
149: 149,
150: 150,
28: 28,
61: 61
}],
33: [function (n, t) {
"use strict";
function w(n, t) {
var u = f.hasOwnProperty(t) ? f[t] : null;
v.hasOwnProperty(t) && r(u === i.OVERRIDE_BASE);
n.hasOwnProperty(t) && r(u === i.DEFINE_MANY || u === i.DEFINE_MANY_MERGED)
}
function s(n, t) {
var e, u, s, h;
if (t) {
r("function" != typeof t);
r(!tt.isValidElement(t));
e = n.prototype;
t.hasOwnProperty(l) && o.mixins(n, t.mixins);
for (u in t)
if (t.hasOwnProperty(u) && u !== l)
if (s = t[u], w(e, u), o.hasOwnProperty(u)) o[u](n, s);
else {
var a = f.hasOwnProperty(u),
v = e.hasOwnProperty(u),
y = s && s.__reactDontBind,
p = "function" == typeof s,
b = p && !a && !v && !y;
b ? (e.__reactAutoBindMap || (e.__reactAutoBindMap = {}), e.__reactAutoBindMap[u] = s, e[u] = s) : v ? (h = f[u], r(a && (h === i.DEFINE_MANY_MERGED || h === i.DEFINE_MANY)), h === i.DEFINE_MANY_MERGED ? e[u] = c(e[u], s) : h === i.DEFINE_MANY && (e[u] = k(e[u], s))) : e[u] = s
}
}
}
function b(n, t) {
var i, u, f, e;
if (t)
for (i in t) u = t[i], t.hasOwnProperty(i) && (f = i in o, r(!f), e = i in n, r(!e), n[i] = u)
}
function h(n, t) {
r(n && t && "object" == typeof n && "object" == typeof t);
for (var i in t) t.hasOwnProperty(i) && (r(void 0 === n[i]), n[i] = t[i]);
return n
}
function c(n, t) {
return function () {
var r = n.apply(this, arguments),
u = t.apply(this, arguments),
i;
return null == r ? u : null == u ? r : (i = {}, h(i, r), h(i, u), i)
}
}
function k(n, t) {
return function () {
n.apply(this, arguments);
t.apply(this, arguments)
}
}
function d(n, t) {
return t.bind(n)
}
function g(n) {
var t, i;
for (t in n.__reactAutoBindMap) n.__reactAutoBindMap.hasOwnProperty(t) && (i = n.__reactAutoBindMap[t], n[t] = d(n, it.guard(i, n.constructor.displayName + "." + t)))
}
var nt = n(34),
tt = (n(39), n(55)),
it = n(58),
rt = n(65),
ut = n(66),
u = (n(75), n(74), n(84)),
e = n(27),
r = n(133),
ft = n(138),
et = n(139),
l = (n(150), et({
mixins: null
})),
i = ft({
DEFINE_ONCE: null,
DEFINE_MANY: null,
OVERRIDE_BASE: null,
DEFINE_MANY_MERGED: null
}),
a = [],
f = {
mixins: i.DEFINE_MANY,
statics: i.DEFINE_MANY,
propTypes: i.DEFINE_MANY,
contextTypes: i.DEFINE_MANY,
childContextTypes: i.DEFINE_MANY,
getDefaultProps: i.DEFINE_MANY_MERGED,
getInitialState: i.DEFINE_MANY_MERGED,
getChildContext: i.DEFINE_MANY_MERGED,
render: i.DEFINE_ONCE,
componentWillMount: i.DEFINE_MANY,
componentDidMount: i.DEFINE_MANY,
componentWillReceiveProps: i.DEFINE_MANY,
shouldComponentUpdate: i.DEFINE_ONCE,
componentWillUpdate: i.DEFINE_MANY,
componentDidUpdate: i.DEFINE_MANY,
componentWillUnmount: i.DEFINE_MANY,
updateComponent: i.OVERRIDE_BASE
},
o = {
displayName: function (n, t) {
n.displayName = t
},
mixins: function (n, t) {
if (t)
for (var i = 0; i < t.length; i++) s(n, t[i])
},
childContextTypes: function (n, t) {
n.childContextTypes = e({}, n.childContextTypes, t)
},
contextTypes: function (n, t) {
n.contextTypes = e({}, n.contextTypes, t)
},
getDefaultProps: function (n, t) {
n.getDefaultProps = n.getDefaultProps ? c(n.getDefaultProps, t) : t
},
propTypes: function (n, t) {
n.propTypes = e({}, n.propTypes, t)
},
statics: function (n, t) {
b(n, t)
}
},
v = {
replaceState: function (n, t) {
u.enqueueReplaceState(this, n);
t && u.enqueueCallback(this, t)
},
isMounted: function () {
var n = rt.get(this);
return n && n !== ut.currentlyMountingInstance
},
setProps: function (n, t) {
u.enqueueSetProps(this, n);
t && u.enqueueCallback(this, t)
},
replaceProps: function (n, t) {
u.enqueueReplaceProps(this, n);
t && u.enqueueCallback(this, t)
}
},
y = function () {},
p;
e(y.prototype, nt.prototype, v);
p = {
createClass: function (n) {
var t = function (n, t) {
this.__reactAutoBindMap && g(this);
this.props = n;
this.context = t;
this.state = null;
var i = this.getInitialState ? this.getInitialState() : null;
r("object" == typeof i && !Array.isArray(i));
this.state = i
},
i;
t.prototype = new y;
t.prototype.constructor = t;
a.forEach(s.bind(null, t));
s(t, n);
t.getDefaultProps && (t.defaultProps = t.getDefaultProps());
r(t.prototype.render);
for (i in f) t.prototype[i] || (t.prototype[i] = null);
return t.type = t, t
},
injection: {
injectMixin: function (n) {
a.push(n)
}
}
};
t.exports = p
}, {
133: 133,
138: 138,
139: 139,
150: 150,
27: 27,
34: 34,
39: 39,
55: 55,
58: 58,
65: 65,
66: 66,
74: 74,
75: 75,
84: 84
}],
34: [function (n, t) {
"use strict";
function r(n, t) {
this.props = n;
this.context = t
}
var i = n(84),
u = n(133);
n(150);
r.prototype.setState = function (n, t) {
u("object" == typeof n || "function" == typeof n || null == n);
i.enqueueSetState(this, n);
t && i.enqueueCallback(this, t)
};
r.prototype.forceUpdate = function (n) {
i.enqueueForceUpdate(this);
n && i.enqueueCallback(this, n)
};
t.exports = r
}, {
133: 133,
150: 150,
84: 84
}],
35: [function (n, t) {
"use strict";
var i = n(44),
r = n(68),
u = {
processChildrenUpdates: i.dangerouslyProcessChildrenUpdates,
replaceNodeWithMarkupByID: i.dangerouslyReplaceNodeWithMarkupByID,
unmountIDFromEnvironment: function (n) {
r.purgeID(n)
}
};
t.exports = u
}, {
44: 44,
68: 68
}],
36: [function (n, t) {
"use strict";
var u = n(133),
r = !1,
i = {
unmountIDFromEnvironment: null,
replaceNodeWithMarkupByID: null,
processChildrenUpdates: null,
injection: {
injectEnvironment: function (n) {
u(!r);
i.unmountIDFromEnvironment = n.unmountIDFromEnvironment;
i.replaceNodeWithMarkupByID = n.replaceNodeWithMarkupByID;
i.processChildrenUpdates = n.processChildrenUpdates;
r = !0
}
}
};
t.exports = i
}, {
133: 133
}],
37: [function (n, t) {
"use strict";
function v(n) {
var i = n._currentElement._owner || null,
t;
return i && (t = i.getName(), t) ? " Check the render method of `" + t + "`." : ""
}
var y = n(36),
o = n(38),
s = n(39),
h = n(55),
c = (n(56), n(65)),
i = n(66),
p = n(71),
w = n(73),
b = n(75),
r = (n(74), n(79)),
k = n(85),
f = n(27),
e = n(113),
u = n(133),
d = n(147),
g = (n(150), 1),
l = {
construct: function (n) {
this._currentElement = n;
this._rootNodeID = null;
this._instance = null;
this._pendingElement = null;
this._pendingStateQueue = null;
this._pendingReplaceState = !1;
this._pendingForceUpdate = !1;
this._renderedComponent = null;
this._context = null;
this._mountOrder = 0;
this._isTopLevel = !1;
this._pendingCallbacks = null
},
mountComponent: function (n, t, f) {
var s, a, v, y;
this._context = f;
this._mountOrder = g++;
this._rootNodeID = n;
var h = this._processProps(this._currentElement.props),
l = this._processContext(this._currentElement._context),
w = p.getComponentClassForElement(this._currentElement),
o = new w(h, l);
o.props = h;
o.context = l;
o.refs = e;
this._instance = o;
c.set(o, this);
s = o.state;
void 0 === s && (o.state = s = null);
u("object" == typeof s && !Array.isArray(s));
this._pendingStateQueue = null;
this._pendingReplaceState = !1;
this._pendingForceUpdate = !1;
v = i.currentlyMountingInstance;
i.currentlyMountingInstance = this;
try {
o.componentWillMount && (o.componentWillMount(), this._pendingStateQueue && (o.state = this._processPendingState(o.props, o.context)));
a = this._renderValidatedComponent()
} finally {
i.currentlyMountingInstance = v
}
return this._renderedComponent = this._instantiateReactComponent(a, this._currentElement.type), y = r.mountComponent(this._renderedComponent, n, t, this._processChildContext(f)), o.componentDidMount && t.getReactMountReady().enqueue(o.componentDidMount, o), y
},
unmountComponent: function () {
var n = this._instance,
t;
if (n.componentWillUnmount) {
t = i.currentlyUnmountingInstance;
i.currentlyUnmountingInstance = this;
try {
n.componentWillUnmount()
} finally {
i.currentlyUnmountingInstance = t
}
}
r.unmountComponent(this._renderedComponent);
this._renderedComponent = null;
this._pendingStateQueue = null;
this._pendingReplaceState = !1;
this._pendingForceUpdate = !1;
this._pendingCallbacks = null;
this._pendingElement = null;
this._context = null;
this._rootNodeID = null;
c.remove(n)
},
_setPropsInternal: function (n, t) {
var i = this._pendingElement || this._currentElement;
this._pendingElement = h.cloneAndReplaceProps(i, f({}, i.props, n));
k.enqueueUpdate(this, t)
},
_maskContext: function (n) {
var t = null,
i, r;
if ("string" == typeof this._currentElement.type || (i = this._currentElement.type.contextTypes, !i)) return e;
t = {};
for (r in i) t[r] = n[r];
return t
},
_processContext: function (n) {
return this._maskContext(n)
},
_processChildContext: function (n) {
var t = this._instance,
i = t.getChildContext && t.getChildContext(),
r;
if (i) {
u("object" == typeof t.constructor.childContextTypes);
for (r in i) u(r in t.constructor.childContextTypes);
return f({}, n, i)
}
return n
},
_processProps: function (n) {
return n
},
_checkPropTypes: function (n, t, i) {
var e = this.getName(),
r, f;
for (r in n)
if (n.hasOwnProperty(r)) {
try {
u("function" == typeof n[r]);
f = n[r](t, r, e, i)
} catch (o) {
f = o
}
f instanceof Error && (v(this), i === b.prop)
}
},
receiveComponent: function (n, t, i) {
var r = this._currentElement,
u = this._context;
this._pendingElement = null;
this.updateComponent(t, r, n, u, i)
},
performUpdateIfNecessary: function (n) {
null != this._pendingElement && r.receiveComponent(this, this._pendingElement || this._currentElement, n, this._context);
(null !== this._pendingStateQueue || this._pendingForceUpdate) && this.updateComponent(n, this._currentElement, this._currentElement, this._context, this._context)
},
_warnIfContextsDiffer: function (n, t) {
n = this._maskContext(n);
t = this._maskContext(t);
for (var r = Object.keys(t).sort(), i = (this.getName() || "ReactCompositeComponent", 0); i < r.length; i++) r[i]
},
updateComponent: function (n, t, i, r, u) {
var f = this._instance,
e = f.context,
o = f.props,
s, h;
t !== i && (e = this._processContext(i._context), o = this._processProps(i.props), f.componentWillReceiveProps && f.componentWillReceiveProps(o, e));
s = this._processPendingState(o, e);
h = this._pendingForceUpdate || !f.shouldComponentUpdate || f.shouldComponentUpdate(o, s, e);
h ? (this._pendingForceUpdate = !1, this._performComponentUpdate(i, o, s, e, n, u)) : (this._currentElement = i, this._context = u, f.props = o, f.state = s, f.context = e)
},
_processPendingState: function (n, t) {
var o = this._instance,
i = this._pendingStateQueue,
s = this._pendingReplaceState,
r, u, e;
if (this._pendingReplaceState = !1, this._pendingStateQueue = null, !i) return o.state;
for (r = f({}, s ? i[0] : o.state), u = s ? 1 : 0; u < i.length; u++) e = i[u], f(r, "function" == typeof e ? e.call(o, r, n, t) : e);
return r
},
_performComponentUpdate: function (n, t, i, r, u, f) {
var e = this._instance,
o = e.props,
s = e.state,
h = e.context;
e.componentWillUpdate && e.componentWillUpdate(t, i, r);
this._currentElement = n;
this._context = f;
e.props = t;
e.state = i;
e.context = r;
this._updateRenderedComponent(u, f);
e.componentDidUpdate && u.getReactMountReady().enqueue(e.componentDidUpdate.bind(e, o, s, h), e)
},
_updateRenderedComponent: function (n, t) {
var i = this._renderedComponent,
s = i._currentElement,
u = this._renderValidatedComponent(),
f, e, o;
d(s, u) ? r.receiveComponent(i, u, n, this._processChildContext(t)) : (f = this._rootNodeID, e = i._rootNodeID, r.unmountComponent(i), this._renderedComponent = this._instantiateReactComponent(u, this._currentElement.type), o = r.mountComponent(this._renderedComponent, f, n, t), this._replaceNodeWithMarkupByID(e, o))
},
_replaceNodeWithMarkupByID: function (n, t) {
y.replaceNodeWithMarkupByID(n, t)
},
_renderValidatedComponentWithoutOwnerOrContext: function () {
var n = this._instance;
return n.render()
},
_renderValidatedComponent: function () {
var n, t = o.current;
o.current = this._processChildContext(this._currentElement._context);
s.current = this;
try {
n = this._renderValidatedComponentWithoutOwnerOrContext()
} finally {
o.current = t;
s.current = null
}
return u(null === n || n === !1 || h.isValidElement(n)), n
},
attachRef: function (n, t) {
var i = this.getPublicInstance(),
r = i.refs === e ? i.refs = {} : i.refs;
r[n] = t.getPublicInstance()
},
detachRef: function (n) {
var t = this.getPublicInstance().refs;
delete t[n]
},
getName: function () {
var t = this._currentElement.type,
n = this._instance && this._instance.constructor;
return t.displayName || n && n.displayName || t.name || n && n.name || null
},
getPublicInstance: function () {
return this._instance
},
_instantiateReactComponent: null
},
a;
w.measureMethods(l, "ReactCompositeComponent", {
mountComponent: "mountComponent",
updateComponent: "updateComponent",
_renderValidatedComponent: "_renderValidatedComponent"
});
a = {
Mixin: l
};
t.exports = a
}, {
113: 113,
133: 133,
147: 147,
150: 150,
27: 27,
36: 36,
38: 38,
39: 39,
55: 55,
56: 56,
65: 65,
66: 66,
71: 71,
73: 73,
74: 74,
75: 75,
79: 79,
85: 85
}],
38: [function (n, t) {
"use strict";
var r = n(27),
u = n(113),
i = (n(150), {
current: u,
withContext: function (n, t) {
var u, f = i.current;
i.current = r({}, f, n);
try {
u = t()
} finally {
i.current = f
}
return u
}
});
t.exports = i
}, {
113: 113,
150: 150,
27: 27
}],
39: [function (n, t) {
"use strict";
t.exports = {
current: null
}
}, {}],
40: [function (n, t) {
"use strict";
function i(n) {
return r.createFactory(n)
}
var r = n(55),
u = (n(56), n(140)),
f = u({
a: "a",
abbr: "abbr",
address: "address",
area: "area",
article: "article",
aside: "aside",
audio: "audio",
b: "b",
base: "base",
bdi: "bdi",
bdo: "bdo",
big: "big",
blockquote: "blockquote",
body: "body",
br: "br",
button: "button",
canvas: "canvas",
caption: "caption",
cite: "cite",
code: "code",
col: "col",
colgroup: "colgroup",
data: "data",
datalist: "datalist",
dd: "dd",
del: "del",
details: "details",
dfn: "dfn",
dialog: "dialog",
div: "div",
dl: "dl",
dt: "dt",
em: "em",
embed: "embed",
fieldset: "fieldset",
figcaption: "figcaption",
figure: "figure",
footer: "footer",
form: "form",
h1: "h1",
h2: "h2",
h3: "h3",
h4: "h4",
h5: "h5",
h6: "h6",
head: "head",
header: "header",
hr: "hr",
html: "html",
i: "i",
iframe: "iframe",
img: "img",
input: "input",
ins: "ins",
kbd: "kbd",
keygen: "keygen",
label: "label",
legend: "legend",
li: "li",
link: "link",
main: "main",
map: "map",
mark: "mark",
menu: "menu",
menuitem: "menuitem",
meta: "meta",
meter: "meter",
nav: "nav",
noscript: "noscript",
object: "object",
ol: "ol",
optgroup: "optgroup",
option: "option",
output: "output",
p: "p",
param: "param",
picture: "picture",
pre: "pre",
progress: "progress",
q: "q",
rp: "rp",
rt: "rt",
ruby: "ruby",
s: "s",
samp: "samp",
script: "script",
section: "section",
select: "select",
small: "small",
source: "source",
span: "span",
strong: "strong",
style: "style",
sub: "sub",
summary: "summary",
sup: "sup",
table: "table",
tbody: "tbody",
td: "td",
textarea: "textarea",
tfoot: "tfoot",
th: "th",
thead: "thead",
time: "time",
title: "title",
tr: "tr",
track: "track",
u: "u",
ul: "ul",
"var": "var",
video: "video",
wbr: "wbr",
circle: "circle",
defs: "defs",
ellipse: "ellipse",
g: "g",
line: "line",
linearGradient: "linearGradient",
mask: "mask",
path: "path",
pattern: "pattern",
polygon: "polygon",
polyline: "polyline",
radialGradient: "radialGradient",
rect: "rect",
stop: "stop",
svg: "svg",
text: "text",
tspan: "tspan"
}, i);
t.exports = f
}, {
140: 140,
55: 55,
56: 56
}],
41: [function (n, t) {
"use strict";
var i = n(2),
r = n(29),
u = n(33),
f = n(55),
e = n(138),
o = f.createFactory("button"),
s = e({
onClick: !0,
onDoubleClick: !0,
onMouseDown: !0,
onMouseMove: !0,
onMouseUp: !0,
onClickCapture: !0,
onDoubleClickCapture: !0,
onMouseDownCapture: !0,
onMouseMoveCapture: !0,
onMouseUpCapture: !0
}),
h = u.createClass({
displayName: "ReactDOMButton",
tagName: "BUTTON",
mixins: [i, r],
render: function () {
var t = {},
n;
for (n in this.props) !this.props.hasOwnProperty(n) || this.props.disabled && s[n] || (t[n] = this.props[n]);
return o(t, this.props.children)
}
});
t.exports = h
}, {
138: 138,
2: 2,
29: 29,
33: 33,
55: 55
}],
42: [function (n, t) {
"use strict";
function l(n) {
n && (null != n.dangerouslySetInnerHTML && (e(null == n.children), e(null != n.dangerouslySetInnerHTML.__html)), e(null == n.style || "object" == typeof n.style))
}
function a(n, t, i, r) {
var u = k.findReactContainerForID(n),
f;
u && (f = u.nodeType === ut ? u.ownerDocument : u, rt(t, f));
r.getPutListenerQueue().enqueuePutListener(n, t, i)
}
function p(n) {
ot.call(y, n) || (e(et.test(n)), y[n] = !0)
}
function i(n) {
p(n);
this._tag = n;
this._renderedChildren = null;
this._previousStyleCopy = null;
this._rootNodeID = null
}
var w = n(5),
u = n(10),
v = n(11),
f = n(30),
b = n(35),
k = n(68),
d = n(69),
g = n(73),
s = n(27),
nt = n(114),
e = n(133),
tt = (n(134), n(139)),
it = (n(150), f.deleteListener),
rt = f.listenTo,
h = f.registrationNameModules,
c = {
string: !0,
number: !0
},
o = tt({
style: null
}),
ut = 1,
r = null,
ft = {
area: !0,
base: !0,
br: !0,
col: !0,
embed: !0,
hr: !0,
img: !0,
input: !0,
keygen: !0,
link: !0,
meta: !0,
param: !0,
source: !0,
track: !0,
wbr: !0
},
et = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/,
y = {},
ot = {}.hasOwnProperty;
i.displayName = "ReactDOMComponent";
i.Mixin = {
construct: function (n) {
this._currentElement = n
},
mountComponent: function (n, t, i) {
this._rootNodeID = n;
l(this._currentElement.props);
var r = ft[this._tag] ? "" : "<\/" + this._tag + ">";
return this._createOpenTagMarkupAndPutListeners(t) + this._createContentMarkup(t, i) + r
},
_createOpenTagMarkupAndPutListeners: function (n) {
var r = this._currentElement.props,
u = "<" + this._tag,
i, t, f, e;
for (i in r) r.hasOwnProperty(i) && (t = r[i], null != t && (h.hasOwnProperty(i) ? a(this._rootNodeID, i, t, n) : (i === o && (t && (t = this._previousStyleCopy = s({}, r.style)), t = w.createMarkupForStyles(t)), f = v.createMarkupForProperty(i, t), f && (u += " " + f))));
return n.renderToStaticMarkup ? u + ">" : (e = v.createMarkupForID(this._rootNodeID), u + " " + e + ">")
},
_createContentMarkup: function (n, t) {
var i = "",
r, u, f, e, o;
if (("listing" === this._tag || "pre" === this._tag || "textarea" === this._tag) && (i = "\n"), r = this._currentElement.props, u = r.dangerouslySetInnerHTML, null != u) {
if (null != u.__html) return i + u.__html
} else {
if (f = c[typeof r.children] ? r.children : null, e = null != f ? null : r.children, null != f) return i + nt(f);
if (null != e) return o = this.mountChildren(e, n, t), i + o.join("")
}
return i
},
receiveComponent: function (n, t, i) {
var r = this._currentElement;
this._currentElement = n;
this.updateComponent(t, r, n, i)
},
updateComponent: function (n, t, i, r) {
l(this._currentElement.props);
this._updateDOMProperties(t.props, n);
this._updateDOMChildren(t.props, n, r)
},
_updateDOMProperties: function (n, t) {
var i, e, c, v = this._currentElement.props,
y, f, l;
for (i in n)
if (!v.hasOwnProperty(i) && n.hasOwnProperty(i))
if (i === o) {
y = this._previousStyleCopy;
for (e in y) y.hasOwnProperty(e) && (c = c || {}, c[e] = "");
this._previousStyleCopy = null
} else h.hasOwnProperty(i) ? it(this._rootNodeID, i) : (u.isStandardName[i] || u.isCustomAttribute(i)) && r.deletePropertyByID(this._rootNodeID, i);
for (i in v)
if (f = v[i], l = i === o ? this._previousStyleCopy : n[i], v.hasOwnProperty(i) && f !== l)
if (i === o)
if (f && (f = this._previousStyleCopy = s({}, f)), l) {
for (e in l) !l.hasOwnProperty(e) || f && f.hasOwnProperty(e) || (c = c || {}, c[e] = "");
for (e in f) f.hasOwnProperty(e) && l[e] !== f[e] && (c = c || {}, c[e] = f[e])
} else c = f;
else h.hasOwnProperty(i) ? a(this._rootNodeID, i, f, t) : (u.isStandardName[i] || u.isCustomAttribute(i)) && r.updatePropertyByID(this._rootNodeID, i, f);
c && r.updateStylesByID(this._rootNodeID, c)
},
_updateDOMChildren: function (n, t, i) {
var u = this._currentElement.props,
o = c[typeof n.children] ? n.children : null,
f = c[typeof u.children] ? u.children : null,
h = n.dangerouslySetInnerHTML && n.dangerouslySetInnerHTML.__html,
e = u.dangerouslySetInnerHTML && u.dangerouslySetInnerHTML.__html,
l = null != o ? null : n.children,
s = null != f ? null : u.children,
a = null != o || null != h,
v = null != f || null != e;
null != l && null == s ? this.updateChildren(null, t, i) : a && !v && this.updateTextContent("");
null != f ? o !== f && this.updateTextContent("" + f) : null != e ? h !== e && r.updateInnerHTMLByID(this._rootNodeID, e) : null != s && this.updateChildren(s, t, i)
},
unmountComponent: function () {
this.unmountChildren();
f.deleteAllListeners(this._rootNodeID);
b.unmountIDFromEnvironment(this._rootNodeID);
this._rootNodeID = null
}
};
g.measureMethods(i, "ReactDOMComponent", {
mountComponent: "mountComponent",
updateComponent: "updateComponent"
});
s(i.prototype, i.Mixin, d.Mixin);
i.injection = {
injectIDOperations: function (n) {
i.BackendIDOperations = r = n
}
};
t.exports = i
}, {
10: 10,
11: 11,
114: 114,
133: 133,
134: 134,
139: 139,
150: 150,
27: 27,
30: 30,
35: 35,
5: 5,
68: 68,
69: 69,
73: 73
}],
43: [function (n, t) {
"use strict";
var i = n(15),
r = n(25),
u = n(29),
f = n(33),
e = n(55),
o = e.createFactory("form"),
s = f.createClass({
displayName: "ReactDOMForm",
tagName: "FORM",
mixins: [u, r],
render: function () {
return o(this.props)
},
componentDidMount: function () {
this.trapBubbledEvent(i.topLevelTypes.topReset, "reset");
this.trapBubbledEvent(i.topLevelTypes.topSubmit, "submit")
}
});
t.exports = s
}, {
15: 15,
25: 25,
29: 29,
33: 33,
55: 55
}],
44: [function (n, t) {
"use strict";
var s = n(5),
r = n(9),
u = n(11),
i = n(68),
h = n(73),
f = n(133),
c = n(144),
e = {
dangerouslySetInnerHTML: "`dangerouslySetInnerHTML` must be set using `updateInnerHTMLByID()`.",
style: "`style` must be set using `updateStylesByID()`."
},
o = {
updatePropertyByID: function (n, t, r) {
var o = i.getNode(n);
f(!e.hasOwnProperty(t));
null != r ? u.setValueForProperty(o, t, r) : u.deleteValueForProperty(o, t)
},
deletePropertyByID: function (n, t, r) {
var o = i.getNode(n);
f(!e.hasOwnProperty(t));
u.deleteValueForProperty(o, t, r)
},
updateStylesByID: function (n, t) {
var r = i.getNode(n);
s.setValueForStyles(r, t)
},
updateInnerHTMLByID: function (n, t) {
var r = i.getNode(n);
c(r, t)
},
updateTextContentByID: function (n, t) {
var u = i.getNode(n);
r.updateTextContent(u, t)
},
dangerouslyReplaceNodeWithMarkupByID: function (n, t) {
var u = i.getNode(n);
r.dangerouslyReplaceNodeWithMarkup(u, t)
},
dangerouslyProcessChildrenUpdates: function (n, t) {
for (var u = 0; u < n.length; u++) n[u].parentNode = i.getNode(n[u].parentID);
r.processUpdates(n, t)
}
};
h.measureMethods(o, "ReactDOMIDOperations", {
updatePropertyByID: "updatePropertyByID",
deletePropertyByID: "deletePropertyByID",
updateStylesByID: "updateStylesByID",
updateInnerHTMLByID: "updateInnerHTMLByID",
updateTextContentByID: "updateTextContentByID",
dangerouslyReplaceNodeWithMarkupByID: "dangerouslyReplaceNodeWithMarkupByID",
dangerouslyProcessChildrenUpdates: "dangerouslyProcessChildrenUpdates"
});
t.exports = o
}, {
11: 11,
133: 133,
144: 144,
5: 5,
68: 68,
73: 73,
9: 9
}],
45: [function (n, t) {
"use strict";
var i = n(15),
r = n(25),
u = n(29),
f = n(33),
e = n(55),
o = e.createFactory("iframe"),
s = f.createClass({
displayName: "ReactDOMIframe",
tagName: "IFRAME",
mixins: [u, r],
render: function () {
return o(this.props)
},
componentDidMount: function () {
this.trapBubbledEvent(i.topLevelTypes.topLoad, "load")
}
});
t.exports = s
}, {
15: 15,
25: 25,
29: 29,
33: 33,
55: 55
}],
46: [function (n, t) {
"use strict";
var i = n(15),
r = n(25),
u = n(29),
f = n(33),
e = n(55),
o = e.createFactory("img"),
s = f.createClass({
displayName: "ReactDOMImg",
tagName: "IMG",
mixins: [u, r],
render: function () {
return o(this.props)
},
componentDidMount: function () {
this.trapBubbledEvent(i.topLevelTypes.topLoad, "load");
this.trapBubbledEvent(i.topLevelTypes.topError, "error")
}
});
t.exports = s
}, {
15: 15,
25: 25,
29: 29,
33: 33,
55: 55
}],
47: [function (n, t) {
"use strict";
function f() {
this.isMounted() && this.forceUpdate()
}
var h = n(2),
e = n(11),
i = n(24),
c = n(29),
l = n(33),
a = n(55),
r = n(68),
o = n(85),
v = n(27),
s = n(133),
y = a.createFactory("input"),
u = {},
p = l.createClass({
displayName: "ReactDOMInput",
tagName: "INPUT",
mixins: [h, i.Mixin, c],
getInitialState: function () {
var n = this.props.defaultValue;
return {
initialChecked: this.props.defaultChecked || !1,
initialValue: null != n ? n : null
}
},
render: function () {
var n = v({}, this.props),
t, r;
return n.defaultChecked = null, n.defaultValue = null, t = i.getValue(this), n.value = null != t ? t : this.state.initialValue, r = i.getChecked(this), n.checked = null != r ? r : this.state.initialChecked, n.onChange = this._handleChange, y(n, this.props.children)
},
componentDidMount: function () {
var n = r.getID(this.getDOMNode());
u[n] = this
},
componentWillUnmount: function () {
var n = this.getDOMNode(),
t = r.getID(n);
delete u[t]
},
componentDidUpdate: function () {
var t = this.getDOMNode(),
n;
null != this.props.checked && e.setValueForProperty(t, "checked", this.props.checked || !1);
n = i.getValue(this);
null != n && e.setValueForProperty(t, "value", "" + n)
},
_handleChange: function (n) {
var y, p = i.getOnChange(this),
c, e, t, h, a, v;
if (p && (y = p.call(this, n)), o.asap(f, this), c = this.props.name, "radio" === this.props.type && null != c) {
for (e = this.getDOMNode(), t = e; t.parentNode;) t = t.parentNode;
for (var w = t.querySelectorAll("input[name=" + JSON.stringify("" + c) + '][type="radio"]'), l = 0, b = w.length; b > l; l++) h = w[l], h !== e && h.form === e.form && (a = r.getID(h), s(a), v = u[a], s(v), o.asap(f, v))
}
return y
}
});
t.exports = p
}, {
11: 11,
133: 133,
2: 2,
24: 24,
27: 27,
29: 29,
33: 33,
55: 55,
68: 68,
85: 85
}],
48: [function (n, t) {
"use strict";
var i = n(29),
r = n(33),
u = n(55),
f = (n(150), u.createFactory("option")),
e = r.createClass({
displayName: "ReactDOMOption",
tagName: "OPTION",
mixins: [i],
componentWillMount: function () {},
render: function () {
return f(this.props, this.props.children)
}
});
t.exports = e
}, {
150: 150,
29: 29,
33: 33,
55: 55
}],
49: [function (n, t) {
"use strict";
function f() {
if (this._pendingUpdate) {
this._pendingUpdate = !1;
var n = r.getValue(this);
null != n && this.isMounted() && i(this, n)
}
}
function u(n, t) {
if (null == n[t]) return null;
if (n.multiple) {
if (!Array.isArray(n[t])) return new Error("The `" + t + "` prop supplied to <select> must be an array if `multiple` is true.")
} else if (Array.isArray(n[t])) return new Error("The `" + t + "` prop supplied to <select> must be a scalar value if `multiple` is false.")
}
function i(n, t) {
var f, i, u, r = n.getDOMNode().options,
e;
if (n.props.multiple) {
for (f = {}, i = 0, u = t.length; u > i; i++) f["" + t[i]] = !0;
for (i = 0, u = r.length; u > i; i++) e = f.hasOwnProperty(r[i].value), r[i].selected !== e && (r[i].selected = e)
} else {
for (f = "" + t, i = 0, u = r.length; u > i; i++)
if (r[i].value === f) return void(r[i].selected = !0);
r.length && (r[0].selected = !0)
}
}
var e = n(2),
r = n(24),
o = n(29),
s = n(33),
h = n(55),
c = n(85),
l = n(27),
a = h.createFactory("select"),
v = s.createClass({
displayName: "ReactDOMSelect",
tagName: "SELECT",
mixins: [e, r.Mixin, o],
propTypes: {
defaultValue: u,
value: u
},
render: function () {
var n = l({}, this.props);
return n.onChange = this._handleChange, n.value = null, a(n, this.props.children)
},
componentWillMount: function () {
this._pendingUpdate = !1
},
componentDidMount: function () {
var n = r.getValue(this);
null != n ? i(this, n) : null != this.props.defaultValue && i(this, this.props.defaultValue)
},
componentDidUpdate: function (n) {
var t = r.getValue(this);
null != t ? (this._pendingUpdate = !1, i(this, t)) : !n.multiple != !this.props.multiple && (null != this.props.defaultValue ? i(this, this.props.defaultValue) : i(this, this.props.multiple ? [] : ""))
},
_handleChange: function (n) {
var t, i = r.getOnChange(this);
return i && (t = i.call(this, n)), this._pendingUpdate = !0, c.asap(f, this), t
}
});
t.exports = v
}, {
2: 2,
24: 24,
27: 27,
29: 29,
33: 33,
55: 55,
85: 85
}],
50: [function (n, t) {
"use strict";
function i(n, t, i, r) {
return n === i && t === r
}
function f(n) {
var f = document.selection,
t = f.createRange(),
e = t.text.length,
i = t.duplicate(),
r, u;
return i.moveToElementText(n), i.setEndPoint("EndToStart", t), r = i.text.length, u = r + e, {
start: r,
end: u
}
}
function e(n) {
var t = window.getSelection && window.getSelection(),
o;
if (!t || 0 === t.rangeCount) return null;
var h = t.anchorNode,
c = t.anchorOffset,
l = t.focusNode,
a = t.focusOffset,
u = t.getRangeAt(0),
v = i(t.anchorNode, t.anchorOffset, t.focusNode, t.focusOffset),
y = v ? 0 : u.toString().length,
r = u.cloneRange();
r.selectNodeContents(n);
r.setEnd(u.startContainer, u.startOffset);
var p = i(r.startContainer, r.startOffset, r.endContainer, r.endOffset),
f = p ? 0 : r.toString().length,
s = f + y,
e = document.createRange();
return e.setStart(h, c), e.setEnd(l, a), o = e.collapsed, {
start: o ? s : f,
end: o ? f : s
}
}
function o(n, t) {
var i, u, r = document.selection.createRange().duplicate();
"undefined" == typeof t.end ? (i = t.start, u = i) : t.start > t.end ? (i = t.end, u = t.start) : (i = t.start, u = t.end);
r.moveToElementText(n);
r.moveStart("character", i);
r.setEndPoint("EndToStart", r);
r.moveEnd("character", u - i);
r.select()
}
function s(n, t) {
var l, s, u, o;
if (window.getSelection) {
var f = window.getSelection(),
h = n[c()].length,
i = Math.min(t.start, h),
e = "undefined" == typeof t.end ? i : Math.min(t.end, h);
!f.extend && i > e && (l = e, e = i, i = l);
s = r(n, i);
u = r(n, e);
s && u && (o = document.createRange(), o.setStart(s.node, s.offset), f.removeAllRanges(), i > e ? (f.addRange(o), f.extend(u.node, u.offset)) : (o.setEnd(u.node, u.offset), f.addRange(o)))
}
}
var h = n(21),
r = n(126),
c = n(128),
u = h.canUseDOM && "selection" in document && !("getSelection" in window),
l = {
getOffsets: u ? f : e,
setOffsets: u ? o : s
};
t.exports = l
}, {
126: 126,
128: 128,
21: 21
}],
51: [function (n, t) {
"use strict";
var r = n(11),
u = n(35),
f = n(42),
e = n(27),
o = n(114),
i = function () {};
e(i.prototype, {
construct: function (n) {
this._currentElement = n;
this._stringText = "" + n;
this._rootNodeID = null;
this._mountIndex = 0
},
mountComponent: function (n, t) {
this._rootNodeID = n;
var i = o(this._stringText);
return t.renderToStaticMarkup ? i : "<span " + r.createMarkupForID(n) + ">" + i + "<\/span>"
},
receiveComponent: function (n) {
if (n !== this._currentElement) {
this._currentElement = n;
var t = "" + n;
t !== this._stringText && (this._stringText = t, f.BackendIDOperations.updateTextContentByID(this._rootNodeID, t))
}
},
unmountComponent: function () {
u.unmountIDFromEnvironment(this._rootNodeID)
}
});
t.exports = i
}, {
11: 11,
114: 114,
27: 27,
35: 35,
42: 42
}],
52: [function (n, t) {
"use strict";
function u() {
this.isMounted() && this.forceUpdate()
}
var f = n(2),
e = n(11),
i = n(24),
o = n(29),
s = n(33),
h = n(55),
c = n(85),
l = n(27),
r = n(133),
a = (n(150), h.createFactory("textarea")),
v = s.createClass({
displayName: "ReactDOMTextarea",
tagName: "TEXTAREA",
mixins: [f, i.Mixin, o],
getInitialState: function () {
var t = this.props.defaultValue,
n = this.props.children,
u;
return null != n && (r(null == t), Array.isArray(n) && (r(n.length <= 1), n = n[0]), t = "" + n), null == t && (t = ""), u = i.getValue(this), {
initialValue: "" + (null != u ? u : t)
}
},
render: function () {
var n = l({}, this.props);
return r(null == n.dangerouslySetInnerHTML), n.defaultValue = null, n.value = null, n.onChange = this._handleChange, a(n, this.state.initialValue)
},
componentDidUpdate: function () {
var n = i.getValue(this),
t;
null != n && (t = this.getDOMNode(), e.setValueForProperty(t, "value", "" + n))
},
_handleChange: function (n) {
var t, r = i.getOnChange(this);
return r && (t = r.call(this, n)), c.asap(u, this), t
}
});
t.exports = v
}, {
11: 11,
133: 133,
150: 150,
2: 2,
24: 24,
27: 27,
29: 29,
33: 33,
55: 55,
85: 85
}],
53: [function (n, t) {
"use strict";
function r() {
this.reinitializeTransaction()
}
var u = n(85),
o = n(101),
s = n(27),
f = n(112),
h = {
initialize: f,
close: function () {
i.isBatchingUpdates = !1
}
},
c = {
initialize: f,
close: u.flushBatchedUpdates.bind(u)
},
l = [c, h],
e, i;
s(r.prototype, o.Mixin, {
getTransactionWrappers: function () {
return l
}
});
e = new r;
i = {
isBatchingUpdates: !1,
batchedUpdates: function (n, t, r, u, f) {
var o = i.isBatchingUpdates;
i.isBatchingUpdates = !0;
o ? n(t, r, u, f) : e.perform(n, null, t, r, u, f)
}
};
t.exports = i
}, {
101: 101,
112: 112,
27: 27,
85: 85
}],
54: [function (n, t) {
"use strict";
function u(n) {
return p.createClass({
tagName: n.toUpperCase(),
render: function () {
return new st(n, null, null, null, null, this.props)
}
})
}
function f() {
i.EventEmitter.injectReactEventListener(ht);
i.EventPluginHub.injectEventPluginOrder(h);
i.EventPluginHub.injectInstanceHandle(ct);
i.EventPluginHub.injectMount(lt);
i.EventPluginHub.injectEventPluginsByName({
SimpleEventPlugin: pt,
EnterLeaveEventPlugin: c,
ChangeEventPlugin: o,
MobileSafariClickEventPlugin: v,
SelectEventPlugin: vt,
BeforeInputEventPlugin: e
});
i.NativeComponent.injectGenericComponentClass(k);
i.NativeComponent.injectTextComponentClass(ot);
i.NativeComponent.injectAutoWrapper(u);
i.Class.injectMixin(y);
i.NativeComponent.injectComponentClasses({
button: d,
form: g,
iframe: it,
img: nt,
input: rt,
option: ut,
select: ft,
textarea: et,
html: r("html"),
head: r("head"),
body: r("body")
});
i.DOMProperty.injectDOMPropertyConfig(a);
i.DOMProperty.injectDOMPropertyConfig(wt);
i.EmptyComponent.injectEmptyComponent("noscript");
i.Updates.injectReconcileTransaction(at);
i.Updates.injectBatchingStrategy(b);
i.RootIndex.injectCreateReactRootIndex(l.canUseDOM ? s.createReactRootIndex : yt.createReactRootIndex);
i.Component.injectEnvironment(w);
i.DOMComponent.injectIDOperations(tt)
}
var e = n(3),
o = n(7),
s = n(8),
h = n(13),
c = n(14),
l = n(21),
a = n(23),
v = n(26),
y = n(29),
p = n(33),
w = n(35),
b = n(53),
k = n(42),
d = n(41),
g = n(43),
nt = n(46),
tt = n(44),
it = n(45),
rt = n(47),
ut = n(48),
ft = n(49),
et = n(52),
ot = n(51),
st = n(55),
ht = n(60),
i = n(62),
ct = n(64),
lt = n(68),
at = n(78),
vt = n(87),
yt = n(88),
pt = n(89),
wt = n(86),
r = n(109);
t.exports = {
inject: f
}
}, {
109: 109,
13: 13,
14: 14,
21: 21,
23: 23,
26: 26,
29: 29,
3: 3,
33: 33,
35: 35,
41: 41,
42: 42,
43: 43,
44: 44,
45: 45,
46: 46,
47: 47,
48: 48,
49: 49,
51: 51,
52: 52,
53: 53,
55: 55,
60: 60,
62: 62,
64: 64,
68: 68,
7: 7,
78: 78,
8: 8,
86: 86,
87: 87,
88: 88,
89: 89
}],
55: [function (n, t) {
"use strict";
var f = n(38),
r = n(39),
e = n(27),
u = (n(150), {
key: !0,
ref: !0
}),
i = function (n, t, i, r, u, f) {
this.type = n;
this.key = t;
this.ref = i;
this._owner = r;
this._context = u;
this.props = f
};
i.prototype = {
_isReactElement: !0
};
i.createElement = function (n, t, e) {
var o, s = {},
v = null,
y = null,
h, l, c, a;
if (null != t) {
y = void 0 === t.ref ? null : t.ref;
v = void 0 === t.key ? null : "" + t.key;
for (o in t) t.hasOwnProperty(o) && !u.hasOwnProperty(o) && (s[o] = t[o])
}
if (h = arguments.length - 2, 1 === h) s.children = e;
else if (h > 1) {
for (l = Array(h), c = 0; h > c; c++) l[c] = arguments[c + 2];
s.children = l
}
if (n && n.defaultProps) {
a = n.defaultProps;
for (o in a) "undefined" == typeof s[o] && (s[o] = a[o])
}
return new i(n, v, y, r.current, f.current, s)
};
i.createFactory = function (n) {
var t = i.createElement.bind(null, n);
return t.type = n, t
};
i.cloneAndReplaceProps = function (n, t) {
return new i(n.type, n.key, n.ref, n._owner, n._context, t)
};
i.cloneElement = function (n, t, f) {
var o, c = e({}, n.props),
a = n.key,
v = n.ref,
y = n._owner,
s, l, h;
if (null != t) {
void 0 !== t.ref && (v = t.ref, y = r.current);
void 0 !== t.key && (a = "" + t.key);
for (o in t) t.hasOwnProperty(o) && !u.hasOwnProperty(o) && (c[o] = t[o])
}
if (s = arguments.length - 2, 1 === s) c.children = f;
else if (s > 1) {
for (l = Array(s), h = 0; s > h; h++) l[h] = arguments[h + 2];
c.children = l
}
return new i(n.type, a, v, y, n._context, c)
};
i.isValidElement = function (n) {
return !(!n || !n._isReactElement)
};
t.exports = i
}, {
150: 150,
27: 27,
38: 38,
39: 39
}],
56: [function (n, t) {
"use strict";
function v() {
if (r.current) {
var n = r.current.getName();
if (n) return " Check the render method of `" + n + "`."
}
return ""
}
function u(n) {
var i = n && n.getPublicInstance(),
t;
if (i) return t = i.constructor, t ? t.displayName || t.name || void 0 : void 0
}
function y() {
var n = r.current;
return n && u(n) || void 0
}
function f(n, t) {
n._store.validated || null != n.key || (n._store.validated = !0, e('Each child in an array or iterator should have a unique "key" prop.', n, t))
}
function p(n, t, i) {
ut.test(n) && e("Child objects should have non-numeric keys so ordering is preserved.", t, i)
}
function e(n, t, i) {
var c = y(),
l = "string" == typeof i ? i : i.displayName || i.name,
f = c || l,
e = h[n] || (h[n] = {}),
o, s;
e.hasOwnProperty(f) || (e[f] = !0, o = "", t && t._owner && t._owner !== r.current && (s = u(t._owner), o = " It was passed a child from " + s + "."))
}
function o(n, t) {
var r, s, u, h, c, e, o;
if (Array.isArray(n))
for (r = 0; r < n.length; r++) s = n[r], i.isValidElement(s) && f(s, t);
else if (i.isValidElement(n)) n._store.validated = !0;
else if (n)
if (u = it(n), u) {
if (u !== n.entries)
for (c = u.call(n); !(h = c.next()).done;) i.isValidElement(h.value) && f(h.value, t)
} else if ("object" == typeof n) {
e = g.extractIfFragment(n);
for (o in e) e.hasOwnProperty(o) && p(o, e[o], t)
}
}
function w(n, t, i, r) {
var u, f;
for (u in t)
if (t.hasOwnProperty(u)) {
try {
rt("function" == typeof t[u]);
f = t[u](i, u, n, r)
} catch (e) {
f = e
}
f instanceof Error && !(f.message in c) && (c[f.message] = !0, v(this))
}
}
function b(n, t) {
var i = t.type,
r = "string" == typeof i ? i : i.displayName,
u = t._owner ? t._owner.getPublicInstance().constructor.displayName : null,
f = n + "|" + r + "|" + u,
e, o;
l.hasOwnProperty(f) || (l[f] = !0, e = "", r && (e = " <" + r + " />"), o = "", u && (o = " The element was created by " + u + "."))
}
function k(n, t) {
return n !== n ? t !== t : 0 === n && 0 === t ? 1 / n == 1 / t : n === t
}
function d(n) {
var r, i, t;
if (n._store) {
r = n._store.originalProps;
i = n.props;
for (t in i) i.hasOwnProperty(t) && (r.hasOwnProperty(t) && k(r[t], i[t]) || (b(t, n), r[t] = i[t]))
}
}
function s(n) {
if (null != n.type) {
var t = tt.getComponentClassForElement(n),
i = t.displayName || t.name;
t.propTypes && w(i, t.propTypes, n.props, nt.prop);
"function" == typeof t.getDefaultProps
}
}
var i = n(55),
g = n(61),
nt = n(75),
r = (n(74), n(39)),
tt = n(71),
it = n(124),
rt = n(133),
h = (n(150), {}),
c = {},
ut = /^\d+$/,
l = {},
a = {
checkAndWarnForMutatedProps: d,
createElement: function (n) {
var t = i.createElement.apply(this, arguments),
r;
if (null == t) return t;
for (r = 2; r < arguments.length; r++) o(arguments[r], n);
return s(t), t
},
createFactory: function (n) {
var t = a.createElement.bind(null, n);
return t.type = n, t
},
cloneElement: function () {
for (var n = i.cloneElement.apply(this, arguments), t = 2; t < arguments.length; t++) o(arguments[t], n.type);
return s(n), n
}
};
t.exports = a
}, {
124: 124,
133: 133,
150: 150,
39: 39,
55: 55,
61: 61,
71: 71,
74: 74,
75: 75
}],
57: [function (n, t) {
"use strict";
function h(n) {
u[n] = !0
}
function c(n) {
delete u[n]
}
function l(n) {
return !!u[n]
}
var r, f = n(55),
e = n(65),
a = n(133),
u = {},
v = {
injectEmptyComponent: function (n) {
r = f.createFactory(n)
}
},
i = function () {},
o, s;
i.prototype.componentDidMount = function () {
var n = e.get(this);
n && h(n._rootNodeID)
};
i.prototype.componentWillUnmount = function () {
var n = e.get(this);
n && c(n._rootNodeID)
};
i.prototype.render = function () {
return a(r), r()
};
o = f.createElement(i);
s = {
emptyElement: o,
injection: v,
isNullComponentID: l
};
t.exports = s
}, {
133: 133,
55: 55,
65: 65
}],
58: [function (n, t) {
"use strict";
var i = {
guard: function (n) {
return n
}
};
t.exports = i
}, {}],
59: [function (n, t) {
"use strict";
function r(n) {
i.enqueueEvents(n);
i.processEventQueue()
}
var i = n(17),
u = {
handleTopLevel: function (n, t, u, f) {
var e = i.extractEvents(n, t, u, f);
r(e)
}
};
t.exports = u
}, {
17: 17
}],
60: [function (n, t) {
"use strict";
function o(n) {
var t = r.getID(n),
i = l.getReactRootIDFromNodeID(t),
u = r.findReactContainerForID(i);
return r.getFirstReactDOM(u)
}
function u(n, t) {
this.topLevelType = n;
this.nativeEvent = t;
this.ancestors = []
}
function s(n) {
for (var f, e, s, t = r.getFirstReactDOM(y(n.nativeEvent)) || window, u = t; u;) n.ancestors.push(u), u = o(u);
for (f = 0, e = n.ancestors.length; e > f; f++) t = n.ancestors[f], s = r.getID(t) || "", i._handleTopLevel(n.topLevelType, t, s, n.nativeEvent)
}
function h(n) {
var t = p(window);
n(t)
}
var f = n(16),
c = n(21),
e = n(28),
l = n(64),
r = n(68),
a = n(85),
v = n(27),
y = n(123),
p = n(129),
i;
v(u.prototype, {
destructor: function () {
this.topLevelType = null;
this.nativeEvent = null;
this.ancestors.length = 0
}
});
e.addPoolingTo(u, e.twoArgumentPooler);
i = {
_enabled: !0,
_handleTopLevel: null,
WINDOW_HANDLE: c.canUseDOM ? window : null,
setHandleTopLevel: function (n) {
i._handleTopLevel = n
},
setEnabled: function (n) {
i._enabled = !!n
},
isEnabled: function () {
return i._enabled
},
trapBubbledEvent: function (n, t, r) {
var u = r;
return u ? f.listen(u, t, i.dispatchEvent.bind(null, n)) : null
},
trapCapturedEvent: function (n, t, r) {
var u = r;
return u ? f.capture(u, t, i.dispatchEvent.bind(null, n)) : null
},
monitorScrollValue: function (n) {
var t = h.bind(null, n);
f.listen(window, "scroll", t)
},
dispatchEvent: function (n, t) {
if (i._enabled) {
var r = u.getPooled(n, t);
try {
a.batchedUpdates(s, r)
} finally {
u.release(r)
}
}
}
};
t.exports = i
}, {
123: 123,
129: 129,
16: 16,
21: 21,
27: 27,
28: 28,
64: 64,
68: 68,
85: 85
}],
61: [function (n, t) {
"use strict";
var i = (n(55), n(150), {
create: function (n) {
return n
},
extract: function (n) {
return n
},
extractIfFragment: function (n) {
return n
}
});
t.exports = i
}, {
150: 150,
55: 55
}],
62: [function (n, t) {
"use strict";
var i = n(10),
r = n(17),
u = n(36),
f = n(33),
e = n(57),
o = n(30),
s = n(71),
h = n(42),
c = n(73),
l = n(81),
a = n(85),
v = {
Component: u.injection,
Class: f.injection,
DOMComponent: h.injection,
DOMProperty: i.injection,
EmptyComponent: e.injection,
EventPluginHub: r.injection,
EventEmitter: o.injection,
NativeComponent: s.injection,
Perf: c.injection,
RootIndex: l.injection,
Updates: a.injection
};
t.exports = v
}, {
10: 10,
17: 17,
30: 30,
33: 33,
36: 36,
42: 42,
57: 57,
71: 71,
73: 73,
81: 81,
85: 85
}],
63: [function (n, t) {
"use strict";
function f(n) {
return e(document.documentElement, n)
}
var r = n(50),
e = n(107),
o = n(117),
u = n(119),
i = {
hasSelectionCapabilities: function (n) {
return n && ("INPUT" === n.nodeName && "text" === n.type || "TEXTAREA" === n.nodeName || "true" === n.contentEditable)
},
getSelectionInformation: function () {
var n = u();
return {
focusedElem: n,
selectionRange: i.hasSelectionCapabilities(n) ? i.getSelection(n) : null
}
},
restoreSelection: function (n) {
var r = u(),
t = n.focusedElem,
e = n.selectionRange;
r !== t && f(t) && (i.hasSelectionCapabilities(t) && i.setSelection(t, e), o(t))
},
getSelection: function (n) {
var t, i;
return "selectionStart" in n ? t = {
start: n.selectionStart,
end: n.selectionEnd
} : document.selection && "INPUT" === n.nodeName ? (i = document.selection.createRange(), i.parentElement() === n && (t = {
start: -i.moveStart("character", -n.value.length),
end: -i.moveEnd("character", -n.value.length)
})) : t = r.getOffsets(n), t || {
start: 0,
end: 0
}
},
setSelection: function (n, t) {
var u = t.start,
f = t.end,
i;
("undefined" == typeof f && (f = u), "selectionStart" in n) ? (n.selectionStart = u, n.selectionEnd = Math.min(f, n.value.length)) : document.selection && "INPUT" === n.nodeName ? (i = n.createTextRange(), i.collapse(!0), i.moveStart("character", u), i.moveEnd("character", f - u), i.select()) : r.setOffsets(n, t)
}
};
t.exports = i
}, {
107: 107,
117: 117,
119: 119,
50: 50
}],
64: [function (n, t) {
"use strict";
function c(n) {
return i + n.toString(36)
}
function f(n, t) {
return n.charAt(t) === i || t === n.length
}
function o(n) {
return "" === n || n.charAt(0) === i && n.charAt(n.length - 1) !== i
}
function e(n, t) {
return 0 === t.indexOf(n) && f(t, n.length)
}
function l(n) {
return n ? n.substr(0, n.lastIndexOf(i)) : ""
}
function s(n, t) {
if (r(o(n) && o(t)), r(e(n, t)), n === t) return n;
for (var u = n.length + v, i = u; i < t.length && !f(t, i); i++);
return t.substr(0, i)
}
function h(n, t) {
var s = Math.min(n.length, t.length),
u, i, e;
if (0 === s) return "";
for (u = 0, i = 0; s >= i; i++)
if (f(n, i) && f(t, i)) u = i;
else if (n.charAt(i) !== t.charAt(i)) break;
return e = n.substr(0, u), r(o(e)), e
}
function u(n, t, i, u, f, o) {
var c, a;
n = n || "";
t = t || "";
r(n !== t);
c = e(t, n);
r(c || e(n, t));
for (var v = 0, p = c ? l : s, h = n;; h = p(h, t)) {
if (f && h === n || o && h === t || (a = i(h, c, u)), a === !1 || h === t) break;
r(v++ < y)
}
}
var a = n(81),
r = n(133),
i = ".",
v = i.length,
y = 100,
p = {
createReactRootID: function () {
return c(a.createReactRootIndex())
},
createReactID: function (n, t) {
return n + t
},
getReactRootIDFromNodeID: function (n) {
if (n && n.charAt(0) === i && n.length > 1) {
var t = n.indexOf(i, 1);
return t > -1 ? n.substr(0, t) : n
}
return null
},
traverseEnterLeave: function (n, t, i, r, f) {
var e = h(n, t);
e !== n && u(n, e, i, r, !1, !0);
e !== t && u(e, t, i, f, !0, !1)
},
traverseTwoPhase: function (n, t, i) {
n && (u("", n, t, i, !0, !1), u(n, "", t, i, !1, !0))
},
traverseAncestors: function (n, t, i) {
u("", n, t, i, !0, !1)
},
_getFirstCommonAncestorID: h,
_getNextDescendantID: s,
isAncestorIDOf: e,
SEPARATOR: i
};
t.exports = p
}, {
133: 133,
81: 81
}],
65: [function (n, t) {
"use strict";
var i = {
remove: function (n) {
n._reactInternalInstance = void 0
},
get: function (n) {
return n._reactInternalInstance
},
has: function (n) {
return void 0 !== n._reactInternalInstance
},
set: function (n, t) {
n._reactInternalInstance = t
}
};
t.exports = i
}, {}],
66: [function (n, t) {
"use strict";
t.exports = {
currentlyMountingInstance: null,
currentlyUnmountingInstance: null
}
}, {}],
67: [function (n, t) {
"use strict";
var r = n(104),
i = {
CHECKSUM_ATTR_NAME: "data-react-checksum",
addChecksumToMarkup: function (n) {
var t = r(n);
return n.replace(">", " " + i.CHECKSUM_ATTR_NAME + '="' + t + '">')
},
canReuseMarkup: function (n, t) {
var u = t.getAttribute(i.CHECKSUM_ATTR_NAME),
f;
return u = u && parseInt(u, 10), f = r(n), f === u
}
};
t.exports = i
}, {
104: 104
}],
68: [function (n, t) {
"use strict";
function nt(n, t) {
for (var r = Math.min(n.length, t.length), i = 0; r > i; i++)
if (n.charAt(i) !== t.charAt(i)) return i;
return n.length === t.length ? -1 : r
}
function s(n) {
var t = y(n);
return t && i.getID(t)
}
function tt(n) {
var t = a(n),
i;
return t && (r.hasOwnProperty(t) ? (i = r[t], i !== n && (u(!h(i, t)), r[t] = n)) : r[t] = n), t
}
function a(n) {
return n && n.getAttribute && n.getAttribute(g) || ""
}
function it(n, t) {
var i = a(n);
i !== t && delete r[i];
n.setAttribute(g, t);
r[t] = n
}
function rt(n) {
return r.hasOwnProperty(n) && h(r[n], n) || (r[n] = i.findReactNodeByID(n)), r[n]
}
function ut(n) {
var t = vt.get(n)._rootNodeID;
return at.isNullComponentID(t) ? null : (r.hasOwnProperty(t) && h(r[t], t) || (r[t] = i.findReactNodeByID(t)), r[t])
}
function h(n, t) {
if (n) {
u(a(n) === t);
var r = i.findReactContainerForID(t);
if (r && wt(r, n)) return !0
}
return !1
}
function ft(n) {
delete r[n]
}
function et(n) {
var t = r[n];
return t && h(t, n) ? void(l = t) : !1
}
function ot(n) {
l = null;
f.traverseAncestors(n, et);
var t = l;
return l = null, t
}
function st(n, t, r, u, f) {
var e = k.mountComponent(n, t, u, pt);
n._isTopLevel = !0;
i._mountImageIntoNode(e, r, f)
}
function ht(n, t, i, r) {
var u = v.ReactReconcileTransaction.getPooled();
u.perform(st, null, n, t, i, u, r);
v.ReactReconcileTransaction.release(u)
}
var ct = n(10),
lt = n(30),
b = (n(39), n(55)),
at = (n(56), n(57)),
f = n(64),
vt = n(65),
c = n(67),
yt = n(73),
k = n(79),
d = n(84),
v = n(85),
pt = n(113),
wt = n(107),
y = n(127),
bt = n(132),
u = n(133),
kt = n(144),
dt = n(147),
gt = (n(150), f.SEPARATOR),
g = ct.ID_ATTRIBUTE_NAME,
r = {},
p = 1,
e = 9,
o = {},
w = {},
ni = [],
l = null,
i = {
_instancesByReactRootID: o,
scrollMonitor: function (n, t) {
t()
},
_updateRootComponent: function (n, t, r, u) {
return i.scrollMonitor(r, function () {
d.enqueueElementInternal(n, t);
u && d.enqueueCallbackInternal(n, u)
}), n
},
_registerComponent: function (n, t) {
u(t && (t.nodeType === p || t.nodeType === e));
lt.ensureScrollValueMonitoring();
var r = i.registerContainer(t);
return o[r] = n, r
},
_renderNewRootComponent: function (n, t, r) {
var u = bt(n, null),
f = i._registerComponent(u, t);
return v.batchedUpdates(ht, u, f, t, r), u
},
render: function (n, t, r) {
var f, e;
if (u(b.isValidElement(n)), f = o[s(t)], f) {
if (e = f._currentElement, dt(e, n)) return i._updateRootComponent(f, n, t, r).getPublicInstance();
i.unmountComponentAtNode(t)
}
var h = y(t),
l = h && i.isRenderedByReact(h),
a = l && !f,
c = i._renderNewRootComponent(n, t, a).getPublicInstance();
return r && r.call(c), c
},
constructAndRenderComponent: function (n, t, r) {
var u = b.createElement(n, t);
return i.render(u, r)
},
constructAndRenderComponentByID: function (n, t, r) {
var f = document.getElementById(r);
return u(f), i.constructAndRenderComponent(n, t, f)
},
registerContainer: function (n) {
var t = s(n);
return t && (t = f.getReactRootIDFromNodeID(t)), t || (t = f.createReactRootID()), w[t] = n, t
},
unmountComponentAtNode: function (n) {
u(n && (n.nodeType === p || n.nodeType === e));
var t = s(n),
r = o[t];
return r ? (i.unmountComponentFromNode(r, n), delete o[t], delete w[t], !0) : !1
},
unmountComponentFromNode: function (n, t) {
for (k.unmountComponent(n), t.nodeType === e && (t = t.documentElement); t.lastChild;) t.removeChild(t.lastChild)
},
findReactContainerForID: function (n) {
var t = f.getReactRootIDFromNodeID(n);
return w[t]
},
findReactNodeByID: function (n) {
var t = i.findReactContainerForID(n);
return i.findComponentRoot(t, n)
},
isRenderedByReact: function (n) {
if (1 !== n.nodeType) return !1;
var t = i.getID(n);
return t ? t.charAt(0) === gt : !1
},
getFirstReactDOM: function (n) {
for (var t = n; t && t.parentNode !== t;) {
if (i.isRenderedByReact(t)) return t;
t = t.parentNode
}
return null
},
findComponentRoot: function (n, t) {
var r = ni,
s = 0,
c = ot(t) || n,
h, e, o;
for (r[0] = c.firstChild, r.length = 1; s < r.length;) {
for (e = r[s++]; e;) o = i.getID(e), o ? t === o ? h = e : f.isAncestorIDOf(o, t) && (r.length = s = 0, r.push(e.firstChild)) : r.push(e.firstChild), e = e.nextSibling;
if (h) return r.length = 0, h
}
r.length = 0;
u(!1)
},
_mountImageIntoNode: function (n, t, i) {
var r, s, o, f;
if (u(t && (t.nodeType === p || t.nodeType === e)), i) {
if (r = y(t), c.canReuseMarkup(n, r)) return;
s = r.getAttribute(c.CHECKSUM_ATTR_NAME);
r.removeAttribute(c.CHECKSUM_ATTR_NAME);
o = r.outerHTML;
r.setAttribute(c.CHECKSUM_ATTR_NAME, s);
f = nt(n, o);
" (client) " + n.substring(f - 20, f + 20) + "\n (server) " + o.substring(f - 20, f + 20);
u(t.nodeType !== e)
}
u(t.nodeType !== e);
kt(t, n)
},
getReactRootID: s,
getID: tt,
setID: it,
getNode: rt,
getNodeFromInstance: ut,
purgeID: ft
};
yt.measureMethods(i, "ReactMount", {
_renderNewRootComponent: "_renderNewRootComponent",
_mountImageIntoNode: "_mountImageIntoNode"
});
t.exports = i
}, {
10: 10,
107: 107,
113: 113,
127: 127,
132: 132,
133: 133,
144: 144,
147: 147,
150: 150,
30: 30,
39: 39,
55: 55,
56: 56,
57: 57,
64: 64,
65: 65,
67: 67,
73: 73,
79: 79,
84: 84,
85: 85
}],
69: [function (n, t) {
"use strict";
function c(n, t, r) {
i.push({
parentID: n,
parentNode: null,
type: u.INSERT_MARKUP,
markupIndex: o.push(t) - 1,
textContent: null,
fromIndex: null,
toIndex: r
})
}
function l(n, t, r) {
i.push({
parentID: n,
parentNode: null,
type: u.MOVE_EXISTING,
markupIndex: null,
textContent: null,
fromIndex: t,
toIndex: r
})
}
function a(n, t) {
i.push({
parentID: n,
parentNode: null,
type: u.REMOVE_NODE,
markupIndex: null,
textContent: null,
fromIndex: t,
toIndex: null
})
}
function v(n, t) {
i.push({
parentID: n,
parentNode: null,
type: u.TEXT_CONTENT,
markupIndex: null,
textContent: t,
fromIndex: null,
toIndex: null
})
}
function s() {
i.length && (y.processChildrenUpdates(i, o), e())
}
function e() {
i.length = 0;
o.length = 0
}
var y = n(36),
u = n(70),
h = n(79),
f = n(31),
r = 0,
i = [],
o = [],
p = {
Mixin: {
mountChildren: function (n, t, i) {
var r = f.instantiateChildren(n, t, i),
e, o, u;
this._renderedChildren = r;
e = [];
o = 0;
for (u in r)
if (r.hasOwnProperty(u)) {
var s = r[u],
c = this._rootNodeID + u,
l = h.mountComponent(s, c, t, i);
s._mountIndex = o;
e.push(l);
o++
}
return e
},
updateTextContent: function (n) {
var u, t, i;
r++;
u = !0;
try {
t = this._renderedChildren;
f.unmountChildren(t);
for (i in t) t.hasOwnProperty(i) && this._unmountChildByName(t[i], i);
this.setTextContent(n);
u = !1
} finally {
r--;
r || (u ? e() : s())
}
},
updateChildren: function (n, t, i) {
r++;
var u = !0;
try {
this._updateChildren(n, t, i);
u = !1
} finally {
r--;
r || (u ? e() : s())
}
},
_updateChildren: function (n, t, i) {
var e = this._renderedChildren,
o = f.updateChildren(e, n, t, i),
r, s, h, u, c;
if (this._renderedChildren = o, o || e) {
s = 0;
h = 0;
for (r in o) o.hasOwnProperty(r) && (u = e && e[r], c = o[r], u === c ? (this.moveChild(u, h, s), s = Math.max(u._mountIndex, s), u._mountIndex = h) : (u && (s = Math.max(u._mountIndex, s), this._unmountChildByName(u, r)), this._mountChildByNameAtIndex(c, r, h, t, i)), h++);
for (r in e) !e.hasOwnProperty(r) || o && o.hasOwnProperty(r) || this._unmountChildByName(e[r], r)
}
},
unmountChildren: function () {
var n = this._renderedChildren;
f.unmountChildren(n);
this._renderedChildren = null
},
moveChild: function (n, t, i) {
n._mountIndex < i && l(this._rootNodeID, n._mountIndex, t)
},
createChild: function (n, t) {
c(this._rootNodeID, t, n._mountIndex)
},
removeChild: function (n) {
a(this._rootNodeID, n._mountIndex)
},
setTextContent: function (n) {
v(this._rootNodeID, n)
},
_mountChildByNameAtIndex: function (n, t, i, r, u) {
var f = this._rootNodeID + t,
e = h.mountComponent(n, f, r, u);
n._mountIndex = i;
this.createChild(n, e)
},
_unmountChildByName: function (n) {
this.removeChild(n);
n._mountIndex = null
}
}
};
t.exports = p
}, {
31: 31,
36: 36,
70: 70,
79: 79
}],
70: [function (n, t) {
"use strict";
var i = n(138),
r = i({
INSERT_MARKUP: null,
MOVE_EXISTING: null,
REMOVE_NODE: null,
TEXT_CONTENT: null
});
t.exports = r
}, {
138: 138
}],
71: [function (n, t) {
"use strict";
function e(n) {
if ("function" == typeof n.type) return n.type;
var t = n.type,
i = r[t];
return null == i && (r[t] = i = f(t)), i
}
function o(n) {
return l(i), new i(n.type, n.props)
}
function s(n) {
return new u(n)
}
function h(n) {
return n instanceof u
}
var c = n(27),
l = n(133),
f = null,
i = null,
r = {},
u = null,
a = {
injectGenericComponentClass: function (n) {
i = n
},
injectTextComponentClass: function (n) {
u = n
},
injectComponentClasses: function (n) {
c(r, n)
},
injectAutoWrapper: function (n) {
f = n
}
},
v = {
getComponentClassForElement: e,
createInternalComponent: o,
createInstanceForText: s,
isTextComponent: h,
injection: a
};
t.exports = v
}, {
133: 133,
27: 27
}],
72: [function (n, t) {
"use strict";
var r = n(133),
i = {
isValidOwner: function (n) {
return !(!n || "function" != typeof n.attachRef || "function" != typeof n.detachRef)
},
addComponentAsRefTo: function (n, t, u) {
r(i.isValidOwner(u));
u.attachRef(t, n)
},
removeComponentAsRefFrom: function (n, t, u) {
r(i.isValidOwner(u));
u.getPublicInstance().refs[t] === n.getPublicInstance() && u.detachRef(t)
}
};
t.exports = i
}, {
133: 133
}],
73: [function (n, t) {
"use strict";
function r(n, t, i) {
return i
}
var i = {
enableMeasure: !1,
storedMeasure: r,
measureMethods: function () {},
measure: function (n, t, i) {
return i
},
injection: {
injectMeasure: function (n) {
i.storedMeasure = n
}
}
};
t.exports = i
}, {}],
74: [function (n, t) {
"use strict";
t.exports = {}
}, {}],
75: [function (n, t) {
"use strict";
var i = n(138),
r = i({
prop: null,
context: null,
childContext: null
});
t.exports = r
}, {
138: 138
}],
76: [function (n, t) {
"use strict";
function i(n) {
function t(t, i, u, f, e) {
if (f = f || s, null == i[u]) {
var o = r[e];
return t ? new Error("Required " + o + " `" + u + "` was not specified in " + ("`" + f + "`.")) : null
}
return n(i, u, f, e)
}
var i = t.bind(null, !1);
return i.isRequired = t.bind(null, !0), i
}
function u(n) {
function t(t, i, u, e) {
var o = t[i],
c = f(o),
s, h;
return c !== n ? (s = r[e], h = k(o), new Error("Invalid " + s + " `" + i + "` of type `" + h + "` " + ("supplied to `" + u + "`, expected `" + n + "`."))) : null
}
return i(t)
}
function h() {
return i(g.thatReturns(null))
}
function c(n) {
function t(t, i, u, e) {
var o = t[i],
c, l, s, h;
if (!Array.isArray(o)) return c = r[e], l = f(o), new Error("Invalid " + c + " `" + i + "` of type " + ("`" + l + "` supplied to `" + u + "`, expected an array."));
for (s = 0; s < o.length; s++)
if (h = n(o, s, u, e), h instanceof Error) return h;
return null
}
return i(t)
}
function l() {
function n(n, t, i, u) {
if (!o.isValidElement(n[t])) {
var f = r[u];
return new Error("Invalid " + f + " `" + t + "` supplied to " + ("`" + i + "`, expected a ReactElement."))
}
return null
}
return i(n)
}
function a(n) {
function t(t, i, u, f) {
if (!(t[i] instanceof n)) {
var e = r[f],
o = n.name || s;
return new Error("Invalid " + e + " `" + i + "` supplied to " + ("`" + u + "`, expected instance of `" + o + "`."))
}
return null
}
return i(t)
}
function v(n) {
function t(t, i, u, f) {
for (var s, h, o = t[i], e = 0; e < n.length; e++)
if (o === n[e]) return null;
return s = r[f], h = JSON.stringify(n), new Error("Invalid " + s + " `" + i + "` of value `" + o + "` " + ("supplied to `" + u + "`, expected one of " + h + "."))
}
return i(t)
}
function y(n) {
function t(t, i, u, e) {
var o = t[i],
c = f(o),
l, s, h;
if ("object" !== c) return l = r[e], new Error("Invalid " + l + " `" + i + "` of type " + ("`" + c + "` supplied to `" + u + "`, expected an object."));
for (s in o)
if (o.hasOwnProperty(s) && (h = n(o, s, u, e), h instanceof Error)) return h;
return null
}
return i(t)
}
function p(n) {
function t(t, i, u, f) {
for (var o, s, e = 0; e < n.length; e++)
if (o = n[e], null == o(t, i, u, f)) return null;
return s = r[f], new Error("Invalid " + s + " `" + i + "` supplied to " + ("`" + u + "`."))
}
return i(t)
}
function w() {
function n(n, t, i, u) {
if (!e(n[t])) {
var f = r[u];
return new Error("Invalid " + f + " `" + t + "` supplied to " + ("`" + i + "`, expected a ReactNode."))
}
return null
}
return i(n)
}
function b(n) {
function t(t, i, u, e) {
var c = t[i],
l = f(c),
a, o, s, h;
if ("object" !== l) return a = r[e], new Error("Invalid " + a + " `" + i + "` of type `" + l + "` " + ("supplied to `" + u + "`, expected `object`."));
for (o in n)
if (s = n[o], s && (h = s(c, o, u, e), h)) return h;
return null
}
return i(t)
}
function e(n) {
switch (typeof n) {
case "number":
case "string":
case "undefined":
return !0;
case "boolean":
return !n;
case "object":
if (Array.isArray(n)) return n.every(e);
if (null === n || o.isValidElement(n)) return !0;
n = d.extractIfFragment(n);
for (var t in n)
if (!e(n[t])) return !1;
return !0;
default:
return !1
}
}
function f(n) {
var t = typeof n;
return Array.isArray(n) ? "array" : n instanceof RegExp ? "object" : t
}
function k(n) {
var t = f(n);
if ("object" === t) {
if (n instanceof Date) return "date";
if (n instanceof RegExp) return "regexp"
}
return t
}
var o = n(55),
d = n(61),
r = n(74),
g = n(112),
s = "<<anonymous>>",
nt = l(),
tt = w(),
it = {
array: u("array"),
bool: u("boolean"),
func: u("function"),
number: u("number"),
object: u("object"),
string: u("string"),
any: h(),
arrayOf: c,
element: nt,
instanceOf: a,
node: tt,
objectOf: y,
oneOf: v,
oneOfType: p,
shape: b
};
t.exports = it
}, {
112: 112,
55: 55,
61: 61,
74: 74
}],
77: [function (n, t) {
"use strict";
function i() {
this.listenersToPut = []
}
var r = n(28),
u = n(30),
f = n(27);
f(i.prototype, {
enqueuePutListener: function (n, t, i) {
this.listenersToPut.push({
rootNodeID: n,
propKey: t,
propValue: i
})
},
putListeners: function () {
for (var t, n = 0; n < this.listenersToPut.length; n++) t = this.listenersToPut[n], u.putListener(t.rootNodeID, t.propKey, t.propValue)
},
reset: function () {
this.listenersToPut.length = 0
},
destructor: function () {
this.reset()
}
});
r.addPoolingTo(i);
t.exports = i
}, {
27: 27,
28: 28,
30: 30
}],
78: [function (n, t) {
"use strict";
function i() {
this.reinitializeTransaction();
this.renderToStaticMarkup = !1;
this.reactMountReady = u.getPooled(null);
this.putListenerQueue = e.getPooled()
}
var u = n(6),
o = n(28),
r = n(30),
f = n(63),
e = n(77),
s = n(101),
h = n(27),
c = {
initialize: f.getSelectionInformation,
close: f.restoreSelection
},
l = {
initialize: function () {
var n = r.isEnabled();
return r.setEnabled(!1), n
},
close: function (n) {
r.setEnabled(n)
}
},
a = {
initialize: function () {
this.reactMountReady.reset()
},
close: function () {
this.reactMountReady.notifyAll()
}
},
v = {
initialize: function () {
this.putListenerQueue.reset()
},
close: function () {
this.putListenerQueue.putListeners()
}
},
y = [v, c, l, a],
p = {
getTransactionWrappers: function () {
return y
},
getReactMountReady: function () {
return this.reactMountReady
},
getPutListenerQueue: function () {
return this.putListenerQueue
},
destructor: function () {
u.release(this.reactMountReady);
this.reactMountReady = null;
e.release(this.putListenerQueue);
this.putListenerQueue = null
}
};
h(i.prototype, s.Mixin, p);
o.addPoolingTo(i);
t.exports = i
}, {
101: 101,
27: 27,
28: 28,
30: 30,
6: 6,
63: 63,
77: 77
}],
79: [function (n, t) {
"use strict";
function r() {
i.attachRefs(this, this._currentElement)
}
var i = n(80),
u = (n(56), {
mountComponent: function (n, t, i, u) {
var f = n.mountComponent(t, i, u);
return i.getReactMountReady().enqueue(r, n), f
},
unmountComponent: function (n) {
i.detachRefs(n, n._currentElement);
n.unmountComponent()
},
receiveComponent: function (n, t, u, f) {
var e = n._currentElement,
o;
(t !== e || null == t._owner) && (o = i.shouldUpdateRefs(e, t), o && i.detachRefs(n, e), n.receiveComponent(t, u, f), o && u.getReactMountReady().enqueue(r, n))
},
performUpdateIfNecessary: function (n, t) {
n.performUpdateIfNecessary(t)
}
});
t.exports = u
}, {
56: 56,
80: 80
}],
80: [function (n, t) {
"use strict";
function u(n, t, i) {
"function" == typeof n ? n(t.getPublicInstance()) : r.addComponentAsRefTo(t, n, i)
}
function f(n, t, i) {
"function" == typeof n ? n(null) : r.removeComponentAsRefFrom(t, n, i)
}
var r = n(72),
i = {};
i.attachRefs = function (n, t) {
var i = t.ref;
null != i && u(i, n, t._owner)
};
i.shouldUpdateRefs = function (n, t) {
return t._owner !== n._owner || t.ref !== n.ref
};
i.detachRefs = function (n, t) {
var i = t.ref;
null != i && f(i, n, t._owner)
};
t.exports = i
}, {
72: 72
}],
81: [function (n, t) {
"use strict";
var r = {
injectCreateReactRootIndex: function (n) {
i.createReactRootIndex = n
}
},
i = {
createReactRootIndex: null,
injection: r
};
t.exports = i
}, {}],
82: [function (n, t) {
"use strict";
function s(n) {
var t, s;
o(r.isValidElement(n));
try {
return s = u.createReactRootID(), t = i.getPooled(!1), t.perform(function () {
var i = e(n, null),
r = i.mountComponent(s, t, f);
return c.addChecksumToMarkup(r)
}, null)
} finally {
i.release(t)
}
}
function h(n) {
var t, s;
o(r.isValidElement(n));
try {
return s = u.createReactRootID(), t = i.getPooled(!0), t.perform(function () {
var i = e(n, null);
return i.mountComponent(s, t, f)
}, null)
} finally {
i.release(t)
}
}
var r = n(55),
u = n(64),
c = n(67),
i = n(83),
f = n(113),
e = n(132),
o = n(133);
t.exports = {
renderToString: s,
renderToStaticMarkup: h
}
}, {
113: 113,
132: 132,
133: 133,
55: 55,
64: 64,
67: 67,
83: 83
}],
83: [function (n, t) {
"use strict";
function i(n) {
this.reinitializeTransaction();
this.renderToStaticMarkup = n;
this.reactMountReady = r.getPooled(null);
this.putListenerQueue = u.getPooled()
}
var e = n(28),
r = n(6),
u = n(77),
o = n(101),
s = n(27),
f = n(112),
h = {
initialize: function () {
this.reactMountReady.reset()
},
close: f
},
c = {
initialize: function () {
this.putListenerQueue.reset()
},
close: f
},
l = [c, h],
a = {
getTransactionWrappers: function () {
return l
},
getReactMountReady: function () {
return this.reactMountReady
},
getPutListenerQueue: function () {
return this.putListenerQueue
},
destructor: function () {
r.release(this.reactMountReady);
this.reactMountReady = null;
u.release(this.putListenerQueue);
this.putListenerQueue = null
}
};
s(i.prototype, o.Mixin, a);
e.addPoolingTo(i);
t.exports = i
}, {
101: 101,
112: 112,
27: 27,
28: 28,
6: 6,
77: 77
}],
84: [function (n, t) {
"use strict";
function i(n) {
n !== f.currentlyMountingInstance && h.enqueueUpdate(n)
}
function r(n) {
u(null == o.current);
var t = s.get(n);
return t ? t === f.currentlyUnmountingInstance ? null : t : null
}
var f = n(66),
o = n(39),
e = n(55),
s = n(65),
h = n(85),
c = n(27),
u = n(133),
l = (n(150), {
enqueueCallback: function (n, t) {
u("function" == typeof t);
var e = r(n);
return e && e !== f.currentlyMountingInstance ? (e._pendingCallbacks ? e._pendingCallbacks.push(t) : e._pendingCallbacks = [t], void i(e)) : null
},
enqueueCallbackInternal: function (n, t) {
u("function" == typeof t);
n._pendingCallbacks ? n._pendingCallbacks.push(t) : n._pendingCallbacks = [t];
i(n)
},
enqueueForceUpdate: function (n) {
var t = r(n, "forceUpdate");
t && (t._pendingForceUpdate = !0, i(t))
},
enqueueReplaceState: function (n, t) {
var u = r(n, "replaceState");
u && (u._pendingStateQueue = [t], u._pendingReplaceState = !0, i(u))
},
enqueueSetState: function (n, t) {
var u = r(n, "setState"),
f;
u && (f = u._pendingStateQueue || (u._pendingStateQueue = []), f.push(t), i(u))
},
enqueueSetProps: function (n, t) {
var f = r(n, "setProps"),
o, s;
f && (u(f._isTopLevel), o = f._pendingElement || f._currentElement, s = c({}, o.props, t), f._pendingElement = e.cloneAndReplaceProps(o, s), i(f))
},
enqueueReplaceProps: function (n, t) {
var f = r(n, "replaceProps"),
o;
f && (u(f._isTopLevel), o = f._pendingElement || f._currentElement, f._pendingElement = e.cloneAndReplaceProps(o, t), i(f))
},
enqueueElementInternal: function (n, t) {
n._pendingElement = t;
i(n)
}
});
t.exports = l
}, {
133: 133,
150: 150,
27: 27,
39: 39,
55: 55,
65: 65,
66: 66,
85: 85
}],
85: [function (n, t) {
"use strict";
function l() {
r(f.ReactReconcileTransaction && u)
}
function s() {
this.reinitializeTransaction();
this.dirtyComponentsLength = null;
this.callbackQueue = e.getPooled();
this.reconcileTransaction = f.ReactReconcileTransaction.getPooled()
}
function p(n, t, i, r, f) {
l();
u.batchedUpdates(n, t, i, r, f)
}
function w(n, t) {
return n._mountOrder - t._mountOrder
}
function b(n) {
var o = n.dirtyComponentsLength,
u, t, f, e;
for (r(o === i.length), i.sort(w), u = 0; o > u; u++)
if (t = i[u], f = t._pendingCallbacks, t._pendingCallbacks = null, nt.performUpdateIfNecessary(t, n.reconcileTransaction), f)
for (e = 0; e < f.length; e++) n.callbackQueue.enqueue(f[e], t.getPublicInstance())
}
function a(n) {
return l(), u.isBatchingUpdates ? void i.push(n) : void u.batchedUpdates(a, n)
}
function k(n, t) {
r(u.isBatchingUpdates);
c.enqueue(n, t);
h = !0
}
var e = n(6),
d = n(28),
g = (n(39), n(73)),
nt = n(79),
v = n(101),
tt = n(27),
r = n(133),
i = (n(150), []),
c = e.getPooled(),
h = !1,
u = null,
it = {
initialize: function () {
this.dirtyComponentsLength = i.length
},
close: function () {
this.dirtyComponentsLength !== i.length ? (i.splice(0, this.dirtyComponentsLength), o()) : i.length = 0
}
},
rt = {
initialize: function () {
this.callbackQueue.reset()
},
close: function () {
this.callbackQueue.notifyAll()
}
},
ut = [it, rt],
o, y, f;
tt(s.prototype, v.Mixin, {
getTransactionWrappers: function () {
return ut
},
destructor: function () {
this.dirtyComponentsLength = null;
e.release(this.callbackQueue);
this.callbackQueue = null;
f.ReactReconcileTransaction.release(this.reconcileTransaction);
this.reconcileTransaction = null
},
perform: function (n, t, i) {
return v.Mixin.perform.call(this, this.reconcileTransaction.perform, this.reconcileTransaction, n, t, i)
}
});
d.addPoolingTo(s);
o = function () {
for (var n, t; i.length || h;) i.length && (n = s.getPooled(), n.perform(b, null, n), s.release(n)), h && (h = !1, t = c, c = e.getPooled(), t.notifyAll(), e.release(t))
};
o = g.measure("ReactUpdates", "flushBatchedUpdates", o);
y = {
injectReconcileTransaction: function (n) {
r(n);
f.ReactReconcileTransaction = n
},
injectBatchingStrategy: function (n) {
r(n);
r("function" == typeof n.batchedUpdates);
r("boolean" == typeof n.isBatchingUpdates);
u = n
}
};
f = {
ReactReconcileTransaction: null,
batchedUpdates: p,
enqueueUpdate: a,
flushBatchedUpdates: o,
injection: y,
asap: k
};
t.exports = f
}, {
101: 101,
133: 133,
150: 150,
27: 27,
28: 28,
39: 39,
6: 6,
73: 73,
79: 79
}],
86: [function (n, t) {
"use strict";
var r = n(10),
i = r.injection.MUST_USE_ATTRIBUTE,
u = {
Properties: {
cx: i,
cy: i,
d: i,
dx: i,
dy: i,
fill: i,
fillOpacity: i,
fontFamily: i,
fontSize: i,
fx: i,
fy: i,
gradientTransform: i,
gradientUnits: i,
markerEnd: i,
markerMid: i,
markerStart: i,
offset: i,
opacity: i,
patternContentUnits: i,
patternUnits: i,
points: i,
preserveAspectRatio: i,
r: i,
rx: i,
ry: i,
spreadMethod: i,
stopColor: i,
stopOpacity: i,
stroke: i,
strokeDasharray: i,
strokeLinecap: i,
strokeOpacity: i,
strokeWidth: i,
textAnchor: i,
transform: i,
version: i,
viewBox: i,
x1: i,
x2: i,
x: i,
y1: i,
y2: i,
y: i
},
DOMAttributeNames: {
fillOpacity: "fill-opacity",
fontFamily: "font-family",
fontSize: "font-size",
gradientTransform: "gradientTransform",
gradientUnits: "gradientUnits",
markerEnd: "marker-end",
markerMid: "marker-mid",
markerStart: "marker-start",
patternContentUnits: "patternContentUnits",
patternUnits: "patternUnits",
preserveAspectRatio: "preserveAspectRatio",
spreadMethod: "spreadMethod",
stopColor: "stop-color",
stopOpacity: "stop-opacity",
strokeDasharray: "stroke-dasharray",
strokeLinecap: "stroke-linecap",
strokeOpacity: "stroke-opacity",
strokeWidth: "stroke-width",
textAnchor: "text-anchor",
viewBox: "viewBox"
}
};
t.exports = u
}, {
10: 10
}],
87: [function (n, t) {
"use strict";
function c(n) {
var t, i;
return "selectionStart" in n && v.hasSelectionCapabilities(n) ? {
start: n.selectionStart,
end: n.selectionEnd
} : window.getSelection ? (t = window.getSelection(), {
anchorNode: t.anchorNode,
anchorOffset: t.anchorOffset,
focusNode: t.focusNode,
focusOffset: t.focusOffset
}) : document.selection ? (i = document.selection.createRange(), {
parentElement: i.parentElement(),
text: i.text,
top: i.boundingTop,
left: i.boundingLeft
}) : void 0
}
function o(n) {
var i, t;
return e || null == r || r !== p() ? null : (i = c(r), !u || !b(u, i) ? (u = i, t = y.getPooled(h.select, f, n), t.type = "select", t.target = r, a.accumulateTwoPhaseDispatches(t), t) : void 0)
}
var l = n(15),
a = n(20),
v = n(63),
y = n(93),
p = n(119),
w = n(136),
s = n(139),
b = n(146),
i = l.topLevelTypes,
h = {
select: {
phasedRegistrationNames: {
bubbled: s({
onSelect: null
}),
captured: s({
onSelectCapture: null
})
},
dependencies: [i.topBlur, i.topContextMenu, i.topFocus, i.topKeyDown, i.topMouseDown, i.topMouseUp, i.topSelectionChange]
}
},
r = null,
f = null,
u = null,
e = !1,
k = {
eventTypes: h,
extractEvents: function (n, t, s, h) {
switch (n) {
case i.topFocus:
(w(t) || "true" === t.contentEditable) && (r = t, f = s, u = null);
break;
case i.topBlur:
r = null;
f = null;
u = null;
break;
case i.topMouseDown:
e = !0;
break;
case i.topContextMenu:
case i.topMouseUp:
return e = !1, o(h);
case i.topSelectionChange:
case i.topKeyDown:
case i.topKeyUp:
return o(h)
}
}
};
t.exports = k
}, {
119: 119,
136: 136,
139: 139,
146: 146,
15: 15,
20: 20,
63: 63,
93: 93
}],
88: [function (n, t) {
"use strict";
var i = Math.pow(2, 53),
r = {
createReactRootIndex: function () {
return Math.ceil(Math.random() * i)
}
};
t.exports = r
}, {}],
89: [function (n, t) {
"use strict";
var s = n(15),
h = n(19),
c = n(20),
l = n(90),
a = n(93),
v = n(94),
y = n(96),
p = n(97),
w = n(92),
b = n(98),
k = n(99),
d = n(100),
g = n(120),
nt = n(133),
i = n(139),
u = (n(150), s.topLevelTypes),
r = {
blur: {
phasedRegistrationNames: {
bubbled: i({
onBlur: !0
}),
captured: i({
onBlurCapture: !0
})
}
},
click: {
phasedRegistrationNames: {
bubbled: i({
onClick: !0
}),
captured: i({
onClickCapture: !0
})
}
},
contextMenu: {
phasedRegistrationNames: {
bubbled: i({
onContextMenu: !0
}),
captured: i({
onContextMenuCapture: !0
})
}
},
copy: {
phasedRegistrationNames: {
bubbled: i({
onCopy: !0
}),
captured: i({
onCopyCapture: !0
})
}
},
cut: {
phasedRegistrationNames: {
bubbled: i({
onCut: !0
}),
captured: i({
onCutCapture: !0
})
}
},
doubleClick: {
phasedRegistrationNames: {
bubbled: i({
onDoubleClick: !0
}),
captured: i({
onDoubleClickCapture: !0
})
}
},
drag: {
phasedRegistrationNames: {
bubbled: i({
onDrag: !0
}),
captured: i({
onDragCapture: !0
})
}
},
dragEnd: {
phasedRegistrationNames: {
bubbled: i({
onDragEnd: !0
}),
captured: i({
onDragEndCapture: !0
})
}
},
dragEnter: {
phasedRegistrationNames: {
bubbled: i({
onDragEnter: !0
}),
captured: i({
onDragEnterCapture: !0
})
}
},
dragExit: {
phasedRegistrationNames: {
bubbled: i({
onDragExit: !0
}),
captured: i({
onDragExitCapture: !0
})
}
},
dragLeave: {
phasedRegistrationNames: {
bubbled: i({
onDragLeave: !0
}),
captured: i({
onDragLeaveCapture: !0
})
}
},
dragOver: {
phasedRegistrationNames: {
bubbled: i({
onDragOver: !0
}),
captured: i({
onDragOverCapture: !0
})
}
},
dragStart: {
phasedRegistrationNames: {
bubbled: i({
onDragStart: !0
}),
captured: i({
onDragStartCapture: !0
})
}
},
drop: {
phasedRegistrationNames: {
bubbled: i({
onDrop: !0
}),
captured: i({
onDropCapture: !0
})
}
},
focus: {
phasedRegistrationNames: {
bubbled: i({
onFocus: !0
}),
captured: i({
onFocusCapture: !0
})
}
},
input: {
phasedRegistrationNames: {
bubbled: i({
onInput: !0
}),
captured: i({
onInputCapture: !0
})
}
},
keyDown: {
phasedRegistrationNames: {
bubbled: i({
onKeyDown: !0
}),
captured: i({
onKeyDownCapture: !0
})
}
},
keyPress: {
phasedRegistrationNames: {
bubbled: i({
onKeyPress: !0
}),
captured: i({
onKeyPressCapture: !0
})
}
},
keyUp: {
phasedRegistrationNames: {
bubbled: i({
onKeyUp: !0
}),
captured: i({
onKeyUpCapture: !0
})
}
},
load: {
phasedRegistrationNames: {
bubbled: i({
onLoad: !0
}),
captured: i({
onLoadCapture: !0
})
}
},
error: {
phasedRegistrationNames: {
bubbled: i({
onError: !0
}),
captured: i({
onErrorCapture: !0
})
}
},
mouseDown: {
phasedRegistrationNames: {
bubbled: i({
onMouseDown: !0
}),
captured: i({
onMouseDownCapture: !0
})
}
},
mouseMove: {
phasedRegistrationNames: {
bubbled: i({
onMouseMove: !0
}),
captured: i({
onMouseMoveCapture: !0
})
}
},
mouseOut: {
phasedRegistrationNames: {
bubbled: i({
onMouseOut: !0
}),
captured: i({
onMouseOutCapture: !0
})
}
},
mouseOver: {
phasedRegistrationNames: {
bubbled: i({
onMouseOver: !0
}),
captured: i({
onMouseOverCapture: !0
})
}
},
mouseUp: {
phasedRegistrationNames: {
bubbled: i({
onMouseUp: !0
}),
captured: i({
onMouseUpCapture: !0
})
}
},
paste: {
phasedRegistrationNames: {
bubbled: i({
onPaste: !0
}),
captured: i({
onPasteCapture: !0
})
}
},
reset: {
phasedRegistrationNames: {
bubbled: i({
onReset: !0
}),
captured: i({
onResetCapture: !0
})
}
},
scroll: {
phasedRegistrationNames: {
bubbled: i({
onScroll: !0
}),
captured: i({
onScrollCapture: !0
})
}
},
submit: {
phasedRegistrationNames: {
bubbled: i({
onSubmit: !0
}),
captured: i({
onSubmitCapture: !0
})
}
},
touchCancel: {
phasedRegistrationNames: {
bubbled: i({
onTouchCancel: !0
}),
captured: i({
onTouchCancelCapture: !0
})
}
},
touchEnd: {
phasedRegistrationNames: {
bubbled: i({
onTouchEnd: !0
}),
captured: i({
onTouchEndCapture: !0
})
}
},
touchMove: {
phasedRegistrationNames: {
bubbled: i({
onTouchMove: !0
}),
captured: i({
onTouchMoveCapture: !0
})
}
},
touchStart: {
phasedRegistrationNames: {
bubbled: i({
onTouchStart: !0
}),
captured: i({
onTouchStartCapture: !0
})
}
},
wheel: {
phasedRegistrationNames: {
bubbled: i({
onWheel: !0
}),
captured: i({
onWheelCapture: !0
})
}
}
},
f = {
topBlur: r.blur,
topClick: r.click,
topContextMenu: r.contextMenu,
topCopy: r.copy,
topCut: r.cut,
topDoubleClick: r.doubleClick,
topDrag: r.drag,
topDragEnd: r.dragEnd,
topDragEnter: r.dragEnter,
topDragExit: r.dragExit,
topDragLeave: r.dragLeave,
topDragOver: r.dragOver,
topDragStart: r.dragStart,
topDrop: r.drop,
topError: r.error,
topFocus: r.focus,
topInput: r.input,
topKeyDown: r.keyDown,
topKeyPress: r.keyPress,
topKeyUp: r.keyUp,
topLoad: r.load,
topMouseDown: r.mouseDown,
topMouseMove: r.mouseMove,
topMouseOut: r.mouseOut,
topMouseOver: r.mouseOver,
topMouseUp: r.mouseUp,
topPaste: r.paste,
topReset: r.reset,
topScroll: r.scroll,
topSubmit: r.submit,
topTouchCancel: r.touchCancel,
topTouchEnd: r.touchEnd,
topTouchMove: r.touchMove,
topTouchStart: r.touchStart,
topWheel: r.wheel
},
e, o;
for (e in f) f[e].dependencies = [e];
o = {
eventTypes: r,
executeDispatch: function (n, t, i) {
var r = h.executeDispatch(n, t, i);
r === !1 && (n.stopPropagation(), n.preventDefault())
},
extractEvents: function (n, t, i, r) {
var s = f[n],
e, o;
if (!s) return null;
switch (n) {
case u.topInput:
case u.topLoad:
case u.topError:
case u.topReset:
case u.topSubmit:
e = a;
break;
case u.topKeyPress:
if (0 === g(r)) return null;
case u.topKeyDown:
case u.topKeyUp:
e = y;
break;
case u.topBlur:
case u.topFocus:
e = v;
break;
case u.topClick:
if (2 === r.button) return null;
case u.topContextMenu:
case u.topDoubleClick:
case u.topMouseDown:
case u.topMouseMove:
case u.topMouseOut:
case u.topMouseOver:
case u.topMouseUp:
e = p;
break;
case u.topDrag:
case u.topDragEnd:
case u.topDragEnter:
case u.topDragExit:
case u.topDragLeave:
case u.topDragOver:
case u.topDragStart:
case u.topDrop:
e = w;
break;
case u.topTouchCancel:
case u.topTouchEnd:
case u.topTouchMove:
case u.topTouchStart:
e = b;
break;
case u.topScroll:
e = k;
break;
case u.topWheel:
e = d;
break;
case u.topCopy:
case u.topCut:
case u.topPaste:
e = l
}
return nt(e), o = e.getPooled(s, i, r), c.accumulateTwoPhaseDispatches(o), o
}
};
t.exports = o
}, {
100: 100,
120: 120,
133: 133,
139: 139,
15: 15,
150: 150,
19: 19,
20: 20,
90: 90,
92: 92,
93: 93,
94: 94,
96: 96,
97: 97,
98: 98,
99: 99
}],
90: [function (n, t) {
"use strict";
function i(n, t, i) {
r.call(this, n, t, i)
}
var r = n(93),
u = {
clipboardData: function (n) {
return "clipboardData" in n ? n.clipboardData : window.clipboardData
}
};
r.augmentClass(i, u);
t.exports = i
}, {
93: 93
}],
91: [function (n, t) {
"use strict";
function i(n, t, i) {
r.call(this, n, t, i)
}
var r = n(93);
r.augmentClass(i, {
data: null
});
t.exports = i
}, {
93: 93
}],
92: [function (n, t) {
"use strict";
function i(n, t, i) {
r.call(this, n, t, i)
}
var r = n(97);
r.augmentClass(i, {
dataTransfer: null
});
t.exports = i
}, {
97: 97
}],
93: [function (n, t) {
"use strict";
function r(n, t, r) {
var f, u, e, o;
this.dispatchConfig = n;
this.dispatchMarker = t;
this.nativeEvent = r;
f = this.constructor.Interface;
for (u in f) f.hasOwnProperty(u) && (e = f[u], this[u] = e ? e(r) : r[u]);
o = null != r.defaultPrevented ? r.defaultPrevented : r.returnValue === !1;
this.isDefaultPrevented = o ? i.thatReturnsTrue : i.thatReturnsFalse;
this.isPropagationStopped = i.thatReturnsFalse
}
var u = n(28),
f = n(27),
i = n(112),
e = n(123),
o = {
type: null,
target: e,
currentTarget: i.thatReturnsNull,
eventPhase: null,
bubbles: null,
cancelable: null,
timeStamp: function (n) {
return n.timeStamp || Date.now()
},
defaultPrevented: null,
isTrusted: null
};
f(r.prototype, {
preventDefault: function () {
this.defaultPrevented = !0;
var n = this.nativeEvent;
n.preventDefault ? n.preventDefault() : n.returnValue = !1;
this.isDefaultPrevented = i.thatReturnsTrue
},
stopPropagation: function () {
var n = this.nativeEvent;
n.stopPropagation ? n.stopPropagation() : n.cancelBubble = !0;
this.isPropagationStopped = i.thatReturnsTrue
},
persist: function () {
this.isPersistent = i.thatReturnsTrue
},
isPersistent: i.thatReturnsFalse,
destructor: function () {
var t = this.constructor.Interface,
n;
for (n in t) this[n] = null;
this.dispatchConfig = null;
this.dispatchMarker = null;
this.nativeEvent = null
}
});
r.Interface = o;
r.augmentClass = function (n, t) {
var i = this,
r = Object.create(i.prototype);
f(r, n.prototype);
n.prototype = r;
n.prototype.constructor = n;
n.Interface = f({}, i.Interface, t);
n.augmentClass = i.augmentClass;
u.addPoolingTo(n, u.threeArgumentPooler)
};
u.addPoolingTo(r, u.threeArgumentPooler);
t.exports = r
}, {
112: 112,
123: 123,
27: 27,
28: 28
}],
94: [function (n, t) {
"use strict";
function i(n, t, i) {
r.call(this, n, t, i)
}
var r = n(99);
r.augmentClass(i, {
relatedTarget: null
});
t.exports = i
}, {
99: 99
}],
95: [function (n, t) {
"use strict";
function i(n, t, i) {
r.call(this, n, t, i)
}
var r = n(93);
r.augmentClass(i, {
data: null
});
t.exports = i
}, {
93: 93
}],
96: [function (n, t) {
"use strict";
function i(n, t, i) {
r.call(this, n, t, i)
}
var r = n(99),
u = n(120),
f = n(121),
e = n(122),
o = {
key: f,
location: null,
ctrlKey: null,
shiftKey: null,
altKey: null,
metaKey: null,
repeat: null,
locale: null,
getModifierState: e,
charCode: function (n) {
return "keypress" === n.type ? u(n) : 0
},
keyCode: function (n) {
return "keydown" === n.type || "keyup" === n.type ? n.keyCode : 0
},
which: function (n) {
return "keypress" === n.type ? u(n) : "keydown" === n.type || "keyup" === n.type ? n.keyCode : 0
}
};
r.augmentClass(i, o);
t.exports = i
}, {
120: 120,
121: 121,
122: 122,
99: 99
}],
97: [function (n, t) {
"use strict";
function i(n, t, i) {
r.call(this, n, t, i)
}
var r = n(99),
u = n(102),
f = n(122),
e = {
screenX: null,
screenY: null,
clientX: null,
clientY: null,
ctrlKey: null,
shiftKey: null,
altKey: null,
metaKey: null,
getModifierState: f,
button: function (n) {
var t = n.button;
return "which" in n ? t : 2 === t ? 2 : 4 === t ? 1 : 0
},
buttons: null,
relatedTarget: function (n) {
return n.relatedTarget || (n.fromElement === n.srcElement ? n.toElement : n.fromElement)
},
pageX: function (n) {
return "pageX" in n ? n.pageX : n.clientX + u.currentScrollLeft
},
pageY: function (n) {
return "pageY" in n ? n.pageY : n.clientY + u.currentScrollTop
}
};
r.augmentClass(i, e);
t.exports = i
}, {
102: 102,
122: 122,
99: 99
}],
98: [function (n, t) {
"use strict";
function i(n, t, i) {
r.call(this, n, t, i)
}
var r = n(99),
u = n(122),
f = {
touches: null,
targetTouches: null,
changedTouches: null,
altKey: null,
metaKey: null,
ctrlKey: null,
shiftKey: null,
getModifierState: u
};
r.augmentClass(i, f);
t.exports = i
}, {
122: 122,
99: 99
}],
99: [function (n, t) {
"use strict";
function i(n, t, i) {
r.call(this, n, t, i)
}
var r = n(93),
u = n(123),
f = {
view: function (n) {
var t, i;
return n.view ? n.view : (t = u(n), null != t && t.window === t) ? t : (i = t.ownerDocument, i ? i.defaultView || i.parentWindow : window)
},
detail: function (n) {
return n.detail || 0
}
};
r.augmentClass(i, f);
t.exports = i
}, {
123: 123,
93: 93
}],
100: [function (n, t) {
"use strict";
function i(n, t, i) {
r.call(this, n, t, i)
}
var r = n(97),
u = {
deltaX: function (n) {
return "deltaX" in n ? n.deltaX : "wheelDeltaX" in n ? -n.wheelDeltaX : 0
},
deltaY: function (n) {
return "deltaY" in n ? n.deltaY : "wheelDeltaY" in n ? -n.wheelDeltaY : "wheelDelta" in n ? -n.wheelDelta : 0
},
deltaZ: null,
deltaMode: null
};
r.augmentClass(i, u);
t.exports = i
}, {
97: 97
}],
101: [function (n, t) {
"use strict";
var r = n(133),
u = {
reinitializeTransaction: function () {
this.transactionWrappers = this.getTransactionWrappers();
this.wrapperInitData ? this.wrapperInitData.length = 0 : this.wrapperInitData = [];
this._isInTransaction = !1
},
_isInTransaction: !1,
getTransactionWrappers: null,
isInTransaction: function () {
return !!this._isInTransaction
},
perform: function (n, t, i, u, f, e, o, s) {
r(!this.isInTransaction());
var h, c;
try {
this._isInTransaction = !0;
h = !0;
this.initializeAll(0);
c = n.call(t, i, u, f, e, o, s);
h = !1
} finally {
try {
if (h) try {
this.closeAll(0)
} catch (l) {} else this.closeAll(0)
} finally {
this._isInTransaction = !1
}
}
return c
},
initializeAll: function (n) {
for (var u, r = this.transactionWrappers, t = n; t < r.length; t++) {
u = r[t];
try {
this.wrapperInitData[t] = i.OBSERVED_ERROR;
this.wrapperInitData[t] = u.initialize ? u.initialize.call(this) : null
} finally {
if (this.wrapperInitData[t] === i.OBSERVED_ERROR) try {
this.initializeAll(t + 1)
} catch (f) {}
}
}
},
closeAll: function (n) {
var u, t, f, e, o;
for (r(this.isInTransaction()), u = this.transactionWrappers, t = n; t < u.length; t++) {
e = u[t];
o = this.wrapperInitData[t];
try {
f = !0;
o !== i.OBSERVED_ERROR && e.close && e.close.call(this, o);
f = !1
} finally {
if (f) try {
this.closeAll(t + 1)
} catch (s) {}
}
}
this.wrapperInitData.length = 0
}
},
i = {
Mixin: u,
OBSERVED_ERROR: {}
};
t.exports = i
}, {
133: 133
}],
102: [function (n, t) {
"use strict";
var i = {
currentScrollLeft: 0,
currentScrollTop: 0,
refreshScrollValues: function (n) {
i.currentScrollLeft = n.x;
i.currentScrollTop = n.y
}
};
t.exports = i
}, {}],
103: [function (n, t) {
"use strict";
function i(n, t) {
if (r(null != t), null == n) return t;
var i = Array.isArray(n),
u = Array.isArray(t);
return i && u ? (n.push.apply(n, t), n) : i ? (n.push(t), n) : u ? [n].concat(t) : [n, t]
}
var r = n(133);
t.exports = i
}, {
133: 133
}],
104: [function (n, t) {
"use strict";
function r(n) {
for (var t = 1, r = 0, u = 0; u < n.length; u++) t = (t + n.charCodeAt(u)) % i, r = (r + t) % i;
return t | r << 16
}
var i = 65521;
t.exports = r
}, {}],
105: [function (n, t) {
function i(n) {
return n.replace(r, function (n, t) {
return t.toUpperCase()
})
}
var r = /-(.)/g;
t.exports = i
}, {}],
106: [function (n, t) {
"use strict";
function i(n) {
return r(n.replace(u, "ms-"))
}
var r = n(105),
u = /^-ms-/;
t.exports = i
}, {
105: 105
}],
107: [function (n, t) {
function i(n, t) {
return n && t ? n === t ? !0 : r(n) ? !1 : r(t) ? i(n, t.parentNode) : n.contains ? n.contains(t) : n.compareDocumentPosition ? !!(16 & n.compareDocumentPosition(t)) : !1 : !1
}
var r = n(137);
t.exports = i
}, {
137: 137
}],
108: [function (n, t) {
function i(n) {
return !!n && ("object" == typeof n || "function" == typeof n) && "length" in n && !("setInterval" in n) && "number" != typeof n.nodeType && (Array.isArray(n) || "callee" in n || "item" in n)
}
function r(n) {
return i(n) ? Array.isArray(n) ? n.slice() : u(n) : [n]
}
var u = n(148);
t.exports = r
}, {
148: 148
}],
109: [function (n, t) {
"use strict";
function i(n) {
var t = u.createFactory(n);
return r.createClass({
tagName: n.toUpperCase(),
displayName: "ReactFullPageComponent" + n,
componentWillUnmount: function () {
f(!1)
},
render: function () {
return t(this.props)
}
})
}
var r = n(33),
u = n(55),
f = n(133);
t.exports = i
}, {
133: 133,
33: 33,
55: 55
}],
110: [function (n, t) {
function f(n) {
var t = n.match(h);
return t && t[1].toLowerCase()
}
function e(n, t) {
var e = u,
h, o, l, c, a;
if (r(!!u), h = f(n), o = h && s(h), o)
for (e.innerHTML = o[1] + n + o[2], l = o[0]; l--;) e = e.lastChild;
else e.innerHTML = n;
for (c = e.getElementsByTagName("script"), c.length && (r(t), i(c).forEach(t)), a = i(e.childNodes); e.lastChild;) e.removeChild(e.lastChild);
return a
}
var o = n(21),
i = n(108),
s = n(125),
r = n(133),
u = o.canUseDOM ? document.createElement("div") : null,
h = /^\s*<(\w+)/;
t.exports = e
}, {
108: 108,
125: 125,
133: 133,
21: 21
}],
111: [function (n, t) {
"use strict";
function r(n, t) {
var u = null == t || "boolean" == typeof t || "" === t,
r;
return u ? "" : (r = isNaN(t), r || 0 === t || i.hasOwnProperty(n) && i[n] ? "" + t : ("string" == typeof t && (t = t.trim()), t + "px"))
}
var u = n(4),
i = u.isUnitlessNumber;
t.exports = r
}, {
4: 4
}],
112: [function (n, t) {
function r(n) {
return function () {
return n
}
}
function i() {}
i.thatReturns = r;
i.thatReturnsFalse = r(!1);
i.thatReturnsTrue = r(!0);
i.thatReturnsNull = r(null);
i.thatReturnsThis = function () {
return this
};
i.thatReturnsArgument = function (n) {
return n
};
t.exports = i
}, {}],
113: [function (n, t) {
"use strict";
t.exports = {}
}, {}],
114: [function (n, t) {
"use strict";
function i(n) {
return u[n]
}
function r(n) {
return ("" + n).replace(f, i)
}
var u = {
"&": "&",
">": ">",
"<": "<",
'"': """,
"'": "'"
},
f = /[&><"']/g;
t.exports = r
}, {}],
115: [function (n, t) {
"use strict";
function r(n) {
return null == n ? null : e(n) ? n : u.has(n) ? f.getNodeFromInstance(n) : (i(null == n.render || "function" != typeof n.render), void i(!1))
}
var u = (n(39), n(65)),
f = n(68),
i = n(133),
e = n(135);
n(150);
t.exports = r
}, {
133: 133,
135: 135,
150: 150,
39: 39,
65: 65,
68: 68
}],
116: [function (n, t) {
"use strict";
function i(n, t, i) {
var r = n,
u = !r.hasOwnProperty(i);
u && null != t && (r[i] = t)
}
function r(n) {
if (null == n) return n;
var t = {};
return u(n, i, t), t
}
var u = n(149);
n(150);
t.exports = r
}, {
149: 149,
150: 150
}],
117: [function (n, t) {
"use strict";
function i(n) {
try {
n.focus()
} catch (t) {}
}
t.exports = i
}, {}],
118: [function (n, t) {
"use strict";
var i = function (n, t, i) {
Array.isArray(n) ? n.forEach(t, i) : n && t.call(i, n)
};
t.exports = i
}, {}],
119: [function (n, t) {
function i() {
try {
return document.activeElement || document.body
} catch (n) {
return document.body
}
}
t.exports = i
}, {}],
120: [function (n, t) {
"use strict";
function i(n) {
var t, i = n.keyCode;
return "charCode" in n ? (t = n.charCode, 0 === t && 13 === i && (t = 13)) : t = i, t >= 32 || 13 === t ? t : 0
}
t.exports = i
}, {}],
121: [function (n, t) {
"use strict";
function i(n) {
var t, i;
return n.key && (t = u[n.key] || n.key, "Unidentified" !== t) ? t : "keypress" === n.type ? (i = r(n), 13 === i ? "Enter" : String.fromCharCode(i)) : "keydown" === n.type || "keyup" === n.type ? f[n.keyCode] || "Unidentified" : ""
}
var r = n(120),
u = {
Esc: "Escape",
Spacebar: " ",
Left: "ArrowLeft",
Up: "ArrowUp",
Right: "ArrowRight",
Down: "ArrowDown",
Del: "Delete",
Win: "OS",
Menu: "ContextMenu",
Apps: "ContextMenu",
Scroll: "ScrollLock",
MozPrintableKey: "Unidentified"
},
f = {
8: "Backspace",
9: "Tab",
12: "Clear",
13: "Enter",
16: "Shift",
17: "Control",
18: "Alt",
19: "Pause",
20: "CapsLock",
27: "Escape",
32: " ",
33: "PageUp",
34: "PageDown",
35: "End",
36: "Home",
37: "ArrowLeft",
38: "ArrowUp",
39: "ArrowRight",
40: "ArrowDown",
45: "Insert",
46: "Delete",
112: "F1",
113: "F2",
114: "F3",
115: "F4",
116: "F5",
117: "F6",
118: "F7",
119: "F8",
120: "F9",
121: "F10",
122: "F11",
123: "F12",
144: "NumLock",
145: "ScrollLock",
224: "Meta"
};
t.exports = i
}, {
120: 120
}],
122: [function (n, t) {
"use strict";
function i(n) {
var r = this,
t = r.nativeEvent,
i;
return t.getModifierState ? t.getModifierState(n) : (i = u[n], i ? !!t[i] : !1)
}
function r() {
return i
}
var u = {
Alt: "altKey",
Control: "ctrlKey",
Meta: "metaKey",
Shift: "shiftKey"
};
t.exports = r
}, {}],
123: [function (n, t) {
"use strict";
function i(n) {
var t = n.target || n.srcElement || window;
return 3 === t.nodeType ? t.parentNode : t
}
t.exports = i
}, {}],
124: [function (n, t) {
"use strict";
function r(n) {
var t = n && (i && n[i] || n[u]);
if ("function" == typeof t) return t
}
var i = "function" == typeof Symbol && Symbol.iterator,
u = "@@iterator";
t.exports = r
}, {}],
125: [function (n, t) {
function h(n) {
return l(!!u), s.hasOwnProperty(n) || (n = "*"), f.hasOwnProperty(n) || (u.innerHTML = "*" === n ? "<link />" : "<" + n + "><\/" + n + ">", f[n] = !u.firstChild), f[n] ? s[n] : null
}
var c = n(21),
l = n(133),
u = c.canUseDOM ? document.createElement("div") : null,
f = {
circle: !0,
defs: !0,
ellipse: !0,
g: !0,
line: !0,
linearGradient: !0,
path: !0,
polygon: !0,
polyline: !0,
radialGradient: !0,
rect: !0,
stop: !0,
text: !0
},
e = [1, '<select multiple="true">', "<\/select>"],
r = [1, "<table>", "<\/table>"],
o = [3, "<table><tbody><tr>", "<\/tr><\/tbody><\/table>"],
i = [1, "<svg>", "<\/svg>"],
s = {
"*": [1, "?<div>", "<\/div>"],
area: [1, "<map>", "<\/map>"],
col: [2, "<table><tbody><\/tbody><colgroup>", "<\/colgroup><\/table>"],
legend: [1, "<fieldset>", "<\/fieldset>"],
param: [1, "<object>", "<\/object>"],
tr: [2, "<table><tbody>", "<\/tbody><\/table>"],
optgroup: e,
option: e,
caption: r,
colgroup: r,
tbody: r,
tfoot: r,
thead: r,
td: o,
th: o,
circle: i,
defs: i,
ellipse: i,
g: i,
line: i,
linearGradient: i,
path: i,
polygon: i,
polyline: i,
radialGradient: i,
rect: i,
stop: i,
text: i
};
t.exports = h
}, {
133: 133,
21: 21
}],
126: [function (n, t) {
"use strict";
function i(n) {
for (; n && n.firstChild;) n = n.firstChild;
return n
}
function r(n) {
for (; n;) {
if (n.nextSibling) return n.nextSibling;
n = n.parentNode
}
}
function u(n, t) {
for (var u = i(n), f = 0, e = 0; u;) {
if (3 === u.nodeType) {
if (e = f + u.textContent.length, t >= f && e >= t) return {
node: u,
offset: t - f
};
f = e
}
u = i(r(u))
}
}
t.exports = u
}, {}],
127: [function (n, t) {
"use strict";
function i(n) {
return n ? n.nodeType === r ? n.documentElement : n.firstChild : null
}
var r = 9;
t.exports = i
}, {}],
128: [function (n, t) {
"use strict";
function r() {
return !i && u.canUseDOM && (i = "textContent" in document.documentElement ? "textContent" : "innerText"), i
}
var u = n(21),
i = null;
t.exports = r
}, {
21: 21
}],
129: [function (n, t) {
"use strict";
function i(n) {
return n === window ? {
x: window.pageXOffset || document.documentElement.scrollLeft,
y: window.pageYOffset || document.documentElement.scrollTop
} : {
x: n.scrollLeft,
y: n.scrollTop
}
}
t.exports = i
}, {}],
130: [function (n, t) {
function i(n) {
return n.replace(r, "-$1").toLowerCase()
}
var r = /([A-Z])/g;
t.exports = i
}, {}],
131: [function (n, t) {
"use strict";
function i(n) {
return r(n).replace(u, "-ms-")
}
var r = n(130),
u = /^ms-/;
t.exports = i
}, {
130: 130
}],
132: [function (n, t) {
"use strict";
function f(n) {
return "function" == typeof n && "function" == typeof n.prototype.mountComponent && "function" == typeof n.prototype.receiveComponent
}
function i(n, t) {
var e, i;
return ((null === n || n === !1) && (n = o.emptyElement), "object" == typeof n) ? (i = n, e = t === i.type && "string" == typeof i.type ? r.createInternalComponent(i) : f(i.type) ? new i.type(i) : new u) : "string" == typeof n || "number" == typeof n ? e = r.createInstanceForText(n) : h(!1), e.construct(n), e._mountIndex = 0, e._mountImage = null, e
}
var e = n(37),
o = n(57),
r = n(71),
s = n(27),
h = n(133),
u = (n(150), function () {});
s(u.prototype, e.Mixin, {
_instantiateReactComponent: i
});
t.exports = i
}, {
133: 133,
150: 150,
27: 27,
37: 37,
57: 57,
71: 71
}],
133: [function (n, t) {
"use strict";
var i = function (n, t, i, r, u, f, e, o) {
var s, h, c;
if (!n) {
void 0 === t ? s = new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.") : (h = [i, r, u, f, e, o], c = 0, s = new Error("Invariant Violation: " + t.replace(/%s/g, function () {
return h[c++]
})));
throw s.framesToPop = 1, s;
}
};
t.exports = i
}, {}],
134: [function (n, t) {
"use strict";
function u(n, t) {
var f, u, e;
return !r.canUseDOM || t && !("addEventListener" in document) ? !1 : (f = "on" + n, u = f in document, u || (e = document.createElement("div"), e.setAttribute(f, "return;"), u = "function" == typeof e[f]), !u && i && "wheel" === n && (u = document.implementation.hasFeature("Events.wheel", "3.0")), u)
}
var i, r = n(21);
r.canUseDOM && (i = document.implementation && document.implementation.hasFeature && document.implementation.hasFeature("", "") !== !0);
t.exports = u
}, {
21: 21
}],
135: [function (n, t) {
function i(n) {
return !(!n || !("function" == typeof Node ? n instanceof Node : "object" == typeof n && "number" == typeof n.nodeType && "string" == typeof n.nodeName))
}
t.exports = i
}, {}],
136: [function (n, t) {
"use strict";
function i(n) {
return n && ("INPUT" === n.nodeName && r[n.type] || "TEXTAREA" === n.nodeName)
}
var r = {
color: !0,
date: !0,
datetime: !0,
"datetime-local": !0,
email: !0,
month: !0,
number: !0,
password: !0,
range: !0,
search: !0,
tel: !0,
text: !0,
time: !0,
url: !0,
week: !0
};
t.exports = i
}, {}],
137: [function (n, t) {
function i(n) {
return r(n) && 3 == n.nodeType
}
var r = n(135);
t.exports = i
}, {
135: 135
}],
138: [function (n, t) {
"use strict";
var i = n(133),
r = function (n) {
var t, r = {};
i(n instanceof Object && !Array.isArray(n));
for (t in n) n.hasOwnProperty(t) && (r[t] = t);
return r
};
t.exports = r
}, {
133: 133
}],
139: [function (n, t) {
var i = function (n) {
var t;
for (t in n)
if (n.hasOwnProperty(t)) return t;
return null
};
t.exports = i
}, {}],
140: [function (n, t) {
"use strict";
function i(n, t, i) {
var f, u;
if (!n) return null;
f = {};
for (u in n) r.call(n, u) && (f[u] = t.call(i, n[u], u, n));
return f
}
var r = Object.prototype.hasOwnProperty;
t.exports = i
}, {}],
141: [function (n, t) {
"use strict";
function i(n) {
var t = {};
return function (i) {
return t.hasOwnProperty(i) || (t[i] = n.call(this, i)), t[i]
}
}
t.exports = i
}, {}],
142: [function (n, t) {
"use strict";
function i(n) {
return u(r.isValidElement(n)), n
}
var r = n(55),
u = n(133);
t.exports = i
}, {
133: 133,
55: 55
}],
143: [function (n, t) {
"use strict";
function i(n) {
return '"' + r(n) + '"'
}
var r = n(114);
t.exports = i
}, {
114: 114
}],
144: [function (n, t) {
"use strict";
var u = n(21),
f = /^[ \r\n\t\f]/,
e = /<(!--|link|noscript|meta|script|style)[ \r\n\t\f\/>]/,
i = function (n, t) {
n.innerHTML = t
},
r;
("undefined" != typeof MSApp && MSApp.execUnsafeLocalFunction && (i = function (n, t) {
MSApp.execUnsafeLocalFunction(function () {
n.innerHTML = t
})
}), u.canUseDOM) && (r = document.createElement("div"), r.innerHTML = " ", "" === r.innerHTML && (i = function (n, t) {
if (n.parentNode && n.parentNode.replaceChild(n, n), f.test(t) || "<" === t[0] && e.test(t)) {
n.innerHTML = "" + t;
var i = n.firstChild;
1 === i.data.length ? n.removeChild(i) : i.deleteData(0, 1)
} else n.innerHTML = t
}));
t.exports = i
}, {
21: 21
}],
145: [function (n, t) {
"use strict";
var r = n(21),
u = n(114),
f = n(144),
i = function (n, t) {
n.textContent = t
};
r.canUseDOM && ("textContent" in document.documentElement || (i = function (n, t) {
f(n, u(t))
}));
t.exports = i
}, {
114: 114,
144: 144,
21: 21
}],
146: [function (n, t) {
"use strict";
function i(n, t) {
if (n === t) return !0;
var i;
for (i in n)
if (n.hasOwnProperty(i) && (!t.hasOwnProperty(i) || n[i] !== t[i])) return !1;
for (i in t)
if (t.hasOwnProperty(i) && !n.hasOwnProperty(i)) return !1;
return !0
}
t.exports = i
}, {}],
147: [function (n, t) {
"use strict";
function i(n, t) {
var r, i;
if (null != n && null != t) {
if (r = typeof n, i = typeof t, "string" === r || "number" === r) return "string" === i || "number" === i;
if ("object" === i && n.type === t.type && n.key === t.key) return n._owner === t._owner
}
return !1
}
n(150);
t.exports = i
}, {
150: 150
}],
148: [function (n, t) {
function r(n) {
var t = n.length,
u, r;
if (i(!Array.isArray(n) && ("object" == typeof n || "function" == typeof n)), i("number" == typeof t), i(0 === t || t - 1 in n), n.hasOwnProperty) try {
return Array.prototype.slice.call(n)
} catch (f) {}
for (u = Array(t), r = 0; t > r; r++) u[r] = n[r];
return u
}
var i = n(133);
t.exports = r
}, {
133: 133
}],
149: [function (n, t) {
"use strict";
function o(n) {
return p[n]
}
function r(n, t) {
return n && null != n.key ? e(n.key) : t.toString(36)
}
function s(n) {
return ("" + n).replace(w, o)
}
function e(n) {
return "$" + s(n)
}
function u(n, t, o, s, h) {
var k = typeof n,
a, w, b, p, d, g, nt, ut, ft, tt, it, rt;
if (("undefined" === k || "boolean" === k) && (n = null), null === n || "string" === k || "number" === k || c.isValidElement(n)) return s(h, n, "" === t ? f + r(n, 0) : t, o), 1;
if (p = 0, Array.isArray(n))
for (d = 0; d < n.length; d++) a = n[d], w = ("" !== t ? t + i : f) + r(a, d), b = o + p, p += u(a, w, b, s, h);
else if (g = v(n), g)
if (ut = g.call(n), g !== n.entries)
for (ft = 0; !(nt = ut.next()).done;) a = nt.value, w = ("" !== t ? t + i : f) + r(a, ft++), b = o + p, p += u(a, w, b, s, h);
else
for (; !(nt = ut.next()).done;) tt = nt.value, tt && (a = tt[1], w = ("" !== t ? t + i : f) + e(tt[0]) + i + r(a, 0), b = o + p, p += u(a, w, b, s, h));
else if ("object" === k) {
y(1 !== n.nodeType);
it = l.extract(n);
for (rt in it) it.hasOwnProperty(rt) && (a = it[rt], w = ("" !== t ? t + i : f) + e(rt) + i + r(a, 0), b = o + p, p += u(a, w, b, s, h))
}
return p
}
function h(n, t, i) {
return null == n ? 0 : u(n, "", 0, t, i)
}
var c = n(55),
l = n(61),
a = n(64),
v = n(124),
y = n(133),
f = (n(150), a.SEPARATOR),
i = ":",
p = {
"=": "=0",
".": "=1",
":": "=2"
},
w = /[=.:]/g;
t.exports = h
}, {
124: 124,
133: 133,
150: 150,
55: 55,
61: 61,
64: 64
}],
150: [function (n, t) {
"use strict";
var i = n(112),
r = i;
t.exports = r
}, {
112: 112
}]
}, {}, [1])(1)
});
! function (n) {
if ("object" == typeof exports && "undefined" != typeof module) module.exports = n();
else if ("function" == typeof define && define.amd) define([], n);
else {
var t;
"undefined" != typeof window ? t = window : "undefined" != typeof global ? t = global : "undefined" != typeof self && (t = self);
t.Reflux = n()
}
}(function () {
var n;
return function t(n, i, r) {
function u(f, o) {
var h, s;
if (!i[f]) {
if (!n[f]) {
if (h = "function" == typeof require && require, !o && h) return h(f, !0);
if (e) return e(f, !0);
throw new Error("Cannot find module '" + f + "'");
}
s = i[f] = {
exports: {}
};
n[f][0].call(s.exports, function (t) {
var i = n[f][1][t];
return u(i ? i : t)
}, s, s.exports, t, n, i, r)
}
return i[f].exports
}
for (var e = "function" == typeof require && require, f = 0; f < r.length; f++) u(r[f]);
return u
}({
1: [function (n, t) {
"use strict";
function r(n, t, i) {
this.fn = n;
this.context = t;
this.once = i || !1
}
function i() {}
i.prototype._events = void 0;
i.prototype.listeners = function (n) {
if (!this._events || !this._events[n]) return [];
for (var t = 0, r = this._events[n].length, i = []; r > t; t++) i.push(this._events[n][t].fn);
return i
};
i.prototype.emit = function (n, t, i, r, u, f) {
if (!this._events || !this._events[n]) return !1;
var h, e, l, s = this._events[n],
a = s.length,
c = arguments.length,
o = s[0];
if (1 === a) {
switch (o.once && this.removeListener(n, o.fn, !0), c) {
case 1:
return o.fn.call(o.context), !0;
case 2:
return o.fn.call(o.context, t), !0;
case 3:
return o.fn.call(o.context, t, i), !0;
case 4:
return o.fn.call(o.context, t, i, r), !0;
case 5:
return o.fn.call(o.context, t, i, r, u), !0;
case 6:
return o.fn.call(o.context, t, i, r, u, f), !0
}
for (e = 1, h = new Array(c - 1); c > e; e++) h[e - 1] = arguments[e];
o.fn.apply(o.context, h)
} else
for (e = 0; a > e; e++) switch (s[e].once && this.removeListener(n, s[e].fn, !0), c) {
case 1:
s[e].fn.call(s[e].context);
break;
case 2:
s[e].fn.call(s[e].context, t);
break;
case 3:
s[e].fn.call(s[e].context, t, i);
break;
default:
if (!h)
for (l = 1, h = new Array(c - 1); c > l; l++) h[l - 1] = arguments[l];
s[e].fn.apply(s[e].context, h)
}
return !0
};
i.prototype.on = function (n, t, i) {
return this._events || (this._events = {}), this._events[n] || (this._events[n] = []), this._events[n].push(new r(t, i || this)), this
};
i.prototype.once = function (n, t, i) {
return this._events || (this._events = {}), this._events[n] || (this._events[n] = []), this._events[n].push(new r(t, i || this, !0)), this
};
i.prototype.removeListener = function (n, t, i) {
var u, f, r, e;
if (!this._events || !this._events[n]) return this;
if (u = this._events[n], f = [], t)
for (r = 0, e = u.length; e > r; r++) u[r].fn !== t && u[r].once !== i && f.push(u[r]);
return this._events[n] = f.length ? f : null, this
};
i.prototype.removeAllListeners = function (n) {
return this._events ? (n ? this._events[n] = null : this._events = {}, this) : this
};
i.prototype.off = i.prototype.removeListener;
i.prototype.addListener = i.prototype.on;
i.prototype.setMaxListeners = function () {
return this
};
i.EventEmitter = i;
i.EventEmitter2 = i;
i.EventEmitter3 = i;
"object" == typeof t && t.exports && (t.exports = i)
}, {}],
2: [function (t, i) {
(function (t) {
! function (t, r, u) {
r[t] = r[t] || u();
"undefined" != typeof i && i.exports ? i.exports = r[t] : "function" == typeof n && n.amd && n(function () {
return r[t]
})
}("Promise", "undefined" != typeof t ? t : this, function () {
"use strict";
function r(n, t) {
e.add(n, t);
f || (f = p(e.drain))
}
function s(n) {
var t, i = typeof n;
return null == n || "object" != i && "function" != i || (t = n.then), "function" == typeof t ? t : !1
}
function u() {
for (var n = 0; n < this.chain.length; n++) v(this, 1 === this.state ? this.chain[n].success : this.chain[n].failure, this.chain[n]);
this.chain.length = 0
}
function v(n, t, i) {
var r, u;
try {
t === !1 ? i.reject(n.msg) : (r = t === !0 ? n.msg : t.call(void 0, n.msg), r === i.promise ? i.reject(TypeError("Promise-chain cycle")) : (u = s(r)) ? u.call(r, i.resolve, i.reject) : i.resolve(r))
} catch (f) {
i.reject(f)
}
}
function h(n) {
var e, f, t = this;
if (!t.triggered) {
t.triggered = !0;
t.def && (t = t.def);
try {
(e = s(n)) ? (f = new l(t), e.call(n, function () {
h.apply(f, arguments)
}, function () {
i.apply(f, arguments)
})) : (t.msg = n, t.state = 1, t.chain.length > 0 && r(u, t))
} catch (o) {
i.call(f || new l(t), o)
}
}
}
function i(n) {
var t = this;
t.triggered || (t.triggered = !0, t.def && (t = t.def), t.msg = n, t.state = 2, t.chain.length > 0 && r(u, t))
}
function c(n, t, i, r) {
for (var u = 0; u < t.length; u++) ! function (u) {
n.resolve(t[u]).then(function (n) {
i(u, n)
}, r)
}(u)
}
function l(n) {
this.def = n;
this.triggered = !1
}
function y(n) {
this.promise = n;
this.state = 0;
this.triggered = !1;
this.chain = [];
this.msg = void 0
}
function t(n) {
if ("function" != typeof n) throw TypeError("Not a function");
if (0 !== this.__NPO__) throw TypeError("Not a promise");
this.__NPO__ = 1;
var t = new y(this);
this.then = function (n, i) {
var f = {
success: "function" == typeof n ? n : !0,
failure: "function" == typeof i ? i : !1
};
return f.promise = new this.constructor(function (n, t) {
if ("function" != typeof n || "function" != typeof t) throw TypeError("Not a function");
f.resolve = n;
f.reject = t
}), t.chain.push(f), 0 !== t.state && r(u, t), f.promise
};
this["catch"] = function (n) {
return this.then(void 0, n)
};
try {
n.call(void 0, function (n) {
h.call(t, n)
}, function (n) {
i.call(t, n)
})
} catch (f) {
i.call(t, f)
}
}
var n, f, e, a = Object.prototype.toString,
p = "undefined" != typeof setImmediate ? function (n) {
return setImmediate(n)
} : setTimeout,
o;
try {
Object.defineProperty({}, "x", {});
n = function (n, t, i, r) {
return Object.defineProperty(n, t, {
value: i,
writable: !0,
configurable: r !== !1
})
}
} catch (w) {
n = function (n, t, i) {
return n[t] = i, n
}
}
return e = function () {
function r(n, t) {
this.fn = n;
this.self = t;
this.next = void 0
}
var i, t, n;
return {
add: function (u, f) {
n = new r(u, f);
t ? t.next = n : i = n;
t = n;
n = void 0
},
drain: function () {
var n = i;
for (i = t = f = void 0; n;) n.fn.call(n.self), n = n.next
}
}
}(), o = n({}, "constructor", t, !1), n(t, "prototype", o, !1), n(o, "__NPO__", 0, !1), n(t, "resolve", function (n) {
var t = this;
return n && "object" == typeof n && 1 === n.__NPO__ ? n : new t(function (t, i) {
if ("function" != typeof t || "function" != typeof i) throw TypeError("Not a function");
t(n)
})
}), n(t, "reject", function (n) {
return new this(function (t, i) {
if ("function" != typeof t || "function" != typeof i) throw TypeError("Not a function");
i(n)
})
}), n(t, "all", function (n) {
var t = this;
return "[object Array]" != a.call(n) ? t.reject(TypeError("Not an array")) : 0 === n.length ? t.resolve([]) : new t(function (i, r) {
if ("function" != typeof i || "function" != typeof r) throw TypeError("Not a function");
var u = n.length,
f = Array(u),
e = 0;
c(t, n, function (n, t) {
f[n] = t;
++e === u && i(f)
}, r)
})
}), n(t, "race", function (n) {
var t = this;
return "[object Array]" != a.call(n) ? t.reject(TypeError("Not an array")) : new t(function (i, r) {
if ("function" != typeof i || "function" != typeof r) throw TypeError("Not a function");
c(t, n, function (n, t) {
i(t)
}, r)
})
}), t
})
}).call(this, "undefined" != typeof self ? self : "undefined" != typeof window ? window : {})
}, {}],
3: [function (n, t) {
t.exports = {}
}, {}],
4: [function (n, t, i) {
i.createdStores = [];
i.createdActions = [];
i.reset = function () {
for (; i.createdStores.length;) i.createdStores.pop();
for (; i.createdActions.length;) i.createdActions.pop()
}
}, {}],
5: [function (n, t) {
var i = n("./utils"),
r = n("./joins").instanceJoinCreator,
f = function (n) {
for (var t, i = 0, r = {}; i < (n.children || []).length; ++i) t = n.children[i], n[t] && (r[t] = n[t]);
return r
},
u = function (n) {
var r = {},
t, e, h;
for (t in n) {
var o = n[t],
c = f(o),
s = u(c);
r[t] = o;
for (e in s) h = s[e], r[t + i.capitalize(e)] = h
}
return r
};
t.exports = {
hasListener: function (n) {
for (var t, i, r, u = 0; u < (this.subscriptions || []).length; ++u)
for (r = [].concat(this.subscriptions[u].listenable), t = 0; t < r.length; t++)
if (i = r[t], i === n || i.hasListener && i.hasListener(n)) return !0;
return !1
},
listenToMany: function (n) {
var e = u(n),
t, f, r;
for (t in e) f = i.callbackName(t), r = this[f] ? f : this[t] ? t : void 0, r && this.listenTo(e[t], r, this[f + "Default"] || this[r + "Default"] || r)
},
validateListening: function (n) {
return n === this ? "Listener is not able to listen to itself" : i.isFunction(n.listen) ? n.hasListener && n.hasListener(this) ? "Listener cannot listen to this listenable because of circular loop" : void 0 : n + " is missing a listen method"
},
listenTo: function (n, t, r) {
var e, o, u, f = this.subscriptions = this.subscriptions || [];
return i.throwIf(this.validateListening(n)), this.fetchInitialState(n, r), e = n.listen(this[t] || t, this), o = function () {
var n = f.indexOf(u);
i.throwIf(-1 === n, "Tried to remove listen already gone from subscriptions list!");
f.splice(n, 1);
e()
}, u = {
stop: o,
listenable: n
}, f.push(u), u
},
stopListeningTo: function (n) {
for (var t, r = 0, u = this.subscriptions || []; r < u.length; r++)
if (t = u[r], t.listenable === n) return t.stop(), i.throwIf(-1 !== u.indexOf(t), "Failed to remove listen from subscriptions list!"), !0;
return !1
},
stopListeningToAll: function () {
for (var t, n = this.subscriptions || []; t = n.length;) n[0].stop(), i.throwIf(n.length !== t - 1, "Failed to remove listen from subscriptions list!")
},
fetchInitialState: function (n, t) {
var u, r;
t = t && this[t] || t;
u = this;
i.isFunction(t) && i.isFunction(n.getInitialState) && (r = n.getInitialState(), r && i.isFunction(r.then) ? r.then(function () {
t.apply(u, arguments)
}) : t.call(this, r))
},
joinTrailing: r("last"),
joinLeading: r("first"),
joinConcat: r("all"),
joinStrict: r("strict")
}
}, {
"./joins": 15,
"./utils": 19
}],
6: [function (n, t) {
var r = n("./utils"),
i = n("./ListenerMethods");
t.exports = r.extend({
componentWillUnmount: i.stopListeningToAll
}, i)
}, {
"./ListenerMethods": 5,
"./utils": 19
}],
7: [function (n, t) {
var i = n("./utils");
t.exports = {
preEmit: function () {},
shouldEmit: function () {
return !0
},
listen: function (n, t) {
t = t || this;
var i = function (i) {
u || n.apply(t, i)
},
r = this,
u = !1;
return this.emitter.addListener(this.eventLabel, i),
function () {
u = !0;
r.emitter.removeListener(r.eventLabel, i)
}
},
promise: function (n) {
var t = this,
i = this.children.indexOf("completed") >= 0 && this.children.indexOf("failed") >= 0;
if (!i) throw new Error('Publisher must have "completed" and "failed" child publishers');
n.then(function (n) {
return t.completed(n)
}, function (n) {
return t.failed(n)
})
},
listenAndPromise: function (n, t) {
var i = this,
r;
return t = t || this, this.willCallPromise = (this.willCallPromise || 0) + 1, r = this.listen(function () {
if (!n) throw new Error("Expected a function returning a promise but got " + n);
var r = arguments,
u = n.apply(t, r);
return i.promise.call(i, u)
}, t),
function () {
i.willCallPromise--;
r.call(i)
}
},
trigger: function () {
var n = arguments,
t = this.preEmit.apply(this, n);
n = void 0 === t ? n : i.isArguments(t) ? t : [].concat(t);
this.shouldEmit.apply(this, n) && this.emitter.emit(this.eventLabel, n)
},
triggerAsync: function () {
var t = arguments,
n = this;
i.nextTick(function () {
n.trigger.apply(n, t)
})
},
triggerPromise: function () {
var n = this,
t = arguments,
r = this.children.indexOf("completed") >= 0 && this.children.indexOf("failed") >= 0;
return i.createPromise(function (u, f) {
if (n.willCallPromise) return void i.nextTick(function () {
var i = n.promise;
n.promise = function (t) {
return t.then(u, f), n.promise = i, n.promise.apply(n, arguments)
};
n.trigger.apply(n, t)
});
if (r) var e = n.completed.listen(function (n) {
e();
o();
u(n)
}),
o = n.failed.listen(function (n) {
e();
o();
f(n)
});
n.triggerAsync.apply(n, t);
r || u()
})
}
}
}, {
"./utils": 19
}],
8: [function (n, t) {
t.exports = {}
}, {}],
9: [function (n, t) {
t.exports = function (n, t) {
var i, r, u;
for (i in t)
if (Object.getOwnPropertyDescriptor && Object.defineProperty) {
if (r = Object.getOwnPropertyDescriptor(t, i), !r.value || "function" != typeof r.value || !t.hasOwnProperty(i)) continue;
n[i] = t[i].bind(n)
} else {
if (u = t[i], "function" != typeof u || !t.hasOwnProperty(i)) continue;
n[i] = u.bind(n)
}
return n
}
}, {}],
10: [function (n, t) {
var r = n("./index"),
i = n("./utils");
t.exports = function (n, t) {
return {
getInitialState: function () {
return i.isFunction(n.getInitialState) ? void 0 === t ? n.getInitialState() : i.object([t], [n.getInitialState()]) : {}
},
componentDidMount: function () {
i.extend(this, r.ListenerMethods);
var u = this,
f = void 0 === t ? this.setState : function (n) {
u.setState(i.object([t], [n]))
};
this.listenTo(n, f)
},
componentWillUnmount: r.ListenerMixin.componentWillUnmount
}
}
}, {
"./index": 14,
"./utils": 19
}],
11: [function (n, t) {
var r = n("./index"),
i = n("./utils");
t.exports = function (n, t, u) {
return u = i.isFunction(t) ? t : u, {
getInitialState: function () {
if (i.isFunction(n.getInitialState)) {
if (i.isFunction(t)) return u.call(this, n.getInitialState());
var r = u.call(this, n.getInitialState());
return r ? i.object([t], [r]) : {}
}
return {}
},
componentDidMount: function () {
i.extend(this, r.ListenerMethods);
var f = this,
e = function (n) {
if (i.isFunction(t)) f.setState(u.call(f, n));
else {
var r = u.call(f, n);
f.setState(i.object([t], [r]))
}
};
this.listenTo(n, e)
},
componentWillUnmount: r.ListenerMixin.componentWillUnmount
}
}
}, {
"./index": 14,
"./utils": 19
}],
12: [function (n, t) {
var r = n("./utils"),
i = n("./index"),
e = n("./Keep"),
u = {
preEmit: 1,
shouldEmit: 1
},
f = function (n) {
var o, s, h, c, l, a, t;
n = n || {};
r.isObject(n) || (n = {
actionName: n
});
for (o in i.ActionMethods)
if (!u[o] && i.PublisherMethods[o]) throw new Error("Cannot override API method " + o + " in Reflux.ActionMethods. Use another method name or override it on Reflux.PublisherMethods instead.");
for (s in n)
if (!u[s] && i.PublisherMethods[s]) throw new Error("Cannot override API method " + s + " in action creation. Use another method name or override it on Reflux.PublisherMethods instead.");
for (n.children = n.children || [], n.asyncResult && (n.children = n.children.concat(["completed", "failed"])), h = 0, c = {}; h < n.children.length; h++) l = n.children[h], c[l] = f(l);
return a = r.extend({
eventLabel: "action",
emitter: new r.EventEmitter,
_isAction: !0
}, i.PublisherMethods, i.ActionMethods, n), t = function () {
return t[t.sync ? "trigger" : "triggerPromise"].apply(t, arguments)
}, r.extend(t, c, a), e.createdActions.push(t), t
};
t.exports = f
}, {
"./Keep": 4,
"./index": 14,
"./utils": 19
}],
13: [function (n, t) {
var r = n("./utils"),
i = n("./index"),
f = n("./Keep"),
e = n("./mixer"),
u = {
preEmit: 1,
shouldEmit: 1
},
o = n("./bindMethods");
t.exports = function (n) {
function c() {
var t, i = 0;
if (this.subscriptions = [], this.emitter = new r.EventEmitter, this.eventLabel = "change", o(this, n), this.init && r.isFunction(this.init) && this.init(), this.listenables)
for (t = [].concat(this.listenables); i < t.length; i++) this.listenToMany(t[i])
}
var t, s, h;
n = n || {};
for (t in i.StoreMethods)
if (!u[t] && (i.PublisherMethods[t] || i.ListenerMethods[t])) throw new Error("Cannot override API method " + t + " in Reflux.StoreMethods. Use another method name or override it on Reflux.PublisherMethods / Reflux.ListenerMethods instead.");
for (s in n)
if (!u[s] && (i.PublisherMethods[s] || i.ListenerMethods[s])) throw new Error("Cannot override API method " + s + " in store creation. Use another method name or override it on Reflux.PublisherMethods / Reflux.ListenerMethods instead.");
return n = e(n), r.extend(c.prototype, i.ListenerMethods, i.PublisherMethods, i.StoreMethods, n), h = new c, f.createdStores.push(h), h
}
}, {
"./Keep": 4,
"./bindMethods": 9,
"./index": 14,
"./mixer": 18,
"./utils": 19
}],
14: [function (n, t, i) {
var r, u;
i.ActionMethods = n("./ActionMethods");
i.ListenerMethods = n("./ListenerMethods");
i.PublisherMethods = n("./PublisherMethods");
i.StoreMethods = n("./StoreMethods");
i.createAction = n("./createAction");
i.createStore = n("./createStore");
i.connect = n("./connect");
i.connectFilter = n("./connectFilter");
i.ListenerMixin = n("./ListenerMixin");
i.listenTo = n("./listenTo");
i.listenToMany = n("./listenToMany");
r = n("./joins").staticJoinCreator;
i.joinTrailing = i.all = r("last");
i.joinLeading = r("first");
i.joinStrict = r("strict");
i.joinConcat = r("all");
u = n("./utils");
i.EventEmitter = u.EventEmitter;
i.Promise = u.Promise;
i.createActions = function (n) {
var f = {},
t, r, e;
for (t in n) n.hasOwnProperty(t) && (r = n[t], e = u.isObject(r) ? t : r, f[e] = i.createAction(r));
return f
};
i.setEventEmitter = function (t) {
var r = n("./utils");
i.EventEmitter = r.EventEmitter = t
};
i.setPromise = function (t) {
var r = n("./utils");
i.Promise = r.Promise = t
};
i.setPromiseFactory = function (t) {
var i = n("./utils");
i.createPromise = t
};
i.nextTick = function (t) {
var i = n("./utils");
i.nextTick = t
};
i.__keep = n("./Keep");
Function.prototype.bind || console.error("Function.prototype.bind not available. ES5 shim required. https://github.com/spoike/refluxjs#es5")
}, {
"./ActionMethods": 3,
"./Keep": 4,
"./ListenerMethods": 5,
"./ListenerMixin": 6,
"./PublisherMethods": 7,
"./StoreMethods": 8,
"./connect": 10,
"./connectFilter": 11,
"./createAction": 12,
"./createStore": 13,
"./joins": 15,
"./listenTo": 16,
"./listenToMany": 17,
"./utils": 19
}],
15: [function (n, t, i) {
function e(n, t, i) {
return function () {
var r, f = i.subscriptions,
e = f ? f.indexOf(n) : -1;
for (u.throwIf(-1 === e, "Tried to remove join already gone from subscriptions list!"), r = 0; r < t.length; r++) t[r]();
f.splice(e, 1)
}
}
function f(n) {
n.listenablesEmitted = new Array(n.numberOfListenables);
n.args = new Array(n.numberOfListenables)
}
function o(n, t) {
return function () {
var i = r.call(arguments);
if (t.listenablesEmitted[n]) switch (t.strategy) {
case "strict":
throw new Error("Strict join failed because listener triggered twice.");
case "last":
t.args[n] = i;
break;
case "all":
t.args[n].push(i)
} else t.listenablesEmitted[n] = !0, t.args[n] = "all" === t.strategy ? [i] : i;
s(t)
}
}
function s(n) {
for (var t = 0; t < n.numberOfListenables; t++)
if (!n.listenablesEmitted[t]) return;
n.callback.apply(n.listener, n.args);
f(n)
}
var r = Array.prototype.slice,
u = n("./utils"),
h = n("./createStore"),
c = {
strict: "joinStrict",
first: "joinLeading",
last: "joinTrailing",
all: "joinConcat"
};
i.staticJoinCreator = function (n) {
return function () {
var t = r.call(arguments);
return h({
init: function () {
this[c[n]].apply(this, t.concat("triggerAsync"))
}
})
}
};
i.instanceJoinCreator = function (n) {
return function () {
u.throwIf(arguments.length < 3, "Cannot create a join with less than 2 listenables!");
for (var i, s = r.call(arguments), c = s.pop(), h = s.length, l = {
numberOfListenables: h,
callback: this[c] || c,
listener: this,
strategy: n
}, a = [], t = 0; h > t; t++) u.throwIf(this.validateListening(s[t]));
for (t = 0; h > t; t++) a.push(s[t].listen(o(t, l), this));
return f(l), i = {
listenable: s
}, i.stop = e(i, a, this), this.subscriptions = (this.subscriptions || []).concat(i), i
}
}
}, {
"./createStore": 13,
"./utils": 19
}],
16: [function (n, t) {
var i = n("./index");
t.exports = function (n, t, r) {
return {
componentDidMount: function () {
for (var u in i.ListenerMethods)
if (this[u] !== i.ListenerMethods[u]) {
if (this[u]) throw "Can't have other property '" + u + "' when using Reflux.listenTo!";
this[u] = i.ListenerMethods[u]
}
this.listenTo(n, t, r)
},
componentWillUnmount: i.ListenerMethods.stopListeningToAll
}
}
}, {
"./index": 14
}],
17: [function (n, t) {
var i = n("./index");
t.exports = function (n) {
return {
componentDidMount: function () {
for (var t in i.ListenerMethods)
if (this[t] !== i.ListenerMethods[t]) {
if (this[t]) throw "Can't have other property '" + t + "' when using Reflux.listenToMany!";
this[t] = i.ListenerMethods[t]
}
this.listenToMany(n)
},
componentWillUnmount: i.ListenerMethods.stopListeningToAll
}
}
}, {
"./index": 14
}],
18: [function (n, t) {
var i = n("./utils");
t.exports = function (n) {
var t = {
init: [],
preEmit: [],
shouldEmit: []
},
r = function u(n) {
var r = {};
return n.mixins && n.mixins.forEach(function (n) {
i.extend(r, u(n))
}), i.extend(r, n), Object.keys(t).forEach(function (i) {
n.hasOwnProperty(i) && t[i].push(n[i])
}), r
}(n);
return t.init.length > 1 && (r.init = function () {
var n = arguments;
t.init.forEach(function (t) {
t.apply(this, n)
}, this)
}), t.preEmit.length > 1 && (r.preEmit = function () {
return t.preEmit.reduce(function (n, t) {
var i = t.apply(this, n);
return void 0 === i ? n : [i]
}.bind(this), arguments)
}), t.shouldEmit.length > 1 && (r.shouldEmit = function () {
var n = arguments;
return !t.shouldEmit.some(function (t) {
return !t.apply(this, n)
}, this)
}), Object.keys(t).forEach(function (n) {
1 === t[n].length && (r[n] = t[n][0])
}), r
}
}, {
"./utils": 19
}],
19: [function (n, t, i) {
var r = i.isObject = function (n) {
var t = typeof n;
return "function" === t || "object" === t && !!n
};
i.extend = function (n) {
var i, t, u, f, e;
if (!r(n)) return n;
for (u = 1, f = arguments.length; f > u; u++) {
i = arguments[u];
for (t in i) Object.getOwnPropertyDescriptor && Object.defineProperty ? (e = Object.getOwnPropertyDescriptor(i, t), Object.defineProperty(n, t, e)) : n[t] = i[t]
}
return n
};
i.isFunction = function (n) {
return "function" == typeof n
};
i.EventEmitter = n("eventemitter3");
i.nextTick = function (n) {
setTimeout(n, 0)
};
i.capitalize = function (n) {
return n.charAt(0).toUpperCase() + n.slice(1)
};
i.callbackName = function (n) {
return "on" + i.capitalize(n)
};
i.object = function (n, t) {
for (var r = {}, i = 0; i < n.length; i++) r[n[i]] = t[i];
return r
};
i.Promise = n("native-promise-only");
i.createPromise = function (n) {
return new i.Promise(n)
};
i.isArguments = function (n) {
return "object" == typeof n && "callee" in n && "number" == typeof n.length
};
i.throwIf = function (n, t) {
if (n) throw Error(t || n);
}
}, {
eventemitter3: 1,
"native-promise-only": 2
}]
}, {}, [14])(14)
});
! function () {
accordion = function (n) {
$(n).find(".collapsible h3").off("click.toggle-button").on("click.toggle-button", function () {
var n = $(this);
n.parents(".cost").toggleClass("open");
n.parents(".cost").next(".sub-module").toggleClass("open").next(".sub-module").toggleClass("open");
n.toggleClass("open")
})
}
}(this, {});
$.extend(!0, window, {
Acom: {
Atoms: {},
Molecules: {},
Organisms: {},
Templates: {},
Calculator: {
Stores: {},
Actions: {}
},
Misc: {}
}
});
! function (n, t) {
t.exports = function (n) {
return extend({}, n)
};
n.clone = t.exports
}(this, {});
Acom.Calculator.createInstanceFactory = function (n) {
function r(t, i, r) {
return n.willUpdate ? n.willUpdate(t, i, r) : i
}
function u() {
return t.slug + "-" + ++i
}
var t = n.module,
i = 0;
return function (i) {
function h(i) {
return extend(clone(i), {
slug: t.slug,
price: n.getPrice(i) || 0,
displayName: n.getDisplayName(i),
setUpdates: s,
dataStore: o,
displaySku: Acom.Calculator.Stores.channelCalculator.isChannelCalcEnabled(),
sku: n.getSku ? n.getSku(i) : "",
description: n.getDescription ? n.getDescription(i) : ""
})
}
function e() {
n.isValidOffer && !n.isValidOffer(f) && (f = n.getInitialState());
f = h(f);
o.trigger(f)
}
var s = Reflux.createAction(),
o = Reflux.createStore({
init: function () {
var i = this,
r, o, s;
i.id = u();
i.module = t;
r = t.getPricingApiStore();
r.listen(function (n) {
i.pricingData = n;
e()
});
t.hasOwnProperty("getSecondaryPricingApiStore") && (o = t.getSecondaryPricingApiStore(), o.listen(function (n) {
i.secondaryPricingData = n;
e()
}), i.secondaryPricingData = o.data);
t.hasOwnProperty("getTertiaryPricingApiStore") && (s = t.getTertiaryPricingApiStore(), s.listen(function (n) {
i.tertiaryPricingData = n;
e()
}), i.tertiaryPricingData = s.data);
i.pricingData = r.data;
i.componentFactory = React.createFactory(React.createClass({
mixins: [Reflux.connect(i)],
render: function () {
return i.tertiaryPricingData ? !!i.pricingData && !!i.secondaryPricingData && !!i.tertiaryPricingData && React.createElement(n.component, f) : i.secondaryPricingData ? !!i.pricingData && !!i.secondaryPricingData && React.createElement(n.component, f) : !!i.pricingData && React.createElement(n.component, f)
}
}))
},
getInitialState: function () {
return f
}
}),
f = h(i || n.getInitialState());
return s.listen(function (n) {
var t = extend(clone(f), n);
f = r(f, t, n);
e()
}), o
}
};
Acom.Calculator.createModule = function (n) {
var t = {},
r = {},
u, f, e, i;
for (i in n) switch (i) {
case "icon":
case "slug":
case "displayName":
case "description":
t[i] = n[i];
break;
case "pricingApi":
pricingApi = n.pricingApi;
t.getPricingApiStore = function () {
return u || (u = Acom.Calculator.PricingStoreFactory(n.pricingApi)), u
};
break;
case "secondaryPricingApi":
secondaryPricingApi = n.secondaryPricingApi;
t.getSecondaryPricingApiStore = function () {
return f || (f = Acom.Calculator.PricingStoreFactory(n.secondaryPricingApi)), f
};
break;
case "tertiaryPricingApi":
tertiaryPricingApi = n.tertiaryPricingApi;
t.getTertiaryPricingApiStore = function () {
return e || (e = Acom.Calculator.PricingStoreFactory(n.tertiaryPricingApi)), e
};
break;
default:
r[i] = n[i]
}
return r.module = t, t.createInstance = Acom.Calculator.createInstanceFactory(r), t
};
! function (n, t) {
t.exports = function (n, t, i) {
return n ? t : i || !1
};
n.displayIf = t.exports
}(this || module.exports, {});
DocClickMixin = function () {
function i(t) {
for (var i = 0; i < n.length; i++) $.contains(n[i].getDOMNode(), t.target) || n[i].onDocClick()
}
var t = $(document),
n = [];
return {
componentDidMount: function () {
if (n.length < 1) t.on("click", i);
n.push(this)
},
componentWillUnmount: function () {
for (var r = 0; r < n.length; r++)
if (n[r] === this) {
n.splice(r, 1);
break
}
n.length || t.off("click", i)
}
}
}();
! function (n, t) {
t.exports = function (n, t) {
for (var i in t) t.hasOwnProperty(i) && (n[i] = t[i]);
return n
};
n.extend = t.exports
}(this, {});
! function (n, t) {
t.exports = function (n, t, i) {
return n && t ? Math.ceil(i * n / t) : i
};
n.factorInput = t.exports
}(this, {});
! function (n, t) {
t.exports = function (t) {
for (var r = n.timeFactors, i = 0; i < r.length; i++)
if (r[i].slug == t) return r[i].displayName.toLowerCase();
return r[0].displayName.toLowerCase()
};
n.factorLabel = t.exports
}(this, {});
! function () {
function n(n) {
var t = $(n),
i = t.offset().top - 200;
t.addClass("new");
$("html, body").stop().animate({
scrollTop: i
}, 400);
setTimeout(function () {
t.removeClass("new")
}, 700)
}
$("body").on("click", "a.focus-and-scroll", function (t) {
$(this)[0].hash && n($(this)[0].hash);
t.preventDefault()
})
}(this, {});
! function (n, t) {
t.exports = function (n, t) {
var u;
t = typeof t == "undefined" ? 2 : t;
u = Math.pow(10, -t);
n < u && n !== 0 && (n = u);
var e = ",",
i = "" + (n | 0),
o = Math.pow(10, t),
s = (Math.round((n - +i) * o) / o).toFixed(t).substr(2),
r = "$",
f = i.length > 3 && i.length % 3;
return f && (r += i.substr(0, f) + e), r += i.substr(f).replace(/(\d{3})(?=\d)/g, "$1" + e), t && (r += "." + s), r
};
n.formatCurrency = t.exports
}(this, {});
! function (n, t) {
t.exports = function (n) {
var t = arguments;
return n = formatString.apply(0, Array.apply(0, arguments).map(function (n, t) {
return typeof n == "string" ? n : "{" + (t - 1) + "}"
})), n.match(/\{\d+\}|[^{]+|\{\D/g).map(function (n) {
var i = n.match(/^\{(\d+)\}$/);
return i !== null ? React.cloneElement(t[+i[1] + 1], {
key: n
}) : React.createElement("span", {
key: n,
dangerouslySetInnerHTML: {
__html: n
}
})
})
};
n.formatReact = t.exports
}(this || module.exports, {});
! function (n, t) {
t.exports = function () {
var n = Array.apply(0, arguments);
return n.shift().replace(/\{(\d+)\}/g, function (t, i) {
return i < n.length ? n[i] : t
})
};
n.formatString = t.exports
}(this || module.exports, {});
! function (n, t) {
t.exports = function (n, t) {
var i = 0;
for (i; i < n.length; i++)
if (n[i].slug === t) return n[i].displayName
};
n.getDisplayNameFromData = t.exports
}(this, {});
! function (n, t) {
t.exports = function (n, t, i) {
var c, f = [],
l = i || 1,
s, h, e, r, o, u;
if (!Array.isArray(n)) throw new TypeError("Expecting array, but... wah wah!");
for (r = 0; r < n.length; r++) {
for (o = n[r].limit / l, u = 0; u < f.length; u++) o = o - f[u];
f.push(o)
}
for (e = 0, h = 0; t; e++) c = f[e], s = Math.min(t, c), h += s * n[e].price, t -= s;
return h
};
n.getGraduatedPrice = t.exports
}(this, {});
! function (n, t) {
t.exports = function (t, i) {
function o(t) {
var r = [],
u = Object.keys(n.recommendations.service_counts),
i = 0;
for (i; i < t; i++) r.push(u[i]);
return r
}
var f = [],
r = 0,
u = 0,
e = n.recommendations.recommendations;
for (r; r < e.length; r++)
if (e[r].services[0] === t && e[r].services.length === 1)
for (u in e[r].recommendations) f.indexOf(u) === -1 && u !== t && i.indexOf(u) === -1 && Acom.Calculator.Stores.modules.modules[u] && f.push(u);
return f.length !== 0 ? {
recommendations: !0,
serviceList: f
} : {
recommendations: !1,
serviceList: o(5)
}
};
n.getRecommendations = t.exports
}(this, {});
Acom.Calculator.normalizeInstanceSchema = function (n) {
return !n.slug && n.serviceSlug && (n.slug = n.serviceSlug), n.slug !== "virtual-machines" || n.license || (n.license = ""), n
};
Acom.Calculator.onChange = function (n) {
var i = {},
t = n.target,
r = t.type === "checkbox" ? t.checked : t.value;
i[t.name] = r;
this.props.setUpdates(i)
};
Acom.Misc.parseLink = function (n) {
return function (t) {
return n.href = t, {
protocol: window.location.protocol,
host: window.location.host,
path: n.pathname[0] === "/" ? n.pathname : "/" + n.pathname,
queryString: n.search,
fragment: n.hash,
toString: function () {
return this.protocol + "//" + this.host + this.path + this.queryString + this.fragment
}
}
}
}(document.createElement("a"));
Acom.Calculator.PricingStoreFactory = function (n) {
var t = !1;
return n = n.replace(/\/+$/, ""), Reflux.createStore({
init: function () {
var n = Acom.Calculator.Stores.channelCalculator.currentDiscount();
n && (this.discount = n);
this.listenTo(Acom.Calculator.Actions.channelCalculator.setDiscount, function (n) {
this.discount = n;
t && this.loadApi()
});
this.loadApi()
},
loadApi: function () {
var t = Acom.Misc.parseLink(n),
i = t.path.split("/"),
r = i[i.length - 2];
t.queryString = "?culture=" + Acom.currentCulture;
this.discount && (["analysis-services", "api-management", "application-gateway", "application-insights", "app-service", "automation", "batch", "container-service", "customer-insights", "data-catalog", "data-factory", "data-lake-analytics", "data-lake-store", "dns", "documentdb", "event-hubs", "functions", "hdinsight", "hockeyapp", "iot-hub", "key-vault", "log-analytics", "logic-apps", "machine-learning", "managed-disks", "mobile-engagement", "notification-hubs", "redis-cache", "scheduler", "search", "security-center", "network-watcher", "site-recovery", "storsimple", "sql-database", "sql-database-elastic", "sql-data-warehouse", "sql-server-stretch-database", "stream-analytics", "traffic-manager", "support", "virtual-machines"].indexOf(r) === -1 && (t.path += "-discounts"), t.queryString += "&discount=" + this.discount);
t.path += "/";
$.getJSON(t.toString()).done(this.onApiLoad)
},
onApiLoad: function (n) {
t = !0;
this.data = n;
this.trigger(this.data)
}
})
};
! function (n, t) {
t.exports = {
service_counts: {
storage: 246946,
"sql-database": 142530,
"virtual-machines": 121744,
"app-service": 84345,
"virtual-machines": 50990,
"data-transfers": 35012,
"vpn-gateway": 28753,
"cloud-services": 27197,
backup: 22713,
"virtual-network": 17179,
"service-bus": 11655,
scheduler: 11031,
"machine-learning": 10833,
"redis-cache": 8037,
documentdb: 6609,
"event-hubs": 6189,
"visual-studio-team-services": 5242,
"api-management": 3598,
automation: 2916,
"multi-factor-authentication": 2842,
"stream-analytics": 1618,
cdn: 1382,
"media-services": 1361,
"iot-hub": 1294,
"mobile-services": 1250,
hdinsight: 1215,
remoteapp: 1123,
"site-recovery": 1101,
"traffic-manager": 1085
},
recommendations: [{
service_count: 1,
services: ["app-service"],
recommendations: {
"sql-database": 15189,
"virtual-machines": 75,
"service-bus": 69,
scheduler: 47
}
}, {
service_count: 1,
services: ["sql-database"],
recommendations: {
"app-service": 35772,
"cloud-services": 2762,
"virtual-machines": 1634,
"machine-learning": 490
}
}, {
service_count: 1,
services: ["vpn-gateway"],
recommendations: {
"virtual-machines": 1400,
"sql-database": 43,
"virtual-machines": 9,
"virtual-network": 7
}
}, {
service_count: 1,
services: ["storage"],
recommendations: {
"virtual-machines": 55526,
"sql-database": 539,
"vpn-gateway": 448,
"virtual-network": 257
}
}, {
service_count: 2,
services: ["backup", "storage"],
recommendations: {
"virtual-machines": 5506,
"vpn-gateway": 114,
"sql-database": 12,
"virtual-network": 5
}
}, {
service_count: 2,
services: ["storage", "virtual-machines"],
recommendations: {
"vpn-gateway": 35569,
"sql-database": 4716,
backup: 2406,
"virtual-machines": 460
}
}, {
service_count: 2,
services: ["app-service", "storage"],
recommendations: {
"sql-database": 3027,
"virtual-machines": 479,
"virtual-machines": 4,
"api-management": 1
}
}, {
service_count: 4,
services: ["app-service", "sql-database", "storage", "virtual-machines"],
recommendations: {
"vpn-gateway": 1608,
scheduler: 958,
"cloud-services": 306,
backup: 109
}
}, {
service_count: 2,
services: ["virtual-machines", "storage"],
recommendations: {
"virtual-machines": 3777,
"vpn-gateway": 3486,
"sql-database": 3288,
backup: 2824
}
}, {
service_count: 1,
services: ["virtual-machines"],
recommendations: {
"vpn-gateway": 3385,
"sql-database": 1068,
"virtual-network": 37,
"app-service": 27
}
}, {
service_count: 1,
services: ["visual-studio-team-services"],
recommendations: {
"sql-database": 1690,
"virtual-machines": 22,
"app-service": 6,
"service-bus": 1
}
}, {
service_count: 2,
services: ["machine-learning", "storage"],
recommendations: {
"virtual-machines": 607,
"sql-database": 244,
"vpn-gateway": 8,
"virtual-machines": 4
}
}, {
service_count: 3,
services: ["virtual-machines", "storage", "virtual-machines"],
recommendations: {
"vpn-gateway": 2792,
"sql-database": 341,
"app-service": 199,
backup: 150
}
}, {
service_count: 1,
services: ["virtual-machines"],
recommendations: {
"vpn-gateway": 1583,
"sql-database": 1433,
"app-service": 808,
"virtual-machines": 387
}
}, {
service_count: 1,
services: ["machine-learning"],
recommendations: {
"sql-database": 2367,
"virtual-machines": 69,
"app-service": 16,
"cloud-services": 2
}
}, {
service_count: 2,
services: ["app-service", "sql-database"],
recommendations: {
scheduler: 7806,
"cloud-services": 3205,
"service-bus": 2958,
"redis-cache": 569
}
}, {
service_count: 3,
services: ["backup", "storage", "virtual-machines"],
recommendations: {
"vpn-gateway": 1771,
"sql-database": 61,
"virtual-machines": 16,
"app-service": 2
}
}, {
service_count: 3,
services: ["sql-database", "storage", "virtual-machines"],
recommendations: {
"vpn-gateway": 5021,
"app-service": 3144,
"cloud-services": 330,
backup: 195
}
}, {
service_count: 2,
services: ["sql-database", "storage"],
recommendations: {
"virtual-machines": 9805,
"app-service": 487,
"vpn-gateway": 116,
"cloud-services": 83
}
}, {
service_count: 2,
services: ["cloud-services", "sql-database"],
recommendations: {
"app-service": 3644,
"service-bus": 714,
scheduler: 251,
"api-management": 132
}
}, {
service_count: 3,
services: ["virtual-machines", "sql-database", "storage"],
recommendations: {
"app-service": 681,
"virtual-machines": 512,
"vpn-gateway": 109,
backup: 69
}
}, {
service_count: 3,
services: ["machine-learning", "sql-database", "storage"],
recommendations: {
"virtual-machines": 358,
"app-service": 59,
"vpn-gateway": 20,
"cloud-services": 11
}
}, {
service_count: 3,
services: ["app-service", "sql-database", "storage"],
recommendations: {
"virtual-machines": 2872,
scheduler: 580,
"machine-learning": 176,
backup: 105
}
}, {
service_count: 3,
services: ["storage", "virtual-network", "virtual-machines"],
recommendations: {
"vpn-gateway": 1731,
"virtual-machines": 102,
"sql-database": 102,
backup: 12
}
}, {
service_count: 3,
services: ["storage", "vpn-gateway", "virtual-machines"],
recommendations: {
backup: 3258,
"sql-database": 1306,
"virtual-network": 121,
"virtual-machines": 27
}
}, {
service_count: 1,
services: ["multi-factor-authentication"],
recommendations: {
"virtual-machines": 1214,
"sql-database": 28,
"vpn-gateway": 11
}
}, {
service_count: 1,
services: ["cloud-services"],
recommendations: {
"sql-database": 3146,
"app-service": 15,
"virtual-machines": 4,
scheduler: 3
}
}, {
service_count: 5,
services: ["app-service", "data-transfers", "sql-database", "storage", "virtual-machines"],
recommendations: {
scheduler: 312,
"vpn-gateway": 262,
backup: 58,
"cloud-services": 37
}
}, {
service_count: 4,
services: ["data-transfers", "virtual-machines", "storage", "virtual-machines"],
recommendations: {
"vpn-gateway": 551,
backup: 88,
"app-service": 54,
"sql-database": 47
}
}, {
service_count: 4,
services: ["data-transfers", "sql-database", "storage", "virtual-machines"],
recommendations: {
"vpn-gateway": 418,
"app-service": 272,
backup: 84,
"cloud-services": 49
}
}, {
service_count: 3,
services: ["app-service", "storage", "virtual-machines"],
recommendations: {
"sql-database": 1457,
"vpn-gateway": 924,
backup: 98,
"virtual-machines": 11
}
}, {
service_count: 4,
services: ["cloud-services", "sql-database", "storage", "virtual-machines"],
recommendations: {
"app-service": 429,
"vpn-gateway": 226,
scheduler: 25,
"service-bus": 13
}
}, {
service_count: 1,
services: ["service-bus"],
recommendations: {
"sql-database": 995,
"cloud-services": 140,
"virtual-machines": 2
}
}, {
service_count: 3,
services: ["backup", "virtual-machines", "storage"],
recommendations: {
"virtual-machines": 164,
"vpn-gateway": 107,
"sql-database": 92,
"app-service": 36
}
}, {
service_count: 3,
services: ["app-service", "scheduler", "sql-database"],
recommendations: {
"cloud-services": 606,
"service-bus": 205,
"redis-cache": 187,
"virtual-machines": 80
}
}, {
service_count: 2,
services: ["storage", "vpn-gateway"],
recommendations: {
"virtual-machines": 1973,
backup: 51,
"sql-database": 33,
"virtual-network": 3
}
}, {
service_count: 4,
services: ["sql-database", "storage", "vpn-gateway", "virtual-machines"],
recommendations: {
"app-service": 304,
backup: 184,
"cloud-services": 23,
"virtual-network": 7
}
}, {
service_count: 4,
services: ["virtual-machines", "storage", "vpn-gateway", "virtual-machines"],
recommendations: {
backup: 305,
"sql-database": 132,
"virtual-network": 80,
"app-service": 14
}
}, {
service_count: 4,
services: ["virtual-machines", "sql-database", "storage", "virtual-machines"],
recommendations: {
"vpn-gateway": 344,
"app-service": 312,
backup: 9,
"cloud-services": 7
}
}, {
service_count: 3,
services: ["data-transfers", "storage", "virtual-machines"],
recommendations: {
"vpn-gateway": 2833,
backup: 793,
"sql-database": 169,
"virtual-machines": 23
}
}, {
service_count: 1,
services: ["backup"],
recommendations: {
"virtual-machines": 1311,
"sql-database": 323,
"vpn-gateway": 16,
"app-service": 6
}
}, {
service_count: 2,
services: ["sql-database", "virtual-machines"],
recommendations: {
"app-service": 412,
"vpn-gateway": 412,
"cloud-services": 93,
scheduler: 17
}
}, {
service_count: 3,
services: ["app-service", "virtual-machines", "storage"],
recommendations: {
"sql-database": 1152,
"virtual-machines": 208,
backup: 71,
"vpn-gateway": 67
}
}, {
service_count: 3,
services: ["app-service", "cloud-services", "sql-database"],
recommendations: {
scheduler: 847,
"service-bus": 178,
"virtual-machines": 60,
"api-management": 14
}
}, {
service_count: 4,
services: ["app-service", "cloud-services", "sql-database", "storage"],
recommendations: {
"virtual-machines": 330,
scheduler: 123,
"vpn-gateway": 5,
"machine-learning": 3
}
}, {
service_count: 2,
services: ["documentdb", "sql-database"],
recommendations: {
"app-service": 342,
"cloud-services": 27,
"virtual-machines": 14,
"service-bus": 10
}
}, {
service_count: 4,
services: ["sql-database", "storage", "virtual-network", "virtual-machines"],
recommendations: {
"vpn-gateway": 256,
"app-service": 114,
"virtual-machines": 20,
"cloud-services": 5
}
}, {
service_count: 4,
services: ["data-transfers", "storage", "vpn-gateway", "virtual-machines"],
recommendations: {
backup: 1126,
"sql-database": 31,
"virtual-network": 7,
"virtual-machines": 2
}
}, {
service_count: 1,
services: ["redis-cache"],
recommendations: {
"sql-database": 460,
"virtual-machines": 6,
"app-service": 3
}
}, {
service_count: 4,
services: ["backup", "data-transfers", "storage", "virtual-machines"],
recommendations: {
"vpn-gateway": 550,
"sql-database": 5,
"virtual-machines": 1
}
}, {
service_count: 1,
services: ["api-management"],
recommendations: {
"sql-database": 399,
"virtual-machines": 15,
"app-service": 8,
"vpn-gateway": 2
}
}, {
service_count: 2,
services: ["cloud-services", "storage"],
recommendations: {
"sql-database": 502,
"virtual-machines": 64,
"virtual-network": 1
}
}, {
service_count: 2,
services: ["machine-learning", "sql-database"],
recommendations: {
"app-service": 435,
"cloud-services": 115,
"service-bus": 67,
scheduler: 42
}
}, {
service_count: 4,
services: ["app-service", "data-transfers", "sql-database", "storage"],
recommendations: {
"virtual-machines": 228,
scheduler: 186,
"cloud-services": 9,
"redis-cache": 4
}
}, {
service_count: 2,
services: ["scheduler", "sql-database"],
recommendations: {
"app-service": 414,
"cloud-services": 54,
"virtual-machines": 11,
"service-bus": 6
}
}, {
service_count: 1,
services: ["event-hubs"],
recommendations: {
"sql-database": 277,
"service-bus": 124,
"machine-learning": 55,
"virtual-machines": 4
}
}, {
service_count: 3,
services: ["data-transfers", "virtual-machines", "storage"],
recommendations: {
backup: 659,
"vpn-gateway": 625,
"virtual-machines": 242,
"app-service": 124
}
}, {
service_count: 3,
services: ["virtual-machines", "storage", "virtual-network"],
recommendations: {
"virtual-machines": 1146,
"vpn-gateway": 127,
backup: 59,
"sql-database": 46
}
}, {
service_count: 2,
services: ["data-transfers", "storage"],
recommendations: {
"virtual-machines": 700,
"sql-database": 32,
"vpn-gateway": 4,
"virtual-machines": 3
}
}, {
service_count: 1,
services: ["scheduler"],
recommendations: {
"sql-database": 471,
"virtual-machines": 7,
"app-service": 2
}
}, {
service_count: 4,
services: ["virtual-machines", "storage", "virtual-network", "virtual-machines"],
recommendations: {
"vpn-gateway": 385,
"sql-database": 25,
"app-service": 15,
backup: 6
}
}, {
service_count: 3,
services: ["virtual-machines", "storage", "vpn-gateway"],
recommendations: {
"virtual-machines": 285,
backup: 70,
"sql-database": 62,
"virtual-network": 28
}
}, {
service_count: 4,
services: ["storage", "virtual-network", "vpn-gateway", "virtual-machines"],
recommendations: {
backup: 296,
"sql-database": 67,
"virtual-machines": 31,
automation: 16
}
}, {
service_count: 4,
services: ["app-service", "virtual-machines", "sql-database", "storage"],
recommendations: {
"virtual-machines": 459,
scheduler: 282,
"vpn-gateway": 30,
backup: 26
}
}, {
service_count: 4,
services: ["app-service", "virtual-machines", "storage", "virtual-machines"],
recommendations: {
"sql-database": 216,
"vpn-gateway": 163,
backup: 18,
scheduler: 2
}
}, {
service_count: 2,
services: ["storage", "virtual-network"],
recommendations: {
"virtual-machines": 772,
"virtual-machines": 28,
"vpn-gateway": 23,
"sql-database": 1
}
}, {
service_count: 3,
services: ["app-service", "data-transfers", "sql-database"],
recommendations: {
scheduler: 986,
"cloud-services": 109,
"service-bus": 12,
"virtual-machines": 10
}
}, {
service_count: 3,
services: ["cloud-services", "sql-database", "storage"],
recommendations: {
"virtual-machines": 854,
"app-service": 250,
"service-bus": 37,
scheduler: 22
}
}, {
service_count: 1,
services: ["documentdb"],
recommendations: {
"sql-database": 680,
"app-service": 111,
"virtual-machines": 7,
"service-bus": 1
}
}, {
service_count: 4,
services: ["backup", "storage", "vpn-gateway", "virtual-machines"],
recommendations: {
"sql-database": 794,
"virtual-network": 103,
"app-service": 85,
"virtual-machines": 32
}
}, {
service_count: 3,
services: ["machine-learning", "storage", "virtual-machines"],
recommendations: {
"vpn-gateway": 309,
"sql-database": 64,
backup: 28,
"virtual-machines": 7
}
}, {
service_count: 5,
services: ["backup", "data-transfers", "storage", "vpn-gateway", "virtual-machines"],
recommendations: {
"sql-database": 366,
"virtual-network": 138,
automation: 111,
"app-service": 61
}
}, {
service_count: 4,
services: ["data-transfers", "storage", "virtual-network", "virtual-machines"],
recommendations: {
"vpn-gateway": 406,
"virtual-machines": 13,
backup: 5,
"sql-database": 3
}
}, {
service_count: 2,
services: ["service-bus", "sql-database"],
recommendations: {
"cloud-services": 290,
"app-service": 111,
scheduler: 41,
"machine-learning": 24
}
}]
};
n.recommendations = t.exports
}(this, {});
! function (n, t) {
t.exports = function () {
function r() {
$(n).scrollTop() >= i ? $(".service-picker").css({
position: "fixed",
top: "195px"
}) : $(".service-picker").css({
position: "absolute",
top: "auto"
})
}
var t = $(".fixed-picker-position"),
i;
if (t.length && (i = t.offset().top - $("header").outerHeight(!0)), t.length) $(n).on("scroll", function () {
r()
})
};
n.servicePicker = t.exports
}(this, {});
! function (n, t) {
t.exports = function () {
function i() {
$(n).scrollTop() >= t ? $(".wa-calcEstimate").css({
position: "fixed",
top: "195px"
}) : $(".wa-calcEstimate").css({
position: "absolute",
top: "auto"
})
}
var t = $(".fixed-picker-position").offset().top - $("header").outerHeight(!0);
$(n).on("scroll", function () {
i()
});
$("body").on("click", ".discounts-toggler", function () {
$(this).parent().toggleClass("expanded");
$(".discounts-content").slideToggle()
})
};
n.shoppingCart = t.exports
}(this, {});
! function (n, t) {
t.exports = function (n) {
for (var t, i = Array.prototype.slice.call(arguments, 1); n.length > 1 && i.length;) t = n, n = t.filter(i.shift());
return n.length ? n : t
};
n.successiveFilter = t.exports
}(this, {});
Acom.Calculator.Actions.modules = Reflux.createActions(["register"]);
Acom.Calculator.Actions.instances = Reflux.createActions(["create", "edit", "remove", "set", "clear"]);
Acom.Calculator.Actions.channelCalculator = Reflux.createActions(["setDiscount", "setEstimateName", "setEstimatePartnerMarkup", "enableChannelCalculator", "loadEstimate", "saveEstimate", "saveTemplate", "setTemplateName", "setTemplateDescription", "setTemplateTags"]);
Acom.Calculator.Actions.templates = Reflux.createActions(["loadTemplate", "saveAsTemplate", ]);
Acom.Calculator.Actions.setSupportLevel = Reflux.createAction();
Acom.Calculator.Actions.userPreferences = Reflux.createActions(["setCulture", "setCurrency"]);
! function () {
Acom.Calculator.Stores.armTemplates = Reflux.createStore({
listenables: [Acom.Calculator.Actions.armTemplates],
loadTemplate: function (n) {
var t = "/api/v1/calculator/armtemplates/" + n + "/";
return $.ajax({
url: t,
type: "GET",
dataType: "json",
contentType: "application/json"
})
}
})
}();
! function () {
Acom.Calculator.Stores.estimates = Reflux.createStore({
saveEstimate: function (n) {
var t = "/pricing/calculator/estimates/",
i = "POST",
r = $('#calculator-container + input[name="__RequestVerificationToken"]').val(),
u = {
__RequestVerificationToken: r,
estimate: JSON.stringify(n)
};
return n.id && (t += n.id + "/", i = "PUT"), $.ajax({
url: t,
data: u,
type: i
})
},
loadEstimate: function (n) {
var t = "/api/v1/pricing/calculator/estimates/" + n + "/";
return $.ajax({
url: t,
type: "GET",
dataType: "json",
contentType: "application/json"
})
}
})
}();
! function () {
function i(t, i) {
for (var r = 0; r < n.length; r++)
if (n[r] && n[r] === t) return i(n[r], r, n), !0;
return !1
}
var n = [],
t = {
level: "free",
price: 0,
prices: {
free: 0,
developer: 29,
standard: 300,
professional: 1e3
}
};
Acom.Calculator.Stores.instances = Reflux.createStore({
listenables: [Acom.Calculator.Actions.instances],
init: function () {
var n = this;
n.listenTo(Acom.Calculator.Actions.setSupportLevel, function (i) {
t.level = i;
t.price = t.prices[i];
n.output()
})
},
getInitialState: function () {
return {
instances: n.map(function (n) {
return n.getInitialState()
}),
support: clone(t)
}
},
onCreate: function (n) {
this.createInstance(n);
this.output()
},
onRemove: function (n) {
this.removeInstance(n) && this.output()
},
onClear: function () {
n = [];
this.output()
},
onSet: function (t, i) {
if (Array.isArray(t)) {
var r = this,
u = t.map(function (n) {
return n.slug
});
Acom.Calculator.Stores.modules.waitFor(u, function () {
n.forEach(r.removeInstance, r);
t.forEach(r.createInstance, r);
r.output()
})
}
typeof i == "function" && i()
},
createInstance: function (t) {
var i, u, r;
Object(t) === t && (i = t, t = i.slug);
u = Acom.Calculator.Stores.modules.getModule(t);
r = u.createInstance(i);
n.push(r);
this.listenTo(r, this.output)
},
removeInstance: function (n) {
var t = this;
return i(n, function (n, i, r) {
n.stopListeningTo(n.module.getPricingApiStore());
n.module.hasOwnProperty("getSecondaryPricingApiStore") && n.stopListeningTo(n.module.getSecondaryPricingApiStore());
t.stopListeningTo(n);
r.splice(i, 1)
})
},
output: function () {
this.trigger(this.getInitialState());
for (var t in n) n[t].module.shouldDisplay || Acom.Calculator.Stores.modules.setServiceAvailability(n[t].module.slug, !1)
}
})
}();
! function () {
function n(n, t) {
return t.every(function (t) {
return n[t]
})
}
Acom.Calculator.Stores.modules = Reflux.createStore({
listenables: [Acom.Calculator.Actions.modules],
notAvailableMessages: {},
init: function () {
this.modules = {};
this.availableModules = [];
this.channels = []
},
onRegister: function (n) {
if (this.modules[n.slug]) throw new Error("Module `{" + n.slug + "}` already defined.");
if (!this.availableModules.length || this.availableModules.indexOf(n.slug) !== -1) {
if (this.modules[n.slug] = extend(n, {
shouldDisplay: !0
}), this.channels.length > 0) {
var t = this.channels[0].Services.indexOf(n.slug) > -1;
this.setModuleAvailability(this.modules[n.slug], t);
this.setServiceAvailability(n.slug, t)
}
this.trigger(this.modules)
}
},
getModule: function (n) {
var t = this.modules[n];
if (!t) throw new Error(formatString("Unknown module `{0}`", n));
return t
},
getModulesForCategory: function (n) {
for (var r = [], i = {
featured: ["app-service", "documentdb", "hdinsight", "sql-database", "storage", "virtual-machines"],
compute: ["virtual-machines", "virtual-machine-scale-sets", "container-service", "functions", "batch", "service-fabric", "cloud-services", "remoteapp", "container-registry"],
storage: ["storage", "data-lake-store", "storsimple", "backup", "site-recovery"],
"web-mobile": ["app-service", "cdn", "media-services", "search", "mobile-engagement", "api-management", "notification-hubs"],
databases: ["sql-database", "sql-data-warehouse", "sql-server-stretch-database", "documentdb", "storage", "redis-cache", "data-factory"],
"intelligence-analytics": ["hdinsight", "machine-learning", "stream-analytics", "cognitive-services", "data-lake-analytics", "data-lake-store", "data-factory", "data-catalog", "power-bi-embedded", "analysis-services", "customer-insights"],
iot: ["iot-hub", "event-hubs", "stream-analytics", "machine-learning", "notification-hubs"],
networking: ["data-transfers", "ip-addresses", "application-gateway", "vpn-gateway", "dns", "cdn", "traffic-manager", "expressroute", "network-watcher"],
"enterprise-integration": ["logic-apps", "service-bus", "api-management", "storsimple", "sql-server-stretch-database", "data-factory", "data-catalog"],
"security-identity": ["security-center", "key-vault", "active-directory", "active-directory-b2c"],
"developer-tools": ["visual-studio-team-services", "application-insights", "api-management", "hockeyapp"],
"monitoring-management": ["application-insights", "log-analytics", "automation", "backup", "site-recovery", "scheduler", "traffic-manager", "monitor", "network-watcher"]
}, t = 0; t < i[n].length; t++) this.modules[i[n][t]] && r.push(this.modules[i[n][t]]);
return r
},
waitFor: function (t, i) {
if (n(this.modules, t)) i(this.modules);
else var r = this.listen(function (u) {
n(u, t) && (i(u), r())
})
},
setAvailableModules: function (n) {
if (Array.isArray(n)) {
this.availableModules = n;
for (key in this.modules) this.availableModules.indexOf(key) === -1 ? (this.modules[key].shouldDisplay = !1, this.setModuleAvailability(this.modules[key], !1), this.setServiceAvailability(key, !1)) : (this.modules[key].shouldDisplay = !0, this.setModuleAvailability(this.modules[key], !0), this.setServiceAvailability(key, !0));
this.trigger(this.modules)
}
},
setModuleAvailability: function (n, t) {
var i = " (" + this.getNotAvailableMessage(n.slug) + ")";
t ? n.displayName.indexOf(i) !== -1 && (n.displayName = n.displayName.replace(i, "")) : n.displayName.indexOf(i) === -1 && (n.displayName = n.displayName + i)
},
setServiceAvailability: function (n, t) {
var i = $(".wa-calcService." + n),
r = "#not-available-service";
i.length && (t ? i.children(r).remove() : (i.children(r).remove(), i.append(this.getChannelFilterMessage(n))))
},
setNotAvailableMessages: function (n) {
this.notAvailableMessages = n
},
getChannelFilterMessage: function (n) {
return "<div class='not-available' id='not-available-service'><span>" + this.getNotAvailableMessage(n) + "<\/span><\/div>"
},
setServicesPerChannel: function (n) {
Array.isArray(n) && (this.channels = n)
},
setAvailableModulesBySlug: function (n) {
if (this.channels) {
n || (n = "direct");
for (x in this.channels)
if (n.indexOf(this.channels[x].Slug) > -1) {
this.setAvailableModules(this.channels[x].Services);
break
}
}
},
getNotAvailableMessage: function (n) {
return this.notAvailableMessages[n] ? this.notAvailableMessages[n] : this.notAvailableMessages["default"]
}
})
}();
! function () {
var n = [];
Acom.Calculator.Stores.regions = Reflux.createStore({
init: function () {
var t = this;
$.getJSON("/api/v1/regions/").done(function (i) {
n = i.regions;
t.output()
})
},
getInitialState: function () {
return {
regions: n
}
},
output: function () {
this.trigger(this.getInitialState())
}
})
}();
! function () {
Acom.Calculator.Stores.templates = Reflux.createStore({
listenables: [Acom.Calculator.Actions.templates],
loadTemplate: function (n) {
var t = "/api/v1/templates/" + n + "/";
return $.ajax({
url: t,
type: "GET",
dataType: "json",
contentType: "application/json"
})
},
saveAsTemplate: function (n) {
var t = $('#calculator-container + input[name="__RequestVerificationToken"]').val(),
i = {
__RequestVerificationToken: t,
template: JSON.stringify(n)
};
return $.ajax({
url: "/templates/",
data: i,
type: "POST"
})
}
})
}();
! function () {
function e(n) {
return !!~f.indexOf(n)
}
function o(n) {
var i = {},
t;
for (t in n) typeof n[t] != "function" && t !== "dataStore" && (i[t] = n[t]);
return i
}
function s() {
$(".wa-notificationOverlay").fadeIn();
$(".wa-expiredNotification").stop().animate({
bottom: "0"
}, 500);
$(".wa-expiredNotification").on("click", function () {
location.reload()
})
}
function i(n, t) {
return $(n).fadeIn().delay(2e3).fadeOut(400, t)
}
function r() {
var f = this,
i = {},
r = [];
return n.estimate.id && (i.id = n.estimate.id), i.estimateTimestamp = n.estimate.timestamp || (new Date).toISOString(), i.name = n.estimate.name, i.priceLevelId = n.estimate.selectedDiscount, i.total = 0, i.markupValue = n.estimate.markupValue, i.instances = [], r = u.map(o), r.forEach(function (n) {
i.total += n.price;
i.instances.push(extend(n, {
name: n.displayName,
total: n.price,
serviceSlug: n.slug
}))
}), i.markupValue && (i.total += i.total * i.markupValue / 100), i.support = {
level: t.level,
total: t.price
}, i.total += t.price, i
}
function h() {
var t = r();
return t.name = n.template.name, t.description = n.template.description, t.tags = n.template.tags.split(/\s*,\s*/), t
}
var n = {
estimate: {
name: "",
selectedDiscount: "",
isSaving: !1,
markupValue: 0
},
template: {
name: "",
description: "",
tags: "",
isSaving: !1
},
availableDiscounts: [],
isChannelCalcEnabled: !1,
displaySaveTemplate: !1,
hasEARegion: !1
},
u = [],
t = {},
f = [];
Acom.Calculator.Stores.channelCalculator = Reflux.createStore({
listenables: [Acom.Calculator.Actions.channelCalculator],
init: function () {
this.listenTo(Acom.Calculator.Stores.instances, function (i) {
u = i.instances;
t = i.support;
n.hasEARegion = i.instances.some(function (n) {
return e(n.region)
});
this.output()
});
this.listenTo(Acom.Calculator.Stores.regions, function (n) {
f = n.regions.filter(function (n) {
return n.isEa || n.isGovernment
}).map(function (n) {
return n.id
})
})
},
getInitialState: function () {
return clone(n)
},
onSetDiscount: function (t) {
n.estimate.selectedDiscount = t;
Acom.Calculator.Stores.modules.setAvailableModulesBySlug(t);
this.output()
},
onSetEstimateName: function (t) {
n.estimate.name = t;
this.output()
},
onSetEstimatePartnerMarkup: function (t) {
n.estimate.markupValue = t;
this.output()
},
onSetTemplateName: function (t) {
n.template.name = t
},
onSetTemplateDescription: function (t) {
n.template.description = t
},
onSetTemplateTags: function (t) {
n.template.tags = t
},
onEnableChannelCalculator: function (t) {
var i = this;
t && ($.ajaxSetup({
statusCode: {
401: function () {
s()
}
}
}), $.getJSON("/api/v1/pricing/discounts/").done(function (t) {
if (n.isChannelCalcEnabled = !0, n.availableDiscounts = t.filter(function (n) {
return n.slug !== "open"
}), n.availableDiscounts.length > 0) {
var r = $.map(n.availableDiscounts, function (n) {
return n.slug
}),
u = localStorage.getItem("calculator.discount-level") || "web-direct";
r.indexOf(u) < 0 && (u = r.length > 1 ? r[1] : r[0]);
Acom.Calculator.Actions.channelCalculator.setDiscount(u);
Acom.Calculator.Stores.channelCalculator.loadInitialModules()
}
i.output()
}))
},
onLoadEstimate: function (t, i) {
var u = this,
r;
Acom.Calculator.Stores.estimates.loadEstimate(t).done(function (t) {
r = t;
n.estimate.id = r.id;
n.estimate.timestamp = r.estimateTimestamp;
Acom.Calculator.Actions.channelCalculator.setEstimateName(r.name);
Acom.Calculator.Actions.channelCalculator.setDiscount(r.priceLevelId);
Acom.Calculator.Actions.channelCalculator.setEstimatePartnerMarkup(r.markupValue);
Acom.Calculator.Actions.setSupportLevel(r.support.level);
typeof i == "function" && i(r.instances);
u.output()
})
},
onSaveEstimate: function () {
var u = this,
t;
n.estimate.name && (n.estimate.isSaving = !0, u.output(), t = r(), Acom.Calculator.Stores.estimates.saveEstimate(t).done(function (r) {
r && r.id && (n.estimate.id = r.id, n.estimate.timestamp = t.estimateTimestamp);
try {
localStorage.setItem(Acom.Calculator.Stores.channelCalculator.storageUpdatedKey, JSON.stringify({
estimateId: n.estimate.id,
value: !1
}))
} catch (u) {}
i("#wa-calcSuccessfulSave")
}).fail(function () {
i("#wa-calcErrorSave")
}).always(function () {
n.estimate.isSaving = !1;
u.output()
}))
},
onSaveTemplate: function () {
var t = this,
r;
r = h();
n.template.isSaving = !0;
n.displaySaveTemplate = !0;
t.output();
Acom.Calculator.Stores.templates.saveAsTemplate(r).done(function () {
i("#wa-templateSuccessfulSave", function () {
n.displaySaveTemplate = !1;
n.template.isSaving = !1;
t.output()
})
}).fail(function () {
i("#wa-templateErrorSave", function () {
n.displaySaveTemplate = !0;
n.template.isSaving = !1;
t.output()
})
})
},
output: function () {
this.trigger(this.getInitialState())
},
currentDiscount: function () {
return n.estimate.selectedDiscount
},
isChannelCalcEnabled: function () {
return n.isChannelCalcEnabled
},
getSerializedEstimate: function () {
return r()
}
})
}();
! function () {
"use strict";
Acom.Calculator.Stores.userPreferences = Reflux.createStore({
listenables: [Acom.Calculator.Actions.userPreferences],
init: function () {
this.setCulture(Acom.currentCulture);
this.currency = {
name: "usd",
locale: "en-us",
conversion: 1
}
},
getInitialState: function () {
return {
culture: this.culture,
currency: this.currency.name
}
},
setCulture: function (n) {
this.culture = n.toLowerCase()
},
onSetCulture: function (n) {
this.setCulture(n);
this.output()
},
setCurrency: function (n) {
this.currency = window.rawCurrencyData[n.toLowerCase()]
},
onSetCurrency: function (n) {
this.setCurrency(n);
this.output()
},
output: function () {
this.trigger(this.getInitialState())
},
convertCurrency: function (n) {
return n * this.currency.conversion
}
})
}();
$(window).on("globalInitComplete changedCurrency", function () {
Acom.Calculator.Actions.userPreferences.setCurrency(window.pricingCurrency)
});
! function () {
function b(n) {
var i = {},
t;
for (t in n) typeof n[t] != "function" && t !== "dataStore" && t !== "displayName" && (i[t] = n[t]);
return i
}
function h() {
var t = [],
n;
try {
n = JSON.parse(localStorage.getItem(Acom.Calculator.LOCAL_STORAGE_KEY));
Object(n) === n && (t = n)
} catch (i) {} finally {
return t
}
}
function r(n) {
try {
localStorage.setItem(Acom.Calculator.LOCAL_STORAGE_KEY, JSON.stringify(n))
} catch (t) {}
}
function c(n) {
try {
localStorage.setItem(o, JSON.stringify({
estimateId: Acom.Calculator.Stores.channelCalculator.estimateId,
value: n
}))
} catch (t) {}
}
function k() {
var n = null;
try {
n = JSON.parse(localStorage.getItem(o))
} catch (t) {} finally {
return n
}
}
function d() {
$(".wa-notificationOverlay").fadeIn();
$(".wa-loadCalculator").stop().animate({
bottom: "0"
}, 500);
$("#loadCalculatorOverwrite").on("click", function (n) {
n.preventDefault();
l(!0);
u()
});
$("#loadCalculatorAppend").on("click", function (n) {
n.preventDefault();
l(!1);
u()
});
$("#loadCalculatorCancel").on("click", function (t) {
t.preventDefault();
n();
u()
})
}
function g(t) {
$(".wa-notificationOverlay").fadeIn();
$(".wa-loadCalculator").stop().animate({
bottom: "0"
}, 500);
$("#loadCalculatorMessage").text(v);
$("#loadCalculatorOverwrite").text(y);
$("#loadCalculatorOverwrite").on("click", function (i) {
i.preventDefault();
r([]);
n(t);
c(!1);
u()
});
$("#loadCalculatorAppend").hide();
$("#loadCalculatorCancel").on("click", function (t) {
t.preventDefault();
n();
u()
})
}
function u() {
$(".wa-notificationOverlay").fadeOut();
$(".wa-loadCalculator").stop().animate({
bottom: "-67px"
}, 500)
}
function e() {
$(".wa-notificationOverlay").fadeIn();
$(".wa-templateNotFound").stop().animate({
bottom: "0"
}, 500);
$("#wa-templateNotFoundClose").on("click", function (t) {
t.preventDefault();
n();
nt()
})
}
function nt() {
$(".wa-notificationOverlay").fadeOut();
$(".wa-templateNotFound").stop().animate({
bottom: "-67px"
}, 500)
}
function l(t) {
t && (Acom.Calculator.Actions.channelCalculator.setEstimateName(i.name), Acom.Calculator.Actions.setSupportLevel(i.support.level), r([]));
n(i.instances)
}
function n(n) {
var i = h(),
u, r, f;
if (n && n.length > 0 && (i = i.concat(n)), p = i.length, i.length)
for (Acom.Calculator.Actions.instances.set(i.map(Acom.Calculator.normalizeInstanceSchema), w), u = 0; u < i.length; u++)
for (r = 0; r < t.length; r++) i[u].slug === t[r] && t.splice(r, 1);
else w();
f = Acom.Calculator.Stores.modules.listen(function (n) {
var i = t.every(function (t) {
return n[t]
});
i && (f(), t.forEach(Acom.Calculator.Actions.instances.create))
})
}
function w() {
Acom.Calculator.Stores.instances.listen(function (n) {
a++;
r(n.instances.map(b));
Acom.Calculator.Stores.channelCalculator.estimateId && a > p && c(!0)
})
}
function tt(t) {
var i = k();
i && i.estimateId === Acom.Calculator.Stores.channelCalculator.estimateId && !!i.value ? g(t) : (r([]), n(t), c(!1))
}
function it() {
return Acom.Calculator.Stores.channelCalculator.estimateId ? Acom.Calculator.Actions.channelCalculator.loadEstimate(Acom.Calculator.Stores.channelCalculator.estimateId, tt) : s ? Acom.Calculator.Stores.templates.loadTemplate(s).done(function (n) {
if (n && n.instances) {
i = n;
var t = h();
t.length ? d() : l(!0)
} else e()
}).fail(e) : f ? Acom.Calculator.Stores.armTemplates.loadTemplate(f).done(function (t) {
t && t.instances ? (i = t, r([]), n(i.instances)) : e()
}).fail(e) : n(), React.render(React.createElement(Calculator, {
isArmTemplate: !!f
}), $(Acom.Calculator.Stores.channelCalculator.selector || "#calculator-container")[0])
}
var t = [],
o = "acomuser.storage-updated",
a = 0,
i, s, f, v, y, p;
window.initializeCalculator = function (n, i) {
var l = h(),
r = RegExp("[?&]id=([^&]*)").exec(window.location.search),
c = r && decodeURIComponent(r[1].replace(/\+/g, " ")),
u = RegExp("[?&]template=([^&]*)").exec(window.location.search),
e = RegExp("[?&]armtemplate=([^&]*)").exec(window.location.search.toLowerCase());
s = u && decodeURIComponent(u[1].replace(/\+/g, " "));
f = e && decodeURIComponent(e[1].replace(/\+/g, " "));
t = n.initialServices;
v = n.estimateUnsavedMessage;
y = n.estimateOverrideLinkText;
Acom.Calculator.Stores.channelCalculator.templateSaver = n.templateSaver;
Acom.Calculator.Stores.channelCalculator.invitationSender = n.invitationSender;
Acom.Calculator.Stores.channelCalculator.selector = i;
Acom.Calculator.Stores.channelCalculator.estimateId = c;
Acom.Calculator.Stores.channelCalculator.loadInitialModules = it;
Acom.Calculator.Stores.channelCalculator.storageUpdatedKey = o;
Acom.Calculator.Actions.channelCalculator.enableChannelCalculator(n.enableChannelCalculator);
Acom.Calculator.Stores.modules.setNotAvailableMessages(n.notAvailableMessages);
n.availableServices && Acom.Calculator.Stores.modules.setServicesPerChannel(n.availableServices);
n.enableChannelCalculator || Acom.Calculator.Stores.channelCalculator.loadInitialModules()
};
Acom.Calculator.LOCAL_STORAGE_KEY = "calculator.servicesv3"
}(),
function (n, t, i) {
"use strict";
function g(t) {
t.preventDefault();
n(".button-yes-content").hide();
n(".button-no-content").show();
v.val(!1);
p()
}
function nt(t) {
t.preventDefault();
n(".button-yes-content").show();
n(".button-no-content").hide();
v.val(!0);
p()
}
function p() {
h.show();
f.hide();
u.hide()
}
function tt() {
var n = this.value.length;
n > s ? o.addClass("error") : o.removeClass("error");
c.text(s - n)
}
function it() {
i.getFormData("calc-clicked-feedback", e.val());
e.val("");
a.delay(4e3).fadeOut(400, function () {
l.show();
f.show();
u.show()
})
}
var h = n("#details"),
u = n("#button-yes"),
f = n("#button-no"),
e = n("#comment"),
o = n("#comment-count"),
c = o.find("span"),
s = parseInt(c.data("max"), 10),
r = n("#feedback-calculator"),
l = n("#feedback-message"),
a = n("#feedback-thanks"),
v = n("#helpful"),
w = n("#instances"),
b = n("#total"),
k = n("#version"),
d = n("#user-currency"),
y = Acom.Calculator.LOCAL_STORAGE_KEY;
r.on("submit", function (i) {
i.preventDefault();
i.stopImmediatePropagation();
w.val(localStorage.getItem(y) || "[]");
b.val(n(".wa-calcEstimate .numeric").text());
k.val(y);
d.val(t.pricingCurrency);
r.validate({
rules: {
comment: {
maxlength: s
}
}
});
r.valid() && (h.hide(), l.hide(), a.show(), n.ajax({
url: i.target.action,
method: "POST",
data: r.serialize(),
contentType: "application/x-www-form-urlencoded",
success: it
}))
});
e.on("input", tt);
u.on("click", nt);
f.on("click", g)
}(jQuery, window, window.sd.analytics);
! function () {
function n(n, t) {
var r = t || this.state,
i = n || this.props,
u = i.format === "currency" ? r.currency : i.format;
this.format = getNumberFormat(r.culture, i.decimals, u)
}
Acom.Atoms.Number = React.createClass({
displayName: "Number",
mixins: [Reflux.connect(Acom.Calculator.Stores.userPreferences)],
componentWillMount: n,
componentWillUpdate: n,
shouldComponentUpdate: function (n, t) {
var i = this.props,
r = this.state;
return i.value !== n.value || r.currency !== t.currency || i.decimals !== n.decimals || i.format !== n.format || r.culture !== t.culture
},
render: function () {
var t = this.props,
n = t.value;
return t.format === "currency" && (n = Acom.Calculator.Stores.userPreferences.convertCurrency(n)), React.createElement("span", null, this.format(n))
}
})
}();
Acom.Atoms.SelectorButton = React.createClass({
displayName: "SelectorButton",
render: function () {
var n = this.props,
t = ["wa-selectorator"];
return n.defaultChecked && t.push("active"), React.createElement("label", {
className: t.join(" ")
}, React.createElement("input", React.__spread({}, n, {
type: "radio"
})))
}
});
Acom.Atoms.ServiceInfo = React.createClass({
displayName: "ServiceInfo",
render: function () {
var n = this.props,
t = ["wa-serviceInfo", "clearfix"];
return n.isSelected && t.push("active"), React.createElement("div", {
className: t.join(" ")
}, React.createElement("span", {
className: "icon",
title: n.displayName,
dangerouslySetInnerHTML: n.icon
}), React.createElement("div", null, React.createElement("b", null, n.displayName), React.createElement("span", null, n.description)))
}
});
Tooltip = React.createClass({
displayName: "Tooltip",
mixins: [DocClickMixin],
onDocClick: function () {
this.setState({
isOpen: !1
})
},
onClick: function (n) {
this.setState({
isOpen: !this.state.isOpen
});
n.preventDefault()
},
onChildClick: function (n) {
n.stopPropagation()
},
getInitialState: function () {
return {
isOpen: !1
}
},
shouldComponentUpdate: function (n, t) {
var u = this.state,
r = this.props.children,
f = n.children;
if (u.isOpen !== t.isOpen || r.length !== f.length) return !0;
if (u.isOpen)
for (i = 0; i < r.length; i++)
if (r[i] !== f[i]) return !0;
return !1
},
render: function () {
var n = this.props,
t = ["wa-tooltip"],
i = React.createElement("svg", {
x: "0px",
y: "0px",
width: "16px",
height: "16px",
viewBox: "0 0 9 9",
"enable-background": "new 0 0 9 9"
}, React.createElement("circle", {
fill: "#0372B0",
cx: "4.5",
cy: "4.5",
r: "4.5"
}), React.createElement("circle", {
fill: "#FFFFFF",
cx: "4.5",
cy: "2.315",
r: "0.815"
}), React.createElement("polygon", {
fill: "#FFFFFF",
points: "4.378,7.5 4.622,7.5 5.231,7.5 5.231,3.93 4.622,3.93 4.378,3.93 3.776,3.93 3.769,7.5 "
}));
return n.className === "pricing-details-link" && t.push(n.className), this.state.isOpen && t.push("active"), n.toggleLabel && (i = React.createElement("a", {
href: "#"
}, n.toggleLabel), t.push("top")), React.createElement("div", React.__spread({}, n, {
className: t.join(" "),
onClick: this.onClick
}), i, React.createElement("div", {
onClick: this.onChildClick
}, n.children))
}
});
! function (n, t) {
t.exports = React.createClass({
displayName: "exports",
render: function () {
var n = this.props,
u = n.options.map(function (n) {
var t = n.disabled ? !0 : !1;
return React.createElement("option", {
key: n.slug,
value: n.slug,
disabled: n.disabled
}, n.displayName)
}),
f = n.options.filter(function (t) {
return n.defaultValue == t.slug
}).map(function (n) {
return n.displayName
})[0],
r = ["select"],
i = [],
t;
if (n.classes)
for (i = n.classes.split(" "), t = 0; t < i.length; t++) r.push(i[t]);
return React.createElement("div", null, displayIf(n.label && n.label.length, React.createElement("label", {
className: "dropdown-label",
htmlFor: n.name
}, n.label, ":")), React.createElement("select", React.__spread({}, n, {
key: n.name + n.defaultValue,
className: r.join(" ")
}), u), n.children, displayIf(n.name === "region" && n.defaultValue.indexOf("gov") !== -1, React.createElement("div", {
className: "government-note"
}, formatReact('<strong>NOTE:<\/strong> Azure Government is available for US government entities through purchase from a licensed Azure Government License Service provider or Partner. <a href="{0}">Learn more<\/a> or sign up for a free <a href="{1}">Azure Government trial<\/a>.', "/en-us/overview/clouds/government/", "https://azuregov.microsoft.com/trial/azuregovtrial"))), displayIf(n.name === "region" && n.defaultValue.indexOf("germany") !== -1, React.createElement("div", {
className: "government-note"
}, formatReact("<strong>NOTE:<\/strong> Azure Germany is available to customers and partners in the European Union (EU) and European Free Trade Association (EFTA) and provides data residency in Germany with additional levels of control and data protection with a modest price uplift over global cloud offerings (% varies per service)."))))
}
});
n.CalculatorDropdown = t.exports
}(this || module.exports, {});
! function (n, t) {
"use strict";
t.exports = React.createClass({
displayName: "exports",
render: function () {
var n = this.props,
t = ["wa-checkbox", "wa-checkbox-large"];
return n.defaultChecked && t.push("checked"), React.createElement("div", {
className: t.join(" ")
}, React.createElement("label", null, n.label, React.createElement("input", React.__spread({}, n, {
type: "checkbox"
}))))
}
});
n.Checkbox = t.exports
}(this || module.exports, {});
! function (n, t) {
t.exports = React.createClass({
displayName: "exports",
render: function () {
var t = n.resolvedCurrencyList,
i = $("#dropdown-currency select").val();
return options = t.map(function (n) {
return React.createElement("option", {
key: n.slug,
value: n.slug
}, n.displayName)
}), React.createElement("div", null, React.createElement("select", {
defaultValue: i,
key: t.name + t.defaultValue,
className: "select currency-dropdown"
}, options))
}
});
n.CurrencyDropdown = t.exports
}(this, {});
! function (n, t) {
function i(n, t) {
var i = t || this.state,
r = n || this.props,
u = i.currency
}
t.exports = React.createClass({
displayName: "exports",
mixins: [Reflux.connect(Acom.Calculator.Stores.userPreferences)],
componentWillMount: i,
componentWillUpdate: i,
shouldComponentUpdate: function (n, t) {
var i = this.props,
r = this.state;
return i.value !== n.value || r.currency !== t.currency || i.decimals !== n.decimals || i.format !== n.format || r.culture !== t.culture || this.state !== t
},
render: function () {
var n = this.props,
i, r = this.state,
u = ["detailed-dropdown select"],
t = [];
if (i = n.options.map(function (t) {
var o = t.disabled ? !0 : !1,
e = t.values.number ? getNumberFormat(r.culture, t.values.number.decimals, r.currency) : null,
u = "",
f = {
colon: n.delimiters.indexOf("colon") > -1,
comma: n.delimiters.indexOf("comma") > -1,
pipe: n.delimiters.indexOf("pipe") > -1
},
i = 0;
for (i; i < t.values.displayStrings.length; i++) u += t.values.displayStrings[i], u += f.colon && i === 0 ? ": " : f.comma ? ", " : f.pipe ? " | " : " ";
return e && (u += formatString(t.values.number.rate, e(Acom.Calculator.Stores.userPreferences.convertCurrency(t.values.number.value)))), React.createElement("option", {
key: t.slug,
value: t.slug,
disabled: t.disabled
}, u)
}), n.classes)
for (t = n.classes.split(" "), j; j < t.length; j++) u.push(t[j]);
return React.createElement("div", null, displayIf(n.label && n.label.length, React.createElement("label", {
className: "dropdown-label",
htmlFor: n.name
}, n.label, ":")), React.createElement("select", React.__spread({}, n, {
key: n.name + n.defaultValue,
className: u.join(" ")
}), i), n.children)
}
});
n.DetailedDropdown = t.exports
}(this || module.exports, {});
! function (n, t) {
t.exports = React.createClass({
displayName: "exports",
render: function () {
var n = this.props,
r, t, i;
if (n.factorUnit === "minutes") {
r = [{
slug: "1",
displayName: "Minutes"
}, {
slug: "60",
displayName: "Hours"
}].map(function (n) {
return {
slug: n.slug,
displayName: n.displayName
}
});
switch (n.factorsDefault) {
case "1":
t = 1;
i = 44640;
break;
case "60":
t = 1;
i = 744
}
} else if (n.factorUnit === "hours") {
r = [{
slug: "1",
displayName: "Hours"
}, {
slug: "24",
displayName: "Days"
}, {
slug: "744",
displayName: "Months"
}].map(function (n) {
return {
slug: n.slug,
displayName: n.displayName
}
});
switch (n.factorsDefault) {
case "1":
t = 1;
i = 744;
break;
case "24":
t = 1;
i = 31;
break;
case "744":
t = 1;
i = 1
}
} else n.factorUnit === "gbs" && (r = [{
slug: "1",
displayName: "GB"
}, {
slug: "1024",
displayName: "TB"
}].map(function (n) {
return {
slug: n.slug,
displayName: n.displayName
}
}));
return React.createElement("div", null, React.createElement(TextNumber, {
"class": "factored-input",
key: "factor-" + n.name,
label: React.createElement(CalculatorDropdown, {
key: "factor-units-" + n.name,
className: "unit-selector",
name: n.factorsName,
options: r,
defaultValue: n.factorsDefault,
onChange: n.onChange
}),
name: n.name,
min: t ? t : n.min,
max: i ? i : n.max,
defaultValue: n.defaultValue,
onChange: n.onChange
}))
}
});
n.FactoredInput = t.exports
}(this, {});
! function (n, t) {
function u(n) {
n.preventDefault();
i.acceptHandler(i.properties);
r()
}
function f(n) {
n.preventDefault();
i.cancelHandler(i.properties);
r()
}
function r() {
$(".wa-modal-overlay").fadeOut();
$(".wa-modal-options").stop(!0).animate({
bottom: "-67px"
}, 500)
}
var i;
t.exports = React.createClass({
displayName: "exports",
componentDidMount: function () {
i = this
},
render: function () {
var n = this.props;
return React.createElement("div", null, React.createElement("div", {
className: "wa-modal-options"
}, n.message, React.createElement("a", {
className: "wa-modal-accept",
href: "#",
onClick: u
}, n.accept), React.createElement("a", {
className: "wa-modal-cancel",
href: "#",
onClick: f
}, n.cancel)), React.createElement("div", {
className: "wa-modal-overlay"
}))
},
show: function (n, t, r) {
i.properties = n;
i.acceptHandler = t;
i.cancelHandler = r || function () {};
$(".wa-modal-overlay").fadeIn();
$(".wa-modal-options").stop(!0).animate({
bottom: "0"
}, 500)
}
});
n.ModalDialog = t.exports
}(this, {});
Acom.Molecules.Selector = React.createClass({
displayName: "Selector",
render: function () {
var n = this.props;
return React.createElement("ul", React.__spread({}, n, {
key: n.defaultValue,
className: "wa-selectorList"
}), n.options.map(function (t) {
return React.createElement("li", {
"data-event": "calc-clicked-featurescategory",
key: t.slug
}, React.createElement(Acom.Atoms.SelectorButton, {
name: n.name,
value: t.slug,
defaultChecked: n.defaultValue === t.slug
}, t.displayName))
}))
}
});
! function (n, t) {
"use strict";
t.exports = React.createClass({
displayName: "exports",
render: function () {
var n = this.props;
return n.base || n.overage ? React.createElement("div", {
className: "sku-under-total"
}, displayIf(n.base, React.createElement("div", null, React.createElement("label", {
className: "sku-label"
}, "Base SKU"), React.createElement("span", {
className: "sku-number"
}, n.base))), displayIf(n.overage, React.createElement("div", null, React.createElement("label", {
className: "sku-label"
}, "Overage SKU"), React.createElement("span", {
className: "sku-number"
}, n.overage)))) : React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, n.value))
}
});
n.SkuLabel = t.exports
}(this, {});
! function (n, t) {
"use strict";
t.exports = React.createClass({
displayName: "exports",
render: function () {
var n = this.props;
return React.createElement("div", null, React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
textAlign: "center",
width: "auto"
}
}, React.createElement("div", {
className: "numeric"
}, n.value)), React.createElement("label", {
className: "label"
}, n.label))
}
});
n.StaticNumber = t.exports
}(this, {});
! function (n, t) {
"use strict";
function i(n) {
return parseInt(n, 10)
}
t.exports = React.createClass({
displayName: "exports",
updateValue: function (n, t) {
var r = this.props,
u = this.refs.input.getDOMNode();
if (t = t ? +u.value + t : +u.value, t = Math.min(Math.max(t, r.min), r.max), t = (r.format || i)(t), t = isNaN(t) ? r.defaultValue : t, u.value != t && (u.value = "" + t), r.onChange) r.onChange(extend(n, {
target: u
}))
},
onIncrease: function (n) {
n.preventDefault();
var t = this.refs.input.getDOMNode();
this.updateValue(n, 1)
},
onDecrease: function (n) {
n.preventDefault();
var t = this.refs.input.getDOMNode();
this.updateValue(n, -1)
},
onKeyDown: function (n) {
var i = 1,
t = 0;
switch (n.keyCode) {
case 33:
case 38:
t = 1;
break;
case 34:
case 40:
t = -1;
break;
default:
return
}(n.shiftKey || n.keyCode === 33 || n.keyCode === 34) && (i = 10);
this.updateValue(n, t * i);
n.preventDefault()
},
render: function () {
var n = this.props,
i = +n.defaultValue,
t = ["number-holder"];
return n.max > 999 && n.max <= 99999 && t.push("wide"), n.max > 99999 && n.max <= 999999999 && t.push("extra-wide"), n.max > 999999999 && t.push("widest"), n["class"] && t.push(n["class"]), React.createElement("div", {
className: t.join(" ")
}, React.createElement("div", {
className: "wa-textNumber"
}, React.createElement("input", React.__spread({}, n, {
className: "text-input numeric",
ref: "input",
type: "number",
onKeyDown: this.onKeyDown,
onChange: this.updateValue,
onClick: this.onClick
}))), React.createElement("label", {
htmlFor: "count",
className: "label"
}, n.label))
}
});
n.TextNumber = t.exports
}(this, {});
! function (n, t) {
t.exports = React.createClass({
displayName: "exports",
render: function () {
var n = this.props,
t = n.options.map(function (n) {
var t = n.disabled ? !0 : !1;
return React.createElement("option", {
key: n.slug,
value: n.slug,
disabled: n.disabled
}, n.displayName)
}),
i = n.options.filter(function (t) {
return n.defaultValue == t.slug
}).map(function (n) {
return n.displayName
})[0];
return React.createElement("div", {
className: "number-holder"
}, React.createElement("div", {
className: "xa-dropdown unit-dropdown"
}, React.createElement("select", React.__spread({}, n, {
key: n.name + n.defaultValue,
className: "select"
}), t), React.createElement("span", {
className: "value"
}, i), React.createElement("span", {
className: "arrow"
})), n.children, React.createElement("label", {
className: "label",
htmlFor: n.name
}, n.label))
}
});
n.UnitDropdown = t.exports
}(this, {});
! function () {
"use strict";
function u(t, i) {
var r = n.getPricingApiStore().data;
return r ? r.activeDirectoryDomainServices.offers[i].price[t] : undefined
}
function f(i) {
var r = n.getPricingApiStore().data;
return r ? t(i) ? i.dsHours * (i.dsHoursFactor || "1") * u(i.region, i.dsTier) : 0 : undefined
}
function e() {
return 0
}
function o(t) {
var i = n.getPricingApiStore().data;
return i ? i.activeDirectoryMFA.offers[t.mfaBillingTypes].price[t.region] : undefined
}
function s(t) {
var i = n.getPricingApiStore().data,
r;
return i ? (r = t.mfaBillingTypes === "per-user" ? t.mfaUsers : Math.ceil(t.mfaAuthentications / 10), i.activeDirectoryMFA.offers[t.mfaBillingTypes].price[t.region] * r) : undefined
}
function t(t) {
var i = n.getPricingApiStore().data;
return i ? i.activeDirectoryDomainServices.offers[t.dsTier].price[t.region] ? !0 : !1 : undefined
}
function h(n, t) {
for (var i = 0; i < t.length; i++)
if (t[i].slug == n) return t[i].displayName;
return ""
}
var i = "Azure Active Directory",
r, n;
r = React.createClass({
displayName: "ActiveDirectory",
onChange: Acom.Calculator.onChange,
render: function () {
var r = this.props,
h = n.getPricingApiStore().data,
c = h.activeDirectoryMFA.billings.map(function (n) {
var t;
switch (n.slug) {
case "per-user":
t = "Per user";
break;
case "per-authentication":
t = "Per authentication";
break;
case "per-user-annual-direct":
t = "Per user annual"
}
return {
slug: n.slug,
displayName: t
}
});
return React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: r.dataStore.module.icon
}), " ", React.createElement("input", {
className: "text-input",
name: "name",
placeholder: i,
defaultValue: r.name
})), React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Region",
name: "region",
options: h.regions,
defaultValue: r.region
}), React.createElement(CalculatorDropdown, {
label: "Tier",
name: "tier",
options: h.activeDirectory.tiers,
defaultValue: r.tier
}))), React.createElement("div", {
className: "cost no-divider"
}, displayIf(r.tier === "free", React.createElement("p", {
className: "total-note"
}, "Includes 500k Directory Objects, SSO for SasS Apps 10 Apps/User"), React.createElement("p", {
className: "total-note"
}, formatReact('The Basic and Premium editions are available through a <a href="{0}">Microsoft Enterprise Agreement<\/a>, the <a href="{1}">Open Volume License Program<\/a>, and the <a href="{2}">Cloud Solution Providers<\/a> program. Azure and Office 365 subscribers can also buy Active Directory Premium online.', "https://www.microsoft.com/licensing/licensing-options/enterprise.aspx", "https://www.microsoft.com/licensing/licensing-options/open-license.aspx", "https://mspartner.microsoft.com/en/us/pages/solutions/cloud-reseller-overview.aspx"))), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: e(r.region, r.tier),
decimals: "2",
format: "currency"
}))), displayIf(r.displaySku && r.sku.ad, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, r.sku.ad))))), React.createElement("div", {
className: "service-properties collapsible"
}, React.createElement("div", {
className: "cost"
}, React.createElement("h3", null, "Multi-Factor Authentication"), React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Billing model",
name: "mfaBillingTypes",
options: c,
defaultValue: r.mfaBillingTypes
})), React.createElement("p", null, React.createElement("strong", null, "NOTE:"), React.createElement("br", null), "Available as a stand-alone service with per user and per authentication billing options, or bundled with Azure Active Directory Premium and Enterprise Mobility Suite."), displayIf(r.mfaBillingTypes === "per-user", React.createElement(TextNumber, {
key: "per-user",
label: "Users",
name: "mfaUsers",
min: "0",
max: "999999999",
defaultValue: r.mfaUsers,
onChange: this.onChange
}), React.createElement(TextNumber, {
key: "per-auth",
label: "Authentications",
name: "mfaAuthentications",
min: "0",
max: "999999999",
defaultValue: r.mfaAuthentications,
onChange: this.onChange
})), React.createElement("div", {
className: "math"
}, "×"), displayIf(r.mfaBillingTypes === "per-user", React.createElement(StaticNumber, {
label: "Per user",
value: React.createElement(Acom.Atoms.Number, {
value: o(r),
decimals: "2",
format: "currency"
})
}), React.createElement(StaticNumber, {
label: "Per 10 authentications",
value: React.createElement(Acom.Atoms.Number, {
value: o(r),
decimals: "2",
format: "currency"
})
})), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: s(r),
decimals: "2",
format: "currency"
}))), displayIf(r.displaySku && r.sku.admfa, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, r.sku.admfa))))), displayIf(t(r), React.createElement("div", null, React.createElement("div", {
className: "cost detail"
}, React.createElement("h3", null, "Domain Services"), React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Directory objects",
name: "dsTier",
options: h.activeDirectoryDomainServices.tiers,
defaultValue: r.dsTier
}))), React.createElement("div", {
className: "cost sub-module no-divider"
}, React.createElement(FactoredInput, {
key: "factor-dsHours-" + r.dsHoursFactor,
name: "dsHours",
defaultValue: r.dsHours,
factorsName: "dsHoursFactor",
factorsDefault: r.dsHoursFactor || "1",
factorUnit: "hours",
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(StaticNumber, {
label: "Per Hr",
value: React.createElement(Acom.Atoms.Number, {
value: u(r.region, r.dsTier),
decimals: "2",
format: "currency"
})
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: f(r),
decimals: "2",
format: "currency"
}))), displayIf(r.displaySku && r.sku.adds, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, r.sku.adds))))))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("span", {
className: "sub-total"
}, "Subtotal"), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: r.price,
decimals: "2",
format: "currency"
})))))))
}
});
n = Acom.Calculator.createModule({
slug: "active-directory",
displayName: i,
description: "Synchronize on-premises directories and enable single sign-on",
pricingApi: "/api/v1/pricing/active-directory/calculator/",
component: r,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="active-directory" viewBox="0 0 50 50"> <path fill="#59B4D9" d="M25.001,50.001c-1.232,0-2.392-0.48-3.261-1.352L1.351,28.261C0.492,27.402,0,26.215,0,25 c0-1.214,0.492-2.402,1.351-3.26L21.74,1.352C22.611,0.48,23.769,0,25.001,0c1.231,0,2.39,0.48,3.261,1.352L48.648,21.74 C49.521,22.608,50,23.767,50,25c0,1.233-0.479,2.392-1.353,3.263L28.262,48.649C27.392,49.521,26.232,50.001,25.001,50.001"/> <path fill="#FFFFFF" d="M38.614,21.093c-2.16,0-3.91,1.75-3.91,3.909c0,0.792,0.239,1.527,0.645,2.143l-7.744,7.744 c-0.206-0.144-0.427-0.264-0.656-0.373V14.759c1.167-0.676,1.961-1.924,1.961-3.37C28.91,9.23,27.16,7.48,25,7.48 c-2.158,0-3.908,1.75-3.908,3.909c0,1.446,0.794,2.694,1.96,3.37v19.756c-0.219,0.104-0.434,0.216-0.632,0.353l-7.753-7.753 c0.394-0.61,0.628-1.333,0.628-2.113c0-2.159-1.75-3.909-3.908-3.909c-2.16,0-3.91,1.75-3.91,3.909s1.75,3.909,3.91,3.909 c0.448,0,0.872-0.091,1.274-0.23l8.15,8.15c-0.234,0.548-0.364,1.15-0.364,1.783c0,2.513,2.038,4.551,4.551,4.551 c2.514,0,4.551-2.038,4.551-4.551c0-0.621-0.126-1.212-0.351-1.751l8.173-8.172c0.392,0.132,0.804,0.22,1.241,0.22 c2.158,0,3.908-1.75,3.908-3.909S40.771,21.093,38.614,21.093z"/> <rect x="31.006" y="8.226" transform="matrix(-0.707 0.7072 -0.7072 -0.707 68.2099 8.8718)" opacity="0.5" fill="#FFFFFF" width="2.523" height="20.676"/> <rect x="16.487" y="8.242" transform="matrix(0.7071 0.7071 -0.7071 0.7071 18.3355 -7.1088)" opacity="0.5" fill="#FFFFFF" width="2.524" height="20.677"/> <path fill="#B8D432" d="M27.665,38.614c0,1.496-1.214,2.709-2.71,2.709c-1.497,0-2.709-1.213-2.709-2.709 c0-1.496,1.212-2.709,2.709-2.709C26.45,35.905,27.665,37.118,27.665,38.614"/> <path fill="#B8D432" d="M27.174,11.389c0,1.201-0.973,2.174-2.174,2.174c-1.201,0-2.174-0.973-2.174-2.174 c0-1.201,0.973-2.174,2.174-2.174C26.201,9.215,27.174,10.188,27.174,11.389"/> <path fill="#B8D432" d="M13.563,25.001c0,1.201-0.975,2.174-2.174,2.174c-1.201,0-2.174-0.973-2.174-2.174 c0-1.201,0.973-2.174,2.174-2.174C12.588,22.827,13.563,23.8,13.563,25.001"/> <path fill="#B8D432" d="M40.788,25.001c0,1.201-0.975,2.174-2.175,2.174c-1.2,0-2.174-0.973-2.174-2.174 c0-1.201,0.974-2.174,2.174-2.174C39.813,22.827,40.788,23.8,40.788,25.001"/> <path opacity="0.1" fill="#FFFFFF" d="M28.262,1.352C27.391,0.48,26.233,0,25.001,0c-1.231,0-2.389,0.48-3.26,1.352L1.352,21.74 C0.492,22.598,0,23.786,0,25c0,1.215,0.492,2.403,1.352,3.261l11.543,11.544L34.61,7.699L28.262,1.352z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#active-directory"><\/use><\/svg>'
},
getInitialState: function () {
return {
region: "us-west",
tier: "free",
users: 1,
dsTier: "aad-ds-s2",
dsTierString: "25001-100000",
dsObjects: 5,
dsHours: 0,
dsHoursFactor: "1",
dsAvailable: !0,
mfaBillingTypes: "per-user",
mfaUsers: 10,
mfaAuthentications: 10
}
},
getPrice: function (n) {
return e(n.region, n.tier) + f(n) + s(n)
},
getDisplayName: function (n) {
return n.name || i
},
willUpdate: function (i, r) {
var u = n.getPricingApiStore().data;
return r.dsAvailable = t(r), r.dsTierString = h(r.dsTier, u.activeDirectoryDomainServices.tiers), i.dsHoursFactor !== r.dsHoursFactor && (r.dsHours = factorInput(i.dsHoursFactor, r.dsHoursFactor, i.dsHours)), r
},
getSku: function (i) {
var r = n.getPricingApiStore().data,
u;
return r ? (u = {
ad: r.activeDirectory.offers[i.tier].skus[i.region],
admfa: r.activeDirectoryMFA.offers[i.mfaBillingTypes].skus[i.region]
}, t(i) && (u.adds = r.activeDirectoryDomainServices.offers[i.dsTier].skus[i.region]), u) : ""
},
getDescription: function (n) {
var t = Core.Util.FormatString("{0} tier, {1} MFA billing model, {2} MFA user(s)", n.tier, n.mfaBillingTypes, n.mfaUsers);
return n.dsAvailable && (t += Core.Util.FormatString(", {0} directory objects, {1} {2}", n.dsTierString, n.dsHours, factorLabel(n.dsHoursFactor))), t
},
isValidOffer: function (t) {
var i = n.getPricingApiStore().data,
r, u, f;
return i ? (r = i.activeDirectory.offers[t.tier], u = i.activeDirectoryDomainServices.offers[t.dsTier], f = i.activeDirectoryMFA.offers[t.mfaBillingTypes], r && u && f ? !0 : void 0) : undefined
}
});
Acom.Calculator.Actions.modules.register(n)
}();
! function () {
"use strict";
function t(t) {
var r = n.getPricingApiStore().data,
i;
return r ? (i = r.offers, i["stored-users-" + t.region] == undefined) ? {
users: 0,
authentications: 0,
multiFactorAuthentications: 0,
multiFactorAuthenticationsCost: 0
} : {
users: getGraduatedPrice(i["stored-users-" + t.region].prices, t.b2cUsers),
authentications: getGraduatedPrice(i["authentications-users-" + t.region].prices, t.authentications),
multiFactorAuthentications: getGraduatedPrice(i["multi-factor-authentication-users-" + t.region].prices, t.multiFactorAuthentications),
multiFactorAuthenticationsCost: i["multi-factor-authentication-users-" + t.region].prices[0].price
} : undefined
}
function u(i) {
var r = n.getPricingApiStore().data;
return r ? t(i).users + t(i).authentications + t(i).multiFactorAuthentications : undefined
}
var i = "Azure Active Directory B2C",
r, n;
r = React.createClass({
displayName: "ActiveDirectoryB2C",
onChange: Acom.Calculator.onChange,
render: function () {
var r = this.props,
u = n.getPricingApiStore().data;
return React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: r.dataStore.module.icon
}), " ", React.createElement("input", {
className: "text-input",
name: "name",
placeholder: i,
defaultValue: r.name
})), React.createElement("div", {
className: "detail"
}, React.createElement("p", null, "The B2C service is currently available free of charge. The service is generally available in all North America regions (United States and Canada regions). All tenants created in these regions will begin billing on February 1, 2017. Tenants in Europe and UK regions are still in Preview, and will remain free of charge until the service becomes generally available in those regions."), React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Region",
name: "region",
options: u.regions,
defaultValue: r.region
}))), React.createElement("div", {
className: "cost"
}, React.createElement("h5", null, "Stored users"), displayIf(!Acom.Calculator.Stores.channelCalculator.isChannelCalcEnabled() && u.offers["stored-users-" + r.region].prices[0].price === 0, React.createElement("p", null, formatReact("First {0} free", u.offers["stored-users-" + r.region].prices[0].limit.toLocaleString(Acom.currentCulture)))), React.createElement(TextNumber, {
label: "Users",
name: "b2cUsers",
min: "0",
max: "999999999",
defaultValue: r.b2cUsers,
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: t(r).users,
decimals: "2",
format: "currency"
}))), displayIf(r.displaySku && r.sku.adb2CStoredUsers, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, r.sku.adb2CStoredUsers))))), React.createElement("div", {
className: "cost sub-module"
}, React.createElement("h5", null, "Authentications"), displayIf(!Acom.Calculator.Stores.channelCalculator.isChannelCalcEnabled() && u.offers["authentications-users-" + r.region].prices[0].price === 0, React.createElement("p", null, formatReact("First {0} free", u.offers["authentications-users-" + r.region].prices[0].limit.toLocaleString(Acom.currentCulture)))), React.createElement(TextNumber, {
label: "Authentications",
name: "authentications",
min: "0",
max: "999999999",
defaultValue: r.authentications,
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: t(r).authentications,
decimals: "2",
format: "currency"
}))), displayIf(r.displaySku && r.sku.adb2CAuthenticationsUsers, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, r.sku.adb2CAuthenticationsUsers))))), React.createElement("div", {
className: "cost sub-module"
}, React.createElement("h5", null, "Multi-Factor Authentications"), React.createElement(TextNumber, {
label: "Authentications",
name: "multiFactorAuthentications",
min: "0",
max: "999999999",
defaultValue: r.multiFactorAuthentications,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(StaticNumber, {
value: React.createElement(Acom.Atoms.Number, {
value: t(r).multiFactorAuthenticationsCost,
decimals: "2",
format: "currency"
})
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: t(r).multiFactorAuthentications,
decimals: "2",
format: "currency"
}))), displayIf(r.displaySku && r.sku.adb2CMultifactorAuthenticationUsers, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, r.sku.adb2CMultifactorAuthenticationUsers))))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("span", {
className: "sub-total"
}, "Subtotal"), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: r.price,
decimals: "2",
format: "currency"
}))))))
}
});
n = Acom.Calculator.createModule({
slug: "active-directory-b2c",
displayName: i,
description: "Consumer identity and access management in the cloud",
pricingApi: "/api/v1/pricing/active-directory-b2c/calculator/",
component: r,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="active-directory" viewBox="0 0 50 50"> <path fill="#59B4D9" d="M25.001,50.001c-1.232,0-2.392-0.48-3.261-1.352L1.351,28.261C0.492,27.402,0,26.215,0,25 c0-1.214,0.492-2.402,1.351-3.26L21.74,1.352C22.611,0.48,23.769,0,25.001,0c1.231,0,2.39,0.48,3.261,1.352L48.648,21.74 C49.521,22.608,50,23.767,50,25c0,1.233-0.479,2.392-1.353,3.263L28.262,48.649C27.392,49.521,26.232,50.001,25.001,50.001"/> <path fill="#FFFFFF" d="M38.614,21.093c-2.16,0-3.91,1.75-3.91,3.909c0,0.792,0.239,1.527,0.645,2.143l-7.744,7.744 c-0.206-0.144-0.427-0.264-0.656-0.373V14.759c1.167-0.676,1.961-1.924,1.961-3.37C28.91,9.23,27.16,7.48,25,7.48 c-2.158,0-3.908,1.75-3.908,3.909c0,1.446,0.794,2.694,1.96,3.37v19.756c-0.219,0.104-0.434,0.216-0.632,0.353l-7.753-7.753 c0.394-0.61,0.628-1.333,0.628-2.113c0-2.159-1.75-3.909-3.908-3.909c-2.16,0-3.91,1.75-3.91,3.909s1.75,3.909,3.91,3.909 c0.448,0,0.872-0.091,1.274-0.23l8.15,8.15c-0.234,0.548-0.364,1.15-0.364,1.783c0,2.513,2.038,4.551,4.551,4.551 c2.514,0,4.551-2.038,4.551-4.551c0-0.621-0.126-1.212-0.351-1.751l8.173-8.172c0.392,0.132,0.804,0.22,1.241,0.22 c2.158,0,3.908-1.75,3.908-3.909S40.771,21.093,38.614,21.093z"/> <rect x="31.006" y="8.226" transform="matrix(-0.707 0.7072 -0.7072 -0.707 68.2099 8.8718)" opacity="0.5" fill="#FFFFFF" width="2.523" height="20.676"/> <rect x="16.487" y="8.242" transform="matrix(0.7071 0.7071 -0.7071 0.7071 18.3355 -7.1088)" opacity="0.5" fill="#FFFFFF" width="2.524" height="20.677"/> <path fill="#B8D432" d="M27.665,38.614c0,1.496-1.214,2.709-2.71,2.709c-1.497,0-2.709-1.213-2.709-2.709 c0-1.496,1.212-2.709,2.709-2.709C26.45,35.905,27.665,37.118,27.665,38.614"/> <path fill="#B8D432" d="M27.174,11.389c0,1.201-0.973,2.174-2.174,2.174c-1.201,0-2.174-0.973-2.174-2.174 c0-1.201,0.973-2.174,2.174-2.174C26.201,9.215,27.174,10.188,27.174,11.389"/> <path fill="#B8D432" d="M13.563,25.001c0,1.201-0.975,2.174-2.174,2.174c-1.201,0-2.174-0.973-2.174-2.174 c0-1.201,0.973-2.174,2.174-2.174C12.588,22.827,13.563,23.8,13.563,25.001"/> <path fill="#B8D432" d="M40.788,25.001c0,1.201-0.975,2.174-2.175,2.174c-1.2,0-2.174-0.973-2.174-2.174 c0-1.201,0.974-2.174,2.174-2.174C39.813,22.827,40.788,23.8,40.788,25.001"/> <path opacity="0.1" fill="#FFFFFF" d="M28.262,1.352C27.391,0.48,26.233,0,25.001,0c-1.231,0-2.389,0.48-3.26,1.352L1.352,21.74 C0.492,22.598,0,23.786,0,25c0,1.215,0.492,2.403,1.352,3.261l11.543,11.544L34.61,7.699L28.262,1.352z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#active-directory"><\/use><\/svg>'
},
getInitialState: function () {
return {
region: "us-west",
b2cUsers: 5e4,
authentications: 5e4,
multiFactorAuthentications: 0
}
},
getPrice: function (n) {
return u(n)
},
getDisplayName: function (n) {
return n.name || i
},
getSku: function (t) {
var i = n.getPricingApiStore().data,
r = {};
return i ? (r.adb2CStoredUsers = i.offers["stored-users-" + t.region].sku, r.adb2CAuthenticationsUsers = i.offers["authentications-users-" + t.region].sku, r.adb2CMultifactorAuthenticationUsers = i.offers["multi-factor-authentication-users-" + t.region].sku, r) : ""
},
getDescription: function (n) {
return Core.Util.FormatString("{0} stored user(s), {1} authentication(s), {2} multi-factor authentications", n.b2cUsers, n.authentications, n.multiFactorAuthentications)
},
isValidOffer: function (t) {
var i = n.getPricingApiStore().data,
r;
return i ? (r = i.offers["stored-users-" + t.region], r ? !0 : void 0) : undefined
}
});
Acom.Calculator.Actions.modules.register(n)
}();
! function () {
"use strict";
function r(t) {
var i = n.getPricingApiStore().data;
return i ? i.offers[t] === Object(i.offers[t]) && i.offers[t] : undefined
}
function u(t, i) {
var r = n.getPricingApiStore().data;
return r ? r.offers[t].prices[i] : 0
}
var t = "Azure Analysis Services",
i, n;
i = React.createClass({
displayName: "AnalysisServices",
onChange: Acom.Calculator.onChange,
render: function () {
var i = this.props,
f = n.getPricingApiStore().data,
e = f.tiers.map(function (n) {
var t = r(n.slug),
f = u(n.slug, i.region);
return {
slug: n.slug,
values: {
displayStrings: [n.displayName, formatString("{0} QPUs", t.qpu), formatString("{0} GB", t.memory), ],
number: {
value: f,
decimals: 3,
format: "currency",
rate: "{0}/hr"
}
}
}
});
return React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: i.dataStore.module.icon
}), " ", React.createElement("span", {
className: "heading3"
}, t, React.createElement("sup", {
className: "preview normal-font"
}, "Preview"))), React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Region",
name: "region",
options: f.regions,
defaultValue: i.region
})), React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(DetailedDropdown, {
key: "offer-" + i.region,
label: "Instances",
name: "offer",
options: e,
delimiters: ["colon", "comma"],
defaultValue: i.offer,
onChange: this.onChange
}))), React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
label: "Instances",
name: "instances",
min: "1",
max: "999999",
defaultValue: i.instances,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(FactoredInput, {
key: "factor-hoursFactor-" + i.hoursFactor,
name: "hours",
defaultValue: i.hours,
factorsName: "hoursFactor",
factorsDefault: i.hoursFactor || "1",
factorUnit: "hours",
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: i.price,
decimals: "2",
format: "currency"
}))), displayIf(i.displaySku && i.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, i.sku))))))
}
});
n = Acom.Calculator.createModule({
slug: "analysis-services",
displayName: t,
description: "Proven analytical engine in the cloud",
pricingApi: "/api/v1/pricing/analysis-services/calculator/",
component: i,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="analysis-services" viewBox="0 0 1327.24 1025.711"> <polygon points="816.86 442.412 781.02 431.292 781.02 512.852 781.02 588.242 816.86 568.462 816.86 442.412" fill="#5ab4da"/> <polygon points="781.02 242.212 781.02 364.562 816.86 375.682 816.86 333.662 1290.17 333.662 1290.17 624.072 846.52 624.072 781.02 659.912 781.02 661.152 1327.24 661.152 1327.24 242.212 781.02 242.212" fill="#5ab4da"/> <polygon points="546.22 392.982 546.22 355.912 510.38 344.782 510.38 381.862 328.72 381.862 334.9 418.932 546.22 418.932 546.22 392.982" fill="#5ab4da"/> <polygon points="264.46 381.861 37.074 381.861 37.074 91.449 510.384 91.449 510.384 278.054 546.222 289.176 546.222 0 0 0 0 418.935 270.639 418.935 264.46 381.861" fill="#5ab4da"/> <polygon points="604.304 989.872 130.994 989.872 130.994 698.225 313.892 698.225 299.063 606.776 93.921 606.776 93.921 1025.711 640.142 1025.711 640.142 735.299 604.304 753.835 604.304 989.872" fill="#5ab4da"/> <polygon points="378.15 698.222 574.65 698.222 640.14 662.382 640.14 606.772 363.32 606.772 378.15 698.222" fill="#5ab4da"/> <path d="M782.26,638.9l27.69-14.83,6.91-3.7,185.37-98.87c8.65,9.89,19.77,18.54,33.37,22.25,6.18,2.47,13.59,2.47,19.77,2.47a69.694,69.694,0,0,0,66.73-50.67c11.12-37.07-11.12-75.38-46.96-86.5-6.18-1.24-12.36-2.48-19.77-2.48a69.336,69.336,0,0,0-64.26,43.26l-174.25-55.61-35.84-11.13-234.8-75.38-35.84-11.12-1.23-.39-166.83-52.75a73.281,73.281,0,0,0-7.42-39.55c-12.36-23.48-37.07-37.07-61.79-37.07-11.12,0-22.24,2.47-32.13,8.65-33.37,18.54-46.96,60.55-28.42,93.92,12.35,22.25,34.6,35.84,58.08,37.08L283,383.092l6.18,35.84,29.65,187.84,13.6,91.45,12.36,81.56c-19.78,7.42-37.08,23.49-43.26,45.73-11.12,37.07,11.13,75.38,46.96,86.51,6.18,1.23,12.36,2.47,19.78,2.47A69.706,69.706,0,0,0,435,863.822c3.71-13.59,3.71-25.95,0-38.31l170.54-91.45,35.84-19.77,139.64-74.73Zm-2.47-30.89-139.65,74.15-35.84,19.77-184.13,98.86c-8.65-9.88-19.77-18.53-33.37-22.24-4.94-1.24-9.88-2.47-14.83-2.47l-12.35-77.86-13.6-91.45-29.66-187.84-6.17-35.84-12.36-81.56q3.7-1.845,7.41-3.71c12.36-6.17,21.01-16.06,27.19-27.18l176.72,56.84,35.84,11.13,1.23.39,233.57,74.99,35.84,11.12,169.3,54.38c0,6.18,1.24,11.12,2.47,17.3l-170.54,90.8-1.23.65-34.61,19.09Z" fill="#5ab4da"/> <\/symbol><\/defs><\/svg><svg><use xlink:href="#analysis-services"><\/use><\/svg>'
},
getInitialState: function () {
return {
region: "us-south-central",
offer: "s1",
instances: 1,
hours: 744,
hoursFactor: "1"
}
},
getPrice: function (t) {
var i = n.getPricingApiStore().data;
return i ? i.offers[t.offer].prices[t.region] * t.instances * t.hours * t.hoursFactor : undefined
},
getDisplayName: function (n) {
return n.name || t
},
willUpdate: function (n, t) {
return n.hoursFactor !== t.hoursFactor && (t.hours = factorInput(n.hoursFactor, t.hoursFactor, n.hours)), t
},
getDescription: function (n) {
var t = r(n.offer) || {};
return Core.Util.FormatString("{0} tier: {1} QPUs, {2} GB memory. {3} instance(s) for {4} {5} ", n.offer, t.qpu, t.memory, n.instances, n.hours, factorLabel(n.hoursFactor))
},
getSku: function (t) {
var i = n.getPricingApiStore().data;
return i ? i.offers[t.offer].skus[t.region] : ""
}
});
Acom.Calculator.Actions.modules.register(n)
}();
! function () {
"use strict";
var t = "API Management",
i, n;
i = React.createClass({
displayName: "ApiManagement",
onChange: Acom.Calculator.onChange,
render: function () {
var i = this.props,
r = n.getPricingApiStore().data;
return React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: i.dataStore.module.icon
}), " ", React.createElement("input", {
className: "text-input",
name: "name",
placeholder: t,
defaultValue: i.name
})), React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Region",
name: "region",
options: r.regions,
defaultValue: i.region
}), React.createElement(CalculatorDropdown, {
label: "Pricing Tier",
name: "tier",
options: r.tiers,
defaultValue: i.tier
}))), React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
label: "Units",
name: "units",
min: "1",
max: "999",
defaultValue: i.units,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(TextNumber, {
label: "Days",
name: "days",
min: "1",
max: "31",
defaultValue: i.days,
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: i.price,
decimals: "2",
format: "currency"
}))), displayIf(i.displaySku && i.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, i.sku))))))
}
});
n = Acom.Calculator.createModule({
slug: "api-management",
displayName: t,
description: "Publish APIs to developers, partners and employees securely and at scale",
pricingApi: "/api/v1/pricing/api-management/calculator/",
component: i,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="api-management" viewBox="0 0 50 50"> <path fill="#59B4D9" d="M20.5,32.5h-8.9l0,0c-4.4,0-8-3.6-8-8.1s3.4-8.1,8-8.1c0.8,0,1.7,0.2,2.7,0.3l1.7,0.5l0.5-1.7 C18.1,10.2,23.1,7,28.8,7c6.9,0,12.2,5.3,12.2,12.2c0,1.1-0.2,2.2-0.5,3.3L39.8,25l2.7-0.3c0.2,0,0.3,0,0.5,0c2,0,3.6,1.7,3.6,3.6 s-1.4,3.3-3.1,3.6c0,0-8.6,0-8.9,0c-0.3-2.5-1.6-4.7-3.3-6.4C29.1,23.3,26.1,22,23,22c-2.2,0-4.4,0.6-6.1,1.7l1.9,3 c1.4-0.8,2.8-1.1,4.4-1.1c2.2,0,4.4,0.8,5.8,2.5c1.6,1.6,2.5,3.6,2.5,5.8s-0.8,4.4-2.5,5.8c-1.6,1.7-3.6,2.5-5.8,2.5 c-1.6,0-3.1-0.5-4.4-1.4l-1.9,3c1.9,1.1,4.1,1.9,6.1,1.9c3.1,0,6.1-1.1,8.3-3.4c1.9-1.9,3-4.4,3.3-7c0.5,0,9.1,0,9.1,0h0.2 c3.6-0.3,6.3-3.4,6.3-7.2c0-3-2.8-5.8-6.1-6.4c0.2-0.6,0.2-0.9,0.2-1.9c0-8.8-6.2-15.8-16.1-15.8l0,0c-6.3,0-11.9,3.6-14.2,9.4 c-0.8,0-1.4-0.3-2.3-0.3C5.2,13,0,18,0,24.4c0,6.3,5.2,11.3,11.4,11.3h9.8L20.5,32.5z"/> <circle fill="#68217A" cx="22.8" cy="33.8" r="5.6"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#api-management"><\/use><\/svg>'
},
getInitialState: function () {
return {
region: "us-east",
tier: "developer",
units: 1,
days: 1
}
},
getPrice: function (t) {
var i = n.getPricingApiStore().data;
return i ? i.offers[t.tier] ? i.offers[t.tier].prices[t.region] * t.days * t.units : void 0 : undefined
},
getDisplayName: function (n) {
return n.name || t
},
getSku: function (t) {
var i = n.getPricingApiStore().data;
return !i || !i.offers[t.tier] ? "" : i.offers[t.tier].skus[t.region]
},
getDescription: function (n) {
return Core.Util.FormatString("{0} units, {1} day(s), {2} tier", n.units, n.days, n.tier)
}
});
Acom.Calculator.Actions.modules.register(n)
}();
! function () {
"use strict";
function o() {
var n = Acom.Calculator.Stores.channelCalculator.currentDiscount(),
t = !0;
return ["ea"].forEach(function (i) {
n && n.indexOf(i) === 0 && (t = !1)
}), t
}
function r(t) {
var i = n.getPricingApiStore().data;
return i ? i.offers[t.tier + "-" + t.size].prices[t.region] * t.hours * t.hoursFactor * t.instances : 0
}
function u(t) {
var i = n.getPricingApiStore().data;
return i ? getGraduatedPrice(i.graduatedOffers["data-processing-" + t.size][t.region].prices, t.dataUnits * t.processedUnits) : 0
}
function f(t) {
var i = n.getSecondaryPricingApiStore().data;
return i ? getGraduatedPrice(i.offers[t.region].prices, t.units * t.storageUnits) : 0
}
function s(t) {
var i = n.getSecondaryPricingApiStore().data,
r;
if (!i) return "";
if (["usgov-iowa", "usgov-virginia"].indexOf(t.region) >= 0) return "Government Zone";
r = e(t, i);
switch (r) {
case "zone1":
return Core.Util.FormatString("{0}: {1}, {2}", "Zone 1", "North America", "Europe");
case "zone2":
return Core.Util.FormatString("{0}: {1}, {2}, {3}", "Zone 2", "Asia Pacific", "Japan", "Australia");
case "zone3":
return Core.Util.FormatString("{0}: {1}", "Zone 3", "Brazil");
case "zone4":
return Core.Util.FormatString("{0}", "DE (trustee): Germany");
default:
return ""
}
}
function e(n, t) {
for (var i in t.availableRegionsPerZone)
if (t.availableRegionsPerZone[i].indexOf(n.region) >= 0) return i;
return ""
}
var t = "Application Gateway",
i, n;
i = React.createClass({
displayName: "ApplicationGateway",
onChange: Acom.Calculator.onChange,
render: function () {
var i = this.props,
e = n.getPricingApiStore().data,
o = e.sizes.map(function (n) {
return {
slug: n.slug,
displayName: n.displayName,
disabled: i.tier === "waf" && n.slug === "small"
}
});
return React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: i.dataStore.module.icon
}), " ", React.createElement("input", {
className: "text-input",
name: "name",
placeholder: t,
defaultValue: i.name
})), React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Region",
name: "region",
options: e.regions,
defaultValue: i.region
}), React.createElement(CalculatorDropdown, {
label: "Pricing tier",
name: "tier",
options: e.tiers,
defaultValue: i.tier
})), React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Size",
name: "size",
options: o,
defaultValue: i.size
})), displayIf(i.size === "medium", React.createElement("p", null, "No charge for the first 10 TB of data processed for a Medium instance.")), displayIf(i.size === "large", React.createElement("p", null, "No charge for the first 40 TB of data processed for a Large instance."))), React.createElement("div", {
className: "cost"
}, React.createElement("h3", null, "Gateway hours"), React.createElement(TextNumber, {
label: "Instances",
name: "instances",
min: "0",
max: "9999",
defaultValue: i.instances,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(FactoredInput, {
key: "factor-hours-" + i.hoursFactor + i.tier,
name: "hours",
defaultValue: i.hours,
factorsName: "hoursFactor",
factorsDefault: i.hoursFactor || "1",
factorUnit: "hours",
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: r(i),
decimals: "2",
format: "currency"
}))), displayIf(i.displaySku && i.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, i.sku && i.sku.gateway))))), React.createElement("div", {
className: "cost"
}, React.createElement("h3", null, "Data processed"), React.createElement(FactoredInput, {
key: "factor-processed" + i.processedUnits,
name: "dataUnits",
defaultValue: i.dataUnits,
factorsName: "processedUnits",
factorsDefault: i.processedUnits || "1",
factorUnit: "gbs",
min: "0",
max: i.processedUnits === "1" ? 101376 : 99,
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u(i),
decimals: "2",
format: "currency"
}))), displayIf(i.displaySku && i.sku && i.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, i.sku && i.sku.dataProcessing))))), React.createElement("div", {
className: "cost"
}, React.createElement("h3", null, s(i)), React.createElement(FactoredInput, {
key: "factor-units-" + i.storageUnits,
defaultValue: i.units,
name: "units",
factorsName: "storageUnits",
factorsDefault: i.storageUnits,
factorUnit: "gbs",
min: "0",
max: i.storageUnits === "1" ? 9999 : 500,
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: f(i),
decimals: "2",
format: "currency"
}))), displayIf(i.displaySku && i.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, i.sku && i.sku.dataTransfer))))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("span", {
className: "sub-total"
}, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: i.price,
decimals: "2",
format: "currency"
}))))))
}
});
n = Acom.Calculator.createModule({
slug: "application-gateway",
displayName: t,
description: "Build scalable and highly-available web front ends in Azure",
pricingApi: "/api/v1/pricing/application-gateway/calculator/",
secondaryPricingApi: "/api/v1/pricing/data-transfers/calculator/",
component: i,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="application-gateway" viewBox="0 0 50 50"> <path fill="#0072c6" d="M48.6,21.7L28.3,1.4C27.4,0.5,26.2,0,25,0c-1.2,0-2.4,0.5-3.3,1.4L1.4,21.7C0.5,22.6,0,23.8,0,25 c0,1.2,0.5,2.4,1.4,3.3l20.4,20.4c0.9,0.9,2,1.4,3.3,1.4c1.2,0,2.4-0.5,3.3-1.4l20.4-20.4c0.9-0.9,1.4-2,1.4-3.3 C50,23.8,49.5,22.6,48.6,21.7z M25,4.8l6.6,6.6H27V21h-3.9v-9.6h-4.7L25,4.8z M6.4,27.4v-3.9h9v-4.7l6.6,6.6L15.4,32v-4.6H6.4z M25,46l-6.6-6.6H23V30h3.9v9.4h4.7L25,46z M43.6,27.4h-8.9v4.7l-6.6-6.6l6.6-6.6v4.6h8.9V27.4z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#application-gateway"><\/use><\/svg>'
},
initialSettings: {
region: "us-east",
size: "small",
tier: "basic",
instances: 0,
hours: 744,
hoursFactor: "1",
dataUnits: 0,
processedUnits: "1",
units: o() ? 5 : 1,
storageUnits: "1",
zone: "zone1"
},
getInitialState: function () {
return this.initialSettings
},
getPrice: function (t) {
var i = n.getPricingApiStore().data;
return i ? r(t) + u(t) + f(t) : 0
},
getDisplayName: function (n) {
return n.name || t
},
willUpdate: function (t, i) {
var u = n.getPricingApiStore().data,
r = n.getSecondaryPricingApiStore().data;
return t.processedUnits !== i.processedUnits && (i.dataUnits = factorInput(t.processedUnits, i.processedUnits, t.dataUnits)), t.storageUnits !== i.storageUnits && (i.units = this.initialSettings.units), t.hoursFactor !== i.hoursFactor && (i.hours = factorInput(t.hoursFactor, i.hoursFactor, t.hours)), t.tier !== i.tier && i.tier === "waf" && (i.size = "medium"), i.zone = e(t, r), i
},
getDescription: function (n) {
var t = {
1: "GB",
1024: "TB"
};
return Core.Util.FormatString("{0} instance(s) x {1} {2}, {3} {4} data processed, outbound transfers:: {5} {6}", n.instances, n.hours, factorLabel(n.hoursFactor), n.dataUnits, t[n.processedUnits], n.units, t[n.storageUnits])
},
getSku: function (t) {
var r = n.getPricingApiStore().data,
u = n.getSecondaryPricingApiStore().data,
i = {};
return !r || !u ? undefined : (i.gateway = r.offers[t.tier + "-" + t.size].skus[t.region], i.dataProcessing = r.graduatedOffers["data-processing-" + t.size][t.region].sku, i.dataTransfer = u.offers[t.region].sku, i)
},
isValidOffer: function (t) {
var i = n.getPricingApiStore().data;
return i ? i.offers[t.tier + "-" + t.size].prices[t.region] >= 0 : !1
}
});
Acom.Calculator.Actions.modules.register(n)
}();
! function () {
"use strict";
function u(t) {
var i = n.getPricingApiStore().data;
return i ? {
price: i.offers["additional-data"].prices[t.region],
cost: i.offers["additional-data"].prices[t.region] * (t.basicGbs - i.offers.basic.includedData)
} : 0
}
function t(t) {
var i = n.getPricingApiStore().data;
return i ? {
nodesPrice: i.offers.enterprise.prices[t.region],
nodesCost: i.offers.enterprise.prices[t.region] * t.enterpriseNodes,
gbsPrice: i.offers["additional-data"].prices[t.region],
gbsCost: i.offers["additional-data"].prices[t.region] * t.enterpriseGbs
} : 0
}
function i(t) {
var r = n.getPricingApiStore().data,
i;
return r ? (i = r.offers["web-test"].prices, {
price: i[t.region],
cost: i[t.region] * t.webTests
}) : 0
}
var r = "Application Insights",
f, n;
f = React.createClass({
displayName: "ApplicationInsights",
onChange: Acom.Calculator.onChange,
render: function () {
var n = this.props,
f = n.dataStore.pricingData;
return React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: n.dataStore.module.icon
}), " ", React.createElement("input", {
className: "text-input",
name: "name",
placeholder: r,
defaultValue: n.name
})), React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Region",
name: "region",
options: f.regions,
defaultValue: n.region,
onChange: this.onChange
}), React.createElement(CalculatorDropdown, {
label: "Pricing tier",
name: "tier",
options: f.tiers,
defaultValue: n.tier,
onChange: this.onChange
}))), displayIf(n.tier === "basic", React.createElement("div", {
className: "cost no-divider"
}, React.createElement("p", null, formatString("Includes {0} GB(s) per month for free.", f.offers.basic.includedData)), React.createElement(TextNumber, {
label: "GB",
name: "basicGbs",
min: "1",
max: "9999",
defaultValue: n.basicGbs,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(StaticNumber, {
label: "Per GB",
value: React.createElement(Acom.Atoms.Number, {
value: u(n).price,
decimals: "2",
format: "currency"
})
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u(n).cost,
decimals: "2",
format: "currency"
}))), displayIf(n.displaySku && n.sku.basicGbs, React.createElement("div", {
className: "sku-under-total center"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, n.sku.basicGbs)))))), displayIf(n.tier === "enterprise", React.createElement("div", null, React.createElement("div", {
className: "cost no-divider"
}, React.createElement("p", null, formatString("Includes {0} MB per node per day", f.offers.enterprise.dataPerNode)), React.createElement(TextNumber, {
label: "Nodes",
name: "enterpriseNodes",
min: "0",
max: "9999",
defaultValue: n.enterpriseNodes,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(StaticNumber, {
label: "Per node",
value: React.createElement(Acom.Atoms.Number, {
value: t(n).nodesPrice,
decimals: "2",
format: "currency"
})
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: t(n).nodesCost,
decimals: "2",
format: "currency"
}))), displayIf(n.displaySku && n.sku.enterpriseNodes, React.createElement("div", {
className: "sku-under-total center"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, n.sku.enterpriseNodes))))), React.createElement("div", {
className: "cost no-divider"
}, React.createElement("p", null, formatString("Additional data (when exceeding the {0} MB per node per day allowance)", f.offers.enterprise.dataPerNode)), React.createElement(TextNumber, {
label: "GB",
name: "enterpriseGbs",
min: "0",
max: "9999",
defaultValue: n.enterpriseGbs,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(StaticNumber, {
label: "Per GB",
value: React.createElement(Acom.Atoms.Number, {
value: t(n).gbsPrice,
decimals: "2",
format: "currency"
})
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: t(n).gbsCost,
decimals: "2",
format: "currency"
}))), displayIf(n.displaySku && n.sku.enterpriseGbs, React.createElement("div", {
className: "sku-under-total center"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, n.sku.enterpriseGbs))))))), React.createElement("div", {
className: "cost"
}, React.createElement("h3", null, "Multi-step Web Test"), React.createElement(TextNumber, {
label: "Tests",
name: "webTests",
min: "0",
max: "9999",
defaultValue: n.webTests,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(StaticNumber, {
label: "Per test",
value: React.createElement(Acom.Atoms.Number, {
value: i(n).price,
decimals: "2",
format: "currency"
})
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: i(n).cost,
decimals: "2",
format: "currency"
}))), displayIf(n.displaySku && n.sku.webTest, React.createElement("div", {
className: "sku-under-total center"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, n.sku.webTest))))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("span", {
className: "sub-total"
}, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n.price,
decimals: "2",
format: "currency"
}))))))
}
});
n = Acom.Calculator.createModule({
slug: "application-insights",
displayName: r,
description: "Detect, triage, and diagnose issues in your web apps and services",
pricingApi: "/api/v1/pricing/application-insights/calculator/",
component: f,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="application-insights" viewBox="0 0 50 50"> <path fill="#68217A" d="M41.4,14.7L41.4,14.7v-0.3c0-7.7-6.6-14.1-14.7-14.2c-0.2-0.3-4.8,0.1-4.8,0.1l0,0c-7.3,0.9-13,7-13,14.1 c0,0.2-0.8,5.8,4.9,10.5c2.6,2.3,5.3,8.5,5.7,10.3l0.3,0.6h10.6l0.3-0.6c0.4-1.8,3.2-8,5.7-10.2C42.1,20.2,41.4,14.9,41.4,14.7z"/> <rect x="20" y="39.4" fill="#7A7A7A" width="10.6" height="3.4"/> <polygon fill="#7A7A7A" points="23.3,50 27.2,50 30.5,46.5 20,46.5 "/> <g opacity="0.65"> <path fill="#FFFFFF" d="M27.9,35.3h-2V22.6l-1.7,0v12.6h-2V22.6l-1.7,0c-2,0-3.7-1.7-3.7-3.7s1.6-3.7,3.7-3.7s3.7,1.7,3.7,3.7v1.7 l1.7,0v-1.7c0-2,1.7-3.7,3.7-3.7s3.7,1.7,3.7,3.7c0,2-1.7,3.7-3.7,3.7l-1.7,0V35.3z M20.5,17.2c-0.9,0-1.7,0.7-1.7,1.7 c0,0.9,0.8,1.7,1.7,1.7l1.7,0v-1.7C22.1,18,21.4,17.2,20.5,17.2z M29.6,17.2c-0.9,0-1.7,0.8-1.7,1.7v1.7l1.7,0 c0.9,0,1.7-0.8,1.7-1.7C31.3,18,30.6,17.2,29.6,17.2z"/> <\/g> <g opacity="0.15"> <path fill="#FFFFFF" d="M26.7,0.2c-0.2-0.3-4.8,0.1-4.8,0.1c-7.3,0.9-13,7-13,14.1c0,0.2-0.7,5.1,3.9,9.6L34.4,2.4 C32.1,1,29.5,0.2,26.7,0.2z"/> <\/g> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#application-insights"><\/use><\/svg>'
},
getInitialState: function () {
return {
region: "us-east",
tier: "basic",
basicGbs: 1,
enterpriseNodes: 0,
enterpriseGbs: 0,
webTests: 0
}
},
getPrice: function (r) {
return n.getPricingApiStore().data ? r.tier === "basic" ? u(r).cost + i(r).cost : r.tier === "enterprise" ? t(r).nodesCost + t(r).gbsCost + i(r).cost : void 0 : 0
},
getDisplayName: function (n) {
return n.name || r
},
getDescription: function (n) {
return n.tier === "basic" ? formatString("{0} tier in {1} region with {2} GBs and {3} multi-step web test(s).", n.tier, n.region, n.basicGbs, n.webTests) : n.tier === "enterprise" ? formatString("{0} tier in {1} region with {2} nodes and {3} GB of additional data with {4} multi-step web test(s).", n.tier, n.region, n.enterpriseNodes, n.enterpriseGbs, n.webTests) : void 0
},
getSku: function (t) {
var i = n.getPricingApiStore().data;
return i ? {
basicGbs: i.offers["additional-data"].skus[t.region],
enterpriseNodes: i.offers.enterprise.skus[t.region],
enterpriseGbs: i.offers["additional-data"].skus[t.region],
webTest: i.offers["web-test"].skus[t.region]
} : undefined
},
isValidOffer: function (t) {
var i = n.getPricingApiStore().data;
return i ? i.offers["web-test"].prices[t.region] : !1
}
});
Acom.Calculator.Actions.modules.register(n)
}();
! function () {
"use strict";
function t(t, i, r) {
var f = n.getPricingApiStore().data,
u;
return f ? (u = f.offers[i + "-" + r], u && typeof u.prices[t] != "undefined" && u) : undefined
}
function o(n, i, r) {
var u = t(n, i, r);
return u && u.prices[n]
}
function u(t) {
var i = n.getPricingApiStore().data;
return i ? o(t.region, t.tier, t.size) * t.instances * t.hours * (t.hoursFactor || "1") : undefined
}
function f(t) {
var f = n.getPricingApiStore().data,
i, r, u;
return f ? t.tier === "free" || t.tier === "shared" ? 0 : (i = f.graduatedOffers, r = i["sni-" + t.tier][t.region], u = i["ip-" + t.tier][t.region], {
sni: r ? getGraduatedPrice(r.prices, t.sniConnections) : 0,
ip: u ? getGraduatedPrice(u.prices, t.ipConnections) : 0,
customDomains: getGraduatedPrice(i["custom-domain"][t.region].prices, 1)
}) : undefined
}
function i(n, i, r) {
return !!t(n, i, r)
}
function s(n) {
return n !== "free" && n !== "shared"
}
var r = "App Service",
e, n;
e = React.createClass({
displayName: "AppService",
onChange: Acom.Calculator.onChange,
render: function () {
var n = this.props,
e = n.dataStore.pricingData,
s = e.sizes.filter(function (t) {
return i(n.region, n.tier, t.slug)
}).map(function (i) {
var r = t(n.region, n.tier, i.slug),
u = o(n.region, n.tier, i.slug);
return {
slug: i.slug,
values: {
displayStrings: [i.displayName, formatString("{0} cores", r.cores || "Shared"), formatString("{0} GB RAM", r.ram), formatString("{0} GB Storage", r.diskSpace)],
number: {
value: u,
decimals: 3,
format: "currency",
rate: "{0}/hr"
}
}
}
});
return React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: n.dataStore.module.icon
}), " ", React.createElement("input", {
className: "text-input",
name: "name",
placeholder: r,
defaultValue: n.name
})), React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Region",
name: "region",
options: e.regions,
defaultValue: n.region
}), React.createElement(CalculatorDropdown, {
label: "Tier",
name: "tier",
options: e.tiers,
defaultValue: n.tier
}, React.createElement(Tooltip, null, formatReact("<h4>Free<\/h4><p>Use the Free plan to quickly evaluate App Service and convert the app at any time to one of the paid plans without delays or downtime.<\/p><h4>\tShared<\/h4><p>Develop and test in an environment with features such as SSL, domain names, and more before production and is suitable for low traffic sites.<\/p><h4>Basic<\/h4><p>Designed for apps that have lower traffic requirements and do not need more advanced autoscale and traffic management features.<\/p><h4>Standard<\/h4><p>Designed for production API, Mobile, and Web apps. There are no limits on the number of apps/domains you can host.<\/p><h4>\tPremium<\/h4><p>Designed for production apps. Supports larger numbers of scale instances, additional connectors, and BizTalk capabilities, while including all the advanced capabilities found in the Standard plan.<\/p>")))), React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(DetailedDropdown, {
key: "size-" + n.region + n.tier,
label: "Instance Size",
name: "size",
options: s,
delimiters: ["colon", "comma"],
defaultValue: n.size,
onChange: this.onChange
}))), React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
label: "Instances",
name: "instances",
min: "1",
max: "999",
defaultValue: n.instances,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(FactoredInput, {
key: "factor-" + n.hoursFactor,
name: "hours",
defaultValue: n.hours,
factorsName: "hoursFactor",
factorsDefault: n.hoursFactor || "1",
factorUnit: "hours",
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u(n),
decimals: "2",
format: "currency"
}))), displayIf(n.displaySku && n.sku.appservice, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, n.sku.appservice))))), displayIf(n.tier !== "free" && n.tier !== "shared", React.createElement("div", null, React.createElement("div", {
className: "service-properties collapsible"
}, React.createElement("div", {
className: "cost"
}, React.createElement("h3", null, "SSL Connections"), React.createElement("h4", null, "SNI SSL"), React.createElement(TextNumber, {
label: "Connections",
name: "sniConnections",
min: "0",
max: "999",
defaultValue: n.sniConnections,
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: f(n).sni,
decimals: "2",
format: "currency"
}))), displayIf(n.displaySku && n.sku.sslConnectionsSni, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, n.sku.sslConnectionsSni))))), React.createElement("div", {
className: "cost sub-module"
}, React.createElement("h4", null, "IP SSL"), React.createElement(TextNumber, {
label: "Connections",
name: "ipConnections",
min: "0",
max: "999",
defaultValue: n.ipConnections,
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: f(n).ip,
decimals: "2",
format: "currency"
}))), displayIf(n.displaySku && n.sku.sslConnectionsIp, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, n.sku.sslConnectionsIp)))))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("span", {
className: "sub-total"
}, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n.price,
decimals: "2",
format: "currency"
}))))))))
}
});
n = Acom.Calculator.createModule({
slug: "app-service",
displayName: r,
description: "Create web and mobile apps for any platform and any device",
pricingApi: "/api/v1/pricing/app-service/calculator/",
component: e,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="app-service" viewBox="0 0 50 50"> <path fill="#A0A1A2" d="M20.1,46.5H3.5V30h3.4c-0.4-1-0.6-2.1-0.6-3.3c0,0,0-0.1,0-0.2H0V50h23.6V36h-3.5V46.5z"/> <path fill="#A0A1A2" d="M43.5,30h3v16.6H29.9V36.1h-3.5V50H50V26.5h-7.4c0.5,1,0.9,2,0.9,3.3C43.5,29.8,43.5,29.9,43.5,30z"/> <path fill="#A0A1A2" d="M3.5,20V3.5h16.6v9.6c1-0.8,2.3-1.3,3.5-1.6V0H0v23.5h6.8C7.3,22.3,8,21,9,20.1L3.5,20L3.5,20z"/> <path fill="#A0A1A2" d="M29.9,11.1V3.5h16.6v16.6h-7.3c0.3,1,0.5,2.2,0.5,3.4c0,0,0,0.1,0,0.1H50V0H26.4v10.9c0.3,0,0.5-0.1,0.8-0.1 C28.1,10.9,29,10.9,29.9,11.1z"/> <path fill="#59B4D9" d="M40.8,29.7c0-2.1-1.7-3.7-3.7-3.7c-0.2,0-0.3,0-0.5,0c0.2-0.8,0.4-1.7,0.4-2.6c0-5.5-4.4-9.9-9.9-9.9 c-4.3,0-8,2.8-9.3,6.8c-0.7-0.2-1.4-0.4-2.2-0.4c-3.7,0-6.7,3-6.7,6.8c0,3.8,3,6.8,6.7,6.8c0,0,0,0,0,0v0h21.8l0,0 C39.3,33.3,40.8,31.7,40.8,29.7"/> <path opacity="0.2" fill="#FFFFFF" d="M19.2,33.5c-0.9-0.9-1.5-2-1.8-3.3c-0.8-3.7,1.4-7.3,5.1-8.1c0.8-0.2,1.5-0.2,2.2-0.1 c0.3-3.4,2.4-6.5,5.5-8c-0.9-0.3-1.9-0.5-3-0.5c-4.3,0-8,2.8-9.3,6.8c-0.7-0.2-1.4-0.4-2.2-0.4c-3.7,0-6.7,3-6.7,6.8 c0,3.8,3,6.8,6.7,6.8c0,0,0,0,0,0v0H19.2z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#app-service"><\/use><\/svg>'
},
getInitialState: function () {
return {
region: "us-west",
tier: "basic",
size: "b1",
instances: 1,
hours: 744,
hoursFactor: "1",
sniConnections: 0,
ipConnections: 0
}
},
getPrice: function (t) {
var i;
return n.getPricingApiStore().data ? s(t.tier) ? (i = f(t), u(t) + i.sni + i.ip) : u(t) : 0
},
getDisplayName: function (n) {
return n.name || r
},
willUpdate: function (t, r) {
var e = n.getPricingApiStore().data,
u, f;
if (!i(r.region, r.tier, r.size))
for (f = 0; u = e.sizes[f]; f++)
if (i(r.region, r.tier, u.slug)) {
r.size = u.slug;
break
}
return t.hoursFactor !== r.hoursFactor && (r.hours = factorInput(t.hoursFactor, r.hoursFactor, r.hours)), r
},
getSku: function (i) {
var e = n.getPricingApiStore().data,
u, r, f;
return e ? (u = t(i.region, i.tier, i.size), r = {}, u && u.skus[i.region] && (r.appservice = u.skus[i.region]), s(i.tier) && (f = e.graduatedOffers, r.sslConnectionsSni = f["sni-" + i.tier][i.region].sku, r.sslConnectionsIp = f["ip-" + i.tier][i.region].sku), r) : ""
},
getDescription: function (n) {
return n.tier != "free" && n.tier != "shared" ? Core.Util.FormatString("{0} instance(s), {1} {2}, size: {3}, {4} tier, {5} SNI connection(s), {6} IP connection(s)", n.instances, n.hours, factorLabel(n.hoursFactor), n.size, n.tier, n.sniConnections, n.ipConnections) : Core.Util.FormatString("{0} instance(s), {1} {2}, size: {3}, {4} tier", n.instances, n.hours, factorLabel(n.hoursFactor), n.size, n.tier)
},
isValidOffer: function (n) {
return i(n.region, n.tier, n.size)
}
});
Acom.Calculator.Actions.modules.register(n)
}();
! function () {
"use strict";
function r(t) {
var i = n.getPricingApiStore().data;
return i ? i.offers[t.capability + "-" + t.tier].prices[t.region] : undefined
}
function u(t) {
var i = n.getPricingApiStore().data;
return i ? i.offers[t.capability + "-" + t.tier].prices[t.region] : undefined
}
var t = "Automation",
i, n;
i = React.createClass({
displayName: "Automation",
onChange: Acom.Calculator.onChange,
render: function () {
var n = this.props,
i = n.dataStore.pricingData;
return React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: n.dataStore.module.icon
}), " ", React.createElement("input", {
className: "text-input",
name: "name",
placeholder: t,
defaultValue: n.name
})), React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Region",
name: "region",
options: i.regions,
defaultValue: n.region
}), React.createElement(CalculatorDropdown, {
label: "Tier",
name: "tier",
options: i.tiers,
defaultValue: n.tier
})), React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Capability",
name: "capability",
options: i.capabilities,
defaultValue: n.capability
}))), displayIf(n.capability === "process", React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
key: n.tier + "1",
label: "Minutes",
name: "minutes",
min: "1",
max: n.tier === "free" ? 500 : 999999999,
defaultValue: n.minutes,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: r(n),
decimals: "3",
format: "currency"
})), React.createElement("label", {
className: "label"
}, "Per minute")), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n.price,
decimals: "2",
format: "currency"
}))), displayIf(n.displaySku && n.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, n.sku))))), React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
key: n.tier + "2",
label: "Nodes",
name: "nodes",
min: "1",
max: n.tier === "free" ? 5 : 99999,
defaultValue: n.nodes,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u(n),
decimals: "2",
format: "currency"
})), React.createElement("label", {
className: "label"
}, "Node/mo")), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n.price,
decimals: "2",
format: "currency"
}))), displayIf(n.displaySku && n.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, n.sku)))))))
}
});
n = Acom.Calculator.createModule({
slug: "automation",
displayName: t,
description: "Simplify cloud management with process automation",
pricingApi: "/api/v1/pricing/automation/calculator/",
component: i,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="automation" viewBox="0 0 50 50"> <path fill="#A0A1A2" d="M46.281,23.344c0-0.375-0.031-0.734-0.063-1.109L50,20.141c-0.203-1.25-0.531-2.469-0.969-3.625 l-4.313,0.078c-0.328-0.672-0.688-1.328-1.094-1.938l2.219-3.703c-0.797-0.969-1.688-1.859-2.641-2.641l-2.188,1.297l-0.922,1.375 l-1.984,2.922c2.813,2.188,4.625,5.594,4.625,9.438c0,6.594-5.328,11.938-11.922,11.938c-6.578,0-11.922-5.344-11.922-11.938 c0-5.906,4.281-10.781,9.906-11.75l0.906-3.672l-2.094-3.781C26.359,4.344,25.156,4.672,24,5.109l0.063,4.328 c-0.656,0.313-1.313,0.672-1.922,1.094l-3.703-2.219c-0.969,0.781-1.844,1.672-2.641,2.641l2.219,3.703 c-0.422,0.609-0.766,1.266-1.094,1.938l-4.328-0.078c-0.422,1.156-0.75,2.375-0.953,3.625l3.766,2.094 c-0.031,0.375-0.047,0.734-0.047,1.109s0.016,0.734,0.047,1.109l-3.766,2.094c0.203,1.25,0.531,2.469,0.969,3.625l4.313-0.078 c0.328,0.672,0.672,1.328,1.094,1.938l-2.219,3.703c0.797,0.969,1.672,1.859,2.641,2.656l3.703-2.234 c0.609,0.422,1.266,0.781,1.922,1.109L24,41.578c1.156,0.438,2.359,0.766,3.609,0.969l2.109-3.781 c0.359,0.031,0.719,0.063,1.094,0.063s0.75-0.031,1.109-0.063l2.094,3.781c1.25-0.203,2.469-0.531,3.625-0.969l-0.078-4.313 c0.672-0.328,1.313-0.688,1.938-1.109l3.703,2.234c0.953-0.797,1.844-1.688,2.641-2.656l-2.219-3.703 c0.406-0.609,0.766-1.266,1.094-1.938l4.313,0.078c0.438-1.156,0.766-2.375,0.969-3.625l-3.781-2.094 C46.25,24.078,46.281,23.719,46.281,23.344z"/> <path fill="#7A7A7A" d="M16,39.719v-1.859l-0.102-0.094l-1.902-0.641l-0.49-1.281l0.942-1.953l0.104-0.219l-0.589-0.594 l-0.716-0.719l-0.249,0.125l-1.859,0.953l-1.281-0.359L9.047,31H7.203l-0.094,0.094l-0.641,1.898L5.172,33.48l-2.156-1.037 l-1.313,1.302l0.125,0.245l0.953,1.857l-0.531,1.28L0,37.938v1.859l0.266,0.078l1.984,0.656l0.531,1.281l-1.016,2.156l1.313,1.328 l0.25-0.125l1.859-0.953l1.281,0.531L7.281,47h1.859l0.078-0.266l0.656-1.984l1.266-0.531l2.172,1.016l1.313-1.313l-0.125-0.25 l-0.953-1.859l0.367-1.297L16,39.719z M8.172,41.438c-1.438,0-2.609-1.172-2.609-2.609s1.172-2.609,2.609-2.609 s2.594,1.172,2.594,2.609S9.609,41.438,8.172,41.438z"/> <path fill="#FCD116" d="M33.297,1.688l-0.719,2.266l-1.234,3.938L30.75,9.781l-0.516,1.656l-3.594,11.422 c-0.078,0.219,0.031,0.391,0.281,0.391h3.313c0.109,0,0.188,0.031,0.234,0.094c0.078,0.078,0.094,0.188,0.047,0.313l-3.422,8.297 c-0.094,0.219-0.031,0.266,0.125,0.078L38.047,19.75c0.156-0.188,0.094-0.328-0.141-0.328l-3.547,0.016l-0.656,0.016 c-0.234,0-0.344-0.172-0.219-0.375l3.375-6.016l0.797-1.438l0.922-1.656l1.969-3.484l1.125-2.031 C39.156,3,36.328,2.031,33.297,1.688z"/> <path opacity="0.3" fill="#FF8C00" d="M39.505,3.367l-7.844,16.07h1.953c-0.174-0.037-0.249-0.183-0.14-0.359l3.375-6.016 l0.797-1.438l0.922-1.656l1.969-3.484l1.125-2.031C40.966,4.052,40.245,3.692,39.505,3.367z"/> <path opacity="0.3" fill="#FF8C00" d="M37.92,19.422l-2.189,0.01l-8.093,12.14L38.061,19.75 C38.217,19.563,38.155,19.422,37.92,19.422z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#automation"><\/use><\/svg>'
},
getInitialState: function () {
return {
region: "us-east-2",
tier: "free",
capability: "process",
minutes: 500,
nodes: 5
}
},
getPrice: function (t) {
return n.getPricingApiStore().data ? t.capability === "process" ? t.minutes * r(t) : t.nodes * u(t) : 0
},
getDisplayName: function (n) {
return n.name || t
},
willUpdate: function (n, t) {
return (n.tier !== t.tier || n.capability !== t.capability) && (t.minutes = 500, t.nodes = 5), t
},
getDescription: function (n) {
var t = Core.Util.FormatString("{0} tier, {1} capability", n.tier, n.capability);
return n.capability === "process" ? t += Core.Util.FormatString(", {0} minutes(s)", n.minutes) : n.capability === "dsc" && (t += Core.Util.FormatString(", {0} node(s)", n.nodes)), t
},
getSku: function (t) {
var i = n.getPricingApiStore().data;
return i ? t.capability === "process" ? i.offers[t.capability + "-" + t.tier].skus[t.region] : i.offers[t.capability + "-" + t.tier].skus[t.region] : undefined
},
isValidOffer: function (t) {
var i = n.getPricingApiStore().data;
return i ? i.offers[t.capability + "-" + t.tier].prices[t.region] >= 0 : !1
}
});
Acom.Calculator.Actions.modules.register(n)
}();
! function () {
"use strict";
var t = "Azure Search",
i, n;
i = React.createClass({
displayName: "AzureSearch",
checkTier: function (n) {
var t = this.props;
return n === "free" ? React.createElement("div", {
className: "cost"
}, React.createElement("p", {
style: {
float: "left"
}
}, React.createElement("strong", null, "NOTE:"), React.createElement("br", null), "Includes 50MB storage, 10,000 documents hosted, 3 index limit"), React.createElement("div", {
className: "total"
}, formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: t.price,
decimals: "2",
format: "currency"
}))))) : React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
label: "Units",
name: "units",
min: "1",
max: "999",
defaultValue: t.units,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(FactoredInput, {
key: "factor-hours-" + t.hoursFactor,
name: "hours",
defaultValue: t.hours,
factorsName: "hoursFactor",
factorsDefault: t.hoursFactor || "1",
factorUnit: "hours",
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: t.price,
decimals: "2",
format: "currency"
}))), displayIf(t.displaySku && t.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, t.sku)))))
},
onChange: Acom.Calculator.onChange,
render: function () {
var n = this.props,
i = n.dataStore.pricingData;
return React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: n.dataStore.module.icon
}), " ", React.createElement("input", {
className: "text-input",
name: "name",
placeholder: t,
defaultValue: n.name
})), React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Region",
name: "region",
options: i.regions,
defaultValue: n.region
}), React.createElement(CalculatorDropdown, {
label: "Tiers",
name: "tier",
options: i.tiers,
defaultValue: n.tier
}))), this.checkTier(n.tier))
}
});
n = Acom.Calculator.createModule({
slug: "search",
displayName: t,
description: "Fully-managed search-as-a-service",
pricingApi: "/api/v1/pricing/search/calculator/",
component: i,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="search" viewBox="0 0 50 50"> <path fill="#59B4D9" d="M44,14.2c0-0.4,0.1-0.9,0.1-1.3c0-7.1-5.8-12.8-13-12.8C26.9,0,23,2,20.6,5.3c-1.5-1-3.3-1.5-5.2-1.5 c-5.4,0-9.8,4.4-9.8,9.7l0,0.8C2,16.2,0,19.3,0,23.1c0,6,4.9,10.7,11.2,10.7h27.6c6.3,0,11.2-4.7,11.2-10.7 C50,19.1,47.8,15.9,44,14.2z"/> <path opacity="0.2" fill="#FFFFFF" d="M7,28c0-4.1,2.1-7.3,6-9.3l0-0.8c0-5.7,4.7-10.3,10.4-10.3c2,0,3.9,0.5,5.5,1.5 c2.5-3.5,6.7-5.7,11.2-5.7c0,0,0,0,0,0C37.7,1.3,34.6,0,31.1,0C26.9,0,23,2,20.6,5.3c-1.5-1-3.3-1.5-5.2-1.5c-5.4,0-9.8,4.4-9.8,9.7 l0,0.8C2,16.2,0,19.3,0,23.1c0,5.1,3.5,9.3,8.4,10.4C7.5,31.9,7,30,7,28z"/> <path fill="#FFFFFF" d="M34.3,31c-1,3.9-4.4,6.6-8.4,6.6c-0.7,0-1.4-0.1-2.1-0.3c-1-0.3-2-0.7-2.8-1.3c-0.9-0.6-1.6-1.4-2.2-2.2 c-1.3-2-1.9-4.4-1.3-6.9c1-3.9,4.4-6.6,8.4-6.6c0.7,0,1.4,0.1,2.1,0.3c2.2,0.6,4.1,1.9,5.3,3.9C34.5,26.4,34.9,28.8,34.3,31"/> <path opacity="0.1" fill="#59B4D9" d="M34.3,31c-1,3.9-4.4,6.6-8.4,6.6c-0.7,0-1.4-0.1-2.1-0.3c-1-0.3-2-0.7-2.8-1.3 c-0.9-0.6-1.6-1.4-2.2-2.2c-1.3-2-1.9-4.4-1.3-6.9c1-3.9,4.4-6.6,8.4-6.6c0.7,0,1.4,0.1,2.1,0.3c2.2,0.6,4.1,1.9,5.3,3.9 C34.5,26.4,34.9,28.8,34.3,31"/> <path opacity="0.3" fill="#59B4D9" d="M30.6,21.7c-0.8-0.5-1.7-0.9-2.6-1.1c-0.7-0.2-1.4-0.3-2.1-0.3c-4,0-7.4,2.7-8.4,6.6 c-0.6,2.5-0.1,5,1.3,6.9c0.2,0.3,0.5,0.7,0.8,1C21.4,29.1,25.4,24.4,30.6,21.7"/> <path fill="#3E3E3E" d="M36.5,22.6c-1.7-2.8-4.4-4.8-7.6-5.6c-1-0.2-2-0.4-3-0.4c-5.7,0-10.6,3.9-12,9.4c-0.8,3.1-0.3,6.3,1.3,9.1 l-9.4,9.5c-1.2,1.2-1.2,3.3,0,4.5C6.5,49.7,7.3,50,8.1,50c0.8,0,1.6-0.3,2.3-0.9l9.4-9.5c1,0.6,2.1,1,3.2,1.3c1,0.2,2,0.4,3,0.4 c5.7,0,10.6-3.9,12-9.4C38.7,28.7,38.2,25.4,36.5,22.6z M34.3,31c-1,3.9-4.4,6.6-8.4,6.6c-0.7,0-1.4-0.1-2.1-0.3 c-1-0.3-2-0.7-2.8-1.3c-0.9-0.6-1.6-1.4-2.2-2.2c-1.3-2-1.9-4.4-1.3-6.9c1-3.9,4.4-6.6,8.4-6.6c0.7,0,1.4,0.1,2.1,0.3 c2.2,0.6,4.1,1.9,5.3,3.9C34.5,26.5,34.9,28.8,34.3,31z"/> <path opacity="0.5" fill="#1E1E1E" d="M18.9,39.1c-1.3-0.9-2.3-1.9-3.2-3.2c-0.2-0.3-0.3-0.5-0.5-0.8L14.4,36l-0.1,0.1 c0.1,0.2,0.2,0.4,0.4,0.6c1,1.4,2.1,2.6,3.5,3.6c0.1,0.1,0.4,0.2,0.7,0.3l0.9-0.9C19.4,39.4,19.2,39.3,18.9,39.1z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#search"><\/use><\/svg>'
},
getInitialState: function () {
return {
region: "us-east",
tier: "free",
units: 1,
hours: 1,
unitsFactor: "1"
}
},
getPrice: function (t) {
var i = n.getPricingApiStore().data;
if (i && i.offers[t.tier]) return i.offers[t.tier].prices[t.region] * t.hours * (t.hoursFactor || "1") * t.units
},
getDisplayName: function (n) {
return n.name || t
},
getSku: function (t) {
var i = n.getPricingApiStore().data;
return i && i.offers[t.tier] ? i.offers[t.tier].skus[t.region] : ""
},
getDescription: function (n) {
return n.tier === "free" ? "Free" : Core.Util.FormatString("{0} unit(s) x {1} {2}", n.units, n.hours, factorLabel(n.hoursFactor))
},
willUpdate: function (n, t) {
return n.hoursFactor !== t.hoursFactor && (t.hours = factorInput(n.hoursFactor, t.hoursFactor, n.hours)), t
},
isValidOffer: function (t) {
var i = n.getPricingApiStore().data;
return i ? i.offers[t.tier].prices[t.region] >= 0 : !1
}
});
Acom.Calculator.Actions.modules.register(n)
}();
! function () {
"use strict";
function r(t) {
var i = n.getPricingApiStore().data;
return i ? t.backupUnits === "1" ? t.backup > 0 && t.backup <= 50 ? i.offers["1gb"].prices[t.region] * t.instances : t.backup >= 51 && t.backup <= 500 ? i.offers["50gb"].prices[t.region] * t.instances : t.backup > 500 ? i.offers["500gb"].prices[t.region] * Math.ceil(t.backup / 500) * t.instances : 0 : i.offers["500gb"].prices[t.region] * Math.ceil(t.backup * t.backupUnits / 500) * t.instances : 0
}
function f(n) {
return n.backupUnits === "1" ? "GB" : n.backupUnits === "1024" ? "TB" : void 0
}
function u(t) {
var i = n.getPricingApiStore().data;
return i ? getGraduatedPrice(i.storageOffers["block-basic-" + t.redundancy + "-" + t.region].prices, t.backup * t.backupUnits) * t.instances : 0
}
function e(t) {
var i = n.getPricingApiStore().data,
r;
return i ? (r = i.offers["1gb"], t.backupUnits === "1" ? t.backup >= 51 && t.backup <= 500 ? r = i.offers["50gb"] : t.backup > 500 && (r = i.offers["500gb"]) : r = i.offers["500gb"], r) : 0
}
var t = "Backup",
i, n;
i = React.createClass({
displayName: "SiteRecovery",
onChange: Acom.Calculator.onChange,
render: function () {
var n = this.props,
i = n.dataStore.pricingData,
e = [{
slug: "1",
displayName: "GB"
}, {
slug: "1024",
displayName: "TB"
}].map(function (n) {
return {
slug: n.slug,
values: [n.displayName]
}
});
return React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: n.dataStore.module.icon
}), " ", React.createElement("input", {
className: "text-input",
name: "name",
placeholder: t,
defaultValue: n.name
})), React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Region",
name: "region",
options: i.regions,
defaultValue: n.region,
onChange: this.onChange
}))), React.createElement("div", {
className: "cost no-divider"
}, React.createElement(TextNumber, {
label: "Instances",
name: "instances",
min: "1",
max: "9999",
defaultValue: n.instances,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(FactoredInput, {
key: n.backupUnits + "size",
name: "backup",
defaultValue: n.backup,
factorsName: "backupUnits",
factorsDefault: n.backupUnits || "1",
factorUnit: "gbs",
min: "0",
max: "5000",
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: r(n),
decimals: "2",
format: "currency"
}))), displayIf(n.displaySku && n.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, n.sku && n.sku.backup))))), React.createElement("div", {
className: "cost detail sub-module"
}, React.createElement("h3", null, "Storage"), React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Capacity",
name: "redundancy",
options: i.redundancies,
defaultValue: n.redundancy,
onChange: this.onChange
}))), React.createElement("div", {
className: "cost no-divider"
}, React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "2px"
}
}, React.createElement("div", {
className: "numeric static"
}, n.backup * n.instances), React.createElement("label", {
className: "label"
}, f(n))), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u(n),
decimals: "2",
format: "currency"
}))), displayIf(n.displaySku && n.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, n.sku && n.sku.storage))))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n.price,
decimals: "2",
format: "currency"
}))))))
}
});
n = Acom.Calculator.createModule({
slug: "backup",
displayName: t,
description: "Simple and reliable server backup to the cloud",
pricingApi: "/api/v1/pricing/backup/calculator/",
component: i,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="backup" viewBox="0 0 50 50"> <path fill="#0072C6" d="M45.083,14.967c0.033-0.35,0.05-0.717,0.05-1.083c0-5.817-4.783-10.55-10.65-10.55 C31,3.333,27.8,5,25.833,7.733C24.567,6.95,23.1,6.517,21.567,6.517c-4.183,0-7.633,3.183-8.017,7.233 c0.65-0.083,1.3-0.15,1.967-0.15c3.083,0,6.05,1,8.467,2.767C25.8,12.183,30.417,9.5,35.533,9.35V5.767l6.25,5.35l-6.25,5.317v-3.5 C32.6,13.05,29.75,14.15,28.1,16.817l0.333-0.033c5.967,0,10.9,4.467,11.6,10.183c1.417,1.067,2.533,2.35,3.333,3.817 C47.233,29.75,50,26.417,50,22.333C50,19.05,48.233,16.433,45.083,14.967z"/> <path fill="#59B4D9" d="M4.917,28.833c-0.033-0.367-0.05-0.733-0.05-1.1c0-5.817,4.783-10.533,10.65-10.533 c3.483,0,6.683,1.667,8.65,4.383c1.267-0.783,2.733-1.2,4.267-1.2c4.433,0,8.05,3.583,8.05,7.983L36.467,29 c3,1.517,4.617,4.033,4.617,7.183c0,4.95-4.033,8.817-9.183,8.817H9.183C4.033,45,0,41.133,0,36.183 C0,32.917,1.767,30.3,4.917,28.833z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#backup"><\/use><\/svg>'
},
getInitialState: function () {
return {
region: "us-east",
instances: 1,
backup: 0,
backupUnits: "1",
redundancy: "lrs"
}
},
getPrice: function (t) {
var i = n.getPricingApiStore().data;
return i ? r(t) + u(t) : 0
},
getDisplayName: function (n) {
return n.name || t
},
getSku: function (t) {
var r = n.getPricingApiStore().data,
i = {},
u;
return r ? (u = e(t), i.backup = u.skus[t.region], i.storage = r.storageOffers["block-basic-" + t.redundancy + "-" + t.region].sku, i) : undefined
},
getDescription: function (n) {
return Core.Util.FormatString("{0} instance(s), {1} {2}, {3} {2} {4} of storage", n.instances, n.backup, {
1: "GB",
1024: "TB"
}[n.backupUnits], n.instances * n.backup, n.redundancy)
},
isValidOffer: function (t) {
var i = n.getPricingApiStore().data;
return i ? !!i.storageOffers["block-basic-" + t.redundancy + "-" + t.region] : !1
}
});
Acom.Calculator.Actions.modules.register(n)
}();
! function () {
"use strict";
function u() {
var n = Acom.Calculator.Stores.channelCalculator.currentDiscount(),
t = !0;
return ["ea"].forEach(function (i) {
n && n.indexOf(i) === 0 && (t = !1)
}), t
}
function f(i) {
var u = n.getPricingApiStore().data,
r;
if (["usgov-iowa", "usgov-virginia"].indexOf(i.region) >= 0) return "Government Zone";
r = t(i, u);
switch (r) {
case "zone1":
return Core.Util.FormatString("{0}: {1}, {2}", "Zone 1", "North America", "Europe");
case "zone2":
return Core.Util.FormatString("{0}: {1}, {2}, {3}", "Zone 2", "Asia Pacific", "Japan", "Australia");
case "zone3":
return Core.Util.FormatString("{0}: {1}", "Zone 3", "Brazil");
case "zone4":
return Core.Util.FormatString("{0}", "DE (trustee): Germany");
default:
return ""
}
return ""
}
function t(n, t) {
for (var i in t.availableRegionsPerZone)
if (t.availableRegionsPerZone[i].indexOf(n.region) >= 0) return i;
return ""
}
var i = "Bandwidth",
r, n;
r = React.createClass({
displayName: "Bandwidth",
onChange: Acom.Calculator.onChange,
render: function () {
var n = this.props,
i = n.dataStore.pricingData,
t;
return t = n.displaySku ? React.createElement(Tooltip, null, React.createElement("p", null, " Bandwidth refer to data moving in and out of Azure data centers other than those explicitly covered by the Content Delivery Network or ExpressRoute pricing. Data going into Azure data centers is free, you are charged for data going out of Azure data centers. The first 5GB/Month of Bandwidth is free."), React.createElement("ul", null, React.createElement("li", null, " Zone 1: US West, US East, US North Central, US South Central, US East 2, US Central, Europe West, Europe North, Canada East, Canada Central "), " ", React.createElement("li", null, " Zone 2: Asia Pacific East, Asia Pacific Southeast, Japan East, Japan West, Australia East, Australia Southeast "), " ", React.createElement("li", null, "Zone 3: Brazil South"), React.createElement("li", null, "Government Zone: US Gov Virginia, US Gov Iowa"))) : React.createElement(Tooltip, null, React.createElement("p", null, " Bandwidth refer to data moving in and out of Azure data centers other than those explicitly covered by the Content Delivery Network or ExpressRoute pricing. Data going into Azure data centers is free, you are charged for data going out of Azure data centers. The first 5GB/Month of Bandwidth is free."), React.createElement("ul", null, React.createElement("li", null, " Zone 1: US West, US East, US North Central, US South Central, US East 2, US Central, Europe West, Europe North, Canada East, Canada Central "), " ", React.createElement("li", null, " Zone 2: Asia Pacific East, Asia Pacific Southeast, Japan East, Japan West, Australia East, Australia Southeast "), " ", React.createElement("li", null, "Zone 3: Brazil South"))), React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: n.dataStore.module.icon
}), " ", React.createElement("span", {
className: "heading3"
}, "Bandwidth"), t), React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Region",
name: "region",
options: i.regions,
defaultValue: n.region
})), displayIf(u(), React.createElement("p", null, React.createElement("strong", null, "NOTE:"), React.createElement("br", null), "The first 5GB/Month of data transfer is free in each zone."))), React.createElement("div", {
className: "cost no-divider"
}, React.createElement("h3", null, f(n)), React.createElement(FactoredInput, {
key: "factor-storage-" + n.storageUnits,
name: "units",
defaultValue: n.units,
factorsName: "storageUnits",
factorsDefault: n.storageUnits,
factorUnit: "gbs",
min: "0",
max: n.storageUnits === "1" ? 9999 : 500,
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n.price,
decimals: "2",
format: "currency"
}))), displayIf(n.displaySku && n.sku, React.createElement("div", {
className: "sku-under-total center"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, n.sku))))))
}
});
n = Acom.Calculator.createModule({
slug: "data-transfers",
displayName: i,
description: "Data transferred out of Azure data centers",
pricingApi: "/api/v1/pricing/data-transfers/calculator/",
component: r,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="data-transfers" viewBox="0 0 50 50"> <path fill="#0072C6" d="M6.3,6.9v36.1c0,3.7,8.4,6.8,18.7,6.8V6.9H6.3z"><\/path> <path fill="#0072C6" d="M24.7,49.8H25c10.4,0,18.7-3,18.7-6.8V6.9h-19V49.8z"><\/path> <path opacity="0.15" fill="#FFFFFF" d="M24.7,49.8H25c10.4,0,18.7-3,18.7-6.8V6.9h-19V49.8z"><\/path> <path fill="#FFFFFF" d="M43.7,6.9c0,3.7-8.4,6.8-18.7,6.8s-18.7-3-18.7-6.8c0-3.7,8.4-6.8,18.7-6.8S43.7,3.2,43.7,6.9"><\/path> <path fill="#7FBA00" d="M39.9,6.6C39.9,9,33.2,11,25,11S10.1,9,10.1,6.6c0-2.5,6.7-4.5,14.9-4.5S39.9,4.1,39.9,6.6"><\/path> <path fill="#B8D432" d="M36.8,9.3c2-0.8,3.1-1.7,3.1-2.7c0-2.5-6.7-4.5-14.9-4.5c-8.2,0-14.9,2-14.9,4.5c0,1,1.2,2,3.1,2.7 c2.7-1.1,7-1.7,11.8-1.7C29.8,7.5,34.1,8.2,36.8,9.3"><\/path> <path fill="#FFFFFF" d="M23.7,20c0.8,0.8,1.4,1.6,1.7,2.5c0.3,0.6,0.7,2.1,1.4,4.5l2.1-3.1c0.6-0.8,1.2-1.5,2-2.2 c0.8-0.7,1.5-1.2,2.1-1.4c0.4-0.2,0.8-0.2,1.2-0.2c0.7,0,1.2,0.2,1.6,0.5c0.4,0.4,0.6,0.8,0.6,1.3c0,0.6-0.1,1-0.4,1.2 c-0.4,0.4-0.9,0.6-1.5,0.6c-0.3,0-0.7-0.1-1.1-0.2c-0.7-0.3-1.2-0.4-1.5-0.4c-0.4,0-0.8,0.2-1.3,0.7c-1,0.8-2.1,2.4-3.5,4.7l1.9,8.1 c0.3,1.2,0.6,2,0.8,2.2c0.2,0.2,0.4,0.4,0.6,0.4c0.3,0,0.7-0.2,1.2-0.5c0.9-0.7,1.6-1.7,2.2-2.8l0.8,0.4c-1,1.9-2.2,3.4-3.8,4.6 c-0.9,0.7-1.6,1-2.2,1c-0.9,0-1.6-0.5-2.1-1.5c-0.3-0.6-1-3.3-2.1-7.9c-2.5,4.3-4.4,7-5.9,8.2c-1,0.8-1.9,1.2-2.8,1.2 c-0.6,0-1.2-0.2-1.7-0.7c-0.4-0.3-0.6-0.8-0.6-1.4c0-0.5,0.2-1,0.5-1.3c0.3-0.3,0.8-0.5,1.3-0.5c0.5,0,1,0.3,1.6,0.8 c0.4,0.4,0.7,0.5,0.9,0.5c0.2,0,0.4-0.1,0.7-0.4c0.7-0.6,1.7-1.9,3-3.9s2.1-3.4,2.5-4.3c-1-3.8-1.5-5.8-1.6-6.1 c-0.4-1-0.8-1.7-1.4-2.2c-0.6-0.4-1.4-0.6-2.6-0.6c-0.4,0-0.8,0-1.2,0v-0.8L23.7,20z"><\/path> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#data-transfers"><\/use><\/svg>'
},
getInitialState: function () {
var n = u() ? 5 : 0;
return {
region: "us-west",
units: n,
storageUnits: "1",
zone: "zone1"
}
},
getPrice: function (t) {
var i = n.getPricingApiStore().data;
return i ? getGraduatedPrice(i.offers[t.region].prices, t.units * t.storageUnits) : 0
},
getDisplayName: function (n) {
return n.name || i
},
willUpdate: function (i, r) {
var u = n.getPricingApiStore().data;
return i.storageUnits !== r.storageUnits && (r.units = r.storageUnits === "1" ? 5 : 5), r.zone = t(i, u), r
},
getSku: function (t) {
var i = n.getPricingApiStore().data;
return i ? i.offers[t.region].sku : ""
},
getDescription: function (i) {
var r, u, f;
if (["usgov-iowa", "usgov-virginia"].indexOf(i.region) >= 0) r = "Government Zone";
else {
if (u = n.getPricingApiStore().data, !u) return undefined;
f = t(i, u);
switch (f) {
case "zone1":
r = Core.Util.FormatString("{0} ({1}, {2})", "Zone 1", "North America", "Europe");
break;
case "zone2":
r = Core.Util.FormatString("{0} ({1}, {2}, {3})", "Zone 2", "Asia Pacific", "Japan", "Australia");
break;
case "zone3":
r = Core.Util.FormatString("{0} ({1})", "Zone 3", "Brazil");
break;
case "zone4":
r = Core.Util.FormatString("{0}", "DE (trustee): Germany");
default:
r = ""
}
}
return Core.Util.FormatString("{0} {1}/Month {2}", i.units, {
1: "GB",
1024: "TB"
}[i.storageUnits], r)
}
});
Acom.Calculator.Actions.modules.register(n)
}();
! function () {
"use strict";
var t = "Batch",
i, n;
i = React.createClass({
displayName: "Batch",
onChange: Acom.Calculator.onChange,
render: function () {
var i = this.props,
r = n.getPricingApiStore().data;
return React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: i.dataStore.module.icon
}), " ", React.createElement("span", {
className: "heading3"
}, t)), React.createElement("div", {
className: "detail"
}, React.createElement("p", null, React.createElement("strong", null, "NOTE:"), React.createElement("br", null), "Azure Batch is a free service. Charges accrue for the underlying compute resources that run your Batch workloads, which may be either Cloud Services or Virtual Machine instances. Add Cloud Services and Virtual Machine items to the calculator to estimate the cost of your Batch pools.")), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: i.price,
decimals: "2",
format: "currency"
}))))))
}
});
n = Acom.Calculator.createModule({
slug: "batch",
displayName: t,
description: "Run large-scale parallel and batch compute jobs",
pricingApi: "/api/v1/pricing/batch/calculator/",
component: i,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="batch" viewBox="0 0 50 50"> <path fill="#0072C6" d="M0,27.2c0,0.7,0.5,1.2,1.2,1.2h27.6c0.7,0,1.2-0.5,1.2-1.2v-20H0V27.2z"/> <path fill="#A0A1A2" d="M28.8,2H1.2C0.5,2,0,2.5,0,3.2v4.4h30V3.2C30,2.5,29.5,2,28.8,2z"/> <path opacity="0.1" fill="#FFFFFF" d="M1.2,2C0.5,2,0,2.5,0,3.2v4.4v2v17.6c0,0.7,0.5,1.2,1.2,1.2h11.5L26.2,2H1.2z"/> <path fill="#FFFFFF" d="M5.1,14.6l-0.3-0.3c-0.1-0.1-0.1-0.2,0-0.3l0.8-0.7c0,0,0.1-0.1,0.1-0.1c0.1,0,0.1,0,0.1,0.1l2.2,2.4 l3.9-4.9c0,0,0.1-0.1,0.2-0.1c0,0,0.1,0,0.1,0l0.9,0.7c0,0,0.1,0.1,0.1,0.1c0,0.1,0,0.1,0,0.1l-5,6.3L5.1,14.6z"/> <path fill="#FFFFFF" d="M5.1,22.4l-0.3-0.3c-0.1-0.1-0.1-0.2,0-0.3l0.8-0.7c0,0,0.1-0.1,0.1-0.1c0.1,0,0.1,0,0.1,0.1l2.2,2.4 l3.9-4.9c0,0,0.1-0.1,0.2-0.1c0,0,0.1,0,0.1,0l0.9,0.7c0,0,0.1,0.1,0.1,0.1c0,0.1,0,0.1,0,0.1l-5,6.3L5.1,22.4z"/> <path fill="#3999C6" d="M10,37.2c0,0.7,0.5,1.2,1.2,1.2h27.6c0.7,0,1.2-0.5,1.2-1.2v-20H10V37.2z"/> <path fill="#A0A1A2" d="M38.8,12H11.2c-0.7,0-1.2,0.5-1.2,1.2v4.4h30v-4.4C40,12.5,39.5,12,38.8,12z"/> <path opacity="0.1" fill="#FFFFFF" d="M11.2,12c-0.7,0-1.2,0.5-1.2,1.2v4.4v2v17.6c0,0.7,0.5,1.2,1.2,1.2h11.5L36.2,12H11.2z"/> <path fill="#FFFFFF" d="M15.1,24.6l-0.3-0.3c-0.1-0.1-0.1-0.2,0-0.3l0.8-0.7c0,0,0.1-0.1,0.1-0.1c0.1,0,0.1,0,0.1,0.1l2.2,2.4 l3.9-4.9c0,0,0.1-0.1,0.2-0.1c0,0,0.1,0,0.1,0l0.9,0.7c0,0,0.1,0.1,0.1,0.1c0,0.1,0,0.1,0,0.1l-5,6.3L15.1,24.6z"/> <path fill="#FFFFFF" d="M15.1,32.4l-0.3-0.3c-0.1-0.1-0.1-0.2,0-0.3l0.8-0.7c0,0,0.1-0.1,0.1-0.1c0.1,0,0.1,0,0.1,0.1l2.2,2.4 l3.9-4.9c0,0,0.1-0.1,0.2-0.1c0,0,0.1,0,0.1,0l0.9,0.7c0,0,0.1,0.1,0.1,0.1c0,0.1,0,0.1,0,0.1l-5,6.3L15.1,32.4z"/> <path fill="#59B4D9" d="M20,47.2c0,0.7,0.5,1.2,1.2,1.2h27.6c0.7,0,1.2-0.5,1.2-1.2v-20H20V47.2z"/> <path fill="#A0A1A2" d="M48.8,22H21.2c-0.7,0-1.2,0.5-1.2,1.2v4.4h30v-4.4C50,22.5,49.5,22,48.8,22z"/> <rect x="20" y="27.6" opacity="0.15" fill="#FFFFFF" width="30" height="2"/> <path opacity="0.1" fill="#FFFFFF" d="M21.2,22c-0.7,0-1.2,0.5-1.2,1.2v4.4v2v17.6c0,0.7,0.5,1.2,1.2,1.2h11.5L46.2,22H21.2z"/> <path fill="#FFFFFF" d="M25.1,34.6l-0.3-0.3c-0.1-0.1-0.1-0.2,0-0.3l0.8-0.7c0,0,0.1-0.1,0.1-0.1c0.1,0,0.1,0,0.1,0.1l2.2,2.4 l3.9-4.9c0,0,0.1-0.1,0.2-0.1c0,0,0.1,0,0.1,0l0.9,0.7c0,0,0.1,0.1,0.1,0.1c0,0.1,0,0.1,0,0.1l-5,6.3L25.1,34.6z"/> <rect x="33.2" y="34.5" opacity="0.6" fill="#FFFFFF" width="12" height="2"/> <path fill="#FFFFFF" d="M25.1,42.4l-0.3-0.3c-0.1-0.1-0.1-0.2,0-0.3l0.8-0.7c0,0,0.1-0.1,0.1-0.1c0.1,0,0.1,0,0.1,0.1l2.2,2.4 l3.9-4.9c0,0,0.1-0.1,0.2-0.1c0,0,0.1,0,0.1,0l0.9,0.7c0,0,0.1,0.1,0.1,0.1c0,0.1,0,0.1,0,0.1l-5,6.3L25.1,42.4z"/> <rect x="33.2" y="42.4" opacity="0.6" fill="#FFFFFF" width="12" height="2"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#batch"><\/use><\/svg>'
},
getInitialState: function () {
return {
region: "us-west"
}
},
getPrice: function () {
var t = n.getPricingApiStore().data;
return t ? 0 : undefined
},
getDisplayName: function (n) {
return n.name || t
},
getDescription: function () {
return "Free tier"
}
});
Acom.Calculator.Actions.modules.register(n)
}();
! function () {
"use strict";
function t(t) {
var i = n.getPricingApiStore().data,
r;
return i ? (r = t.tier === "standard" ? "" : "premium-", {
zone1: getGraduatedPrice(i.offers["cdn-" + t.provider + "-" + r + "zone1"].prices, t.zone1 * t.zoneOneStorageUnits),
zone2: getGraduatedPrice(i.offers["cdn-" + t.provider + "-" + r + "zone2"].prices, t.zone2 * t.zoneTwoStorageUnits),
zone3: getGraduatedPrice(i.offers["cdn-" + t.provider + "-" + r + "zone3"].prices, t.zone3 * t.zoneThreeStorageUnits),
zone4: getGraduatedPrice(i.offers["cdn-" + t.provider + "-" + r + "zone4"].prices, t.zone4 * t.zoneFourStorageUnits),
zone5: getGraduatedPrice(i.offers["cdn-" + t.provider + "-" + r + "zone5"].prices, t.zone5 * t.zoneFiveStorageUnits)
}) : undefined
}
var i = "Content Delivery Network",
r, n;
r = React.createClass({
displayName: "Cdn",
onChange: Acom.Calculator.onChange,
render: function () {
var n = this.props,
r = n.dataStore.pricingData;
return React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: n.dataStore.module.icon
}), " ", React.createElement("input", {
className: "text-input",
name: "name",
placeholder: i,
defaultValue: n.name
})), React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Provider",
name: "provider",
options: r.suppliers,
defaultValue: n.provider,
onChange: this.onChange
}), displayIf(n.provider === "verizon", React.createElement(CalculatorDropdown, {
label: "Tier",
name: "tier",
options: r.tiers,
defaultValue: n.tier,
onChange: this.onChange
})))), React.createElement("div", {
className: "cost no-divider"
}, React.createElement("h3", null, "CDN Zone 1: North America, Europe"), React.createElement(FactoredInput, {
key: "factor-zone1-" + n.zoneOneStorageUnits,
name: "zone1",
defaultValue: n.zone1,
factorsName: "zoneOneStorageUnits",
factorsDefault: n.zoneOneStorageUnits,
factorUnit: "gbs",
min: "0",
max: "5000",
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: t(n).zone1,
decimals: "2",
format: "currency"
}))), displayIf(n.displaySku && n.sku.zone1, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, n.sku.zone1))))), React.createElement("div", {
className: "cost"
}, React.createElement("h3", null, "CDN Zone 2: Asia Pacific, Japan"), React.createElement(FactoredInput, {
key: "factor-zone2-" + n.zoneTwoStorageUnits,
name: "zone2",
defaultValue: n.zone2,
factorsName: "zoneTwoStorageUnits",
factorsDefault: n.zoneTwoStorageUnits,
factorUnit: "gbs",
min: "0",
max: "5000",
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: t(n).zone2,
decimals: "2",
format: "currency"
}))), displayIf(n.displaySku && n.sku.zone2, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, n.sku.zone2))))), React.createElement("div", {
className: "cost"
}, React.createElement("h3", null, "CDN Zone 3: Brazil"), React.createElement(FactoredInput, {
key: "factor-zone3-" + n.zoneThreeStorageUnits,
name: "zone3",
defaultValue: n.zone3,
factorsName: "zoneThreeStorageUnits",
factorsDefault: n.zoneThreeStorageUnits,
factorUnit: "gbs",
min: "0",
max: "5000",
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: t(n).zone3,
decimals: "2",
format: "currency"
}))), displayIf(n.displaySku && n.sku.zone3, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, n.sku.zone3))))), React.createElement("div", {
className: "cost"
}, React.createElement("h3", null, "CDN Zone 4: Australia"), React.createElement(FactoredInput, {
key: "factor-zone4-" + n.zoneFourStorageUnits,
name: "zone4",
defaultValue: n.zone4,
factorsName: "zoneFourStorageUnits",
factorsDefault: n.zoneFourStorageUnits,
factorUnit: "gbs",
min: "0",
max: "5000",
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: t(n).zone4,
decimals: "2",
format: "currency"
}))), displayIf(n.displaySku && n.sku.zone4, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, n.sku.zone4))))), React.createElement("div", {
className: "cost"
}, React.createElement("h3", null, "CDN Zone 5: India"), React.createElement(FactoredInput, {
key: "factor-zone5-" + n.zoneFiveStorageUnits,
name: "zone5",
defaultValue: n.zone5,
factorsName: "zoneFiveStorageUnits",
factorsDefault: n.zoneFiveStorageUnits,
factorUnit: "gbs",
min: "0",
max: n.zoneFiveStorageUnits === "1" ? 5e3 : 500,
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: t(n).zone5,
decimals: "2",
format: "currency"
}))), displayIf(n.displaySku && n.sku.zone5, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, n.sku.zone5))))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("span", {
className: "sub-total"
}, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n.price,
decimals: "2",
format: "currency"
}))))))
}
});
n = Acom.Calculator.createModule({
slug: "cdn",
displayName: i,
description: "Ensure secure, reliable content delivery with broad global reach",
pricingApi: "/api/v1/pricing/cdn/calculator/",
component: r,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="cdn" viewBox="0 0 50 50"> <path fill="#7A7A7A" d="M34.9,16.8H8.3c-1.1,0-2-0.9-2-2v0c0-1.1,0.9-2,2-2h26.6c1.1,0,2,0.9,2,2v0C36.9,15.9,36,16.8,34.9,16.8z"/> <path fill="#7A7A7A" d="M29.5,33.5H4.9c-1.1,0-2-0.9-2-2v0c0-1.1,0.9-2,2-2h24.6c1.1,0,2,0.9,2,2v0C31.5,32.6,30.6,33.5,29.5,33.5z"/> <path fill="#7A7A7A" d="M26.6,25.4H2c-1.1,0-2-0.9-2-2v0c0-1.1,0.9-2,2-2h24.6c1.1,0,2,0.9,2,2v0C28.6,24.5,27.7,25.4,26.6,25.4z"/> <path fill="#3999C6" d="M50,29.2c0-2.4-1.9-4.3-4.2-4.3c-0.2,0-0.3,0-0.6,0c0.2-0.9,0.4-1.9,0.4-3c0-6.2-5.1-11.2-11.2-11.2\tc-4.9,0-9.1,3.3-10.6,7.6c-0.8-0.2-1.6-0.4-2.5-0.4c-4.3,0-7.6,3.5-7.6,7.8s3.4,7.8,7.6,7.8l0,0l0,0H46l0,0\tC48.3,33.2,50,31.4,50,29.2"/> <path fill="#FFFFFF" style="opacity:0.2;enable-background:new;" d="M25.3,33.4c-1-1-1.8-2.2-2.1-3.8c-0.9-4.2,1.6-8.3,5.7-9.2c0.9-0.2,1.7-0.2,2.6-0.1c0.3-3.9,2.7-7.3,6.3-9 c-1.1-0.3-2.2-0.6-3.4-0.6c-4.9,0-9.1,3.3-10.6,7.6c-0.8-0.2-1.6-0.4-2.5-0.4c-4.3,0-7.6,3.5-7.6,7.8s3.4,7.8,7.6,7.8l0,0l0,0 L25.3,33.4L25.3,33.4z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#cdn"><\/use><\/svg>'
},
getInitialState: function () {
return {
tier: "standard",
provider: "verizon",
zone1: 0,
zoneOneStorageUnits: "1",
zone2: 0,
zoneTwoStorageUnits: "1",
zone3: 0,
zoneThreeStorageUnits: "1",
zone4: 0,
zoneFourStorageUnits: "1",
zone5: 0,
zoneFiveStorageUnits: "1"
}
},
getPrice: function (i) {
var e = n.getPricingApiStore().data,
u = 0,
f, r;
if (!e) return 0;
r = t(i);
for (f in r) u += r[f];
return u
},
getDisplayName: function (n) {
return n.name || i
},
willUpdate: function (t, i) {
var r = n.getPricingApiStore().data;
return t.zoneFiveStorageUnits !== i.zoneFiveStorageUnits && (i.zone5 = 5), t.provider === "verizon" && i.provider === "akamai" && (i.tier = "standard"), i
},
getSku: function (t) {
var i = n.getPricingApiStore().data,
r;
return i ? (r = t.tier === "standard" ? "" : "premium-", {
zone1: i.offers["cdn-" + t.provider + "-" + r + "zone1"].sku,
zone2: i.offers["cdn-" + t.provider + "-" + r + "zone2"].sku,
zone3: i.offers["cdn-" + t.provider + "-" + r + "zone3"].sku,
zone4: i.offers["cdn-" + t.provider + "-" + r + "zone4"].sku,
zone5: i.offers["cdn-" + t.provider + "-" + r + "zone5"].sku
}) : ""
},
getDescription: function (n) {
var t = {
1: "GB",
1024: "TB"
};
return Core.Util.FormatString("{0} {1}/Month Zone1, {2} {3}/Month Zone 2, {4} {5}/Month Zone 3, {6} {7}/Month Zone 4, {8} {9}/Month Zone 5, {10} {11}/Month Zone 6", n.zone1, t[n.zoneOneStorageUnits], n.zone2, t[n.zoneTwoStorageUnits], n.zone3, t[n.zoneThreeStorageUnits], n.zone4, t[n.zoneFourStorageUnits], n.zone5, t[n.zoneFiveStorageUnits])
}
});
Acom.Calculator.Actions.modules.register(n)
}();
! function () {
"use strict";
function t(t, i) {
var u = n.getPricingApiStore().data,
r;
return u ? (r = u.offers[i], typeof r.prices[t] != "undefined" && r) : undefined
}
function f(n, i) {
var r = t(n, i);
return r && r.prices[n]
}
function i(n, i) {
return !!t(n, i)
}
var r = "Cloud Services",
u, n;
u = React.createClass({
displayName: "CloudServices",
onChange: Acom.Calculator.onChange,
render: function () {
var n = this.props,
u = n.dataStore.pricingData,
e = u.sizes.filter(function (t) {
return i(n.region, t.slug)
}).map(function (i) {
var e = t(n.region, i.slug),
u = ["wa-badge"],
r = "{0} GB";
switch (i.slug[0]) {
case "a":
u.push("wa-badge-green");
r = "{0} GB";
break;
case "d":
u.push("wa-badge-blue");
r = "{0} GB SSD";
break;
case "g":
u.push("wa-badge-green");
r = "{0} GB SSD";
break;
case "h":
u.push("wa-badge-blue");
r = "{0} GB SSD";
break;
case "l":
u.push("wa-badge-blue");
r = "{0} GB"
}
return {
slug: i.slug,
values: {
displayStrings: [i.displayName, formatString("{0} cores", e.cores), formatString("{0} GB RAM", e.ram), formatString(r, e.diskSize)],
number: {
value: f(n.region, i.slug),
decimals: 3,
format: "currency",
rate: "{0}/hr"
}
}
}
});
return React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: n.dataStore.module.icon
}), " ", React.createElement("input", {
className: "text-input",
name: "name",
placeholder: r,
defaultValue: n.name
})), React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Region",
name: "region",
options: u.regions,
defaultValue: n.region
})), React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(DetailedDropdown, {
key: "size-" + n.region,
label: "Instance size:",
name: "size",
options: e,
delimiters: ["colon", "comma"],
defaultValue: n.size,
onChange: this.onChange
}))), React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
label: "Instances",
name: "instances",
min: "1",
max: "999",
defaultValue: n.instances,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(FactoredInput, {
key: "factor-hours-" + n.hoursFactor,
name: "hours",
defaultValue: n.hours,
factorsName: "hoursFactor",
factorsDefault: n.hoursFactor || "1",
factorUnit: "hours",
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n.price,
decimals: "2",
format: "currency"
}))), displayIf(n.displaySku && n.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, n.sku))))))
}
});
n = Acom.Calculator.createModule({
slug: "cloud-services",
displayName: r,
description: "Create highly-available, infinitely-scalable cloud applications and APIs",
pricingApi: "/api/v1/pricing/cloud-services/calculator/",
component: u,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="cloud-services" viewBox="0 0 50 50"> <path fill="#3E3E3E" d="M43.339,18.659c0.195-0.911,0.291-1.779,0.291-2.643C43.63,9.39,38.232,4,31.595,4 c-4.631,0-8.8,2.622-10.81,6.736c-1.619-1.61-3.809-2.523-6.114-2.523c-4.763,0-8.638,3.875-8.638,8.637 c0,0.646,0.072,1.298,0.218,1.968C2.328,20.416,0,23.731,0,27.763c0,5.437,4.443,9.696,10.113,9.696h0.646 c0.11,4.968,4.18,8.975,9.164,8.975c3.355,0,6.393-1.809,7.996-4.681c1.206,1.045,2.748,1.628,4.36,1.628 c3.42,0,6.249-2.591,6.65-5.922h0.961c5.67,0,10.11-4.259,10.11-9.696C50,23.564,47.456,20.109,43.339,18.659"/> <path fill="#FFFFFF" d="M39.437,23.192l0.736-1.743l-0.213-0.184l-1.607-1.396l0.008-1.411l1.812-1.62l-0.713-1.753l-0.279,0.019 l-2.125,0.152l-0.992-1.006l0.135-2.428l-1.742-0.735l-0.184,0.212l-1.397,1.609l-1.412-0.01l-1.621-1.81l-1.752,0.711l0.02,0.281 l0.15,2.125l-1.004,0.99l-2.428-0.135l-0.736,1.743l0.213,0.184l1.608,1.397l-0.009,1.412l-1.81,1.621l0.711,1.752l0.281-0.021 l2.123-0.149l0.992,1.005l-0.135,2.426l1.743,0.736l0.184-0.213l1.396-1.608l1.412,0.01l1.621,1.812l1.752-0.712l-0.02-0.282 l-0.15-2.124l1.006-0.992L39.437,23.192z M30.628,22.693c-1.971-0.831-2.894-3.102-2.062-5.071c0.833-1.972,3.102-2.894,5.072-2.063 c1.97,0.832,2.893,3.103,2.062,5.073C34.868,22.602,32.599,23.525,30.628,22.693"/> <path fill="#FFFFFF" d="M28.357,31.948v-1.893l-0.266-0.086l-2.025-0.663l-0.539-1.304l1.04-2.198l-1.336-1.337l-0.251,0.127 l-1.899,0.962l-1.305-0.541l-0.818-2.289l-1.891-0.002l-0.087,0.269l-0.663,2.023l-1.304,0.539l-2.198-1.039l-1.337,1.337 l0.127,0.251l0.962,1.9l-0.54,1.302l-2.29,0.819l-0.001,1.891l0.267,0.088l2.025,0.661l0.539,1.306l-1.04,2.196l1.336,1.34 l0.251-0.128l1.901-0.964l1.302,0.541l0.819,2.289l1.891,0.001l0.087-0.266l0.663-2.025l1.305-0.539l2.196,1.04l1.339-1.336 l-0.127-0.251l-0.964-1.899l0.542-1.305L28.357,31.948z M20.044,34.908c-2.138-0.001-3.869-1.736-3.869-3.874 c0.002-2.139,1.736-3.87,3.875-3.869c2.139,0.001,3.871,1.735,3.869,3.874C23.918,33.177,22.183,34.909,20.044,34.908"/> <path fill="#B8D432" d="M34.449,20.103c-0.539,1.279-2.014,1.878-3.293,1.338c-1.279-0.54-1.878-2.014-1.338-3.293 c0.54-1.277,2.014-1.878,3.293-1.338C34.389,17.35,34.988,18.824,34.449,20.103"/> <path fill="#B8D432" d="M22.561,31.037c-0.001,1.389-1.128,2.514-2.515,2.513c-1.388-0.001-2.512-1.127-2.511-2.516 c0.001-1.388,1.127-2.513,2.513-2.512C21.437,28.523,22.562,29.649,22.561,31.037"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#cloud-services"><\/use><\/svg>'
},
getInitialState: function () {
return {
region: "us-east",
size: "a0",
instances: 1,
hours: 744,
hoursFactor: "1"
}
},
getPrice: function (t) {
if (!n.getPricingApiStore().data) return 0;
var i = f(t.region, t.size);
return i * t.instances * t.hours * (t.hoursFactor || "1")
},
getDisplayName: function (n) {
return n.name || r
},
willUpdate: function (t, r) {
var e = n.getPricingApiStore().data,
u, f;
if (!i(r.region, r.size))
for (f = 0; u = e.sizes[f]; f++)
if (i(r.region, u.slug)) {
r.size = u.slug;
break
}
return t.hoursFactor !== r.hoursFactor && (r.hours = factorInput(t.hoursFactor, r.hoursFactor, t.hours)), r
},
getSku: function (i) {
if (!n.getPricingApiStore().data) return "";
var r = t(i.region, i.size);
return r && r.skus[i.region] ? r && r.skus[i.region] : ""
},
getDescription: function (n) {
return Core.Util.FormatString("{0} instance(s), {1} {2}, {3} size", n.instances, n.hours, factorLabel(n.hoursFactor), n.size)
},
isValidOffer: function (n) {
return i(n.region, n.size)
}
});
Acom.Calculator.Actions.modules.register(n)
}();
! function () {
"use strict";
function st(n) {
var t = u.getPricingApiStore().data,
i, r;
if (!t) return "";
for (r in t) t[r].slug === n && (i = r);
return t[i].regions[0] ? t[i].regions[0].slug : null
}
function ot(n) {
var t = u.getPricingApiStore().data,
r, i;
if (!t) return "";
for (i in t) t[i].slug === n && (r = i);
return t[r].regions
}
function t(n) {
var t = u.getPricingApiStore().data;
return t ? {
autoSuggest: t.autosuggest.offers[n.autoSuggestSize].overagePrice.global,
spellCheck: t.spellCheck.offers[n.spellCheckSize].overagePrice.global,
search: t.search.offers[n.searchSize].overagePrice.global,
textAnalytics: t.textAnalytics.offers[n.textAnalyticsSize].overagePrice[n.region],
recommendations: t.recommendations.offers[n.recommendationsSize].overagePrice[n.region],
computerVision: t.computerVision.offers[n.computerVisionTier].prices[n.region],
emotionApi: t.emotionApi.offers[n.emotionTier].prices[n.region],
languageUnderstandingIntelligentServices: t.languageUnderstandingIntelligentServices.offers.basic.prices[n.region],
speechtotext: t.speechApi.offers.speechtotext.prices[n.region],
texttospeech: t.speechApi.offers.texttospeech.prices[n.region],
webLanguageModel: t.webLanguageModel.offers.standard.prices[n.region],
speakerRecognitionApiService: t.speakerRecognitionApi.offers[n.speakerRecognitionApi + "-" + n.region] ? t.speakerRecognitionApi.offers[n.speakerRecognitionApi + "-" + n.region].prices : 0,
academicKnowledge: t.academicKnowledgeApi.offers[n.academicKnowledgeTier].prices[n.region]
} : 0
}
function rt(n) {
var t = u.getPricingApiStore().data;
return t ? {
transactions: getGraduatedPrice(t.faceApi.graduatedOffers["face-api-standard"].prices, n.faceTransactions, r(n).faceApi),
faceStorage: Math.ceil(n.faceStorage / r(n).faceApi) * t.faceApi.offers["face-storage"].prices[n.region]
} : 0
}
function s(n) {
var t = u.getPricingApiStore().data;
return t ? {
textAnalytics: t.textAnalytics.offers[n.textAnalyticsSize].maximumTransactions.toLocaleString(Acom.currentCulture),
recommendations: t.recommendations.offers[n.recommendationsSize].maximumTransactions.toLocaleString(Acom.currentCulture),
autosuggest: t.autosuggest.offers[n.autoSuggestSize].maximumTransactions.toLocaleString(Acom.currentCulture),
spellcheck: t.spellCheck.offers[n.spellCheckSize].maximumTransactions.toLocaleString(Acom.currentCulture),
search: t.search.offers[n.searchSize].maximumTransactions.toLocaleString(Acom.currentCulture),
speechApi: t.speechApi.offers.free.maximumTransactions.toLocaleString(Acom.currentCulture),
webLanguageModel: t.webLanguageModel.offers.free.maximumTransactions.toLocaleString(Acom.currentCulture)
} : 0
}
function ht(n) {
var t = "";
switch (n.api) {
case c:
t = s(n).autosuggest;
break;
case v:
t = s(n).spellcheck;
break;
case a:
t = s(n).search
}
return formatString("{0} included transactions", t)
}
function r(t) {
var i = u.getPricingApiStore().data;
return i ? {
autosuggest: i.autosuggest.overageIncrement,
spellcheck: i.spellCheck.overageIncrement,
search: i.search.overageIncrement,
academicKnowledge: t.academicKnowledgeTier !== n ? i.academicKnowledgeApi.offers[t.academicKnowledgeTier].transactionIncrement.toString() : "",
computerVision: t.computerVisionTier !== n ? i.computerVision.offers[t.computerVisionTier].transactionIncrement.toString() : "",
faceApi: t.faceTier !== n ? i.faceApi.graduatedOffers["face-api-standard"].transactionIncrement.toString() : "",
emotionApi: t.emotionTier !== n ? i.emotionApi.offers[t.emotionTier].transactionIncrement.toString() : "",
languageUnderstandingIntelligentServices: t.languageTier !== n ? i.languageUnderstandingIntelligentServices.offers[t.languageTier].transactionIncrement.toString() : "",
webLanguageModel: i.webLanguageModel.offers[t.webLanguageModelTier].transactionIncrement.toString()
} : 0
}
function f(n, t, i, r) {
var u = n[t];
return u[i] && u[i][r] ? u[i][r] : ""
}
function ft(t) {
var i = u.getPricingApiStore().data;
return i ? t.customSpeechServiceTier === n ? 0 : i.customSpeechServiceOffering.offers[t.customSpeechServiceTier].acousticAdaptationPrice[t.region] : 0
}
var ut = "Cognitive Services",
et, u, c = "autosuggest-api",
h = "text-analytics",
l = "recommendations",
a = "search-api",
v = "spellcheck-api",
e = "speech-api",
y = "emotion-api",
p = "language-understanding-intelligent-services",
w = "web-language-model",
b = "academic-knowledge-api",
k = "computer-vision",
d = "translator-speech-api",
g = "translator-text-api",
it = "speaker-recognition-api",
nt = "face-api",
i = "content-moderator",
tt = "custom-speech-service",
n = "free",
o = "s1";
et = React.createClass({
displayName: "CognitiveServices",
onChange: Acom.Calculator.onChange,
getServiceInfo: function (t) {
var r = this.props.dataStore.pricingData,
u = r.emotionApi.offers.free,
f = r.emotionApi.offers.standard;
switch (t.api) {
case h:
return formatString("Max. transactions included {0}", s(t).textAnalytics);
case l:
return formatString("Max. transactions included {0}", s(t).recommendations);
case k:
return t.computerVisionTier === n ? formatString("{0} included transactions.", r.computerVision.offers.free.maximumTransactions) : "Up to 10 transactions per second";
case y:
if (t.emotionTier === n) return formatReact("{0} Maximum transactions per second<br />{1} Maximum transactions per month<br />{2} Video uploads per month<br />{3} Uploads per minute<br />{4} Status queries per month<br />{5} Queries per minute", u.maximumTransactionsPerSecond.toLocaleString(Acom.currentCulture), u.maximumTransactions.toLocaleString(Acom.currentCulture), u.videoUploads.toLocaleString(Acom.currentCulture), u.uploadsPerMinute.toLocaleString(Acom.currentCulture), u.statusQueries.toLocaleString(Acom.currentCulture), u.queriesPerMinute.toLocaleString(Acom.currentCulture));
if (t.emotionTier === "basic") return "Up to 10 transactions per second, Face Rectangle specified";
if (t.emotionTier === "standard") return formatReact("{0} Maximum transactions per second<br />{1} Video uploads per month<br />{2} Uploads per minute<br />{3} Status queries per month<br />{4} Queries per minute", f.maximumTransactionsPerSecond.toLocaleString(Acom.currentCulture), f.videoUploads.toLocaleString(Acom.currentCulture), f.uploadsPerMinute.toLocaleString(Acom.currentCulture), f.statusQueries.toLocaleString(Acom.currentCulture), f.queriesPerMinute.toLocaleString(Acom.currentCulture));
case nt:
return t.faceTier === n ? formatString("{0} included transactions. Up to {1} transactions per minute.", r.faceApi.offers["face-api-free"].maximumTransactions, r.faceApi.offers["face-api-free"].maximumTransactionsPerMinute) : "Up to 10 transactions per second";
case p:
return t.languageTier === n ? formatString("{0} included transactions.", r.languageUnderstandingIntelligentServices.offers.free.maximumTransactions) : "5 transactions per second";
case w:
return t.webLanguageModelTier === n ? formatString("{0} transactions included free per month.", s(t).webLanguageModel) : "";
case b:
return t.academicKnowledgeTier === n ? formatString("{0} included transactions.", r.academicKnowledgeApi.offers.free.maximumTransactions) : "";
case e:
return t.speechTier === n ? formatString("{0} transactions free per month", s(t).speechApi) : t.speechTier === "speechtotext" ? "Utterances up to 15 seconds long" : t.speechTier === "longformspeech" ? "Utterances up to 2 minutes long" : "";
case i:
return formatString("{0} transactions per second - {1} maximum characters or {2} MB image size per transaction.", r.contentModerator.offers[i].transactionsPerSecond, r.contentModerator.offers[i].maximumCharacters.toLocaleString(Acom.currentCulture), r.contentModerator.offers[i].maximumImageSize);
case tt:
return t.customSpeechServiceTier === n ? formatReact("{0} concurrent transcriptions<br />{1} Acoustic Model Adaptations (up to 1 hour each)<br />{2} Language Model Adaptations<br />{3} Transcriptions (Short Phrase or Long Dictation)", r.customSpeechServiceOffering.offers.free.maximumConcurrentTranscriptions.toLocaleString(Acom.currentCulture), r.customSpeechServiceOffering.offers.free.maximumAcousticModelAdaptations.toLocaleString(Acom.currentCulture), r.customSpeechServiceOffering.offers.free.maximumLanguageModelAdaptations.toLocaleString(Acom.currentCulture), r.customSpeechServiceOffering.offers.free.maximumTranscriptions.toLocaleString(Acom.currentCulture)) : formatReact("{0} concurrent transcriptions", r.customSpeechServiceOffering.offers[t.customSpeechServiceTier].maximumConcurrentTranscriptions.toLocaleString(Acom.currentCulture))
}
},
render: function () {
var u = this.props,
f = u.dataStore.pricingData,
et = f.autosuggest.tiers.map(function (n) {
return {
slug: n.slug,
displayName: n.slug + " " + formatString("{0}/mo", formatCurrency(f.autosuggest.offers[n.slug].monthlyPrice.global, 2))
}
}),
st = f.spellCheck.tiers.map(function (n) {
return {
slug: n.slug,
displayName: n.slug + " " + formatString("{0}/mo", formatCurrency(f.spellCheck.offers[n.slug].monthlyPrice.global, 2))
}
}),
ct = f.search.tiers.map(function (n) {
return {
slug: n.slug,
displayName: n.slug + " " + formatString("{0}/mo", formatCurrency(f.search.offers[n.slug].monthlyPrice.global, 2))
}
}),
lt = f.textAnalytics.tiers.map(function (n) {
return {
slug: n.slug,
displayName: n.slug + " " + formatString("{0}/mo", formatCurrency(f.textAnalytics.offers[n.slug].monthlyPrice[u.region], 2))
}
}),
at = f.recommendations.tiers.map(function (n) {
return {
slug: n.slug,
displayName: n.slug + " " + formatString("{0}/mo", formatCurrency(f.recommendations.offers[n.slug].monthlyPrice[u.region], 2))
}
}),
vt = f.customSpeechServiceOffering.tiers.map(function (n) {
return {
slug: n.slug,
displayName: n.slug + " " + formatString("{0}/mo", formatCurrency(f.customSpeechServiceOffering.offers[n.slug].monthlyPrice[u.region], 2))
}
});
return React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: u.dataStore.module.icon
}), " ", React.createElement("span", {
className: "heading3"
}, ut, React.createElement("sup", {
className: "preview normal-font"
}, "Preview"))), React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "API",
name: "api",
options: f.serviceTypes,
defaultValue: u.api
}), displayIf(ot(u.api).length > 0, React.createElement(CalculatorDropdown, {
key: u.api,
label: "Region",
name: "region",
options: ot(u.api),
defaultValue: u.region
})), displayIf(u.api === c, React.createElement(CalculatorDropdown, {
classes: "tier-select",
key: "autosuggest",
label: "Instance size",
name: "autoSuggestSize",
options: et,
defaultValue: u.autoSuggestSize
})), displayIf(u.api === v, React.createElement(CalculatorDropdown, {
classes: "tier-select",
key: "spellcheck",
label: "Instance size",
name: "spellCheckSize",
options: st,
defaultValue: u.spellCheckSize
})), displayIf(u.api === a, React.createElement(CalculatorDropdown, {
classes: "tier-select",
key: "search",
label: "Instance size",
name: "searchSize",
options: ct,
defaultValue: u.searchSize
})), displayIf(u.api === d, React.createElement(CalculatorDropdown, {
classes: "tier-select",
key: "translator-speech-api",
label: "Tier",
name: "translatorSpeechTier",
options: f.translatorSpeech.tiers,
defaultValue: u.translatorSpeechTier
})), displayIf(u.api === g, React.createElement(CalculatorDropdown, {
classes: "tier-select",
key: "translator-text-api",
label: "Tier",
name: "translatorTextTier",
options: f.translatorText.tiers,
defaultValue: u.translatorTextTier
}))), displayIf(u.api === c || u.api === v || u.api === a, React.createElement("p", {
key: u.autoSuggestSize + u.spellCheckSize + u.searchSize
}, ht(u))), displayIf(u.api === d, React.createElement("p", {
key: "translator-speech-" + u.translatorSpeechTier
}, formatReact("{0} Included hours of speech translation.", f.translatorSpeech.offers[u.translatorSpeechTier].includedHours.toLocaleString(Acom.currentCulture)))), displayIf(u.api === g, React.createElement("p", {
key: "translator-text-" + u.translatorTextTier
}, formatReact("{0} Included translated characters.", f.translatorText.offers[u.translatorTextTier].maximumCharacters.toLocaleString(Acom.currentCulture)))), displayIf(u.api === h, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
classes: "tier-select",
key: u.api,
label: "Instance size",
name: "textAnalyticsSize",
options: lt,
defaultValue: u.textAnalyticsSize
}))), displayIf(u.api === l, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
classes: "tier-select",
key: u.api,
label: "Instance size",
name: "recommendationsSize",
options: at,
defaultValue: u.recommendationsSize
}))), displayIf(u.api === y, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
classes: "tier-select",
key: u.api,
label: "Tier",
name: "emotionTier",
options: f.emotionApi.tiers,
defaultValue: u.emotionTier
}))), displayIf(u.api === e, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
classes: "tier-select",
key: u.api,
label: "Tier",
name: "speechTier",
options: f.speechApi.tiers,
defaultValue: u.speechTier
}))), displayIf(u.api === w, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
classes: "tier-select",
key: u.api,
label: "Tier",
name: "webLanguageModelTier",
options: f.webLanguageModel.tiers,
defaultValue: u.webLanguageModelTier
}))), displayIf(u.api == p, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
classes: "tier-select",
key: "languageUnderstandingIntelligentServices",
label: "Tier",
name: "languageTier",
options: f.languageUnderstandingIntelligentServices.tiers,
defaultValue: u.languageTier
}))), displayIf(u.api == k, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
classes: "tier-select",
key: "computerVision",
label: "Tier",
name: "computerVisionTier",
options: f.computerVision.tiers,
defaultValue: u.computerVisionTier
}))), displayIf(u.api == nt, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
classes: "tier-select",
key: "faceApi",
label: "Tier",
name: "faceTier",
options: f.faceApi.tiers,
defaultValue: u.faceTier
}))), displayIf(u.api == b, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
classes: "tier-select",
key: "academicKnowledge",
label: "Tier",
name: "academicKnowledgeTier",
options: f.academicKnowledgeApi.tiers,
defaultValue: u.academicKnowledgeTier
}))), displayIf(u.api === it, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
classes: "tier-select",
key: u.api,
label: "Service",
name: "speakerRecognitionApi",
options: f.speakerRecognitionApi.types,
defaultValue: u.speakerRecognitionApi
}))), displayIf(u.api === tt, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
classes: "tier-select",
key: "custom-speech-service-text-api",
label: "Tier",
name: "customSpeechServiceTier",
options: vt,
defaultValue: u.customSpeechServiceTier
}))), this.getServiceInfo(u)), displayIf(u.api === c, React.createElement("div", null, displayIf(u.autoSuggestSize !== o, React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
key: u.autoSuggestSize,
label: "Overages",
name: "autoSuggestOverages",
min: "0",
max: 999999999,
defaultValue: u.autoSuggestOverages,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric static"
}, React.createElement(Acom.Atoms.Number, {
value: t(u).autoSuggest,
decimals: "2",
format: "currency"
})), React.createElement("label", {
className: "label"
}, formatString("Per {0} transactions", r(u).autosuggest))), React.createElement("div", {
className: "math"
}, "+"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric static"
}, React.createElement(Acom.Atoms.Number, {
value: f.autosuggest.offers[u.autoSuggestSize].monthlyPrice.global,
decimals: "2",
format: "currency"
}))), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku && (u.sku.monthlySku || u.sku.overageSku), React.createElement(SkuLabel, {
base: u.sku.monthlySku,
overage: u.sku.overageSku
})))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku && (u.sku.monthlySku || u.sku.overageSku), React.createElement(SkuLabel, {
base: u.sku.monthlySku,
overage: u.sku.overageSku
}))))))), displayIf(u.api === v, React.createElement("div", null, displayIf(u.spellCheckSize !== o, React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
key: u.spellCheckSize,
label: "Overages",
name: "spellCheckOverages",
min: "0",
max: 999999999,
defaultValue: u.spellCheckOverages,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric static"
}, React.createElement(Acom.Atoms.Number, {
value: t(u).spellCheck,
decimals: "2",
format: "currency"
})), React.createElement("label", {
className: "label"
}, formatString("Per {0} transactions", r(u).spellcheck))), React.createElement("div", {
className: "math"
}, "+"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric static"
}, React.createElement(Acom.Atoms.Number, {
value: f.spellCheck.offers[u.spellCheckSize].monthlyPrice.global,
decimals: "2",
format: "currency"
}))), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku && (u.sku.monthlySku || u.sku.overageSku), React.createElement(SkuLabel, {
base: u.sku.monthlySku,
overage: u.sku.overageSku
})))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku && (u.sku.monthlySku || u.sku.overageSku), React.createElement(SkuLabel, {
base: u.sku.monthlySku,
overage: u.sku.overageSku
}))))))), displayIf(u.api === a, React.createElement("div", null, displayIf(u.searchSize !== o, React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
key: u.searchSize,
label: "Overages",
name: "searchOverages",
min: "0",
max: 999999999,
defaultValue: u.searchOverages,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric static"
}, React.createElement(Acom.Atoms.Number, {
value: t(u).search,
decimals: "2",
format: "currency"
})), React.createElement("label", {
className: "label"
}, formatString("Per {0} transactions", r(u).search))), React.createElement("div", {
className: "math"
}, "+"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric static"
}, React.createElement(Acom.Atoms.Number, {
value: f.search.offers[u.searchSize].monthlyPrice.global,
decimals: "2",
format: "currency"
}))), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku && (u.sku.monthlySku || u.sku.overageSku), React.createElement(SkuLabel, {
base: u.sku.monthlySku,
overage: u.sku.overageSku
})))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku && (u.sku.monthlySku || u.sku.overageSku), React.createElement(SkuLabel, {
base: u.sku.monthlySku,
overage: u.sku.overageSku
}))))))), displayIf(u.api === h && u.textAnalyticsSize === n, React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku && (u.sku.monthlySku || u.sku.overageSku), React.createElement(SkuLabel, {
base: u.sku.monthlySku,
overage: u.sku.overageSku
}))))), displayIf(u.api === h && u.textAnalyticsSize !== n, React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
key: u.textAnalyticsSize,
label: "Overages",
name: "textAnalyticsOverages",
min: "0",
max: s(u).textAnalytics,
defaultValue: u.textAnalyticsOverages,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric static"
}, React.createElement(Acom.Atoms.Number, {
value: t(u).textAnalytics,
decimals: "2",
format: "currency"
})), React.createElement("label", {
className: "label"
}, "Per 1,000 transactions")), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku && (u.sku.monthlySku || u.sku.overageSku), React.createElement(SkuLabel, {
base: u.sku.monthlySku,
overage: u.sku.overageSku
}))))), displayIf(u.api === l && u.recommendationsSize === n, React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku && (u.sku.monthlySku || u.sku.overageSku), React.createElement(SkuLabel, {
base: u.sku.monthlySku,
overage: u.sku.overageSku
}))))), displayIf(u.api === l && u.recommendationsSize !== n, React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
key: u.recommendationsSize,
label: "Overages",
name: "recommendationsOverages",
min: "0",
max: s(u).recommendations,
defaultValue: u.recommendationsOverages,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric static"
}, React.createElement(Acom.Atoms.Number, {
value: t(u).recommendations,
decimals: "2",
format: "currency"
})), React.createElement("label", {
className: "label"
}, "Per 1,000 transactions")), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku && (u.sku.monthlySku || u.sku.overageSku), React.createElement(SkuLabel, {
base: u.sku.monthlySku,
overage: u.sku.overageSku
}))))), displayIf(u.api === k && u.computerVisionTier === n, React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku, React.createElement(SkuLabel, {
value: u.sku.overageSku
}))))), displayIf(u.api === k && u.computerVisionTier !== n, React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
key: u.computerVisionTier,
label: "Transactions",
name: "computerVisionTransactions",
min: "0",
max: 999999999,
defaultValue: u.computerVisionTransactions,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric static"
}, React.createElement(Acom.Atoms.Number, {
value: t(u).computerVision,
decimals: "2",
format: "currency"
})), React.createElement("label", {
className: "label"
}, formatReact("Per {0} transactions", r(u).computerVision))), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku && u.sku.overageSku, React.createElement(SkuLabel, {
value: u.sku.overageSku
}))))), displayIf(u.api === y && u.emotionTier === n, React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku && (u.sku.monthlySku || u.sku.overageSku), React.createElement(SkuLabel, {
base: u.sku.monthlySku,
overage: u.sku.overageSku
}))))), displayIf(u.api === y && u.emotionTier !== n, React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
key: u.api,
label: "Transactions",
name: "emotionTransactions",
min: "0",
max: 999999999,
defaultValue: u.emotionTransactions,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric static"
}, React.createElement(Acom.Atoms.Number, {
value: t(u).emotionApi,
decimals: "2",
format: "currency"
})), React.createElement("label", {
className: "label"
}, formatReact("Per {0} transactions", r(u).emotionApi))), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku && u.sku.overageSku, React.createElement(SkuLabel, {
value: u.sku.overageSku
}))))), displayIf(u.api === nt && u.faceTier === n, React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku && u.sku.transactionSku, React.createElement(SkuLabel, {
base: u.sku.transactionSku
}))))), displayIf(u.api === nt && u.faceTier !== n, React.createElement("div", null, React.createElement("div", {
className: "cost"
}, React.createElement("h3", null, "Transactions"), React.createElement(TextNumber, {
key: u.api,
label: "Thousands/mo",
name: "faceTransactions",
min: "0",
max: 2e4,
defaultValue: u.faceTransactions,
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: rt(u).transactions,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku && u.sku.transactionSku, React.createElement(SkuLabel, {
value: u.sku.transactionSku
})))), React.createElement("div", {
className: "cost sub-module"
}, React.createElement("h3", null, "Face storage"), React.createElement(TextNumber, {
key: u.api,
label: "Faces stored",
name: "faceStorage",
min: "0",
max: 999999999,
defaultValue: u.faceStorage,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric static"
}, React.createElement(Acom.Atoms.Number, {
value: f.faceApi.offers["face-storage"].prices[u.region],
decimals: "2",
format: "currency"
})), React.createElement("label", {
className: "label"
}, "Per 1000 faces")), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: rt(u).faceStorage,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku && u.sku.faceStorageSku, React.createElement(SkuLabel, {
value: u.sku.faceStorageSku
})))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("span", {
className: "sub-total"
}, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku && u.sku.transactionSku, React.createElement(SkuLabel, {
value: u.sku.transactionSku
})))))), displayIf(u.api === p && u.languageTier === n, React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku, React.createElement(SkuLabel, {
value: u.sku.overageSku
}))))), displayIf(u.api === p && u.languageTier !== n, React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
key: u.api,
label: "Transactions",
name: "languageTransactions",
min: "0",
max: 999999999,
defaultValue: u.languageTransactions,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric static"
}, React.createElement(Acom.Atoms.Number, {
value: t(u).languageUnderstandingIntelligentServices,
decimals: "2",
format: "currency"
})), React.createElement("label", {
className: "label"
}, formatReact("Per {0} transactions", r(u).languageUnderstandingIntelligentServices))), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku && u.sku.overageSku, React.createElement(SkuLabel, {
value: u.sku.overageSku
}))))), displayIf(u.api === e && u.speechTier === n, React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku && u.sku.overageSku, React.createElement(SkuLabel, {
value: u.sku.overageSku
}))))), displayIf(u.api === e && u.speechTier === "speechtotext", React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
key: u.api,
label: "Transactions",
name: "shortSpeechTransactions",
min: "0",
max: 999999999,
defaultValue: u.shortSpeechTransactions,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric static"
}, React.createElement(Acom.Atoms.Number, {
value: t(u).speechtotext,
decimals: "2",
format: "currency"
})), React.createElement("label", {
className: "label"
}, "Per 1,000 transactions")), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku && u.sku.overageSku, React.createElement(SkuLabel, {
value: u.sku.overageSku
}))))), displayIf(u.api === e && u.speechTier === "longformspeech", React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
key: u.api,
label: "Hours",
name: "longSpeechHours",
min: "0",
max: 999999999,
defaultValue: u.longSpeechHours,
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku && u.sku.overageSku, React.createElement(SkuLabel, {
value: u.sku.overageSku
}))))), displayIf(u.api === e && u.speechTier === "texttospeech", React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
key: u.api,
label: "Transactions",
name: "textToSpeechTransactions",
min: "0",
max: 999999999,
defaultValue: u.textToSpeechTransactions,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric static"
}, React.createElement(Acom.Atoms.Number, {
value: t(u).texttospeech,
decimals: "2",
format: "currency"
})), React.createElement("label", {
className: "label"
}, "Per 1,000 transactions")), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku && u.sku.overageSku, React.createElement(SkuLabel, {
value: u.sku.overageSku
}))))), displayIf(u.api === w && u.webLanguageModelTier === n, React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku && u.sku.overageSku, React.createElement(SkuLabel, {
value: u.sku.overageSku
}))))), displayIf(u.api === w && u.webLanguageModelTier !== n, React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
key: u.api,
label: "Transactions",
name: "webLanguageModelTransactions",
min: "0",
max: 999999999,
defaultValue: u.webLanguageModelTransactions,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric static"
}, React.createElement(Acom.Atoms.Number, {
value: t(u).webLanguageModel,
decimals: "2",
format: "currency"
})), React.createElement("label", {
className: "label"
}, formatReact("Per {0} transactions", r(u).webLanguageModel))), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku && u.sku.overageSku, React.createElement(SkuLabel, {
value: u.sku.overageSku
}))))), displayIf(u.api === it && u.speakerRecognitionApi === "speakerverification", React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
key: u.speakerRecognitionApi,
label: "Thousands/mo",
name: "speakerverificationTransactions",
min: "0",
max: "9999",
defaultValue: u.speakerverificationTransactions,
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku && u.sku.overageSku, React.createElement(SkuLabel, {
value: u.sku.overageSku
}))))), displayIf(u.api === it && u.speakerRecognitionApi === "speakeridentification", React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
key: u.speakerRecognitionApi,
label: "Thousands/mo",
name: "speakeridentificationTransactions",
min: "0",
max: "9999",
defaultValue: u.speakeridentificationTransactions,
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku && u.sku.overageSku, React.createElement(SkuLabel, {
value: u.sku.overageSku
}))))), displayIf(u.api === b && u.academicKnowledgeTier === n, React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku && u.sku.overageSku, React.createElement(SkuLabel, {
value: u.sku.overageSku
}))))), displayIf(u.api === b && u.academicKnowledgeTier !== n, React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
key: u.academicKnowledgeTier,
label: "Transactions",
name: "academicKnowledgeTransactions",
min: "0",
max: "999999999",
defaultValue: u.academicKnowledgeTransactions,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric static"
}, React.createElement(Acom.Atoms.Number, {
value: t(u).academicKnowledge,
decimals: "2",
format: "currency"
})), React.createElement("label", {
className: "label"
}, formatReact("Per {0} transactions", r(u).academicKnowledge))), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku && u.sku.overageSku, React.createElement(SkuLabel, {
value: u.sku.overageSku
}))))), displayIf(u.api === d && u.translatorSpeechTier === n, React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku, React.createElement(SkuLabel, {
value: u.sku.overageSku
}))))), displayIf(u.api === d && u.translatorSpeechTier === o, React.createElement("div", {
className: "cost"
}, React.createElement(FactoredInput, {
key: "factor-translatorSpeechHoursFactor-" + u.translatorSpeechHoursFactor,
name: "translatorSpeechHours",
defaultValue: u.translatorSpeechHours,
factorsName: "translatorSpeechHoursFactor",
factorsDefault: u.translatorSpeechHoursFactor || "1",
factorUnit: "hours",
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "2px"
}
}, React.createElement("div", {
className: "numeric static"
}, React.createElement(Acom.Atoms.Number, {
value: f.translatorSpeech.offers.s1.price.global,
decimals: "2",
format: "currency"
})), React.createElement("label", {
className: "label"
}, "Per translation", React.createElement("br", null), "hour overage")), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku, React.createElement(SkuLabel, {
value: u.sku.overageSku
}))))), displayIf(u.api === d && u.translatorSpeechTier !== o && u.translatorSpeechTier !== n, React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
label: "Translator hours above the included amount",
name: "translatorOverages",
min: "0",
max: "9999",
defaultValue: u.translatorOverages,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "2px"
}
}, React.createElement("div", {
className: "numeric static"
}, React.createElement(Acom.Atoms.Number, {
value: f.translatorSpeech.offers[u.translatorSpeechTier].overagePrice.global,
decimals: "2",
format: "currency"
})), React.createElement("label", {
className: "label"
}, "Per translation", React.createElement("br", null), "hour overage")), React.createElement("div", {
className: "math"
}, "+"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "2px"
}
}, React.createElement("div", {
className: "numeric static"
}, React.createElement(Acom.Atoms.Number, {
value: f.translatorSpeech.offers[u.translatorSpeechTier].price.global,
decimals: "2",
format: "currency"
})), React.createElement("label", {
className: "label"
}, "Per month")), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku, React.createElement(SkuLabel, {
value: u.sku.overageSku
}))))), displayIf(u.api === g && u.translatorTextTier === n, React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku, React.createElement(SkuLabel, {
value: u.sku.overageSku
}))))), displayIf(u.api === g && u.translatorTextTier === o, React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
label: "Millions of characters above the included amount",
name: "translatedTextCharacters",
min: "0",
max: "9999",
defaultValue: u.translatedTextCharacters,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "2px"
}
}, React.createElement("div", {
className: "numeric static"
}, React.createElement(Acom.Atoms.Number, {
value: f.translatorText.offers.s1.price.global,
decimals: "2",
format: "currency"
})), React.createElement("label", {
className: "label"
}, "Per million characters")), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku, React.createElement(SkuLabel, {
value: u.sku.overageSku
}))))), displayIf(u.api === g && u.translatorTextTier !== o && u.translatorTextTier !== n, React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
label: "Millions of characters above the included amount",
name: "translatedTextCharacters",
min: "0",
max: "9999",
defaultValue: u.translatedTextCharacters,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "2px"
}
}, React.createElement("div", {
className: "numeric static"
}, React.createElement(Acom.Atoms.Number, {
value: f.translatorText.offers[u.translatorTextTier].overagePrice.global,
decimals: "2",
format: "currency"
})), React.createElement("label", {
className: "label"
}, "Per million", React.createElement("br", null), "character overage")), React.createElement("div", {
className: "math"
}, "+"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "2px"
}
}, React.createElement("div", {
className: "numeric static"
}, React.createElement(Acom.Atoms.Number, {
value: f.translatorText.offers[u.translatorTextTier].price.global,
decimals: "2",
format: "currency"
})), React.createElement("label", {
className: "label"
}, "Per month")), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku, React.createElement(SkuLabel, {
value: u.sku.overageSku
}))))), displayIf(u.api === i, React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
key: i,
label: "Thousands/mo",
name: "contentModeratorTransactions",
min: "0",
max: "20000",
defaultValue: u.contentModeratorTransactions,
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, u.sku)))))), displayIf(u.api === tt && u.customSpeechServiceTier === n, React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku, React.createElement(SkuLabel, {
value: u.sku.overageSku
}))))), displayIf(u.api === tt && u.customSpeechServiceTier !== n, React.createElement("div", null, React.createElement("div", {
className: "cost no-divider"
}, React.createElement("h3", null, "Acoustic Adaptation"), React.createElement(TextNumber, {
key: i,
label: "Hours",
name: "customSpeechServiceHours",
min: "0",
max: "9999",
defaultValue: u.customSpeechServiceHours,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(StaticNumber, {
label: "Per hour",
value: React.createElement(Acom.Atoms.Number, {
value: ft(u),
decimals: "2",
format: "currency"
})
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.customSpeechServiceHours * ft(u),
decimals: "2",
format: "currency"
}))))), React.createElement("div", {
className: "cost sub-module"
}, React.createElement("h3", null, "Short Phrase Recognition"), React.createElement(TextNumber, {
key: i,
label: "Thousands of transcriptions",
name: "customSpeechServiceShortPhrase",
min: "0",
max: "9999",
defaultValue: u.customSpeechServiceShortPhrase,
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: getGraduatedPrice(f.customSpeechServiceOffering.graduatedOffers["short-phrase-recognition"].prices, u.customSpeechServiceShortPhrase, f.customSpeechServiceOffering.graduatedOffers["short-phrase-recognition"].transcriptionIncrement),
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku, React.createElement(SkuLabel, {
value: u.sku.shortPhraseSku
})))), React.createElement("div", {
className: "cost sub-module"
}, React.createElement("h3", null, "Long Phrase Recognition"), React.createElement(TextNumber, {
key: i,
label: "Hours",
name: "customSpeechServiceLongPhrase",
min: "0",
max: "9999",
defaultValue: u.customSpeechServiceLongPhrase,
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: getGraduatedPrice(f.customSpeechServiceOffering.graduatedOffers["long-phrase-recognition"].prices, u.customSpeechServiceLongPhrase),
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku, React.createElement(SkuLabel, {
value: u.sku.longPhraseSku
})))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("span", {
className: "sub-total"
}, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))))))))
}
});
u = Acom.Calculator.createModule({
slug: "cognitive-services",
displayName: ut,
description: "Add smart API capabilities to enable contextual interactions",
pricingApi: "/api/v1/pricing/cognitive-services/calculator/",
component: et,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="cognitive-services" viewBox="-227.333 -143 193.076 114.371"> <path fill="#009580" d="M-36.636-86.307c-3.504-8.302-10.753-15.332-20.133-19.63c-4.324-14.539-16.426-29.079-34.475-29.079 c-0.575,0-1.156,0.015-1.741,0.044c-7.528-5.398-14.84-8.029-22.287-8.029c-4.489,0-9.076,0.991-13.674,2.952 c-3.405-1.785-7.312-2.715-11.487-2.715c-9.237,0-17.998,4.266-23.406,9.264c-1.702-0.401-3.475-0.604-5.304-0.604 c-13.779,0-27.433,11.384-31.124,25.186c-11.877,4.309-20.551,12.139-24.624,22.323c-3.952,9.882-3.083,20.93,2.384,30.313 c5.43,9.319,14.928,14.883,25.408,14.883c4.021,0,7.896-0.821,11.431-2.402c6.372,5.793,14.571,9.256,22.334,9.256 c2.707,0,5.299-0.4,7.749-1.193c6.286,5.17,15.922,7.109,23.74,7.109c9.226,0,17.242-2.437,22.557-6.693 c3.444,1.594,7.237,2.421,11.194,2.42h0.003c9.899,0,20.127-5.274,25.713-12.607c3.116,1.277,6.396,1.938,9.712,1.938 c0,0,0.002,0,0.003,0c10.816-0.002,20.86-7.063,25.589-17.989C-33.47-69.889-33.318-78.446-36.636-86.307z"/> <path fill="#FFFFFF" d="M-165.281-34.625v-33.997c0-4.219-3.432-7.65-7.65-7.65h-12.74v5.408h12.74 c1.236,0,2.242,1.006,2.242,2.242v33.091C-168.893-35.057-167.08-34.756-165.281-34.625z"/> <path fill="#FFFFFF" d="M-141.77-92.783h-17.115c-1.236,0-2.242-1.006-2.242-2.243v-40.697c-0.973,0.717-1.886,1.459-2.712,2.223 c-0.88-0.208-1.78-0.36-2.696-0.46v38.934c0,4.219,3.432,7.651,7.65,7.651h17.115c1.234,0,2.24,1.005,2.24,2.24v12.673h5.408 v-12.673C-134.121-89.353-137.553-92.783-141.77-92.783z"/> <path fill="#FFFFFF" d="M-69.771-71.164v-4.85h-5.41v4.85c0,1.236-1.004,2.242-2.24,2.242H-99.09v-38.774 c0-4.218-3.431-7.65-7.649-7.65h-14.741v5.408h14.741c1.236,0,2.241,1.005,2.241,2.242v74.031 c1.75,0.423,3.559,0.672,5.408,0.737v-30.585h21.668C-73.203-63.514-69.771-66.945-69.771-71.164z"/> <path fill="#FFFFFF" d="M-136.825-50.096c-6.643,0-12.048-5.406-12.048-12.05c0-6.645,5.405-12.051,12.048-12.051 c6.644,0,12.049,5.406,12.049,12.051C-124.776-55.501-130.182-50.096-136.825-50.096z M-136.825-69.196 c-3.886,0-7.048,3.163-7.048,7.051c0,3.887,3.162,7.05,7.048,7.05c3.887,0,7.049-3.163,7.049-7.05 C-129.776-66.033-132.938-69.196-136.825-69.196z"/> <path fill="#FFFFFF" d="M-194.415-61.564c-6.644,0-12.049-5.406-12.049-12.051c0-6.645,5.405-12.05,12.049-12.05 s12.049,5.406,12.049,12.05C-182.366-66.971-187.771-61.564-194.415-61.564z M-194.415-80.666c-3.887,0-7.049,3.163-7.049,7.05 c0,3.888,3.162,7.051,7.049,7.051s7.049-3.163,7.049-7.051C-187.366-77.503-190.528-80.666-194.415-80.666z"/> <path fill="#FFFFFF" d="M-72.43-73.066c-6.644,0-12.049-5.405-12.049-12.05c0-6.644,5.405-12.049,12.049-12.049 c6.643,0,12.047,5.405,12.047,12.049C-60.383-78.471-65.787-73.066-72.43-73.066z M-72.43-92.165 c-3.887,0-7.049,3.162-7.049,7.049s3.162,7.05,7.049,7.05c3.886,0,7.047-3.163,7.047-7.05S-68.544-92.165-72.43-92.165z"/> <path fill="#FFFFFF" d="M-130.226-100.64c-6.644,0-12.049-5.405-12.049-12.048c0-6.644,5.405-12.05,12.049-12.05 s12.049,5.406,12.049,12.05C-118.177-106.045-123.582-100.64-130.226-100.64z M-130.226-119.738c-3.887,0-7.049,3.163-7.049,7.05 c0,3.886,3.162,7.048,7.049,7.048s7.049-3.162,7.049-7.048C-123.177-116.576-126.339-119.738-130.226-119.738z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#cognitive-services"><\/use><\/svg>'
},
getInitialState: function () {
return {
api: h,
region: "us-west",
textAnalyticsSize: "free",
recommendationsSize: "free",
emotionTier: "basic",
speechTier: "speechtotext",
webLanguageModelTier: "standard",
textAnalyticsOverages: 0,
recommendationsOverages: 0,
computerVisionTier: "standard",
computerVisionTransactions: 0,
emotionTransactions: 0,
faceTier: "standard",
faceTransactions: 0,
faceStorage: 0,
languageTier: "free",
languageTransactions: 0,
shortSpeechTransactions: 0,
longSpeechHours: 0,
textToSpeechTransactions: 0,
webLanguageModelTransactions: 0,
speakerRecognitionApi: "speakerverification",
speakerverificationTransactions: 0,
speakeridentificationTransactions: 0,
autoSuggestSize: "s1",
autoSuggestOverages: 0,
spellCheckSize: "s1",
spellCheckOverages: 0,
searchSize: "s1",
searchOverages: 0,
academicKnowledgeTier: "standard",
academicKnowledgeTransactions: 0,
translatorSpeechTier: "free",
translatorSpeechHours: 0,
translatorSpeechHoursFactor: "1",
translatorOverages: 0,
translatorTextTier: "free",
translatedTextCharacters: 0,
contentModeratorTransactions: 0,
customSpeechServiceTier: n,
customSpeechServiceHours: 0,
customSpeechServiceShortPhrase: 0,
customSpeechServiceLongPhrase: 0
}
},
getPrice: function (f) {
var s = u.getPricingApiStore().data;
if (!s) return 0;
switch (f.api) {
case c:
return Math.ceil(f.autoSuggestOverages / s.autosuggest.overageIncrement) * t(f).autoSuggest + s.autosuggest.offers[f.autoSuggestSize].monthlyPrice.global;
case v:
return Math.ceil(f.spellCheckOverages / s.spellCheck.overageIncrement) * t(f).spellCheck + s.spellCheck.offers[f.spellCheckSize].monthlyPrice.global;
case a:
return Math.ceil(f.searchOverages / s.search.overageIncrement) * t(f).search + s.search.offers[f.searchSize].monthlyPrice.global;
case h:
return Math.ceil(f.textAnalyticsOverages / 1e3) * t(f).textAnalytics + s.textAnalytics.offers[f.textAnalyticsSize].monthlyPrice[f.region];
case l:
return Math.ceil(f.recommendationsOverages / 1e3) * t(f).recommendations + s.recommendations.offers[f.recommendationsSize].monthlyPrice[f.region];
case k:
return f.computerVisionTier === n ? 0 : Math.ceil(f.computerVisionTransactions / r(f).computerVision) * t(f).computerVision;
case y:
return Math.ceil(f.emotionTransactions / r(f).emotionApi) * t(f).emotionApi;
case nt:
return f.faceTier === n ? 0 : rt(f).transactions + rt(f).faceStorage;
case p:
return f.languageTier === n ? 0 : Math.ceil(f.languageTransactions / r(f).languageUnderstandingIntelligentServices) * t(f).languageUnderstandingIntelligentServices;
case e:
if (f.speechTier === "speechtotext") return Math.ceil(f.shortSpeechTransactions / 1e3) * t(f).speechtotext;
if (f.speechTier === "longformspeech") return getGraduatedPrice(s.speechApi.graduatedOffers["longformspeech-" + f.region].prices, f.longSpeechHours);
if (f.speechTier === "texttospeech") return Math.ceil(f.textToSpeechTransactions / 1e3) * t(f).texttospeech;
case w:
return f.webLanguageModelTier === n ? 0 : Math.ceil(f.webLanguageModelTransactions / r(f).webLanguageModel) * t(f).webLanguageModel;
case it:
if (f.speakerRecognitionApi === "speakerverification") return getGraduatedPrice(s.speakerRecognitionApi.offers["speakerverification-" + f.region].prices, f.speakerverificationTransactions, 1e3);
if (f.speakerRecognitionApi === "speakeridentification") return getGraduatedPrice(s.speakerRecognitionApi.offers["speakeridentification-" + f.region].prices, f.speakeridentificationTransactions, 1e3);
case b:
return Math.ceil(f.academicKnowledgeTransactions / r(f).academicKnowledge) * t(f).academicKnowledge;
case d:
return f.translatorSpeechTier === n ? 0 : f.translatorSpeechTier === o ? f.translatorSpeechHours * f.translatorSpeechHoursFactor * s.translatorSpeech.offers.s1.price.global : f.translatorOverages * s.translatorSpeech.offers[f.translatorSpeechTier].overagePrice.global + s.translatorSpeech.offers[f.translatorSpeechTier].price.global;
case g:
return f.translatorTextTier === n ? 0 : f.translatorTextTier === o ? f.translatedTextCharacters * s.translatorText.offers.s1.price.global : f.translatedTextCharacters * s.translatorText.offers[f.translatorTextTier].overagePrice.global + s.translatorText.offers[f.translatorTextTier].price.global;
case i:
return getGraduatedPrice(s.contentModerator.offers[i].prices, f.contentModeratorTransactions, 1e3);
case tt:
return f.customSpeechServiceTier === n ? 0 : f.customSpeechServiceHours * ft(f) + getGraduatedPrice(s.customSpeechServiceOffering.graduatedOffers["short-phrase-recognition"].prices, f.customSpeechServiceShortPhrase, s.customSpeechServiceOffering.graduatedOffers["short-phrase-recognition"].transcriptionIncrement) + getGraduatedPrice(s.customSpeechServiceOffering.graduatedOffers["long-phrase-recognition"].prices, f.customSpeechServiceLongPhrase) + s.customSpeechServiceOffering.offers[f.customSpeechServiceTier].monthlyPrice[f.region]
}
},
getDisplayName: function (n) {
return n.name || ut
},
willUpdate: function (n, t) {
return n.textAnalyticsSize !== t.textAnalyticsSize && (t.textAnalyticsOverages = 0), n.api !== t.api && t.api && (t.region = st(t.api)), n.recommendationsSize !== t.recommendationsSize && (t.recommendationsOverages = 0), n.translatorSpeechHoursFactor !== t.translatorSpeechHoursFactor && (t.translatorSpeechHours = factorInput(n.translatorSpeechHoursFactor, t.translatorSpeechHoursFactor, n.translatorSpeechHours)), t
},
getDescription: function (t) {
var r = u.getPricingApiStore().data,
f = "";
if (!r) return "";
switch (t.api) {
case c:
f = Core.Util.FormatString("Text Analytics API: {0} size, {1} included transactions with {2} overages.", t.autoSuggestSize, r.autosuggest.offers[t.autoSuggestSize].maximumTransactions, t.autoSuggestOverages);
break;
case h:
f = Core.Util.FormatString("Text Analytics API: {0} size, {1} included transactions with {2} overages.", t.textAnalyticsSize, r.textAnalytics.offers[t.textAnalyticsSize].maximumTransactions, t.textAnalyticsOverages);
break;
case l:
f = Core.Util.FormatString("Recommendations API: {0} size, {1} inluded transactions with {2} overages.", t.recommendationsSize, r.recommendations.offers[t.recommendationsSize].maximumTransactions, t.recommendationsOverages);
break;
case a:
f = Core.Util.FormatString("Search API: {0} size, {1} inluded transactions with {2} overages.", t.searchSize, r.search.offers[t.searchSize].maximumTransactions, t.searchOverages);
break;
case v:
f = Core.Util.FormatString("Spell Check API: {0} size, {1} inluded transactions with {2} overages.", t.spellCheckSize, r.spellCheck.offers[t.spellCheckSize].maximumTransactions, t.spellCheckOverages);
break;
case e:
f = t.speechTier !== "longformspeech" ? Core.Util.FormatString("Bing Speech API: {0} tier with {1} transactions.", t.speechTier, t.speechTier === n ? r.speechApi.offers.free.maximumTransactions : t.speechTier === "speechtotext" ? t.shortSpeechTransactions : t.textToSpeechTransactions) : Core.Util.FormatString("Bing Speech API: {0} tier with {1} hours.", t.speechTier, t.longSpeechHours);
break;
case y:
f = t.emotionTier !== "basic" ? Core.Util.FormatString("Emotion API: {0} tier, {1} Maximum transactions per second, {2} Maximum transactions per month, {3} Video uploads per month, {4} Uploads per minute, {5} Status queries per month, {6} Queries per minute, with {7} transactions.", t.emotionTier, r.emotionApi.offers[t.emotionTier].maximumTransactionsPerSecond, r.emotionApi.offers[t.emotionTier].maximumTransactions || "unlimited", r.emotionApi.offers[t.emotionTier].videoUploads, r.emotionApi.offers[t.emotionTier].uploadsPerMinute, r.emotionApi.offers[t.emotionTier].statusQueries, r.emotionApi.offers[t.emotionTier].queriesPerMinute, t.emotionTier === n ? 0 : t.emotionTransactions) : Core.Util.FormatString("Emotion API: {0} tier, {1} transactions (Up to {2} transactions per second, Face Rectangle specified).", t.emotionTier, t.emotionTransactions, r.emotionApi.offers[t.emotionTier].maximumTransactionsPerSecond);
break;
case nt:
f = t.faceTier === n ? Core.Util.FormatString("Face API: {0} tier {1} included transactions.", t.faceTier, r.faceApi.offers["face-api-free"].maximumTransactions) : Core.Util.FormatString("Face API: {0} tier {1} transactions (Up to {2} transactions per second) with {3} faces stored per month.", t.faceTier, t.faceTransactions * r.faceApi.graduatedOffers["face-api-standard"].transactionIncrement, r.faceApi.graduatedOffers["face-api-standard"].maximumTransactionsPerSecond, t.faceStorage);
break;
case p:
f = t.languageTier === n ? Core.Util.FormatString("Language Understanding Intelligent Service API: {0} tier with {1} included transactions.", t.languageTier, r.languageUnderstandingIntelligentServices.offers[t.languageTier].maximumTransactions) : Core.Util.FormatString("Language Understanding Intelligent Service API: {0} tier, {1} transactions ({2} transactions per second).", t.languageTier, t.languageTransactions, r.languageUnderstandingIntelligentServices.offers[t.languageTier].maximumTransactionsPerSecond);
break;
case w:
f = Core.Util.FormatString("Web Language Model API: {0} tier, {1} transactions.", t.webLanguageModelTier, t.webLanguageModelTier === n ? r.webLanguageModel.offers[t.webLanguageModelTier].maximumTransactions : t.webLanguageModelTransactions);
break;
case b:
f = Core.Util.FormatString("Academic Knowledge API: {0} tier {1} transactions.", t.academicKnowledgeTier, t.academicKnowledgeTier === n ? r.academicKnowledgeApi.offers.free.maximumTransactions : t.academicKnowledgeTransactions);
break;
case k:
f = t.computerVisionTier === n ? Core.Util.FormatString("Computer Vision API: {0} tier {1} included transactions.", t.computerVisionTier, r.computerVision.offers[t.computerVisionTier].maximumTransactions) : Core.Util.FormatString("Computer Vision API: {0} tier, {1} transactions (Up to {1} transactions per second).", t.computerVisionTier, t.computerVisionTransactions, r.computerVision.offers[t.computerVisionTier].maximumTransactionsPerSecond);
break;
case d:
f = t.translatorSpeechTier === n || t.translatorSpeechTier === "s1" ? Core.Util.FormatString("Translator Speech API: {0} tier with {1} hours of speech translation.", t.translatorSpeechTier, t.translatorSpeechTier === n ? r.translatorSpeech.offers.free.includedHours : t.translatorSpeechHours) : Core.Util.FormatString("Translator Speech API: {0} tier with {1} included hours of speech translation and {2} overage hours.", t.translatorSpeechTier, r.translatorSpeech.offers[t.translatorSpeechTier].includedHours, t.translatorOverages);
break;
case g:
f = t.translatorTextTier === n || t.translatorTextTier === "s1" ? Core.Util.FormatString("Translator Text API: {0} tier with {1} million translated characters.", t.translatorTextTier, t.translatorTextTier === n ? r.translatorText.offers.free.maximumCharacters : t.translatedTextCharacters) : Core.Util.FormatString("Translator Text API: {0} tier with {1} included translated characters and {2} million of overage characters.", t.translatorTextTier, r.translatorText.offers[t.translatorTextTier].maximumCharacters, t.translatedTextCharacters);
break;
case it:
f = Core.Util.FormatString("Speaker API: {0} type with {1} thousand transactions.", t.speakerRecognitionApi, t.speakerRecognitionApi === "speakerverification" ? t.speakerverificationTransactions : t.speakeridentificationTransactions);
break;
case i:
f = formatString("{0} transactions per month at {1} transactions per second ({2} maximum characters or {3} MB image size per transaction).", (t.contentModeratorTransactions * 1e3).toLocaleString(Acom.currentCulture), r.contentModerator.offers[i].transactionsPerSecond, r.contentModerator.offers[i].maximumCharacters.toLocaleString(Acom.currentCulture), r.contentModerator.offers[i].maximumImageSize);
case tt:
f = t.customSpeechServiceTier === n ? formatString("{0} concurrent transcriptions, {1} Acoustic Model Adaptations (up to 1 hour each), {2} Language Model Adaptations, {3} Transcriptions (Short Phrase or Long Dictation).", r.customSpeechServiceOffering.offers.free.maximumConcurrentTranscriptions, r.customSpeechServiceOffering.offers.free.maximumAcousticModelAdaptations, r.customSpeechServiceOffering.offers.free.maximumLanguageModelAdaptations, r.customSpeechServiceOffering.offers.free.maximumTranscriptions.toLocaleString(Acom.currentCulture)) : formatString("{0} concurrent transcriptions, {1} Accoustic Adaption hours, {2} Short Phrase Recognition transcriptions, {3} Long Phrase Recognition transcriptions.", r.customSpeechServiceOffering.offers[t.customSpeechServiceTier].maximumConcurrentTranscriptions, t.customSpeechServiceHours, t.customSpeechServiceShortPhrase, t.customSpeechServiceLongPhrase)
}
return f
},
getSku: function (n) {
var r = u.getPricingApiStore().data,
t;
if (!r) return null;
t = {};
switch (n.api) {
case c:
t.monthlySku = f(r.autosuggest.offers, n.autoSuggestSize, "monthlySkus", "global");
t.overageSku = f(r.autosuggest.offers, n.autoSuggestSize, "overageSkus", "global");
break;
case v:
t.monthlySku = f(r.spellCheck.offers, n.spellCheckSize, "monthlySkus", "global");
t.overageSku = f(r.spellCheck.offers, n.spellCheckSize, "overageSkus", "global");
break;
case a:
t.monthlySku = f(r.search.offers, n.searchSize, "monthlySkus", "global");
t.overageSku = f(r.search.offers, n.searchSize, "overageSkus", "global");
break;
case h:
t.monthlySku = f(r.textAnalytics.offers, n.textAnalyticsSize, "monthlySkus", n.region);
t.overageSku = f(r.textAnalytics.offers, n.textAnalyticsSize, "overageSkus", n.region);
break;
case l:
t.monthlySku = f(r.recommendations.offers, n.recommendationsSize, "monthlySkus", n.region);
t.overageSku = f(r.recommendations.offers, n.recommendationsSize, "overageSkus", n.region);
break;
case k:
t.overageSku = r.computerVision.offers[n.computerVisionTier].skus[n.region];
break;
case y:
t.overageSku = r.emotionApi.offers[n.emotionTier].skus[n.region];
break;
case nt:
t.transactionSku = r.faceApi.graduatedOffers["face-api-standard"].sku;
n.faceTier === "standard" && (t.faceStorageSku = r.faceApi.offers["face-storage"].skus[n.region]);
break;
case p:
t.overageSku = r.languageUnderstandingIntelligentServices.offers.basic.skus[n.region];
break;
case e:
n.speechTier === "speechtotext" ? t.overageSku = r.speechApi.offers.speechtotext.skus[n.region] : n.speechTier === "longformspeech" ? t.overageSku = r.speechApi.graduatedOffers["longformspeech-" + n.region].sku : n.speechTier === "texttospeech" && (t.overageSku = r.speechApi.offers.texttospeech.skus[n.region]);
break;
case w:
t.overageSku = r.webLanguageModel.offers.standard.skus[n.region];
break;
case it:
n.speakerRecognitionApi === "speakerverification" ? t.overageSku = r.speakerRecognitionApi.offers["speakerverification-" + n.region].sku : n.speakerRecognitionApi === "speakeridentification" && (t.overageSku = r.speakerRecognitionApi.offers["speakeridentification-" + n.region].sku);
break;
case b:
t.overageSku = r.academicKnowledgeApi.offers[n.academicKnowledgeTier].skus[n.region];
break;
case i:
t = r.contentModerator.offers[i].sku;
case tt:
t.shortPhraseSku = r.customSpeechServiceOffering.graduatedOffers["short-phrase-recognition"].sku;
t.longPhraseSku = r.customSpeechServiceOffering.graduatedOffers["long-phrase-recognition"].sku
}
return t
}
});
Acom.Calculator.Actions.modules.register(u)
}();
! function () {
"use strict";
function u() {
var n = Acom.Calculator.Stores.channelCalculator.currentDiscount(),
t = !0;
return ["ea"].forEach(function (i) {
n && n.indexOf(i) === 0 && (t = !1)
}), t
}
function o(t) {
var u = n.getPricingApiStore().data,
r;
if (["usgov-iowa", "usgov-virginia"].indexOf(t.region) >= 0) return "Government Zone";
r = i(t, u);
switch (r) {
case "zone1":
return Core.Util.FormatString("{0}: {1}, {2}", "Zone 1", "North America", "Europe");
case "zone2":
return Core.Util.FormatString("{0}: {1}, {2}, {3}", "Zone 2", "Asia Pacific", "Japan", "Australia");
case "zone3":
return Core.Util.FormatString("{0}: {1}", "Zone 3", "Brazil");
case "zone4":
return Core.Util.FormatString("{0}", "DE (trustee): Germany");
default:
return ""
}
return ""
}
function i(n, t) {
for (var i in t.availableRegionsPerZone)
if (t.availableRegionsPerZone[i].indexOf(n.region) >= 0) return i;
return ""
}
function f(t) {
var i = n.getSecondaryPricingApiStore().data;
return i ? getGraduatedPrice(i.offers["block-basic-lrs-" + t.region].prices, t.storageUnits * t.storageFactorUnits) : 0
}
function e(t) {
var i = n.getPricingApiStore().data;
return i ? getGraduatedPrice(i.offers[t.region].prices, t.bandwidthUnits * t.bandwidthFactorUnits) : 0
}
var t = "Azure Container Registry",
r, n;
r = React.createClass({
displayName: "ContainerRegistry",
onChange: Acom.Calculator.onChange,
render: function () {
var n = this.props,
i = n.dataStore.pricingData;
return React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: n.dataStore.module.icon
}), " ", React.createElement("span", {
className: "heading3"
}, t, React.createElement("sup", {
className: "preview normal-font"
}, "Preview"))), React.createElement("div", {
className: "detail"
}, React.createElement("p", null, "Azure Container Registry ", React.createElement("sup", null, "Preview"), " itself is a free service. You are only charged for the underlying infrastructure resources like storage used to store your images and data transfers."), React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Region",
name: "region",
options: i.regions,
defaultValue: n.region
}))), React.createElement("div", {
className: "cost"
}, React.createElement("h3", null, "Storage"), React.createElement("p", null, "Your images will be stored in Locally Redundant (LRS) Blob storage."), React.createElement(FactoredInput, {
key: "factor-storage-" + n.storageFactorUnits,
name: "storageUnits",
defaultValue: n.storageUnits,
factorsName: "storageFactorUnits",
factorsDefault: n.storageFactorUnits,
factorUnit: "gbs",
min: "0",
max: "5000",
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("span", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: f(n),
decimals: "2",
format: "currency"
}))))), React.createElement("div", {
className: "cost"
}, React.createElement("h3", null, "Bandwidth"), displayIf(u(), React.createElement("p", null, React.createElement("strong", null, "NOTE:"), React.createElement("br", null), "The first 5GB/Month of data transfer is free in each zone.")), React.createElement("h3", null, o(n)), React.createElement(FactoredInput, {
key: "factor-storage-" + n.bandwidthFactorUnits,
name: "bandwidthUnits",
defaultValue: n.bandwidthUnits,
factorsName: "bandwidthFactorUnits",
factorsDefault: n.bandwidthFactorUnits,
factorUnit: "gbs",
min: "0",
max: n.bandwidthFactorUnits === "1" ? 9999 : 500,
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: e(n),
decimals: "2",
format: "currency"
}))))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("span", {
className: "sub-total"
}, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n.price,
decimals: "2",
format: "currency"
}))))))
}
});
n = Acom.Calculator.createModule({
slug: "container-registry",
displayName: t,
description: "Store and manage container images across all types of Azure deployments",
pricingApi: "/api/v1/pricing/data-transfers/calculator/",
component: r,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="container-registry" viewBox="0 0 50 50"> <style>.st0{fill:#59b4d9}.st1{fill:#959595}.st2{fill:#b3b4b5}.st3{fill:#7a7a7a}.st4{opacity:.2;fill:#fff}<\/style> <path class="st0" d="M15 34H9c-4-1-7.085-4.151-7.085-8.33 0-3.459 2.232-6.617 5.263-7.819a10.937 10.937 0 0 1-.055-1.092c0-5.94 4.817-10.753 10.757-10.753a10.74 10.74 0 0 1 8.376 4.019 8.672 8.672 0 0 1 3.924-.927c4.704 0 8.778 4.173 8.944 8.839l-16.063-6.625L15 16.167V34z"/> <path class="st1" d="M45 38.435l-22.132 4.218.102-15.559L45 31.179v7.256zM22.945 13.348L45 21.649v8.311l-22.017-4.691"/> <path class="st2" d="M22.983 25.268l-5.999 2.789v-11.08l5.96-3.63M44 29l-20-4.563V14.5l20 7.375V29zm-11-3.563l2 .548v-6.478l-2-.7v6.63zm-2-7.268l-2-.722v6.926l2 .564v-6.768zm6 8.363l1.972.52.034-6.175-2.006-.67v6.325zm-12-3.187l2 .515v-7.07l-2-.658v7.213zm18-1.101l-2-.7v6.034l2 .548v-5.882zM24 28.75v12.833l20-3.667V31.833L24 28.75zm1 11.333v-9.875l2 .25v9.292l-2 .333zm6-1.01l-2 .365v-8.73L31 31v8.073zm2-.288v-7.577l2 .25v6.958l-2 .369zm6-1.052l-2 .34v-6.365L39 32v5.733zm4.068-.647L41 37.444v-5.236l1.931.241.137 4.637z"/> <path class="st1" d="M19.009 25.077l-1 .585v-7.88l1-.538v7.833zM21 16.098l-.997.688L20 24.44l1-.547v-7.795z"/> <path class="st2" d="M16.984 39.1l-.038-9.094 6.021-2.912L23 42.691"/> <path class="st1" d="M18.887 39.066l-.91-.463v-7.679l.91-.41v8.552zm2.147-9.518l-.993.435-.038 9.69 1.032.535v-10.66z"/> <path class="st3" d="M42.981 22.892l-17.977-6.031.029-.779 17.948 6.175v.635zm-.05 9.556l-17.899-2.246v.777l17.916 2.119-.017-.65zM21 17.129v-.982l-2.904 1.611-.039.825L21 17.129zm-3.019 14.369l3.049-1.104.006-.847-3.061 1.374.006.577z"/> <path class="st4" d="M45 21.695v16.74L23 42.65l16.669-22.973L45 21.695z"/> <\/symbol><\/defs><\/svg><svg><use xlink:href="#container-registry"><\/use><\/svg>'
},
secondaryPricingApi: "/api/v1/pricing/storage/calculator/",
getInitialState: function () {
var n = u() ? 5 : 0;
return {
region: "us-west",
storageUnits: 0,
storageFactorUnits: "1",
bandwidthUnits: 0,
bandwidthFactorUnits: "1",
zone: "zone1"
}
},
getPrice: function (t) {
var i = n.getPricingApiStore().data;
return i ? f(t) + e(t) : 0
},
getDisplayName: function (n) {
return n.name || t
},
willUpdate: function (t, r) {
var u = n.getPricingApiStore().data;
return t.bandwidthFactorUnits !== r.bandwidthFactorUnits && (r.bandwidthUnits = r.bandwidthFactorUnits === "1" ? 5 : 5), r.zone = i(t, u), r
},
getSku: function () {
var t = n.getPricingApiStore().data;
return !t, ""
},
getDescription: function (t) {
var f = {
1: "GB",
1024: "TB"
},
r, u, e;
if (["usgov-iowa", "usgov-virginia"].indexOf(t.region) >= 0) r = "Government Zone";
else {
if (u = n.getPricingApiStore().data, !u) return undefined;
e = i(t, u);
switch (e) {
case "zone1":
r = Core.Util.FormatString("{0} ({1}, {2})", "Zone 1", "North America", "Europe");
break;
case "zone2":
r = Core.Util.FormatString("{0} ({1}, {2}, {3})", "Zone 2", "Asia Pacific", "Japan", "Australia");
break;
case "zone3":
r = Core.Util.FormatString("{0} ({1})", "Zone 3", "Brazil");
break;
case "zone4":
r = Core.Util.FormatString("{0}", "DE (trustee): Germany");
default:
r = ""
}
}
return Core.Util.FormatString("{0}{1} of storage, {2}{3} of bandwidth in {4}.", t.storageUnits, f[t.storageFactorUnits], t.bandwidthUnits, f[t.bandwidthFactorUnits], r)
}
});
Acom.Calculator.Actions.modules.register(n)
}();
! function () {
"use strict";
function t(t, i) {
var f = n.getPricingApiStore().data,
u = n.getSecondaryPricingApiStore().data,
r;
return !f || !u ? undefined : (r = u.offers["linux-" + i + "-standard"], r === Object(r) ? typeof r.prices[t.region] != "undefined" && r : r)
}
function u(n, i) {
return !!t(n, i)
}
function e(n, i) {
var r = t(n, i);
return r && r.prices[n.region]
}
function i(t) {
var i = n.getPricingApiStore().data,
r = n.getSecondaryPricingApiStore().data;
return !i || !r ? 0 : {
agents: e(t, t.agentsSize) * t.agentsCount * t.agentsHours * (t.agentsHoursFactor || "1"),
master: t.mastersCount * t.mastersHours * (t.mastersHoursFactor || "1") * r.offers[i.masterNodeOfferSlug].prices[t.region]
}
}
function o(n, t) {
return !t || t.length == 0 ? "" : t.map(function (t) {
if (t.slug === n) return t.displayName.toLowerCase()
})
}
var r = "Azure Container Service",
f, n;
f = React.createClass({
displayName: "ContainerService",
onChange: Acom.Calculator.onChange,
getMasterData: function () {
var t = this.props.dataStore.pricingData,
i = this.props.dataStore.secondaryPricingData,
n;
return !t || !i ? React.createElement("p", null) : (n = i.offers[t.masterNodeOfferSlug], React.createElement("p", null, formatString("Linux D2 Standard: {0} cores, {1} GB RAM, {2} GB disk", n.cores, n.ram, n.diskSize)))
},
render: function () {
var n = this.props,
f = n.dataStore.pricingData,
o = f.sizes.filter(function (t) {
return u(n, t.slug)
}).map(function (i) {
var r = t(n, i.slug),
u = e(n, i.slug);
return {
slug: i.slug,
values: {
displayStrings: [i.displayName, formatString("{0} cores", r.cores), formatString("{0} GB RAM", r.ram), formatString("{0} GB disk", r.diskSize)],
number: {
value: u,
decimals: 3,
format: "currency",
rate: "{0}/hr"
}
}
}
});
return React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: n.dataStore.module.icon
}), " ", React.createElement("input", {
className: "text-input",
name: "name",
placeholder: r,
defaultValue: n.name
})), React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Region",
name: "region",
options: f.regions,
defaultValue: n.region
}))), React.createElement("div", {
className: "cost no-divider"
}, React.createElement("h4", null, "Masters"), this.getMasterData(), React.createElement(TextNumber, {
label: "Virtual Machines",
name: "mastersCount",
min: "1",
max: "999",
defaultValue: n.mastersCount,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(FactoredInput, {
key: "factors-masterHours-" + n.mastersHoursFactor,
name: "mastersHours",
defaultValue: n.mastersHours,
factorsName: "mastersHoursFactor",
factorsDefault: n.mastersHoursFactor || "1",
factorUnit: "hours",
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: i(n).master,
decimals: "2",
format: "currency"
}))), displayIf(n.displaySku && n.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, n.sku))))), React.createElement("div", {
className: "cost"
}, React.createElement("h4", null, "Agents"), React.createElement("div", {
className: "wa-dropdownList no-divider"
}, React.createElement(DetailedDropdown, {
key: "agentRegion-" + n.region,
label: "Instance size",
name: "agentsSize",
options: o,
delimiters: ["colon", "comma"],
defaultValue: n.agentsSize,
onChange: this.onChange
}))), React.createElement("div", {
className: "cost no-divider"
}, React.createElement(TextNumber, {
label: "Virtual Machines",
name: "agentsCount",
min: "1",
max: "999",
defaultValue: n.agentsCount,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(FactoredInput, {
key: "factor-agentHours-" + n.agentsHoursFactor,
name: "agentsHours",
defaultValue: n.agentsHours,
factorsName: "agentsHoursFactor",
factorsDefault: n.agentsHoursFactor || "1",
factorUnit: "hours",
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: i(n).agents,
decimals: "2",
format: "currency"
}))), displayIf(n.displaySku && n.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, n.sku))))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("span", {
className: "sub-total"
}, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n.price,
decimals: "2",
format: "currency"
}))))))
}
});
n = Acom.Calculator.createModule({
slug: "container-service",
displayName: r,
description: "Use Docker-based tools to deploy and manage containers",
pricingApi: "/api/v1/pricing/container-service/calculator/",
secondaryPricingApi: "/api/v1/pricing/virtual-machines/calculator/",
component: f,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="container-service" viewBox="-454 256 50 50"> <polygon fill="#804998" points="-431.1,271.9 -438.8,274.9 -438.8,262.5 -431.1,265.2"/> <path fill="#804998" d="M-445.7,264.6v8.1l5.7,2.2v-12.3L-445.7,264.6z M-445.1,272.1l-0.3-0.1v-6.7l0.3-0.1l0.3-0.1l0.3-0.1v7.3 l-0.3-0.1L-445.1,272.1z M-443.6,272.5l-0.4-0.1v-7.5l0.4-0.1l0.4-0.1l0.4-0.1v8.2l-0.4-0.1L-443.6,272.5z M-441.8,273.1l-0.5-0.2 v-8.5l0.5-0.1l0.5-0.2l0.6-0.2v9.5l-0.6-0.2L-441.8,273.1z"/> <polygon fill="#804998" points="-413.2,271.9 -420.9,274.9 -420.9,262.5 -413.2,265.2"/> <path fill="#804998" d="M-427.8,264.6v8.1l5.7,2.2v-12.3L-427.8,264.6z M-427.2,272.1l-0.3-0.1v-6.7l0.3-0.1l0.3-0.1l0.3-0.1v7.3 l-0.3-0.1L-427.2,272.1z M-425.7,272.5l-0.4-0.1v-7.5l0.4-0.1l0.4-0.1l0.4-0.1v8.2l-0.4-0.1L-425.7,272.5z M-423.9,273.1l-0.5-0.2 v-8.5l0.5-0.1l0.5-0.2l0.6-0.2v9.5l-0.6-0.2L-423.9,273.1z"/> <polygon fill="#804998" points="-431.1,296.5 -438.8,299.5 -438.8,287.1 -431.1,289.8"/> <path fill="#804998" d="M-445.7,289.2v8.1l5.7,2.2v-12.3L-445.7,289.2z M-445.1,296.7l-0.3-0.1v-6.7l0.3-0.1l0.3-0.1l0.3-0.1v7.3 l-0.3-0.1L-445.1,296.7z M-443.6,297.1l-0.4-0.1v-7.5l0.4-0.1l0.4-0.1l0.4-0.1v8.2l-0.4-0.1L-443.6,297.1z M-441.8,297.7l-0.5-0.2 V289l0.5-0.1l0.5-0.2l0.6-0.2v9.5l-0.6-0.2L-441.8,297.7z"/> <polygon fill="#804998" points="-413.2,296.5 -420.9,299.5 -420.9,287.1 -413.2,289.8"/> <path fill="#804998" d="M-427.8,289.2v8.1l5.7,2.2v-12.3L-427.8,289.2z M-427.2,296.7l-0.3-0.1v-6.7l0.3-0.1l0.3-0.1l0.3-0.1v7.3 l-0.3-0.1L-427.2,296.7z M-425.7,297.1l-0.4-0.1v-7.5l0.4-0.1l0.4-0.1l0.4-0.1v8.2l-0.4-0.1L-425.7,297.1z M-423.9,297.7l-0.5-0.2 V289l0.5-0.1l0.5-0.2l0.6-0.2v9.5l-0.6-0.2L-423.9,297.7z"/> <polygon fill="#804998" points="-421.6,284.2 -429.2,287.1 -429.2,274.8 -421.6,277.5"/> <path fill="#804998" d="M-436.2,276.8v8.1l5.7,2.2v-12.3L-436.2,276.8z M-435.6,284.3l-0.3-0.1v-6.7l0.3-0.1l0.3-0.1l0.3-0.1v7.3 l-0.3-0.1L-435.6,284.3z M-434.1,284.8l-0.4-0.1v-7.5l0.4-0.1l0.4-0.1l0.4-0.1v8.2l-0.4-0.1L-434.1,284.8z M-432.3,285.4l-0.5-0.2 v-8.5l0.5-0.1l0.5-0.2l0.6-0.2v9.5l-0.6-0.2L-432.3,285.4z"/> <polygon fill="#804998" points="-439.4,284.2 -447,287.1 -447,274.8 -439.4,277.5"/> <path fill="#804998" d="M-454,276.8v8.1l5.7,2.2v-12.3L-454,276.8z M-453.4,284.3l-0.3-0.1v-6.7l0.3-0.1l0.3-0.1l0.3-0.1v7.3l-0.3-0.1 L-453.4,284.3z M-451.9,284.8l-0.4-0.1v-7.5l0.4-0.1l0.4-0.1l0.4-0.1v8.2l-0.4-0.1L-451.9,284.8z M-450.1,285.4l-0.5-0.2v-8.5 l0.5-0.1l0.5-0.2l0.6-0.2v9.5l-0.6-0.2L-450.1,285.4z"/> <polygon fill="#804998" points="-404,284.2 -411.6,287.1 -411.6,274.8 -404,277.5"/> <polygon fill="#FFF" opacity="0.2" points="-431.1,271.9 -438.8,274.9 -438.8,262.5 -431.1,265.2"/> <polygon fill="#FFF" opacity="0.2" points="-413.2,271.9 -420.9,274.9 -420.9,262.5 -413.2,265.2"/> <polygon fill="#FFF" opacity="0.2" points="-431.1,296.5 -438.8,299.5 -438.8,287.1 -431.1,289.8"/> <polygon fill="#FFF" opacity="0.2" points="-413.2,296.5 -420.9,299.5 -420.9,287.1 -413.2,289.8"/> <polygon fill="#FFF" opacity="0.2" points="-421.6,284.2 -429.2,287.1 -429.2,274.8 -421.6,277.5"/> <polygon fill="#FFF" opacity="0.2" points="-439.4,284.2 -447,287.1 -447,274.8 -439.4,277.5"/> <polygon fill="#FFF" opacity="0.2" points="-404,284.2 -411.6,287.1 -411.6,274.8 -404,277.5"/> <path fill="#804998" d="M-418.6,276.8v8.1l5.7,2.2v-12.3L-418.6,276.8z M-418,284.3l-0.3-0.1v-6.7l0.3-0.1l0.3-0.1l0.3-0.1v7.3 l-0.3-0.1L-418,284.3z M-416.5,284.8l-0.4-0.1v-7.5l0.4-0.1l0.4-0.1l0.4-0.1v8.2l-0.4-0.1L-416.5,284.8z M-414.7,285.4l-0.5-0.2 v-8.5l0.5-0.1l0.5-0.2l0.6-0.2v9.5l-0.6-0.2L-414.7,285.4z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#container-service"><\/use><\/svg>'
},
getInitialState: function () {
return {
region: "us-west",
mastersCount: 1,
mastersHours: 744,
mastersHoursFactor: "1",
agentsSize: "a0",
agentsCount: 1,
agentsHours: 744,
agentsHoursFactor: "1"
}
},
getPrice: function (t) {
return n.getPricingApiStore().data ? i(t).agents + i(t).master : 0
},
getDisplayName: function (n) {
return n.name || r
},
willUpdate: function (t, i) {
var e = n.getPricingApiStore().data,
r, f;
if (!u(i, i.size))
for (f = 0; r = e.sizes[f]; f++)
if (u(i, r.slug)) {
i.size = r.slug;
break
}
return t.mastersHoursFactor !== i.mastersHoursFactor && (i.mastersHours = factorInput(t.mastersHoursFactor, i.mastersHoursFactor, t.mastersHours)), t.agentsHoursFactor !== i.agentsHoursFactor && (i.agentsHours = factorInput(t.agentsHoursFactor, i.agentsHoursFactor, t.agentsHours)), i
},
getSku: function (i) {
if (!n.getPricingApiStore().data) return "";
var r = t(i, i.size),
u = i.region + "-" + i.type;
return r && r.skus[u]
},
getDescription: function (n) {
return Core.Util.FormatString("Masters: {0} D2 Linux VM(s) x {1} {2}; Agents: {3} {4} Linux VM(s) x {5} {6}", n.mastersCount, n.mastersHours, o(n.mastersHoursFactor, timeFactors), n.agentsCount, n.agentsSize.toUpperCase(), n.agentsHours, o(n.agentsHoursFactor, timeFactors))
}
});
Acom.Calculator.Actions.modules.register(n)
}();
! function () {
"use strict";
function i(t) {
var i = n.getPricingApiStore().data;
return i ? {
customerProfiles: i.offers[t.tier].customerProfiles,
interactions: i.offers[t.tier].interactions
} : ""
}
var t = "Dynamics 365 for Customer Insights",
r, n;
r = React.createClass({
displayName: "CustomerInsights",
onChange: Acom.Calculator.onChange,
render: function () {
var r = this.props,
u = n.getPricingApiStore().data;
return React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: r.dataStore.module.icon
}), " ", React.createElement("span", {
className: "heading3"
}, t, React.createElement("sup", {
className: "preview normal-font"
}, "Preview"))), React.createElement("div", {
className: "detail"
}, React.createElement("p", null, formatReact("Includes {0} customer profiles and {1} interactions per month.", i(r).customerProfiles.toString(), i(r).interactions.toString()))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: r.price,
decimals: "2",
format: "currency"
}))))))
}
});
n = Acom.Calculator.createModule({
slug: "customer-insights",
displayName: t,
description: "Transform your customer data into actionable insights",
pricingApi: "/api/v1/pricing/customer-insights/calculator/",
component: r,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="customer-insights" viewBox="0 0 58 60"> <polygon points="11.68 60 23.367 26.451 11.68 18.791 11.68 60" fill="#17234e"/> <polygon points="48.645 39.25 48.645 20.206 11.68 60 48.645 39.25" fill="#17234e"/> <polygon points="11.68 0 11.68 16.078 35.803 27.909 47.016 18.786 11.68 0" fill="#17234e"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#customer-insights"><\/use><\/svg>'
},
getInitialState: function () {
return {
region: "us-east",
tier: "basic"
}
},
getPrice: function (t) {
var i = n.getPricingApiStore().data;
return i ? i.offers[t.tier].prices[t.region] : 0
},
getDisplayName: function (n) {
return n.name || t
},
getSku: function (t) {
var i = n.getPricingApiStore().data;
return i ? i.offers[t.tier].skus[t.region] : ""
},
getDescription: function (n) {
var t = i(n);
return formatString("{0} customer profiles with {1} interactions per month.", t.customerProfiles, t.interactions)
}
});
Acom.Calculator.Actions.modules.register(n)
}();
! function () {
"use strict";
function r(t) {
var i = n.getPricingApiStore().data;
return i ? i.offers[t.tier].prices[t.region] : undefined
}
var t = "Data Catalog",
i, n;
i = React.createClass({
displayName: "DataCatalog",
onChange: Acom.Calculator.onChange,
render: function () {
var n = this.props,
i = n.dataStore.pricingData;
return React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: n.dataStore.module.icon
}), " ", React.createElement("input", {
className: "text-input",
name: "name",
placeholder: t,
defaultValue: n.name
})), React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Region",
name: "region",
options: i.regions,
defaultValue: n.region
}), React.createElement(CalculatorDropdown, {
label: "Pricing tier",
name: "tier",
options: i.tiers,
defaultValue: n.tier
}))), displayIf(n.tier !== "free", React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
label: "Users",
name: "userUnits",
min: "0",
max: "9999",
defaultValue: n.userUnits,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: r(n),
decimals: "2",
format: "currency"
}))), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n.price,
decimals: "2",
format: "currency"
}))), displayIf(n.displaySku && n.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, n.sku))))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n.price,
decimals: "2",
format: "currency"
})))))))
}
});
n = Acom.Calculator.createModule({
slug: "data-catalog",
displayName: t,
description: "Get more value from your enterprise data assets",
pricingApi: "/api/v1/pricing/data-catalog/calculator/",
component: i,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="data-catalog" viewBox="0 0 50 50"> <path fill="#0072C6" d="M36.7,35.7h1.6V0H9.1H7C6,0.1,3.9,2.6,3.9,2.9c0,0.1,0,34.5,0,34.5c0,1,0.8,1.9,1.9,1.9h28.5v-0.6L36.7,35.7 z"/> <path fill="#E5E5E5" d="M8.4,1.6c-0.9,0-1.2,0.1-2,0.8C4.7,3.9,6.8,3.9,7.6,3.9h26.7v34.8l2.4-3.1V1.6H8.4z"/> <polygon opacity="0.5" fill="#A0A1A2" enable-background="new " points="34.3,38.7 36.7,35.7 36.7,1.6 34.3,3.9 "/> <path fill="#A0A1A2" d="M8.4,21.2c0,0.8-0.6,1.4-1.4,1.4H2.4C1.6,22.6,1,22,1,21.2l0,0c0-0.8,0.6-1.4,1.4-1.4H7 C7.8,19.7,8.4,20.4,8.4,21.2L8.4,21.2z"/> <path fill="#A0A1A2" d="M8.4,10.9c0,0.8-0.6,1.4-1.4,1.4H2.4c-0.8,0-1.4-0.6-1.4-1.4l0,0c0-0.8,0.6-1.4,1.4-1.4H7 C7.8,9.5,8.4,10.2,8.4,10.9L8.4,10.9z"/> <path fill="#A0A1A2" d="M8.4,31.4c0,0.8-0.6,1.4-1.4,1.4H2.4c-0.8,0-1.4-0.6-1.4-1.4l0,0C1,30.6,1.6,30,2.4,30H7 C7.8,30,8.4,30.6,8.4,31.4L8.4,31.4z"/> <path fill="#3999C6" d="M23.6,22.2v23.5c0,2.4,5.5,4.4,12.2,4.4v-28H23.6z"/> <path fill="#59B4D9" d="M35.6,50.2h0.2c6.7,0,12.2-2,12.2-4.4V22.2H35.6V50.2z"/> <path fill="#FFFFFF" d="M48,22.2c0,2.4-5.5,4.4-12.2,4.4s-12.2-2-12.2-4.4c0-2.4,5.5-4.4,12.2-4.4S48,19.8,48,22.2"/> <path fill="#7FBA00" d="M45.5,21.9c0,1.6-4.4,2.9-9.7,2.9s-9.7-1.3-9.7-2.9c0-1.6,4.4-2.9,9.7-2.9S45.5,20.3,45.5,21.9"/> <path fill="#B8D432" d="M43.5,23.7c1.3-0.5,2-1.1,2-1.8c0-1.6-4.4-2.9-9.7-2.9c-5.4,0-9.7,1.3-9.7,2.9c0,0.7,0.8,1.3,2,1.8 c1.8-0.7,4.6-1.1,7.7-1.1C38.9,22.6,41.7,23,43.5,23.7"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#data-catalog"><\/use><\/svg>'
},
getInitialState: function () {
return {
region: "us-east",
tier: "free",
userUnits: 0
}
},
getPrice: function (t) {
var i = n.getPricingApiStore().data;
return i ? r(t) * t.userUnits : undefined
},
getDisplayName: function (n) {
return n.name || t
},
getDescription: function (n) {
return n.tier === "free" ? Core.Util.FormatString("{0} tier", n.tier) : Core.Util.FormatString("{0} x 100 User Units, {1} tier", n.userUnits, n.tier)
},
getSku: function (t) {
var i = n.getPricingApiStore().data;
return i ? i.offers[t.tier].skus ? i.offers[t.tier].skus[t.region] : "" : ""
}
});
Acom.Calculator.Actions.modules.register(n)
}();
! function () {
"use strict";
function e(n) {
return parseInt(n.cloudLowFrequency) + parseInt(n.cloudHighFrequency) + parseInt(n.onPremisesLowFrequency) + parseInt(n.onPremisesHighFrequency) > 100 ? !0 : !1
}
function t(t) {
var i = n.getPricingApiStore().data;
return i ? {
cloudReruns: i.offers["rerunning-cloud"].prices[t.region],
cloudDataMovement: i.offers["datamovement-cloud"].prices[t.region],
onPremisesReruns: i.offers["rerunning-on-premise"].prices[t.region],
onPremisesDataMovement: i.offers["datamovement-on-premise"].prices[t.region]
} : undefined
}
function i(i) {
var r = n.getPricingApiStore().data;
return r ? {
lowFrequency: getGraduatedPrice(r.graduatedOffers["low-frequency-cloud"][i.region].prices, i.cloudLowFrequency),
highFrequency: r.offers["high-frequency-cloud"].prices[i.region] * i.cloudHighFrequency,
reRuns: t(i).cloudReruns * i.cloudReruns,
dataMovement: t(i).cloudDataMovement * i.cloudDataMovement
} : undefined
}
function r(i) {
var r = n.getPricingApiStore().data;
return r ? {
lowFrequency: getGraduatedPrice(r.graduatedOffers["low-frequency-on-premise"][i.region].prices, i.onPremisesLowFrequency),
highFrequency: r.offers["high-frequency-on-premise"].prices[i.region] * i.onPremisesHighFrequency,
reRuns: t(i).onPremisesReruns * i.onPremisesReruns,
dataMovement: t(i).onPremisesDataMovement * i.onPremisesDataMovement
} : undefined
}
var u = "Data Factory",
f, n;
f = React.createClass({
displayName: "DataFactory",
onChange: Acom.Calculator.onChange,
render: function () {
var f = this.props,
o = n.getPricingApiStore().data;
return React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: f.dataStore.module.icon
}), " ", React.createElement("input", {
className: "text-input",
name: "name",
placeholder: u,
defaultValue: f.name
})), React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Region",
name: "region",
options: o.regions,
defaultValue: f.region
})), React.createElement("p", null, React.createElement("strong", null, "NOTE:"), React.createElement("br", null), "This represents a single Data Factory pipeline instance. First 5 low frequency activities in a month are free. "), displayIf(e(f), React.createElement("div", {
className: "wa-notification calculator-notification"
}, React.createElement("span", {
className: "wa-iconBoxed"
}, React.createElement("span", {
className: "icon",
dangerouslySetInnerHTML: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="health-information" viewBox="0 0 21 21"> <title lang="en">Health Information<\/title> <path d="M11.042,20.833a10,10,0,1,1,10-10A10.011,10.011,0,0,1,11.042,20.833Z" transform="translate(-0.542 -0.333)" style="fill:#0073b0"/> <path d="M11.042,1.333a9.5,9.5,0,1,1-9.5,9.5,9.511,9.511,0,0,1,9.5-9.5m0-1a10.5,10.5,0,1,0,10.5,10.5,10.5,10.5,0,0,0-10.5-10.5Z" transform="translate(-0.542 -0.333)" style="fill:#0073b0"/> <circle cx="10.5" cy="6.131" r="1.631" style="fill:#fff"/> <polygon points="10.256 16.667 10.744 16.667 11.792 16.667 11.792 9.667 10.744 9.667 10.256 9.667 9.053 9.667 9.038 16.667 10.256 16.667" style="fill:#fff"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#health-information"><\/use><\/svg>'
}
})), React.createElement("p", null, "Usage beyond 100 activities/month will receive 20% off their individual cost. Discount will be applied to your bill.")))), React.createElement("div", {
className: "cost"
}, React.createElement("h3", null, "Cloud"), React.createElement(TextNumber, {
label: "Low frequency activities",
name: "cloudLowFrequency",
min: "0",
max: "99999",
defaultValue: f.cloudLowFrequency,
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: i(f).lowFrequency,
decimals: "2",
format: "currency"
}))), displayIf(f.displaySku && f.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, f.sku && f.sku["lowfrequency-cloud"]))))), React.createElement("div", {
className: "cost sub-module"
}, React.createElement(TextNumber, {
label: "High frequency activites",
name: "cloudHighFrequency",
min: "0",
max: "99999",
defaultValue: f.cloudHighFrequency,
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: i(f).highFrequency,
decimals: "2",
format: "currency"
}))), displayIf(f.displaySku && f.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, f.sku && f.sku["highfrequency-cloud"]))))), React.createElement("div", {
className: "cost sub-module"
}, React.createElement(TextNumber, {
label: "Re-run activites",
name: "cloudReruns",
min: "0",
max: "99999",
defaultValue: f.cloudReruns,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric static"
}, React.createElement(Acom.Atoms.Number, {
value: t(f).cloudReruns,
decimals: "2",
format: "currency"
})), React.createElement("label", {
className: "label"
}, "Per 1,000 re-runs")), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: i(f).reRuns,
decimals: "2",
format: "currency"
}))), displayIf(f.displaySku && f.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, f.sku && f.sku["rerunning-cloud"]))))), React.createElement("div", {
className: "cost sub-module"
}, React.createElement(TextNumber, {
label: "Data movement hours",
name: "cloudDataMovement",
min: "0",
max: "99999",
defaultValue: f.cloudDataMovement,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric static"
}, React.createElement(Acom.Atoms.Number, {
value: t(f).cloudDataMovement,
decimals: "2",
format: "currency"
})), React.createElement("label", {
className: "label"
}, "Per hour")), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: i(f).dataMovement,
decimals: "2",
format: "currency"
}))), displayIf(f.displaySku && f.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, f.sku && f.sku["datamovement-cloud"]))))), React.createElement("div", {
className: "cost"
}, React.createElement("h3", null, "On-Premises"), React.createElement(TextNumber, {
label: "Low frequency activities",
name: "onPremisesLowFrequency",
min: "0",
max: "99999",
defaultValue: f.onPremisesLowFrequency,
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: r(f).lowFrequency,
decimals: "2",
format: "currency"
}))), displayIf(f.displaySku && f.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, f.sku && f.sku["lowfrequency-premises"]))))), React.createElement("div", {
className: "cost sub-module"
}, React.createElement(TextNumber, {
label: "High frequency activites",
name: "onPremisesHighFrequency",
min: "0",
max: "99999",
defaultValue: f.onPremisesHighFrequency,
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: r(f).highFrequency,
decimals: "2",
format: "currency"
}))), displayIf(f.displaySku && f.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, f.sku && f.sku["highfrequency-premises"]))))), React.createElement("div", {
className: "cost sub-module"
}, React.createElement(TextNumber, {
label: "Re-run activites",
name: "onPremisesReruns",
min: "0",
max: "99999",
defaultValue: f.onPremisesReruns,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric static"
}, React.createElement(Acom.Atoms.Number, {
value: t(f).onPremisesReruns,
decimals: "2",
format: "currency"
})), React.createElement("label", {
className: "label"
}, "Per 1,000 re-runs")), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: r(f).reRuns,
decimals: "2",
format: "currency"
}))), displayIf(f.displaySku && f.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, f.sku && f.sku["rerunning-premises"]))))), React.createElement("div", {
className: "cost sub-module"
}, React.createElement(TextNumber, {
label: "Data movement hours",
name: "onPremisesDataMovement",
min: "0",
max: "99999",
defaultValue: f.onPremisesDataMovement,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric static"
}, React.createElement(Acom.Atoms.Number, {
value: t(f).onPremisesDataMovement,
decimals: "2",
format: "currency"
})), React.createElement("label", {
className: "label"
}, "Per hour")), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: r(f).dataMovement,
decimals: "2",
format: "currency"
}))), displayIf(f.displaySku && f.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, f.sku && f.sku["datamovement-premises"]))))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("span", {
className: "sub-total"
}, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: f.price,
decimals: "2",
format: "currency"
}))))))
}
});
n = Acom.Calculator.createModule({
slug: "data-factory",
displayName: u,
description: "Orchestrate and manage data transformation and movement",
pricingApi: "/api/v1/pricing/data-factory/calculator/",
component: f,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="data-factory" viewBox="0 0 50 50"> <path fill="#59B4D9" d="M49.9,29.5L49.9,29.5V17.4L36.2,29.3h-0.3V17.4L22.2,29.3l0,0V4.4c0-2.1-4.7-4.2-10.9-4.2 C5.1,0.2,0,2.2,0,4.4V50h50L49.9,29.5z M11.3,6.4c-4.5,0-8.1-1.1-8.1-2.3s3.6-2.3,8.1-2.3s8.1,1,8.1,2.3C19.3,5.3,15.7,6.4,11.3,6.4 z M34.9,41.9h-5.5v-5.5h5.5V41.9z M25.2,41.9h-5.5v-5.5h5.5V41.9z M39.2,41.9v-5.5h5.5v5.5H39.2z"/> <rect x="0" y="4.1" fill="#3999C6" width="11.1" height="45.9"/> <path fill="#FFFFFF" d="M22.1,4.1c0,2.2-5,4-11.1,4S0,6.3,0,4.1c0-2.2,5-4,11.1-4S22.1,1.8,22.1,4.1"/> <path fill="#7FBA00" d="M19.9,3.8c0,1.5-3.9,2.6-8.8,2.6S2.3,5.3,2.3,3.8c0-1.5,3.9-2.6,8.8-2.6S19.9,2.4,19.9,3.8"/> <path fill="#B8D432" d="M18,5.4c1.2-0.4,1.8-1,1.8-1.6c0-1.5-3.9-2.6-8.8-2.6c-4.9,0-8.8,1.2-8.8,2.6C2.3,4.4,3,5,4.1,5.4 c1.6-0.6,4.1-1,7-1C13.9,4.4,16.4,4.8,18,5.4"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#data-factory"><\/use><\/svg>'
},
getInitialState: function () {
return {
region: "us-west",
cloudLowFrequency: 0,
cloudHighFrequency: 0,
cloudReruns: 0,
cloudDataMovement: 0,
onPremisesLowFrequency: 0,
onPremisesHighFrequency: 0,
onPremisesReruns: 0,
onPremisesDataMovement: 0
}
},
getPrice: function (t) {
var e = n.getPricingApiStore().data,
f = 0,
u;
if (!e) return undefined;
for (u in i(t)) f += i(t)[u];
for (u in r(t)) f += r(t)[u];
return f
},
getDisplayName: function (n) {
return n.name || u
},
getDescription: function (n) {
return Core.Util.FormatString("Cloud: {0} low frequency, {1} high frequency, {2} re runs, {3} data movement. On Premises: {4} low frequency, {5} high frequency, {6} re runs, {7} data movement.", n.cloudLowFrequency, n.cloudHighFrequency, n.cloudReruns, n.cloudDataMovement, n.onPremisesLowFrequency, n.onPremisesHighFrequency, n.onPremisesReruns, n.onPremisesDataMovement)
},
getSku: function (t) {
var i = n.getPricingApiStore().data,
r = {};
return i ? (r["datamovement-cloud"] = i.offers["datamovement-cloud"].skus[t.region], r["datamovement-premises"] = i.offers["datamovement-on-premise"].skus[t.region], r.inactivepipelines = i.offers.inactive.skus[t.region], r["rerunning-cloud"] = i.offers["rerunning-cloud"].skus[t.region], r["rerunning-premises"] = i.offers["rerunning-on-premise"].skus[t.region], r["lowfrequency-cloud"] = i.graduatedOffers["low-frequency-cloud"][t.region].sku, r["lowfrequency-premises"] = i.graduatedOffers["low-frequency-on-premise"][t.region].sku, r["highfrequency-cloud"] = i.offers["high-frequency-cloud"].skus[t.region], r["highfrequency-premises"] = i.offers["high-frequency-on-premise"].skus[t.region], r) : undefined
}
});
Acom.Calculator.Actions.modules.register(n)
}();
! function () {
"use strict";
function f(t) {
var i = n.getPricingApiStore().data;
return i ? t.type === "paygo" ? !!i.offers["pay-go-unit"].prices[t.region] : t.type === "commitmentmonthly" ? !!i.offers["commitment-" + t.tier + "-units"].prices[t.region] : void 0 : !1
}
function r(t) {
var i = n.getPricingApiStore().data;
return i ? {
price: i.offers["pay-go-unit"].prices[t.region],
cost: i.offers["pay-go-unit"].prices[t.region] * t.analyticUnits * t.hours
} : undefined
}
function t(t) {
var i = n.getPricingApiStore().data;
return i ? {
overage: i.offers["commitment-overage"].prices[t.region],
prepaid: i.offers["commitment-" + t.tier + "-units"].prices[t.region]
} : undefined
}
var i = "Data Lake Analytics",
u, n;
u = React.createClass({
displayName: "DataLakeAnalytics",
onChange: Acom.Calculator.onChange,
render: function () {
var u = this.props,
f = n.getPricingApiStore().data;
return React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: u.dataStore.module.icon
}), " ", React.createElement("input", {
className: "text-input",
name: "name",
placeholder: i,
defaultValue: u.name
})), React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
key: "region-" + u.region + u.type,
label: "Region",
name: "region",
options: f.regions,
defaultValue: u.region
}), React.createElement(CalculatorDropdown, {
key: "type-" + u.type + u.region,
label: "Pricing type",
name: "type",
options: f.types,
defaultValue: u.type
})), displayIf(u.type === "commitmentmonthly", React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Pre-paid hours",
name: "tier",
options: f.monthlyCommitmentTiers,
defaultValue: u.tier
})))), displayIf(u.type === "paygo", React.createElement("div", null, React.createElement("div", {
className: "cost no-divider"
}, React.createElement("h4", null, "Analytic units"), React.createElement(TextNumber, {
label: "Analytic units",
name: "analyticUnits",
min: "0",
max: "9999",
defaultValue: u.analyticUnits,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(TextNumber, {
label: "Hours",
name: "hours",
min: "0",
max: "24",
defaultValue: u.hours,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(StaticNumber, {
label: "Per hour",
value: React.createElement(Acom.Atoms.Number, {
value: r(u).price,
decimals: "2",
format: "currency"
})
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: r(u).cost,
decimals: "2",
format: "currency"
}))))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("span", {
className: "sub-total"
}, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
})))))), React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
label: "Overage hours",
name: "overageHours",
min: "0",
max: "99999",
defaultValue: u.overageHours,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(StaticNumber, {
label: "Per hour",
value: React.createElement(Acom.Atoms.Number, {
value: t(u).overage,
decimals: "2",
format: "currency"
})
}), React.createElement("div", {
className: "math"
}, "+"), React.createElement(StaticNumber, {
value: React.createElement(Acom.Atoms.Number, {
value: t(u).prepaid,
decimals: "2",
format: "currency"
})
}), React.createElement("div", {
className: "total"
}, React.createElement("span", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
})))))))
}
});
n = Acom.Calculator.createModule({
slug: "data-lake-analytics",
displayName: i,
description: "Distributed analytics service that makes big data easy",
pricingApi: "/api/v1/pricing/data-lake-analytics/calculator/",
component: u,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="data-lake-analytics" viewBox="0 0 50 50"> <path fill="#3E3E3E" d="M6.1,6.8v36.3c0,3.8,8.4,6.8,18.9,6.8V6.8H6.1z"/> <path fill="#A0A1A2" d="M24.7,50H25c10.4,0,18.9-3.1,18.9-6.8V6.8H24.7V50z"/> <path fill="#FFFFFF" d="M43.9,6.8c0,3.8-8.4,6.8-18.9,6.8S6.1,10.6,6.1,6.8C6.1,3.1,14.6,0,25,0S43.9,3.1,43.9,6.8"/> <path fill="#7FBA00" d="M40,6.4c0,2.5-6.7,4.5-15,4.5s-15-2-15-4.5c0-2.5,6.7-4.5,15-4.5S40,3.9,40,6.4"/> <path fill="#B8D432" d="M36.9,9.2c2-0.8,3.1-1.7,3.1-2.8c0-2.5-6.7-4.5-15-4.5c-8.3,0-15,2-15,4.5c0,1,1.2,2,3.1,2.8 c2.7-1.1,7-1.8,11.9-1.8C29.8,7.4,34.1,8.1,36.9,9.2"/> <path fill="#3999C6" d="M24.7,50V32c-2.8,0-5.2-1.5-6.6-3.7c-1.4,2.2-3.7,3.7-6.5,3.7c-2.2,0-4.1-0.9-5.5-2.4v13.6 C6.1,46.9,14.4,49.9,24.7,50z"/> <path fill="#3999C6" d="M25,50L25,50L25,50C25,50,25,50,25,50z"/> <path fill="#59B4D9" d="M24.7,50H25C24.9,50,24.8,50,24.7,50L24.7,50z"/> <path fill="#59B4D9" d="M38.1,32c-2.8,0-5.3-1.5-6.7-3.7c-1.3,2.2-3.7,3.6-6.5,3.7v18h0c10.4,0,18.9-3.1,18.9-6.8V29.5 C42.4,31,40.4,32,38.1,32z"/> <path fill="#59B4D9" d="M24.8,32C24.8,32,24.8,32,24.8,32l-0.1,18c0.1,0,0.1,0,0.2,0h0V32C24.9,32,24.9,32,24.8,32z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#data-lake-analytics"><\/use><\/svg>'
},
getInitialState: function () {
return {
region: "us-east-2",
type: "paygo",
analyticUnits: 0,
hours: 0,
tier: "100",
overageHours: 0
}
},
getPrice: function (i) {
var u = n.getPricingApiStore().data;
return u ? i.type === "paygo" ? r(i).cost : i.type === "commitmentmonthly" ? t(i).overage * i.overageHours + t(i).prepaid : void 0 : undefined
},
getDisplayName: function (n) {
return n.name || i
},
willUpdate: function (n, t) {
return f(t) || (t.region = "us-east-2", t.type = "paygo"), t
},
getDescription: function (n) {
return n.type === "paygo" ? formatString("{0} pay type, {1} analytic unit(s) x {2} hours(s)", n.type, n.analyticUnits, n.hours) : n.type === "commitmentmonthly" ? formatString("{0} pay type, {1} included hours with {2} overage hour{s}", n.type, n.tier, n.overageHours) : void 0
},
getSku: function () {
var t = n.getPricingApiStore().data;
return t ? {} : undefined
}
});
Acom.Calculator.Actions.modules.register(n)
}();
! function () {
"use strict";
function f(t) {
var i = n.getPricingApiStore().data;
return i ? getGraduatedPrice(i.graduatedOffers["pay-as-you-go"][t.region].prices, t.stored * t.storedUnits) : 0
}
function t(t) {
var i = n.getPricingApiStore().data;
return i ? {
read: i.offers["read-transactions"].prices[t.region],
write: i.offers["write-transactions"].prices[t.region]
} : 0
}
function i(i) {
var r = n.getPricingApiStore().data;
return r ? {
read: t(i).read * i.readTransactions10k,
write: t(i).write * i.writeTransactions10k
} : 0
}
var r = "Data Lake Store",
u, n;
u = React.createClass({
displayName: "DataLakeStore",
onChange: Acom.Calculator.onChange,
render: function () {
var u = this.props,
e = n.getPricingApiStore().data;
return React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: u.dataStore.module.icon
}), " ", React.createElement("input", {
className: "text-input",
name: "name",
placeholder: r,
defaultValue: u.name
})), React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Region",
name: "region",
options: e.regions,
defaultValue: u.region
}))), React.createElement("div", {
className: "cost no-divder"
}, React.createElement("h3", null, "Storage"), React.createElement(FactoredInput, {
key: "factor-stored-" + u.storedUnits,
name: "stored",
defaultValue: u.stored,
factorsName: "storedUnits",
factorsDefault: u.storedUnits,
factorUnit: "gbs",
min: "0",
max: "5000",
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: f(u),
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, u.sku.stored))))), React.createElement("div", {
className: "cost"
}, React.createElement("h3", null, "Read Transactions"), React.createElement(TextNumber, {
label: "Transaction units (10,000 transactions)",
name: "readTransactions10k",
min: "0",
max: "999999999",
defaultValue: u.readTransactions10k,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(StaticNumber, {
label: "Per 10,000 transactions",
value: React.createElement(Acom.Atoms.Number, {
value: t(u).read,
decimals: "3",
format: "currency"
})
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: i(u).read,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, u.sku.readTransactions10k))))), React.createElement("div", {
className: "cost"
}, React.createElement("h3", null, "Write Transactions"), React.createElement(TextNumber, {
label: "Transaction units (10,000 transactions)",
name: "writeTransactions10k",
min: "0",
max: "999999999",
defaultValue: u.writeTransactions10k,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(StaticNumber, {
label: "Per 10,000 transactions",
value: React.createElement(Acom.Atoms.Number, {
value: t(u).write,
decimals: "2",
format: "currency"
})
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: i(u).write,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, u.sku.writeTransactions10k))))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("span", {
className: "sub-total"
}, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))))))
}
});
n = Acom.Calculator.createModule({
slug: "data-lake-store",
displayName: r,
description: "Hyperscale repository for big data analytics workloads",
pricingApi: "/api/v1/pricing/data-lake-store/calculator/",
component: u,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="data-lake-store" viewBox="0 0 50 50"> <path fill="#3E3E3E" d="M6.1,6.8v36.3c0,3.8,8.4,6.8,18.9,6.8V6.8H6.1z"/> <path fill="#A0A1A2" d="M24.7,50H25c10.4,0,18.9-3.1,18.9-6.8V6.8H24.7V50z"/> <path fill="#FFFFFF" d="M43.9,6.8c0,3.8-8.4,6.8-18.9,6.8S6.1,10.6,6.1,6.8C6.1,3.1,14.6,0,25,0S43.9,3.1,43.9,6.8"/> <path fill="#7FBA00" d="M40,6.4c0,2.5-6.7,4.5-15,4.5s-15-2-15-4.5c0-2.5,6.7-4.5,15-4.5S40,3.9,40,6.4"/> <path fill="#B8D432" d="M36.9,9.2c2-0.8,3.1-1.7,3.1-2.8c0-2.5-6.7-4.5-15-4.5c-8.3,0-15,2-15,4.5c0,1,1.2,2,3.1,2.8 c2.7-1.1,7-1.8,11.9-1.8C29.8,7.4,34.1,8.1,36.9,9.2"/> <path fill="#3999C6" d="M24.7,50V32c-2.8,0-5.2-1.5-6.6-3.7c-1.4,2.2-3.7,3.7-6.5,3.7c-2.2,0-4.1-0.9-5.5-2.4v13.6 C6.1,46.9,14.4,49.9,24.7,50z"/> <path fill="#3999C6" d="M25,50L25,50L25,50C25,50,25,50,25,50z"/> <path fill="#59B4D9" d="M24.7,50H25C24.9,50,24.8,50,24.7,50L24.7,50z"/> <path fill="#59B4D9" d="M38.1,32c-2.8,0-5.3-1.5-6.7-3.7c-1.3,2.2-3.7,3.6-6.5,3.7v18h0c10.4,0,18.9-3.1,18.9-6.8V29.5 C42.4,31,40.4,32,38.1,32z"/> <path fill="#59B4D9" d="M24.8,32C24.8,32,24.8,32,24.8,32l-0.1,18c0.1,0,0.1,0,0.2,0h0V32C24.9,32,24.9,32,24.8,32z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#data-lake-store"><\/use><\/svg>'
},
getInitialState: function () {
return {
region: "us-east-2",
stored: 0,
storedUnits: "1",
readTransactions10k: 0,
writeTransactions10k: 0
}
},
getPrice: function (t) {
var r = n.getPricingApiStore().data;
return r ? f(t) + i(t).read + i(t).write : 0
},
getDisplayName: function (n) {
return n.name || r
},
getDescription: function (n) {
return Core.Util.FormatString("{0}{1} stored, {2} read transaction units (10,000 transactions per unit) and {3} write transaction units (10,000 transactions per unit)", n.stored, {
1: "GB",
1024: "TB"
}[n.storedUnits], n.readTransactions10k, n.writeTransactions10k)
},
getSku: function (t) {
var r = n.getPricingApiStore().data,
i = {};
return r ? (i.stored = r.graduatedOffers["pay-as-you-go"][t.region].sku, i.readTransactions10k = r.offers["read-transactions"].skus[t.region], i.writeTransactions10k = r.offers["write-transactions"].skus[t.region], i) : i
}
});
Acom.Calculator.Actions.modules.register(n)
}();
! function () {
"use strict";
function r(t) {
var i = n.getPricingApiStore().data;
return i ? getGraduatedPrice(i.graduatedOffers.zone.global.prices, t.zones) : undefined
}
function u(t) {
var i = n.getPricingApiStore().data;
return i ? getGraduatedPrice(i.graduatedOffers.queries.global.prices, t.queries) : undefined
}
var t = "Azure DNS",
i, n;
i = React.createClass({
displayName: "DNS",
onChange: Acom.Calculator.onChange,
render: function () {
var n = this.props,
i = n.dataStore.pricingData;
return React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: n.dataStore.module.icon
}), " ", React.createElement("input", {
className: "text-input",
name: "name",
placeholder: t,
defaultValue: n.name
})), React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Region",
name: "region",
options: i.regions,
defaultValue: n.region
}))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "wa-textNumber"
}, React.createElement(TextNumber, {
label: "Hosted DNS zones",
name: "zones",
min: "0",
max: "99999",
defaultValue: n.zones,
onChange: this.onChange
}), displayIf(n.displaySku && n.sku.zones, React.createElement("div", {
className: "sku-under-total center"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, n.sku.zones)))), React.createElement("div", {
className: "math"
}, "+"), React.createElement("div", {
className: "wa-textNumber"
}, React.createElement(TextNumber, {
label: "DNS Queries (millions)",
name: "queries",
min: "0",
max: "99999",
defaultValue: n.queries,
onChange: this.onChange
}), displayIf(n.displaySku && n.sku.queries, React.createElement("div", {
className: "sku-under-total center"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, n.sku.queries)))), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n.price,
decimals: "2",
format: "currency"
}))))))
}
});
n = Acom.Calculator.createModule({
slug: "dns",
displayName: t,
description: "Host your DNS domain in Azure",
pricingApi: "/api/v1/pricing/dns/calculator/",
component: i,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="dns" viewBox="-1 -1 34 34"> <path fill="#0072c6" d="M19,17.4c-0.8,0-1.5,0.5-1.9,1.2H5.3v0c-2,0-3.6-1.6-3.6-3.6s1.6-3.6,3.6-3.6v0h0h0H7 c0.1-0.4,0.2-0.8,0.4-1.2C7.4,10,7.5,9.8,7.5,9.7c0.8-1.5,2.4-2.4,4.2-2.4c1.6,0,3,0.8,3.9,2c0.5-0.2,1-0.4,1.6-0.5 c-1.1-1.8-3.2-3.1-5.5-3.1c-2.7,0-5,1.7-6,4.1c0,0,0,0,0,0l0,0c0,0,0,0,0,0H5.3C2.4,9.7,0,12.1,0,15c0,2.9,2.4,5.3,5.3,5.3h11.9 c0.3,0.7,1,1.2,1.9,1.2c1.1,0,2-0.9,2-2C21.1,18.3,20.2,17.4,19,17.4z"/> <path fill="#0072c6" d="M25.6,13.4C24.4,11,21.9,9.3,19,9.3c-3.5,0-6.4,2.4-7.1,5.7c-1.7,0.2-3.2,1.1-4.1,2.4h8.7 c0.6-0.7,1.5-1.2,2.5-1.2c1.8,0,3.2,1.5,3.2,3.2c0,1.8-1.5,3.2-3.2,3.2c-1,0-1.9-0.5-2.5-1.2H6.9c0.4,2.8,2.8,4.9,5.6,4.9 c0,0,0,0,0,0v0h13v0c0,0,0,0,0,0c3.6,0,6.5-2.9,6.5-6.5C32,16.3,29.1,13.4,25.6,13.4z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#dns"><\/use><\/svg>'
},
getInitialState: function () {
return {
region: "us-east",
zones: 0,
queries: 0
}
},
getPrice: function (t) {
var i = n.getPricingApiStore().data;
return i ? r(t) + u(t) : undefined
},
getDisplayName: function (n) {
return n.name || t
},
getDescription: function (n) {
return Core.Util.FormatString("{0} zone(s), {1} million queries", n.zones, n.queries)
},
getSku: function () {
var t = n.getPricingApiStore().data;
return t ? {
zones: t.graduatedOffers.zone.global.sku,
queries: t.graduatedOffers.queries.global.sku
} : ""
},
isValidOffer: function () {
var t = n.getPricingApiStore().data;
return t ? t.graduatedOffers.zone.global != undefined : !1
}
});
Acom.Calculator.Actions.modules.register(n)
}();
! function () {
"use strict";
function t(t) {
var i = n.getPricingApiStore().data;
return i ? {
requests: i.offers.requests.prices[t.region],
storage: i.offers.storage.prices[t.region]
} : 0
}
function i(i) {
var r = n.getPricingApiStore().data;
return r ? {
requests: t(i).requests * i.userRequestUnits * i.userRequestHours * (i.userRequestHoursFactor || "1"),
storage: t(i).storage * i.userStorageUnits
} : 0
}
function r(t, i, r) {
var f = n.getPricingApiStore().data,
u;
return f ? i === "standard" ? (u = f.offers[r], typeof u.prices[t] != "undefined" && u) : i === "userdefined" ? !0 : void 0 : undefined
}
function e(n, t, i) {
var u = r(n, t, i);
return u && u.prices[n]
}
function o(n, t, i) {
return !!r(n, t, i)
}
var u = "DocumentDB",
f, n;
f = React.createClass({
displayName: "DocumentDb",
onChange: Acom.Calculator.onChange,
getLevels: function () {
var n = this.props,
i = n.dataStore.pricingData,
t;
if (n.tier === "standard") return t = i.levels.map(function (t) {
var i = r(n.region, n.tier, t.slug);
return {
slug: t.slug,
values: {
displayStrings: [t.displayName, i.localSSDStorage + " GB SSD", formatString("Request units {0}/sec", i.databaseRequestUnits)],
number: {
value: e(n.region, n.tier, t.slug),
decimals: 3,
format: "currency",
rate: "{0}/hr"
}
}
}
}), React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(DetailedDropdown, {
key: "level-" + n.region,
label: "Performance level",
name: "level",
options: t,
delimiters: ["colon", "comma"],
defaultValue: n.level,
onChange: this.onChange
}))
},
render: function () {
var n = this.props,
r = n.dataStore.pricingData;
return React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: n.dataStore.module.icon
}), " ", React.createElement("input", {
className: "text-input",
name: "name",
placeholder: u,
defaultValue: n.name
})), React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Region",
name: "region",
options: r.regions,
defaultValue: n.region
}), React.createElement(CalculatorDropdown, {
label: "Tier",
name: "tier",
options: r.tiers,
defaultValue: n.tier
})), this.getLevels()), displayIf(n.tier === "standard", React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
label: "Collections",
name: "collections",
min: "1",
max: "999",
defaultValue: n.collections,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(FactoredInput, {
key: "factor-hours-" + n.hoursFactor,
name: "hours",
defaultValue: n.hours,
factorsName: "hoursFactor",
factorsDefault: n.hoursFactor || "1",
factorUnit: "hours",
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n.price,
decimals: "2",
format: "currency"
}))), displayIf(n.displaySku && n.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, n.sku)))))), displayIf(n.tier === "userdefined", React.createElement("div", null, React.createElement("div", {
className: "cost"
}, React.createElement("h3", null, "Storage"), React.createElement(TextNumber, {
label: "GB",
name: "userStorageUnits",
min: "1",
max: "999999999",
defaultValue: n.userStorageUnits,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric static"
}, React.createElement(Acom.Atoms.Number, {
value: t(n).storage,
decimals: "3",
format: "currency"
})), React.createElement("label", {
className: "label"
}, "Per GB/Mo")), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: i(n).storage,
decimals: "2",
format: "currency"
}))))), React.createElement("div", {
className: "cost"
}, React.createElement("h3", null, "RUs reserved"), React.createElement(TextNumber, {
label: "x100 RU",
name: "userRequestUnits",
min: "4",
max: "999999999",
defaultValue: n.userRequestUnits,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(FactoredInput, {
key: "factors-userRequestHours-" + n.userRequestHoursFactor,
name: "userRequestHours",
defaultValue: n.userRequestHours,
factorsName: "userRequestHoursFactor",
factorsDefault: n.userRequestHoursFactor || "1",
factorUnit: "hours",
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric static"
}, React.createElement(Acom.Atoms.Number, {
value: t(n).requests,
decimals: "3",
format: "currency"
})), React.createElement("label", {
className: "label"
}, "Per hour")), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: i(n).requests,
decimals: "2",
format: "currency"
}))))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("span", {
className: "sub-total"
}, "Sub total"), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n.price,
decimals: "2",
format: "currency"
}))))))))
}
});
n = Acom.Calculator.createModule({
slug: "documentdb",
displayName: u,
description: "Managed NoSQL document database-as-a-service",
pricingApi: "/api/v1/pricing/documentdb/calculator/",
component: f,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="documentdb" viewBox="0 0 50 50"> <path fill="#3999C6" d="M6.1,6.8v36.3c0,3.8,8.4,6.8,18.9,6.8V6.8H6.1z"/> <path fill="#59B4D9" d="M24.7,50H25c10.4,0,18.9-3.1,18.9-6.8V6.8H24.7V50z"/> <path fill="#FFFFFF" d="M43.9,6.8c0,3.8-8.4,6.8-18.9,6.8S6.1,10.6,6.1,6.8C6.1,3.1,14.6,0,25,0S43.9,3.1,43.9,6.8"/> <path fill="#7FBA00" d="M40,6.4c0,2.5-6.7,4.5-15,4.5s-15-2-15-4.5c0-2.5,6.7-4.5,15-4.5S40,3.9,40,6.4"/> <path fill="#B8D432" d="M36.9,9.2c2-0.8,3.1-1.7,3.1-2.8c0-2.5-6.7-4.5-15-4.5c-8.3,0-15,2-15,4.5c0,1,1.2,2,3.1,2.8 c2.7-1.1,7-1.8,11.9-1.8C29.8,7.4,34.1,8.1,36.9,9.2"/> <path fill="#FFFFFF" d="M19.6,41.8c-1.5,0-2.7-0.2-3.5-0.5c-0.9-0.3-1.5-0.8-1.9-1.4c-0.4-0.7-0.6-1.7-0.6-3v-2.2 c0-1.4-0.6-2.2-1.8-2.2v-2.7c1.2,0,1.8-0.7,1.8-2.2v-2c0-1.4,0.2-2.5,0.6-3.1c0.4-0.7,1-1.1,1.8-1.5c0.9-0.3,2-0.5,3.5-0.5v2.7 c-0.7,0-1.1,0.1-1.5,0.4c-0.3,0.3-0.5,0.8-0.5,1.5v1.7c0,1.1-0.1,2-0.4,2.7c-0.3,0.7-0.8,1.2-1.5,1.5v0c0.7,0.3,1.2,0.8,1.5,1.6 c0.3,0.7,0.5,1.7,0.5,2.8v1.5c0,0.7,0.1,1.2,0.4,1.5c0.3,0.3,0.8,0.5,1.5,0.5V41.8z"/> <path fill="#FFFFFF" d="M36.6,32.5c-1.2,0-1.8,0.7-1.8,2.2v2c0,1.4-0.2,2.5-0.6,3.1c-0.4,0.7-1,1.1-1.8,1.5c-0.9,0.3-2,0.5-3.5,0.5 v-2.7c0.7,0,1.2-0.1,1.5-0.4c0.3-0.3,0.5-0.8,0.5-1.5v-1.7c0-1.1,0.1-2,0.4-2.7c0.3-0.7,0.8-1.2,1.5-1.5v0 c-0.7-0.3-1.2-0.9-1.5-1.6c-0.3-0.7-0.5-1.7-0.5-2.8v-1.5c0-0.7-0.1-1.2-0.4-1.5c-0.3-0.3-0.8-0.5-1.5-0.5v-2.7 c1.5,0,2.7,0.2,3.5,0.5c0.9,0.3,1.5,0.8,1.9,1.4c0.4,0.7,0.6,1.7,0.6,3v2.2c0,1.4,0.6,2.2,1.8,2.2V32.5z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#documentdb"><\/use><\/svg>'
},
getInitialState: function () {
return {
region: "us-east",
tier: "userdefined",
level: "s1",
collections: 1,
hours: 744,
hoursFactor: "1",
userRequestUnits: 4,
userRequestHours: 744,
userRequestHoursFactor: "1",
userStorageUnits: 0
}
},
getPrice: function (t) {
return n.getPricingApiStore().data ? t.tier === "standard" ? e(t.region, t.tier, t.level) * t.collections * t.hours * (t.hoursFactor || "1") : i(t).requests + i(t).storage : 0
},
getDisplayName: function (n) {
return n.name || u
},
getSku: function (t) {
if (!n.getPricingApiStore().data) return "";
if (t.tier === "standard") {
var i = r(t.region, t.tier, t.level);
return i && i.skus[t.region] ? i.skus[t.region] : ""
}
return ""
},
getDescription: function (n) {
return Core.Util.FormatString("{0} DocumentDB(s) {1} level, {2} {3}", n.collections, n.level, n.hours, factorLabel(n.hoursFactor))
},
isValidOffer: function (n) {
return o(n.region, n.tier, n.level)
},
willUpdate: function (n, t) {
return n.hoursFactor !== t.hoursFactor && (t.hours = factorInput(n.hoursFactor, t.hoursFactor, n.hours)), n.userRequestHoursFactor !== t.userRequestHoursFactor && (t.userRequestHours = factorInput(n.userRequestHoursFactor, t.userRequestHoursFactor, n.userRequestHours)), t
}
});
Acom.Calculator.Actions.modules.register(n)
}();
Acom.Organisms.EstimateName = React.createClass({
displayName: "EstimateName",
mixins: [Reflux.connect(Acom.Calculator.Stores.channelCalculator)],
handleNameChange: function (n) {
Acom.Calculator.Actions.channelCalculator.setEstimateName(n.target.value)
},
render: function () {
var i = this,
n = this.state,
t = ["text-input"];
return n.isChannelCalcEnabled ? (n.estimate.name || t.push("validationError"), React.createElement("div", {
className: "wa-calcService"
}, React.createElement("div", {
className: "heading heading-discount"
}, React.createElement("span", {
className: "name"
}, "Name: "), React.createElement("input", {
name: "name",
className: t.join(" "),
defaultValue: n.estimate.name,
placeholder: n.estimate.name,
onChange: i.handleNameChange
})), React.createElement(ModalDialog, {
ref: "modalDialog",
accept: "Continue",
cancel: "Cancel",
message: "You have modules that use the India or Government regions and they are not available in the Web Direct channel. If you continue these modules will be reset"
}))) : !1
}
});
! function () {
"use strict";
function r(t) {
var i = n.getPricingApiStore().data;
return i ? {
ingress: i.offers[t.tier + "-permillionevents"].prices[t.region],
throughput: i.offers[t.tier + "-perhour"].prices[t.region]
} : undefined
}
function u(t) {
var i = n.getPricingApiStore().data;
return i ? i.offers[t.tier + "-permillionevents"].prices[t.region] * t.events : 0
}
function f(t) {
var i = n.getPricingApiStore().data,
r = 0;
return i ? (t.archive && i.offers[t.tier + "-perarchivehour"] && (r = t.hours * (t.hoursFactor || "1") * t.units * i.offers[t.tier + "-perarchivehour"].prices[t.region]), i.offers[t.tier + "-perhour"].prices[t.region] * t.hours * (t.hoursFactor || "1") * t.units + r) : 0
}
var t = "Event Hubs",
i, n;
i = React.createClass({
displayName: "EventHubs",
onChange: Acom.Calculator.onChange,
render: function () {
var i = this.props,
e = n.getPricingApiStore().data;
return React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: i.dataStore.module.icon
}), " ", React.createElement("input", {
className: "text-input",
name: "name",
placeholder: t,
defaultValue: i.name
})), React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Region",
name: "region",
options: e.regions,
defaultValue: i.region
}), React.createElement(CalculatorDropdown, {
label: "Pricing Tier",
name: "tier",
options: e.tiers,
defaultValue: i.tier
}), displayIf(i.tier === "standard", React.createElement("div", null, React.createElement(Checkbox, {
label: "Archive",
name: "archive",
defaultChecked: i.archive
}), React.createElement(Tooltip, null, formatReact("<p>The Azure Event Hubs Archive feature automatically processes and stores event data in your Azure storage account. While in preview, the Archive feature costs {0}/hr and is based on the number of Throughput Units selected for your Event Hub. For more information, please see the pricing details page.<\/p>", React.createElement(Acom.Atoms.Number, {
value: e.offers["standard-perarchivehour"].prices[i.region],
decimals: "2",
format: "currency"
})))))), React.createElement("p", null, React.createElement("strong", null, "NOTE:"), React.createElement("br", null), "Maximum throughput units: 20. Up to 1MB per second of ingress events. Up to 2MB per second of egress events.")), React.createElement("div", {
className: "cost"
}, React.createElement("h4", null, "Ingress"), React.createElement(TextNumber, {
label: "Millions of events",
name: "events",
min: "0",
max: "999",
defaultValue: i.events,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: r(i).ingress,
decimals: "3",
format: "currency"
})), React.createElement("label", {
className: "label"
}, "Per million")), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u(i),
decimals: "2",
format: "currency"
}))), displayIf(i.displaySku && i.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, i.sku.ingressEvents))))), React.createElement("div", {
className: "cost sub-module"
}, React.createElement("h4", null, "Throughput"), React.createElement(TextNumber, {
label: "Throughput Units",
name: "units",
min: "1",
max: "20",
defaultValue: i.units,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(FactoredInput, {
key: "factor-hours" + i.hoursFactor,
name: "hours",
defaultValue: i.hours,
factorsName: "hoursFactor",
factorsDefault: i.hoursFactor || "1",
factorUnit: "hours",
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: r(i).throughput,
decimals: "3",
format: "currency"
})), React.createElement("label", {
className: "label"
}, "Per unit/hour")), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: f(i),
decimals: "2",
format: "currency"
}))), displayIf(i.displaySku && i.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, i.sku.throughputUnit))))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("span", {
className: "sub-total"
}, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: i.price,
decimals: "2",
format: "currency"
}))))))
}
});
n = Acom.Calculator.createModule({
slug: "event-hubs",
displayName: t,
description: "Receive telemetry from millions of devices",
pricingApi: "/api/v1/pricing/event-hubs/calculator/",
component: i,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="event-hubs" viewBox="-163 237 32 32"> <path fill="#B8D432" d="M-144,251.5c0,0.3-0.2,0.5-0.5,0.5h-3.9c-0.3,0-0.5-0.2-0.5-0.5v-2.9c0-0.3,0.2-0.5,0.5-0.5h3.9 c0.3,0,0.5,0.2,0.5,0.5V251.5z"/> <path fill="#B8D432" d="M-137,254.5c0,0.3-0.2,0.5-0.5,0.5h-3.9c-0.3,0-0.5-0.2-0.5-0.5v-2.9c0-0.3,0.2-0.5,0.5-0.5h3.9 c0.3,0,0.5,0.2,0.5,0.5V254.5z"/> <path fill="#B8D432" d="M-144,257.5c0,0.3-0.2,0.5-0.5,0.5h-3.9c-0.3,0-0.5-0.2-0.5-0.5v-2.9c0-0.3,0.2-0.5,0.5-0.5h3.9 c0.3,0,0.5,0.2,0.5,0.5V257.5z"/> <path fill="#B8D432" d="M-151,248.5c0,0.3-0.2,0.5-0.5,0.5h-4c-0.3,0-0.5-0.2-0.5-0.5v-3c0-0.3,0.2-0.5,0.5-0.5h3.9 c0.4,0,0.6,0.2,0.6,0.5V248.5z"/> <path fill="#0072C6" d="M-133.5,238L-133.5,238h-3h-22.1h-1.9h-1c-0.3,0-0.5,0.2-0.5,0.5v6c0,0.3,0.2,0.5,0.5,0.5h3 c0.3,0,0.5-0.2,0.5-0.5V242h21v2.5c0,0.3,0.2,0.5,0.6,0.5h2.9c0.3,0,0.5-0.2,0.5-0.5v-3v-3C-133,238.2-133.2,238-133.5,238z"/> <path fill="#0072C6" d="M-133.5,261.1h-2.9c-0.3,0-0.5,0.2-0.5,0.5v2.4H-158v-2.5c0-0.3-0.2-0.5-0.6-0.5h-2.9 c-0.3,0-0.5,0.2-0.5,0.6v5.9c0,0.3,0.2,0.5,0.5,0.5h1h2h22.1h2.8h0.1c0.3,0,0.5-0.2,0.5-0.5v-5.9 C-133,261.3-133.2,261.1-133.5,261.1z"/> <path fill="#B8D432" d="M-151,254.5c0,0.3-0.2,0.5-0.5,0.5h-4c-0.3,0-0.5-0.2-0.5-0.5v-3c0-0.3,0.2-0.5,0.5-0.5h3.9 c0.4,0,0.6,0.2,0.6,0.5V254.5z"/> <path fill="#B8D432" d="M-151,260.5c0,0.3-0.2,0.5-0.5,0.5h-4c-0.3,0-0.5-0.2-0.5-0.5v-3c0-0.3,0.2-0.5,0.5-0.5h3.9 c0.4,0,0.6,0.2,0.6,0.5V260.5z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#event-hubs"><\/use><\/svg>'
},
getInitialState: function () {
return {
region: "us-east",
tier: "basic",
archive: !1,
events: 0,
units: 1,
hours: 744,
hoursFactor: "1"
}
},
getPrice: function (t) {
var i = n.getPricingApiStore().data;
return i ? u(t) + f(t) : undefined
},
getDisplayName: function (n) {
return n.name || t
},
getSku: function (t) {
var i = n.getPricingApiStore().data,
r;
return !i || !i.offers ? "" : (r = {}, r.ingressEvents = i.offers[t.tier + "-permillionevents"].skus[t.region], r.throughputUnit = i.offers[t.tier + "-perhour"].skus[t.region], r)
},
getDescription: function (n) {
return Core.Util.FormatString("{0} million events, {1} thoughput units(s) x {2} {3}, {4} tier. Archive added: {5}", n.events, n.units, n.hours, factorLabel(n.hoursFactor), n.tier, n.archive)
},
willUpdate: function (n, t) {
return n.hoursFactor !== t.hoursFactor && (t.hours = factorInput(n.hoursFactor, t.hoursFactor, n.hours)), t
},
isValidOffer: function (t) {
var i = n.getPricingApiStore().data;
return i ? i.offers[t.tier + "-permillionevents"].prices[t.region] >= 0 : !1
}
});
Acom.Calculator.Actions.modules.register(n)
}();
! function () {
"use strict";
function a(n) {
return c(n)
}
function t(t, i, r) {
var f = n.getPricingApiStore().data,
u;
return f ? (u = f.portSpeedOffers[i + "-" + r], u && u.price[t] ? u : void 0) : undefined
}
function s(t, i, r) {
var f = n.getPricingApiStore().data,
u;
return f ? (u = f.premiumOffers[i + "-" + r], u && u.price[t] ? u : void 0) : undefined
}
function u(n, i, r) {
var u = t(n, i, r);
if (u) return u.price[n]
}
function h(n, t, i) {
var r = s(n, t, i);
if (r) return r.price[n]
}
function c(n) {
var t = u(n.region, n.plan, n.portSpeed);
return n.premium && (t += h(n.region, n.plan, n.portSpeed)), t
}
function i(n, i, r) {
return !!t(n, i, r)
}
function v(n, i, r, u) {
var f = null;
return f = u ? s(n, i, r) : t(n, i, r), f && f.skus[n] ? f.skus[n] : ""
}
function f(t) {
var i = n.getPricingApiStore().data,
r;
return i ? (r = i.dataTransfersOffers[e(t, i)], {
price: r.price[t.region],
sku: r.skus[t.region]
}) : 0
}
function l(t) {
var i = n.getPricingApiStore().data;
return i ? f(t).price * t.units * t.storageUnits : 0
}
function y(t) {
var i = n.getPricingApiStore().data,
r;
if (!i) return "";
r = e(t, i);
switch (r) {
case "zone1":
return Core.Util.FormatString("{0}: {1}, {2}", "Zone 1", "North America", "Europe");
case "zone2":
return Core.Util.FormatString("{0}: {1}, {2}, {3}", "Zone 2", "Asia Pacific", "Japan", "Australia");
case "zone3":
return Core.Util.FormatString("{0}: {1}", "Zone 3", "Brazil");
case "zone4":
return Core.Util.FormatString("{0}", "DE (trustee): Germany");
default:
return ""
}
return ""
}
function e(n, t) {
for (var i in t.availableRegionsPerZone)
if (t.availableRegionsPerZone[i].indexOf(n.region) >= 0) return i;
return ""
}
function p(t) {
var r = n.getPricingApiStore().data;
return r ? r.portSpeed.filter(function (n) {
return i(t.region, t.plan, n.slug)
}).map(function (n) {
var i = u(t.region, t.plan, n.slug);
return {
slug: n.slug,
values: {
displayStrings: [n.displayName],
number: {
value: i,
decimals: 2,
format: "currency",
rate: "{0}/mo"
}
}
}
}) : []
}
var r = "ExpressRoute",
o, n;
o = React.createClass({
displayName: "ExpressRoute",
onChange: Acom.Calculator.onChange,
render: function () {
var n = this.props,
i = this.props.dataStore.pricingData;
return React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: n.dataStore.module.icon
}), " ", React.createElement("input", {
className: "text-input",
name: "name",
placeholder: r,
defaultValue: n.name
})), React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Region",
name: "region",
options: i.regions,
defaultValue: n.region
}), React.createElement(CalculatorDropdown, {
label: "Data Plan",
name: "plan",
options: i.plans,
defaultValue: n.plan
})), React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(DetailedDropdown, {
key: n.plan + n.region,
label: "Port speed cost",
name: "portSpeed",
options: p(n),
delimiters: ["colon"],
defaultValue: n.portSpeed,
onChange: this.onChange
}), React.createElement("div", null, React.createElement(Checkbox, {
label: "Premium add-on",
name: "premium",
defaultChecked: n.premium
}))), React.createElement("div", {
className: "cost no-divider"
}, React.createElement(StaticNumber, {
label: "Port speed cost",
value: React.createElement(Acom.Atoms.Number, {
value: u(n.region, n.plan, n.portSpeed),
decimals: "2",
format: "currency"
})
}), displayIf(n.premium, React.createElement("div", {
className: "math"
}, "+")), displayIf(n.premium, React.createElement(StaticNumber, {
label: "Premium",
value: React.createElement(Acom.Atoms.Number, {
value: h(n.region, n.plan, n.portSpeed),
decimals: "2",
format: "currency"
})
})), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: c(n),
decimals: "2",
format: "currency"
}))), displayIf(n.displaySku && n.sku.base, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, n.sku.base))))), displayIf(n.plan === "metered", React.createElement("div", {
className: "cost"
}, React.createElement("h3", null, "Additional outbound data transfer"), React.createElement("p", null, formatReact("The {0} circuit has a max outbound data transfer limit of {1} TB/mo ({2} GB/mo).", n.portSpeed, t(n.region, n.plan, n.portSpeed).outboundDataTransferLimit.toString(), (t(n.region, n.plan, n.portSpeed).outboundDataTransferLimit * 1024).toString())), React.createElement("h4", null, y(n)), React.createElement(FactoredInput, {
key: "factor-units-" + n.storageUnits,
defaultValue: n.units,
name: "units",
factorsName: "storageUnits",
factorsDefault: n.storageUnits,
factorUnit: "gbs",
min: "0",
max: "500",
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(StaticNumber, {
label: "Per GB",
value: React.createElement(Acom.Atoms.Number, {
value: f(n).price,
decimals: "3",
format: "currency"
})
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: l(n),
decimals: "2",
format: "currency"
}))), displayIf(n.displaySku && n.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, n.sku && n.sku.dataTransfers))))))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("span", {
className: "sub-total"
}, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n.price,
decimals: "2",
format: "currency"
}))))))
}
});
n = Acom.Calculator.createModule({
slug: "expressroute",
displayName: r,
description: "Dedicated private network fiber connections to Azure",
pricingApi: "/api/v1/pricing/expressroute/calculator/",
component: o,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="expressroute" viewBox="0 0 50 50"> <rect x="9.8" y="32.8" fill="#68217A" width="31" height="3.8"/> <rect x="4.4" y="23.4" transform="matrix(0.7071 -0.7071 0.7071 0.7071 -13.5374 18.0172)" fill="#68217A" width="21.2" height="3.8"/> <rect x="24.5" y="23.4" transform="matrix(0.7071 0.7071 -0.7071 0.7071 28.2012 -17.3844)" fill="#68217A" width="21.2" height="3.8"/> <path fill="#7FBA00" d="M25,9.7c-3.1,0-5.6,2.5-5.6,5.6c0,3.1,2.5,5.6,5.6,5.6s5.6-2.5,5.6-5.6C30.6,12.2,28.1,9.7,25,9.7z M25,17.1 c-1,0-1.8-0.8-1.8-1.8s0.8-1.8,1.8-1.8s1.8,0.8,1.8,1.8S26,17.1,25,17.1z"/> <path fill="#7FBA00" d="M5.6,29.1c-3.1,0-5.6,2.5-5.6,5.6c0,3.1,2.5,5.6,5.6,5.6s5.6-2.5,5.6-5.6C11.2,31.6,8.7,29.1,5.6,29.1z M5.6,36.5c-1,0-1.8-0.8-1.8-1.8s0.8-1.8,1.8-1.8s1.8,0.8,1.8,1.8S6.6,36.5,5.6,36.5z"/> <path fill="#7FBA00" d="M44.4,29.1c-3.1,0-5.6,2.5-5.6,5.6c0,3.1,2.5,5.6,5.6,5.6s5.6-2.5,5.6-5.6C50,31.6,47.5,29.1,44.4,29.1z M44.4,36.5c-1,0-1.8-0.8-1.8-1.8s0.8-1.8,1.8-1.8s1.8,0.8,1.8,1.8S45.4,36.5,44.4,36.5z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#expressroute"><\/use><\/svg>'
},
getInitialState: function () {
return {
region: "us-east",
plan: "metered",
portSpeed: "50mbps",
premium: !1,
units: 0,
storageUnits: "1",
zone: "zone1"
}
},
getPrice: function (t) {
var i = n.getPricingApiStore().data;
return i ? a(t) + (t.plan === "metered" ? l(t) : 0) : 0
},
getDisplayName: function (n) {
return n.name || r
},
willUpdate: function (t, r) {
var o = n.getPricingApiStore().data,
u, f;
if (!i(r.region, r.plan, r.portSpeed))
for (f = 0; u = o.portSpeed[f]; f++)
if (i(r.region, r.plan, u.slug)) {
r.portSpeed = u.slug;
break
}
return r.zone = e(t, o), r
},
getSku: function (t) {
var i = {};
return n.getPricingApiStore().data ? (i.base = v(t.region, t.plan, t.portSpeed, t.premium), t.plan === "metered" && (i.dataTransfers = f(t).sku), i) : undefined
},
getDescription: function (n) {
var t = "";
return t = n.plan === "metered" ? Core.Util.FormatString("Metered data plan, {0} port speed, Outbound data transfer: {1} {2}/Month in {3}", n.portSpeed, n.zone, n.zoneStorageUnits, n.region) : Core.Util.FormatString("Unlimeted data plan, {0} port speed", n.portSpeed), n.premium && (t += " + premium add-on"), t
},
isValidOffer: function (n) {
return i(n.region, n.plan, n.portSpeed)
}
});
Acom.Calculator.Actions.modules.register(n)
}();
! function () {
"use strict";
function t(t) {
var i = n.getPricingApiStore().data;
return i ? {
executions: getGraduatedPrice(i.graduatedOffers.compute[t.region].prices, t.memorySize / 1024 * t.executionTime * t.executionCount),
requests: getGraduatedPrice(i.graduatedOffers.requests[t.region].prices, Math.ceil(t.executionCount / 1e6))
} : 0
}
var i = "Functions",
r, n;
r = React.createClass({
displayName: "Functions",
onChange: Acom.Calculator.onChange,
render: function () {
var r = this.props,
u = n.getPricingApiStore().data;
return React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: r.dataStore.module.icon
}), " ", React.createElement("input", {
className: "text-input",
name: "name",
placeholder: i,
defaultValue: r.name
})), React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Region",
name: "region",
options: u.regions,
defaultValue: r.region
})), React.createElement("p", null, "The first 400,000 GB/s of execution and 1,000,000 executions are free.")), React.createElement("div", {
className: "cost no-divider"
}, React.createElement("h3", null, "Executions"), React.createElement(CalculatorDropdown, {
label: "Memory size",
name: "memorySize",
options: u.memorySizes,
defaultValue: r.memorySize,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(TextNumber, {
label: "Execution time (in seconds)",
name: "executionTime",
min: "0",
max: "9999",
defaultValue: r.executionTime,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(TextNumber, {
label: "Executions per month",
name: "executionCount",
min: "0",
max: "999999999",
defaultValue: r.executionCount,
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: t(r).executions,
decimals: "2",
format: "currency"
}))))), React.createElement("div", {
className: "cost sub-module"
}, React.createElement("h3", null, "Requests"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "2px"
}
}, React.createElement("div", {
className: "numeric static"
}, r.executionCount), React.createElement("label", {
className: "label"
}, "Execution count")), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: t(r).requests,
decimals: "2",
format: "currency"
}))))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("span", {
className: "sub-total"
}, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: r.price,
decimals: "2",
format: "currency"
}))))))
}
});
n = Acom.Calculator.createModule({
slug: "functions",
displayName: i,
description: "Process events with serverless code",
pricingApi: "/api/v1/pricing/functions/calculator/",
component: r,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="functions" viewBox="7 -7 64 64"> <path fill="#3999C6" d="M70.6,25.4c0.6-0.6,0.5-1.7,0-2.3L67.5,20L53.7,6.6c-0.6-0.6-1.5-0.6-2.2,0l0,0c-0.6,0.6-0.8,1.7,0,2.3 L66,23.1c0.6,0.6,0.6,1.7,0,2.3L51.2,40.1c-0.6,0.6-0.6,1.7,0,2.3l0,0c0.6,0.6,1.7,0.5,2.2,0l13.7-13.6c0,0,0,0,0.1-0.1L70.6,25.4z"/> <path fill="#3999C6" d="M7.4,25.4c-0.6-0.6-0.5-1.7,0-2.3l3.1-3.1L24.3,6.6c0.6-0.6,1.5-0.6,2.2,0l0,0c0.6,0.6,0.8,1.7,0,2.3 L12.3,23.1c-0.6,0.6-0.6,1.7,0,2.3l14.5,14.7c0.6,0.6,0.6,1.7,0,2.3l0,0c-0.6,0.6-1.7,0.5-2.2,0L10.6,29c0,0,0,0-0.1-0.1L7.4,25.4z"/> <polygon fill="#FCD116" points="54.6,-4.5 35.1,-4.5 24.6,25.1 37.4,25.2 27.4,54.5 55,15.4 41.6,15.4 "/> <polygon opacity="0.3" fill="#FF8C00" points="41.6,15.4 54.6,-4.5 44.4,-4.5 33.6,20.1 46.4,20.2 27.4,54.5 55,15.4 "/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#functions"><\/use><\/svg>'
},
getInitialState: function () {
return {
region: "us-west",
memorySize: "128",
executionTime: 0,
executionCount: 0
}
},
getPrice: function (i) {
var r = n.getPricingApiStore().data;
return r ? t(i).executions + t(i).requests : 0
},
getDisplayName: function (n) {
return n.name || i
},
getDescription: function (n) {
return Core.Util.FormatString("{0} MB Memory Size, {1} second(s) Execution time, {2} Execution(s)/month", n.memorySize, n.executionTime, n.executionCount)
}
});
Acom.Calculator.Actions.modules.register(n)
}();
! function () {
"use strict";
function r(n) {
var r = i.getPricingApiStore().data,
t;
if (!r) return undefined;
for (t = 0; t < r.nodes.length; t++)
if (r.nodes[t].slug === n) return r.nodes[t].displayName
}
function u(n, t) {
var r = i.getPricingApiStore().data;
return r ? r.availableNodeCountPerCluster[n + "-" + t].count : undefined
}
function f(n, t) {
var r = i.getPricingApiStore().data;
return r ? r.availableNodeCountPerCluster[n + "-" + t].fixed ? r.availableNodeCountPerCluster[n + "-" + t].count : "999" : undefined
}
function v(n, t) {
var r = i.getPricingApiStore().data;
return r ? r.instances.filter(function (i) {
return r.availableInstancesPerCluster[n + "-" + t].indexOf(i.slug) !== -1
}) : undefined
}
function t(n, t, r) {
var f = i.getPricingApiStore().data,
u;
return f ? (u = f.offers[r + "-" + t], typeof u.prices[n] != "undefined" && u) : undefined
}
function o(n, t, r) {
var u = i.getPricingApiStore().data;
return u ? typeof u.offers[r + "-" + t].prices[n] != "undefined" : undefined
}
function n(n, r, u) {
var f = t(n, r, u),
e = i.getPricingApiStore().data;
return e ? f && f.prices[n] : 0
}
function c(n) {
var i = ["usgov-virginia", "us-west-central", "canada-central", "canada-east"],
t = 0;
for (t; t < i.length; t++)
if (i[t] === n.region) return !0
}
function y(n) {
for (var i = {
hadoop: ["hadoopHead", "hadoopWorker"],
hbase: ["hbaseHead", "hbaseRegion", "hbaseZookeeper"],
storm: ["stormNimbus", "stormZookeeper", "stormSupervisor"],
spark: ["sparkHead", "sparkWorker"]
}, t = 0; t < i[n.cluster].length; t++)
if (n[i[n.cluster][t]] === "a10" || n[i[n.cluster][t]] === "a11") return !0
}
function e(n, i, r) {
var u = t(n, i, r);
return u && u.skus[n] ? u && u.skus[n] : ""
}
function l(n) {
var u = i.getPricingApiStore().data,
r = 0;
if (!u) return 0;
switch (n.cluster) {
case "hadoop":
r += n.hadoopHeadCount * t(n.region, n.hadoopHead, n.type).cores;
r += n.hadoopWorkerCount * t(n.region, n.hadoopWorker, n.type).cores;
n.rServer && (r += n.edgeServerCount * t(n.region, n.edgeServer, n.type).cores);
break;
case "hbase":
r += n.hbaseHeadCount * t(n.region, n.hbaseHead, n.type).cores;
r += n.hbaseRegionCount * t(n.region, n.hbaseRegion, n.type).cores;
r += n.hbaseZookeeperCount * t(n.region, n.hbaseZookeeper, n.type).cores;
n.rServer && (r += n.edgeServerCount * t(n.region, n.edgeServer, n.type).cores);
break;
case "storm":
r += n.stormSupervisorCount * t(n.region, n.stormSupervisor, n.type).cores;
r += n.stormNimbusCount * t(n.region, n.stormNimbus, n.type).cores;
r += n.stormZookeeperCount * t(n.region, n.stormZookeeper, n.type).cores;
n.rServer && (r += n.edgeServerCount * t(n.region, n.edgeServer, n.type).cores);
break;
case "spark":
r += n.sparkHeadCount * t(n.region, n.sparkHead, n.type).cores;
r += n.sparkWorkerCount * t(n.region, n.sparkWorker, n.type).cores;
n.rServer && (r += n.edgeServerCount * t(n.region, n.edgeServer, n.type).cores)
}
return r
}
function s(n) {
var t = i.getPricingApiStore().data;
return t ? {
premium: t.offers["premium-addon"].prices[n.region] * n.totalCores * n.premiumCoreHours * n.premiumCoreHoursFactor,
rServer: t.offers["rserver-addon"].prices[n.region] * n.totalCores * n.rServerCoreHours * n.rServerCoreHoursFactor
} : 0
}
var h = "HDInsight",
a, i;
a = React.createClass({
displayName: "HDInsight",
onChange: Acom.Calculator.onChange,
getSizes: function (i) {
var r = this.props,
u = i === "edgenode" ? "rserver" : r.cluster;
return v(u, i).filter(function (n) {
return o(r.region, n.slug, r.type)
}).map(function (i) {
var u = t(r.region, i.slug, r.type),
f = n(r.region, i.slug, r.type, r.tier);
return {
slug: i.slug,
values: {
displayStrings: [i.displayName, formatString("{0} cores", u.cores), formatString("{0} GB RAM", u.ram), formatString("{0} GB Disk", u.diskSize)],
number: {
value: f,
decimals: 2,
format: "currency",
rate: "{0}/hr"
}
}
}
})
},
getOffers: function () {
var t = this.props;
return t.cluster === "hadoop" ? React.createElement("div", null, React.createElement("div", {
className: "detail line-item"
}, React.createElement("h3", null, formatString("{0} node", r("head"))), React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(DetailedDropdown, {
key: "hadoopHead" + t.size + t.region,
label: "Instance size",
name: "hadoopHead",
options: this.getSizes("head"),
delimiters: ["colon", "comma"],
defaultValue: t.hadoopHead,
onChange: this.onChange
})), React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
label: "Instances",
name: "hadoopHeadCount",
min: u("hadoop", "head"),
max: f("hadoop", "head"),
defaultValue: t.hadoopHeadCount,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(FactoredInput, {
key: "factor-hadoopHeadHours-" + t.hadoopHeadHoursFactor,
name: "hadoopHeadHours",
defaultValue: t.hadoopHeadHours,
factorsName: "hadoopHeadHoursFactor",
factorsDefault: t.hadoopHeadHoursFactor || "1",
factorUnit: "hours",
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n(t.region, t.hadoopHead, t.type, t.tier) * t.hadoopHeadCount * t.hadoopHeadHours * (t.hadoopHeadHoursFactor || "1"),
decimals: "2",
format: "currency"
}))), displayIf(t.displaySku && t.sku.hadoopHead, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, t.sku.hadoopHead)))))), React.createElement("div", {
className: "detail line-item"
}, React.createElement("h3", null, formatString("{0} node", r("worker"))), React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(DetailedDropdown, {
key: "hadoopWorker" + t.size + t.region,
label: "Instance size",
name: "hadoopWorker",
options: this.getSizes("worker"),
delimiters: ["colon", "comma"],
defaultValue: t.hadoopWorker,
onChange: this.onChange
})), React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
label: "Instances",
name: "hadoopWorkerCount",
min: u("hadoop", "worker"),
max: f("hadoop", "worker"),
defaultValue: t.hadoopWorkerCount,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(FactoredInput, {
key: "factor-hadoopWorkerHoursFactor-" + t.hadoopWorkerHoursFactor,
name: "hadoopWorkerHours",
defaultValue: t.hadoopWorkerHours,
factorsName: "hadoopWorkerHoursFactor",
factorsDefault: t.hadoopWorkerHoursFactor || "1",
factorUnit: "hours",
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n(t.region, t.hadoopWorker, t.type, t.tier) * t.hadoopWorkerCount * t.hadoopWorkerHours * (t.hadoopWorkerHoursFactor || "1"),
decimals: "2",
format: "currency"
}))), displayIf(t.displaySku && t.sku.hadoopWorker, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, t.sku.hadoopWorker))))))) : t.cluster === "hbase" ? React.createElement("div", null, React.createElement("div", {
className: "detail line-item"
}, React.createElement("h3", null, formatString("{0} node", r("head"))), React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(DetailedDropdown, {
key: "hbaseHead" + t.size + t.region,
label: "Instance size",
name: "hbaseHead",
options: this.getSizes("head"),
delimiters: ["colon", "comma"],
defaultValue: t.hbaseHead,
onChange: this.onChange
})), React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
label: "Instances",
name: "hbaseHeadCount",
min: u("hbase", "head"),
max: f("hbase", "head"),
defaultValue: t.hbaseHeadCount,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(FactoredInput, {
key: "factor-hbaseHeadHoursFactor-" + t.hbaseHeadHoursFactor,
name: "hbaseHeadHours",
defaultValue: t.hbaseHeadHours,
factorsName: "hbaseHeadHoursFactor",
factorsDefault: t.hbaseHeadHoursFactor || "1",
factorUnit: "hours",
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n(t.region, t.hbaseHead, t.type) * t.hbaseHeadCount * t.hbaseHeadHours * (t.hbaseHeadHoursFactor || "1"),
decimals: "2",
format: "currency"
}))), displayIf(t.displaySku && t.sku.hbaseHead, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, t.sku.hbaseHead)))))), React.createElement("div", {
className: "detail line-item"
}, React.createElement("h3", null, formatString("{0} node", r("region"))), React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(DetailedDropdown, {
key: "hbaseRegion" + t.size + t.region,
label: "Instance size",
name: "hbaseRegion",
options: this.getSizes("region"),
delimiters: ["colon", "comma"],
defaultValue: t.hbaseRegion,
onChange: this.onChange
})), React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
label: "Instances",
name: "hbaseRegionCount",
min: u("hbase", "region"),
max: f("hbase", "region"),
defaultValue: t.hbaseRegionCount,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(FactoredInput, {
key: "factor-hbaseRegionHoursFactor-" + t.hbaseRegionHoursFactor,
name: "hbaseRegionHours",
defaultValue: t.hbaseRegionHours,
factorsName: "hbaseRegionHoursFactor",
factorsDefault: t.hbaseRegionHoursFactor || "1",
factorUnit: "hours",
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n(t.region, t.hbaseRegion, t.type) * t.hbaseRegionCount * t.hbaseRegionHours * (t.hbaseRegionHoursFactor || "1"),
decimals: "2",
format: "currency"
}))), displayIf(t.displaySku && t.sku.hbaseRegion, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, t.sku.hbaseRegion)))))), React.createElement("div", {
className: "detail line-item"
}, React.createElement("h3", null, formatString("{0} node", r("zookeeper"))), React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(DetailedDropdown, {
key: "hbaseZookeeper" + t.size + t.region,
label: "Instance size",
name: "hbaseZookeeper",
options: this.getSizes("zookeeper"),
delimiters: ["colon", "comma"],
defaultValue: t.hbaseZookeeper,
onChange: this.onChange
})), React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
label: "Instances",
name: "hbaseZookeeperCount",
min: u("hbase", "zookeeper"),
max: f("hbase", "zookeeper"),
defaultValue: t.hbaseZookeeperCount,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(FactoredInput, {
key: "factor-hbaseZookeeperHoursFactor-" + t.hbaseZookeeperHoursFactor,
name: "hbaseZookeeperHours",
defaultValue: t.hbaseZookeeperHours,
factorsName: "hbaseZookeeperHoursFactor",
factorsDefault: t.hbaseZookeeperHoursFactor || "1",
factorUnit: "hours",
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n(t.region, t.hbaseZookeeper, t.type) * t.hbaseZookeeperCount * t.hbaseZookeeperHours * (t.hbaseZookeeperHoursFactor || "1"),
decimals: "2",
format: "currency"
}))), displayIf(t.displaySku && t.sku.hbaseZookeeper, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, t.sku.hbaseZookeeper))))))) : t.cluster === "storm" ? React.createElement("div", null, React.createElement("div", {
className: "detail line-item"
}, React.createElement("h3", null, formatString("{0} node", r("supervisor"))), React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(DetailedDropdown, {
key: "stormSupervisor" + t.size + t.region,
label: "Instance size",
name: "stormSupervisor",
options: this.getSizes("supervisor"),
delimiters: ["colon", "comma"],
defaultValue: t.stormSupervisor,
onChange: this.onChange
})), React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
label: "Instances",
name: "stormSupervisorCount",
min: u("storm", "supervisor"),
max: f("storm", "supervisor"),
defaultValue: t.stormSupervisorCount,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(FactoredInput, {
key: "factor-stormSupervisorHoursFactor-" + t.stormSupervisorHoursFactor,
name: "stormSupervisorHours",
defaultValue: t.stormSupervisorHours,
factorsName: "stormSupervisorHoursFactor",
factorsDefault: t.stormSupervisorHoursFactor || "1",
factorUnit: "hours",
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n(t.region, t.stormSupervisor, t.type) * t.stormSupervisorCount * t.stormSupervisorHours * (t.stormSupervisorHoursFactor || "1"),
decimals: "2",
format: "currency"
}))), displayIf(t.displaySku && t.sku.stormSupervisor, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, t.sku.stormSupervisor)))))), React.createElement("div", {
className: "detail line-item"
}, React.createElement("h3", null, formatString("{0} node", r("nimbus"))), React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(DetailedDropdown, {
key: "stormNimbus" + t.size + t.region,
label: "Instance size",
name: "stormNimbus",
options: this.getSizes("nimbus"),
delimiters: ["colon", "comma"],
defaultValue: t.stormNimbus,
onChange: this.onChange
})), React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
label: "Instances",
name: "stormNimbusCount",
min: u("storm", "nimbus"),
max: f("storm", "nimbus"),
defaultValue: t.stormNimbusCount,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(FactoredInput, {
key: "factor-stormNimbusHoursFactor-" + t.stormNimbusHoursFactor,
name: "stormNimbusHours",
defaultValue: t.stormNimbusHours,
factorsName: "stormNimbusHoursFactor",
factorsDefault: t.stormNimbusHoursFactor || "1",
factorUnit: "hours",
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n(t.region, t.stormNimbus, t.type) * t.stormNimbusCount * t.stormNimbusHours * (t.stormNimbusHoursFactor || "1"),
decimals: "2",
format: "currency"
}))), displayIf(t.displaySku && t.sku.stormNimbus, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, t.sku.stormNimbus)))))), React.createElement("div", {
className: "detail line-item"
}, React.createElement("h3", null, formatString("{0} node", r("zookeeper"))), React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(DetailedDropdown, {
key: "stormZookeeper" + t.size + t.region,
label: "Instance size",
name: "stormZookeeper",
options: this.getSizes("zookeeper"),
delimiters: ["colon", "comma"],
defaultValue: t.stormZookeeper,
onChange: this.onChange
})), React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
label: "Instances",
name: "stormZookeeperCount",
min: u("storm", "zookeeper"),
max: f("storm", "zookeeper"),
defaultValue: t.stormZookeeperCount,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(FactoredInput, {
key: "factor-stormZookeeperHoursFactor-" + t.stormZookeeperHoursFactor,
name: "stormZookeeperHours",
defaultValue: t.stormZookeeperHours,
factorsName: "stormZookeeperHoursFactor",
factorsDefault: t.stormZookeeperHoursFactor || "1",
factorUnit: "hours",
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n(t.region, t.stormZookeeper, t.type) * t.stormZookeeperCount * t.stormZookeeperHours * (t.stormZookeeperHoursFactor || "1"),
decimals: "2",
format: "currency"
}))), displayIf(t.displaySku && t.sku.stormZookeeper, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, t.sku.stormZookeeper))))))) : t.cluster === "spark" ? React.createElement("div", null, React.createElement("div", {
className: "detail line-item"
}, React.createElement("h3", null, formatString("{0} node", r("head"))), React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(DetailedDropdown, {
key: "sparkHead" + t.size + t.region,
label: "Instance size",
name: "sparkHead",
options: this.getSizes("head"),
delimiters: ["colon", "comma"],
defaultValue: t.sparkHead,
onChange: this.onChange
})), React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
label: "Instances",
name: "sparkHeadCount",
min: u("spark", "head"),
max: f("spark", "head"),
defaultValue: t.sparkHeadCount,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(FactoredInput, {
key: "factor-sparkHeadHoursFactor-" + t.sparkHeadHoursFactor,
name: "sparkHeadHours",
defaultValue: t.sparkHeadHours,
factorsName: "sparkHeadHoursFactor",
factorsDefault: t.sparkHeadHoursFactor || "1",
factorUnit: "hours",
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n(t.region, t.sparkHead, t.type, t.tier) * t.sparkHeadCount * t.sparkHeadHours * (t.sparkHeadHoursFactor || "1"),
decimals: "2",
format: "currency"
}))), displayIf(t.displaySku && t.sku.sparkHead, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, t.sku.sparkHead)))))), React.createElement("div", {
className: "detail line-item"
}, React.createElement("h3", null, formatString("{0} node", r("worker"))), React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(DetailedDropdown, {
key: "sparkWorker" + t.size + t.region,
label: "Instance size",
name: "sparkWorker",
options: this.getSizes("worker"),
delimiters: ["colon", "comma"],
defaultValue: t.sparkWorker,
onChange: this.onChange
})), React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
label: "Instances",
name: "sparkWorkerCount",
min: u("spark", "worker"),
max: f("spark", "worker"),
defaultValue: t.sparkWorkerCount,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(FactoredInput, {
key: "factor-sparkWorkerHoursFactor-" + t.sparkWorkerHoursFactor,
name: "sparkWorkerHours",
defaultValue: t.sparkWorkerHours,
factorsName: "sparkWorkerHoursFactor",
factorsDefault: t.sparkWorkerHoursFactor || "1",
factorUnit: "hours",
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n(t.region, t.sparkWorker, t.type, t.tier) * t.sparkWorkerCount * t.sparkWorkerHours * (t.sparkWorkerHoursFactor || "1"),
decimals: "2",
format: "currency"
}))), displayIf(t.displaySku && t.sku.sparkWorker, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, t.sku.sparkWorker))))))) : void 0
},
render: function () {
var e = this,
t = e.props,
i = t.dataStore.pricingData,
o = i.clusterTypes.filter(function (n) {
return n.slug !== "rserver"
}),
a = i.types.map(function (n) {
return {
slug: n.slug,
displayName: n.displayName,
disabled: c(t)
}
});
return React.createElement("div", {
key: t.cluster + t.node,
onChange: e.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: t.dataStore.module.icon
}), " ", React.createElement("input", {
className: "text-input",
name: "name",
placeholder: h,
defaultValue: t.name
})), React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Region",
name: "region",
options: i.regions,
defaultValue: t.region
}), React.createElement(CalculatorDropdown, {
label: "Type",
name: "type",
options: a,
defaultValue: t.type
}), React.createElement("div", null, React.createElement(Checkbox, {
label: "R-Server",
name: "rServer",
defaultChecked: t.rServer
}))), React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Cluster type",
name: "cluster",
options: o,
defaultValue: t.cluster
}), React.createElement(CalculatorDropdown, {
label: "Tier",
name: "tier",
options: i.tiers,
defaultValue: t.tier
})), displayIf(c(t), React.createElement("p", null, "HDInsight is only offered with Linux in this region.")), displayIf(y(t), React.createElement("div", {
className: "wa-notification calculator-notification"
}, React.createElement("span", {
className: "wa-iconBoxed"
}, React.createElement("span", {
className: "icon",
dangerouslySetInnerHTML: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="health-information" viewBox="0 0 21 21"> <title lang="en">Health Information<\/title> <path d="M11.042,20.833a10,10,0,1,1,10-10A10.011,10.011,0,0,1,11.042,20.833Z" transform="translate(-0.542 -0.333)" style="fill:#0073b0"/> <path d="M11.042,1.333a9.5,9.5,0,1,1-9.5,9.5,9.511,9.511,0,0,1,9.5-9.5m0-1a10.5,10.5,0,1,0,10.5,10.5,10.5,10.5,0,0,0-10.5-10.5Z" transform="translate(-0.542 -0.333)" style="fill:#0073b0"/> <circle cx="10.5" cy="6.131" r="1.631" style="fill:#fff"/> <polygon points="10.256 16.667 10.744 16.667 11.792 16.667 11.792 9.667 10.744 9.667 10.256 9.667 9.053 9.667 9.038 16.667 10.256 16.667" style="fill:#fff"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#health-information"><\/use><\/svg>'
}
})), React.createElement("p", null, "Selecting A10 or A11 node types requires all nodes to be A10 or A11."))), this.getOffers(), displayIf(t.rServer, React.createElement("div", {
className: "detail line-item"
}, React.createElement("h3", null, r("edgenode")), React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(DetailedDropdown, {
key: "edge-server" + t.size + t.region,
label: "Instance size",
name: "edgeServer",
options: this.getSizes("edgenode"),
delimiters: ["colon", "comma"],
defaultValue: t.edgeServer,
onChange: this.onChange
})), React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
label: "Instances",
name: "edgeServerCount",
min: u("rserver", "edgenode"),
max: f("rserver", "edgenode"),
defaultValue: t.edgeServerCount,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(FactoredInput, {
key: "factor-edgeServerHours-" + t.edgeServerHoursFactor,
name: "edgeServerHours",
defaultValue: t.edgeServerHours,
factorsName: "edgeServerHoursFactor",
factorsDefault: t.edgeServerHoursFactor || "1",
factorUnit: "hours",
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n(t.region, t.edgeServer, t.type, t.tier) * t.edgeServerCount * t.edgeServerHours * (t.edgeServerHoursFactor || "1"),
decimals: "2",
format: "currency"
}))), displayIf(t.displaySku && t.sku.edgeServer, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, t.sku.edgeServer))))))), displayIf(t.tier === "premium", React.createElement("div", {
className: t.rServer ? "cost" : "cost no-divider"
}, React.createElement("h3", null, "Premium surcharge"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "2px"
}
}, React.createElement("div", {
className: "numeric static"
}, l(t)), React.createElement("label", {
className: "label"
}, "Total cores")), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: i.offers["premium-addon"].prices[t.region],
decimals: "2",
format: "currency"
}), React.createElement("label", {
className: "label"
}, "Per core"))), React.createElement("div", {
className: "math"
}, "×"), React.createElement(FactoredInput, {
key: "factor-premiumCoreHours-" + t.premiumCoreHoursFactor,
name: "premiumCoreHours",
defaultValue: t.premiumCoreHours,
factorsName: "premiumCoreHoursFactor",
factorsDefault: t.premiumCoreHoursFactor || "1",
factorUnit: "hours",
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: s(t).premium,
decimals: "2",
format: "currency"
})))))), displayIf(t.rServer, React.createElement("div", {
className: t.tier === "premium" ? "cost sub-module" : "cost"
}, React.createElement("h3", null, "R-Server surcharge"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "2px"
}
}, React.createElement("div", {
className: "numeric static"
}, l(t)), React.createElement("label", {
className: "label"
}, "Total cores")), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: i.offers["rserver-addon"].prices[t.region],
decimals: "2",
format: "currency"
}), React.createElement("label", {
className: "label"
}, "Per core"))), React.createElement("div", {
className: "math"
}, "×"), React.createElement(FactoredInput, {
key: "factor-rServerCoreHours-" + t.rServerCoreHoursFactor,
name: "rServerCoreHours",
defaultValue: t.rServerCoreHours,
factorsName: "rServerCoreHoursFactor",
factorsDefault: t.rServerCoreHoursFactor || "1",
factorUnit: "hours",
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: s(t).rServer,
decimals: "2",
format: "currency"
})))))), React.createElement("div", {
className: t.rServer || t.tier === "premium" ? "cost" : "cost no-divider"
}, React.createElement("div", {
className: "total"
}, React.createElement("span", {
className: "sub-total"
}, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: t.price,
decimals: "2",
format: "currency"
})))))))
}
});
i = Acom.Calculator.createModule({
slug: "hdinsight",
displayName: h,
description: "Provision cloud Hadoop, Spark, R Server, HBase, and Storm clusters",
pricingApi: "/api/v1/pricing/hdinsight/calculator/",
component: a,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="hdinsight" viewBox="0 0 50 50"> <polygon fill-rule="evenodd" clip-rule="evenodd" fill="#FCD116" points="17.2,14 13.7,14.6 10.6,16 7.9,17.7 5.3,20.8 3.9,22.3 2.5,22.8 2.1,21.9 2.8,21 2.9,19.7 3.4,19.7 3.8,20.1 3.7,18.8 3.2,18.4 3.2,17.9 2,18.6 0.8,19.9 0.6,21.1 1.1,22.1 1.5,23.7 2.4,24.1 3.4,24.1 4.3,23.5 3.7,26.6 4.3,30 3.6,31.6 1.5,33.9 1.8,35.4 2.9,37 4.8,38.3 5.9,38.5 7,38.5 6.3,41.5 8.9,42.6 12.2,43 13.3,42.2 13.4,40.3 14.7,38.2 14.8,36.5 17.8,36.8 20.6,36.5 17.8,38.2 18.3,40.2 20,43 21.8,43.7 23.1,43.2 23.7,42 26.6,39.8 27.2,40.3 31.7,40.5 32.6,39.7 32.7,38.4 32.4,37.9 32.2,34.4 30.7,31.4 30.9,30 31.8,30.5 34.4,32.9 35.6,33 37,32.4 38.4,31.4 39.1,29.1 43.1,29.4 45.6,28.4 47.6,26.6 49,23.9 49.4,20.7 49.1,17.1 48.3,13.8 47.5,12.7 46.4,12.4 44.5,14.5 42.8,15.1 41.3,12.6 39.8,11.2 38.9,10.7 35.7,7.9 33,6.5 30.4,6.3 27.3,6.8 24.6,7.8 22.8,9.3 21.3,11.1 19.8,11.5 "/> <polygon fill="#1E1E1E" points="3.7,20.8 4.1,21.3 4.2,20.7 3.9,20.7 "/> <path fill="#1E1E1E" d="M49.7,16.9c-0.2-1.5-0.6-3-1.2-4c-0.1-0.1-0.2-0.3-0.3-0.4c-0.3-0.3-0.7-0.5-1.1-0.7c-0.4-0.2-0.9-0.2-1.3,0 c-0.1,0.1-0.2,0.1-0.3,0.2c-0.2,0.2-0.4,0.5-0.6,0.8c-0.2,0.3-0.5,0.7-0.7,0.9c-0.3,0.3-0.7,0.4-1.1,0.6c-0.2-0.4-0.3-0.8-0.6-1.1 c-0.3-0.4-0.5-0.8-0.9-1.2c-0.3-0.3-0.5-0.5-0.8-0.8c-0.3-0.2-0.6-0.4-0.9-0.6c-0.9-0.6-1.6-1.2-2.4-1.9c-0.3-0.3-0.7-0.6-1-0.9 c-1.8-1.5-3.5-2.2-5.3-2.3c-1.8-0.1-3.7,0.4-6,1.3c-1.1,0.5-1.9,1-2.6,1.6c-0.7,0.6-1.2,1.3-1.9,2.2c-0.4,0-0.7,0.1-1,0.2 c-0.4,0.1-0.7,0.4-1.2,0.8c-0.3,0.3-0.6,0.6-0.9,0.8l0,0c-0.3,0.3-0.5,0.5-0.8,0.8c-2.1,0.3-3.7,0.7-5.2,1.3 c-1.5,0.6-2.9,1.4-4.3,2.6c-0.6,0.5-1.1,1-1.5,1.6c-0.4,0.6-0.8,1.1-1.1,1.7c-0.3,0.3-0.6,0.6-0.9,0.9c-0.3,0.3-0.6,0.5-1,0.6l0,0 c-0.2,0.1-0.3,0.1-0.3,0.1c0,0,0-0.1,0-0.1c0.5-0.5,0.6-1.2,0.6-1.9c0.1,0.1,0.1,0.2,0.2,0.3c0.1,0.1,0.1,0.2,0.2,0.3l0.2-0.2 l0.3,0.1c0.1-0.5,0.2-1,0.1-1.6c-0.1-0.3-0.2-0.6-0.5-0.8c0-0.1,0.1-0.1,0.1-0.2c0.1-0.2,0.2-0.4,0.2-0.7l-0.2-0.1l0,0l0.2,0.1 L4.2,17l-0.4,0.1c-0.6,0.1-1.8,0.8-2.7,1.7c-0.3,0.3-0.6,0.7-0.8,1.1C0,20.4,0,20.8,0,21.2c0.1,0.4,0.3,0.7,0.6,1.1 c0.1,0.3,0.1,0.5,0.2,0.7C0.9,23.2,1,23.4,1,23.6c0.3,0.5,0.7,0.9,1.1,1c0.4,0.1,0.8,0.1,1.2,0c-0.1,0.5-0.1,1-0.2,1.5 c0,0.7,0,1.5,0.1,2.4c0,0.2,0,0.4,0.1,0.6c0,0.2,0.1,0.4,0.1,0.6c-0.1,0.2-0.2,0.4-0.2,0.6c-0.1,0.3-0.2,0.7-0.4,1 c-0.3,0.3-0.5,0.5-0.8,0.8c-0.2,0.2-0.5,0.5-0.7,0.7c0,0-0.1,0.1-0.2,0.2c-0.5,0.5-0.6,0.6-0.5,1.4c0.1,0.5,0.3,1,0.5,1.6 c0.2,0.5,0.6,0.9,1,1.4C2.8,38,3.7,38.6,4.6,39c0.5,0.2,1.1,0.3,1.6,0.2c0,0.1,0,0.2-0.1,0.2c-0.1,0.2-0.2,0.4-0.3,0.7 c-0.6,1.4,0,2.1,1,2.5c0.5,0.2,1.1,0.4,1.6,0.5c0.1,0,0.2,0.1,0.4,0.1c0.6,0.2,1.8,0.5,2.8,0.6c1.1,0.1,2.1-0.2,2.4-1.2 c0.1-0.4,0.2-0.7,0.2-1c0-0.3,0-0.6,0-0.9c0.3-0.7,0.5-0.9,0.7-1.2c0-0.1,0.1-0.1,0.1-0.2c0.2-0.4,0.4-0.6,0.4-0.9c0-0.3,0-0.6,0-1 c0,0,0-0.1,0-0.2c0.6,0.1,1.3,0.1,1.9,0.1c0.3,0,0.6,0,1,0c-0.1,0-0.2,0.1-0.3,0.1c0,0-0.1,0-0.1,0.1c-0.9,0.4-0.9,1.3-0.6,2.1 c0.2,0.8,0.7,1.6,1.1,2c0.7,1,1.3,1.9,2,2.3c0.8,0.5,1.7,0.5,2.9-0.1c0.6-0.3,0.8-0.7,1-1.1c0.1-0.1,0.2-0.3,0.3-0.4 c0.2-0.2,0.8-0.7,1.5-1.2c0.2-0.2,0.4-0.3,0.7-0.5c0.2,0.1,0.3,0.2,0.6,0.3c0.3,0.1,0.7,0.1,1.1,0.1c0.3,0,1.4,0,2.1,0 c0.2,0,0.4,0,0.5,0c0.7,0,1.3,0,1.7-0.3c0.5-0.3,0.7-0.7,0.8-1.5c0-0.4,0-0.6,0-0.8c0-0.2-0.1-0.4-0.3-0.7c0-0.4,0-0.7,0-1.1 c0-0.4,0-0.8,0-1.1c0-0.4-0.1-0.8-0.2-1.2c-0.1-0.4-0.2-0.7-0.4-1.1c-0.1-0.3-0.2-0.5-0.3-0.8l-0.2,0.1l0,0l0.2-0.1v0 c-0.1-0.4-0.3-0.8-0.5-1.2c0-0.1,0-0.2,0-0.3c0.1,0.1,0.3,0.3,0.4,0.4l0.6,0.6c0.4,0.4,0.8,0.8,1.3,1.1c0.5,0.3,1,0.5,1.7,0.4 c0.7,0,1.5-0.3,2.2-0.8c0.6-0.5,1.1-1.1,1.4-1.8c0.1-0.2,0.1-0.4,0.2-0.6c0-0.2,0.1-0.3,0.1-0.5c1,0.2,2.2,0.2,3.2,0.1 c1-0.1,2.1-0.4,2.9-0.8c1.3-0.7,2.2-1.7,2.9-2.9l0,0c0.8-1.3,1.2-2.9,1.4-4.5C50.1,20.4,50,18.6,49.7,16.9z M34.7,29 c-0.3,1-0.8,2.7,0.6,3c0.5,0.1,0.8,0.1,1.5-0.3c-0.6,0.1-0.9,0.1-1.3,0c-0.4-0.1-0.6-0.3-0.7-0.6c0.1,0.1,0.3,0.1,0.7,0.2 c1,0.2,2-0.2,2.2-1c0.1-0.4,0.1-0.6,0.3-1.2c0.2,0.1,0.4,0.1,0.7,0.2c-0.1,0.4-0.3,0.8-0.4,1.3c-0.3,1.1-1.6,2-2.8,1.9 c-1.1,0-1.7-0.7-2.5-1.3c-0.5-0.4-1-0.9-1.5-1.3c-1.3-0.4-2.4-0.9-3.6-1.8c0.9,1,1.5,1.6,2.7,2.1c-0.2,1.8-0.8,3.1-1.3,4.8 c-0.2,0.8-2.1,3.9-2.7,4.2c-0.4,0.2-2.7,2.2-3.2,2.5c-0.3,0.4-0.6,1-1.1,1.3c-1.5,0.8-2.5-0.7-3.3-2c-0.4-0.6-1.4-2.3-0.5-2.8 c0.8-0.4,1.3-0.8,2.2-1.3c0.1,0.2,0.3,0.5,0.5,0.7c0-0.3-0.1-0.5-0.1-0.8c-0.1-0.5-0.1-0.8,0-1.3c0-0.4,0.1-0.9,0.1-1.3 c-0.1,0.5-0.4,0.9-0.5,1.4c-0.1,0.2-0.1,0.3-0.1,0.5c-1.9,0.4-3.9,0.4-5.8,0.1c-0.1-0.7-0.3-1.5-0.4-2c0,0.6,0,2.3,0,3.2 c0,0.7,0,1-0.4,1.6c-0.3,0.6-0.5,0.7-1,1.7c0,0.6,0,1-0.1,1.6c-0.3,1-3,0.2-3.7,0c-0.9-0.2-2.7-0.6-2.3-1.8c0.4-1,0.7-2.1,0.9-3.6 c-1.6-2.3-3.1-5.5-3.4-8.4c-0.2-2.2-0.1-3.6,0.4-4.9c0.8-2.1,1.8-4,3.5-5.5c2.3-2,4.4-2.8,7.8-3.3c-0.8,0.9-1.6,1.9-2.5,2.9 c-0.9,1-1.4,2.1-2,3.2c-0.8,1.6-0.8,2.2,0.3,3.5c0.9,1.2,1.4,1.7,1.7,2.9c-0.3,0.7-0.4,1.2-0.5,2.1c1.1,1.2,1.9,2,2.9,2.2 c1,0.2,1.9,0.2,2.8-0.3c2-1,3.9-2.4,6.2-2.5c1.1-2.6,1-4.8,0.4-7.4c-0.3-1.7-0.5-3.4-0.6-5.1c-0.4,1.8-0.5,3.4-0.2,5.2 c0.4,2.2,0.7,4.6-0.4,6.5c-2.1,0.2-3.9,1.4-5.8,2.4c-0.8,0.4-1.5,0.4-2.4,0.2C15.4,30.5,14.9,30,14,29c0-1,0.2-1.4,0.6-2.3 c0.7-1.4,1.5-2.7,2.4-4.1C16,23.9,15,25,14.2,26.2c-0.3-0.9-0.8-1.4-1.5-2.4c-0.7-1-0.8-1.4-0.3-2.6c0.6-1.2,1-2.2,2-3.2 c1.6-1.8,3.1-3.7,4.9-5.5c1-0.9,1.4-0.9,2.6-1.1c1.2-0.2,2.3-0.4,3.5-0.7C24.2,10.9,23.1,11,22,11c0,0,0,0,0,0 c1.1-1.4,1.7-2.2,3.5-3c4.4-1.9,7.2-2.1,10.6,0.8c0.9,0.8,1.7,1.5,2.6,2.1c-0.3,0-0.6,0.1-1,0.2c0.5-0.1,1,0,1.5,0.1 c0.1,0.1,0.3,0.2,0.4,0.3c0.6,0.4,1,0.6,1.4,1.2c0.5,0.6,0.8,1.3,1.2,2c-0.2-0.1-0.4-0.1-0.6-0.2c-0.1-0.1-0.3-0.1-0.4-0.1 c-0.3,0-0.5,0-0.8,0.2c0,0,0,0,0,0c-0.4,0.2-0.9,0.4-1.3,0.4c0.2,0.1,0.6,0.1,0.8,0c0,0,0.1,0,0.1,0c-0.1,0.1-0.1,0.3-0.2,0.5 c0,0.2,0,0.5,0.1,0.7c0,0,0,0,0,0c0,0.1,0.1,0.1,0.1,0.2c-0.2,0.1-0.3,0.1-0.5,0.2c0.8-0.1,1.6-0.1,2.4,0c0.1,0.3,0.1,0.5,0.2,0.8 c-0.1,0-0.2,0-0.3,0c0,0,0,0,0,0c-0.4-0.3-0.8-0.3-1.4-0.1c-1.7,0.4-1.3,1.4-2.1,2.9c0.8-1,0.8-2.1,2.1-2.4c0.3-0.1,0.5-0.2,0.7-0.1 c-0.4,0.2-0.7,0.5-0.9,0.9c-0.4,1.1-0.1,1.9-0.6,2.9c0.5-0.9,0.5-1.7,1-2.7c0.2-0.3,0.8-0.9,1.1-0.9c0.1,0,0.2,0,0.3,0 c0.1,0.6,0.1,1.2,0.1,1.6c-0.1,0.9-0.3,2.2-0.4,2.7c0.5-0.6,0.7-1.8,0.9-2.7c0.2-0.9,0.2-2,0-3c-0.3-1.4,1.1-1.1,1.9-1.8 c0.6-0.5,1-1.2,1.5-1.7c0.5-0.5,1.4,0.2,1.6,0.8c0.9,2.2,1.3,5.7,1.1,8c-0.3,2.5-1.5,5.3-3.7,6.5c-2.8,1.6-6.2,0.6-9-0.3 c-0.6-0.2-1-0.5-1.5-0.8C34.8,27.7,34.9,28.4,34.7,29z M32.2,39.1c-0.1,1-0.4,1.1-1.4,1.1c-0.4,0-2.1,0-2.5-0.1 c-0.6-0.1-0.9-0.1-1.1-0.2c0.9-0.7,2.5-3.5,2.8-4.5c0.3-1,0.7-1.9,0.9-2.9c0.1,0.4,0.2,0.8,0.4,1.2c0.3,0.7,0.4,1.1,0.5,1.9 c0,0.8,0,1.6,0.1,2.4C32.2,38.5,32.2,38.6,32.2,39.1z M3,18.3c-0.2,0.3-0.3,0.6-0.3,0.8c-0.3,1.1,0.1,2.1-0.9,2.9 c0.5,0.9,0.4,1.3,1.5,0.9c0.4-0.2,0.8-0.4,1.1-0.7C4.3,22.6,4.1,23,4,23.4c0,0.1,0,0.1-0.1,0.2c-0.8,0.3-1.8,0.5-2.2-0.3 c-0.2-0.4-0.3-0.8-0.4-1.3C0,20.7,1.9,18.9,3,18.3z M3.1,19.5c0-0.1,0-0.3,0.1-0.4c0-0.1,0-0.1,0.1-0.2c0.3,0.2,0.3,0.4,0.4,0.8 C3.5,19.5,3.3,19.4,3.1,19.5z M4.1,31.2c0.6,2,1.6,4.1,2.7,5.8c0,0,0,0,0,0c-0.1,0.3-0.2,0.6-0.3,0.8c-0.8,1.1-2.8-0.5-3.4-1.1 C2.4,36,2,35.2,1.9,34.5c-0.1-0.5,0-0.5,0.4-0.9c0.5-0.5,1-1,1.5-1.5C3.9,31.8,4,31.5,4.1,31.2z M42.2,14.7c0,0.1,0.1,0.2,0.1,0.3 c0,0-0.1,0.1-0.1,0.1c-0.1-0.1-0.2-0.3-0.3-0.4C42,14.7,42.1,14.7,42.2,14.7z M5,20.8L5,20.8L5,20.8L5,20.8L5,20.8z M3.4,18.4 L3.4,18.4L3.4,18.4L3.4,18.4L3.4,18.4z M0.9,22.2L0.9,22.2L0.9,22.2L0.9,22.2L0.9,22.2z M14.9,36.9L14.9,36.9L14.9,36.9L14.9,36.9 L14.9,36.9z M39.3,29.5L39.3,29.5L39.3,29.5L39.3,29.5L39.3,29.5L39.3,29.5L39.3,29.5z M48.3,26.1L48.3,26.1L48.3,26.1L48.3,26.1 L48.3,26.1z"/> <path fill="#1E1E1E" d="M44.7,15.9c1.4-0.5,2.1-1.6,2.4-3c-0.6,1.1-1.4,2.1-2.6,2.6c-0.6,0.3-1,0.2-1.7,0.1 C43.5,15.9,44,16.1,44.7,15.9z"/> <path fill="#1E1E1E" d="M36.7,17.3c-0.4,0-0.9,0.1-1.5,0.2c0-0.2-0.1-0.3-0.1-0.5c-0.2-0.4-0.5-0.7-0.9-0.8c0.3-0.2,0.7-0.4,1-0.6 c-0.8,0.4-1.7,0.3-2.4,0.7c-0.6,0.4-1.4,1.7-2,2.2c0.4-0.2,0.8-0.5,1.2-0.8c0,0.2,0.1,0.5,0.2,0.7c0.2,0.3,0.4,0.6,0.7,0.7 c-0.2,0.3-0.4,0.6-0.5,1C33.5,18.8,35.1,17.7,36.7,17.3z"/> <path fill="#1E1E1E" d="M29.5,15.8c0.3-1.2,0.7-2.3,2.5-3.1C29.6,13.3,29.2,14.3,29.5,15.8z"/> <path fill="#1E1E1E" d="M33.4,27.2c-0.1,0.3-0.1,0.8-0.2,1.1c0.1-0.4,0.3-0.9,0.5-1.2c0.2-0.4,0.3-0.4,0.7-0.6 c0.3-0.1,0.8-0.4,1-0.5c-0.3,0-0.8,0.2-1.1,0.2C33.6,26.3,33.5,26.5,33.4,27.2z"/> <path fill="#1E1E1E" d="M20.6,13.7c-0.9,0.9-1.7,3.8-2,5c0.4-1,1.5-3.7,2.3-4.4c0.2-0.2,0.4-0.3,0.6-0.4c-0.6,1-0.5,1.2-0.3,2.5 c0.2-1.3,0.6-1.9,1.4-2.9c0.8-0.2,1.6-0.5,2.5-0.8c-1,0.1-1.9,0.2-2.9,0.3C21.3,13.2,21.1,13.2,20.6,13.7z"/> <path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFACB" d="M32.5,18.8c-0.2-0.3,0-0.7,0.3-0.9c0.3-0.2,0.7,0,0.9,0.3 c0,0,0,0.1,0,0.1c-0.3,0.2-0.6,0.5-0.9,0.8C32.7,19.1,32.5,19,32.5,18.8"/> <path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFACB" d="M39.9,15.9c0-0.3,0.3-0.5,0.5-0.5c0.3,0,0.5,0.3,0.5,0.5 c0,0.1,0,0.1,0,0.2c-0.3,0-0.5,0.1-0.8,0.2C40,16.3,39.9,16.1,39.9,15.9"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#hdinsight"><\/use><\/svg>'
},
getInitialState: function () {
return {
region: "us-east",
type: "windows",
cluster: "hadoop",
tier: "standard",
hadoopHead: "a3",
hadoopHeadCount: 2,
hadoopHeadHours: 744,
hadoopHeadHoursFactor: "1",
hadoopWorker: "a3",
hadoopWorkerCount: 1,
hadoopWorkerHours: 744,
hadoopWorkerHoursFactor: "1",
hbaseHead: "a3",
hbaseHeadCount: 2,
hbaseHeadHours: 744,
hbaseHeadHoursFactor: "1",
hbaseRegion: "a3",
hbaseRegionCount: 1,
hbaseRegionHours: 744,
hbaseRegionHoursFactor: "1",
hbaseZookeeper: "a2",
hbaseZookeeperCount: 3,
hbaseZookeeperHours: 744,
hbaseZookeeperHoursFactor: "1",
stormSupervisor: "a3",
stormSupervisorCount: 1,
stormSupervisorHours: 744,
stormSupervisorHoursFactor: "1",
stormNimbus: "a3",
stormNimbusCount: 2,
stormNimbusHours: 744,
stormNimbusHoursFactor: "1",
stormZookeeper: "a1",
stormZookeeperCount: 3,
stormZookeeperHours: 744,
stormZookeeperHoursFactor: "1",
sparkHead: "a3",
sparkHeadCount: 2,
sparkHeadHours: 744,
sparkHeadHoursFactor: "1",
sparkWorker: "a3",
sparkWorkerCount: 1,
sparkWorkerHours: 744,
sparkWorkerHoursFactor: "1",
rServer: !1,
edgeServer: "d4v2",
edgeServerCount: 1,
edgeServerHours: 744,
edgeServerHoursFactor: "1",
rServerCoreHours: 744,
rServerCoreHoursFactor: "1",
premiumCoreHours: 744,
premiumCoreHoursFactor: "1",
totalCores: 0
}
},
getPrice: function (t) {
var r = 0;
if (!i.getPricingApiStore().data) return 0;
switch (t.cluster) {
case "hadoop":
r += n(t.region, t.hadoopHead, t.type, t.tier) * t.hadoopHeadCount * t.hadoopHeadHours * (t.hadoopHeadHoursFactor || "1") + n(t.region, t.hadoopWorker, t.type, t.tier) * t.hadoopWorkerCount * t.hadoopWorkerHours * (t.hadoopWorkerHoursFactor || "1");
break;
case "hbase":
r += n(t.region, t.hbaseHead, t.type) * t.hbaseHeadCount * t.hbaseHeadHours * (t.hbaseHeadHoursFactor || "1") + n(t.region, t.hbaseRegion, t.type) * t.hbaseRegionCount * t.hbaseRegionHours * (t.hbaseRegionHoursFactor || "1") + n(t.region, t.hbaseZookeeper, t.type) * t.hbaseZookeeperCount * t.hbaseZookeeperHours * (t.hbaseZookeeperHoursFactor || "1");
break;
case "storm":
r += n(t.region, t.stormSupervisor, t.type) * t.stormSupervisorCount * t.stormSupervisorHours * (t.stormSupervisorHoursFactor || "1") + n(t.region, t.stormNimbus, t.type) * t.stormNimbusCount * t.stormNimbusHours * (t.stormNimbusHoursFactor || "1") + n(t.region, t.stormZookeeper, t.type) * t.stormZookeeperCount * t.stormZookeeperHours * (t.stormZookeeperHoursFactor || "1");
break;
case "spark":
r += n(t.region, t.sparkHead, t.type, t.tier) * t.sparkHeadCount * t.sparkHeadHours * (t.sparkHeadHoursFactor || "1") + n(t.region, t.sparkWorker, t.type, t.tier) * t.sparkWorkerCount * t.sparkWorkerHours * (t.sparkWorkerHoursFactor || "1")
}
return t.rServer && (r += n(t.region, t.edgeServer, t.type) * t.edgeServerCount * t.edgeServerHours * (t.edgeServerHoursFactor || "1"), r += s(t).rServer), t.tier === "premium" && (r += s(t).premium), r
},
getDisplayName: function (n) {
return n.name || h
},
willUpdate: function (n, t, i) {
var f, e, r, u;
if (n.region !== t.region && (t.hadoopHead = "a3", t.hadoopWorker = "a3", t.edgeServer = "d4v2", t.hbaseHead = "a3", t.hbaseRegion = "a3", t.hbaseZookeeper = "a2", t.stormNimbus = "a3", t.stormSupervisor = "a3", t.stormZookeeper = "a1", t.sparkHead = "a3", t.sparkWorker = "a3"), n.cluster !== t.cluster && (t.tier = "standard"), i.hadoopHead || i.hadoopWorker || i.hbaseHead || i.hbaseRegion || i.hbaseZookeeper || i.stormNimbus || i.stormSupervisor || i.stormZookeeper || i.sparkHead || i.sparkWorker) {
for (f = {
hadoop: ["hadoopHead", "hadoopWorker"],
hbase: ["hbaseHead", "hbaseRegion", "hbaseZookeeper"],
storm: ["stormNimbus", "stormZookeeper", "stormSupervisor"],
spark: ["sparkHead", "sparkWorker"]
}, e = !1, u = 0; u < f[t.cluster].length && !e; u++) r = f[t.cluster][u], (i[r] === "a10" || i[r] === "a11") && (e = !0);
if (e)
for (u = 0; u < f[t.cluster].length; u++) r = f[t.cluster][u], t[r] !== "a10" && t[r] !== "a11" && (i[r] = "a10");
else
for (u = 0; u < f[t.cluster].length; u++) r = f[t.cluster][u], (t[r] === "a10" || t[r] === "a11") && (i[r] !== "a10" || i[r] !== "a11") && (i[r] = v(t.cluster, r.replace(t.cluster, "").toLowerCase())[0].slug)
}
return n.hadoopHeadHoursFactor !== t.hadoopHeadHoursFactor && (t.hadoopHeadHours = factorInput(n.hadoopHeadHoursFactor, t.hadoopHeadHoursFactor, n.hadoopHeadHours)), n.hadoopWorkerHoursFactor !== t.hadoopWorkerHoursFactor && (t.hadoopWorkerHours = factorInput(n.hadoopWorkerHoursFactor, t.hadoopWorkerHoursFactor, n.hadoopWorkerHours)), n.hbaseHeadHoursFactor !== t.hbaseHeadHoursFactor && (t.hbaseHeadHours = factorInput(n.hbaseHeadHoursFactor, t.hbaseHeadHoursFactor, n.hbaseHeadHours)), n.hbaseRegionHoursFactor !== t.hbaseRegionHoursFactor && (t.hbaseRegionHours = factorInput(n.hbaseRegionHoursFactor, t.hbaseRegionHoursFactor, n.hbaseRegionHours)), n.hbaseZookeeperHoursFactor !== t.hbaseZookeeperHoursFactor && (t.hbaseZookeeperHours = factorInput(n.hbaseZookeeperHoursFactor, t.hbaseZookeeperHoursFactor, n.hbaseZookeeperHours)), n.stormSupervisorHoursFactor !== t.stormSupervisorHoursFactor && (t.stormSupervisorHours = factorInput(n.stormSupervisorHoursFactor, t.stormSupervisorHoursFactor, n.stormSupervisorHours)), n.stormNimbusHoursFactor !== t.stormNimbusHoursFactor && (t.stormNimbusHours = factorInput(n.stormNimbusHoursFactor, t.stormNimbusHoursFactor, n.stormNimbusHours)), n.stormZookeeperHoursFactor !== t.stormZookeeperHoursFactor && (t.stormZookeeperHours = factorInput(n.stormZookeeperHoursFactor, t.stormZookeeperHoursFactor, n.stormZookeeperHours)), n.sparkHeadHoursFactor !== t.sparkHeadHoursFactor && (t.sparkHeadHours = factorInput(n.sparkHeadHoursFactor, t.sparkHeadHoursFactor, n.sparkHeadHours)), n.sparkWorkerHoursFactor !== t.sparkWorkerHoursFactor && (t.sparkWorkerHours = factorInput(n.sparkWorkerHoursFactor, t.sparkWorkerHoursFactor, n.sparkWorkerHours)), n.edgeServerHoursFactor !== t.edgeServerHoursFactor && (t.edgeServerHours = factorInput(n.edgeServerHoursFactor, t.edgeServerHoursFactor, n.edgeServerHours)), n.premiumCoreHoursFactor !== t.premiumCoreHoursFactor && (t.premiumCoreHours = factorInput(n.premiumCoreHoursFactor, t.premiumCoreHoursFactor, n.premiumCoreHours)), n.rServerCoreHoursFactor !== t.rServerCoreHoursFactor && (t.rServerCoreHours = factorInput(n.rServerCoreHoursFactor, t.rServerCoreHoursFactor, n.rServerCoreHours)), c(t) && (t.type = "linux"), t.totalCores = l(t), t
},
getSku: function (n) {
var t = {};
return i.getPricingApiStore().data ? (n.cluster === "hadoop" ? (t.hadoopHead = e(n.region, n.hadoopHead, n.type), t.hadoopWorker = e(n.region, n.hadoopWorker, n.type)) : n.cluster === "hbase" ? (t.hbaseHead = e(n.region, n.hbaseHead, n.type), t.hbaseRegion = e(n.region, n.hbaseRegion, n.type), t.hbaseZookeeper = e(n.region, n.hbaseZookeeper, n.type)) : n.cluster === "storm" ? (t.stormSupervisor = e(n.region, n.stormSupervisor, n.type), t.stormNimbus = e(n.region, n.stormNimbus, n.type), t.stormZookeeper = e(n.region, n.stormZookeeper, n.type)) : n.cluster === "spark" && (t.sparkHead = e(n.region, n.sparkHead, n.type), t.sparkWorker = e(n.region, n.sparkWorker, n.type)), t) : ""
},
getDescription: function (n) {
var t = n.cluster,
i = t == "storm" ? "Supervisor" : "Head",
r = t == "hbase" ? "Region" : t == "storm" ? "Nimbus" : "Worker",
h = Core.Util.FormatString("{0}{1}Count", t, i),
e = Core.Util.FormatString("{0}{1}Hours", t, i),
c = Core.Util.FormatString("{0}Factor", e),
l = Core.Util.FormatString("{0}{1}Count", t, r),
o = Core.Util.FormatString("{0}{1}Hours", t, r),
a = Core.Util.FormatString("{0}Factor", o),
u = Core.Util.FormatString("Type: {0}, cluster type: {1}.", n.type, n.cluster);
if (u += Core.Util.FormatString(" {0} node: {1} size, {2} instances x {3} hours.", i, n[t + i].toUpperCase(), n[h], n[e], factorLabel(n[c])), u += Core.Util.FormatString(" {0} node: {1} size, {2} instances x {3} hours.", r, n[t + r].toUpperCase(), n[l], n[o], factorLabel(n[a])), t == "hbase" || t == "storm") {
var f = "Zookeeper",
v = Core.Util.FormatString("{0}{1}Count", t, f),
s = Core.Util.FormatString("{0}{1}Hours", t, f),
y = Core.Util.FormatString("{0}Factor", s);
u += Core.Util.FormatString(" {0} node: {1} size, {2} instances x {3} hours.", f, n[t + f].toUpperCase(), n[v], n[s], factorLabel(n[y]))
}
return u
},
isValidOffer: function (n) {
return n.cluster === "hadoop" ? o(n.region, n.hadoopHead, n.type) : n.cluster === "hbase" ? o(n.region, n.hbaseHead, n.type) : n.cluster === "storm" ? o(n.region, n.stormSupervisor, n.type) : n.cluster === "spark" ? o(n.region, n.sparkHead, n.type) : void 0
}
});
Acom.Calculator.Actions.modules.register(i)
}();
! function () {
"use strict";
var t = "HockeyApp",
i, n;
i = React.createClass({
displayName: "HockeyApp",
onChange: Acom.Calculator.onChange,
getPlanInfo: function () {
var i = this.props,
n = i.dataStore.pricingData,
r, t = 0;
for (t; t < n.tiers.length; t++)
if (n.tiers[t].slug === i.tier) {
r = n.tiers[t].displayName;
break
}
return React.createElement("p", null, formatReact("Business {0} plan: {1} apps, {2} owners", r, n.offers[i.tier].applications.toString(), n.offers[i.tier].owners.toString()))
},
render: function () {
var n = this.props,
i = n.dataStore.pricingData,
r = i.tiers.map(function (n) {
var t = i.offers[n.slug].prices.global;
return {
slug: n.slug,
values: {
displayStrings: [n.displayName],
number: {
value: t,
decimals: 0,
format: "currency",
rate: "{0}/mo"
}
}
}
});
return React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: n.dataStore.module.icon
}), " ", React.createElement("input", {
className: "text-input",
name: "name",
placeholder: t,
defaultValue: n.name
})), React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Region",
name: "region",
options: i.regions,
defaultValue: n.region
}), React.createElement(DetailedDropdown, {
key: "tier-" + n.region,
label: "Business Plan",
name: "tier",
options: r,
delimiters: ["colon"],
defaultValue: n.tier,
onChange: this.onChange
})), this.getPlanInfo()), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n.price,
decimals: "2",
format: "currency"
}))))))
}
});
n = Acom.Calculator.createModule({
slug: "hockeyapp",
displayName: t,
description: "Deploy mobile apps, collect feedback and crash reports, and monitor usage",
pricingApi: "/api/v1/pricing/hockeyapp/calculator/",
component: i,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="hockeyapp" viewBox="0 0 50 50"> <path fill="#009EE1" d="M45.405,31.138c0.159-0.113,0.377-0.017,0.408,0.175c0.018,0.115,0.027,0.231,0.027,0.348 c0,3.241-6.945,7.662-20.836,7.662S4.167,34.902,4.167,31.661c0-0.116,0.009-0.231,0.027-0.344c0.03-0.192,0.249-0.288,0.408-0.175 c3.442,2.449,10.242,4.535,20.399,4.535C35.164,35.677,41.965,33.589,45.405,31.138z"/> <path fill="#009EE1" d="M25.001,29.427c-11.266,0-18.724-2.514-22.375-5.42c-0.126-0.1-0.316-0.063-0.389,0.08 c-0.189,0.369-0.284,0.753-0.284,1.151c0,3.584,7.683,8.356,23.048,8.356s23.046-4.772,23.046-8.356 c0-0.397-0.095-0.782-0.284-1.151c-0.073-0.143-0.263-0.18-0.389-0.08C43.723,26.913,36.266,29.427,25.001,29.427z"/> <path fill="#009EE1" d="M25.001,10.677C8.334,10.677,0,13.575,0,17.708c0,4.133,8.334,9.636,25.001,9.636S50,21.841,50,17.708 C50,13.575,41.667,10.677,25.001,10.677z M25,22.135c-11.806,0-17.708-3.012-17.708-5.078S13.194,13.802,25,13.802 s17.708,1.189,17.708,3.255S36.806,22.135,25,22.135z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#hockeyapp"><\/use><\/svg>'
},
getInitialState: function () {
return {
region: "us-east",
tier: "free"
}
},
getPrice: function (t) {
var i = n.getPricingApiStore().data;
return i ? i.offers[t.tier].prices.global : undefined
},
getDisplayName: function (n) {
return n.name || t
},
getDescription: function () {
return ""
},
getSku: function (t) {
var i = n.getPricingApiStore().data;
return i ? i.offers[t.tier].skus ? i.offers[t.tier].skus[t.region] : "" : ""
}
});
Acom.Calculator.Actions.modules.register(n)
}();
! function () {
"use strict";
function r(t, i) {
var u = n.getPricingApiStore().data,
r = u.offers[i].messagesPerDay;
return u ? (r === 3e3 ? r = "3k" : r === 5e4 ? r = "50k" : r === 15e5 && (r = "1.5mil"), {
devices: u.offers[i].devices,
messages: r,
price: u.offers[i].prices[t]
}) : undefined
}
var t = "IoT Hub",
i, n;
i = React.createClass({
displayName: "IotHub",
onChange: Acom.Calculator.onChange,
render: function () {
var i = this.props,
u = n.getPricingApiStore().data,
f = u.tiers.map(function (n) {
var t = r(i.region, n.slug);
return t.devices === 0 && (t.devices = "Unlimited"), {
slug: n.slug,
values: {
displayStrings: [n.displayName, formatString("{0} devices", t.devices), formatString("{0} msgs/day", t.messages.toLocaleString(Acom.currentCulture))],
number: {
value: t.price,
decimals: 0,
format: "currency",
rate: "{0}/mo"
}
}
}
});
return React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: i.dataStore.module.icon
}), " ", React.createElement("input", {
className: "text-input",
name: "name",
placeholder: t,
defaultValue: i.name
})), React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Region",
name: "region",
options: u.regions,
defaultValue: i.region
})), React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(DetailedDropdown, {
key: "tier-" + i.region,
label: "Tier",
name: "tier",
options: f,
delimiters: ["colon", "comma"],
defaultValue: i.tier,
onChange: this.onChange
}))), displayIf(i.tier === "free", React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: i.price,
decimals: "2",
format: "currency"
}))), displayIf(i.displaySku && i.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, i.sku))))), React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
label: "Units",
name: "units",
min: "0",
max: "9999",
defaultValue: i.units,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(StaticNumber, {
label: "Per unit",
value: React.createElement(Acom.Atoms.Number, {
value: u.offers[i.tier].prices[i.region],
decimals: "2",
format: "currency"
})
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: i.price,
decimals: "2",
format: "currency"
}))), displayIf(i.displaySku && i.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, i.sku)))))))
}
});
n = Acom.Calculator.createModule({
slug: "iot-hub",
displayName: t,
description: "Connect, monitor, and control billions of IoT assets",
pricingApi: "/api/v1/pricing/iot-hub/calculator/",
component: i,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="iot-hub" viewBox="0 0 32 32"> <circle fill="#0072c6" cx="13.4" cy="4.9" r="3.1"/> <circle fill="#0072c6" cx="20.5" cy="14.9" r="3.7"/> <circle fill="#0072c6" cx="26.7" cy="25.9" r="2.9"/> <circle fill="#0072c6" cx="15.2" cy="23.9" r="2.5"/> <circle fill="#0072c6" cx="5.1" cy="16.3" r="2.5"/> <rect fill="#0072c6" x="10.7" y="9" transform="matrix(0.5751 0.8181 -0.8181 0.5751 15.1512 -9.6241)" width="12.3" height="1.6"/> <rect fill="#0072c6" x="17.2" y="19.4" transform="matrix(0.4968 0.8679 -0.8679 0.4968 29.4089 -10.1933)" width="12.6" height="1.6"/> <rect fill="#0072c6" x="11.9" y="7.9" transform="matrix(8.274771e-002 0.9966 -0.9966 8.274771e-002 27.1578 1.5262)" width="1.6" height="15.3"/> <rect fill="#0072c6" x="16.9" y="14.1" transform="matrix(0.8565 0.5161 -0.5161 0.8565 12.5121 -6.3586)" width="1.6" height="10.4"/> <path fill="#0072c6" d="M31.5,0h-8.1c-0.3,0-0.5,0.2-0.5,0.6v2.9c0,0.3,0.2,0.5,0.5,0.5H28v4.5C28,8.8,28.2,9,28.6,9h2.9 C31.8,9,32,8.8,32,8.5v-8C32,0.2,31.8,0,31.5,0z"/> <path fill="#0072c6" d="M0.5,31.9h8.1c0.3,0,0.5-0.2,0.5-0.6v-2.9c0-0.3-0.2-0.5-0.5-0.5H4v-4.5c0-0.3-0.2-0.5-0.6-0.5H0.5 c-0.3,0-0.5,0.2-0.5,0.5l0,8C0,31.7,0.2,31.9,0.5,31.9z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#iot-hub"><\/use><\/svg>'
},
getInitialState: function () {
return {
region: "us-east",
tier: "free",
units: 1
}
},
getPrice: function (t) {
var i = n.getPricingApiStore().data;
return i ? t.tier === "free" ? i.offers[t.tier].prices[t.region] : i.offers[t.tier].prices[t.region] * t.units : undefined
},
getDisplayName: function (n) {
return n.name || t
},
getDescription: function (n) {
return Core.Util.FormatString("{0} tier", n.tier)
},
getSku: function (t) {
var i = n.getPricingApiStore().data;
return i ? i.offers[t.tier].skus ? i.offers[t.tier].skus[t.region] : "" : ""
}
});
Acom.Calculator.Actions.modules.register(n)
}();
! function () {
"use strict";
function n(n) {
var i = t.getPricingApiStore().data.classicOffers;
return i ? {
instance: getGraduatedPrice(i[n.region + "-instancepublic"].prices, n.instance) * n.instanceHours * (n.instanceHoursFactor || "1"),
loadBalanced: getGraduatedPrice(i[n.region + "-loadbalanced"].prices, n.loadBalanced) * n.loadBalancedHours * (n.loadBalancedHoursFactor || "1"),
reserved: getGraduatedPrice(i[n.region + "-reservation"].prices, n.reserved) * n.reservedHours * (n.reservedHoursFactor || "1"),
remaps: getGraduatedPrice(i[n.region + "-remap"].prices, n.remaps)
} : undefined
}
function u(n) {
var i = t.getPricingApiStore().data;
return i ? getGraduatedPrice(i.armOffers[n.region + "-instancepublic"].prices, n["public"]) * n.publicHours * (n.publicHoursFactor || "1") : undefined
}
var i = "IP Addresses",
r, t;
r = React.createClass({
displayName: "IpAddresses",
onChange: Acom.Calculator.onChange,
render: function () {
var t = this.props,
r = t.dataStore.pricingData;
return React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: t.dataStore.module.icon
}), " ", React.createElement("input", {
className: "text-input",
name: "name",
placeholder: i,
defaultValue: t.name
})), React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Region",
name: "region",
options: r.regions,
defaultValue: t.region,
onChange: this.onChange
}), React.createElement(CalculatorDropdown, {
label: "Type",
name: "type",
options: r.offerTypes,
defaultValue: t.type,
onChange: this.onChange
})), displayIf(t.type === "arm", React.createElement("p", null, React.createElement("strong", null, "NOTE:"), React.createElement("br", null), "Common price for load balanced or virtual machines."))), displayIf(t.type === "classic", React.createElement("div", null, React.createElement("div", {
className: "cost no-divider"
}, React.createElement("h3", null, "Instance-level IP Addresses"), React.createElement(TextNumber, {
label: "Addresses",
name: "instance",
min: "0",
max: "999",
defaultValue: t.instance,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(FactoredInput, {
key: "factor-instanceHoursFactor-" + t.instanceHoursFactor,
name: "instanceHours",
defaultValue: t.instanceHours,
factorsName: "instanceHoursFactor",
factorsDefault: t.instanceHoursFactor || "1",
factorUnit: "hours",
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n(t).instance,
decimals: "2",
format: "currency"
}))), displayIf(t.displaySku && t.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, t.sku && t.sku.instance))))), React.createElement("div", {
className: "cost"
}, React.createElement("h3", null, "Load Balanced IP Addresses"), React.createElement(TextNumber, {
label: "Addresses",
name: "loadBalanced",
min: "0",
max: "6",
defaultValue: t.loadBalanced,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(FactoredInput, {
key: "factor-loadBalancedHoursFactor-" + t.loadBalancedHoursFactor,
name: "loadBalancedHours",
defaultValue: t.loadBalancedHours,
factorsName: "loadBalancedHoursFactor",
factorsDefault: t.loadBalancedHoursFactor || "1",
factorUnit: "hours",
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n(t).loadBalanced,
decimals: "2",
format: "currency"
}))), displayIf(t.displaySku && t.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, t.sku && t.sku.loadBalanced))))), React.createElement("div", {
className: "cost"
}, React.createElement("h3", null, "Reserved IP Addresses"), React.createElement(TextNumber, {
label: "Addresses",
name: "reserved",
min: "0",
max: "20",
defaultValue: t.reserved,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(FactoredInput, {
key: "factor-reservedHoursFactor-" + t.reservedHoursFactor,
name: "reservedHours",
defaultValue: t.reservedHours,
factorsName: "reservedHoursFactor",
factorsDefault: t.reservedHoursFactor || "1",
factorUnit: "hours",
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n(t).reserved,
decimals: "2",
format: "currency"
}))), displayIf(t.displaySku && t.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, t.sku && t.sku.reserved))))), React.createElement("div", {
className: "cost sub-module"
}, React.createElement("h3", null, "IP Address Remaps"), React.createElement(TextNumber, {
label: "Addresses",
name: "remaps",
min: "0",
max: "999",
defaultValue: t.remaps,
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n(t).remaps,
decimals: "2",
format: "currency"
}))), displayIf(t.displaySku && t.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, t.sku && t.sku.remaps))))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("span", {
className: "sub-total"
}, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: t.price,
decimals: "2",
format: "currency"
})))))), React.createElement("div", null, React.createElement("div", {
className: "cost no-divider"
}, React.createElement("h3", null, "Public IP Addresses"), React.createElement(TextNumber, {
key: t.type,
label: "Addresses",
name: "public",
min: "0",
max: "999",
defaultValue: t["public"],
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(FactoredInput, {
key: "factor-publicHoursFactor-" + t.publicHoursFactor,
name: "publicHours",
defaultValue: t.publicHours,
factorsName: "publicHoursFactor",
factorsDefault: t.publicHoursFactor || "1",
factorUnit: "hours",
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u(t),
decimals: "2",
format: "currency"
}))), displayIf(t.displaySku && t.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, t.sku && t.sku.armInstance))))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("span", {
className: "sub-total"
}, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: t.price,
decimals: "2",
format: "currency"
}))))))))
}
});
t = Acom.Calculator.createModule({
slug: "ip-addresses",
displayName: i,
description: "A dynamic or reserved address used to identify a given cloud service, virtual machine, or role instance used on Azure that follow the Internet Protocol.",
pricingApi: "/api/v1/pricing/ip-addresses/calculator/",
component: r,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="ip-addresses" viewBox="0.5 0.5 50 50"> <path fill="#59B4D9" d="M0.5,45.127c0,1.108,0.898,2.007,2.007,2.007h45.986c1.109,0,2.007-0.899,2.007-2.007V13.798h-50V45.127z"/> <path fill="#A0A1A2" d="M48.493,4.5H2.507C1.398,4.5,0.5,5.398,0.5,6.507v10.627h50V6.507C50.5,5.398,49.601,4.5,48.493,4.5"/> <path opacity="0.2" fill="#FFFFFF" d="M2.514,4.5c-1.108,0-2.007,0.898-2.007,2.007v7.291v3.336v27.993 c0,1.108,0.899,2.007,2.007,2.007h2.188L44.12,4.5H2.514z"/> <rect x="13.357" y="9.279" fill="#FFFFFF" width="33.671" height="3.942"/> <path fill="#59B4D9" d="M11.81,11.183c0,2.693-2.184,4.878-4.878,4.878c-2.694,0-4.878-2.185-4.878-4.878 c0-2.694,2.184-4.879,4.878-4.879C9.625,6.304,11.81,8.489,11.81,11.183"/> <polygon fill="#FFFFFF" points="6.416,11.732 8.629,14.068 7.428,14.068 4.469,11.25 7.417,8.432 8.615,8.432 6.416,10.754 11.809,10.754 11.809,11.732 "/> <path fill="#FFFFFF" d="M17.926,36.576c0,0.57-0.203,1.037-0.609,1.4s-0.941,0.545-1.605,0.545c-0.594,0-1.098-0.186-1.512-0.557 s-0.621-0.834-0.621-1.389c0-0.563,0.207-1.023,0.621-1.383s0.938-0.539,1.57-0.539c0.609,0,1.121,0.184,1.535,0.551 S17.926,36.029,17.926,36.576z"/> <path fill="#FFFFFF" d="M26.83,36.576c0,0.57-0.203,1.037-0.609,1.4s-0.941,0.545-1.605,0.545c-0.594,0-1.098-0.186-1.512-0.557 s-0.621-0.834-0.621-1.389c0-0.563,0.207-1.023,0.621-1.383s0.938-0.539,1.57-0.539c0.609,0,1.121,0.184,1.535,0.551 S26.83,36.029,26.83,36.576z"/> <path fill="#FFFFFF" d="M35.733,36.576c0,0.57-0.203,1.037-0.609,1.4s-0.941,0.545-1.605,0.545c-0.594,0-1.098-0.186-1.512-0.557 s-0.621-0.834-0.621-1.389c0-0.563,0.207-1.023,0.621-1.383s0.938-0.539,1.57-0.539c0.609,0,1.121,0.184,1.535,0.551 S35.733,36.029,35.733,36.576z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#ip-addresses"><\/use><\/svg>'
},
getInitialState: function () {
return {
region: "us-east",
type: "classic",
instance: 0,
instanceHours: 744,
instanceHoursFactor: "1",
loadBalanced: 0,
loadBalancedHours: 744,
loadBalancedHoursFactor: "1",
reserved: 0,
reservedHours: 744,
reservedHoursFactor: "1",
remaps: 0,
"public": 0,
publicHours: 744,
publicHoursFactor: "1"
}
},
getPrice: function (i) {
return t.getPricingApiStore().data ? i.type === "classic" ? n(i).instance + n(i).loadBalanced + n(i).reserved + n(i).remaps : u(i) : 0
},
getDisplayName: function (n) {
return n.name || i
},
getSku: function (n) {
var i = t.getPricingApiStore().data,
r = {};
return i ? (n.type === "classic" ? (r.instance = i.classicOffers[n.region + "-instancepublic"].sku, r.loadBalanced = i.classicOffers[n.region + "-loadbalanced"].sku, r.reserved = i.classicOffers[n.region + "-reservation"].sku, r.remaps = i.classicOffers[n.region + "-remap"].sku) : r.armInstance = i.armOffers[n.region + "-instancepublic"].sku, r) : undefined
},
getDescription: function (n) {
return n.type === "classic" ? Core.Util.FormatString("{0} type, {1} instance-level IP Address(es) x {2} {3}, {4} load balanced IP Address(es) x {5} {6}, {7} reserved IP Address(es) x {8} {9}, {10} IP Address remap(s)", n.type, n.instance, n.instanceHours, factorLabel(n.instanceHoursFactor), n.loadBalanced, n.loadBalancedHours, factorLabel(n.loadBalancedHoursFactor), n.reserved, n.reservedHours, factorLabel(n.reservedHoursFactor), n.remaps) : n.type === "arm" ? Core.Util.FormatString("{0} type, {1} public IP Address(es) x {2} {3}", n.type, n["public"], n.publicHours, factorLabel(n.publicHoursFactor)) : void 0
},
isValidOffer: function (n) {
var i = t.getPricingApiStore().data;
return i ? i.classicOffers[n.region + "-instancepublic"] != undefined : !1
},
willUpdate: function (n, t) {
return n.instanceHoursFactor !== t.instanceHoursFactor && (t.instanceHours = factorInput(n.instanceHoursFactor, t.instanceHoursFactor, n.instanceHours)), n.loadBalancedHoursFactor !== t.loadBalancedHoursFactor && (t.loadBalancedHours = factorInput(n.loadBalancedHoursFactor, t.loadBalancedHoursFactor, n.loadBalancedHours)), n.reservedHoursFactor !== t.reservedHoursFactor && (t.reservedHours = factorInput(n.reservedHoursFactor, t.reservedHoursFactor, n.reservedHours)), n.publicHoursFactor !== t.publicHoursFactor && (t.publicHours = factorInput(n.publicHoursFactor, t.publicHoursFactor, n.publicHours)), t
}
});
Acom.Calculator.Actions.modules.register(t)
}();
! function () {
"use strict";
function i(t) {
var i = n.getPricingApiStore().data;
return i ? {
standardOperations: i.offers["secretssoftwareprotectedkeys-standard"].prices[t.region],
renewals: i.offers["certificaterenewals-standard"].prices[t.region],
keys: i.offers["hsmprotectedkeys-premium"].prices[t.region]
} : undefined
}
function u(t) {
var i = n.getPricingApiStore().data;
return i ? i.offers["secretssoftwareprotectedkeys-standard"].prices[t.region] * Math.ceil(t.operations / 1e4) : undefined
}
function f(t) {
var i = n.getPricingApiStore().data;
return i ? i.offers["certificaterenewals-standard"].prices[t.region] * t.renewals : undefined
}
function e(t) {
var i = n.getPricingApiStore().data;
return i ? i.offers["hsmprotectedkeys-premium"].prices[t.region] * t.keys : undefined
}
var t = "Key Vault",
r, n;
r = React.createClass({
displayName: "KeyVault",
onChange: Acom.Calculator.onChange,
render: function () {
var n = this.props,
r = n.dataStore.pricingData;
return React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: n.dataStore.module.icon
}), " ", React.createElement("input", {
className: "text-input",
name: "name",
placeholder: t,
defaultValue: n.name
})), React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Region",
name: "region",
options: r.regions,
defaultValue: n.region,
onChange: this.onChange
}))), React.createElement("div", {
className: "cost no-divider"
}, React.createElement("h3", null, "Operations (Standard or Premium)", React.createElement(Tooltip, {
style: {
top: "5px"
}
}, formatReact("Includes operations on:<ul><li>Secrets and Software-protected keys<\/li><li>Certificates (except renewals; those are included below)<\/li><\/ul>"))), React.createElement(TextNumber, {
label: "Operations per month",
name: "operations",
min: "0",
max: "50000000",
defaultValue: n.operations,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(StaticNumber, {
label: "Per 10,000 operations",
value: React.createElement(Acom.Atoms.Number, {
value: i(n).standardOperations,
decimals: "3",
format: "currency"
})
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u(n),
decimals: "2",
format: "currency"
}))), displayIf(n.displaySku && n.sku.standardOperations, React.createElement("div", {
className: "sku-under-total center"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, n.sku.standardOperations))))), React.createElement("div", {
className: "cost sub-module"
}, React.createElement("h3", null, "Certificate Renewals (Standard or Premium)"), React.createElement(TextNumber, {
label: "Renewals per month",
name: "renewals",
min: "0",
max: "50000000",
defaultValue: n.renewals,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(StaticNumber, {
label: "Per renewal",
value: React.createElement(Acom.Atoms.Number, {
value: i(n).renewals,
decimals: "2",
format: "currency"
})
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: f(n),
decimals: "2",
format: "currency"
}))), displayIf(n.displaySku && n.sku.renewals, React.createElement("div", {
className: "sku-under-total center"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, n.sku.renewals))))), React.createElement("div", {
className: "cost sub-module"
}, React.createElement("h3", null, "Hardware Security Module Protected Keys (Premium only)"), React.createElement(TextNumber, {
label: "HSM Protected Keys per month",
name: "keys",
min: "0",
max: "50000000",
defaultValue: n.keys,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(StaticNumber, {
label: "Per key",
value: React.createElement(Acom.Atoms.Number, {
value: i(n).keys,
decimals: "2",
format: "currency"
})
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: e(n),
decimals: "2",
format: "currency"
}))), displayIf(n.displaySku && n.sku.premiumKeys, React.createElement("div", {
className: "sku-under-total center"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, n.sku.premiumKeys))))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("span", {
className: "sub-total"
}, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n.price,
decimals: "2",
format: "currency"
}))))))
}
});
n = Acom.Calculator.createModule({
slug: "key-vault",
displayName: t,
description: "Safeguard and maintain control of keys and other secrets",
pricingApi: "/api/v1/pricing/key-vault/calculator/",
component: r,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="key-vault" viewBox="0 0 50 50"> <path fill="#7FBA00" d="M47.4,27.6c0-7.3-3.5-13.7-8.8-17.8c0,0.2,0,0.5,0,0.7c0,2.2-0.6,4.3-1.5,6.1c2.6,2.9,4.2,6.7,4.2,10.9 c0,9-7.3,16.3-16.3,16.3S8.7,36.5,8.7,27.5c0-4.5,1.8-8.5,4.7-11.5c-0.8-1.7-1.3-3.6-1.3-5.6c0-0.4,0-0.9,0.1-1.3 c-5.8,4-9.6,10.8-9.6,18.4C2.6,40,12.6,50,25,50S47.4,40,47.4,27.6z"/> <path fill="#FCD116" d="M25.3,0C19.6,0,15,4.6,15,10.3c0,4.7,3.1,8.6,7.4,9.9v10.2h-4.8v5.2h4.8v3.8h5.7V20.1 c4.3-1.2,7.4-5.2,7.4-9.9C35.6,4.6,31,0,25.3,0z M25.3,5.4c2.7,0,4.9,2.2,4.9,4.9s-2.2,4.9-4.9,4.9s-4.9-2.2-4.9-4.9 S22.6,5.4,25.3,5.4z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#key-vault"><\/use><\/svg>'
},
getInitialState: function () {
return {
region: "us-east",
operations: 0,
renewals: 0,
keys: 0
}
},
getPrice: function (t) {
var i = n.getPricingApiStore().data;
return i ? u(t) + e(t) + f(t) : 0
},
getDisplayName: function (n) {
return n.name || t
},
getDescription: function (n) {
return formatString("{0} operations, {1} certificate renewals, {2} HSM keys in the {3} region", n.operations, n.renewals, n.keys, n.region)
},
getSku: function (t) {
var i = n.getPricingApiStore().data;
return i ? {
standardOperations: i.offers["secretssoftwareprotectedkeys-standard"].skus[t.region],
renewals: i.offers["certificaterenewals-standard"].skus[t.region],
premiumKeys: i.offers["hsmprotectedkeys-premium"].skus[t.region]
} : ""
},
isValidOffer: function (t) {
var i = n.getPricingApiStore().data;
return i ? i.offers["secretssoftwareprotectedkeys-standard"].prices[t.region] >= 0 : !1
}
});
Acom.Calculator.Actions.modules.register(n)
}();
! function () {
"use strict";
function u(t) {
var i = n.getPricingApiStore().data,
f = t.tier === "free" ? "500MB" : "None",
u, r;
if (!i) return undefined;
for (r = 0; r < i.tiers.length; r++) i.tiers[r].slug === t.tier && (u = i.tiers[r].displayName);
return React.createElement("div", null, formatReact("{0} pricing tier: Daily limit: {1} - {2}/GB", u, f, React.createElement(Acom.Atoms.Number, {
value: i.offers[t.tier].prices[t.region],
decimals: "2",
format: "currency"
})))
}
function r(t) {
var i = n.getPricingApiStore().data;
return i ? i.offers[t.tier].prices[t.region] : undefined
}
var t = "Log Analytics",
i, n;
i = React.createClass({
displayName: "LogAnalytics",
onChange: Acom.Calculator.onChange,
render: function () {
var i = this.props,
f = n.getPricingApiStore().data;
return React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: i.dataStore.module.icon
}), " ", React.createElement("input", {
className: "text-input",
name: "name",
placeholder: t,
defaultValue: i.name
})), React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Region",
name: "region",
options: f.regions,
defaultValue: i.region
}), React.createElement(CalculatorDropdown, {
label: "Tier",
name: "tier",
options: f.tiers,
defaultValue: i.tier
})), u(i)), displayIf(i.tier !== "free", React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
label: "GB",
name: "gbs",
min: "1",
max: "9999",
defaultValue: i.gbs,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(StaticNumber, {
label: "Per GB",
value: React.createElement(Acom.Atoms.Number, {
value: r(i),
decimals: "2",
format: "currency"
})
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: i.price,
decimals: "2",
format: "currency"
}))), displayIf(i.displaySku && i.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, i.sku))))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: i.price,
decimals: "2",
format: "currency"
}))), displayIf(i.displaySku && i.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, i.sku)))))))
}
});
n = Acom.Calculator.createModule({
slug: "log-analytics",
displayName: t,
description: "Collect, search and visualize machine data from on-premises and cloud",
pricingApi: "/api/v1/pricing/log-analytics/calculator/",
component: i,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="log-analytics" viewBox="-1 -1 34 34"> <path fill="#0072c6" fill-rule="evenodd" clip-rule="evenodd" d="M4,19h2v-2l-2,0V19z M4,13h2v-1.8c-0.7,0.4-1.4,0.8-2,1.3V13z M7,25h2v-2l-2,0V25z M7,31h2v-2l-2,0V31z M7,22h2v-2l-2,0V22z M7,28h2v-2l-2,0V28z M4,25h2v-2l-2,0V25z M4,28h2v-2l-2,0V28z M1,22h2v-2l-2,0V22z M1,25h2v-2l-2,0V25z M1,19h2v-2l-2,0V19z M1.2,16H3v-2l-0.5,0C2,14.6,1.6,15.3,1.2,16z M4,29.5 c0.6,0.5,1.3,0.9,2,1.3V29l-2,0V29.5z M4,16h2v-2l-2,0V16z M19,28h0.5c0.5-0.6,0.9-1.3,1.3-2L19,26V28z M16,25h2v-2l-2,0V25z M16,30.8c0.7-0.4,1.4-0.8,2-1.3V29l-2,0V30.8z M16,28h2v-2l-2,0V28z M7,19h2v-2l-2,0V19z M20.5,1C14.7,1,10,5.7,10,11.5 c0,3.1,0,10.5,0,10.5s7.8,0,10.5,0C26.3,22,31,17.3,31,11.5S26.3,1,20.5,1z M17,16h-2v-6h2V16z M21,16h-2v-4h2V16z M25,16h-2V8h2 V16z M19,25h2v-2l-2,0V25z M7,13h2v-2l-2,0V13z M13,28h2v-2l-2,0V28z M10,28h2v-2l-2,0V28z M10,25h2v-2l-2,0V25z M13,31h2v-2l-2,0 V31z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#log-analytics"><\/use><\/svg>'
},
getInitialState: function () {
return {
region: "us-east",
tier: "free",
gbs: 1
}
},
getPrice: function (t) {
var i = n.getPricingApiStore().data;
return i ? t.gbs * r(t) : undefined
},
getDisplayName: function (n) {
return n.name || t
},
getDescription: function (n) {
return n.tier === "free" ? Core.Util.FormatString("{0} tier", n.tier) : Core.Util.FormatString("{0} GB(s), {1} tier", n.gbs, n.tier)
},
getSku: function (t) {
var i = n.getPricingApiStore().data;
return i ? i.offers[t.tier].skus[t.region] : undefined
}
});
Acom.Calculator.Actions.modules.register(n)
}();
! function () {
"use strict";
function f(t) {
var i = n.getPricingApiStore().data;
return i ? getGraduatedPrice(i.graduatedOffers.actions[t.region].prices, t.actions * t.days) : 0
}
function t(t) {
var i = n.getPricingApiStore().data;
return i ? {
integrationAccounts: i.offers["integration-permonth"].prices[t.region],
enterpriseConnections: i.offers["enterprise-permonth"].prices[t.region],
testEnterpriseConnections: i.offers["test-permonth"].prices[t.region]
} : 0
}
function i(i) {
var r = n.getPricingApiStore().data;
return r ? {
integrationAccounts: t(i).integrationAccounts * i.integrationAccounts,
enterpriseConnections: t(i).enterpriseConnections * i.enterpriseConnections,
testEnterpriseConnections: t(i).testEnterpriseConnections * i.testEnterpriseConnections
} : 0
}
var r = "Logic Apps",
u, n;
u = React.createClass({
displayName: "LogicApps",
onChange: Acom.Calculator.onChange,
render: function () {
var u = this.props,
e = n.getPricingApiStore().data;
return React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: u.dataStore.module.icon
}), " ", React.createElement("input", {
className: "text-input",
name: "name",
placeholder: r,
defaultValue: u.name
})), React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Region",
name: "region",
options: e.regions,
defaultValue: u.region
}))), React.createElement("div", {
className: "cost"
}, React.createElement(TextNumber, {
label: "Action executions",
name: "actions",
min: "0",
max: "999999999",
defaultValue: u.actions,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(TextNumber, {
label: "Days",
name: "days",
min: "0",
max: "31",
defaultValue: u.days,
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: f(u),
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku && u.sku.actions, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, u.sku.actions))))), React.createElement("div", {
className: "service-properties collapsible"
}, React.createElement("div", {
className: "cost"
}, React.createElement("h3", null, "Enterprise Integration Pack"), React.createElement(TextNumber, {
label: "Integration accounts",
name: "integrationAccounts",
min: "0",
max: "9999",
defaultValue: u.integrationAccounts,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(StaticNumber, {
label: "Per account",
value: React.createElement(Acom.Atoms.Number, {
value: t(u).integrationAccounts,
decimals: "2",
format: "currency"
})
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: i(u).integrationAccounts,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku && u.sku.integrationAccounts, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, u.sku.integrationAccounts))))), React.createElement("div", {
className: "cost sub-module"
}, React.createElement(TextNumber, {
label: "Enterprise connections",
name: "enterpriseConnections",
min: "0",
max: "9999",
defaultValue: u.enterpriseConnections,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(StaticNumber, {
label: "Per connection",
value: React.createElement(Acom.Atoms.Number, {
value: t(u).enterpriseConnections,
decimals: "2",
format: "currency"
})
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: i(u).enterpriseConnections,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku && u.sku.enterpriseConnections, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, u.sku.enterpriseConnections))))), React.createElement("div", {
className: "cost sub-module"
}, React.createElement(TextNumber, {
label: "Test enterprise connections",
name: "testEnterpriseConnections",
min: "0",
max: "9999",
defaultValue: u.testEnterpriseConnections,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(StaticNumber, {
label: "Per connection",
value: React.createElement(Acom.Atoms.Number, {
value: t(u).testEnterpriseConnections,
decimals: "2",
format: "currency"
})
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: i(u).testEnterpriseConnections,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku && u.sku.testEnterpriseConnections, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, u.sku.testEnterpriseConnections)))))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("span", {
className: "sub-total"
}, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u.price,
decimals: "2",
format: "currency"
}))), displayIf(u.displaySku && u.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, u.sku.testEnterpriseConnections))))))
}
});
n = Acom.Calculator.createModule({
slug: "logic-apps",
displayName: r,
description: "Automate the access and use of data across clouds without writing code",
pricingApi: "/api/v1/pricing/logic-apps/calculator/",
component: u,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="logic-apps" viewBox="0 0 50 38.8"> <path d="M26,21.3v-5H23.5v5c0,.9-.8,1.7-2.1,2.1l-3.4.7c-2.3.7-3.9,2.5-3.9,4.5v5.7h2.5V28.6c0-.9.8-1.7,2.1-2.1l3.4-.8A4.833,4.833,0,0,0,26,21.3Z" transform="translate(0 -5.6)" fill="#59b4d9"/> <path d="M19.6,36.9V32.3a2.006,2.006,0,0,0-2-2H13a2.006,2.006,0,0,0-2,2v4.6a2.006,2.006,0,0,0,2,2h4.6A2.006,2.006,0,0,0,19.6,36.9Z" transform="translate(0 -5.6)" fill="#7fba00"/> <path d="M23.2,21.3v-5h2.5v5c0,.9.8,1.7,2.1,2.1l4.2.9c2.3.7,3.9,2.5,3.9,4.5v5.7H33.4V28.8c0-.9-.8-1.7-2.1-2.1l-4.2-.9C24.8,25.1,23.2,23.3,23.2,21.3Z" transform="translate(0 -5.6)" fill="#59b4d9"/> <path d="M30.4,37.1V32.5a2.006,2.006,0,0,1,2-2H37a2.006,2.006,0,0,1,2,2v4.6a2.006,2.006,0,0,1-2,2H32.4A2.006,2.006,0,0,1,30.4,37.1Z" transform="translate(0 -5.6)" fill="#7fba00"/> <rect x="23.2" y="10.7" width="2.8" height="4.8" fill="#59b4d9"/> <path d="M26.5,11.7v3.7H22.8V11.7h3.7m.8-2.8H22a2.006,2.006,0,0,0-2,2v5.3a2.006,2.006,0,0,0,2,2h5.3a2.006,2.006,0,0,0,2-2V10.9a2.006,2.006,0,0,0-2-2Z" transform="translate(0 -5.6)" fill="#0072c6"/> <path d="M7.9,44.4a7.41,7.41,0,0,1-4.5-1.1c-.9-.8-1.3-2.1-1.3-4V28.9c0-1.7-.7-2.6-2.1-2.6V23.7q2.1,0,2.1-2.7V10.8c0-1.9.4-3.3,1.3-4.1S5.8,5.6,7.9,5.6V8.2c-1.5,0-2.3.8-2.3,2.5v10c0,2.3-.7,3.7-2.2,4.3h0c1.4.6,2.2,2,2.2,4.3v9.9a3.439,3.439,0,0,0,.5,2,2.2,2.2,0,0,0,1.7.6l.1,2.6Z" transform="translate(0 -5.6)" fill="#59b4d9"/> <path d="M42.1,5.6a7.41,7.41,0,0,1,4.5,1.1c.9.8,1.3,2.1,1.3,4V21.1c0,1.7.7,2.6,2.1,2.6v2.6q-2.1,0-2.1,2.7V39.1c0,1.9-.4,3.3-1.3,4.1s-2.4,1.2-4.5,1.2V41.8c1.5,0,2.3-.8,2.3-2.5v-10c0-2.3.7-3.7,2.2-4.3h0c-1.4-.6-2.2-2-2.2-4.3V10.8a3.439,3.439,0,0,0-.5-2,2.2,2.2,0,0,0-1.7-.6l-.1-2.6Z" transform="translate(0 -5.6)" fill="#59b4d9"/> <\/symbol><\/defs><\/svg><svg><use xlink:href="#logic-apps"><\/use><\/svg>'
},
getInitialState: function () {
return {
region: "us-west",
actions: 0,
days: 1,
integrationAccounts: 0,
enterpriseConnections: 0,
testEnterpriseConnections: 0
}
},
getPrice: function (t) {
var r = n.getPricingApiStore().data;
return r ? f(t) + i(t).integrationAccounts + i(t).enterpriseConnections + i(t).testEnterpriseConnections : 0
},
getDisplayName: function (n) {
return n.name || r
},
getSku: function (t) {
var i = n.getPricingApiStore().data;
return i ? {
actions: i.graduatedOffers.actions[t.region].sku,
integrationAccounts: i.offers["integration-permonth"].skus[t.region],
enterpriseConnections: i.offers["enterprise-permonth"].skus[t.region],
testEnterpriseConnections: i.offers["test-permonth"].skus[t.region]
} : ""
},
getDescription: function (n) {
return Core.Util.FormatString("{0} region, {1} actions, {2} days, {3} integration accounts, {4} enterprise connections and {5} test enterprise connections.", n.region, n.actions, n.days, n.integrationAccounts, n.enterpriseConnections, n.testEnterpriseConnections)
}
});
Acom.Calculator.Actions.modules.register(n)
}();
! function () {
"use strict";
function n(n) {
var i = t.getPricingApiStore().data;
return i ? {
studioSeats: n.studioSeats * i.offers["standard-studio-perseatpermonth"].prices[n.region],
studioHours: n.studioHours * n.studioSeats * i.offers["standard-studio-perstudioexperimentationhour"].prices[n.region],
webApiTransactions: n.webApiTier == "devtest" ? 0 : Math.ceil(n.webApiTransactions / 1e3) * i.offers["web-api-" + n.webApiTier + "-perthousandapitransactions"].prices[n.region],
webApiHours: n.webApiTier == "devtest" ? 0 : n.webApiHours * i.offers["web-api-" + n.webApiTier + "-perhour"].prices[n.region],
webApiClassicTransactions: Math.ceil(n.webApiClassicTransactions / 1e3) * i.offers["web-api-classic-standard-perthousandapitransactions"].prices[n.region],
webApiClassicHours: n.webApiClassicHours * i.offers["web-api-classic-standard-perhour"].prices[n.region]
} : 0
}
function u(n) {
var r = t.getPricingApiStore().data,
i = 0;
if (!r) return "";
for (i; i < r.webApiTiers.length; i++)
if (r.webApiTiers[i].slug === n.webApiTier) return r.webApiTiers[i].displayName
}
var i = "Machine Learning",
r, t;
r = React.createClass({
displayName: "MachineLearning",
onChange: Acom.Calculator.onChange,
render: function () {
var t = this.props,
r = t.dataStore.pricingData,
f = t.webApiTier == "devtest" ? 0 : r.offers["web-api-" + t.webApiTier + "-perthousandapitransactions"].prices[t.region],
e = t.webApiTier == "devtest" ? 0 : r.offers["web-api-" + t.webApiTier + "-perhour"].prices[t.region];
return React.createElement("div", {
onChange: this.onChange
}, React.createElement("div", {
className: "heading"
}, React.createElement("span", {
className: "service-logo icon",
dangerouslySetInnerHTML: t.dataStore.module.icon
}), " ", React.createElement("input", {
className: "text-input",
name: "name",
placeholder: i,
defaultValue: t.name
})), React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Region",
name: "region",
options: r.regions,
defaultValue: t.region
}), React.createElement(CalculatorDropdown, {
label: "Feature",
name: "feature",
options: r.categories,
defaultValue: t.feature
})), displayIf(t.feature === "studio" && t.region !== "us-east-2", React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
key: t.feature + "studio",
label: "Tier",
name: "studioTier",
options: r.studioTiers,
defaultValue: t.studioTier
}))), displayIf(t.feature === "webapi", React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
key: t.feature + "api",
label: "Tier",
name: "webApiTier",
options: r.webApiTiers,
defaultValue: t.webApiTier
}))), displayIf(t.feature === "webapiclassic", React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
key: t.feature + "classic",
label: "Tier",
name: "webApiClassicTier",
options: r.webApiClassicTiers,
defaultValue: t.webApiClassicTier
})))), displayIf(t.feature === "studio" && t.studioTier === "free" && t.region !== "us-east-2", React.createElement("div", null, React.createElement("div", {
className: "cost no-divider"
}, React.createElement("p", null, "The free tier is intended to provide an in-depth introduction to the Azure Machine Learning Studio. The free tier includes free access to one Azure Machine Learning Studio workspace per Microsoft account. It includes the ability to use up to 10GB of storage and the ability to operationalize models as staging APIs.")), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: t.price,
decimals: "2",
format: "currency"
}))))))), displayIf(t.feature === "studio" && t.studioTier === "standard" && t.region !== "us-east-2", React.createElement("div", null, React.createElement("div", {
className: "cost"
}, React.createElement("h3", null, "Seats"), React.createElement(TextNumber, {
label: "Seats",
name: "studioSeats",
min: "0",
max: "999",
defaultValue: t.studioSeats,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: r.offers["standard-studio-perseatpermonth"].prices[t.region],
decimals: "2",
format: "currency"
})), React.createElement("label", {
className: "label"
}, "Per month")), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n(t).studioSeats,
decimals: "2",
format: "currency"
}))), displayIf(t.displaySku && t.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, t.sku.studioSeats))))), React.createElement("div", {
className: "cost"
}, React.createElement("h3", null, "Studio usage"), React.createElement(TextNumber, {
label: "Experiment hours per seat",
name: "studioHours",
min: "0",
max: "9999",
defaultValue: t.studioHours,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric static"
}, t.studioSeats), React.createElement("label", {
className: "label"
}, "Seats")), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: r.offers["standard-studio-perstudioexperimentationhour"].prices[t.region],
decimals: "2",
format: "currency"
})), React.createElement("label", {
className: "label"
}, "Per month")), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n(t).studioHours,
decimals: "2",
format: "currency"
}))), displayIf(t.displaySku && t.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, t.sku.studioHours))))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("span", {
className: "sub-total"
}, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: t.price,
decimals: "2",
format: "currency"
}))))))), displayIf(t.region === "us-east-2" && t.feature === "studio", React.createElement("div", null, React.createElement("div", {
className: "cost no-divider"
}, React.createElement("p", null, "The Studio feature is not currently available in the East US 2 region.")), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: t.price,
decimals: "2",
format: "currency"
}))))))), displayIf(t.feature === "webapi", React.createElement("div", null, displayIf(t.webApiTier === "devtest", React.createElement("div", null, React.createElement("div", {
className: "cost no-divider"
}, React.createElement("p", null, formatReact("For testing only: includes {0} API transactions and {1} API compute hours.", r.offers["web-api-devtest-permonth"].transactionsIncluded.toLocaleString(Acom.currentCulture), r.offers["web-api-devtest-permonth"].computeHoursIncluded.toLocaleString(Acom.currentCulture)))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: t.price,
decimals: "2",
format: "currency"
})))))), React.createElement("div", null, React.createElement("div", {
className: "cost no-divider"
}, React.createElement("p", null, formatReact("Includes {0} API transactions and {1} API compute hours.", r.offers["web-api-" + t.webApiTier + "-permonth"].transactionsIncluded.toLocaleString(Acom.currentCulture), r.offers["web-api-" + t.webApiTier + "-permonth"].computeHoursIncluded.toLocaleString(Acom.currentCulture)))), React.createElement("div", {
className: "cost"
}, React.createElement("div", null, React.createElement("p", {
className: "inline-cost-text"
}, formatReact("{0} base price", u(t)))), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: r.offers["web-api-" + t.webApiTier + "-permonth"].prices[t.region],
decimals: "2",
format: "currency"
}))), displayIf(t.displaySku && t.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, t.sku.webApiBase))))), React.createElement("div", {
className: "cost sub-module"
}, React.createElement(TextNumber, {
label: "Transaction overages",
name: "webApiTransactions",
min: "0",
max: "999999999",
defaultValue: t.webApiTransactions,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: f,
decimals: "2",
format: "currency"
})), React.createElement("label", {
className: "label"
}, "Per 1,000")), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n(t).webApiTransactions,
decimals: "2",
format: "currency"
}))), displayIf(t.displaySku && t.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, t.sku.webApiTransactions))))), React.createElement("div", {
className: "cost sub-module"
}, React.createElement(TextNumber, {
label: "Compute hour overages",
name: "webApiHours",
min: "0",
max: "999999999",
defaultValue: t.webApiHours,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: e,
decimals: "2",
format: "currency"
})), React.createElement("label", {
className: "label"
}, "Per hour")), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n(t).webApiHours,
decimals: "2",
format: "currency"
}))), displayIf(t.displaySku && t.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, t.sku.webApiHours))))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("span", {
className: "sub-total"
}, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: t.price,
decimals: "2",
format: "currency"
}))))))))), displayIf(t.feature === "webapiclassic", React.createElement("div", null, React.createElement("div", {
className: "cost no-divider"
}, React.createElement(TextNumber, {
label: "Transactions",
name: "webApiClassicTransactions",
min: "0",
max: "999999999",
defaultValue: t.webApiClassicTransactions,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: r.offers["web-api-classic-standard-perthousandapitransactions"].prices[t.region],
decimals: "2",
format: "currency"
})), React.createElement("label", {
className: "label"
}, "Per 1,000")), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n(t).webApiClassicTransactions,
decimals: "2",
format: "currency"
}))), displayIf(t.displaySku && t.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, t.sku.webApiClassicTransactions))))), React.createElement("div", {
className: "cost sub-module"
}, React.createElement(TextNumber, {
label: "Compute hours",
name: "webApiClassicHours",
min: "0",
max: "999999999",
defaultValue: t.webApiClassicHours,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "2px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: r.offers["web-api-classic-standard-perhour"].prices[t.region],
decimals: "2",
format: "currency"
})), React.createElement("label", {
className: "label"
}, "Per hour")), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: n(t).webApiClassicHours,
decimals: "2",
format: "currency"
}))), displayIf(t.displaySku && t.sku, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, t.sku.webApiClassicHours))))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("span", {
className: "sub-total"
}, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: t.price,
decimals: "2",
format: "currency"
}))))))))
}
});
t = Acom.Calculator.createModule({
slug: "machine-learning",
displayName: i,
description: "Easily build, deploy, and manage predictive analytics solutions",
pricingApi: "/api/v1/pricing/machine-learning/calculator/",
component: r,
icon: {
__html: '<svg style="display:none; visibility:hidden;"><defs><symbol id="machine-learning" viewBox="0 0 50 50"> <path fill="#59B4D9" d="M48.288,44.623L32.72,17.659V6.743h0.281c1.862,0,3.372-1.51,3.372-3.372S34.863,0,33.001,0H16.016 c-1.862,0-3.372,1.51-3.372,3.372s1.51,3.372,3.372,3.372h0.281v10.915L0.729,44.623C-0.979,47.58,0.418,50,3.833,50h41.351 C48.598,50,49.995,47.58,48.288,44.623z"/> <polygon fill="#B8D432" points="13.551,33.017 7.127,44.143 41.889,44.143 35.466,33.017 "/> <path fill="#7FBA00" d="M25.334,37.532c1.735,0,3.141-1.406,3.141-3.141c0-0.493-0.117-0.958-0.32-1.374h-5.643 c-0.203,0.415-0.32,0.88-0.32,1.374C22.193,36.126,23.599,37.532,25.334,37.532z"/> <circle fill="#7FBA00" cx="29.232" cy="39.956" r="1.541"/> <path opacity="0.25" fill="#FFFFFF" d="M0.729,44.623l15.568-26.965V6.743h-0.281c-1.862,0-3.372-1.51-3.372-3.372 S14.153,0,16.016,0l7.319,0v17.572L15.13,50H3.833C0.418,50-0.979,47.58,0.729,44.623z"/> <\/symbol> <\/defs><\/svg><svg><use xlink:href="#machine-learning"><\/use><\/svg>'
},
getInitialState: function () {
return {
region: "us-south-central",
feature: "studio",
studioTier: "free",
studioHours: 0,
studioSeats: 0,
webApiTier: "devtest",
webApiTransactions: 0,
webApiHours: 0,
webApiClassicTier: "standard",
webApiClassicTransactions: 0,
webApiClassicHours: 0
}
},
getPrice: function (i) {
var r = t.getPricingApiStore().data;
if (!r) return 0;
if (i.feature === "studio") {
if (i.studioTier === "free" || i.region === "us-east-2") return 0;
if (i.studioTier === "standard") return n(i).studioSeats + n(i).studioHours
} else {
if (i.feature === "webapi") return i.webApiTier === "devtest" ? r.offers["web-api-devtest-permonth"].prices[i.region] : r.offers["web-api-" + i.webApiTier + "-permonth"].prices[i.region] + n(i).webApiTransactions + n(i).webApiHours;
if (i.feature === "webapiclassic") return n(i).webApiClassicTransactions + n(i).webApiClassicHours
}
},
getDisplayName: function (n) {
return n.name || i
},
getSku: function (n) {
var i = t.getPricingApiStore().data;
return i ? {
studioHours: i.offers["standard-studio-perstudioexperimentationhour"].skus[n.region],
studioSeats: i.offers["standard-studio-perseatpermonth"].skus[n.region],
webApiBase: i.offers["web-api-" + n.webApiTier + "-permonth"].skus[n.region],
webApiTransactions: n.webApiTier == "devtest" ? "" : i.offers["web-api-" + n.webApiTier + "-perthousandapitransactions"].skus[n.region],
webApiHours: n.webApiTier == "devtest" ? "" : i.offers["web-api-" + n.webApiTier + "-perhour"].skus[n.region],
webApiClassicTransactions: i.offers["web-api-classic-standard-perthousandapitransactions"].skus[n.region],
webApiClassicHours: i.offers["web-api-classic-standard-perhour"].skus[n.region]
} : ""
},
getDescription: function (n) {
return n.feature === "studio" && n.studioTier === "free" ? "Free" : n.feature === "webapi" && n.webApiTier === "devtest" ? "Free" : n.feature === "studio" ? Core.Util.FormatString("{0} studio seats, {1} experiment hours per seat.", n.studioSeats, n.studioHours) : n.feature === "webapi" ? Core.Util.FormatString("{0} tier, {1} overage transactions, {2} overage hours", n.webApiTier, n.webApiTransactions, n.webApiHours) : Core.Util.FormatString("{0} transactions, {1} hours", n.webApiClassicTransactions, n.webApiClassicHours)
}
});
Acom.Calculator.Actions.modules.register(t)
}();
! function () {
"use strict";
function o(t) {
var i = n.getPricingApiStore().data,
r = t.encoderType.replace("encoder", "") + "-encoder",
u = 0,
f = 0,
e = 0;
return i ? (f = t.output * t.outputFactor, u = i.vod.offers[r].price[t.region], e = f * i.vod.offers[r][t.outputQuality + "Multiplier"] * u, t.addAudio ? e + f * i.vod.offers[r].audioMultiplier * u : e) : 0
}
function s(t) {
var i = n.getPricingApiStore().data;
return i ? getGraduatedPrice(i.vod.indexingOffers[t.region].prices, t.indexing) : 0
}
function i(t) {
var i = n.getPricingApiStore().data;
return i ? {
s1: i.vod.offers["reserved-units-s1"].price[t.region],
s2: i.vod.offers["reserved-units-s2"].price[t.region],
s3: i.vod.offers["reserved-units-s3"].price[t.region]
} : 0
}
function r(t) {
var r = n.getPricingApiStore().data;
return r ? {
s1: i(t).s1 * t.s1Hours,
s2: i(t).s2 * t.s2Hours,
s3: i(t).s3 * t.s3Hours
} : 0
}
function h(t) {
var i = n.getPricingApiStore().data;
return i ? t.streamingTier === "standardstreamingunits" ? i.streaming.offers["standard-streaming-units"].price[t.region] * t.standardStreamingUnits : t.streamingTier === "premiumstreamingunits" ? i.streaming.offers["premium-streaming-units"].price[t.region] * t.premiumStreamingUnits : 0 : 0
}
function t(t) {
var i = n.getPricingApiStore().data;
return i ? {
aes: i.contentProtection.offers.advancedencryption.price[t.region] * t.contentProtectionProtectionAES,
playReady: i.contentProtection.offers.playready.price[t.region] * t.contentProtectionProtectionPlayReady,
widevine: i.contentProtection.offers.widevine.price[t.region] * t.contentProtectionWidevine,
fairplay: i.contentProtection.offers.fairplay.price[t.region] * t.contentProtectionFairplay
} : 0
}
function u(n, t) {
return getGraduatedPrice(n, t)
}
var f = "Media Services",
e, n;
e = React.createClass({
displayName: "MediaServices",
onChange: Acom.Calculator.onChange,
getServiceSecondaryProperty: function (n) {
var t = this.props,
i = t.dataStore.pricingData;
return n === "vod" ? React.createElement("div", null, React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Encoder type",
name: "encoderType",
options: i[n].tiers,
defaultValue: t.encoderType
}), React.createElement(CalculatorDropdown, {
label: "Video output quality",
name: "outputQuality",
options: i[n].outputQualities,
defaultValue: t.outputQuality
}), displayIf(t.outputQuality !== "audio", React.createElement("div", null, React.createElement(Checkbox, {
label: "Add audio",
name: "addAudio",
defaultChecked: t.addAudio
})))))) : n === "streaming" ? React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Streaming tier",
name: "streamingTier",
options: i[n].types,
defaultValue: t.streamingTier
})), React.createElement("span", null, formatReact('<strong>NOTE:<\/strong><br />When Azure CDN is not enabled for Media Services, data transfer is charged at <a href="{0}">Data Transfer Pricing<\/a>. When Azure CDN is enabled for Streaming Units, data transfer charges do not apply. Data transferred is instead just charged at <a href="{1}">standard CDN pricing<\/a>.', "/en-us/pricing/details/bandwidth/", "/en-us/pricing/details/cdn/"))) : n === "livevideo" ? React.createElement("div", {
className: "detail"
}, React.createElement("div", {
className: "wa-dropdownList"
}, React.createElement(CalculatorDropdown, {
label: "Live channel type",
name: "liveVideoType",
options: i.liveVideo.types,
defaultValue: t.liveVideoType
}))) : void 0
},
getServiceProperties: function (n) {
var f = this.props,
e = f.dataStore.pricingData;
if (n === "vod") return React.createElement("div", {
className: "service-properties collapsible"
}, React.createElement("div", {
className: "cost"
}, React.createElement("h3", null, "Output Minutes"), React.createElement(FactoredInput, {
key: "factor-outputFactor-" + f.outputFactor,
name: "output",
defaultValue: f.output,
factorsName: "outputFactor",
factorsDefault: f.outputFactor || "1",
factorUnit: "minutes",
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: o(f),
decimals: "2",
format: "currency"
}))), displayIf(f.displaySku && f.sku.encoder, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, f.sku.encoder))))), React.createElement("div", {
className: "cost"
}, React.createElement("h3", null, "Indexing"), React.createElement(TextNumber, {
label: "Content minutes",
name: "indexing",
min: "0",
max: "999999999",
defaultValue: f.indexing,
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: s(f),
decimals: "2",
format: "currency"
}))), displayIf(f.displaySku && f.sku.indexing, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, f.sku.indexing))))), React.createElement("div", {
className: "cost"
}, React.createElement("h3", null, "Media Reserved Units"), React.createElement("h4", null, "S1"), React.createElement(TextNumber, {
label: "Hours",
name: "s1Hours",
min: "0",
max: "999999999",
defaultValue: f.s1Hours,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(StaticNumber, {
value: React.createElement(Acom.Atoms.Number, {
value: i(f).s1,
decimals: "2",
format: "currency"
})
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: r(f).s1,
decimals: "2",
format: "currency"
}))), displayIf(f.displaySku && f.sku.s1, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, f.sku.s1))))), React.createElement("div", {
className: "cost sub-module"
}, React.createElement("h4", null, "S2"), React.createElement(TextNumber, {
label: "Hours",
name: "s2Hours",
min: "0",
max: "999999999",
defaultValue: f.s2Hours,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(StaticNumber, {
value: React.createElement(Acom.Atoms.Number, {
value: i(f).s2,
decimals: "2",
format: "currency"
})
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: r(f).s2,
decimals: "2",
format: "currency"
}))), displayIf(f.displaySku && f.sku.s2, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, f.sku.s2))))), React.createElement("div", {
className: "cost sub-module"
}, React.createElement("h4", null, "S3"), React.createElement(TextNumber, {
label: "Hours",
name: "s3Hours",
min: "0",
max: "999999999",
defaultValue: f.s3Hours,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(StaticNumber, {
value: React.createElement(Acom.Atoms.Number, {
value: i(f).s3,
decimals: "2",
format: "currency"
})
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: r(f).s3,
decimals: "2",
format: "currency"
}))), displayIf(f.displaySku && f.sku.s3, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, f.sku.s3))))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("span", {
className: "sub-total"
}, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: f.price,
decimals: "2",
format: "currency"
}))))));
if (n === "streaming") return React.createElement("div", null, React.createElement("div", {
className: "cost no-divider"
}, React.createElement("h3", null, "Streaming units"), displayIf(f.streamingTier === "standardstreamingunits", React.createElement(TextNumber, {
label: "Units",
name: "standardStreamingUnits",
min: "0",
max: "999",
defaultValue: f.standardStreamingUnits,
onChange: this.onChange
})), displayIf(f.streamingTier === "premiumstreamingunits", React.createElement(TextNumber, {
label: "Units",
name: "premiumStreamingUnits",
min: "0",
max: "999",
defaultValue: f.premiumStreamingUnits,
onChange: this.onChange
})), React.createElement("div", {
className: "math"
}, "×"), React.createElement("div", {
className: "wa-textNumber",
style: {
marginTop: "5px",
marginBottom: "5px"
}
}, React.createElement("div", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: e[n].offers[f.streamingTier.replace("streamingunits", "-streaming-units")].price[f.region],
decimals: "2",
format: "currency"
}))), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: h(f),
decimals: "2",
format: "currency"
}))), displayIf(f.displaySku && f.sku.streamingUnits, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, f.sku.streamingUnits))))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("span", {
className: "sub-total"
}, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: f.price,
decimals: "2",
format: "currency"
}))))));
if (n === "contentprotection") return React.createElement("div", null, React.createElement("div", {
className: "cost"
}, React.createElement("h3", null, "Advanced Encryption"), React.createElement(TextNumber, {
label: "Units of 100 keys",
name: "contentProtectionProtectionAES",
min: "0",
max: "999999",
defaultValue: f.contentProtectionProtectionAES,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(StaticNumber, {
label: "Per 100 Keys",
value: React.createElement(Acom.Atoms.Number, {
value: e.contentProtection.offers.advancedencryption.price[f.region],
decimals: "2",
format: "currency"
})
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: t(f).aes,
decimals: "2",
format: "currency"
}))), displayIf(f.displaySku && f.sku.protectionAdvancedEncryption, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, f.sku.protectionAdvancedEncryption))))), React.createElement("div", {
className: "cost sub-module"
}, React.createElement("h3", null, "PlayReady"), React.createElement(TextNumber, {
key: f.service,
label: "Units of 100 licenses",
name: "contentProtectionProtectionPlayReady",
min: "0",
max: "999999",
defaultValue: f.contentProtectionProtectionPlayReady,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(StaticNumber, {
label: "Per 100 Licenses",
value: React.createElement(Acom.Atoms.Number, {
value: e.contentProtection.offers.playready.price[f.region],
decimals: "2",
format: "currency"
})
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: t(f).playReady,
decimals: "2",
format: "currency"
}))), displayIf(f.displaySku && f.sku.protectionPlayReady, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, f.sku.protectionPlayReady))))), React.createElement("div", {
className: "cost sub-module"
}, React.createElement("h3", null, "Widevine"), React.createElement(TextNumber, {
label: "Units of 100 licenses",
name: "contentProtectionWidevine",
min: "0",
max: "999999",
defaultValue: f.contentProtectionWidevine,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(StaticNumber, {
label: "Per 100 Licenses",
value: React.createElement(Acom.Atoms.Number, {
value: e.contentProtection.offers.playready.price[f.region],
decimals: "2",
format: "currency"
})
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: t(f).widevine,
decimals: "2",
format: "currency"
}))), displayIf(f.displaySku && f.sku.widevine, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, f.sku.widevine))))), React.createElement("div", {
className: "cost sub-module"
}, React.createElement("h3", null, "FairPlay"), React.createElement(TextNumber, {
label: "Units of 100 licenses",
name: "contentProtectionFairplay",
min: "0",
max: "999999999",
defaultValue: f.contentProtectionFairplay,
onChange: this.onChange
}), React.createElement("div", {
className: "math"
}, "×"), React.createElement(StaticNumber, {
label: "Per 100 Licenses",
value: React.createElement(Acom.Atoms.Number, {
value: e.contentProtection.offers.fairplay.price[f.region],
decimals: "2",
format: "currency"
})
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: t(f).fairplay,
decimals: "2",
format: "currency"
}))), displayIf(f.displaySku && f.sku.fairplay, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
}, "SKU"), React.createElement("span", {
className: "sku-number"
}, f.sku.fairplay))))), React.createElement("div", {
className: "cost"
}, React.createElement("div", {
className: "total"
}, React.createElement("span", {
className: "sub-total"
}, "Sub-total"), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: f.price,
decimals: "2",
format: "currency"
}))))));
if (n === "livevideo") {
if (f.liveVideoType === "standardliveencoding") return React.createElement("div", {
key: "props.liveVideoWithEncodingHours",
className: "cost"
}, React.createElement(TextNumber, {
label: "Hours",
name: "liveVideoWithEncodingHours",
min: "0",
max: "999",
defaultValue: f.liveVideoWithEncodingHours,
onChange: this.onChange
}), React.createElement("div", {
className: "total"
}, React.createElement("div", {
className: "math equals"
}, "="), formatReact("{0}/mo", React.createElement("span", {
className: "numeric"
}, React.createElement(Acom.Atoms.Number, {
value: u(e.liveVideo.offers[f.liveVideoType + "-" + f.region].prices, f.liveVideoWithEncodingHours),
decimals: "2",
format: "currency"
}))), displayIf(f.displaySku && f.sku.liveVideo, React.createElement("div", {
className: "sku-under-total"
}, React.createElement("label", {
className: "sku-label"
window._Acom = Acom;
Object.defineProperty(window, 'Acom', {
get: function () {
return window._Acom;
},
set: function (value) {
debugger; // sets breakpoint
window._Acom = value;
}
});