You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

69348 lines
2.8 MiB

webpackJsonp([14], [function(t, e, i) {
"use strict";
function o(t, e) {
function i() {
this.constructor = t
}
v(t, e), t.prototype = null === e ? Object.create(e) : (i.prototype = e.prototype, new i)
}
function n(t, e) {
var i, o, n = {};
for (i in t) Object.prototype.hasOwnProperty.call(t, i) && e.indexOf(i) < 0 && (n[i] = t[i]);
if (null != t && "function" == typeof Object.getOwnPropertySymbols)
for (o = 0, i = Object.getOwnPropertySymbols(t); o < i.length; o++) e.indexOf(i[o]) < 0 && (n[i[
o]] = t[i[o]]);
return n
}
function r(t, e, i, o) {
var n, r, s = arguments.length,
a = s < 3 ? e : null === o ? o = Object.getOwnPropertyDescriptor(e, i) : o;
if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) a = Reflect.decorate(t, e,
i, o);
else
for (r = t.length - 1; r >= 0; r--)(n = t[r]) && (a = (s < 3 ? n(a) : s > 3 ? n(e, i, a) : n(e,
i)) || a);
return s > 3 && a && Object.defineProperty(e, i, a), a
}
function s(t, e) {
return function(i, o) {
e(i, o, t)
}
}
function a(t, e) {
if ("object" == typeof Reflect && "function" == typeof Reflect.metadata) return Reflect.metadata(t,
e)
}
function l(t, e, i, o) {
return new(i || (i = Promise))(function(n, r) {
function s(t) {
try {
l(o.next(t))
} catch (t) {
r(t)
}
}
function a(t) {
try {
l(o.throw(t))
} catch (t) {
r(t)
}
}
function l(t) {
t.done ? n(t.value) : new i(function(e) {
e(t.value)
}).then(s, a)
}
l((o = o.apply(t, e || [])).next())
})
}
function c(t, e) {
function i(t) {
return function(e) {
return o([t, e])
}
}
function o(i) {
if (n) throw new TypeError("Generator is already executing.");
for (; l;) try {
if (n = 1, r && (s = r[2 & i[0] ? "return" : i[0] ? "throw" : "next"]) && !(s = s.call(
r, i[1])).done) return s;
switch (r = 0, s && (i = [0, s.value]), i[0]) {
case 0:
case 1:
s = i;
break;
case 4:
return l.label++, {
value: i[1],
done: !1
};
case 5:
l.label++, r = i[1], i = [0];
continue;
case 7:
i = l.ops.pop(), l.trys.pop();
continue;
default:
if (s = l.trys, !(s = s.length > 0 && s[s.length - 1]) && (6 === i[0] || 2 ===
i[0])) {
l = 0;
continue
}
if (3 === i[0] && (!s || i[1] > s[0] && i[1] < s[3])) {
l.label = i[1];
break
}
if (6 === i[0] && l.label < s[1]) {
l.label = s[1], s = i;
break
}
if (s && l.label < s[2]) {
l.label = s[2], l.ops.push(i);
break
}
s[2] && l.ops.pop(), l.trys.pop();
continue
}
i = e.call(t, l)
} catch (t) {
i = [6, t], r = 0
} finally {
n = s = 0
}
if (5 & i[0]) throw i[1];
return {
value: i[0] ? i[1] : void 0,
done: !0
}
}
var n, r, s, a, l = {
label: 0,
sent: function() {
if (1 & s[0]) throw s[1];
return s[1]
},
trys: [],
ops: []
};
return a = {
next: i(0),
throw: i(1),
return: i(2)
}, "function" == typeof Symbol && (a[Symbol.iterator] = function() {
return this
}), a
}
function h(t, e) {
for (var i in t) e.hasOwnProperty(i) || (e[i] = t[i])
}
function u(t) {
var e = "function" == typeof Symbol && t[Symbol.iterator],
i = 0;
return e ? e.call(t) : {
next: function() {
return t && i >= t.length && (t = void 0), {
value: t && t[i++],
done: !t
}
}
}
}
function d(t, e) {
var i, o, n, r, s = "function" == typeof Symbol && t[Symbol.iterator];
if (!s) return t;
i = s.call(t), n = [];
try {
for (;
(void 0 === e || e-- > 0) && !(o = i.next()).done;) n.push(o.value)
} catch (t) {
r = {
error: t
}
} finally {
try {
o && !o.done && (s = i.return) && s.call(i)
} finally {
if (r) throw r.error
}
}
return n
}
function p() {
for (var t = [], e = 0; e < arguments.length; e++) t = t.concat(d(arguments[e]));
return t
}
function _(t) {
return this instanceof _ ? (this.v = t, this) : new _(t)
}
function f(t, e, i) {
function o(t) {
h[t] && (c[t] = function(e) {
return new Promise(function(i, o) {
u.push([t, e, i, o]) > 1 || n(t, e)
})
})
}
function n(t, e) {
try {
r(h[t](e))
} catch (t) {
l(u[0][3], t)
}
}
function r(t) {
t.value instanceof _ ? Promise.resolve(t.value.v).then(s, a) : l(u[0][2], t)
}
function s(t) {
n("next", t)
}
function a(t) {
n("throw", t)
}
function l(t, e) {
t(e), u.shift(), u.length && n(u[0][0], u[0][1])
}
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
var c, h = i.apply(t, e || []),
u = [];
return c = {}, o("next"), o("throw"), o("return"), c[Symbol.asyncIterator] = function() {
return this
}, c
}
function m(t) {
function e(e, n) {
t[e] && (i[e] = function(i) {
return (o = !o) ? {
value: _(t[e](i)),
done: "return" === e
} : n ? n(i) : i
})
}
var i, o;
return i = {}, e("next"), e("throw", function(t) {
throw t
}), e("return"), i[Symbol.iterator] = function() {
return this
}, i
}
function g(t) {
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
var e = t[Symbol.asyncIterator];
return e ? e.call(t) : "function" == typeof u ? u(t) : t[Symbol.iterator]()
}
var v, y;
Object.defineProperty(e, "__esModule", {
value: !0
}), e.__extends = o, i.d(e, "__assign", function() {
return y
}), e.__rest = n, e.__decorate = r, e.__param = s, e.__metadata = a, e.__awaiter = l, e
.__generator = c, e.__exportStar = h, e.__values = u, e.__read = d, e.__spread = p, e.__await = _, e
.__asyncGenerator = f, e.__asyncDelegator = m, e.__asyncValues = g, v = Object.setPrototypeOf || {
__proto__: []
}
instanceof Array && function(t, e) {
t.__proto__ = e
} || function(t, e) {
for (var i in e) e.hasOwnProperty(i) && (t[i] = e[i])
}, y = Object.assign || function(t) {
var e, i, o, n;
for (i = 1, o = arguments.length; i < o; i++) {
e = arguments[i];
for (n in e) Object.prototype.hasOwnProperty.call(e, n) && (t[n] = e[n])
}
return t
}
}, function(t, e, i) {
"use strict";
(function(t) {
function o(t, e) {
a.call(this), this._linetool = t, this._pointindex = e, this._model = t._model, this._text =
"", this._coordinate = 0, this._background = "#5592C9", this._activeBackground =
"#0F6DBF", this._borderColor = "#2E84A6", this._color = "white", this._visible = !1,
this._invalidated = !0, this._renderer = new l
}
function n(t, e) {
var i, r, s;
if (c.call(this), this._model = t, this._properties = e, this._pointAdded = new m, this
._pointChanged = new m, this._onRestoringFactoryDefaults = new m, this
._onTemplateApplying = new m, this._onTemplateApplied = new m, e.visible && e.frozen ||
this._properties.merge(defaults("linetool")), i = defaults("linetoolvisibilities"), e
.intervalsVisibilities)
for (r in i.intervalsVisibilities) this._properties.intervalsVisibilities[r] || this
._properties.intervalsVisibilities.addProperty(r, i.intervalsVisibilities[r]);
else this._properties.merge(i);
if (this._paneViews = [], this._points = [], this._fixedPoints = [], this._timePoint = [],
this._currentPointsetId = null, this._properties.symbol || this._properties.merge({
symbol: t.mainSeries().symbol()
}), this._properties.interval || this._properties.merge({
interval: t.mainSeries().interval()
}), this._properties.addExclusion && (this._properties.addExclusion("symbol"), this
._properties.addExclusion("symbolInfo"), this._properties.addExclusion("points"),
this._properties.addExclusion("interval"), this._properties.addExclusion("visible"),
this._properties.addExclusion("lastUpdateTime")), this.calcIsActualSymbol(), this
._properties.intervalsVisibilities.listeners().subscribe(this, n.prototype
.calcIsActualSymbol),
this._properties.listeners().subscribe(this, n.prototype.propertiesChanged), this
._createPointsProperties(), "_tooltipFieldsHash" in this && !this.hasOwnProperty(
"_tooltipFieldsHash") && (this._tooltipFieldsHash = $.extend(!0, {}, this
._tooltipFieldsHash)), this.m_priceAxisViews = [], this.m_timeAxisViews = [], this
.pointsCount() > 0)
for (s = 0; s < this.pointsCount(); s++) this.m_priceAxisViews.push(this
.createPriceAxisView(s)), this.m_timeAxisViews.push(new o(this, s));
this._properties.visible.listeners().subscribe(this, function(t) {
t.value() || this._model.selectedSource() !== this || this._model
.setSelectedSource(null)
}), this.customization = this.customization || {
forcePriceAxisLabel: !1,
disableSelection: !1,
disableErasing: !1,
disableSave: !1,
showInObjectsTree: !0
}, this._properties.lastUpdateTime || this._properties.addProperty("lastUpdateTime", 0),
this._syncStateExclusions = []
}
var r = i(8).Point,
s = i(221).LineToolPriceAxisView,
a = i(222).TimeAxisView,
l = i(223),
c = i(46).DataSource,
h = i(26),
u = i(34).Interval,
d = i(127).DateTimeFormatter,
p = i(810),
_ = i(22),
f = i(7).getLogger("Chart.LineDataSource"),
m = i(10),
g = i(3).propertyPages,
v = i(66).lineToolsInfo;
inherit(o, a), o.prototype.setActive = function(t) {
this._active = t
}, o.prototype.update = function() {
this._invalidated = !0
}, o.prototype.updateImpl = function() {
var t, e, i;
this._visible = !1, this._model.timeScale().isEmpty() || (t = this._linetool
.axisPoints(), t.length <= this._pointindex || this._linetool === this._model
.selectedSource() && (this._text = "", e = t[this._pointindex].index, this
._coordinate = this._model.timeScale().indexToCoordinate(e), i = this._model
.timeScale().indexToUserTime(e), i && (this._text = new d(this._model
.mainSeries().isDWM()).format(i)), this._visible = !0, this
._invalidated = !1))
}, o.prototype.renderer = function() {
this._invalidated && (this.updateImpl(), this._invalidated = !1);
var t = {
text: this._text,
coordinate: this._coordinate,
color: this._color,
background: this._active ? this._activeBackground : this._background,
borderColor: this._borderColor,
visible: this._visible
};
return this._renderer.setData(t), this._renderer
}, inherit(n, c), n.prototype.pointAdded = function() {
return this._pointAdded
}, n.prototype.pointChanged = function() {
return this._pointChanged
}, n.PointPriceProperty = function(e, i) {
t.call(this), this._lineSource = e, this._pointIndex = i, e.pointAdded().subscribe(this,
function(t) {
this._pointIndex === t && this._listeners.fire(this)
}), e.pointChanged().subscribe(this, function(t) {
this._pointIndex === t && this._listeners.fire(this)
})
}, inherit(n.PointPriceProperty, t), n.prototype.enableCurrentIntervalVisibility =
function() {
var t, e, i, o, n, r, s, a = u.parse(this._model.mainSeries().interval());
a.kind() === u.SECONDS && (a.multiplier() < 60 ? (this.properties()
.intervalsVisibilities.seconds.setValue(!0), t = Math.min(this.properties()
.intervalsVisibilities.secondsFrom.value(), a.multiplier()), this
.properties().intervalsVisibilities.secondsFrom.setValue(t), e = Math.max(
this.properties().intervalsVisibilities.secondsTo.value(), a
.multiplier()), this.properties().intervalsVisibilities.secondsTo
.setValue(e)) : a = new u(u.MINUTES, a.multiplier() / 60)),
a.kind() === u.MINUTES && (a.multiplier() < 60 ? (this.properties()
.intervalsVisibilities.minutes.setValue(!0), t = Math.min(this.properties()
.intervalsVisibilities.minutesFrom.value(), a.multiplier()), this
.properties().intervalsVisibilities.minutesFrom.setValue(t), e = Math.max(
this.properties().intervalsVisibilities.minutesTo.value(), a
.multiplier()), this.properties().intervalsVisibilities.minutesTo
.setValue(e)) : (i = Math.floor(a.multiplier() / 60), this.properties()
.intervalsVisibilities.hours.setValue(!0), o = Math.min(this.properties()
.intervalsVisibilities.hoursFrom.value(), i), this.properties()
.intervalsVisibilities.hoursFrom.setValue(o), n = Math.max(this.properties()
.intervalsVisibilities.hoursTo.value(), i), this.properties()
.intervalsVisibilities.hoursTo.setValue(n))), a.kind() === u.DAYS && (this
.properties().intervalsVisibilities.days.setValue(!0), r = Math.min(this
.properties().intervalsVisibilities.daysFrom.value(), a.multiplier()), this
.properties().intervalsVisibilities.daysFrom.setValue(r), s = Math.max(this
.properties().intervalsVisibilities.daysTo.value(), a.multiplier()), this
.properties().intervalsVisibilities.daysTo.setValue(s)), a.kind() === u.WEEKS &&
this.properties().intervalsVisibilities.weeks.setValue(!0), a.kind() === u.MONTHS &&
this.properties().intervalsVisibilities.months.setValue(!0)
}, n.prototype.getType = function() {
return TradingView.className(this.constructor)
}, n.prototype.getConstructor = function() {
return this._constructor || null
}, n.prototype.isActualSymbol = function() {
return this._isActualSymbol
}, n.prototype.isActualInterval = function() {
return this._isActualInterval
}, n.prototype.isSavedInChart = function(t) {
return !this.customization.disableSave
}, n.prototype.setSavingInChartEnabled = function(t) {
this.customization.disableSave = !t
}, n.prototype.showInObjectTree = function() {
return this.customization.showInObjectsTree
}, n.prototype.setShowInObjectsTreeEnabled = function(t) {
this.customization.showInObjectsTree = t
}, n.prototype.isSelectionEnabled = function() {
return !this.customization.disableSelection
}, n.prototype.setSelectionEnabled = function(t) {
this.customization.disableSelection = !t
}, n.prototype.visibilityKeyByInterval = function(t) {
var e, i = u.parse(t);
return n.IntervalsVisibilities.forEach(function(t) {
t.kind === i.kind() && t.from <= i.multiplier() && t.to >= i.multiplier() &&
(e = t.key)
}), e
}, n.prototype.calcIsActualSymbol = function() {
var t, e = this._properties.symbol,
i = this._model.mainSeries(),
o = e.value();
this._isActualSymbol = i.symbolSameAsCurrent(o), this._isActualSymbol && (t = i
.symbol(), o !== t && (f.logWarn(
'Possible drawing "migrating" detected from "' +
o + '" to "' + t + '"'), f.logWarn("Series symbolInfo: " + JSON
.stringify(i.symbolInfo())), f.logWarn(Error().stack)), e.setValue(t)), this
.calcIsActualInterval()
}, n.prototype.calcIsActualInterval = function() {
var t, e, i, o, n, r = this._properties,
s = this._model.mainSeries(),
a = u.parse(s.interval()),
l = r.intervalsVisibilities;
this._isActualInterval = !1, a.kind() === u.SECONDS && a.multiplier() < 60 && (t = l
.seconds.value(), e = l.secondsFrom.value(), i = l.secondsTo.value(), this
._isActualInterval = t && a.multiplier() >= e && a.multiplier() <= i),
a.kind() === u.SECONDS && a.multiplier() >= 60 && (o = Math.floor(a.multiplier() /
60), t = l.minutes.value(), e = l.minutesFrom.value(), i = l.minutesTo
.value(), this._isActualInterval = t && o >= e && o <= i), a.kind() === u
.MINUTES && a.multiplier() < 60 && (t = l.minutes.value(), e = l.minutesFrom
.value(), i = l.minutesTo.value(), this._isActualInterval = t && a
.multiplier() >=
e && a.multiplier() <= i), a.kind() === u.MINUTES && a.multiplier() >= 60 && (
n = Math.floor(a.multiplier() / 60), t = l.hours.value(), e = l.hoursFrom
.value(), i = l.hoursTo.value(), this._isActualInterval = t && n >= e && n <= i
), a.kind() === u.DAYS && (t = l.days.value(), e = l.daysFrom.value(), i = l
.daysTo.value(), this._isActualInterval = t && a.multiplier() >= e && a
.multiplier() <= i), a.kind() === u.WEEKS && (this._isActualInterval = l.weeks
.value()), a.kind() === u.MONTHS && (this._isActualInterval = l.months.value()),
this._isActualInterval || this._model.selectedSource() !== this || this._model
.setSelectedSource(null)
}, n.PointPriceProperty.prototype.value = function() {
var t = this._lineSource.points()[this._pointIndex].price,
e = this._lineSource.ownerSource().formatter(),
i = e.parse(e.format(t));
return i.price ? i.price : i.value
}, n.PointPriceProperty.prototype.setValue = function(t) {
var e, i, o = this._lineSource.points()[this._pointIndex];
o.price = parseFloat(t), e = this._lineSource.priceScale(), e.isPercent() && (i = this
._lineSource.ownerSource().firstValue(), o.price = e.priceRange()
.convertToPercent(o.price, i)), this._lineSource.setPoint(this._pointIndex, o),
this._lineSource._model.updateSource(this._lineSource), this._listeners.fire(this),
this._lineSource.endChanging(!0), this._lineSource._syncMultichartState(), this
._lineSource._properties.lastUpdateTime.setValue((new Date).valueOf())
}, n.PointIndexProperty = function(e, i) {
t.call(this), this._lineSource = e, this._pointIndex = i
}, inherit(n.PointIndexProperty, t), n.PointIndexProperty.prototype.value = function() {
return this._lineSource.points()[this._pointIndex].index
}, n.PointIndexProperty.prototype.setValue = function(t) {
var e, i, o = this._lineSource.points()[this._pointIndex];
o.index = t, e = this._lineSource.priceScale(), e.isPercent() && (i = this._lineSource
.ownerSource().firstValue(), o.price = e.priceRange().convertToPercent(o.price,
i)), this._lineSource.setPoint(this._pointIndex, o), this._lineSource._model
.updateSource(this._lineSource), this._listeners.fire(this), this._lineSource
.endChanging(!0), this._lineSource._syncMultichartState(), this._lineSource
._properties.lastUpdateTime.setValue((new Date).valueOf())
}, n.prototype._syncMultichartState = function() {
var t = {
points: this._timePoint,
interval: this._model.mainSeries().interval()
};
this.linkKey && !this.properties().singleChartOnly && h.finishChangingLineTool({
model: this._model,
linkKey: this.linkKey,
symbol: this._model.mainSeries().symbol(),
finalState: t
})
}, n.prototype._createPointProperty = function(t) {
var e, i = this._properties.points;
i.addProperty(t), e = i[t], e.addChild("price", new n.PointPriceProperty(this, t)), e
.addChild("bar", new n.PointIndexProperty(this, t))
}, n.prototype._createPointsProperties = function() {
this._properties.addProperty("points");
for (var t = 0; t < this.pointsCount(); t++) this._createPointProperty(t)
},
n.prototype.priceScale = function() {
return this._ownerSource ? this._ownerSource.m_priceScale : null
}, n.prototype.symbol = function() {
return this._properties.symbol.value()
}, n.prototype.properties = function() {
return this._properties
}, n.prototype.isSavedInStudyTemplates = function() {
return !1
}, n.prototype.state = function(t) {
var e = TradingView.className(this.constructor),
i = {
type: e,
id: this.id(),
state: this.properties().state(),
points: this._timePoint,
zorder: this.zorder(),
linkKey: this.linkKey
};
return i.state._isActualInterval = this.isActualInterval(), delete i.state.points, t &&
(i.indexes = this._points), this.ownerSource() && (i.ownerSource = this
.ownerSource().id()), this.isFixed() && (i.positionPercents = this
._positionPercents || this.calcPositionPercents()), "version" in this && 1 !==
this.version && (i.version = this.version), this.hasAlert.value() && (i.alertId =
this._alertId), i
}, n.prototype.template = function() {
var t = this.properties().state();
return delete t.points, delete t.symbol, delete t.symbolInfo, t
}, n.prototype.applyTemplate = function(t) {
delete t.symbolInfo, this._onTemplateApplying.fire(t);
var e = this.properties();
e.merge(t), e.saveDefaults(), this.propertiesChanged(), this.calcIsActualSymbol(), this
.updateAllViews(), this.model().invalidate(new _(_.LIGHT_UPDATE)), this
._onTemplateApplied.fire()
}, n.prototype.restoreFactoryDefaults = function() {
this.properties().restoreFactoryDefaults(), this._onRestoringFactoryDefaults.fire(),
this.model().updateSource(this)
}, n.prototype.clearData = function() {
this._points = []
}, n.prototype.currentPointsetId = function() {
return "pointset_" + this._currentPointsetId
}, n.prototype.stop = function() {
this.clearServerPoints(), this.hasAlert.value() && TradingView.alertsDispatcher &&
TradingView.alertsDispatcher.deleteAlert(this._alertId)
}, n.prototype.isStarted = function() {
return null !== this._currentPointsetId
}, n.prototype.restart = function() {
this.isFixed() || (this._currentPointsetId = null, this.createServerPoints())
}, n.prototype.tryCreateServerPoints = function() {
this.isFixed() || null === this._currentPointsetId && this.createServerPoints()
}, n.prototype.normalizePoint = function(t) {
var e = this._model.timeScale().normalizeBarIndex(t.index);
return e.price = t.price, e
}, n.prototype.normalizePoints = function() {
var t, e;
for (this._timePoint = [], t = 0; t < this._points.length; t++) {
if (e = this._model.timeScale().normalizeBarIndex(this._points[t].index), !e
.time_t) {
this._timePoint = [];
break
}
e.price = this._points[t].price, this._timePoint.push(e)
}
}, n.prototype.denormalizeTimePoints = function() {
var t, e, i = [];
for (t = 0; t < this._timePoint.length; t++) {
if (void 0 === (e = this._model.timeScale().denormalizeTimePoint(this._timePoint[
t]))) {
i = [];
break
}
i.push({
index: e,
price: this._timePoint[t].price
})
}
i.length > 0 && (this._points = i)
}, n.prototype.restorePoints = function(t, e, i) {
this._timePoint = t, this._points = e, i || this.denormalizeTimePoints()
}, n.prototype.restoreExternalPoints = function(t) {
if (this.properties().interval.setValue(t.interval), this._timePoint = t.points, this
.denormalizeTimePoints(), !this.isActualSymbol()) return void this
.clearServerPoints();
this.createServerPoints()
}, n.prototype.restorePositionPercents = function(t) {
this._positionPercents = t
}, n.prototype.updateAllViewsAndRedraw = function() {
this.updateAllViews(), this._model.updateSource(this)
}, n.prototype.propertiesChanged = function() {
if (this.calcIsActualInterval(), this.updateAllViewsAndRedraw(), this.linkKey) {
var t = this.properties().state(this._syncStateExclusions);
delete t.interval, h.changeLineStyle({
linkKey: this.linkKey,
state: t,
model: this._model
})
}
}, n.prototype.points = function() {
var t, e, i = [];
for (t = 0; t < this._points.length; t++) e = this._points[t], i.push({
index: e.index,
price: e.price,
time: e.time
});
return this._lastPoint && i.push({
index: this._lastPoint.index,
price: this._lastPoint.price,
time: this._lastPoint.time
}), this._currentMovingPoint && this._startMovingPoint && this.correctPoints(i), i
}, n.prototype.axisPoints = function() {
return this.points()
}, n.prototype.fixedPoints = function() {
var t, e, i, o, n = [];
if (this._positionPercents && !this.priceScale().isEmpty())
for (t = 0; t < this._positionPercents.length; t++) e = this._positionPercents[t],
i = this._model.timeScale().width() * e.x, o = this.priceScale().height() * e.y,
n.push(new r(i, o));
else
for (t = 0; t < this._fixedPoints.length; t++) n.push(this._fixedPoints[t].clone());
return this._lastPoint && n.push(this._lastPoint.clone()), this._currentMovingPoint &&
this._startMovingPoint && this.correctFixedPoints(n), n
}, n.prototype._convertPriceFromPercentIfNeeded = function(t) {
var e, i = this.priceScale();
i.isPercent() && (e = this.ownerSource().firstValue(), t.price = i.priceRange()
.convertFromPercent(t.price, e))
}, n.prototype._convertPriceToPercentIfNeeded = function(t) {
var e, i = this.priceScale();
i.isPercent() && (e = this.ownerSource().firstValue(), t.price = i.priceRange()
.convertToPercent(t.price, e))
}, n.prototype._preparePoint = function(t, e) {
var i = t;
return e && e.shift && this.points().length >= 2 && this._properties.snapTo45Degrees &&
this._snapPoint45Degree(i, this.points()[this.points().length - 2]), this
._convertPriceFromPercentIfNeeded(i), i
}, n.prototype.addPoint = function(t, e, i) {
var o = this._preparePoint(t, e);
return this._addPointIntenal(o, e, i)
}, n.prototype._addPointIntenal = function(t, e, i) {
this._points.push(t);
var o = this._points.length === this.pointsCount();
return o ? (this._lastPoint = null, i || (this.normalizePoints(), this
.createServerPoints())) : this._lastPoint = t, this._pointAdded.fire(this
._points.length - 1), o
}, n.prototype.addFixedPoint = function(t) {
this._fixedPoints.push(t);
var e = this._fixedPoints.length === this.pointsCount();
return e && this.calcPositionPercents(), e
}, n.prototype.calcPositionPercents = function() {
var t, e, i, o;
if (!this.priceScale() || this.priceScale().isEmpty()) return [];
for (this._positionPercents = [], t = 0; t < this._fixedPoints.length; t++) e = this
._fixedPoints[0], i = e.x / this._model.timeScale().width(), o = e.y / this
.priceScale().height(), this._positionPercents.push({
x: i,
y: o
});
return this._positionPercents
}, n.prototype.calcMiddlePoint = function(t, e) {
return new r((t.x + e.x) / 2, (t.y + e.y) / 2)
}, n.prototype.restoreFixedPoints = function() {
this._fixedPoints = this.fixedPoints()
}, n.prototype.onData = function(t) {
var e, i, o, n, r, s;
if (t.params.customId === this.currentPointsetId() && 0 !== t.params.plots.length) {
for (e = 0; e < t.params.plots.length; e++) i = t.params.plots[e], o = this
._timePoint[i.index], n = i.value[0], r = new Date(1e3 * i.value[1]), s = {
index: n,
time: r,
price: o.price
}, this._points.length <= i.index ? (this._points.push(s), this._pointAdded
.fire(this._points.length - 1)) : (this._points[i.index] = s, this
._pointChanged.fire(i.index));
this.checkAlert && this.checkAlert(), this.updateAllViewsAndRedraw()
}
}, n.prototype.correctPricesToPercents = function() {
var t, e, i = this.priceScale(),
o = this.ownerSource().firstValue();
for (t = 0; t < this._points.length; t++) e = this._points[t], e.price = i.priceRange()
.convertFromPercent(e.price, o), this._pointChanged.fire(t)
}, n.prototype.startChanging = function(t, e) {
t < this.m_priceAxisViews.length && this.m_priceAxisViews[t].setActive(!0), t < this
.m_timeAxisViews.length && this.m_timeAxisViews[t].setActive(!0), this._properties
.lastUpdateTime.setValue((new Date).valueOf())
}, n.prototype.setPoint = function(t, e, i) {
if (i && i.shift && this._properties.snapTo45Degrees) {
var o = 0 === t ? 1 : t - 1;
this._snapPoint45Degree(e, this.points()[o])
}
this._convertPriceFromPercentIfNeeded(e), this._points[t] = e, this._pointChanged.fire(
t), this.normalizePoints()
}, n.prototype.startMoving = function(t) {
this.isFixed() && this.restoreFixedPoints(), this._convertPriceFromPercentIfNeeded(t),
this._startMovingPoint = t, this._properties.lastUpdateTime.setValue((new Date)
.valueOf())
}, n.prototype.move = function(t) {
this._convertPriceFromPercentIfNeeded(t), this._currentMovingPoint = t, this
.updateAllViews()
}, n.prototype.correctPoints = function(t) {
var e, i, o = this._currentMovingPoint.index - this._startMovingPoint.index,
n = this._currentMovingPoint.price - this._startMovingPoint.price;
if (0 === o && 0 === n) return !1;
for (e = 0; e < t.length; e++) i = t[e], i.index += o, i.price += n, t[e] = i;
return !0
}, n.prototype.correctFixedPoints = function(t) {
var e, i = this._currentMovingPoint.subtract(this._startMovingPoint);
for (e = 0; e < t.length; e++) t[e] = t[e].add(i)
}, n.prototype.endMoving = function(t) {
var e, i, o;
if (this._properties.interval.setValue(this._model.mainSeries().interval()), e = !1,
i = !1, this._currentMovingPoint && this._startMovingPoint) {
if (e = this._currentMovingPoint.index !== this._startMovingPoint.index, i = this
._currentMovingPoint.price !== this._startMovingPoint.price, this.isFixed())
this.correctFixedPoints(this._fixedPoints);
else if (this.correctPoints(this._points))
for (o = 0; o < this._points.length; o++) this._pointChanged.fire(o);
this._startMovingPoint = null, this._currentMovingPoint = null
}
if (this.isFixed()) return this.calcPositionPercents(), void this.updateAllViews();
this.normalizePoints(), this.updateAllViews(), e && !t && this.createServerPoints(), (
i || e) && this.synchronizeAlert(!this._alertUndoMode)
}, n.prototype.endChanging = function(t, e) {
var i;
for (this._properties.interval.setValue(this._model.mainSeries().interval()), e || (this
.normalizePoints(), this.createServerPoints()), i = 0; i < this.m_priceAxisViews
.length; i++) this.m_priceAxisViews[i].setActive(!1);
for (i = 0; i < this.m_timeAxisViews.length; i++) this.m_timeAxisViews[i].setActive(!1);
this.synchronizeAlert(!t)
}, n.prototype.paneViews = function(t) {
var e, i;
if (this.isSourceHidden()) return null;
for (e = [],
i = this._paneViews.length - 1; i >= 0; --i) e.push(this._paneViews[i]);
return e
}, n.prototype._setPaneViews = function(t) {
this._paneViews = t, this._model.invalidate(new _(_.LIGHT_UPDATE))
}, n.prototype.dataWindowView = function() {
return null
}, n.prototype.statusView = function() {
return null
}, n.prototype.isSourceHidden = function() {
return !this._properties.visible.value() || h.hideAllDrawings().value() && this
.canBeHidden() || !this._isActualInterval || !this._isActualSymbol
}, n.prototype.priceAxisViews = function(t, e) {
var i, o, n;
return this.isSourceHidden() ? null : -1 !== t.dataSources().indexOf(this) && e === this
.priceScale() ? this._model.lineBeingEdited() === this ? (i = this._model
.linePointBeingEdited(), i < this.m_priceAxisViews.length ? (o = this
.m_priceAxisViews.slice(), n = o[i], o.splice(i, 1), o.push(n), o) : this
.m_priceAxisViews) : this.m_priceAxisViews : null
}, n.prototype.timeAxisViews = function() {
var t, e, i;
return this.isSourceHidden() ? null : this._model.lineBeingEdited() === this ? (t = this
._model.linePointBeingEdited(), t < this.m_timeAxisViews.length ? (e = this
.m_timeAxisViews.slice(), i = e[t], e.splice(t, 1), e.push(i), e) : this
.m_timeAxisViews) : this.m_timeAxisViews
}, n.prototype.updateAllViews = function() {
var t, e, i;
if (!this._isActualSymbol) return null;
if (!this._properties.visible.value()) return null;
if (null !== (t = this.paneViews()))
for (e = t, i = 0; i < e.length; i++) e[i].update();
for (e = this.m_priceAxisViews, i = 0; i < e.length; i++) e[i].update();
for (e = this.m_timeAxisViews, i = 0; i < e.length; i++) e[i].update()
}, n.prototype.setLastPoint = function(t, e) {
this._lastPoint = this._preparePoint(t, e), this.updateAllViews()
}, n.prototype.setLastFixedPoint = function(t) {
this._lastFixedPoint = t, this.updateAllViews()
}, n.prototype.title = function() {
return "Line Tool"
}, n._pointSetId = 1, n.prototype.start = function() {
this.createServerPoints()
}, n.prototype.createServerPoints = function() {
var t, e, i, o, r, s;
if (!this._recursiveGuard && this._isActualSymbol && this._model.chartApi()
.connected() && (this.clearServerPoints(), !this._model.timeScale().isEmpty() && (
0 ===
this._timePoint.length && this.normalizePoints(), 0 !== this._timePoint
.length))) {
for (this._currentPointsetId = ++n._pointSetId, t = this._model.mainSeries()
.symbolId(), e = this.properties().interval.value(), i = [], o = 0; o < this
._timePoint.length; o++) r = this._timePoint[o], i.push([r.time_t, r.offset]);
s = this, this._model.chartApi().createPointset(this.currentPointsetId(),
"turnaround", t, e, i,
function(t) {
s.onData(t)
})
}
}, n.prototype.clearServerPoints = function() {
null !== this._currentPointsetId && (this._model.chartApi().removePointset(this
.currentPointsetId()), this._currentPointsetId = null)
}, n.prototype.isBeingEdited = function() {
return this === this._model.lineBeingEdited() || this === this._model.sourceBeingMoved
}, n.prototype.isFixed = function() {
return this.properties().locked && this.properties().locked.value()
}, n.prototype.isLocked = n.prototype.isFrozen = function() {
return this.properties().frozen && this.properties().frozen.value()
}, n.prototype._tooltipFieldsHash = {},
n.prototype._tooltipFieldsOrder = ["time", "price", "index", "time0", "price0", "time1",
"price1", "time2", "price2", "time3", "price3", "time4", "price4", "distance", "term",
"pointsPerBar"
], n.prototype._tooltipFieldsOrdered = null, n.prototype._formatTooltip = function() {
return null === this._tooltipFieldsOrdered && (this._tooltipFieldsOrdered = new p(this
._tooltipFieldsHash, p.byOrder(this._tooltipFieldsOrder))), this
._tooltipFieldsOrdered.array.filter(function(t) {
return null !== t.value && "" !== t.value
}).map(function(t) {
return "<span>" + t.title + ":</span> " + t.value
}).join("<br />")
}, n.prototype.pointToScreenPoint = function(t) {
var e, i, o, n, s, a, l = this._model.timeScale(),
c = this.priceScale();
if (!c || c.isEmpty() || l.isEmpty()) return [new r(0, 0), new r(0, 0)];
if (e = null, c.isPercent()) {
if (!this.ownerSource()) return;
if (null === (e = this.ownerSource().firstValue()) || !isFinite(e)) return
}
return i = l.indexToCoordinate(t.index, !0), o = t.price, c.isPercent() && (o = c
.priceRange().convertToPercent(o, e)), n = c.priceToCoordinate(o, !0), s =
new r(i, n), i = l.indexToCoordinate(t.index, !1), n = c.priceToCoordinate(o, !1),
a = new r(i, n), [s, a]
}, n.prototype.screenPointToPoint = function(t) {
var e = this._model.timeScale(),
i = this.priceScale(),
o = e.coordinateToIndex(t.x),
n = i.coordinateToPrice(t.y),
r = null;
if (i.isPercent()) {
if (!this.ownerSource()) return;
if (null === (r = this.ownerSource().firstValue()) || !isFinite(r)) return
}
return i.isPercent() && (n = i.priceRange().convertFromPercent(n, r)), {
price: n,
index: o
}
}, n.prototype.tags = function() {
return [this._constructor]
}, n.prototype._snapPoint45Degree = function(t, e, i) {
var o, n, r, s, a, l, c, h, u, d, p, _, f = this._model.timeScale(),
m = f.indexToCoordinate(e.index),
g = f.indexToCoordinate(t.index) - m,
v = this.m_priceScale,
y = e.price,
b = t.price,
S = this.ownerSource().firstValue();
v.isPercent() && (y = v.priceRange().convertToPercent(y, S)), o = v.priceToCoordinate(
y), n = v.priceToCoordinate(b) - o, r = Math.round(Math.atan2(g, n) / Math.PI *
4),
2 === Math.abs(r) ? i || (t.price = y) : 0 === Math.abs(r) || 4 === Math.abs(r) ?
i || (t.index = e.index) : 0 === Math.abs(r) || 4 === Math.abs(r) ? i || (t.index =
e.index) : (s = Math.sqrt(g * g + n * n), a = g < 0 ? -1 : 1, l = n < 0 ? -1 :
1, c = Math.max(Math.abs(n), Math.abs(g)), h = c * Math.sqrt(2), u = h / s, c /=
u, d = Math.round(f.coordinateToIndex(m + c * a)), p = Math.abs(f
.indexToCoordinate(d) - m), _ = v.coordinateToPrice(o + p * l), t.index = d,
t.price = _)
}, n.prototype.createPriceAxisView = function(t) {
return new s(this, {
pointIndex: t
})
}, n.prototype.version = 1, n.isLineTool = function(t) {
var e = TradingView[t];
return !!e && TradingView.isInherited(e, n)
}, n.prototype.alertId = function() {
return this._alertId
}, n.prototype.setAlert = function(t, e) {}, n.prototype.flushAlert = function() {
delete this._alertId, delete this._alert, this.hasAlert.setValue(!1), window.saver &&
window.saver.saveChartSilently(null, !1)
}, n.prototype._processAlertHanders = function(t) {
var e, i, o, n = this;
("unsubscribe" !== (t = "subscribe" === t ? "subscribe" : "unsubscribe") || n
._alertCallbacks) && (i = "subscribe" === t ? "on" : "off", e = n.properties(), o =
n._alertCallbacks || {
flush: n.flushAlert.bind(n),
hovered: function(t, e) {
e ? n._model.setHoveredSource(n) : n._model.hoveredSource() === n && n
._model.setHoveredSource(null)
},
selected: function(t, e) {
e && n._model.setSelectedSource(n)
},
synchronizeSilently: function(t) {
n.synchronizeAlert(!1)
}
}, n._alertCallbacks || (n._alertCallbacks = o), n.getAlert().done(function(r) {
r && (r[i]("destroy", o.flush), r[i]("change:hovered", o.hovered), r[i](
"change:selected", o.selected), e.extendLeft && e.extendLeft[t](
n, o.synchronizeSilently), e.extendRight && e.extendRight[t](n,
o.synchronizeSilently))
}))
}, n.prototype.editAlert = function() {}, n.prototype.getAlert = function(t) {
var e, i = this;
return t = t || {}, e = $.Deferred(), TradingView.alertsDispatcher ? TradingView
.alertsDispatcher.requestAlert(i._alertId, {
success: e.resolve.bind(e),
error: e.reject.bind(e),
fromCache: t.fromCache
}) : f.logError("[Alerts] Can't get alert without alerts dispatcher"), e.promise()
}, n.prototype.synchronizeAlert = function(t) {
var e = this;
e.hasAlert.value() && setTimeout(function() {
function i() {
e._alertUndoMode = !0, s.undoToCheckpoint(e._undoCheckpointAlert),
setTimeout(function() {
e._alertUndoMode = !1, e.localAndServerAlersMismatch = !1
}, 0)
}
function o(t) {
var i = t.get("description") !== t.defaultDescription(),
o = t.get("extra"),
n = o.alertSeries(),
r = e._model.mainSeries().stateForAlert();
"MainSeries" === n.type && r.actualSymbol === n.actualSymbol && (o
.mainSeries(r), o.alertSeries(r)), t.set("resolution", e
.stateForAlert().interval), o.drawing(e), i || t
.setDefaultDescription(), e.localAndServerAlersMismatch = !0
}
function n(t) {
TradingView.alertsDispatcher.restartAlert(t, {
success: function() {
e.localAndServerAlersMismatch = !1
},
error: i,
complete: function() {
delete e._undoCheckpointAlert
}
})
}
var r, s = e._getUndoHistory();
e._undoCheckpointAlert || e._alertUndoMode || (r = s.undoStack().pop(), e
._undoCheckpointAlert = s.createUndoCheckpoint(), r && s.undoStack()
.push(r)), e.getAlert().done(function(e) {
o(e), t && n(e)
}).fail(i)
}, 0)
}, n.prototype._getUndoHistory = function() {
return this._model._undoModel.undoHistory
}, n.prototype.stateForAlert = function() {
var t, e;
if (this.canHasAlert()) return t = this.state(), t.id = this.idForAlert(), t.uniqueId =
this.idForAlert(), t.title = this.title(), t.interval = this._model.mainSeries()
.interval(), e = this._getAlertPlots(), e && (t.plots = e), t
}, n.prototype._getAlertPlots = function() {
return null
}, n.prototype._linePointsToAlertPlot = function(t, e, i, o) {
if (2 !== t.length) return f.logError("[Drawing Alert] Wrong points"), null;
var n = this._model.timeScale();
return !n || n.isEmpty() ? null : {
type: "LinePlot",
title: e || this.title(),
timestamp: n.indexToTimePoint(0),
offset1: t[0].index,
offset2: t[1].index,
price1: t[0].price,
price2: t[1].price,
extendBackward: i || !1,
extendForward: o || !1
}
}, n.prototype.getAlertIsActive = function(t) {
this.getAlert({
fromCache: !0
}).done(function(e) {
t(!!e && e.get("active"))
}).fail(function() {
t(!1)
})
}, n.prototype.geometry = function() {
var t = this,
e = function(e) {
var i = e.x / t._model.timeScale().width(),
o = e.y / t.priceScale().height();
return new r(i, o)
};
return this.points().map(function(i) {
var o = t.pointToScreenPoint(i)[0];
return e(o)
})
}, n.prototype.onlyYMoving = function() {
return !1
}, n.prototype.model = function() {
return this._model
}, n.prototype.isForcedDrawPriceAxisLabel = function() {
return this.customization.forcePriceAxisLabel
},
n.prototype.getInputsPropertyPage = function() {
return g.LineToolInputsPropertyPage
}, n.prototype.getVisibilitiesPropertyPage = function() {
return g.LineToolVisibilitiesPropertyPage
}, n.prototype.getSourceIcon = function() {
var t = v[this.getType()];
return void 0 === t ? null : {
type: "svg",
svgCode: t.icon
}
}, n.prototype.destroy = function() {
this.stop()
}, e.LineToolPriceAxisView = s, e.LineDataSource = n
}).call(e, i(25))
}, , function(t, e, i) {
"use strict";
var o, n, r = i(7).getLogger("Chart.DataSourcePropertyPages");
e.propertyPages = {}, o = e.propertyPages, n = null, e.loadPropertyPages = function() {
return null !== n ? n : (r.logNormal("Start loading property pages"), n = new Promise(function(
t) {
i.e(3).then(function(e) {
o.ChartStylesPropertyPage = i(1083), o
.LineToolABCDPatternStylesPropertyPage = i(1084), o
.LineToolArcStylesPropertyPage = i(1085), o
.LineToolArrowMarkStylesPropertyPage = i(1086), o
.LineToolBalloonStylesPropertyPage = i(1087), o
.LineToolBarsPatternStylesPropertyPage = i(1088)
.LineToolBarsPatternStylesPropertyPage, o
.LineToolBezierStylesPropertyPage = i(1089), o
.LineToolBrushStylesPropertyPage = i(1090), o
.LineToolCalloutStylesPropertyPage = i(1091), o
.LineToolCircleLinesStylesPropertyPage = i(1092), o
.LineToolDateAndPriceRangeStylesPropertyPage = i(1093), o
.LineToolDateRangeStylesPropertyPage = i(1094), o
.LineToolDisjointAngleStylesPropertyPage = i(1095), o
.LineToolElliottStylesPropertyPage = i(1096), o
.LineToolEllipseStylesPropertyPage = i(1097), o
.LineToolFibChannelStylesPropertyPage = i(1098), o
.LineToolFibCirclesStylesPropertyPage = i(1099), o
.LineToolFibRetracementStylesPropertyPage = i(1078), o
.LineToolFibSpeedResistanceArcsStylesPropertyPage = i(1100), o
.LineToolFibSpeedResistanceFanStylesPropertyPage = i(1101), o
.LineToolFibSpiralStylesPropertyPage = i(1102), o
.LineToolFibTimeZoneStylesPropertyPage = i(1103), o
.LineToolFibWedgeStylesPropertyPage = i(1104), o
.LineToolFlatBottomStylesPropertyPage = i(1105), o
.LineToolGannComplexStylesPropertyPage = i(1106)
.LineToolGannComplexStylesPropertyPage, o
.LineToolGannFixedStylesPropertyPage = i(1107)
.LineToolGannFixedStylesPropertyPage, o
.LineToolGannFanStylesPropertyPage = i(1108), o
.LineToolGannSquareStylesPropertyPage = i(1109), o
.LineToolGhostFeedInputsPropertyPage = i(400)
.LineToolGhostFeedInputsPropertyPage, o
.LineToolGhostFeedStylesPropertyPage = i(400)
.LineToolGhostFeedStylesPropertyPage, o
.LineToolHorzLineInputsPropertyPage = i(401)
.LineToolHorzLineInputsPropertyPage, o
.LineToolHorzLineStylesPropertyPage = i(401)
.LineToolHorzLineStylesPropertyPage, o
.LineToolIconStylesPropertyPage = i(1110), o
.LineToolInputsPropertyPage = i(1076), o
.LineToolLineTool5PointsPatternStylesPropertyPage = i(1111), o
.LineToolNotePropertyPage = i(1112), o
.LineToolParallelChannelStylesPropertyPage = i(1113), o
.LineToolPitchfanStylesPropertyPage = i(1114), o
.LineToolPitchforkStylesPropertyPage = i(1115), o
.LineToolPolylineStylesPropertyPage = i(1116), o
.LineToolPredictionStylesPropertyPage = i(1117), o
.LineToolPriceLabelStylesPropertyPage = i(1118), o
.LineToolProjectionStylesPropertyPage = i(1119), o
.LineToolRectangleStylesPropertyPage = i(1120), o
.LineToolRiskRewardInputsPropertyPage = i(402)
.LineToolRiskRewardInputsPropertyPage,
o.LineToolRiskRewardStylesPropertyPage = i(402)
.LineToolRiskRewardStylesPropertyPage, o
.LineToolTextStylesPropertyPage = i(1121), o
.LineToolTimeCyclesPropertyPage = i(1122), o
.LineToolTrendAngleInputsPropertyPage = i(403)
.LineToolTrendAngleInputsPropertyPage, o
.LineToolTrendAngleStylesPropertyPage = i(403)
.LineToolTrendAngleStylesPropertyPage, o
.LineToolTrendBasedFibExtensionStylesPropertyPage = i(1123), o
.LineToolTrendBasedFibTimeStylesPropertyPage = i(1124), o
.LineToolTrendLineStylesPropertyPage = i(1125), o
.LineToolTrianglePatternStylesPropertyPage = i(1126), o
.LineToolTriangleStylesPropertyPage = i(1127), o
.LineToolVertLineInputsPropertyPage = i(404)
.LineToolVertLineInputsPropertyPage, o
.LineToolVertLineStylesPropertyPage = i(404)
.LineToolVertLineStylesPropertyPage, o
.LineToolVisibilitiesPropertyPage = i(1128), o
.StudyCompareInputsPropertyPage = i(1129), o
.StudyDisplayPropertyPage = i(378).StudyDisplayPropertyPage, o
.StudyInputsPropertyPage = i(246).StudyInputsPropertyPage, o
.StudyLineDataSourcePropertyPage = i(1130), o
.StudyOverlayStylesPropertyPage = i(1131), o
.StudyPivotPointsStandardStylesPropertyPage = i(1132), o
.StudyStrategyPropertyPage = i(1133), o
.StudyStylesPropertyPage = i(378).StudyStylesPropertyPage, o
.VolumePropertyPage = i(1134), r.logNormal(
"Property pages loaded"), t()
}.bind(null, i)).catch(i.oe)
}))
}
}, , function(t, e, i) {
var o = i(569),
n = {},
r = {},
s = {},
a = {
init: function() {
var t, e, i, l;
Object.keys(o).forEach(function(i) {
t = o[i], e = t.subsets, Array.isArray(e) ? e.forEach(function(t) {
n[t] = 1
}) : e && Object.keys(e).forEach(function(t) {
n[t] = 1
}), n[i] = 1
}), i = Object.keys(n), i.forEach(function(t) {
i.forEach(function(i) {
if (void 0 !== (l = o[i])) {
if (!(e = l.subsets)) return;
r.hasOwnProperty(t) || (r[t] = []), Array.isArray(e) && ~e
.indexOf(t) ? r[t].push(i) : t in e && r[t].push(i)
}
})
}), "undefined" != typeof __initialDisabledFeaturesets &&
__initialDisabledFeaturesets && __initialDisabledFeaturesets.forEach(function(t) {
a.disable(t)
}), "undefined" != typeof __initialEnabledFeaturesets &&
__initialEnabledFeaturesets && __initialEnabledFeaturesets.forEach(function(t) {
a.enable(t)
}), "undefined" != typeof window && (window.Featuresets = a), this.meta = {
_uniqueSetsNames: n,
_setsReverseDependencies: r,
_setsStates: s
}
},
enabled: function(t) {
var e = function(t) {
var i, o, n = r.hasOwnProperty(t) ? r[t] : [];
if (!1 === s[t]) return !1;
for (i = s[t], o = 0; o < n.length; ++o) i |= e(n[o]);
return i
};
return !!e(t)
},
enable: function(t) {
s[t] = !0
},
disable: function(t) {
s[t] = !1
},
setEnabled: function(t, e) {
s[t] = !!e
},
_uniqueSets: function() {
return Object.keys(n)
}
};
a.init(), t.exports = a
}, function(t, e, i) {
"use strict";
function o(t, e, i) {
this._defaultName = t;
var n;
i ? n = e : (n = TradingView.clone(defaults(t)), e && TradingView.merge(n, e)), r.call(this, n),
this._defaultName = t, this.listeners().subscribe(this, o.prototype.onPropertyChanged), this
._exclusions = []
}
function n(t) {
o._saveDefaults = t
}
var r = i(25);
inherit(o, r), o._saveDefaults = !1, o.prototype.addExclusion = function(t) {
this._exclusions.push(t)
}, o.prototype.restoreFactoryDefaults = function() {
var t, e = {};
this._defaultName.startsWith("study_") && (e = TradingView.clone(TradingView.factoryDefaults(
"study"))),
this._defaultName.startsWith("linetool") && (e = TradingView.clone(TradingView
.factoryDefaults("linetoolvisibilities"))), t = TradingView.clone(TradingView
.factoryDefaults(this._defaultName)), this._defaultName.startsWith("study_") && t
.inputs && delete t.inputs.symbol, "linetoolicon" === this._defaultName && (t.icon =
defaults(this._defaultName).icon), ~["linetooltext", "linetooltextabsolute",
"linetoolnote", "linetoolnoteabsolute", "linetoolcallout", "linetoolballoon",
"linetoolarrowmark", "linetoolarrowmarkleft", "linetoolarrowmarkup",
"linetoolarrowmarkright", "linetoolarrowmarkdown", "linetoolhorzline", "linetoolhorzray"
].indexOf(this._defaultName) && delete t.text, this._exclusions.forEach(function(e) {
delete t[e]
}), TradingView.merge(e, t), this.merge(e), this._defaultName.startsWith("study_") ||
TradingView.saveDefaults(this._defaultName, this.state(this._exclusions)), this.listeners()
.fire(this)
}, o.prototype.cleanupFactoryDefaults = function() {
var t = {};
TradingView.saveDefaults(this._defaultName, t), this.listeners().fire(this)
}, o.prototype.onPropertyChanged = function() {
o._saveDefaults && !this._defaultName.startsWith("study_") && this.saveDefaults()
}, o.prototype.saveDefaults = function() {
TradingView.saveDefaults(this._defaultName, this.state(this._exclusions))
}, o.prototype.restoreDefaults = function() {
var t = TradingView.clone(defaults(this._defaultName));
this.merge(t), this.listeners().fire(this)
}, o.prototype.clone = function(t) {
return new o(this._defaultName, this.state(), t && t.replaceByState)
}, e.DefaultProperty = o, e.saveDefaultProperties = n
}, function(t, e, i) {
"use strict";
(function(t) {
function i() {
return x
}
function o() {
return P
}
function n(t) {
t = Math.max(f.ERROR, Math.min(f.DEBUG, t)), x = t, u()
}
function r(t, e) {
var i, o = 0,
n = 0;
for (i = t.length - 1; i >= 1 && (o += 8 * (1 + encodeURIComponent(t[i]).length), !(i - 1 >
0 && (n = 8 * (1 + encodeURIComponent(t[i - 1]).length), o + n > e))); i--);
return t.slice(i)
}
function s(t, e, i, o, n) {
var r = {
id: m,
message: e,
subSystemId: o,
timestamp: +t
};
m += 1, i.unshift(r), void 0 !== n && i.length > n && (i.length = n)
}
function a(t) {
var e, i = b.reduce(function(t, e) {
return t.concat(e)
}, []);
return i.sort(function(t, e) {
return t.id - e.id
}), "number" == typeof t && (i = i.slice(-t)), e = i.map(function(t) {
return new Date(t.timestamp).toISOString() + ":" + t.subSystemId + ":" + t
.message.replace(/"/g, "'")
}), r(e, g)
}
function l(t, e, i, n) {
var r, a;
if ((e !== w || n.id !== T) && (r = new Date, t <= f.NORMAL && s(r, e, i, n.id, n.maxCount),
t <= x && (!n.highRate || o()) && (!S || n.id.match(S)))) {
switch (a = r.toISOString() + ":" + n.id + ":" + e, t) {
case f.DEBUG:
console.debug(a);
break;
case f.INFO:
case f.NORMAL:
n.color ? console.log("%c" + a, "color: " + n.color) : console.log(a);
break;
case f.WARNING:
console.warn(a);
break;
case f.ERROR:
console.error(a)
}
w = e, T = n.id, C && clearTimeout(C), C = setTimeout(function() {
w = null, T = null, C = NaN
}, 1e3)
}
}
function c(t, e) {
function i(t) {
return function(e) {
return l(t, e, o, n)
}
}
var o, n;
return void 0 === e && (e = {}), o = [], b.push(o), n = Object.assign(e, {
id: t
}), {
logDebug: i(f.DEBUG),
logError: i(f.ERROR),
logInfo: i(f.INFO),
logNormal: i(f.NORMAL),
logWarn: i(f.WARNING)
}
}
function h() {
P = !!p && "true" === localStorage.getItem(y);
var t = parseInt(p ? localStorage.getItem(v) || "" : "");
Number.isNaN(t) && (t = f.WARNING), n(t), L.logNormal("Init with settings - level: " + x +
", high-rate: " + P)
}
function u() {
try {
p && (localStorage.setItem(y, P + ""), localStorage.setItem(v, x + ""))
} catch (t) {
L.logWarn("Cannot save logger state (level: " + x + ", high-rate: " + P +
") to localStorage: " + t.message)
}
}
var d, p, _, f, m, g, v, y, b, S, w, T, C, x, P, L;
Object.defineProperty(e, "__esModule", {
value: !0
}), d = "undefined" != typeof window ? window : t, p = !1;
try {
localStorage.getItem(""), p = !0
} catch (t) {}
_ = "undefined" != typeof TradingView ? TradingView : {},
function(t) {
t[t.ERROR = 1] = "ERROR", t[t.WARNING = 2] = "WARNING", t[t.INFO = 3] = "INFO", t[t
.NORMAL = 4] = "NORMAL", t[t.DEBUG = 5] = "DEBUG"
}(f = e.LOGLEVEL || (e.LOGLEVEL = {})), m = 0, g = 75497472, v = "tv.logger.loglevel", y =
"tv.logger.logHighRate", b = [], S = null, w = null, T = null, C = NaN, x = f.WARNING, P = !
1, e.getLogLevel = i, e.isHighRateEnabled = o, e.setLogLevel = n, e.getLogHistory = a, e
.getLogger = c, L = c("logger"), e.loggingOn = d.lon = _.loggingOn = function(t, e) {
n(f.DEBUG), L.logNormal("Debug logging enabled"), P = !!t, S = e || null, u()
}, e.loggingNormal = _.loggingNormal = function() {
n(f.NORMAL), L.logNormal("Logging set to normal level")
}, e.loggingOff = d.loff = function() {
n(f.INFO), L.logInfo("Debug logging disabled")
}, h()
}).call(e, i(78))
}, function(t, e, i) {
"use strict";
function o(t, e) {
return new h(t, e)
}
function n(t, e) {
return t.x === e.x && t.y === e.y
}
function r(t, e, i) {
if (0 === t && 0 === e) throw Error("A and B can not be both equal to zero.");
return {
A: t,
B: e,
C: i
}
}
function s(t, e) {
var i, o, s;
if (n(t, e)) throw Error("Points should be distinct");
return i = t.y - e.y, o = e.x - t.x, s = t.x * e.y - e.x * t.y, r(i, o, s)
}
function a(t, e) {
if (n(t, e)) throw Error("Points of a segment should be distinct");
return [t, e]
}
function l(t, e) {
return {
edge: t,
isPositive: e
}
}
function c(t, e) {
return l(t, t.A * e.x + t.B * e.y + t.C > 0)
}
Object.defineProperty(e, "__esModule", {
value: !0
});
var h = function() {
function t(t, e) {
this.x = t, this.y = e
}
return t.prototype.add = function(e) {
return new t(this.x + e.x, this.y + e.y)
}, t.prototype.addScaled = function(e, i) {
return new t(this.x + i * e.x, this.y + i * e.y)
}, t.prototype.subtract = function(e) {
return new t(this.x - e.x, this.y - e.y)
}, t.prototype.dotProduct = function(t) {
return this.x * t.x + this.y * t.y
}, t.prototype.length = function() {
return Math.sqrt(this.x * this.x + this.y * this.y)
}, t.prototype.scaled = function(e) {
return new t(this.x * e, this.y * e)
}, t.prototype.normalized = function() {
return this.scaled(1 / this.length())
}, t.prototype.transposed = function() {
return new t(-this.y, this.x)
}, t.prototype.clone = function() {
return new t(this.x, this.y)
}, t
}();
e.Point = h, e.point = o, e.equalPoints = n, e.line = r, e.lineThroughPoints = s, e.lineSegment = a, e
.halfplane = l, e.halfplaneThroughPoint = c
}, function(t, e, i) {
"use strict";
function o(t, e) {
if (!t) throw Error("Assertion failed" + (e ? ": " + e : ""))
}
function n(t) {
if (void 0 === t) throw Error("Value is undefined");
return t
}
function r(t) {
if (null === t) throw Error("Value is null");
return t
}
function s(t) {
return r(n(t))
}
Object.defineProperty(e, "__esModule", {
value: !0
}), e.assert = o, e.ensureDefined = n, e.ensureNotNull = r, e.ensure = s
}, function(t, e, i) {
"use strict";
(function(t) {
function e() {
this._listeners = []
}
i(7).getLogger("Common.Delegate");
e.prototype.subscribe = function(t, e, i) {
var o = {
object: t,
member: e,
singleshot: !!i
};
this._listeners.push(o)
}, e.prototype.unsubscribe = function(t, e) {
var i, o;
for (i = 0; i < this._listeners.length; ++i)
if (o = this._listeners[i], o.object === t && o.member.prototype === e.prototype) {
this._listeners.splice(i, 1);
break
}
}, e.prototype.unsubscribeAll = function(t) {
var e, i;
for (e = this._listeners.length - 1; e >= 0; --e) i = this._listeners[e], i.object ===
t && this._listeners.splice(e, 1)
}, e.prototype.destroy = function() {
delete this._listeners
}, e.prototype.fire = function() {
var t, e, i = this._listeners.slice();
for (t = 0; t < i.length; ++t) e = i[t], e.member.apply(e.object || null, arguments);
for (t = this._listeners.length - 1; t >= 0; t--) this._listeners[t].singleshot && this
._listeners.splice(t, 1)
}, "undefined" != typeof window && (window.Delegate = e), void 0 !== t && t && t.exports &&
(t.exports = e)
}).call(e, i(42)(t))
}, function(t, e, i) {
"use strict";
var o = function() {
function t(t, e, i) {
this._result = t, this._data = e, this._eraseMarker = i
}
return t.prototype.result = function() {
return this._result
}, t.prototype.data = function() {
return this._data
}, t.prototype.eraseMarker = function() {
return this._eraseMarker
}, t.MOVEPOINT_BACKGROUND = 1, t.REGULAR = 2, t.MOVEPOINT = 3, t.CHANGEPOINT = 4, t.CUSTOM =
5, t.CUSTOM_MOVE = 6, t
}();
t.exports = o
}, function(t, e, i) {
"use strict";
function o(t) {
return t ? (window._tv_languages || {})[t] || null : null
}
function n() {
document.body && document.body.dispatchEvent(new a.CustomEvent("tradingview-i18next-initialized"))
}
var r, s, a, l, c, h, u, d;
i(571), r = i(293), s = i(285), a = i(572), l = {
translate: r.translationFunction
}, window.__tradingviewI18nextInited || (c = window.language || null, h = o(c), c && h || (console
.error("No translation data"), c = "en", h = o("en")), c && h ? (u = {
interpolation: {
prefix: "__",
suffix: "__"
},
keySeparator: ":::",
lng: c,
nsSeparator: ":::",
resources: (d = {}, d[c] = {
translation: h
}, d)
}, s.init(u, n), l.translate = s.t.bind(s), r.addTranslationFunctionToWindow(l.translate), r
.addTranslationFunctionToJQuery(l.translate)) : n(), window.__tradingviewI18nextInited = !0), t
.exports = l
}, , , function(t, e, i) {
(function(t) {
function e(t) {
return "number" == typeof t && isFinite(t)
}
function i(t) {
return "string" == typeof t ? JSON.parse(t) : t
}
function o(t) {
return null !== t && void 0 !== t && t.constructor === Function
}
function n(t) {
return h(t) && t.then
}
function r(t, e) {
t.prototype = Object.create(e.prototype, {
constructor: {
value: t,
enumerable: !1,
writable: !0,
configurable: !0
}
}), t.prototype.superclass = e
}
function s(t, e) {
for (var i in t.prototype) "function" == typeof t.prototype[i] && t.prototype
.hasOwnProperty(i) && (t.prototype[i] = function() {
throw Error(e + "::" + i +
" is an interface member declaration and must be overloaded in order to be called"
)
})
}
function a(t, e, i, o) {
for (var n in i.prototype)
if ("function" == typeof i.prototype[n] && !t.prototype[n]) throw Error(
"Interface implementation assertion failed: " + e + " does not implement " +
o + "::" + n + " function")
}
var l, c = Array.isArray || function(t) {
return "[object Array]" === Object.prototype.toString.call(t)
},
h = function(t) {
return "object" == typeof t && null !== t
},
u = function(t) {
return h(t) && -1 !== ("" + t.constructor).indexOf("function Object")
};
"undefined" != typeof window ? (l = window.TradingView = window.TradingView || {}, window
.isNumber = e, window.isFunction = o, window.inherit = r, window.isArray = c) : l = this
.TradingView = this.TradingView || {}, l.isNaN = function(t) {
return !(t <= 0 || t > 0)
}, l.isAbsent = function(t) {
return null === t || void 0 === t
}, l.isExistent = function(t) {
return null !== t && void 0 !== t
}, Number.isNaN = Number.isNaN || function(t) {
return t != t
}, l.isSameType = function(t, e) {
return Number.isNaN(t) || Number.isNaN(e) ? Number.isNaN(t) === Number.isNaN(e) : {}
.toString.call(t) === {}.toString.call(e)
}, l.isInteger = function(t) {
return "number" == typeof t && t % 1 == 0
}, l.parseBool = function(t) {
return !0 === t || "true" === t
}, l.isBoolean = function(t) {
return !0 === t || !1 === t
}, l.isString = function(t) {
return null !== t && void 0 !== t && t.constructor === String
}, l.isInherited = function(t, e) {
return t === e || !(!t || !t.prototype) && (void 0 !== t.prototype.superclass &&
null !== t.prototype.superclass && (t.prototype.superclass === e || l
.isInherited(t.prototype.superclass, e)))
}, l.TypeValidator = function(t) {
this.m_type = t
}, l.TypeValidator.prototype.check = function(t) {
return t.constructor === this.m_type || l.isInherited(t.constructor, this.m_type)
}, l.PredicateValidator = function(t) {
this.m_predicate = t
}, l.PredicateValidator.prototype.check = function(t) {
return this.m_predicate(t)
}, l.clone = function(t) {
var e, i, o;
if (!t || "object" != typeof t) return t;
e = "function" == typeof t.pop ? [] : {};
for (i in t) t.hasOwnProperty(i) && (o = t[i], e[i] = o && "object" == typeof o ? l
.clone(o) : o);
return e
}, l.deepEquals = function(t, e, i) {
var n, r, s, a, h;
if (i || (i = ""), t === e) return [!0, i];
if (o(t) && (t = void 0), o(e) && (e = void 0), void 0 === t && void 0 !== e) return [!
1, i
];
if (void 0 === e && void 0 !== t) return [!1, i];
if (null === t && null !== e) return [!1, i];
if (null === e && null !== t) return [!1, i];
if ("object" != typeof t && "object" != typeof e) return [t === e, i];
if (Array.isArray(t) && Array.isArray(e)) {
if (n = t.length, r = e.length, n !== r) return [!1, i];
for (s = 0; s < n; s++)
if (a = l.deepEquals(t[s], e[s], i + "[" + s + "]"), !a[0]) return a;
return [!0, i]
}
if (c(t) || c(e)) return [!1, i];
for (h in t)
if (a = l.deepEquals(t[h], e[h], i + "[" + h + "]"), !a[0]) return a;
return [!0, i]
}, l.merge = function(t, e) {
for (var i in e) "object" == typeof e[i] && t.hasOwnProperty(i) ? l.merge(t[i], e[i]) :
t[i] = e[i];
return t
}, l.mergeObj = function(t, e) {
for (var i in e) e[i].constructor === Object && t.hasOwnProperty(i) ? l.mergeObj(t[i],
e[i]) : t[i] = e[i];
return t
}, l.mergeWithRules = function(t, e, i, o) {
var n, r;
for (n in e) r = o ? o + "." + n : n, i && r in i ? t[n] = i[r](t[n], e[n]) :
"object" == typeof e[n] && t.hasOwnProperty(n) ? l.merge(t[n], e[n], i, r) : t[n] =
e[n]
}, l.sortMultipleFunction = function() {
var t = [].slice.call(arguments),
e = t.length;
return function(i, o) {
var n, r, s, a, l, c, h;
for (h = 0; h < e && (c = 0, s = t[h], a = "string" == typeof s ? s : s.name,
n = i[a], r = o[a], "function" == typeof s.fn && (n = s.fn(n), r = s.fn(
r)), l = s.reverse ? -1 : 1, n < r && (c = -1 * l), n > r && (c =
1 * l), 0 === c); h++);
return c
}
}, void 0 !== t && t && t.exports && (t.exports = {
inherit: r,
clone: l.clone,
merge: l.merge,
isNumber: e,
isInteger: l.isInteger,
isBoolean: l.isBoolean,
isString: l.isString,
isObject: h,
isHashObject: u,
isPromise: n,
isNaN: l.isNaN,
isAbsent: l.isAbsent,
isExistent: l.isExistent,
isSameType: l.isSameType,
isArray: c,
parseBool: l.parseBool,
parseJSONorNot: i,
deepEquals: l.deepEquals,
declareClassAsPureInterface: s,
requireFullInterfaceImplementation: a
})
}).call(e, i(42)(t))
}, , function(t, e, i) {
"use strict";
(function(t) {
function e() {}
function i(t) {
if (!(this instanceof i)) return new i(t);
arguments.length > 0 && (this._value = t), this._listeners = []
}
i.prototype.value = function() {
return this._owner ? this._owner._value : this._value
}, i.prototype.setValue = function(t, e) {
var i, o, n, r = this._owner ? this._owner : this;
if ("function" == typeof r.hook && (t = r.hook(t)), r.writeLock) return r._value;
if (!e && r._value === t && r.hasOwnProperty("_value")) return t;
for (r._value = t, i = r._listeners.slice(), o = 0, n = 0; n < i.length; n++) i[n]
.once && (r._listeners.splice(n - o, 1), o++), i[n].cb(t);
return t
}, i.prototype.deleteValue = function() {
var t, e, i, o = this._owner ? this._owner : this;
if (o.hasOwnProperty("_value")) {
if (o.writeLock) return o._value;
for (delete o._value, t = o._listeners.slice(), e = 0, i = 0; i < t.length; i++) t[
i].once && (o._listeners.splice(i - e, 1), e++), t[i].cb()
}
}, i.prototype.subscribe = function(t, e) {
var i, o, n;
if ("function" != typeof t) throw new TypeError("callback must be a function");
i = !!e && !!e.once, o = !!e && !!e.callWithLast, n = this._owner ? this._owner : this,
o && n.hasOwnProperty("_value") && (t(n._value), i) || n._listeners.push({
cb: t,
owner: this,
once: !!e && !!e.once
})
}, i.prototype.unsubscribe = function(t) {
var e, i, o = this._owner ? this._owner : this;
for (void 0 === t && (t = null), e = o._listeners, i = e.length; i--;) e[i].owner !==
this && o !== this || e[i].cb !== t && null !== t || e.splice(i, 1)
}, i.prototype.listeners = function() {
return (this._owner ? this._owner : this)._listeners
}, i.prototype.readonly = function() {
if (this._readonlyInstance) return this._readonlyInstance;
var t = this._readonlyInstance = new e;
return t.subscribe = this.subscribe.bind(this), t.unsubscribe = this.unsubscribe.bind(
this), t.value = this.value.bind(this), t.when = this.when.bind(this), t.spawn =
function() {
return this.spawn().readonly()
}.bind(this), t
}, i.prototype.spawn = function() {
var t = new i;
return delete t._listeners, t._owner = this._owner || this, t.destroy = function() {
this.unsubscribe(), delete this._owner
}, t
}, i.prototype.when = function(t) {
var e, i = this;
if (this.value()) return void t();
e = function(o) {
o && (i.unsubscribe(e), t())
}, i.subscribe(e)
}, i.prototype.opposite = function() {
var t, e;
return this._opposite || (t = this, e = new i(!this.value()), this.subscribe(function(
t) {
e.setValue(!t)
}), e.subscribe(function(e) {
t.setValue(!e)
}), this._opposite = e), this._opposite
}, "undefined" != typeof window && (window.WatchedValue = i), void 0 !== t && t && t
.exports && (t.exports = i)
}).call(e, i(42)(t))
}, , function(t, e, i) {
"use strict";
function o(t, e) {
var i, o;
return null === t ? e : null === e ? t : (i = Math.min(t.min, e.min), o = Math.max(t.max, e.max), {
min: i,
max: o
})
}
var n, r, s, a, l, c, h, u;
Object.defineProperty(e, "__esModule", {
value: !0
}), n = i(9), r = i(86), s = i(7), a = s.getLogger("Chart.PlotList"),
function(t) {
t[t.NearestLeft = -1] = "NearestLeft", t[t.Exact = 0] = "Exact", t[t.NearestRight = 1] =
"NearestRight"
}(l = e.PlotRowSearchMode || (e.PlotRowSearchMode = {})), c = 30, h = -2e6, u = function() {
function t(t) {
void 0 === t && (t = []), this._items = [], this._plotNames = [], this._start = 0, this
._end = 0, this._shareRead = !1, this._minMaxCache = {},
this._rowSearchCache = {}, this._plotNames = t
}
return t.prototype.clear = function() {
this._items = [], this._start = 0, this._end = 0, this._shareRead = !1, this
._minMaxCache = {}, this._rowSearchCache = {}
}, t.prototype.plotNames = function() {
return this._plotNames
}, t.prototype.first = function() {
return this.size() > 0 ? this._items[this._start] : null
}, t.prototype.last = function() {
return this.size() > 0 ? this._items[this._end - 1] : null
}, t.prototype.firstIndex = function() {
return this.size() > 0 ? this._indexAt(this._start) : null
}, t.prototype.lastIndex = function() {
return this.size() > 0 ? this._indexAt(this._end - 1) : null
}, t.prototype.size = function() {
return this._end - this._start
}, t.prototype.isEmpty = function() {
return 0 === this.size()
}, t.prototype.contains = function(t) {
return null !== this._search(t)
}, t.prototype.valueAt = function(t) {
var e = this.search(t);
return null !== e ? e.value : null
}, t.prototype.add = function(t, e) {
var i, o;
return this._shareRead ? (a.logDebug("add: readonly collection modification attempt"), !
1) : (i = {
index: t,
value: e
}, o = this._search(t), this._rowSearchCache = {}, null === o ? (this._items
.splice(this._lowerbound(t), 0, i), this._start = 0, this._end = this._items
.length, !0) : (this._items[o] = i, !1))
}, t.prototype.search = function(t, e) {
var i, o;
return void 0 === e && (e = l.Exact), this._rowSearchCache[t] && this._rowSearchCache[t]
[e] ? this._rowSearchCache[t][e] : null === (i = this._search(t, e)) ? null : (o = {
index: this._indexAt(i),
value: this._valueAt(i)
}, this._rowSearchCache[t] = this._rowSearchCache[t] || {}, this
._rowSearchCache[t][e] = o, o)
}, t.prototype.fold = function(t, e) {
var i, o, n, r = e;
for (i = this._start; i < this._end; ++i) o = this._indexAt(i), n = this._valueAt(i),
r = t(o, n, r);
return r
}, t.prototype.findFirst = function(t, e) {
var i, o, n, r = void 0 !== e && Math.min(this._start + e, this._end) || this._end;
for (i = this._start; i < r; ++i)
if (o = this._indexAt(i), n = this._valueAt(i), t(o, n)) return {
index: o,
value: n
};
return null
}, t.prototype.findLast = function(t, e) {
var i, o, n, r = void 0 !== e && Math.max(this._end - e, this._start) || this._start;
for (i = this._end - 1; i >= r; --i)
if (o = this._indexAt(i), n = this._valueAt(i), t(o, n)) return {
index: o,
value: n
};
return null
}, t.prototype.each = function(t) {
var e, i, o;
for (e = this._start; e < this._end && (i = this._indexAt(e), o = this._valueAt(e), !t(
i, o)); ++e);
}, t.prototype.reduce = function(t, e) {
var i, o, n, r = e;
for (i = this._start; i < this._end; ++i) o = this._indexAt(i), n = this._valueAt(i),
r = t(r, o, n);
return r
}, t.prototype.range = function(e, i) {
var o = new t;
return o._items = this._items, o._start = this._lowerbound(e), o._end = Math.min(this
._lowerbound(i) + 1, o._items.length), o._shareRead = !0, o
}, t.prototype.minMaxOnRange2 = function(t, e, i) {
var r, s, a, l, h, u, d, p, _, f, m, g, v, y, b, S, w, T, C;
if (this.isEmpty()) return null;
for (r = null, s = n.ensureNotNull(this.firstIndex()), a = n.ensureNotNull(this
.lastIndex()), l = 0, h = i; l < h.length; l++) {
for (u = h[l], d = t - u.offset, p = e - u.offset, d = Math.max(d, s), p = Math.min(
p, a), _ = Math.ceil(d / c) * c, f = Math.max(_, Math.floor(p / c) * c), m =
this._lowerbound(d), g = this._upperbound(Math.min(p, _, e)), v = this
._plotMinMax(m, g, u), r = o(r, v), this._minMaxCache[u.index] || (this
._minMaxCache[u.index] = {}), y = this._minMaxCache[u.index], b = Math.max(
_ + 1, d); b < f; b += c) S = Math.floor(b / c), w = y[S],
void 0 === w && (T = S * c, C = (S + 1) * c - 1, w = this.minMaxOnRange(T, C, [
u
]), y[S] = w), r = o(r, w);
m = this._lowerbound(f), g = this._upperbound(p), v = this._plotMinMax(m, g, u), r =
o(r, v), void 0 !== u.baseValue && null !== r && (r.min = r.min ? Math.min(u
.baseValue, r.min) : r.min, r.max = r.min ? Math.max(u.baseValue, r
.max) : r.max)
}
return r
}, t.prototype.minMaxOnRange = function(t, e, i) {
var n, r, s, a, l, c, h = null;
for (n = 0, r = i; n < r.length; n++) s = r[n], a = this._lowerbound(t - s.offset), l =
Math.min(this._lowerbound(e - s.offset) + 1, this._items.length), this._items[this
._end - 1] && this._items[l - 1].index > e - s.offset && (l = a), c = this
._plotMinMax(a, l, s), h = o(h, c), void 0 !== s.baseValue && null !== h && (h.min =
h.min ? Math.min(s.baseValue, h.min) : h.min, h.max = h.max ? Math.max(s
.baseValue, h.max) : h.max);
return h
}, t.prototype.merge = function(t) {
var e, i, o, n;
if (this._shareRead) return a.logDebug(
"merge: readonly collection modification attempt"), [];
for (e = [], e.earliestRow = null, i = 0, o = t; i < o.length; i++) n = o[i], this
._invalidateCacheForRow(n), (null === e.earliestRow || e.earliestRow.index > n
.index) && (e.earliestRow = n), this.add(n.index, n.value) ? e.push({
insert: n
}) : e.push({
update: n
});
return e
}, t.prototype.addTail = function(t, e) {
var i, o, n, r;
for (void 0 === e && (e = !1), i = 0, e && this._end - this._start > 0 && (i = 1, this
._items[this._end - this._start - 1].value = t[0].value), o = i; o < t
.length; ++o) {
if (n = t[o], null === (r = this.lastIndex())) {
a.logError("Can't add tail to the empty plotlist");
break
}
this.add(r + 1, n.value)
}
this._rowSearchCache = {}
}, t.prototype.move = function(t) {
var e, i, o, n, r, s, l, c;
if (this._shareRead) return a.logDebug(
"move: readonly collection modification attempt"), [];
for (e = [], e.earliestRow = null, i = 0, o = t; i < o.length; i++) n = o[i], null !== (
r = this._search(n.old)) && (s = this._items[r].value, l = {
index: n.old,
value: s
}, this._items.splice(r, 1), this._end = this._items.length, e.push({
remove: l
}), this._invalidateCacheForRow(l), n.new !== h && (c = {
index: n.new,
value: s
}, (null === e.earliestRow || e.earliestRow.index > c.index) && (e
.earliestRow = c), this.add(c.index, c.value) ? e.push({
insert: c
}) : e.push({
update: c
}), this._invalidateCacheForRow(c)));
return this._rowSearchCache = {}, e
}, t.prototype.remove = function(t) {
var e, i, o, n, r, s;
if (this._shareRead) return a.logDebug(
"remove: readonly collection modification attempt"), [];
if (null === (e = this._search(t, l.NearestRight))) return [];
if (i = [], o = this._items.splice(e), o.length > 0)
for (i.earliestRow = o[0], n = 0, r = o; n < r.length; n++) s = r[n], i.push({
remove: s
});
return this._end = this._items.length, this._minMaxCache = {}, this
._rowSearchCache = {}, i
}, t.prototype.state = function() {
return {
columns: this._plotNames,
start: this._start,
end: this._end,
data: this._items,
shareread: this._shareRead
}
}, t.prototype.restoreState = function(t) {
if (!t) return void this.clear();
this._plotNames = t.columns, this._start = t.start, this._end = t.end, this._shareRead =
t.shareread, this._items = t.data, this._minMaxCache = {}, this._rowSearchCache = {}
}, t.prototype._indexAt = function(t) {
return this._items[t].index
}, t.prototype._valueAt = function(t) {
return this._items[t].value
}, t.prototype._length = function() {
return this._items.length
}, t.prototype._search = function(t, e) {
var i, o = this._bsearch(t);
return null === o && e ? e < 0 ? (i = this._lowerbound(t),
i > this._start && (i -= 1), i !== this._end && this._indexAt(i) < t ? i : null
) : (i = this._upperbound(t), i !== this._end && t < this._indexAt(i) ? i :
null) : o
}, t.prototype._bsearch = function(t) {
var e = this._lowerbound(t);
return e === this._end || t < this._items[e].index ? null : e
}, t.prototype._lowerbound = function(t) {
return r.lowerbound(this._items, t, function(t, e) {
return t.index < e
}, this._start, this._end)
}, t.prototype._upperbound = function(t) {
return r.upperbound(this._items, t, function(t, e) {
return e.index > t
}, this._start, this._end)
}, t.prototype._plotMinMax = function(t, e, i) {
var o, n, r, s = null;
for (o = t; o < e; o++) n = this._items[o].value, void 0 === (r = n[i.index]) ||
null === r || Number.isNaN(r) || (null === s ? s = {
min: r,
max: r
} : (r < s.min && (s.min = r), r > s.max && (s.max = r)));
return s
}, t.prototype._invalidateCacheForRow = function(t) {
var e, i = Math.floor(t.index / c);
for (e = 0; e < this._plotNames.length; e++) this._minMaxCache[e] && delete this
._minMaxCache[e][i]
}, t
}(), e.PlotList = u, e.mergeMinMax = o
}, , function(t, e, i) {
"use strict";
(function(e) {
function o(t, e, i, o) {
this._map = $.extend({}, this._map, o), e && (e = this.unpackLevels(e)), r.call(this, t, e,
i), this.updateCollectibleProperty()
}
var n = i(15).isSameType,
r = i(6).DefaultProperty,
s = i(809);
inherit(o, r), o.prototype.state = function(t, i) {
t = t || [], t.push("__collectibleLines");
var o = e.prototype.state.call(this, t);
return i ? o : this.packLevels(o)
}, o.prototype.clone = function() {
var t = this.state();
return this.__collectibleLines && (t.__collectibleLines = this.__collectibleLines
.state()), new o(this._defaultName, t)
}, o.prototype.merge = function(t) {
e.prototype.merge.call(this, this.unpackLevels(t)), this.updateCollectibleProperty()
}, o.prototype._map = {
prefixes: [""],
range: [0, 0],
names: ["coeff", "color", "visible", "linestyle", "linewidth"],
typecheck: {
pack: Object,
unpack: Array
}
}, o.prototype._packLvlTpl = function() {
return []
}, o.prototype._unpackLvlTpl = function() {
return {}
}, o.prototype._packLvlFill = function(t, e, i, o) {
return o.push(i[e]), o
}, o.prototype._unpackLvlFill = function(t, e, i, o) {
return o[e] = i[t], o
}, o.prototype._iterateLevels = function(t, e) {
var i, o, r, s, a;
for (i in this._map.prefixes)
for (o = (this._map.prefixes[i] || "") + "level", r = this._map.range[0]; r <= this
._map.range[1]; r++)
if (t[o + r] && n(t[o + r], e.typecheck())) {
s = e.tpl();
for (a in this._map.names) s = e.fill(a, this._map.names[a], t[o + r], s);
t[o + r] = s
} return t
}, o.prototype.packLevels = function(t) {
return this._iterateLevels(t, {
tpl: this._packLvlTpl,
fill: this._packLvlFill,
typecheck: this._map.typecheck.pack
})
}, o.prototype.unpackLevels = function(t) {
return this._iterateLevels(t, {
tpl: this._unpackLvlTpl,
fill: this._unpackLvlFill,
typecheck: this._map.typecheck.unpack
})
}, o.prototype.saveDefaults = function() {
TradingView.saveDefaults(this._defaultName, this.state(this._exclusions, !0))
}, o.prototype.updateCollectibleProperty = function() {
var t, e;
this.__collectibleLines && (t = this, e = [], this.__collectibleLines._childs.forEach(
function(i) {
var o, n = t.__collectibleLines[i].value(),
r = n.split("."),
s = t[r[0]];
for (o = 1; o < r.length && s; ++o) s = s[r[o]];
s && e.push({
property: s.color,
defaultValue: s.color.value()
})
}), this.collectibleColors ? this.collectibleColors.reloadProperties(e) :
this.collectibleColors = new s(e))
}, t.exports = o
}).call(e, i(25))
}, function(t, e, i) {
"use strict";
function o(t) {
this._invalidationLevel = t || o.UPDATE_CURSOR_ONLY, this._invalidatedPanes = {}
}
o.UPDATE_CURSOR_ONLY = 1, o.LIGHT_UPDATE = 2, o.FULL_UPDATE = 3, o.prototype.invalidatePane = function(
t, e) {
this._invalidatedPanes[t] ? this._invalidatedPanes[t] = Math.max(this._invalidatedPanes[t], e) :
this._invalidatedPanes[t] = e
}, o.prototype.invalidateAll = function(t) {
this._invalidationLevel = Math.max(this._invalidationLevel, t)
}, o.prototype.fullInvalidation = function() {
return this._invalidationLevel
}, o.prototype.invalidateForPane = function(t) {
return this._invalidatedPanes[t] ? Math.max(this._invalidatedPanes[t], this
._invalidationLevel) : this._invalidationLevel
}, o.prototype.merge = function(t) {
this.force = this.force || t.force, this._invalidationLevel = Math.max(this._invalidationLevel,
t._invalidationLevel);
for (var e in t._invalidatedPanes) this._invalidatedPanes[e] ? this._invalidatedPanes[e] = Math
.max(this._invalidatedPanes[e], t._invalidatedPanes[e]) : this._invalidatedPanes[e] = t
._invalidatedPanes[e]
}, o.prototype.exclude = function(t) {
this._invalidationLevel <= t && (this._invalidationLevel = 0);
for (var e in this._invalidatedPanes) this._invalidatedPanes[e] <= t && (this._invalidatedPanes[
e] = 0)
}, t.exports = o
}, function(t, e, i) {
"use strict";
function o(t, e, i) {
h[t].unsubscribe(i, e)
}
function n(t, e, i) {
r(t, e, i)
}
function r(t, e, i, o) {
if (h.hasOwnProperty(t) || (h[t] = new c), d[t]) return void e.call(i);
h[t].subscribe(i, e, o)
}
function s(t) {
u.push(t)
}
function a(t) {
var e, i, o = [];
for (e = 1; e < arguments.length; e++) o[e - 1] = arguments[e];
i = [t].concat(o), u.forEach(function(t) {
t.apply(null, i)
}), h.hasOwnProperty(t) && h[t].fire.apply(h[t], o)
}
function l(t) {
d[t] && console.warn("Something went wrong: emitOnce called multiple times with same event (" + t +
")"), d[t] = !0, a.apply(null, arguments)
}
var c, h, u, d;
Object.defineProperty(e, "__esModule", {
value: !0
}), c = i(10), h = {}, u = [], d = {}, e.unsubscribe = o, e.on = n, e.subscribe = r, e
.subscribeToAll = s, e.emit = a, e.emitOnce = l
}, function(t, e, i) {
"use strict";
(function(t, e, o) {
var n, r, s, a, l;
i(64), n = i(200).regExpEscape, r = i(93).TVXWindowEvents, s = i(199).TVLocalStorage, a = [
"s.tradingview.com", "betacdn.tradingview.com"
], l = window.TVSettings = function() {
function i(t) {
return D + "." + t
}
function o(t, e) {
var i;
return i = V[t], window.is_authenticated && !W || null != i || (i = V[t]), null ==
i ? e : i
}
function c(t, e) {
var i = o(t, void 0);
if (null == i) return e;
try {
return JSON.parse(i)
} catch (i) {
return f(t), e
}
}
function h(t, e) {
var i = o(t);
return null == i ? e : !(!i || "false" === i || 0 == +i)
}
function u(t, e, i) {
var n, r = o(t, void 0, i);
if (null == r) return e;
if (n = parseFloat(r), !isFinite(n)) throw new TypeError('"' + r +
'" is not float (key: "' + t + '")');
return n
}
function d(t, e, i) {
var n, r = o(t, void 0, i);
if (null == r) return e;
if (n = parseInt(r, 10), !isFinite(n)) throw new TypeError('"' + r +
'" is not int (key: "' + t + '")');
return n
}
function p(t, e, i) {
i = i || {};
var o = "" + e;
return V[t] !== o && (V[t] = o, g(t)), i.forceFlush && !B && (B = setTimeout(
function() {
B = void 0, v()
}, E)), l
}
function _(t, e, i) {
return p(t, JSON.stringify(e), i), l
}
function f(t, e) {
return e = e || {}, null != V[t] && (delete V[t], g(t)), e.forceFlush && v(), l
}
function m() {
R = void 0,
O.length && v()
}
function g(t) {
if (H) null == V[t] ? H.removeValue(i(t)) : H.setValue(i(t), V[t]);
else if (!window.is_authenticated || W) try {
null == V[t] ? s.removeItem(i(t)) : s.setItem(i(t), V[t])
} catch (t) {} else O.push(t), R || (R = setTimeout(m, M));
r.emit("settings", JSON.stringify({
key: t,
value: V[t]
}))
}
function v(e) {
var i, o, n, r, s;
if (!t.enabled("widget") && window.is_authenticated && !W && 0 !== O.length) {
for (i = O, O = [], o = {}, n = i.length; n--;) r = i[n], s = V[r], void 0 ===
s && (s = null), o[r] = s;
$.ajax({
url: "/savesettings/",
type: "POST",
data: {
delta: JSON.stringify(o)
},
async: !e
})
}
}
function y() {
var t, e, i;
for (t = 0; t < s.length; t++) e = s.key(t), i = D.length, e.substring(0, i + 1) ===
D + "." && (O = [], s.removeItem(e));
$.post("/restoredefaults/", {}, function(t) {
TVDialogs.showNotice("Success",
"Defaults has been successfully restored")
}).error(function(t) {})
}
function b() {
return Object.keys(V)
}
function S(t, e) {
var i, o = b(e),
r = [];
for (t = RegExp("^" + n(t).replace(/\\\*\\\*/gi, ".+").replace(/\\\*/gi, "[^.]+") +
"$", "gi"), i = o.length - 1; i >= 0; i--) t.test(o[i]) && r.push(o[i]), t
.lastIndex = 0;
return r
}
function w(t) {
for (var e = 0; e < z.length; ++e)
if (z[e].exec(t)) return !0;
return !1
}
function T() {
var e, i, o, n, r;
for (V = {}, e = D + ".", i = !t.enabled("save_chart_properties_to_local_storage"),
o = s.length; o--;)(n = s.key(o)) && n.substring(0, e.length) === e && (r = n
.substring(e.length), i && !w(r) || (V[r] = s.getItem(n)))
}
function C(t) {
var e, i, o, n, r;
for (V = {}, e = 0 === Object.keys(t).length, i = D + ".", o = s.length; o--;)(n = s
.key(o)) && n.substring(0, i.length) === i && (e && (r = n.substring(i
.length), p(r, s.getItem(n))), s.removeItem(n));
Object.keys(t).forEach(function(e) {
V[e] = t[e] + ""
})
}
function x() {
var t, e, i, o;
if (TradingView.onWidget() && a.includes(window.location.host))
for (t = "tradingview.", e = s.length; e--;) i = s.key(e), 0 === i.indexOf(t) &&
(o = i.replace(t, D + "."), s.setItem(o, s.getItem(i)), s.removeItem(i))
}
function P(t) {
H ? C(H.initialSettings || {}) : window.is_authenticated && !W ? C(t || {}) : (x(),
T()), F.fire()
}
function L(t) {
H = t
}
var I, k, A, M, E, D, V, O, R, B, z, F, N = !1,
W = t.enabled("cqg_terminal"),
H = null;
try {
N = !TradingView.onWidget() && parent && parent !== window && !!parent.IS_DEMO_PAGE
} catch (t) {}
return N ? (I = {
"widgetbar.layout-settings": {
widgets: {},
settings: {
minimized: !0
}
},
notShowMainWizard: !0
}, k = function(t, e, i) {
var o = I[t];
return null == o ? e : o
}, A = function() {}, {
loaded: !1,
loadedModel: !1,
getValue: k,
getJSON: k,
getBool: k,
getFloat: k,
getInt: k,
setValue: A,
setJSON: A,
remove: A,
restoreDefaults: A,
keys: function() {
return Object.keys(I)
},
keysMask: function() {
return []
},
sync: A,
onSync: {
subscribe: function() {}
}
}) : (M = 12e4, E = 10, "local" === window.environment && (M = 5e3), D = TradingView
.onWidget() ? "tradingview-widget" : "tradingview", V = {}, O = [], z = [
/^widgetbar\.widget\.watchlist.+/, /.+quicks$/,
/^widgetbar\.layout-settings$/, /^ChartSideToolbarWidget\.visible$/,
/^onwidget\.watchlist$/, /^domepanel.visible$/, /^chart\.favoriteDrawings$/,
/^chart\.favoriteDrawingsPosition$/,
/^ChartFavoriteDrawingToolbarWidget\.visible/, /^trading\.chart\.proterty$/,
/^trading_floating_toolbar\.position$/
], r.on("settings", function(t) {
var e = JSON.parse(t);
null == e.value ? delete V[e.key] : V[e.key] = e.value
}), F = new e, document.addEventListener("visibilitychange", function() {
"hidden" !== document.visibiltyState && !0 !== document.hidden || v()
}), window.addEventListener("unload", function() {
v(!0)
}), {
loaded: !1,
loadedModel: !1,
getValue: o,
getJSON: c,
getBool: h,
getFloat: u,
getInt: d,
setValue: p,
setJSON: _,
remove: f,
restoreDefaults: y,
keys: b,
keysMask: S,
sync: P,
onSync: F,
setSettingsAdapter: L
})
}(), void 0 !== o && o && o.exports && (o.exports = l)
}).call(e, i(5), i(10), i(42)(t))
}, function(t, e, i) {
"use strict";
(function(e) {
function i(t) {
if (this._listeners = new e, this._childs = [], void 0 !== t && null !== t)
if (this.isPrimitiveType(t)) this._value = t;
else
for (var i in t) this.addProperty(i, t[i])
}
i.prototype.merge = function(t) {
var e, i;
if (null != t)
if (this.isPrimitiveType(t)) this._value = t;
else if (Array.isArray(t))
for (e = 0; e < t.length; e++) this[e] ? this[e].merge(t[e]) : this.addProperty(e,
t[e]);
else
for (i in t) this[i] ? this[i].merge(t[i]) : this.addProperty(i, t[i])
}, i.prototype.state = function(t) {
var e, i, o, n, r, s = this._value;
for (void 0 === s && (s = {}), e = 0; e < this._childs.length; e++)
if (i = this._childs[e], !t || -1 === t.indexOf(i))
if (t) {
for (o = [], n = 0; n < t.length; n++) r = t[n], r.startsWith(i + ".") && o
.push(r.substr(i.length + 1));
s[i] = this[i].state(o)
} else s[i] = this[i].state();
return s
}, i.prototype.clone = function(t) {
return new i(this.state())
}, i.prototype.isPrimitiveType = function(t) {
return !!isNumber(t) || (!!new TradingView.TypeValidator(String).check(t) || TradingView
.isBoolean(t))
}, i.prototype.value = function() {
return this._value
}, i.prototype.listeners = function() {
return this._listeners
}, i.prototype.childCount = function() {
return this._childs.length
}, i.prototype.setValue = function(t, e) {
(this._value !== t || e) && (this._value = t, this._listeners.fire(this))
}, i.prototype.setValueSilently = function(t) {
this._value = t
}, i.prototype.addProperty = function(t, e) {
var o = new i(e);
this[t] = o, this._childs.push(t), o.listeners().subscribe(this, i.prototype
.childChanged)
}, i.prototype.removeProperty = function(t) {
this[t].listeners().unsubscribe(this, i.prototype.childChanged), delete this[t], this
._childs = this._childs.filter(function(e) {
return e !== t
})
}, i.prototype.addChild = function(t, e) {
this[t] = e, -1 === $.inArray(t, this._childs) && this._childs.push(t), e.listeners()
.subscribe(this, i.prototype.childChanged)
}, i.prototype.childChanged = function(t, e) {
this.listeners().fire(this)
}, i.prototype.subscribe = function(t, e) {
this.listeners().subscribe(t, e)
}, i.prototype.unsubscribe = function(t, e) {
this.listeners().unsubscribe(t, e)
}, i.prototype.unsubscribeAll = function(t) {
this.listeners().unsubscribeAll(t)
}, t.exports = i
}).call(e, i(10))
}, function(t, e, i) {
"use strict";
(function(e, o, n) {
function r(t) {
return "cursor" === t || "arrow" === t || "dot" === t
}
function s(t) {
!t && u && u.stayInDrawingMode.value() || this.tool.setValue(this.cursorTool.value())
}
function a(t, e) {
return function(e) {
t.inFire || (t.inFire = !0, t.fire(e), t.inFire = !1)
}
}
function l() {
K || (g.setValue(TVSettings.getValue("chart.cursorPreference", "cursor")), g.subscribe(
function(t) {
r(t) && v.setValue(t)
}, {
callWithLast: !0
}), v.subscribe(function(t) {
t && TVSettings.setValue("chart.cursorPreference", t)
}), u = new c("drawings"), d = new n, p = new n, _ = new n, f = new n, d.setValue(!
1), p.setValue(!1), _.setValue(!1), f.setValue(!1),
g.subscribe(function() {
h.emit("onSelectedLineToolChanged")
}), K = !0)
}
var c = i(6).DefaultProperty,
h = i(23),
u = null,
d = null,
p = null,
_ = null,
f = null,
m = new e,
g = new e,
v = new e,
y = new o,
b = new o,
S = new o,
w = new o,
T = new o,
C = new o,
x = new o,
P = new o,
L = new o,
I = new o,
k = new o,
A = new o,
M = new o,
E = new o,
D = new o,
V = a(y),
O = a(b),
R = a(S),
B = a(w),
z = a(T),
F = a(C),
N = a(x),
W = a(P),
$ = a(L),
H = a(I),
U = a(k),
j = a(A),
q = a(M),
G = a(E),
Y = a(D),
K = !1;
t.exports = {
tool: g,
cursorTool: v,
toolIsCursor: r,
resetToCursor: s,
init: l,
createdLineTool: y,
continuedLineTool: b,
cancelledLineTool: S,
createLineTool: V,
continueLineTool: O,
cancelLineTool: R,
startedMovingLineTool: w,
movedLineTool: T,
finishedMovingLineTool: C,
startMovingLineTool: B,
moveLineTool: z,
finishMovingLineTool: F,
startedChangingLineTool: x,
changedLineTool: P,
finishedChangingLineTool: L,
startChangingLineTool: N,
changeLineTool: W,
finishChangingLineTool: $,
removedLineTool: I,
removeLineTool: H,
restoredLineTool: E,
restoreLineTool: G,
restoredLineToolState: D,
restoreLineToolState: Y,
finishedLineTool: k,
finishLineTool: U,
changedLineStyle: A,
changeLineStyle: j,
copiedLineTool: M,
copyLineTool: q,
properties: function() {
return u
},
hideAllDrawings: function() {
return d
},
hideMarksOnBars: function() {
return _
},
lockDrawings: function() {
return p
},
drawOnAllCharts: function() {
return u.drawOnAllCharts
},
lockTimeAxis: function() {
return f
},
lockTimeAxisTime: m
}
}).call(e, i(17), i(10), i(25))
}, , function(t, e, i) {
"use strict";
function o(t, e) {
if (!n.isNumber(t)) return "n/a";
if (!n.isInteger(e)) throw new TypeError("invalid length");
if (e < 0 || e > 16) throw new TypeError("invalid length");
return 0 === e ? "" + t : ("0000000000000000" + t).slice(-e)
}
var n, r, s, a, l;
Object.defineProperty(e, "__esModule", {
value: !0
}), i(12), n = i(15), r = i(7), s = r.getLogger("Chart.PriceFormatter"), e.customFormatters = {
dateFormatter: null,
timeFormatter: null
}, e.formatterOptions = {
decimalSign: ".",
decimalSignFractional: "'"
}, a = {
custom: $.t("Price format is invalid."),
fraction: $.t("Fraction part is invalid."),
secondFraction: $.t("Second fraction part is invalid.")
}, e.numberToStringWithLeadingZero = o, l = function() {
function t(t, e, i, o) {
if (this.type = "price", e || (e = 1), n.isNumber(t) && n.isInteger(t) || (t = 100), t < 0)
throw new TypeError("invalid base");
if (this._priceScale = t, this._minMove = e, this._minMove2 = o, i && void 0 !== o && o >
0 && 2 !== o && 4 !== o && 8 !== o) return void s.logDebug("invalid minmove2");
this._fractional = i, this.calculateDecimal()
}
return t.prototype.isFractional = function() {
return !!this._fractional
}, t.prototype.state = function() {
return {
fractional: this._fractional,
fractionalLength: this._fractionalLength,
minMove: this._minMove,
minMove2: this._minMove2,
priceScale: this._priceScale
}
}, t.prototype.calculateDecimal = function() {
if (this._fractionalLength = 0, this._priceScale > 0 && this._minMove > 0) {
var t = this._priceScale;
for (this._fractional && this._minMove2 && (t /= this._minMove2); t > 1;) t /= 10,
this._fractionalLength++
}
}, t.prototype.format = function(t, e, i, o) {
void 0 === o && (o = !0);
var n = "";
return t < 0 ? (n = !0 === e ? "−" : !1 === o ? "" : "-", t = -t) : t && !0 === e && (
n = "+"), this._fractional ? n + this._formatAsFractional(t, i) : n + this
._formatAsDecimal(t, i)
}, t.prototype.parse = function(t) {
return this._fractional ? this._minMove2 ? this._parseAsDoubleFractional(t) : this
._parseAsSingleFractional(t) : this._parseAsDecimal(t)
}, t.prototype.hasForexAdditionalPrecision = function() {
return !this._fractional && 10 === this._minMove2
}, t.serialize = function(t) {
return t.state()
}, t.deserialize = function(e) {
return new t(e.priceScale, e.minMove, e.fractional, e.minMove2)
}, t.prototype._formatAsDecimal = function(t, i) {
//格式化价格
if (this.type == "price") {
var price = "0.00";
//如果价格大于1则保留2位小数
if (t > 1) {
price = t.toFixed(2)
} else {
//否则
let splitList = t.toString().split(".")
let num = 0
if (splitList[1]) {
for (var i = 0; i < splitList[1].length; i++) {
if (splitList[1][i] == "0") {
num++
} else {
//如果不为0了 直接中断
break;
}
}
}
if (num >= 4) {
var last = "" + splitList[1].substring(num, splitList[1].length)
if (last.length >= 4) {
if (last[num] >= 5) {
price = '0.0{' + num + '}' + (parseInt(last[1] + last[2] + last[
3]) + 1)
} else {
price = '0.0{' + num + '}' + last[1] + last[2] + last[3]
}
} else {
price = '0.0{' + num + '}' + last
}
} else {
price = t.toFixed(5)
}
}
return price
} else {
var n, r, s, a, l;
i = i || 0, n = this._fractional ? Math.pow(10, this._fractionalLength || 0) :
Math.pow(10, i) * this._priceScale / this._minMove, r = Math.floor(t), s = +(
Math
.round(t * n) - r * n).toFixed(this._fractionalLength), s >= n && (s -= n,
r +=
1), a = "", 1 !== n && (l = void 0 !== this._fractionalLength ? this
._fractionalLength : NaN,
a = e.formatterOptions.decimalSign + o(+s.toFixed(this._fractionalLength) *
this._minMove, l + i),
a = this._removeEndingZeros(a, i))
return "" + r + a
}
}, t.prototype._formatAsFractional = function(t, i) {
var n, r, s, a, l, c, h, u, d, p = this._priceScale / this._minMove,
_ = Math.floor(t),
f = i ? Math.floor(t * p) - _ * p : Math.round(t * p) - _ * p;
if (f === p && (f = 0, _ += 1), n = "", i && (r = (t - _ - f / p) * p, r = Math.round(
r * Math.pow(10, i)), n = o(r, i), n = this._removeEndingZeros(n, i)), !this
._fractionalLength) throw Error("_fractionalLength is not calculated");
return s = "", this._minMove2 ? (a = ["0", "5"], l = ["0", "2", "5", "7"], c = ["0",
"1", "2", "3", "4", "5", "6", "7"
], h = f % this._minMove2, f = (f - h) / this._minMove2, u = o(f, this
._fractionalLength), d = 2 === this._minMove2 ? a[h] : 8 === this
._minMove2 ? c[h] : l[h], s = u + e.formatterOptions.decimalSignFractional + d
) : s = o(f * this._minMove, this._fractionalLength), "" + _ + e
.formatterOptions.decimalSignFractional + s + n
}, t.prototype._removeEndingZeros = function(t, e) {
for (var i = 0; i < e && "0" === t[t.length - 1]; i++) t = t.substr(0, t.length - 1);
return t
}, t.prototype._parseAsDecimal = function(t) {
var i, o, n = RegExp(/^(\-?)[0-9]+$/),
r = n.exec(t);
return r ? (i = parseFloat(t), {
price: i,
res: !0,
suggest: this.format(i)
}) : (o = RegExp("^(-?)[0-9]+\\" + e.formatterOptions.decimalSign + "[0-9]*$"), r =
o.exec(t), r ? (i = parseFloat(t.replace(e.formatterOptions.decimalSign,
".")), {
price: i,
res: !0,
suggest: this.format(i)
}) : {
error: a.custom,
res: !1
})
}, t.prototype._patchFractPart = function(t, e) {
var i = {
0: 0,
5: 1
},
o = {
0: 0,
2: 1,
5: 2,
7: 3
};
return 2 === e ? void 0 === i[t] ? -1 : i[t] : 4 === e ? void 0 === o[t] ? -1 : o[t] : t
}, t.prototype._parseAsSingleFractional = function(t) {
var i, o, n, r, s, l, c = RegExp(/^(\-?)[0-9]+$/),
h = c.exec(t);
return h ? (i = parseFloat(t), {
price: i,
res: !0,
suggest: this.format(i)
}) : (o = RegExp("^(-?)([0-9]+)\\" + e.formatterOptions.decimalSignFractional +
"([0-9]+)$"), h = o.exec(t), h ? (n = !!h[1], r = parseInt(h[2]), s = this
._priceScale, (l = this._patchFractPart(parseInt(h[3]), s)) >= s || l < 0 ?
{
error: a.fraction,
res: !1
} : (i = r + l / s, n && (i = -i), {
price: i,
res: !0,
suggest: this.format(i)
})) : {
error: a.custom,
res: !1
})
}, t.prototype._parseAsDoubleFractional = function(t) {
var i, o, n, r, s, l, c, h, u, d = RegExp(/^(\-?)[0-9]+$/),
p = d.exec(t);
return p ? (i = parseFloat(t), {
price: i,
res: !0,
suggest: this.format(i)
}) : (o = RegExp("^(-?)([0-9]+)\\" + e.formatterOptions.decimalSignFractional +
"([0-9]+)\\" + e.formatterOptions.decimalSignFractional + "([0-9]+)$"), p =
o.exec(t), p ? (n = !!p[1], r = parseInt(p[2]), s = void 0 !== this._minMove2 ?
this._minMove2 : NaN, l = this._priceScale / s,
c = this._minMove2, h = this._patchFractPart(parseInt(p[3]), l), u = this
._patchFractPart(parseInt(p[4]), c), h >= l || h < 0 ? {
error: a.fraction,
res: !1
} : void 0 !== c && u >= c || u < 0 ? {
error: a.secondFraction,
res: !1
} : (i = void 0 !== c ? r + h / l + u / (l * c) : NaN, n && (i = -i), {
price: i,
res: !0,
suggest: this.format(i)
})) : {
error: a.custom,
res: !1
})
}, t
}(), e.PriceFormatter = l
}, , function(t, e, i) {
"use strict";
function o(t, e, i) {
var o, n, r, s, c;
if (e = e || 0, !a(t)) return i ? l.rgbaToString(l.rgba(l.parseRgb(t), l.normalizeAlphaComponent(1 -
e / 100))) : t;
if (e < 0 && e > 100) throw Error("invalid transparency");
return o = l.parseRgb(t), n = o[0], r = o[1], s = o[2], c = l.normalizeAlphaComponent(1 - e / 100),
l.rgbaToString([n, r, s, c])
}
function n(t) {
return a(t) ? t : l.rgbaToString(l.rgba(l.parseRgb(t), l.normalizeAlphaComponent(1)))
}
function r(t) {
var e = l.parseRgb(t).map(function(t) {
return t /= 255, t <= .03928 ? t / 12.92 : Math.pow((t + .055) / 1.055, 2.4)
});
return +(.2126 * e[0] + .7152 * e[1] + .0722 * e[2]).toFixed(3)
}
function s(t, e) {
return l.rgbaToString(l.blendRgba(l.parseRgba(t), l.parseRgba(e)))
}
function a(t) {
return 0 === t.indexOf("#")
}
Object.defineProperty(e, "__esModule", {
value: !0
});
var l = i(32);
e.generateColor = o, e.resetTransparency = n, e.getLuminance = r, e.blendColors = s, e.isHexColor = a
}, function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
}), e.dur = 350, e.easingFunc = {
linear: function(t) {
return t
},
easeInQuad: function(t) {
return t * t
},
easeOutQuad: function(t) {
return t * (2 - t)
},
easeInOutQuad: function(t) {
return t < .5 ? 2 * t * t : (4 - 2 * t) * t - 1
},
easeInCubic: function(t) {
return t * t * t
},
easeOutCubic: function(t) {
return --t * t * t + 1
},
easeInOutCubic: function(t) {
return t < .5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1
},
easeInQuart: function(t) {
return t * t * t * t
},
easeOutQuart: function(t) {
return 1 - --t * t * t * t
},
easeInOutQuart: function(t) {
return t < .5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t
},
easeInQuint: function(t) {
return t * t * t * t * t
},
easeOutQuint: function(t) {
return 1 + --t * t * t * t * t
},
easeInOutQuint: function(t) {
return t < .5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t
}
}, e.color = {
black0: "#000",
black20: "#2b2d36",
black25: "#2b2e37",
black30: "#212121",
black70: "#4A4A4A",
black80: "#535353",
black100: "#646464",
black110: "#757575",
black140: "#8A8A8A",
black170: "#ADAEB0",
black180: "#b4b4b4",
black200: "#C8C8C8",
black220: "#DADDE0",
black230: "#ECECEC",
black240: "#F2F2F2",
black248: "#F8F8F8",
black255: "#FFF",
brand: "#3BB3E4",
brandHover: "#3BABD8",
brandActive: "#3898C2",
brandDown: "#049DDC",
brand220: "#3BB3E0",
brand255: "#3BB3FF",
brandNew: "#37A6EF",
spinner: "#00A2E2",
brandMedium80: "#3C4650",
brandMedium90: "#465a6e",
brandMedium100: "#627384",
brandMedium120: "#758696",
brandMedium150: "#94959C",
brandMedium190: "#9DB2BD",
brandMedium220: "#E9EFF2",
brandMedium230: "#EAECEF",
brandMedium240: "#F1F3F6",
brandDark: "#2A2C39",
brandDark50: "#252733",
brandDark45: "#20222D",
brandDarkText: "#6A6B74",
danger: "#FF4A68",
dangerHover: "#F24965",
dangerDown: "#FF173E",
success: "#3CBC98",
success55: "#37BC9B",
success250: "#00FFC0",
successHover: "#38B395",
successDown: "#00A97F",
attention: "#FFC84A",
attention50: "#F89E30",
growing: "#37bc9b",
falling: "#ff4a68"
}
}, , function(t, e, i) {
"use strict";
(function(t, e) {
function o(t) {
TradingView.merge(this, {
palettes: {},
inputs: [],
plots: [],
graphics: {},
defaults: {}
}),
TradingView.merge(this, t);
var e = t.fullId || t.id;
TradingView.merge(this, o.parseIdString(e)), this.name = this.id
}
var n = i(9).assert,
r = i(7).getLogger("Chart.Study.MetaInfo"),
s = i(206).applyOverridesToStudyDefaults,
a = null;
o.VERSION_STUDY_ARG_SOURCE = 41, o.METAINFO_FORMAT_VERSION_SOS_V2 = 42, o
.VERSION_PINE_PROTECT_TV_4164 = 43, o.CURRENT_METAINFO_FORMAT_VERSION = 45, o
.CHILD_STUDY_ALLOWED_PLOT_TYPES = ["line"], o.CHILD_STUDY_EXCLUDE_IDS = [
"CorrelationCoefficient@tv-basicstudies"
], o.CHILD_STUDY_PARENT_EXCLUDE_IDS = [], o.FilledArea = {}, o.FilledArea.TYPE_PLOTS =
"plot_plot", o.FilledArea.TYPE_HLINES = "hline_hline", o.versionOf = function(t) {
var e = "_metainfoVersion" in t && isNumber(t._metainfoVersion) ? t._metainfoVersion :
0;
return e < 0 && r.logError("Metainfo format version cannot be negative: " + e), e > o
.CURRENT_METAINFO_FORMAT_VERSION && r.logWarn(
"Client doesn't support this version of metainfo format: " + e), e
}, o.parseIdString = function(t) {
var e, i, o, n, r = {};
if (-1 === t.indexOf("@")) r.shortId = t, r.packageId = "tv-basicstudies", r.id = t +
"@" + r.packageId, r.version = 1;
else if (e = t.split("@"), r.shortId = e[0], i = e[1].split("-"), 3 === i.length) r
.packageId = i.slice(0, 2).join("-"), r.id = r.shortId + "@" + r.packageId, r
.version = i[2];
else if (1 === i.length && "decisionbar" === i[0]) r.packageId = "les-" + i[0], r.id = r
.shortId + "@" + r.packageId, r.version = 1;
else {
if (1 !== i.length) throw Error("unexpected study id:" + t);
r.packageId = "tv-" + i[0], r.id = r.shortId + "@" + r.packageId, r.version = 1
}
return r.fullId = r.id + "-" + r.version, "tv-scripting" === r.packageId ? (o = r
.shortId, 0 === o.indexOf("Script$") || 0 === o.indexOf("StrategyScript$") ? (
n = o.indexOf("_"), r.productId = n >= 0 ? o.substring(0, n) : r.packageId
) : r.productId = r.packageId) : r.productId = r.packageId, r
}, o.getPackageName = function(t) {
return (/^[^@]+@([^-]+-[^-]+)/.exec(t || "") || [0, "tv-basicstudies"])[1]
}, o.cutFullId = function(t) {
return t.replace(/(@[^-]+-[^-]+).*$/, "$1")
}, o.cutDollarHash = function(t) {
var e, i, o = t.indexOf("$"),
n = t.indexOf("@");
return -1 === o ? t : (e = t.substr(0, o), i = n >= 0 ? t.substr(n) : "", e + i)
}, o.cutScriptIdPart = function(t) {
var e = t.indexOf("$"),
i = t.indexOf("@");
return e < 0 && i >= 0 ? "" : t.substring(Math.max(e + 1, 0), i >= 0 ? i : t.length)
}, o.hasUserIdSuffix = function(t) {
return /^USER;[\d\w]+;\d+$/.test(t)
}, o.getSourceIdByInputs = function(t, e) {
var i, n, r;
if (!Array.isArray(t) || !e) return null;
for (i = 0; i < t.length; ++i)
if (n = t[i], o.isSourceInput(n) && "string" == typeof e[n.id]) return r = e[n.id],
~r.indexOf("$") && (r = r.split("$")[0]), r;
return null
}, o.getSourceInputIds = function(t) {
var e, i, n = [],
r = t.inputs;
for (e = 0; e < r.length; ++e) i = r[e], o.isSourceInput(i) && n.push(i.id);
return n
}, o.setChildStudyMetaInfoPropertiesSourceId = function(e, i, n) {
var r, s, a, l;
for (r = 0; r < e.inputs.length; ++r) s = e.inputs[r], o.isSourceInput(s) &&
n instanceof t && n.inputs && n.inputs[s.id] && (a = n.inputs[s.id].value(), a
.indexOf("$") > 0 && (l = a.replace(/^[^\$]+/, i), n.inputs[s.id].setValue(l)))
}, o.patchChildStudyMetaInfoState = function(t) {
function e(t) {
if ("object" == typeof t)
for (var i in t) "string" == typeof t[i] && /^[^\$]+\$\d+$/.test(t[i]) ? t[i] =
t[i].replace(/^[^\$]+/, "{pid}") : e(t[i])
}
t.state && e(t.state.inputs), t.state.isChildStudy = !0
}, o.prototype.parseValue = function(t, e) {
return "bool" === t ? TradingView.parseBool(e) : e
}, o.prototype.defaultInputs = function() {
var t, e = [];
for (t = 0; t < this.inputs.length; t++) e.push(this.inputs[t].defval);
return e
}, o.prototype.state = function(t) {
var e, i = {};
for (e in this) this.hasOwnProperty(e) && (i[e] = this[e], !0 !== t && "id" === e && (i[
e] += "-" + this.version));
return i
}, o.prototype.symbolInputId = function() {
var t = this.inputs.filter(function(t) {
return "symbol" === t.type
});
return t.length > 0 ? t[0].id : null
}, o.findStudyMetaInfoByDescription = function(t, e) {
if (t) {
for (var i = 0; i < t.length; ++i)
if (t[i].description.toLowerCase() === e.toLowerCase()) return t[i];
throw Error("unexpected study id:" + e)
}
throw Error("There is no studies metainfo")
}, o._findStudyMetaInfo = function(t, e) {
for (var i = 0; i < t.length; i += 1)
if (t[i].id === e) return [i, t[i]];
return []
}, o.findStudyMetaInfo = function(t, e) {
if (!t) throw new ReferenceError("There is no studies metainfo");
var i = o._findStudyMetaInfo(t, e)[1];
if (!i) throw new ReferenceError("unexpected study id:" + e);
return i
}, o.isParentSourceId = function(t) {
return "string" == typeof t && /^[^\$]+\$\d+$/.test(t)
}, o.isSourceInput = function(t) {
return t.id && (("source" === t.id || "src" === t.id) && ("text" === t.type ||
"source" === t.type) || "source" === t.type)
}, o.getChildSourceInputTitles = function(t, e, i) {
var n, r, s, a, l = {};
if (e.plots && e.plots.length && t.options && t.options.length)
for (n = 0; n < t.options.length; ++n) r = t.options[n], s = r && +r.split("$")[1],
(a = isFinite(s) && e.plots[s]) && ~o.CHILD_STUDY_ALLOWED_PLOT_TYPES.indexOf(a
.type) && (l[r] = e.styles && e.styles[a.id] && e.styles[a.id].title || a
.id, i && (l[r] = i + ": " + l[r]));
return l
}, o.removeStudyMetaInfo = function(t, e, i) {
var n = function(i) {
return void 0 !== (i = void 0 !== i ? i : o._findStudyMetaInfo(t, e.id)[0]) && (
t.splice(i, 1), defaults.remove(o.getStudyPropertyRootName(e)), !0)
};
if (t) return n(i);
throw Error("There are no studies metainfo")
}, o.getStudyPropertyRootName = function(t) {
var e = "study_" + t.id;
return t.pine && t.pine.version && (e += "_" + t.pine.version.replace(".", "_")), e
}, o.addOrReplaceStudyMetaInfo = function(t, e) {
var i, n, s, a, l = new o(e),
c = o._findStudyMetaInfo(t, l.id),
h = c[0],
u = c[1];
if (u) {
if (i = u.pine && u.pine.version, !(null == (n = l.pine && l.pine.version) ||
null == i || n >= i)) return l;
o.removeStudyMetaInfo(t, l, h)
} else o.removeStudyMetaInfo(t, l, h) && r.logDebug("Study with id=" + l.id +
" already exists in the model!");
return t.push(l), l.defaults && (s = TradingView.clone(l.defaults), s.precision =
"default", a = o.getStudyPropertyRootName(l), defaults.create(a, s)), l
}, o.overrideDefaults = function(t) {
null !== a && 0 !== t.length && s(a, t, function(t) {
return TradingView.defaultProperties["study_" + t] || null
})
}, o.setDefaultsOverrides = function(t) {
a = t
}, o.createMetaInfoStub = function(t, e) {
var i, o, r;
return n(TradingView.isExistent(t.scriptIdPart), "scriptIdPart is missing, study: " +
JSON.stringify(t)), i = t.extra && "strategy" === t.extra.kind || !0 === t
.isTVScriptStrategy, o = TVScript.createScriptStudyId(t.scriptIdPart, e, i), r = {
isTVScriptStubToCompile: !0,
id: o,
scriptIdPart: t.scriptIdPart,
description: t.scriptName,
TVScriptSourceCode: t.scriptSource,
is_hidden_study: t.extra && t.extra.is_hidden_study,
extra: t.extra,
version: e
}, r.pine = {},
r.pine.version = TradingView.isExistent(t.version) ? t.version : -1, r.pine.access =
TVScript.Access.MAP_ID_TO_NAME[t.access], r.pine.userHaveAccess = t.userHaveAccess,
!0 === i && (r.isTVScriptStrategy = !0), r
}, o.isScriptStrategy = function(t) {
if (t.extra && t.extra.kind) return t.extra.kind === TVScript.Kinds.STRATEGY;
if (!0 === t.isTVScriptStrategy) return !0;
var e = t.TVScriptSourceCode || t.scriptSource;
return !!e && TVScript.isStrategy(e)
}, o.replaceWithFullStudyMetaInfoAsync = function(t, e) {
var i = $.Deferred();
return e.isTVScriptStubToCompile || i.resolve(e), i.promise()
}, o.getOrderedInputIds = function(t) {
var e, i, o = [],
n = t.inputs;
for (e = 0; e < n.length; ++e) i = n[e], o.push(i.id);
return o
}, o.canBeChild = function(t) {
var e, i, n;
if (t && "string" == typeof t) return !0;
if (!t || t.extra && !o.isAllowedSourceInputsCount(t.extra.sourceInputsCount) || !0 ===
t.canNotBeChild || !1 === t.canBeChild || ~o.CHILD_STUDY_EXCLUDE_IDS.indexOf(t
.id) || t.isTVScriptStrategy || t.TVScriptSourceCode && TVScript.isStrategy(t
.TVScriptSourceCode)) return !1;
if (t.isTVScriptStubToCompile) return !0;
for (e = t.inputs, i = 0, n = 0; n < e.length; ++n) o.isSourceInput(e[n]) && ++i;
return o.isAllowedSourceInputsCount(i)
}, o.isAllowedSourceInputsCount = function(t) {
return 1 === t
}, o.canHaveChildren = function(t) {
if (t) {
if (t.isTVScriptStrategy || t.TVScriptSourceCode && TVScript.isStrategy(t
.TVScriptSourceCode)) return !1;
if (t.id && !~o.CHILD_STUDY_PARENT_EXCLUDE_IDS.indexOf(t.id) && Array.isArray(t
.plots))
for (var e = 0; e < t.plots.length; ++e)
if (~o.CHILD_STUDY_ALLOWED_PLOT_TYPES.indexOf(t.plots[e].type)) return !0
}
return !1
}, TradingView.StudyMetaInfo = o, void 0 !== e && e && e.exports && (e.exports = o)
}).call(e, i(25), i(42)(t))
}, function(t, e, i) {
"use strict";
var o, n, r, s;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = {}, n = RegExp("^([0-9]*)$"), r = RegExp("^(\\d*)([DWMS])$"), s = function() {
function t(e, i) {
if (void 0 === i && e !== t.INVALID) return t.parse(e);
var o = e;
o !== t.SECONDS && o !== t.MINUTES && o !== t.HOURS && o !== t.DAYS && o !== t.WEEKS &&
o !== t.MONTHS && o !== t.INVALID && (o = "invalid"), this._kind = o, this._multiplier =
i
}
return t.prototype.kind = function() {
return this._kind
}, t.prototype.multiplier = function() {
return this._multiplier
}, t.prototype.isValid = function() {
return this.kind() !== t.INVALID
}, t.prototype.isDWM = function() {
return this.isValid() && !this.isIntraday()
}, t.prototype.isIntraday = function() {
return -1 !== [t.SECONDS, t.MINUTES, t.HOURS].indexOf(this.kind())
}, t.prototype.letter = function() {
return this.isValid() && this.kind() !== t.MINUTES ? this.kind()[0].toUpperCase() : ""
}, t.prototype.value = function() {
return this.isValid() ? this.kind() === t.MINUTES ? this.multiplier() + "" : this
.multiplier() + this.letter() : ""
}, t.prototype.isEqualTo = function(e) {
if (!(e instanceof t)) throw Error("Argument is not an Interval");
return this.kind() !== t.INVALID && e.kind() !== t.INVALID && (this.kind() === e
.kind() && this.multiplier() === e.multiplier())
}, t.prototype.inMilliseconds = function(e) {
var i, n;
if (!this.isValid()) return NaN;
if (this.kind() === t.MONTHS) {
if (void 0 === e) throw Error("unixDateTimeFrom should be provided");
return i = new Date(e), i.setUTCMonth(i.getUTCMonth() + (this.multiplier() || 1)), +
i - e
}
return n = this.multiplier(),
void 0 === n ? NaN : o[this.kind()] * n
}, t.isEqual = function(e, i) {
return t.parse(e).isEqualTo(t.parse(i))
}, t.parse = function(e) {
var i, o;
return e = (e + "").toUpperCase().split(",")[0], i = {
D: t.DAYS,
W: t.WEEKS,
M: t.MONTHS,
H: t.HOURS,
S: t.SECONDS
}, (o = n.exec(e)) ? new t(t.MINUTES, parseInt(e, 10)) : (o = r.exec(e), o ? new t(
i[o[2]], parseInt(o[1], 10) ? parseInt(o[1], 10) : 1) : new t(t.INVALID))
}, t.isDWM = function(e) {
return t.parse(e).isDWM()
}, t.kind = function(e) {
return t.parse(e).kind()
}, t.isValid = function(e) {
return t.parse(e).isValid()
}, t.normalize = function(e) {
var i = new t(e);
return i.isValid() ? i.value() : null
}, t.SECONDS = "seconds", t.MINUTES = "minutes", t.HOURS = "hours", t.DAYS = "days", t
.WEEKS = "weeks", t.MONTHS = "months", t.INVALID = "invalid", t
}(), e.Interval = s, o[s.SECONDS] = 1e3, o[s.MINUTES] = 60 * o[s.SECONDS], o[s.HOURS] = 60 * o[s
.MINUTES], o[s.DAYS] = 24 * o[s.HOURS], o[s.WEEKS] = 7 * o[s.DAYS]
}, function(t, e, i) {
"use strict";
(function(e, o, n, r) {
function s(t, e, i, o) {
this._study = t, this.m_series = e, this.m_model = i, this._plotName = o, this._visible = !
1, this._points = [new Z(0, 0)], this._invalidated = !0, this._lineRenderer = new C
}
function a() {
return {
visible: !0,
color: "#0496FF",
linestyle: CanvasEx.LINESTYLE_SOLID,
linewidth: 2,
plottype: at.PlotType.Line,
histogramBase: 0,
transparency: 50,
trackPrice: !1,
joinPoints: !1
}
}
function l(t, e, i, o) {
var n, r;
return o.isTVScriptStrategy ? n = "StudyStrategy" : (r = "study_" + (o.classId || o
.shortId), n = r in TradingView ? r : "Study"), new TradingView[n](t, e, i, o)
}
function c(t, e, i, o, n) {
return h(t, e, i, o, st.getStudyPropertyRootName(t), n)
}
function h(t, e, i, o, n, r) {
var s, a, l, c, h, u = p(t, e, i, o);
for (r instanceof v && (s = st.getSourceInputIds(t), s.length > 0 && (a = s[0], u.inputs[
a] = "{pid}$0")), l = new J(n, u, !0), l.addExclusion("visible"), l.addExclusion(
"precision"), l.addExclusion("minTick"), c = 0; c < t.inputs.length; ++c) h = t
.inputs[c], h.isHidden && (l.addExclusion("inputs." + c), l.addExclusion("inputs." + h
.id));
return l
}
function u(t, e, i, o, n, r) {
return d(t, e, i, o, n, st.getStudyPropertyRootName(t), r)
}
function d(t, e, i, o, n, r, s) {
var a, l, c, h = _(t, e, i, o, n),
u = new J(r, h, !0);
for (u.addExclusion("visible"), u.addExclusion("precision"), u.addExclusion("minTick"), a =
e || t, l = 0; l < a.inputs.length; ++l) c = a.inputs[l], c.isHidden && (u.addExclusion(
"inputs." + l), u.addExclusion("inputs." + c.id));
return u
}
function p(t, o, n, r) {
var s, a, l, c, h, u, d, p, _ = i(84);
if (st.versionOf(t) < 1) throw Error(
"This function cannot work with metainfo of the old format version. Required format version >= 1"
);
return s = TradingView.clone(defaults("study")), f(s, t), a = st.getStudyPropertyRootName(
t), l = TradingView.clone(defaults(a, r)), t.isTVScript && t.TVScriptSourceCode !==
l
.TVScriptSourceCode && (l = TradingView.clone(TradingView.factoryDefaults(a, r))),
TradingView.merge(s, l), o && (S(!(o instanceof e),
"propsState should not be an instance of Property"), TradingView.merge(s, o)), c =
TradingView.clone(t), h = {}, _.mergeInputsObjPart(h, c.defaults.inputs), _
.mergeInputsObjPart(h, s.inputs), s.inputs = h, delete c.inputs, delete c.defaults
.inputs, u = {}, TradingView.merge(u, c.defaults), TradingView.merge(u, TradingView
.factoryDefaults("study_" + c.id)), TradingView.merge(u, s), TradingView.merge(u,
c), delete u.defaults, s = u,
d = null !== n ? n.model().getStudyShiftColorStartOffset() : void 0, p = m(n, t),
TradingView.merge(s, g(s, p, d)), o && TradingView.merge(s.styles, o.styles), s
}
function _(t, e, o, n, r) {
var s, a, l, c, h, u, d = i(84);
return t.version && o.version && t.version !== o.version && ct.logWarn(
"Serialized metaInfo version " + t.version +
" is not equal to the saved state version " + o.version), s = TradingView.clone(
defaults("study")), TradingView.merge(s, TradingView.factoryDefaults("study_" + t
.id)), f(s, t), TradingView.merge(s, o), s = r.updateStudyState(s, t, e), a =
TradingView.clone(e || t), a && st.versionOf(a) >= 1 && (l = {}, d.mergeInputsObjPart(l,
a.defaults.inputs), d.mergeInputsObjPart(l, s.inputs), s.inputs = l, delete a
.inputs, delete a.defaults.inputs, c = {}, TradingView.merge(c, a.defaults),
TradingView.merge(c, TradingView.factoryDefaults("study_" + a.id)), TradingView
.merge(c, s), delete a.defaults, TradingView.merge(c, a), s = c), h = null !== n ? n
.model().getStudyShiftColorStartOffset() : void 0, u = m(n, a), TradingView.merge(s, g(
s, u, h)), s
}
function f(t, e) {
var i, o, n, r;
if (e.plots)
for (i = 0; i < e.plots.length; i++) o = e.plots[i].id, (n = e.plots[i].type) !== at
.PlotTypes.COLORER && (r = a(), n === at.PlotTypes.COLORER && (r.transparency = 0),
r.plottype = n, r.title = o, t.styles && o in t.styles && TradingView.merge(r, t
.styles[o]), t.styles[o] = r)
}
function m(t, e) {
var i, o, n, r, s = 0;
if (t)
for (i = 0; i < t.dataSources().length; i++) o = t.dataSources()[i], o.metaInfo && o
.metaInfo() && (n = o.metaInfo().id === e.id, r = (o.metaInfo().pine && o.metaInfo()
.pine.version) === (e.pine && e.pine.version), n && r && s++);
return s
}
function g(t, e, i) {
var o, n;
if (!e) return t;
for (o in t.styles)(n = t.styles[o].color) && (t.styles[o].color = X(n, e, i));
return t
}
function v(t, e, r, s) {
var a, l, c, h, u, d, p, _, f, m, g = i(158);
for (this._titleCache = {}, this._resolvedSymbols = {}, this._priceAxisViewsBase = [], this
._paneViews = [], this._hlinesPriceAsisViews = [], this._horizlinesPriceAsisViews = [],
W.call(this, t), this.m_data = new ot, this._graphics = new q(s), this
._plotOffsets = {}, this._plotOffsetsMetaInfoOverride = {}, this._model = t, this
._chartApi = t._chartApi, this._series = r instanceof TradingView.Series ? r : this
._model.mainSeries(), r instanceof v && (this._source = r, this._isChildStudy = !0, this
._source.setChild(this)), this._numericFormatter = new et, this._metaInfo = s, this
._properties = e, this._properties.listeners().subscribe(this, this.changeStyles), this
._properties.visible.listeners().subscribe(this, this.visibleChanged), this._properties
.visible.listeners().subscribe(this, this.processHibernate), a = 0; a < this._metaInfo
.plots.length; a++) l = this._metaInfo.plots[a].id, null != (c = this.properties()
.styles[l]) && null != c.visible && c.visible.listeners().subscribe(this, this
.processHibernate);
for (h in this._metaInfo.graphics)
for (u in this._metaInfo.graphics[h]) d = this._properties.graphics[h][u], d.visible &&
d.visible.listeners().subscribe(this, this.processHibernate);
if (this._showStudyArgumentsProperty = this.model().properties().paneProperties
.legendProperties.showStudyArguments, this._turnaroundCounter = 1, this._turnaround =
"st" + this._turnaroundCounter, this._status = "", this._plotFields = [], p = this
.metaInfo().plots)
for (a = 0, _ = p.length; a < _; a++) u = p[a].id, this._plotFields.push(u);
this.clearData(), this._studyModified = !1, this._tagsChanged = new o, this.createViews(),
f = this, this._handler = function(t) {
f.onData(t)
}, this._handler.isTVScriptStrategy = this._metaInfo.isTVScriptStrategy, this
._createFormatter(), f = this, this._properties.precision.listeners().subscribe(null,
function() {
f._createFormatter(), f._model.invalidate(new G(G.FULL_UPDATE))
}), this._showStudyArgumentsProperty.listeners().subscribe(this, this
.invalidateTitleCache), this._properties.description.listeners().subscribe(this,
this.invalidateTitleCache), this._properties.shortDescription && this._properties
.shortDescription.listeners().subscribe(this, this.invalidateTitleCache), n.enabled(
"update_study_formatter_on_symbol_resolve") && t.mainSeries().onSymbolResolved()
.subscribe(this, v.prototype._createFormatter), f = this, m = {}, this
._simplePlotsCount = s.plots.filter(function(t, e) {
if (f.isLinePlot(e)) return !0;
if (f.isOHLCSeriesPlot(e)) {
var i = f.metaInfo().plots[e].target;
return !m[i] && (m[i] = i, !0)
}
return !1
}).length, this._properties.showInDataWindow.listeners().subscribe(t, g.prototype
.fullUpdate), this.hasBarColorer() && this._properties.visible.listeners()
.subscribe(t.mainSeries(), TradingView.Series.prototype.invalidateBarStylesCache), this
.onStart = new o, this._childStudyByRebind = new o
}
function y(t, e) {
return t && t[e] && t[e].hasOwnProperty("showLast") ? t[e].showLast.value() : null
}
var b = i(9),
S = b.assert,
w = b.ensureNotNull,
T = i(217).StudyBarColorer,
C = i(94).HorizontalLineRenderer,
x = i(787),
P = x.BandPaneView,
L = x.BandBackgroundPaneView,
I = x.HlineFillPaneView,
k = i(324).StudyPriceAxisView,
A = i(87),
M = A.StudyPaneView,
E = A.StudyBackgroundPaneView,
D = A.StudyPlotShapesPaneView,
V = A.StudyPlotCharsPaneView,
O = A.StudyPlotArrowsPaneView,
R = A.StudyPlotBarsPaneView,
B = A.StudyPlotCandlesPaneView,
z = i(805),
F = z.PlotFillPaneView,
N = z.AreaBackgroundPaneView,
W = i(46).PriceDataSource,
H = i(124),
U = i(125).StudyDataWindowView,
j = i(126),
q = i(219),
G = i(22),
Y = i(15).parseJSONorNot,
K = i(330).ChartApiInterface,
Z = i(8).Point,
X = i(32).shiftColor,
J = i(6).DefaultProperty,
Q = i(28).PriceFormatter,
tt = i(331).VolumeFormatter,
et = i(89).NumericFormatter,
it = i(19),
ot = it.PlotList,
nt = it.PlotRowSearchMode,
rt = it.mergeMinMax,
st = i(33),
at = i(111),
lt = i(3).propertyPages,
ct = i(7).getLogger("Chart.Study");
s.prototype.update = function() {
this._invalidated = !0
}, s.prototype.updateImpl = function() {
this._visible = !1;
var t = this._study.lastValueData(this._plotName, !0);
t.noData || (this._visible = !0, this._points = [new Z(0, t.coordinate)], this._color =
t.color)
}, s.prototype.renderer = function() {
this._invalidated && (this.updateImpl(), this._invalidated = !1);
var t = {};
return t.width = this.m_model.timeScale().width(), t.height = this._study.priceScale()
.height(), t.points = this._points, t.color = this._color, t.linewidth = this._study
.properties().styles[this._plotName].linewidth.value(), t.linestyle = CanvasEx
.LINESTYLE_DOTTED, t.visible = this._visible, this._lineRenderer.setData(t), this
._lineRenderer
}, inherit(v, W), TradingView.Study = v, i(918), v.prototype.lastValueData = function(t, e,
i) {
var o, n, r, s, a, l, c, h, u, d, p, _, f, m, g, v, y, b, S, w, T, C, x = {
noData: !0
};
if (this._model.timeScale().isEmpty() || null == this.priceScale() || this.priceScale()
.isEmpty() || this.data().isEmpty()) return x;
if (null === (o = this._model.timeScale().visibleBars())) return x;
if (!this.properties().visible.value()) return x;
if (n = this.properties().styles, r = this.properties().ohlcPlots, n && n[t] && (s = n[
t]), r && r[t] && (s = r[t]), !s || !s.visible.value()) return x;
if (a = this.offset(t), null == (l = this.nearestIndex(o.lastBar() - a, nt
.NearestLeft)) || void 0 === l) return x;
for (h = this.metaInfo().plots, c = 0; c < h.length && !(h[c].id === t || this
.isOHLCClosePlot(c) && h[c].target === t); c++);
if (u = this._lastNonEmptyPlotRow(c), d = null !== u && o.contains(u.index), p =
null !== u ? u.value : null, !(_ = e || d ? p : this.data().valueAt(l)) || !
isNumber(_[c + 1])) return x;
for (f = {
noData: !1
}, m = null, g = null, y = 0; y < h.length; y++) h[y].target === t && (this
.isSelfColorerPlot(y) || this.isOHLCColorerPlot(y)) && (m = y, g = this
.metaInfo().palettes[h[y].palette], v = this.properties().palettes[h[y].palette]
);
if (b = _[c + 1], i && (f.price = b), this.priceScale().properties().percentage
.value()) {
if (!(S = this.firstValue(!0))) return x;
b = this.priceScale().priceRange().convertToPercent(b, S)
}
return f.text = this.priceScale().formatter().format(b), w = s.color.value(), m && _
.length > m + 1 ? (T = _[m + 1], void 0 !== T && null !== T ? (C = g.valToIndex ? g
.valToIndex[T] : T, f.color = v.colors[C].color.value()) : f.color = w) : f
.color = w, f.floatCoordinate = this.priceScale().priceToCoordinate(b, !0), f
.coordinate = Math.round(f.floatCoordinate), f.item = _, f
}, v.prototype.series = function() {
return this._series
}, v.prototype.model = function() {
return this._model
}, v.prototype._invalidateLastNonEmptyPlotRowCache = function() {
this._lastNonEmptyPlotRowCache = {}
}, v.prototype.clearData = function() {
this._invalidateLastNonEmptyPlotRowCache(), this.m_data = new ot(this._plotFields), this
._graphics = new q(this._metaInfo), this._plotOffsets = {}
}, v.prototype.onTagsChanged = function() {
return this._tagsChanged
}, v.prototype.properties = function() {
return this._properties
}, v.prototype.state = function(t) {
var e, i, o, n, r = TradingView.className(this.constructor),
s = {
type: r,
id: this.id(),
state: this.properties().state(),
zorder: this.zorder()
};
for (this.metaInfo() instanceof st ? s.metaInfo = TradingView.clone(this.metaInfo()
.state()) : (s.metaInfo = TradingView.clone(this.metaInfo()), s.metaInfo.id = st
.parseIdString(s.metaInfo.id + (s.metaInfo.version ? "-" + s.metaInfo.version :
"")).fullId), t && (s.data = this.m_data.state(), s.data.symbols = this
._resolvedSymbols, s.data.graphics = this._graphics.graphics(), s.data
.plotOffsets = this._plotOffsets), this.ownerSource() && (s.ownerSource = this
.ownerSource().id()), e = 0; e < this._metaInfo.inputs.length; e++)
"bar_time" === this._metaInfo.inputs[e].type && (i = this._metaInfo.inputs[e].id, (
o = s.state.inputs[i]) < 0 && (n = this._rightOffsetToUnixTime(-o), s.state
.inputs[i] = n && n >= 0 ? n : 0));
return this._isChildStudy && st.patchChildStudyMetaInfoState(s), s
}, v.prototype._plotsForAlert = function() {
var t = this,
e = this._metaInfo,
i = [at.PlotTypes.LINE, at.PlotTypes.SHAPES, at.PlotTypes.CHARS, at.PlotTypes
.ARROWS, at.PlotTypes.OHLC_OPEN, at.PlotTypes.OHLC_HIGH, at.PlotTypes.OHLC_LOW,
at.PlotTypes.OHLC_CLOSE
];
return e.plots.map(function(t, e) {
return t.pinePlotIndex = e, t
}).filter(function(t) {
return -1 !== i.indexOf(t.type)
}).map(function(i) {
var o = {
id: i.id,
type: i.type,
pinePlotIndex: i.pinePlotIndex,
offset: t.offset(i.id)
};
return e.styles && void 0 !== e.styles[i.id] && (o.title = e.styles[i.id]
.title || ""), i.target && e.ohlcPlots && e.ohlcPlots[i.target] && (
o.ohlcTitle = e.ohlcPlots[i.target].title), o
})
}, v.prototype.isSavedInStudyTemplates = function() {
for (var t = 0; t < this._metaInfo.inputs.length; t++)
if ("bar_time" === this._metaInfo.inputs[t].type) return !1;
return !0
}, v.prototype.restoreData = function(t) {
this._invalidateLastNonEmptyPlotRowCache(), this.m_data.restoreState(t), this
._resolvedSymbols = t.symbols, this._graphics.setGraphics(t.graphics), this
._postProcessGraphics(), this._plotOffsets = t.plotOffsets
}, v.prototype.restart = function() {
this._restarting = !0, this.clearData(), n.enabled("stop_study_on_restart") && this
.stop(), setTimeout(this.start.bind(this), 0)
}, v.prototype.stop = function(t) {
if (!0 === t && this._children)
for (var e = 0; e < this._children.length; ++e) this._children[e].stop(!0);
this._chartApi && this._chartApi.connected() && this._studyId && this._chartApi
.removeStudy(this._studyId, this._handler, this._isChildStudy), n.enabled(
"update_study_formatter_on_symbol_resolve") && this._model.mainSeries()
.onSymbolResolved().unsubscribe(this, v.prototype._createFormatter), this._studyId =
null, this.clearData(), this._unsubscribeExtendedHours(), this.recalculate()
}, v.prototype._resolveSymbol = function(t) {
var e = function e(i, o) {
this._chartApi.resolveSymbol(this._makeNextSymbolId(), i, function(i) {
switch (i.method) {
case "symbol_resolved":
this._resolvedSymbols[t] = i.params[1], this
.invalidateTitleCache(!0), o.resolve(t);
break;
case "symbol_error":
if ("permission denied" === i.params[1] && i.params[2])
switch (i.params[2]) {
case TradingView.Series.PD_REASON_EXTENDED_HOURS:
break;
case TradingView.Series.PD_REASON_SYMBOL:
if (i.params[3]) return void e(i.params[3], o);
break;
default:
return void e(i.params[2], o)
}
o.reject(t)
}
}.bind(this))
}.bind(this),
i = $.Deferred();
return e(t, i), i.promise()
}, v.prototype._allSymbolsAreResolved = function() {
var t, e, i, o, n = $.Deferred(),
r = [];
for (t = 0; t < this._metaInfo.inputs.length; t++) "symbol" === this._metaInfo.inputs[t]
.type && (e = this._metaInfo.inputs[t].id, i = this._properties.inputs[e].value(),
this._resolvedSymbols[i] || (o = this._resolveSymbol(i), r.push(o)));
return r.length > 0 ? $.when.apply($, r).done(function() {
0 !== this._studyId && this.stop(!0), this.start(!0), n.resolve(
"All symbols are resolved now")
}.bind(this)).fail(function(t) {
this._status = $.t("Invalid Symbol"), this.stop(!0), this._model
.updateSource(this), n.reject("Invalid symbol, " + t)
}.bind(this)) : n.resolve("There are no symbols to resolve"), n.promise()
}, v.prototype._allInputsAreValid = function() {
var t, e, i;
for (t = 0; t < this._metaInfo.inputs.length; t++)
if ("bar_time" === this._metaInfo.inputs[t].type && (e = this._metaInfo.inputs[t]
.id, void 0 === (i = this._properties.inputs[e].value()) || null == i))
return !1;
return !0
}, v.prototype.sourceId = function() {
return this._studyId
}, v.prototype.source = function() {
return this._source || this._series
}, v.prototype.ownerSource = function() {
return this._isChildStudy ? this._source : W.prototype.ownerSource.call(this)
}, v.prototype.getAllOwnerSources = function() {
for (var t = [], e = this.ownerSource(); null != e;) t.push(e), e = e.ownerSource();
return t
}, v.prototype.isChildStudy = function() {
return !!this._isChildStudy
}, v.prototype.setChild = function(t) {
t instanceof v && t.source() === this && (this._children || (this._children = []), -
1 === this._children.indexOf(t) && this._children.push(t))
}, v.prototype.unsetChild = function(t) {
if (t instanceof v && t.source() === this && this._children) {
var e = this._children.indexOf(t);
~e && this._children.splice(e, 1)
}
}, v.prototype.hasChildren = function() {
return !(!this._children || !this._children.length)
}, v.prototype.getAllChildren = function() {
var t, e, i, o;
if (!Array.isArray(this._children)) return [];
for (t = this._children.slice(), e = 0; e < t.length; ++e)
for (i = t[e].getAllChildren(), o = 0; o < i.length; ++o) ~t.indexOf(i[o]) || t
.push(i[o]);
return t
}, v.prototype._debugId = function() {
var t = [];
return this._studyId && t.push(this._studyId), t.push(this._metaInfo.fullId), t.push(
this._metaInfo.description), JSON.stringify({
study: t
})
}, v.prototype.isStarted = function() {
return !!this._studyId
}, v.prototype.isRestarting = function() {
return !!this._restarting
}, v.prototype.isVisible = function() {
var t, e, i;
if (!this.properties().visible.value()) return !1;
if (this._metaInfo.plots.length > 0) return !0;
for (t in this._metaInfo.graphics)
for (e in this._metaInfo.graphics[t])
if (i = this.properties().graphics[t][e], !i.visible || i.visible.value())
return !0;
return !!this._metaInfo.isTVScriptStrategy
}, v.prototype.start = function(t, e) {
var i, o = this._model.mainSeries();
if (!o.isStarted()) return void o.onCompleted().subscribe(this, function() {
this.start(t, e)
}, !0);
this._isChildStudy && this._source.isHibernated() && this._source.start(), i = !this
._isChildStudy && !this.hasChildren() && !this.isVisible(), !this._chartApi || !this
._chartApi.connected() || i && !0 !== e || this._allSymbolsAreResolved().done(
function(i) {
this._startAfterSymbolsResolved(t, e)
}.bind(this)).fail(function(t) {
ct.logError("ERROR: " + this._debugId() + " start failed, " + t),
delete this._restarting
}.bind(this))
}, v.prototype._getStudyIdWithLatestVersion = function() {
var t = st.cutDollarHash(this._metaInfo.id),
e = t;
return ["Script@tv-scripting", "StrategyScript@tv-scripting", "ESD@tv-scripting"]
.indexOf(t) >= 0 ? e += "-72!" : e += "-" + this._metaInfo.version, e
}, v.prototype._startAfterSymbolsResolved = function(t, e) {
var i, o;
if (!this.isStarted() || this._restarting) {
if (this._isChildStudy) {
if (!this._source.isStarted() || this._source.isRestarting()) return void this
._source.onStart.subscribe(this, this._startAfterSymbolsResolved, !0);
st.setChildStudyMetaInfoPropertiesSourceId(this._metaInfo, this._source
.sourceId(), this._properties)
}
if (this._studyId = v.makeNextStudyId(), delete this._restarting, this
._allInputsAreValid() && (this._inputs = this.inputs(), i = this
._getStudyIdWithLatestVersion(), this._chartApi.createStudy(this._studyId,
this._turnaround, this._isChildStudy ? this._source.sourceId() : this
._series._seriesId, i, this._inputs, this._handler, this._isChildStudy),
this._studyName = i, this._subscribeExtendedHours(),
this.onStart.fire(this._studyId), !0 === t && this._children))
for (o = 0; o < this._children.length; ++o) this._children[o].start(!0, e)
}
}, v._nextSymbolId = 0, v.prototype._makeNextSymbolId = function() {
return "ss_" + ++v._nextSymbolId
}, v._nextStudyId = 0, v.makeNextStudyId = function() {
return "st" + ++v._nextStudyId
}, v.prototype._rightOffsetToUnixTime = function(t) {
var e;
return this._series.bars().size() >= t && (e = w(this._series.bars().lastIndex()) - t,
w(this._series.bars().valueAt(e))[TradingView.TIME_PLOT]), null
}, v.prototype.getSymbolString = function(t) {
return this._series && this._series.extendedHours.value() ? "=" + JSON.stringify({
symbol: t,
session: "extended"
}) : t
}, v.prototype.inputsForGUI = function() {
return this.inputs({
symbolsForDisplay: !0,
skipHiddenInputs: !0,
skipFakeInputs: !1,
fakeInputsForDisplay: !0,
asObject: !1
})
}, v.prototype.inputsForAlert = function() {
var t = this.offset(),
e = this.inputs();
return t && e.push(t), e
}, v.prototype.inputs = function(t) {
var e = {
symbolsForDisplay: !1,
symbolsForChartApi: !0,
skipHiddenInputs: !1,
skipFakeInputs: !1,
asObject: !0
};
return TradingView.merge(e, t), this._buildInputs(e)
}, v.prototype._buildInputs = function(t) {
var e, i;
S(!!t, "options not set"), e = {};
try {
e = this._prepareInputs(t)
} catch (t) {
ct.logWarn("Failed to prepare study inputs: " + t)
}
return t.asObject ? (i = {}, Object.keys(e).forEach(function(t) {
null != e[t] && (i[t] = e[t])
}), i) : (i = [], Object.keys(e).forEach(function(t) {
null != e[t] && i.push(e[t])
}), i)
}, v.prototype._prepareInputs = function(t) {
var e, i, o, r;
for (S(!!t, "options not set"), e = {}, i = 0; i < this._metaInfo.inputs.length; i++)
o = this._metaInfo.inputs[i], o.isFake && t.skipFakeInputs || o.isHidden && t
.skipHiddenInputs || "bool" === o.type && t.skipHiddenInputs && n.enabled(
"dont_show_boolean_study_arguments") || (r = this._prepareInput(o, t), e[o.id] =
TradingView.clone(r));
return e
}, v.prototype._prepareInput = function(t, e) {
var i = this._prepareInputValue(t, e);
return !t.isFake || e.fakeInputsForDisplay ? i : e.onlyAtomValues ? i : {
v: i,
f: !0,
t: t.type
}
}, v.prototype._prepareInputValue = function(t, e) {
var i, o, n, r, s = t.id;
return "symbol" === t.type ? (i = this._properties.inputs[s].value(), e && e
.symbolsForDisplay ? this._resolvedSymbols && this._resolvedSymbols[i] && (i =
this._resolvedSymbols[i].exchange ? this._resolvedSymbols[i].name + ", " +
this._resolvedSymbols[i].exchange : this._resolvedSymbols[i].name) : (this
._resolvedSymbols && this._resolvedSymbols[i] && (o = this._resolvedSymbols[
i], i = o.ticker || o.full_name), e && e.symbolsForChartApi && (i = this
.getSymbolString(i))), i) : "bar_time" === t.type ? (n = this
._properties.inputs[s].value(), n < 0 && (r = this._rightOffsetToUnixTime(-n),
n = r && r >= 0 ? r : n), n) : this._metaInfo.isTVScript || this._metaInfo
.pine ? "text" === s ? this._metaInfo.defaults.inputs.text : "pineId" === s ? this
._metaInfo.scriptIdPart : "pineVersion" === s ? this._metaInfo.pine ? this._metaInfo
.pine.version : "-1" : this._properties.inputs[s].value() : this._properties.inputs[
s].value()
}, v.prototype._rebindToSource = function(t, e) {
var i, o, n, r, s, a, l, c, h, u, d;
if (this._isChildStudy) {
if (this._source.unsetChild(this), delete this._nonPriceParent, o = null, t === this
._model.mainSeries()) {
for (n = this._model.studiesMetaData(),
s = 0; s < n.length; ++s)
if (this._metaInfo.id === n[s].id) {
r = n[s];
break
} if (!r) return void ct.logError("Can not find " + this._metaInfo.id +
" meta info");
delete this._source, delete this._isChildStudy, delete this._ownerSource, this
._metaInfo = r.state(!0), i = this._series._seriesId, o = K
.REBIND_STUDY_CHILD_TO_STANDALONE
} else {
if (!(t instanceof v)) return ct.logError(
"Unable to rebind study to source of this type"), !1;
this._ownerSource = t, this._source = t, i = this._source.sourceId(), this
._source.setChild(this), this._source.isHibernated() && this._source.start()
}
this._chartApi.rebindStudy(this._studyId, this._turnaround, i, this._studyName, e,
this._handler, o)
} else {
if (!(t instanceof v)) return ct.logError(
"Unable to rebind study to source of this type"), !1;
if (a = t.isHibernated(), a && t.start(), l = !1, this
._canCreateStudyWithRebindType(K.REBIND_STUDY_STANDALONE_TO_CHILD) && (l = this
._chartApi.rebindStudy(this._studyId, this._turnaround, t.sourceId(), this
._studyName, e, this._handler, K.REBIND_STUDY_STANDALONE_TO_CHILD)), !l)
return a && t.stop(), !1;
this._metaInfo = TradingView.clone(this._metaInfo), this._isChildStudy = !0, this
._ownerSource = t, this._source = t, this._source.setChild(this), this
._childStudyByRebind.fire()
}
return c = this.m_priceScale, h = t.priceScale(), c !== h && (u = this._model
.paneForSource(this), d = this._model.paneForSource(t), u === d && (~c
.dataSources().indexOf(this) && c.removeDataSource(this), h.addDataSource(
this), this.setPriceScale(h))), !0
}, v.prototype.childStudyByRebind = function() {
return this._childStudyByRebind
}, v.prototype._changeInputsImpl = function(t, e) {
var i, o, n, r, s = this.source(),
a = this._properties.inputs && this._properties.inputs.state(),
l = st.getSourceIdByInputs(this._metaInfo.inputs, a),
c = !0;
if (l)
if ("high" === l || "open" === l || "low" === l || "close" === l || "hl2" === l ||
"ohl3" === l || "ohlc4" === l) s = this._model.mainSeries();
else
for (i = this._model.dataSources(), o = 0; o < i.length; ++o)
if (i[o] instanceof v && i[o].sourceId() === l) {
s = i[o];
break
} if (s !== this.source()) {
if (!this._rebindToSource(s, t) && a) {
for (n = null, r = null, o = 0; o < e.length; ++o)
if (e[o] !== t[o] && 0 === t[o].indexOf(l)) {
n = this._properties.inputs[a[o].id], r = e[o], c = !1;
break
} n && n.setValue(r)
}
} else this._chartApi.modifyStudy(this._studyId, this._turnaround, t, this._handler);
c && (this._studyModified = c)
}, v.prototype._changeInputs = function(t) {
var e = TradingView.clone(this._inputs);
this._studyId && this._chartApi.connected() ? (this._turnaround = "st" + ++this
._turnaroundCounter, this._allInputsAreValid() ? this._allSymbolsAreResolved()
.done(this._changeInputsImpl.bind(this, t, e)).fail(function(t) {
ct.logError("ERROR: " + this._debugId() +
" _changeInputs: cannot modify study, " + t)
}.bind(this)) : this.stop()) : (this.stop(!0), this.start(!0)), this._inputs =
t, this._tagsChanged.fire(), this._titleCache = {}
}, v.prototype.testInputValue = function(t, e) {
var i, o;
return !st.canBeChild(this._metaInfo) || !st.isSourceInput(t) || (!(i = this._properties
.inputs && this._properties.inputs[t.id]) || (o = v.getInputRebindType(t, i
.value(), e), !!this._canCreateStudyWithRebindType(o)))
}, v.prototype._canCreateStudyWithRebindType = function(t) {
return t !== K.REBIND_STUDY_STANDALONE_TO_CHILD || this._chartApi.isCanCreateStudy(!0)
}, v.prototype.changeStyles = function() {
var t, e = null != this._metaInfo.inputs.filter(function(t) {
return "symbol" === t.type
})[0];
!this.isStarted() && !e || this._restarting || (this._inputs ? (t = this.inputs(), JSON
.stringify(t) !== JSON.stringify(this._inputs) && this._changeInputs(t)) :
this._chartApi && this._chartApi.connected() && this.restart(), this
.hasBarColorer() && this._model.mainSeries().invalidateBarStylesCache(), e &&
this.invalidateBarStylesCache(), this.createViews(), this.recalculate(!0), this
.updateAllViews())
}, v.prototype._isModifiedStudyInputs = function(t) {
if (void 0 === this._oldStudyInputs) return this._oldStudyInputs = t, !0;
var e = Object.keys(this._oldStudyInputs);
return S(e.length === Object.keys(t).length, "keys quantity should be equal"), e
.forEach(function(e) {
S(t.hasOwnProperty(e), "key '" + e + "' should existing in studyInputs"),
this._oldStudyInputs[e] !== t[e] && (this._oldStudyInputs = t)
}, this), this._oldStudyInputs === t
}, v.prototype.visibleChanged = function() {
this._series instanceof TradingView.Series && this._series.invalidateBarColorerCache()
}, v.prototype.invalidateBarStylesCache = function() {
this.m_data.each(function(t, e) {
e[TradingView.STYLE_PLOT] = null
})
}, v.prototype.processHibernate = function() {
this.isHibernateAllowed() && (!this._studyId && this.isVisible() && this.start(), this
._studyId && !this.isVisible() && this.stop())
}, v.prototype.isHibernated = function() {
return !this.isVisible() && !this._studyId
}, v.prototype.isHibernateAllowed = function() {
return !this._isChildStudy && !this.hasChildren()
}, v.prototype.lastPriceLabelFixedCoordinate = function(t) {
return this._priceAxisViewsCache[t]._fixedCoordinate
}, v.prototype.priceLabelText = function(t) {
var e, i, o, n;
return 1 === this._simplePlotsCount ? this._metaInfo.shortDescription : (e = this
._metaInfo.styles, i = this._metaInfo.ohlcPlots, e && e[t] && (o = e[t]), i &&
i[t] && (o = i[t]), n = o.title, this._metaInfo.is_price_study ? this._metaInfo
.shortDescription + ":" + n : n)
}, v.prototype.createPlotLabels = function(t) {
for (var e = 0; e < t.length; e++) this._paneViews.push(new H(this._model, this, t[e],
"priceLabelText", "showStudyPlotLabels"))
}, v.prototype.createViews = function() {
var t, e, i, o, n, r, a, l, c, h, u, d, p;
if (this._priceAxisViewsBase = [], this._paneViews = [], t = {}, this
._priceAxisViewsCache = {}, e = [], this.metaInfo().plots)
for (i = 0; i < this.metaInfo().plots.length; i++)
if (!(this.isSelfColorerPlot(i) || this.isTextColorerPlot(i) || this
.isBarColorerPlot(i) || this.isOHLCColorerPlot(i)))
if (o = this.metaInfo().plots[i].id, this.isBgColorerPlot(i)) this
._paneViews.push(new E(this, this._series, this._model, o));
else if (this.isPlotShapesPlot(i)) this._paneViews.push(new D(this, this
._series, this._model, o));
else if (this.isPlotCharsPlot(i)) this._paneViews.push(new V(this, this._series, this
._model, o));
else if (this.isPlotArrowsPlot(i)) this._paneViews.push(new O(this, this._series, this
._model, o));
else if (this.isOHLCSeriesPlot(i)) {
if (n = this.metaInfo().plots[i].target, t[n]) continue;
t[n] = n,
this.isOHLCBarsPlot(i) ? this._paneViews.push(new R(this, this._series, this
._model, n)) : this.isOHLCCandlesPlot(i) && this._paneViews.push(new B(this,
this._series, this._model, n)), r = new k(this, {
plotIndex: n
}), this._priceAxisViewsCache[n] = r, this._priceAxisViewsBase.push(r), e.push(
n)
} else r = new k(this, {
plotIndex: o
}), this._priceAxisViewsCache[o] = r, this._priceAxisViewsBase.push(r), this
._paneViews.push(new M(this, this._series, this._model, o)), this.properties()
.styles[o].trackPrice.value() && this._paneViews.push(new s(this, this._series, this
._model, o)), e.push(o);
if (this._properties.bands)
for (i = 0; i < this._properties.bands.childCount(); i++) this._properties.bands[i]
.visible.value() && this._paneViews.push(new P(this._properties.bands[i],
this));
this._properties.bandsBackground && this._paneViews.push(new L(this)), a = [], this
.metaInfo().graphics && (a = Object.keys(this.metaInfo().graphics), a.sort(function(
t, e) {
return v.graphicsZOrderPriority(t) - v.graphicsZOrderPriority(e)
}));
for (l in a) c = a[l], h = "_paneView" + c, u = "StudyPaneView_" + c, TradingView.Study[
u] && (this[h] = new TradingView.Study[u](this, this._model), this._paneViews
.push(this[h])), this._dataWindowView || "hhists" !== c || (this
._dataWindowView = new TradingView.StudyHHistsDataWindowView(this, this._model));
if (this._properties.areaBackground && this._paneViews.push(new N(this)), this
._properties.filledAreas && this._metaInfo.filledAreas)
for (i = 0; i < this._metaInfo.filledAreas.length; ++i) d = this._metaInfo
.filledAreas[i], p = this._properties.filledAreasStyle[d.id], d.type === st
.FilledArea.TYPE_PLOTS || d.palette ? this._paneViews.push(new F(this, d, p)) :
d.type === st.FilledArea.TYPE_HLINES ? this._paneViews.push(new I(this, d, p)) :
ct.logWarn("Unsupported filledArea type: " + d.type);
this.createPlotLabels(e), this._dataWindowView || (this._dataWindowView = new U(this,
this._model)), this._statusView || (this._statusView = new j(this, this._model
.properties())), this._priceAxisViews = [].concat(this._priceAxisViewsBase, this
._hlinesPriceAsisViews, this._horizlinesPriceAsisViews)
}, v.prototype.recalculate = function(t) {
var e = this._model.paneForSource(this);
this._model.recalculatePane(e, t), this._model.updateSource(this)
}, v.prototype.data = function() {
return this.m_data
}, v.prototype.metaInfo = function() {
return this._metaInfo
}, v.prototype.status = function() {
return this._status
}, v.prototype.title = function(t, e, i) {
var o, n = JSON.stringify([t, e, i]);
return this._titleCache[n] ? this._titleCache[n] : (o = this._title(t, e, i || !this
._showStudyArgumentsProperty.value()), this._titleCache[n] = o, o)
}, v.prototype._title = function(t, e, i) {
var o, n, r, s, a, l, c, h, u, d, p, _, f;
if (o = t ? this._metaInfo.shortDescription || this._properties.shortDescription && this
._properties.shortDescription.value() || "Study" : this._metaInfo.description ||
this._properties.description && this._properties.description.value() || "Study", e =
e || {}, o = $.t(o), !i && (n = this.inputsForGUI() || [], n.length > 0)) {
if (r = {}, this._isChildStudy)
for (s = 0; s < this._metaInfo.inputs.length; ++s)
if (a = this._metaInfo.inputs[s], st.isSourceInput(a)) {
l = a.id, c = this._properties.inputs[l].value(), c.indexOf("$") >= 0 &&
this._source && (h = this._source.metaInfo(),
u = this._source.title(t, null, !0), 1 === h.plots.length ? r[
c] = u : (d = c.split("$")[1], p = h.plots[d].id, _ = h
.styles && h.styles[p] && h.styles[p].title || p, r[c] = u +
": " + _));
break
} f = this, n = n.map(function(t) {
var i = isNumber(t) ? f._numericFormatter.format(t) : r && r[t] || t;
return e[i] && (i = e[i]), i
}), o += " (" + n.join(", ") + ")"
}
return o
}, v.prototype.invalidateTitleCache = function(t) {
if (this._titleCache = {}, !0 === t && this._children)
for (var e = 0; e < this._children.length; ++e) this._children[e]
.invalidateTitleCache(t)
}, v.prototype.graphics = function() {
return this._graphics.graphics()
}, v.prototype.turnaround = function(t) {
return !0 === t ? this.source().turnaround(!0) + "_" + this._turnaround : this
._turnaround
}, v.prototype._checkTurnaround = function(t) {
return t === this._turnaround || t === this._model.mainSeries().turnaround() || t ===
this.turnaround(!0)
}, v.prototype._makeJSONForNSData = function(t, e) {
var i = "" !== t.params.nonseries.d ? Y(t.params.nonseries.d) : e || "";
return Promise.resolve(i)
}, v.prototype.onData = function(t) {
var e, i, o, n, r = this;
switch (t.method) {
case "study_loading":
this._status = $.t("loading..."), this._failed = !1, this._statusView.update(),
this._model.updateSource(this), -1 === ["Plot splits", "Plot earnings",
"Plot dividends"
].indexOf(r._metaInfo.description) && (r._loadingStartTime = (new Date)
.getTime());
break;
case "study_error":
delete this._loadingStartTime, this._failed = !0, this.clearData(), "string" ==
typeof t.params[2] ? this._status = $.t(t.params[2].split(":", 2)[0]) : this
._status = "", this._statusView.update(), this._model.updateSource(this);
break;
case "study_completed":
if (!this._checkTurnaround(t.params[1])) return Promise.resolve();
e = "chartSession:" + r._chartApi._sessionid, i = (new Date).getTime() - this
._loadingStartTime, ct.logDebug(e + ", Study " + this._metaInfo
.description + " loading took " + i + " ms"), delete this
._loadingStartTime, this._status = "", this._statusView.update(), o = this
._model.paneForSource(this), this._model.recalculatePane(o), this
._updateSources(), this._model.invalidate(new G(G.FULL_UPDATE));
break;
case "study_deleted":
break;
case "data_update":
return this._checkTurnaround(t.params.turnaround) ? (this._studyModified && (
this.clearData(), this._studyModified = !1), n = 0 === this.m_data
.size() && this._metaInfo.plots.length > 0, S(!!t.params.nonseries,
"data.params.nonseries is missing"), new Promise(function(e) {
r._makeJSONForNSData(t).then(function(i) {
var o, s;
t.params.nonseries.d = i, r._processPlotOffsets(t
.params), r.transformData(t.params.plots),
o = r._mergeData(t.params.plots).earliestRow, r
.hasBarColorer() && (null !== o ? r._model
.mainSeries().invalidateBarStylesCache(o
.index) : ct.logNormal(
"ERROR: No earliestRow in studies plots, " +
r._debugId())), r._graphics.process(t
.params.nonseries), r
._postProcessGraphics(), s = r._model
.paneForSource(
r), r._model.recalculatePane(s, n), r
._updateSources(), e()
})
})) : Promise.resolve()
}
return Promise.resolve()
}, v.prototype.transformData = function(t) {}, v.prototype.moveData = function(t) {
this._invalidateLastNonEmptyPlotRowCache(), this.m_data.move(t)
}, v.prototype.replaceData = function(t, e, i) {
this._invalidateLastNonEmptyPlotRowCache(), this.m_data.remove(t + 1), this.m_data
.addTail(i, e)
},
v.prototype._updateSources = function() {
this._model.updateSource(this), this.hasBarColorer() && this._model.updateSource(this
._model.mainSeries())
}, v.processPlotOffsets = function(t, e) {
if (!e.nonseries || "nochange" !== e.nonseries.indexes) {
var i = e.nonseries.d;
if (!i || !i.indexes_replace) return i && i.offsets ? void(t._plotOffsets = i
.offsets) : void(t._plotOffsets = {})
}
}, v.prototype._processPlotOffsets = function(t) {
v.processPlotOffsets(this, t)
}, v.prototype._mergeData = function(t) {
return this._invalidateLastNonEmptyPlotRowCache(), this.m_data.merge(t)
}, v.prototype._postProcessGraphics = function() {
var t = this,
e = function(e) {
var i, o, n, r, s = t._graphics.graphics(),
a = [];
if (s && s[e])
for (n = s[e], i = 0; i < n.length; i += 1)
if (n[i].data)
for (o = 0; o < n[i].data.length; o += 1) r = {
line: n[i].data[o],
styleId: n[i].styleId,
lineType: e
}, a.push(new v.StudyPriceAxisView_hlines(t, r));
return a
};
this._hlinesPriceAsisViews = e("hlines"), this._horizlinesPriceAsisViews = e(
"horizlines"), this._priceAxisViews = [].concat(this._priceAxisViewsBase, this
._hlinesPriceAsisViews, this._horizlinesPriceAsisViews)
}, v.prototype._getNonPriceParent = function() {
var t, e;
if (this._nonPriceParent) return this._nonPriceParent;
for (t = this.source(); t instanceof v;) {
if (e = t.metaInfo(), !e.is_price_study || "Compare@tv-basicstudies" === e.id)
return this._nonPriceParent = t, t;
t = t.source()
}
}, v.prototype.firstValue = function(t) {
var e, i, o, n, r, s;
return !this._isChildStudy && "Compare@tv-basicstudies" === this._metaInfo.id || !this
._metaInfo.is_price_study ? null === (e = this._model.timeScale().visibleBars()) ?
null : (i = e.firstBar(), o = e.lastBar(), 0 === this.m_data.size() ? null : (r =
this, this.m_data.range(i, o).each(function(e, i) {
var o, s, a;
for (o = 1; o < i.length; ++o)
if (void 0 !== i[o - 1] && null !== i[o - 1] && !r
.isSelfColorerPlot(o - 1) && (s = r._metaInfo.plots[o - 1]
.id, a = r.properties().styles[s], a.visible && a
.visible.value() && !(t && Math.abs(i[o]) < 1e-10 ||
void 0 === i[o] || null === i[o] || n))) return n =
i[o], !0
}), this._nonPriceFirstValue = n, n)) : this._isChildStudy && (s = this
._getNonPriceParent()) && this.priceScale() === s.priceScale() ? void 0 !== s
._nonPriceFirstValue ? s._nonPriceFirstValue : s.firstValue() : this._series
.firstValue()
}, v.offset = function(t, e) {
var i = 0;
return t._plotOffsets && void 0 !== t._plotOffsets[e] && (i += t._plotOffsets[e]),
void 0 !== t._plotOffsetsMetaInfoOverride[e] ? i += t._plotOffsetsMetaInfoOverride[
e] : t.properties().offsets && void 0 !== t.properties().offsets[e] && (i += t
.properties().offsets[e].val.value()), t.properties().offset && (i += t
.properties().offset.val.value()), i
}, v.prototype.offset = function(t) {
return v.offset(this, t)
}, v.prototype.priceRange = function(t, e) {
var i, o, n, s, a, l, c, h, u, d, p, _, f, m, g, v, y, b, S, w;
if (!TradingView.isInteger(t)) return void ct.logDebug(
"priceRange: incorrect startBar");
if (!TradingView.isInteger(e)) return void ct.logDebug("priceRange: incorrect endBar");
if (0 === this.m_data.size()) return null;
if (i = null, o = this, n = o._metaInfo, 0 === n.plots.length) return null;
for (a = [], c = 0; c < n.plots.length; ++c)
if (!(o.isSelfColorerPlot(c) || o.isTextColorerPlot(c) || o.isBarColorerPlot(c) || o
.isBgColorerPlot(c) || o.isOHLCColorerPlot(c)) && (h = n.plots[c].id, o
.isOHLCSeriesPlot(c) ? (d = n.plots[c].target,
u = o.properties().ohlcPlots[d]) : u = o.properties().styles[h], u
.visible.value() && (l = null, u.location && (l = u.location.value()), s ||
(p = [CanvasEx.MARKLOC_ABSOLUTE, CanvasEx.MARKLOC_TOP, CanvasEx
.MARKLOC_BOTTOM
].indexOf(l) < 0, _ = o.isPlotShapesPlot(c) || o.isPlotCharsPlot(c),
s = _ && p || o.isPlotArrowsPlot(c)), o.isLinePlot(c) || (o
.isPlotShapesPlot(c) || o.isPlotCharsPlot(c)) && u.location
.value() === CanvasEx.MARKLOC_ABSOLUTE || o.isOHLCSeriesPlot(c)))) {
if (f = {
index: c + 1,
offset: o.offset(h)
}, m = o.properties().styles[h].plottype.value(), !o.properties()
.skipHistogramBaseOnAutoScale && [at.PlotType.Histogram, at.PlotType
.Columns, at.PlotType.Area
].indexOf(m) >= 0) {
if (g = o.properties().styles[h].histogramBase.value(), !isNumber(g))
continue;
f.baseValue = g
}
a.push(f)
} if (v = o.m_data.minMaxOnRange2(t, e, a), s && (a = [{
index: TradingView.LOW_PLOT,
offset: 0
}, {
index: TradingView.HIGH_PLOT,
offset: 0
}], y = o.series().data().bars().minMaxOnRange2(t, e, a), v = rt(v, y)), null !==
v && (i = new r(v.min, v.max)), n.bands)
for (c = 0; c < n.bands.length; c++)
if (o.properties().bands[c].visible.value()) {
if (g = o.properties().bands[c].value.value(), !isNumber(g)) continue;
i ? i.apply(g, g) : i = new r(g, g)
} return i && i.minValue() === i.maxValue() && (b = .005 * i.minValue(), i =
new r(i.minValue() - b, i.maxValue() + b)), S = this.priceScale(), S && S
.properties().percentage.value() && i ? (w = this.firstValue(), w ? i
.convertToPercents(w) : null) : S && S.isLog() && i ? new r(o.priceScale()
.priceToLogical(i.minValue()), o.priceScale().priceToLogical(i.maxValue())) : i
}, v.prototype.paneViews = function(t) {
return this.properties().visible.value() ? this._paneViews : null
}, v.prototype.dataWindowView = function() {
return this._dataWindowView
}, v.prototype.statusView = function() {
return this._statusView
}, v.prototype.priceAxisViews = function(t, e) {
return this._model.paneForSource(this) === t && e === this.priceScale() && (this
._showLastValueOnPriceScale() || this.properties().oldShowLastValue && this
.properties().oldShowLastValue.value()) ? this._priceAxisViews : null
}, v.prototype._showLastValueOnPriceScale = function() {
return this._model.properties().scalesProperties.showStudyLastValue.value()
}, v.prototype.isLinePlot = function(t) {
return this._metaInfo.plots[t].type === at.PlotTypes.LINE
}, v.isSelfColorerPlot = function(t, e) {
return t._metaInfo.plots[e].type === at.PlotTypes.COLORER
}, v.prototype.isSelfColorerPlot = function(t) {
return v.isSelfColorerPlot(this, t)
}, v.prototype.isTextColorerPlot = function(t) {
return this._metaInfo.plots[t].type === at.PlotTypes.TEXT_COLORER
}, v.prototype.isBarColorerPlot = function(t) {
return this._metaInfo.plots[t].type === at.PlotTypes.BAR_COLORER
}, v.prototype.isBgColorerPlot = function(t) {
return this._metaInfo.plots[t].type === at.PlotTypes.BG_COLORER
}, v.prototype.isPlotShapesPlot = function(t) {
return this._metaInfo.plots[t].type === at.PlotTypes.SHAPES
}, v.prototype.isPlotCharsPlot = function(t) {
return this._metaInfo.plots[t].type === at.PlotTypes.CHARS
}, v.prototype.isPlotArrowsPlot = function(t) {
return this._metaInfo.plots[t].type === at.PlotTypes.ARROWS
}, v.prototype.isOHLCBarsPlot = function(t) {
var e = this._metaInfo.plots[t].target,
i = this.metaInfo().defaults.ohlcPlots[e];
return i && this.isOHLCSeriesPlot(t) && i.plottype === at.OHLCType.BARS
}, v.prototype.isOHLCCandlesPlot = function(t) {
var e = this._metaInfo.plots[t].target,
i = this.metaInfo().defaults.ohlcPlots[e];
return i && this.isOHLCSeriesPlot(t) && i.plottype === at.OHLCType.CANDLES
}, v.prototype.isOHLCSeriesPlot = function(t) {
var e = this._metaInfo.plots[t].type;
return e === at.PlotTypes.OHLC_OPEN || e === at.PlotTypes.OHLC_HIGH || e === at
.PlotTypes.OHLC_LOW || e === at.PlotTypes.OHLC_CLOSE
}, v.prototype.isOHLCOpenPlot = function(t) {
return this._metaInfo.plots[t].type === at.PlotTypes.OHLC_OPEN
}, v.prototype.isOHLCHighPlot = function(t) {
return this._metaInfo.plots[t].type === at.PlotTypes.OHLC_HIGH
}, v.prototype.isOHLCLowPlot = function(t) {
return this._metaInfo.plots[t].type === at.PlotTypes.OHLC_LOW
}, v.prototype.isOHLCClosePlot = function(t) {
return this._metaInfo.plots[t].type === at.PlotTypes.OHLC_CLOSE
}, v.prototype.isOHLCColorerPlot = function(t) {
return this._metaInfo.plots[t].type === at.PlotTypes.OHLC_COLORER
}, v.prototype.isDataOffsetPlot = function(t) {
return this._metaInfo.plots[t].type === at.PlotTypes.DATAOFFSET
}, v.prototype.hasBarColorer = function() {
for (var t = 0; t < this._metaInfo.plots.length; ++t)
if (this.isBarColorerPlot(t)) return !0;
return !1
}, v.prototype.barColorer = function() {
var t, e, i = null;
for (t = 0; t < this._metaInfo.plots.length; ++t) this.isBarColorerPlot(t) && (e =
new T(this, t), null == i ? i = e : i.pushBackBarColorer(e));
if (null == i) throw Error(
"Cannot create BarColorer: study doesn't have a bar_colorer plot!");
return i
}, v.prototype.base = function() {
return "Volume" === this._metaInfo.id ? 1 : 0
}, v.prototype._createFormatter = function() {
var t, e, i;
"default" === this.properties().precision.value() ? this.metaInfo().defaults && (t =
parseInt(this.metaInfo().defaults.precision)) : t = parseInt(this.properties()
.precision.value()), isFinite(t) || (t = -1 !== ["Volume@tv-basicstudies",
"VbPVisible@tv-volumebyprice", "VbPSessions@tv-volumebyprice"
].indexOf(this._metaInfo.id) ? 0 : 1e4), e = this.series().symbolInfo(), 0 === t ? (
i = 0, e && e.volume_precision && (i = e.volume_precision), this._formatter =
new tt(i)) : this._formatter = new Q(Math.pow(10, t)), this.priceScale() && this
.priceScale().updateFormatter()
}, v.prototype.formatter = function() {
return this._formatter
}, v.prototype.nearestIndex = function(t, e) {
if (!TradingView.isInteger(t)) return void ct.logDebug(
"nearestIndex: incorrect logicalPoint");
var i = this._series.data().bars().search(t, e);
return null !== i ? i.index : void 0
}, v.prototype._lastNonEmptyPlotRow = function(t) {
var e, i;
return TradingView.isInteger(t) ? void 0 !== this._lastNonEmptyPlotRowCache[t] ? this
._lastNonEmptyPlotRowCache[t] : (e = 1e3, null === (i = this.data().findLast(
function(e, i) {
return void 0 !== i[t]
}, e)) ? null : (this._lastNonEmptyPlotRowCache[t] = i, this
._lastNonEmptyPlotRowCache[t])) : (ct.logDebug(
"_lastNonEmptyPlotRow: incorrect plotIndex"), null)
}, v.prototype.updateAllViews = function() {
var t;
for (t = 0; t < this._paneViews.length; t++) this._paneViews[t].update();
for (this._dataWindowView.update(), this._statusView.update(), t = 0; t < this
._priceAxisViews.length; t++) this._priceAxisViews[t].update()
}, v.prototype.tags = function() {
return !this._metaInfo || !this._metaInfo.description || this._metaInfo
.isTVScriptStub || this._metaInfo.is_hidden_study || this._metaInfo.isTVScript &&
"tv-scripting" === this._metaInfo.productId ? [] : [this._metaInfo.description]
}, v.isPointsBasedStudy = function(t) {
switch (t) {
case "VbPFixed@tv-volumebyprice":
case "mtp_tsanalysis@mtp-mtpredictor":
case "mtp_riskreward@mtp-mtpredictor":
case "mtp_decisionpoint@mtp-mtpredictor":
case "mtp_ew_main@mtp-mtpredictor":
case "mtp_ew_major@mtp-mtpredictor":
case "mtp_ew_minor@mtp-mtpredictor":
case "mtp_wpt_down1ora@mtp-mtpredictor":
case "mtp_wpt_down2orb@mtp-mtpredictor":
case "mtp_wpt_down3@mtp-mtpredictor":
case "mtp_wpt_down4@mtp-mtpredictor":
case "mtp_wpt_down5@mtp-mtpredictor":
case "mtp_wpt_downc@mtp-mtpredictor":
case "mtp_wpt_up1ora@mtp-mtpredictor":
case "mtp_wpt_up2orb@mtp-mtpredictor":
case "mtp_wpt_up3@mtp-mtpredictor":
case "mtp_wpt_up4@mtp-mtpredictor":
case "mtp_wpt_up5@mtp-mtpredictor":
case "mtp_wpt_upc@mtp-mtpredictor":
return !0;
default:
return !1
}
}, v.lineToolNameForPointsBasedStudy = function(t) {
switch (t) {
case "VbPFixed@tv-volumebyprice":
return "LineToolVbPFixed";
case "RegressionTrend@tv-basicstudies":
return "LineToolRegressionTrend";
case "mtp_tsanalysis@mtp-mtpredictor":
return "LineStudyMtpAnalysis";
case "mtp_riskreward@mtp-mtpredictor":
return "LineStudyMtpRiskReward";
case "mtp_decisionpoint@mtp-mtpredictor":
return "LineStudyMtpDecisionPoint";
case "mtp_ew_main@mtp-mtpredictor":
return "LineStudyMtpElliotWaveMain";
case "mtp_ew_major@mtp-mtpredictor":
return "LineStudyMtpElliotWaveMajor";
case "mtp_ew_minor@mtp-mtpredictor":
return "LineStudyMtpElliotWaveMinor";
case "mtp_wpt_down1ora@mtp-mtpredictor":
return "LineStudyMtpDownWave1OrA";
case "mtp_wpt_down2orb@mtp-mtpredictor":
return "LineStudyMtpDownWave2OrB";
case "mtp_wpt_down3@mtp-mtpredictor":
return "LineStudyMtpDownWave3";
case "mtp_wpt_down4@mtp-mtpredictor":
return "LineStudyMtpDownWave4";
case "mtp_wpt_down5@mtp-mtpredictor":
return "LineStudyMtpDownWave5";
case "mtp_wpt_downc@mtp-mtpredictor":
return "LineStudyMtpDownWaveC";
case "mtp_wpt_up1ora@mtp-mtpredictor":
return "LineStudyMtpUpWave1OrA";
case "mtp_wpt_up2orb@mtp-mtpredictor":
return "LineStudyMtpUpWave2OrB";
case "mtp_wpt_up3@mtp-mtpredictor":
return "LineStudyMtpUpWave3";
case "mtp_wpt_up4@mtp-mtpredictor":
return "LineStudyMtpUpWave4";
case "mtp_wpt_up5@mtp-mtpredictor":
return "LineStudyMtpUpWave5";
case "mtp_wpt_upc@mtp-mtpredictor":
return "LineStudyMtpUpWaveC";
default:
throw Error("There is no line tool name, associated with study id " + t)
}
}, v.isStudyLineTool = function(t) {
var e = i(128).StudyLineDataSource,
o = TradingView[t];
return "function" == typeof o && o.prototype instanceof e
}, v.prototype.onExtendedHoursChanged = function() {
this.restart()
}, v.prototype.hasSymbolInputs = function() {
for (var t = this._metaInfo.inputs.length; t--;)
if ("symbol" === this._metaInfo.inputs[t].type) return !0;
return !1
}, v.prototype._subscribeExtendedHours = function() {
!this._isSubscribedToExtendedHours && this.hasSymbolInputs() && (this._series
.extendedHours.listeners().subscribe(this, this.onExtendedHoursChanged), this
._isSubscribedToExtendedHours = !0)
}, v.prototype._unsubscribeExtendedHours = function() {
this._isSubscribedToExtendedHours && (this._series.extendedHours.listeners()
.unsubscribe(this, this.onExtendedHoursChanged), delete this
._isSubscribedToExtendedHours)
}, v.prototype.removeByRemoveAllStudies = function() {
return !0
}, v.prototype.canHaveChildren = function() {
return void 0 === this._canHaveChildren && (this._canHaveChildren = !!st
.canHaveChildren(this._metaInfo)), this._canHaveChildren
}, v.getInputRebindType = function(t, e, i) {
var o = st.isSourceInput(t);
return o && !~e.indexOf("$") && ~i.indexOf("$") ? K.REBIND_STUDY_STANDALONE_TO_CHILD :
o && ~e.indexOf("$") && !~i.indexOf("$") ? K.REBIND_STUDY_CHILD_TO_STANDALONE : 0
}, v.prototype.getPlotFields = function() {
return this._plotFields
}, v.prototype.getMinFirstBarIndexForPlot = function(t) {
var e, i = y(this._properties.styles, t) || y(this._properties.ohlcPlots, t) || y(this
._properties.filledAreasStyle, t);
return null === i ? -1 / 0 : (e = this.data().lastIndex(), null === e ? -1 / 0 : e - i +
1)
}, v.prototype.getInputsPropertyPage = function() {
return lt.StudyInputsPropertyPage
}, v.prototype.getStylesPropertyPage = function() {
return lt.StudyStylesPropertyPage
}, v.prototype.getDisplayPropertyPage = function() {
return lt.StudyDisplayPropertyPage
}, t.exports = {
Study: v,
createStudy: l,
prepareStudyProperties: c,
prepareStudyPropertiesForLoadChart: u,
prepareStudyPropsStateForLoadChart: _
}
}).call(e, i(25), i(10), i(5), i(73))
}, , , , , function(t, e, i) {
"use strict";
function o(t, e, i) {
var o, n, s;
for (e = e || t || i || "", o = "", n = 0; n < c.length; n++)
if ((s = e.match(c[n])) && 3 === s.length) {
e = s[1], o = s[2];
break
} r.emit(e.toLowerCase().replace(" ", "_"), {
category: t,
label: i,
value: o
})
}
function n(t, e, i) {
var n, r, a;
if (s.enabled("charting_library_base")) return void o(t, e, i);
n = (t ? t + ":" : "") + e, i && (n += " " + i), l.logNormal(n), s.enabled("widget") || (r = window
._gaq, window._UNIT_TESTS || void 0 === r || (a = ["_trackEvent", t, e], void 0 !== i && a
.push(i), r.push(a)))
}
var r, s, a, l, c;
Object.defineProperty(e, "__esModule", {
value: !0
}), r = i(23), s = i(5), a = i(7), l = a.getLogger("Common.TrackEvent"), c = [
/Study_(Drawing)_(.*)/, /(Study)_(.*)@tv-basicstudies/, /(Study)_(.*)/, /(Chart Style) (.*)/
], e.trackEvent = n, window.TradingView = window.TradingView || {}, window.TradingView.trackEvent =
n
}, , , , function(t, e, i) {
"use strict";
function o(t, e, i) {
var o = e.subtract(t),
n = i.subtract(t),
r = n.dotProduct(o) / o.dotProduct(o);
return {
coeff: r,
distance: t.addScaled(o, r).subtract(i).length()
}
}
function n(t, e, i) {
var n, r, s = o(t, e, i);
return 0 <= s.coeff && s.coeff <= 1 ? s : (n = t.subtract(i).length(), r = e.subtract(i).length(),
n < r ? {
coeff: 0,
distance: n
} : {
coeff: 1,
distance: r
})
}
Object.defineProperty(e, "__esModule", {
value: !0
}), e.distanceToLine = o, e.distanceToSegment = n
}, function(t, e, i) {
"use strict";
function o(t, e, i, o, n, r) {
var s, a, h, u;
return l.equalPoints(t, e) ? null : (s = new l.Point(0, 0), a = new l.Point(i, o), n ? r ? (h = c
.intersectLineAndRectangle(l.lineThroughPoints(t, e), s, a), Array.isArray(h) ? h : null
) : (u = c.intersectRayAndRectangle(e, t, s, a), null === u || l.equalPoints(e, u) ?
null : l.lineSegment(e, u)) : r ? (u = c.intersectRayAndRectangle(t, e, s, a), null ===
u || l.equalPoints(t, u) ? null : l.lineSegment(t, u)) : (h = c
.intersectLineSegmentAndRectangle(l.lineSegment(t, e), s, a), Array.isArray(h) ? h :
null))
}
function n(t) {
return .3 * t
}
function r(t) {
return 2 + .5 * t
}
function s(t) {
return null !== t && void 0 !== t && !h.isNaN(t)
}
function a(t, e) {
void 0 !== e && u.setLineStyle(t, e)
}
var l, c, h, u;
Object.defineProperty(e, "__esModule", {
value: !0
}), l = i(8), c = i(132), h = i(15), u = i(90), e.extendAndClipLineSegment = o, e.optimalBarWidth =
n, e.selectionTolerance = r, e.coordinateIsValid = s, e.setValidLineStyle = a
}, function(t, e, i) {
"use strict";
(function(t) {
function o() {
this._zorder = 0, this.m_priceScale = null, this._id = s.randomHashN(6), this._ownerSource =
null, this._userEditEnabled = !0, this.hasAlert = new t(!1)
}
function n(t) {
o.call(this), this._isOverlay = null, this._model = t
}
var r = i(6).DefaultProperty,
s = i(61);
o.prototype.createPropertiesObject = function(t, e, i) {
return new r(t, e, i)
}, o.prototype.id = function() {
return this._id
}, o.prototype.idForAlert = function() {
return this._id
}, o.prototype.setId = function(t) {
this._id = t
}, o.prototype.zorder = function() {
return this._zorder
}, o.prototype.setZorder = function(t) {
"number" == typeof t && this._zorder !== t && (this._zorder = t)
}, o.prototype.title = function() {
throw Error("Implement this fun in a subclass")
}, o.prototype.priceScale = function() {
return this.m_priceScale
}, o.prototype.setPriceScale = function(t) {
this.m_priceScale = t
}, o.prototype.ownerSource = function() {
return this._ownerSource
}, o.prototype.setOwnerSource = function(t) {
this._ownerSource = t, t && this.setPriceScale(t.priceScale())
}, o.prototype.isSavedInChart = function(t) {
return !0
}, o.prototype.isSavedInStudyTemplates = function() {
return !0
}, o.prototype.isRemovedByStudyTemplates = function() {
return !0
}, o.prototype.hasContextMenu = function() {
return !0
}, o.prototype.showInObjectTree = function() {
return !0
}, o.prototype.setUserEditEnabled = function(t) {
this._userEditEnabled = t
}, o.prototype.userEditEnabled = function() {
return this._userEditEnabled
}, o.prototype.canBeHidden = function() {
return this.userEditEnabled()
}, o.prototype.isUserDeletable = function() {
return this.userEditEnabled()
}, o.prototype.canHasAlert = function() {
return !1
}, o.prototype.properties = function() {
throw Error("Implement this fun in a subclass")
}, o.prototype.statusView = function() {
return null
}, o.prototype.dataWindowView = function() {
return null
}, o.prototype.priceAxisViews = function(t, e) {
return null
}, o.prototype.updateAllViews = function() {}, o.prototype.paneViews = function(t) {
return null
}, o.prototype.isChildStudy = function() {
return !1
}, o.prototype.hasChildren = function() {
return !1
}, o.prototype.canHaveChildren = function() {
return !1
}, o.prototype.onClickOutside = function() {}, o.prototype.getInputsPropertyPage =
function() {
return null
}, o.prototype.getStylesPropertyPage = function() {
return null
}, o.prototype.getDisplayPropertyPage = function() {
return null
}, o.prototype.getVisibilitiesPropertyPage = function() {
return null
}, o.prototype.getStrategyPropertyPage = function() {
return null
}, o.prototype.getSourceIcon = function() {
return null
}, inherit(n, o), n.prototype.isNoScale = function() {
return !!this._isOverlay
}, n.prototype.base = function() {
return 0
}, n.prototype.formatter = function() {
return null
}, n.prototype.model = function() {
return this._model
}, n.prototype.priceRange = function(t, e) {
return null
}, n.prototype.isDraggable = function() {
return !this._metaInfo || !this._metaInfo.linkedToSeries
}, n.prototype.priceLineColor = function(t) {
return t
}, e.DataSource = o, e.PriceDataSource = n
}).call(e, i(17))
}, function(t, e, i) {
"use strict";
function o(t, e, i, o, n) {
this._wptStudyId = o, this._pointsCount = n, m.call(this, t, e, i)
}
function n(t, e, i) {
o.call(this, t, e, i, "mtp_wpt_down1ora", 2)
}
function r(t, e, i) {
o.call(this, t, e, i, "mtp_wpt_down2orb", 2)
}
function s(t, e, i) {
o.call(this, t, e, i, "mtp_wpt_down3", 3)
}
function a(t, e, i) {
o.call(this, t, e, i, "mtp_wpt_down4", 2)
}
function l(t, e, i) {
o.call(this, t, e, i, "mtp_wpt_down5", 5)
}
function c(t, e, i) {
o.call(this, t, e, i, "mtp_wpt_downc", 3)
}
function h(t, e, i) {
o.call(this, t, e, i, "mtp_wpt_up1ora", 2)
}
function u(t, e, i) {
o.call(this, t, e, i, "mtp_wpt_up2orb", 2)
}
function d(t, e, i) {
o.call(this, t, e, i, "mtp_wpt_up3", 3)
}
function p(t, e, i) {
o.call(this, t, e, i, "mtp_wpt_up4", 2)
}
function _(t, e, i) {
o.call(this, t, e, i, "mtp_wpt_up5", 5)
}
function f(t, e, i) {
o.call(this, t, e, i, "mtp_wpt_upc", 3)
}
var m = i(105).LineStudyMtp;
inherit(o, m), o.prototype._studyInputs = function() {
var t, e, i, o, n = this.points();
if (n.length < this.pointsCount()) return null;
for (t = [this.properties().inputs.displayZoneLabels.value()], e = 0; e < this.pointsCount(); ++
e) {
if (i = n[e].index, null === (o = this._model.mainSeries().bars().valueAt(i))) return null;
t.push(1e3 * o[TradingView.TIME_PLOT])
}
return t
}, o.prototype._mtpStudyId = function() {
return this._wptStudyId
}, o.prototype.pointsCount = function() {
return this._pointsCount
}, inherit(n, o), n.getTooltipText = function(t) {
return "Down Wave 1 or A: Select Point " + ((t ? t._points.length : 0) + 1)
}, inherit(r, o), r.getTooltipText = function(t) {
return "Down Wave 2 or B: Select Point " + ((t ? t._points.length : 0) + 1)
}, inherit(s, o), s.getTooltipText = function(t) {
return "Down Wave 3: Select Point " + ((t ? t._points.length : 0) + 1)
}, inherit(a, o), a.getTooltipText = function(t) {
return "Down Wave 4: Select Point " + ((t ? t._points.length : 0) + 1)
}, inherit(l, o), l.getTooltipText = function(t) {
return "Down Wave 5: Select Point " + ((t ? t._points.length : 0) + 1)
}, inherit(c, o), c.getTooltipText = function(t) {
return "Down Wave C: Select Point " + ((t ? t._points.length : 0) + 1)
}, inherit(h, o), h.getTooltipText = function(t) {
return "Up Wave 1 or A: Select Point " + ((t ? t._points.length : 0) + 1)
}, inherit(u, o), u.getTooltipText = function(t) {
return "Up Wave 2 or B: Select Point " + ((t ? t._points.length : 0) + 1)
}, inherit(d, o), d.getTooltipText = function(t) {
return "Up Wave 3: Select Point " + ((t ? t._points.length : 0) + 1)
}, inherit(p, o), p.getTooltipText = function(t) {
return "Up Wave 4: Select Point " + ((t ? t._points.length : 0) + 1)
}, inherit(_, o), _.getTooltipText = function(t) {
return "Up Wave 5: Select Point " + ((t ? t._points.length : 0) + 1)
}, inherit(f, o), f.getTooltipText = function(t) {
return "Up Wave C: Select Point " + ((t ? t._points.length : 0) + 1)
}, e.LineStudyMtpDownWave1OrA = n, e.LineStudyMtpDownWave2OrB = r, e.LineStudyMtpDownWave3 = s, e
.LineStudyMtpDownWave4 = a, e.LineStudyMtpDownWave5 = l, e.LineStudyMtpDownWaveC = c, e
.LineStudyMtpUpWave1OrA = h, e.LineStudyMtpUpWave2OrB = u, e.LineStudyMtpUpWave3 = d, e
.LineStudyMtpUpWave4 = p, e.LineStudyMtpUpWave5 = _, e.LineStudyMtpUpWaveC = f
}, function(t, e, i) {
"use strict";
(function(e) {
var o = i(86),
n = 1e-10,
r = function() {
function t(t, e, i, o, n) {
var r, s = n,
a = 0;
if (isNaN(t.get(e - 1))) return {
index: NaN,
value: NaN
};
for (r = 0; r < e; ++r) o(t.get(r), s) && (a = r, s = t.get(r));
return {
index: a,
value: s
}
}
function r(t, e) {
return 100 * t / e
}
function s(t, e, i, o, n) {
var r, s, a;
this._areaRight = t, this._areaLeft = e, this._pivotType = i, this._series = o, this
._currentIndex = n.new_var(0), this._currentValue = n.new_var(NaN), this
._pivotIndex = n.new_var(-1), this._index = w.n(n), this._isNewBar = n.symbol
.isNewBar, r = this._currentIndex.get(1), s = this._currentValue.get(1), a =
this._pivotIndex.get(1), this._index > 1 && (this._currentIndex.set(r), this
._currentValue.set(s), this._pivotIndex.set(a))
}
function a(t, e, i) {
var o, n, r, a, l;
this._deviation = t, o = i.new_var(w.high(i)), n = i.new_var(w.low(i)), o.get(2 *
e + 1), n.get(2 * e + 1), this._pivotHigh = new s(e, e, s.HIGH, o, i), this
._pivotLow = new s(e, e, s.LOW, n, i), this._lastVal = i.new_var(NaN), this
._lastIndex = i.new_var(-1), this._lastType = i.new_var(), this._index = w.n(i),
this._isNewBar = i.symbol.isNewBar, this._isBarClosed = i.symbol.isBarClosed,
r = this._lastIndex.get(1), a = this._lastVal.get(1), l = this._lastType.get(1),
this._index > 1 && this.addPivot(r, a, l), this.processPivot(this._pivotHigh),
this.processPivot(this._pivotLow)
}
function l(t) {
this.symbol = t, this.vars = [], this.vars_index = 0, this.ctx = [], this
.ctx_index = 0
}
function c(t) {
this.mindepth = 0, this.original = NaN, this.modified = !1, this.symbol = t
}
function h(t, e) {
this.timezone = t || "America/New_York", this.session = e || "0000-0000"
}
function u(t, e, i, o, n, r) {
this.periodBase = i, this.tickerid = t, this.period = e, this.index = -1, this
.time = NaN, this.open = NaN, this.high = NaN, this.low = NaN, this.close = NaN,
this.volume = NaN, this.updatetime = NaN, this.isNewBar = !1, this
.isBarClosed = !1, this.session = new S.Session, this.other_sessions = {}, this
.script = o, this.ticker = u.parseTicker(t);
var s = u.parsePeriod(e);
this.resolution = s.resolution, this.interval = s.interval, this.bb_cache = {}, this
.minTick = n, this.periodForInitialRange = r
}
function d(t, e, i, o, n, r, s, a, c) {
this.body = n, this.symbols = [], this.runner = o, this.inputCallback = s, this
.out = r, this.nonseriesOut = c, this.ctx = new l(this.add_sym(t, e, i, a)),
this.init()
}
function p(t) {
this.symbols = [], this.barsets = [], this.subscription = [], this.host = t, this
.isRecalculated = !1, this.start()
}
function _(t) {
p.feed = t
}
function f(t) {
this.runner = new p(t)
}
function m(t, e) {
this.info = t, this.bars = e || [], this.isBarClosed = !0
}
function g(t, e) {
this.period = t, this.generateEmptyBars = !!e
}
function v() {}
var y = "undefined" != typeof window ? window : e,
b = y.PineJsCalendar ? y.PineJsCalendar : i(50),
S = i(58),
w = {};
return w.max_series_size = 10001, w.n = function(t) {
return t.symbol.index + 1
}, w.nz = function(t, e) {
return e = e || 0, isFinite(t) ? t : e
}, w.na = function(t) {
return 0 === arguments.length ? NaN : isNaN(t) ? 1 : 0
}, w.isZero = function(t) {
return Math.abs(t) <= 1e-10
}, w.toBool = function(t) {
return isFinite(t) && !w.isZero(t)
}, w.eq = function(t, e) {
return w.isZero(t - e)
}, w.neq = function(t, e) {
return !w.eq(t, e)
}, w.ge = function(t, e) {
return w.isZero(t - e) || t > e
}, w.gt = function(t, e) {
return !w.isZero(t - e) && t > e
}, w.lt = function(t, e) {
return !w.isZero(t - e) && t < e
}, w.le = function(t, e) {
return w.isZero(t - e) || t < e
}, w.and = function(t, e) {
return isNaN(t) || isNaN(e) ? NaN : w.isZero(t) || w.isZero(e) ? 0 : 1
}, w.or = function(t, e) {
return isNaN(t) || isNaN(e) ? NaN : w.isZero(t) && w.isZero(e) ? 0 : 1
}, w.not = function(t) {
return isNaN(t) ? NaN : w.isZero(t) ? 1 : 0
}, w.greaterOrEqual = function(t, e) {
return e - t < n
}, w.lessOrEqual = function(t, e) {
return t - e < n
}, w.equal = function(t, e) {
return Math.abs(t - e) < n
}, w.greater = function(t, e) {
return t - e > n
}, w.less = function(t, e) {
return e - t > n
}, w.max = Math.max, w.min = Math.min, w.pow = Math.pow, w.abs = Math.abs, w.log =
Math.log, w.log10 = function(t) {
return Math.log(t) / Math.LN10
}, w.sqrt = Math.sqrt, w.sign = function(t) {
return isNaN(t) ? NaN : w.isZero(t) ? 0 : t > 0 ? 1 : -1
}, w.exp = Math.exp, w.sin = Math.sin, w.cos = Math.cos, w.tan = Math.tan, w.asin =
Math.asin, w.acos = Math.acos, w.atan = Math.atan, w.floor = Math.floor, w.ceil =
Math.ceil, w.round = Math.round, w.avg = function(t, e, i, o, n, r) {
var s, a;
if (2 === arguments.length) return (t + e) / 2;
for (s = 0, a = 0; a < arguments.length; a++) s += arguments[a];
return s / arguments.length
}, w.open = function(t) {
return t.symbol.open
}, w.high = function(t) {
return t.symbol.high
}, w.low = function(t) {
return t.symbol.low
}, w.close = function(t) {
return t.symbol.close
}, w.hl2 = function(t) {
return (t.symbol.high + t.symbol.low) / 2
}, w.hlc3 = function(t) {
return (t.symbol.high + t.symbol.low + t.symbol.close) / 3
}, w.ohlc4 = function(t) {
return (t.symbol.open + t.symbol.high + t.symbol.low + t.symbol.close) / 4
}, w.volume = function(t) {
return t.symbol.volume
}, w.updatetime = function(t) {
return t.symbol.updatetime
}, w.time = function(t, e, i) {
return t.symbol.bartime(e, i)
}, w.period = function(t) {
return t.symbol.period
}, w.tickerid = function(t) {
return t.symbol.tickerid
}, w.ticker = function(t) {
return t.symbol.ticker
}, w.interval = function(t) {
return t.symbol.interval
}, w.isdwm = function(t) {
return t.symbol.isdwm()
}, w.isintraday = function(t) {
return !t.symbol.isdwm()
}, w.isdaily = function(t) {
return "D" === t.symbol.resolution
}, w.isweekly = function(t) {
return "W" === t.symbol.resolution
}, w.ismonthly = function(t) {
return "M" === t.symbol.resolution
}, w.year = function(t) {
return w.timepart(t.symbol, b.YEAR, arguments[1])
}, w.month = function(t) {
return w.timepart(t.symbol, b.MONTH, arguments[1])
}, w.weekofyear = function(t) {
return w.timepart(t.symbol, b.WEEK_OF_YEAR, arguments[1])
}, w.dayofmonth = function(t) {
return w.timepart(t.symbol, b.DAY_OF_MONTH, arguments[1])
}, w.dayofweek = function(t) {
return w.timepart(t.symbol, b.DAY_OF_WEEK, arguments[1])
}, w.hour = function(t) {
return w.timepart(t.symbol, b.HOUR_OF_DAY, arguments[1])
}, w.minute = function(t) {
return w.timepart(t.symbol, b.MINUTE, arguments[1])
}, w.second = function(t) {
return w.timepart(t.symbol, b.SECOND, arguments[1])
}, w.add_days_considering_dst = function(t, e, i) {
return b.add_days_considering_dst(b.get_timezone(t), e, i)
}, w.selectSessionBreaks = function(t, e) {
var i, o, n, r, s, a;
if (w.isdwm(t) || void 0 === t.symbol.session.timezone) return [];
if (i = u.newBarBuilder(t.symbol.period, t.symbol.session), o = [], n = e
.length, i.moveTo(e[n - 1]), 1 === n && i.sessionStart === e[0]) o.push(e[
0]);
else {
for (r = n - 2; r >= 0; --r)(s = e[r]) >= i.sessionStart || (i.moveTo(s),
a = e[r + 1], o.push(a));
o.reverse()
}
return o
}, w.iff = function(t, e, i) {
return w.not(t) ? i : e
}, w.rising = function(t, e) {
for (var i = 1; i < e + 1; ++i)
if (t.get(i) > t.get(0)) return 0;
return 1
}, w.falling = function(t, e) {
for (var i = 1; i < e + 1; ++i)
if (t.get(i) < t.get(0)) return 0;
return 1
}, w.timepart = function(t, e, i) {
var o = b.utc_to_cal(t.timezone, i || t.bartime());
return b.get_part(o, e)
}, w.rsi = function(t, e) {
return w.isZero(e) ? 100 : w.isZero(t) ? 0 : 100 - 100 / (1 + t / e)
}, w.sum = function(t, e, i) {
var o = i.new_var(),
n = w.nz(t.get()) + w.nz(o.get(1)) - w.nz(t.get(e));
return o.set(n), n
}, w.sma = function(t, e, i) {
var o = w.sum(t, e, i);
return w.na(t.get(e - 1)) ? NaN : o / e
}, w.rma = function(t, e, i) {
var o = w.sum(t, e, i),
n = e - 1,
r = t.get(n),
s = i.new_var(),
a = s.get(1),
l = t.get(),
c = w.na(r) ? NaN : w.na(a) ? o / e : (l + a * n) / e;
return s.set(c), c
}, w.fixnan = function(t, e) {
var i = e.new_var();
return isNaN(t) ? i.get(1) : (i.set(t), t)
}, w.tr = function(t, e) {
var i, o, n;
return 1 === arguments.length && (e = t, t = void 0), i = void 0 !== t && !!t,
o = e.new_var(w.close(e)), n = o.get(1), i && isNaN(n) && (n = w.close(e)),
w.max(w.max(w.high(e) - w.low(e), w.abs(w.high(e) - n)), w.abs(w.low(e) -
n))
}, w.atr = function(t, e) {
var i = e.new_var(w.tr(e));
return w.sma(i, t, e)
}, w.ema = function(t, e, i) {
var o = w.sum(t, e, i),
n = i.new_var(),
r = t.get(0),
s = t.get(e - 1),
a = n.get(1),
l = w.na(s) ? NaN : w.na(a) ? o / e : 2 * (r - a) / (e + 1) + a;
return n.set(l), l
}, w.wma = function(t, e, i) {
var o, n, r = 0;
for (e = Math.round(e), o = e; o >= 0; o--) n = e - o, r += n * t.get(o);
return 2 * r / (e * (e + 1))
}, w.vwma = function(t, e, i) {
var o = i.new_var(w.volume(i)),
n = i.new_var(t.get(0) * w.volume(i));
return w.sma(n, e, i) / w.sma(o, e, i)
}, w.swma = function(t, e) {
return (t.get(0) + 2 * t.get(1) + 2 * t.get(2) + t.get(3)) / 6
}, w.lowestbars = function(e, i, o) {
return -t(e, i, o, function(t, e) {
return w.lt(t, e)
}, Number.MAX_VALUE).index
}, w.lowest = function(e, i, o) {
return t(e, i, o, function(t, e) {
return w.lt(t, e)
}, Number.MAX_VALUE).value
}, w.highestbars = function(e, i, o) {
return -t(e, i, o, function(t, e) {
return w.gt(t, e)
}, Number.MIN_VALUE).index
}, w.highest = function(e, i, o) {
return t(e, i, o, function(t, e) {
return w.gt(t, e)
}, Number.MIN_VALUE).value
}, w.cum = function(t, e) {
var i = e.new_var(),
o = w.nz(i.get(1)) + t;
return i.set(o), o
}, w.accdist = function(t) {
var e = w.high(t),
i = w.low(t),
o = w.close(t),
n = w.volume(t);
return w.cum(o === e && o === i || e === i ? 0 : n * (2 * o - i - e) / (e - i),
t)
}, w.correlation = function(t, e, i, o) {
var n = w.sma(t, i, o),
r = w.sma(e, i, o),
s = o.new_var(t.get() * e.get());
return (w.sma(s, i, o) - n * r) / Math.sqrt(w.variance2(t, n, i) * w.variance2(
e, r, i))
}, w.stoch = function(t, e, i, o, n) {
var s = w.highest(e, o),
a = w.lowest(i, o);
return w.fixnan(r(t.get() - a, s - a), n)
}, w.tsi = function(t, e, i, o) {
var n = o.new_var(w.change(t)),
r = o.new_var(w.abs(w.change(t))),
s = o.new_var(w.ema(n, i, o)),
a = o.new_var(w.ema(r, i, o));
return w.ema(s, e, o) / w.ema(a, e, o)
}, w.cross = function(t, e, i) {
function o(t) {
return t < 0 ? -1 : 0 === t ? 0 : 1
}
if (isNaN(t) || isNaN(e)) return !1;
var n = i.new_var(o(t - e));
return !isNaN(n.get(1)) && n.get(1) !== n.get()
}, w.linreg = function(t, e, i) {
var o, n, r, s, a, l, c = 0,
h = 0,
u = 0,
d = 0;
for (o = 0; o < e; ++o) n = t.get(o), r = e - 1 - o, s = r + 1, c += s, h += n,
u += s * s, d += n * s;
return a = (e * d - c * h) / (e * u - c * c), l = h / e, l - a * c / e + a + a *
(e - 1 - i)
}, w.sar = function(t, e, i, o) {
function n(e, i) {
var o = m.get();
return g.set(e), m.set(i), v.set(1e3 * t), y.set(o), o
}
var r, s, a = w.high(o),
l = w.low(o),
c = w.close(o),
h = o.new_var(a),
u = o.new_var(l),
d = o.new_var(c),
p = d.get(1),
_ = u.get(1),
f = h.get(1),
m = o.new_var(),
g = o.new_var(),
v = o.new_var(),
y = o.new_var(),
b = y.get(1);
if (isNaN(p)) return NaN;
if (r = 1e-7, isNaN(b) && (w.ge(c, p) ? (g.set(1), m.set(Math.max(a, f)), b =
Math.min(l, _)) : (g.set(-1), b = Math.max(a, f), m.set(Math.min(l,
_))), v.set(1e3 * t)), 1 === g.get()) {
if (w.gt(a, m.get()) && (m.set(a), v.set(Math.min(v.get() + 1e3 * e, 1e3 *
i))), w.le(l, b)) return n(-1, l)
} else if (w.lt(l, m.get()) && (m.set(l), v.set(Math.min(v.get() + 1e3 * e,
1e3 * i))), w.ge(a, b)) return n(1, a);
return s = b + v.get() * (m.get() - b) / 1e3, 1 === g.get() ? w.ge(s, l) && (s =
l - r) : w.le(s, a) && (s = a + r), y.set(s), s
}, w.alma = function(t, e, i, o) {
var n, r, s, a = Math.floor(i * (e - 1)),
l = e / o * (e / o),
c = [],
h = 0;
for (n = 0; n < e; ++n) r = Math.exp(-1 * Math.pow(n - a, 2) / (2 * l)), h += r,
c.push(r);
for (n = 0; n < e; ++n) c[n] /= h;
for (s = 0, n = 0; n < e; ++n) s += c[n] * t.get(e - n - 1);
return s
}, w.wvap = function(t, e) {
return t.get() - t.get(1)
}, w.change = function(t) {
return t.get() - t.get(1)
}, w.roc = function(t, e) {
var i = t.get(e);
return 100 * (t.get() - i) / i
}, w.dev = function(t, e, i) {
var o = w.sma(t, e, i);
return w.dev2(t, e, o)
}, w.dev2 = function(t, e, i) {
var o, n, r, s = 0;
for (o = 0; o < e; o++) n = t.get(o), r = w.abs(n - i), s += r;
return s / e
}, w.stdev = function(t, e, i) {
var o = w.variance(t, e, i);
return w.sqrt(o)
}, w.variance = function(t, e, i) {
var o = w.sma(t, e, i);
return w.variance2(t, o, e)
}, w.variance2 = function(t, e, i) {
var o, n, r, s = 0;
for (o = 0; o < i; o++) n = t.get(o), r = w.abs(n - e), s += r * r;
return s / i
}, w.percentrank = function(t, e) {
var i, o, n, r;
if (w.na(t.get(e - 1))) return NaN;
for (i = 0, o = t.get(), n = 1; n < e; n++) r = t.get(n), w.ge(o, r) && i++;
return 100 * i / e
}, w.createNewSessionCheck = function(t) {
var e = u.newBarBuilder(t.symbol.period, t.symbol.session);
return function(t) {
return e.indexOfBar(t) === S.POST_SESSION && (e.moveTo(t), !0)
}
}, s.LOW = 0, s.HIGH = 1, s.prototype.isPivotFound = function() {
return -1 !== this._pivotIndex.get()
}, s.prototype.pivotIndex = function() {
return this._pivotIndex.get()
}, s.prototype.currentValue = function() {
return this._currentValue.get()
}, s.prototype.pivotType = function() {
return this._pivotType
}, s.prototype.reset = function() {
this._currentValue.set(NaN), this._currentIndex.set(0), this._pivotIndex.set(-1)
}, s.prototype.isRightSideOk = function(t) {
return t - this._currentIndex.get() === this._areaRight
}, s.prototype.isViolate = function(t, e) {
if (t < 1 || isNaN(this._currentValue.get())) return !0;
var i = this._series.get(this._index - t);
return !!isNaN(i) || (i === this._currentValue.get() ? e : this._pivotType === s
.HIGH ? i > this._currentValue.get() : i < this._currentValue.get())
}, s.prototype.processPoint = function(t) {
this.isViolate(t, !1) && (this._currentValue.set(this._series.get()), this
._currentIndex.set(t))
}, s.prototype.isRestartNeeded = function(t) {
return t - this._currentIndex.get() > this._areaRight
}, s.prototype.update = function() {
var t, e;
if (this._isNewBar && this.isPivotFound() && this.reset(), this.processPoint(
this._index), this.isRightSideOk(this._index)) {
if (-1 === this._pivotIndex.get()) {
for (t = !0, e = 0; e < this._areaLeft; ++e)
if (this.isViolate(this._currentIndex.get() - 1 - e, !0)) {
t = !1;
break
} t && this._pivotIndex.set(this._currentIndex.get())
}
} else -1 !== this._pivotIndex.get() && this._pivotIndex.set(-1);
if (this.isRestartNeeded(this._index))
for (this.reset(), e = 0; e <= this._areaRight; ++e) this.processPoint(this
._index - this._areaRight + e)
}, a.prototype.addPivot = function(t, e, i) {
this._lastIndex.set(t), this._lastVal.set(e), this._lastType.set(i)
}, a.prototype.updatePivot = function(t, e) {
this._lastIndex.set(t), this._lastVal.set(e)
}, a.prototype.lastPrice = function() {
return this._lastVal.get()
}, a.prototype.lastIndex = function() {
return this._lastIndex.get()
}, a.prototype.addPoint = function(t, e, i) {
var o;
return isNaN(this._lastVal.get()) ? void this.addPivot(t, e, i) : (o = this
._lastVal.get(), this._lastType.get() === i ? void((i === s.HIGH ? e >
o : e < o) && this.updatePivot(t, e)) : void(Math.abs(o - e) / e >
this._deviation && this.addPivot(t, e, i)))
}, a.prototype.processPivot = function(t) {
t.update(), this._isBarClosed && t.isPivotFound() && this.addPoint(t
.pivotIndex(), t.currentValue(), t.pivotType())
}, w.zigzag = function(t, e, i) {
return new a(t, e, i).lastPrice()
}, w.zigzagbars = function(t, e, i) {
var o = new a(t, e, i);
return -1 === o.lastIndex() ? NaN : o.lastIndex() - w.n(i)
}, l.prototype.new_sym = function(t, e, i, o) {
return this.symbol.script.add_sym(t, e, i, void 0, o)
}, l.prototype.select_sym = function(t) {
this.symbol = this.symbol.script.get_sym(t)
}, l.prototype.new_var = function(t) {
var e, i = this.vars;
return i.length <= this.vars_index && i.push(new c(this.symbol)), e = i[this
.vars_index++], arguments.length > 0 && e.set(t), e
}, l.prototype.new_ctx = function() {
return this.ctx.length <= this.ctx_index && this.ctx.push(new l(this.symbol)),
this.ctx[this.ctx_index++]
}, l.prototype.prepare = function(t) {
var e, i;
for (this.ctx_index = 0, this.vars_index = 0, e = 0; e < this.vars.length; e++)
this.vars[e].prepare(t);
for (i = 0; i < this.ctx.length; i++) this.ctx[i].prepare(t)
}, l.prototype.stop = function() {
this.symbol = null, this.vars = null
}, c.prototype.valueOf = function() {
return this.get(0)
}, c.prototype.get = function(t) {
return isNaN(t) && (t = 0), t = t || 0, this.hist ? t >= this.hist.length ? (
console.error("not enough depth: " + this), NaN) : this._get(t) : (this
.mindepth = w.max(this.mindepth, t), NaN)
}, c.prototype._get = function(t) {
var e = this.hist_pos - t;
return e < 0 && (e += this.hist.length), this.hist[e]
}, c.prototype.set = function(t) {
this.hist && (this.hist[this.hist_pos] = t, this.modified = !0)
}, c.prototype.prepare = function(t) {
t === this.symbol && (t.isNewBar ? (this.original = this.get(0), !this
.modified && this.hist || this.add_hist()) : this.set(this
.original), this.modified = !1)
}, c.prototype.add_hist = function() {
var t, e, i;
if (!this.hist) {
for (t = w.na(this.mindepth) ? w.max_series_size : w.min(this.mindepth + 1,
w.max_series_size), t = Math.round(t), e = Array(t), i = 0; i <
t; i++) e[i] = NaN;
this.hist = e, this.hist_pos = -1
}
this.hist_pos = Math.min(this.hist_pos + 1, this.hist.length), this.hist_pos ===
this.hist.length && (this.hist_pos = this.hist.length - 1, this.hist
.shift(), this.hist.push(NaN)), this.hist[this.hist_pos] = this.original
}, c.prototype.adopt = function(t, e, i) {
var o, n, r, s;
return this.hist || (this.mindepth = NaN), o = e.get(), n = t.indexOf(o), 0 !==
i && (r = e.get(1), w.na(r) || (s = t.indexOf(r), n = n === s ? -1 : n)),
n < 0 ? NaN : this._get(n)
}, c.prototype.indexOf = function(t) {
var e, i, n, r;
return this.hist ? w.na(t) ? -1 : (e = this.hist.length, i = this.symbol.index +
1, n = Math.min(e, i), r = o.upperbound_int(this.hist, t, 0, n), 0 ===
r ? -1 : n - r) : (this.mindepth = NaN, -1)
}, u.parseTicker = function(t) {
var e = t.indexOf(":");
return -1 === e ? t : t.substr(e + 1)
}, u.parsePeriod = function(t) {
var e, i, o, n, r, s, a, l;
return t += "", e = t.slice(0), i = e.indexOf(",") >= 0, i && (n = e.split(","),
o = u.parsePeriod(n[1]), e = n[0]), r = !1, s = !1, a = e[e.length - 1],
-1 === "DWM".indexOf(a) && ("S" === a ? s = !0 : (r = !0, a = "")), l =
parseInt(r ? e : e.length > 1 ? e.slice(0, e.length - 1) : 1), {
resolution: a,
interval: l,
pureResolution: "" + l + a,
isIntraday: r,
isSeconds: s,
range: o
}
}, u.newBarBuilder = function(t, e, i) {
var o = u.parsePeriod(t);
return S.newBarBuilder(o.resolution, o.interval, e, i)
}, u.newSession = function(t, e) {
var i = b.get_timezone(t);
return (new S.Session).init(i, e)
}, u.prototype.set_symbolinfo = function(t) {
t || console.error("WARN: symbolinfo isn't defined for " + this.tickerid), this
.info = t, this.timezone = b.get_timezone(t.timezone), this.session.init(
this.timezone, t.session);
for (var e in this.other_sessions) this.other_sessions.hasOwnProperty(e) && this
.other_sessions[e].init(this.timezone, e)
}, u.prototype.get_session = function(t) {
if (!t) return this.session;
var e = this.other_sessions[t];
return e || (e = new S.Session, this.other_sessions[t] = e), e
}, u.prototype.isdwm = function() {
return "" !== this.resolution && "S" !== this.resolution
}, u.prototype.enable_dwm_aligning = function(t, e) {
this.dwm_aligner = u.newBarBuilder(this.period, t, e)
}, u.prototype.bartime = function(t, e) {
var i, o, n, r, s = this.time;
return t && (i = t, e && (i += e), o = this.bb_cache[i], o || (n = this
.get_session(e), o = u.newBarBuilder(t, n), this.bb_cache[i] = o),
s = o.alignTime(s)), !this.isdwm() || isNaN(s) ? s : (r = b.utc_to_cal(
this.timezone, s), this.session.spec.correctTradingDay(r, this
.timezone), b.cal_to_utc(this.timezone, r))
}, u.prototype.lastbar = function(t) {
var e, i;
isNaN(t.time) || (e = t.time, this.dwm_aligner && (this.dwm_aligner.moveTo(e),
e = this.dwm_aligner.startOfBar(0)), i = this.time !== e, i && this
.index >= 0 && !this.isBarClosed && (this.isNewBar = !1, this
.isBarClosed = !0, this.script.calc(this)), this.time = e, this
.open = t.open, this.high = t.high, this.low = t.low, this.close = t
.close, this.volume = t.volume, this.updatetime = t.updatetime, this
.isNewBar = i, this.isBarClosed = t.isBarClosed, this.isLastBar = t
.isLastBar, this.isNewBar && this.index++, this.script.calc(this))
}, d.prototype.calc = function(t) {
var e, i, o = this.ctx,
n = this.body;
o.prepare(t), e = n.main(o, this.inputCallback), i = this, this.out && e && (!
isNaN(o.symbol.time) || e.nonseries) && (e.nonseries ? ("projection" ===
e.type && (e.projectionTime = o.symbol.time), this.nonseriesOut(o
.symbol, e)) : e.bars ? e.bars.forEach(function(t) {
i.out(o.symbol, t)
}) : this.out(o.symbol, e))
}, d.prototype.init = function() {
var t = this.ctx,
e = this.body;
e.init && e.init(t, this.inputCallback), e.main(t, this.inputCallback)
}, d.prototype.add_sym = function(t, e, i, o, n) {
var r = this.runner.add_sym(t, e, i, this, o, n);
return this.symbols.push(r), r.isdwm() && this.symbols.length > 1 && r
.enable_dwm_aligning(this.symbols[0].session, r.session), r
}, d.prototype.stop = function() {
this.symbols = null, this.ctx.stop(), this.ctx = null
}, d.prototype.get_sym = function(t) {
return this.symbols[t]
}, p.prototype.add_sym = function(t, e, i, o, n, r) {
var s = new u(t, e, i, o, n, r);
return this.symbols.push(s), s
}, p.prototype.get_sym = function(t) {
return this.symbols[t]
}, p.prototype.out = function(t, e) {
if (this.nonseriesUpdate) {
var i = $.extend({}, this.nonseriesUpdate);
e.splice(0, 0, t.time), i.lastBar = e, this.host.nonseriesOut(t, i)
} else this.host.out(t, e)
}, p.prototype.start = function() {
function t(t, o) {
var n = p.feed.subscribe(t.tickerid, t.period, t.periodBase, t
.periodForInitialRange,
function(i) {
"series" == (i.nonseries ? "nonseries" : "series") ? e.update(o,
i): i.lastBar ? (e.nonseriesUpdate = i, i.lastBar
.isLastBar = !0, e.symbols[0].lastbar(i.lastBar), e
.nonseriesUpdate = null) : r.nonseriesOut(t, i)
}, r.onErrorCallback, r.symbolInfo, r.sessionId, r.rangeExtension);
i.push(n)
}
var e, i, o, n, r = this.host;
for (this._script = new d(r.tickerid, r.period, r.periodBase || r.period, this,
r.body, this.out.bind(this), r.input, r.symbolInfo.minmov / r.symbolInfo
.pricescale, r.nonseriesOut), e = this, i = [], o = this.symbols, n =
0; n < o.length; n++) t(o[n], n);
this.subscription = i
}, p.prototype.stop = function() {
var t, e = this.subscription;
if (!e && !this._script) return void console.warn(
"Recurring script engine stop happened.");
for (t = 0; t < e.length; t++) p.feed.unsubscribe(e[t]);
this.subscription = null, this._script.stop(), this._script = null, this
.symbols = null
}, p.prototype.update = function(t, e) {
var i, o;
if (!e) return void console.error("Unexpected barset = null");
i = this.symbols[t], this.isRecalculated ? (o = e.bar(e.count() - 1), o
.isBarClosed = e.isLastBarClosed(), o.isLastBar = !0, i.lastbar(o)) :
this.barsets[t] || (this.barsets[t] = e, i.set_symbolinfo(e.symbolinfo()),
this.recalc())
}, p.prototype.recalc = function() {
var t, e, i, o, n, r, s, a = this.symbols;
for (t = 0; t < a.length; t++)
if (!this.barsets[t]) return;
for (e = a.length - 1; e >= 0; e--)
for (i = a[e], o = this.barsets[e], n = o.count(), r = 0; r < n; r++) s = o
.bar(r), s.isLastBar = r === n - 1, s.isBarClosed = !s.isLastBar || o
.isLastBarClosed(), i.lastbar(s);
this.isRecalculated = !0, this.barsets[0] && this.barsets[0].endOfData && this
.host.setNoMoreData(), this.host.recalc(this, {
endOfData: this.barsets[0].endOfData,
nextTime: this.barsets[0].nextTime
})
}, p.feed = {
subscribe: function(t, e, i, o) {
console.error("must be initialized with setupFeed")
},
unsubscribe: function(t) {
console.error("must be initialized with setupFeed")
}
}, f.prototype.stop = function() {
this.runner.stop()
}, m.prototype.symbolinfo = function() {
return this.info
}, m.prototype.isLastBarClosed = function() {
return this.isBarClosed
}, m.prototype.setLastBarClosed = function(t) {
this.isBarClosed = t
}, m.prototype.bar = function(t) {
return this.bars[t]
}, m.prototype.count = function() {
return this.bars.length
}, m.prototype.add = function(t, e) {
var i = t,
o = this.bars,
n = o.length,
r = i.time,
s = 0 === n ? NaN : o[n - 1].time;
0 === n || s < r ? o.push(i) : s === r ? o[n - 1] = i : console.error(
"time order violation, prev: " + new Date(s).toUTCString() + ", cur: " +
new Date(r).toUTCString()), this.isBarClosed = !!e
}, g.prototype.init = function(t) {
this.bb = u.newBarBuilder(this.period, t.symbol.session), this.bbEmptyBars =
this.generateEmptyBars ? u.newBarBuilder(this.period, t.symbol.session) :
void 0
}, g.prototype.extrapolate = function(t, e) {
return isNaN(t) || isNaN(e) ? void 0 : S.extrapolateBarsFrontToTime(this
.bbEmptyBars, t, e)
}, g.prototype.main = function(t) {
var e = t.symbol.time,
i = this.bb.alignTime(e),
o = t.new_var(i),
n = w.na(i),
r = o.get(1),
s = w.na(r) ? 1 : w.neq(i, r),
a = t.new_var(),
l = t.new_var(),
c = t.new_var(),
h = t.new_var(),
u = a.get(1),
d = l.get(1),
p = c.get(1),
_ = h.get(1),
f = n ? NaN : s ? w.open(t) : u,
m = n ? NaN : s ? w.high(t) : w.max(w.high(t), d),
g = n ? NaN : s ? w.low(t) : w.min(w.low(t), p),
v = n ? NaN : w.close(t),
y = n ? NaN : s ? w.volume(t) : w.volume(t) + _,
b = n ? NaN : e,
S = t.symbol.isBarClosed && this.bb.isLastBar(0, e),
T = this.generateEmptyBars && s ? this.extrapolate(r, i) : void 0,
C = t.new_var(w.close(t)),
x = C.get(1),
P = T instanceof Array ? x : NaN;
return a.set(f), l.set(m), c.set(g), h.set(y), [i, f, m, g, v, y, b, S, T, P]
}, v.prototype.main = function(t) {
return [w.open(t), w.high(t), w.low(t), w.close(t), w.volume(t), w.updatetime(
t)]
}, {
Std: w,
Series: c,
Symbol: u,
SymbolInfo: h,
StudyEngine: f,
BarSet: m,
OHLCV: v,
BarBuilder: g,
setupFeed: _
}
}();
t.exports = r
}).call(e, i(78))
}, function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
}), e.STATUS_OFFLINE = 0, e.STATUS_RESOLVING = 1, e.STATUS_LOADING = 2, e.STATUS_READY = 3, e
.STATUS_INVALID_SYMBOL = 4, e.STATUS_SNAPSHOT = 5, e.STATUS_EOD = 6, e.STATUS_PULSE = 7, e
.STATUS_DELAYED = 8, e.STATUS_DELAYED_STREAMING = 9, e.STATUS_NO_BARS = 10, e.STATUS_REPLAY = 11, e
.STYLE_BARS = 0, e.STYLE_CANDLES = 1, e.STYLE_LINE = 2, e.STYLE_LINE_TYPE_MARKERS = 0, e
.STYLE_LINE_TYPE_STEP = 1, e.STYLE_LINE_TYPE_SIMPLE = 2, e.STYLE_AREA = 3, e.STYLE_RENKO = 4, e
.STYLE_KAGI = 5, e.STYLE_PNF = 6, e.STYLE_PB = 7, e.STYLE_HEIKEN_ASHI = 8, e.STYLE_HOLLOW_CANDLES =
9, e.STYLE_BASELINE = 10, e.STYLE_SHORT_NAMES = {}, e.STYLE_SHORT_NAMES[e.STYLE_BARS] = "bar", e
.STYLE_SHORT_NAMES[e.STYLE_CANDLES] = "candle", e.STYLE_SHORT_NAMES[e.STYLE_HOLLOW_CANDLES] =
"hollowCandle", e.STYLE_SHORT_NAMES[e.STYLE_LINE] = "line", e.STYLE_SHORT_NAMES[e.STYLE_AREA] =
"area", e.STYLE_SHORT_NAMES[e.STYLE_RENKO] = "renko", e.STYLE_SHORT_NAMES[e.STYLE_PB] = "pb", e
.STYLE_SHORT_NAMES[e.STYLE_KAGI] = "kagi", e.STYLE_SHORT_NAMES[e.STYLE_PNF] = "pnf", e
.STYLE_SHORT_NAMES[e.STYLE_HEIKEN_ASHI] = "ha", e.STYLE_SHORT_NAMES[e.STYLE_BASELINE] = "baseline",
e.SYMBOL_STRING_DATA = {}, e.SYMBOL_STRING_DATA[e.STYLE_RENKO] = {
type: "BarSetRenko@tv-prostudies"
}, e.SYMBOL_STRING_DATA[e.STYLE_PB] = {
type: "BarSetPriceBreak@tv-prostudies"
}, e.SYMBOL_STRING_DATA[e.STYLE_KAGI] = {
type: "BarSetKagi@tv-prostudies"
}, e.SYMBOL_STRING_DATA[e.STYLE_PNF] = {
type: "BarSetPnF@tv-prostudies"
}, e.SYMBOL_STRING_DATA[e.STYLE_HEIKEN_ASHI] = {
type: "BarSetHeikenAshi@tv-basicstudies"
}
}, function(t, e, i) {
"use strict";
function o(t) {
var e, i, o, n, r, s;
if ("Asia/Bahrain" === t && (t = "Asia/Kuwait"), this._name = t, e = u[t], e || (e = {
time: [],
offset: []
}, this._invalid = !0), e.time.length !== e.offset.length && (e = {
time: [],
offset: []
}, this._invalid = !0), !e.time_utc) {
for (i = e.time, o = e.offset, n = i.length, r = Array(n), s = 0; s < n; s++) i[s] *= 1e3, o[
s] *= 1e3, r[s] = i[s] - o[s];
e.time_utc = r
}
this.tz = e
}
function n(t, e) {
var i, o, n, s = t.length;
if (0 === s) return -1;
if (isNaN(e)) throw Error("Key is NaN");
for (i = 0, o = s - 1, n = r((i + o) / 2);;) {
if (t[n] > e) {
if ((o = n - 1) < i) return n
} else if (i = n + 1, o < i) return n < s - 1 ? n + 1 : -1;
n = r((i + o) / 2)
}
}
var r, s, a, l, c, h, u = i(806).tzData;
o.prototype.offset_utc = function(t) {
return o._offset(this.tz.time_utc, this.tz.offset, t)
}, o.prototype.offset_loc = function(t) {
return o._offset(this.tz.time, this.tz.offset, t)
}, o.prototype.is_valid = function() {
return !this._invalid
}, o._offset = function(t, e, i) {
var o = n(t, i);
return -1 === o ? 0 : e[o]
}, r = function(t) {
return 0 | t
}, s = function(t) {
return 60 * t * 1e3
}, a = function(t) {
return 1e3 * t
}, l = function(t, e) {
return r((r(t / 1e3) - r(e / 1e3)) / 60)
}, c = function(t, e) {
return r(r(t / 1e3) - r(e / 1e3))
}, h = {
SUNDAY: 1,
MONDAY: 2,
TUESDAY: 3,
WEDNESDAY: 4,
THURSDAY: 5,
FRIDAY: 6,
SATURDAY: 7,
JANUARY: 0,
DECEMBER: 11,
YEAR: 1,
MONTH: 2,
WEEK_OF_YEAR: 3,
DAY_OF_MONTH: 5,
DAY_OF_YEAR: 6,
DAY_OF_WEEK: 7,
HOUR_OF_DAY: 11,
MINUTE: 12,
SECOND: 13,
minutesPerDay: 1440,
secondsPerDay: s(1440),
get_minutes_from_hhmm: function(t) {
return -1 !== t.indexOf(":") && (t = t.split(":").join("")), t % 100 + 60 * r(t / 100)
},
get_year: function(t) {
return t.getUTCFullYear()
},
get_month: function(t) {
return t.getUTCMonth()
},
get_hours: function(t) {
return t.getUTCHours()
},
get_minutes: function(t) {
return t.getUTCMinutes()
},
get_seconds: function(t) {
return t.getUTCSeconds()
},
get_day_of_month: function(t) {
return t.getUTCDate()
},
get_day_of_week: function(t) {
return t.getUTCDay() + 1
},
get_day_of_year: function(t) {
var e = Date.UTC(t.getUTCFullYear(), 0, 1, 0, 0, 0, 0);
return r((t.getTime() - e) / h.secondsPerDay) + 1
},
get_week_of_year: function(t) {
var e = Date.UTC(t.getUTCFullYear(), 0, 1, 0, 0, 0, 0),
i = h.clone(t);
return h.set_hms(i, 0, 0, 0, 0), i.setUTCDate(i.getUTCDate() + 4 - (i.getUTCDay() ||
7)), r(((i.getTime() - e) / h.secondsPerDay + 1) / 7)
},
get_minutes_from_midnight: function(t) {
return 60 * h.get_hours(t) + h.get_minutes(t)
},
set_hms: function(t, e, i, o, n) {
t.setUTCHours(e), t.setUTCMinutes(i), t.setUTCSeconds(o), t.setUTCMilliseconds(n)
},
add_days_considering_dst: function(t, e, i) {
var o, n = t.offset_utc(e),
r = this.clone(e);
return this.add_date(r, i), o = t.offset_utc(r), r.setTime(r.getTime() + n - o), r
},
add_date: function(t, e) {
t.setTime(t.getTime() + e * h.secondsPerDay)
},
clone: function(t) {
return new Date(t.getTime())
},
get_days_per_year: function(t) {
var e = t.getUTCFullYear();
return this.days_per_year(e)
},
days_per_year: function(t) {
return t % 4 != 0 || t % 100 == 0 && t % 400 != 0 ? 365 : 366
},
get_part: function(t, e) {
switch (e) {
case h.YEAR:
return h.get_year(t);
case h.MONTH:
return h.get_month(t);
case h.DAY_OF_MONTH:
return h.get_day_of_month(t);
case h.WEEK_OF_YEAR:
return h.get_week_of_year(t);
case h.DAY_OF_WEEK:
return h.get_day_of_week(t);
case h.HOUR_OF_DAY:
return h.get_hours(t);
case h.MINUTE:
return h.get_minutes(t);
case h.DAY_OF_YEAR:
return h.get_day_of_year(t);
case h.SECOND:
return h.get_seconds(t);
default:
return t.getTime()
}
},
time_minutes: s,
time_seconds: a,
time_minutes_diff: l,
time_seconds_diff: c,
utc_to_cal: function(t, e) {
var i = t.offset_utc(e);
return new Date(e + i)
},
get_cal: function(t, e, i, o) {
var n = new Date(Date.UTC(e, i, o)),
r = t.offset_utc(+n);
return new Date(n.valueOf() - r)
},
get_cal_utc: function(t, e, i) {
return new Date(Date.UTC(t, e, i))
},
cal_to_utc: function(t, e) {
var i = e.getTime();
return i - t.offset_loc(i)
},
get_timezone: function(t) {
return new o(t)
},
shift_day: function(t, e) {
var i = t - 1;
return i += e, i > 6 ? i %= 7 : i < 0 && (i = (7 + i % 7) % 7), i + 1
}
}, t.exports = h
}, , function(t, e, i) {
"use strict";
(function(t) {
function o(e) {
e || (e = {}), this.checkable = e.checkable || !1, this.checked = e.checked || null, this
.enabled = void 0 === e.enabled || e.enabled, this.visible = e.visible || !0, this
.active = !0, this.font = e.font || "Arial", this.icon = e.icon || null, this.iconText =
e.iconText || null, this.iconVisibleInMenu = e.iconVisibleMenu || !0, this
.deleteButton = e.deleteButton || null, this.shortcut = null, this.setShortCut(e
.shortcut, e.doNotBindShortcut), this.statusTip = e.statusTip || null, this.text = e
.text || null, this.toolTip = e.toolTip || null, this.htmlclass = e.htmlclass || null,
this.statName = e.statName || null, this._callbackContext = e.callbackContext || this,
this._callbacks = new t, this.subActions = e.subActions || []
}
function n() {
o.call(this), this.font = null, this.subActions = null, this.htmlclass = "action-separator"
}
function r(t) {
o.call(this), this.deferred = t
}
var s = i(147);
o.prototype.callbacks = function() {
return this._callbacks
}, o.prototype.callbackContext = function() {
return this._callbackContext
}, o.prototype.setCallbackContext = function(t) {
this._callbackContext = t
}, o.prototype.hasSubActions = function() {
return this.subActions && this.subActions.length
}, o.prototype.setChecked = function(t) {
this.checked = t
}, o.prototype._toggleChecked = function() {
this.checked = !this.checked
}, o.prototype.setVisible = function(t) {
this.visible = t
}, o.prototype.setEnabled = function(t) {
this.enabled = t
}, o.prototype.disable = function() {
this.setEnabled(!1)
}, o.prototype.enable = function() {
this.setEnabled(!0)
}, o.prototype.setActive = function(t) {
this.active !== t && (this.active = t, this.shortcut && !this.doNotBindShortcut && (t ?
this._bindShortCut() : this._unbindShortCut()))
}, o.prototype.setShortCut = function(t, e) {
t && (this.shortcut = t, !0 !== e && this._bindShortCut())
}, o.prototype._bindShortCut = function() {
s.bind(this.shortcut, function(t) {
if (t.preventDefault(), this.enabled) return this.executeCallback(), !1
}.bind(this))
}, o.prototype._unbindShortCut = function() {
s.unbind(this.shortcut)
}, o.prototype.setIconVisible = function(t) {
this.iconVisibleInMenu = t
}, o.prototype.executeCallback = function(t) {
this._lastEvent = t, this._toggleChecked(), this._callbacks.fire(this)
}, inherit(n, o), inherit(r, o), e.Action = o, e.ActionSeparator = n, e.ActionPlaceholder =
r
}).call(e, i(10))
}, function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
});
var o = function() {
function t() {
this._renderers = [], this._globalAlpha = 1
}
return t.prototype.setGlobalAlpha = function(t) {
this._globalAlpha = t
}, t.prototype.append = function(t) {
this._renderers.push(t)
}, t.prototype.insert = function(t, e) {
this._renderers.splice(e, 0, t)
}, t.prototype.draw = function(t) {
for (var e = 0; e < this._renderers.length; e++) t.save(), t.globalAlpha = this
._globalAlpha, this._renderers[e].draw(t), t.restore()
}, t.prototype.drawBackground = function(t) {
var e, i;
for (t.save(), t.globalAlpha = this._globalAlpha, e = 0; e < this._renderers
.length; e++) i = this._renderers[e], i.drawBackground && i.drawBackground(t);
t.restore()
}, t.prototype.hitTest = function(t) {
var e, i, o = null;
for (e = this._renderers.length - 1; e >= 0; e--) null !== (i = this._renderers[e]
.hitTest(t)) && (null === o || i.result() > o.result()) && (o = i);
return o
}, t
}();
e.CompositeRenderer = o
}, function(t, e, i) {
"use strict";
function o(t, e) {
return t <= e
}
function n(t, e) {
return t >= e
}
function r(t, e, i) {
return Math.min(Math.max(t, e), i)
}
function s(t) {
return t < 0 ? -1 : t > 0 ? 1 : 0
}
function a(t) {
if (t < 0) return f.logDebug("MathEx.isBaseDecimal: argument less zero"), !1;
for (var e = t; e > 1; e /= 10)
if (e % 10 != 0) return !1;
return !0
}
function l(t, e, i) {
return e - t <= i
}
function c(t, e, i) {
return Math.abs(t - e) < i
}
function h(t) {
return t <= 0 ? (f.logDebug("MathEx.log10: argument less or equal zero"), NaN) : Math.log(t) / Math
.log(10)
}
function u(t, e) {
return t < e ? -1 : t > e ? 1 : 0
}
function d(t, e) {
var i, o;
if (void 0 === e && (e = u), t.length < 1) throw Error("array is empty");
for (i = t[0], o = 0; o < t.length; ++o) e(t[o], i) < 0 && (i = t[o]);
return i
}
function p(t, e) {
var i, o;
if (void 0 === e && (e = u), t.length < 1) throw Error("array is empty");
for (i = t[0], o = 0; o < t.length; ++o) e(t[o], i) > 0 && (i = t[o]);
return i
}
var _, f;
Object.defineProperty(e, "__esModule", {
value: !0
}), _ = i(7), f = _.getLogger("Common.MathEx"), e.lessThan = o, e.greaterThan = n, e.clamp = r, e
.sign = s, e.isBaseDecimal = a, e.greaterOrEqual = l, e.equal = c, e.log10 = h, e.defComparator = u,
e.min = d, e.max = p
}, , function(t, e, i) {
"use strict";
function o(t) {
this.items = t.items, this.height = t.height || t.width, this.width = t.width || t.height, this
._color = t.color, this._borderColor = t.borderColor, this._vertOffset = t.vertOffset || 0, t
.textCache && (this._textCache = t.textCache, this._textColor = t.textColor, this
._textVertOffset = this._vertOffset > 0 ? this.height : -this.height, this._textImageWidth =
this._textCache.textImageWidth, this._textImageHeight = this._textCache.textImageHeight)
}
var n = i(8).Point,
r = i(11);
o.prototype.draw = function(t) {
this.drawShape(t), this.drawText(t)
}, o.prototype.drawShape = function(t) {
throw Error("Not implemented")
}, o.prototype.drawText = function(t) {
var e, i, o, n, r, s;
if (this._textCache)
for (e = 0, i = this.items.length; e < i; e++) o = this.items[e], n = o.x, r = o.y + this
._vertOffset + this._textVertOffset, s = o.style && null != o.style.textColor ? o.style
.textColor : this._textColor, this._textCache.paintTo(t, s, n, r, "center", this
._vertOffset > 0 ? "top" : "bottom")
}, o.prototype.hitTest = function(t, e) {
var i, o, s, a, l, c, h, u, d, p, _, f, m, g = Math.max(this.height, this.width),
v = this._vertOffset,
y = this._textVertOffset;
for (e = e || r.REGULAR, o = 0; o < this.items.length; ++o)
if (s = this.items[o]) {
if (i = new n(s.x, s.y + v), i.subtract(t).length() <= g) return new r(e, {});
if (this._textCache && (a = this._textImageWidth / 2, l = s.y + v + y, c = v > 0 ? 0 : -
this._textImageHeight, h = v > 0 ? this._textImageHeight : 0, u = t.x, d = t.y,
p = s.x - a, _ = l + c, f = s.x + a, m = l + h, u > p && u < f && d > _ && d < m
)) return new r(e, {})
} return null
}, e.PaneRendererAbstractShape = TradingView.PaneRendererAbstractShape = o
}, function(t, e, i) {
"use strict";
for (var o = {
LineToolFibRetracement: i(808).LineToolFibRetracement,
LineToolFibChannel: i(811).LineToolFibChannel,
LineToolFibSpeedResistanceArcs: i(812).LineToolFibSpeedResistanceArcs,
LineToolProjection: i(813).LineToolProjection,
LineToolTrendBasedFibExtension: i(814).LineToolTrendBasedFibExtension,
LineToolElliott: i(104).LineToolElliott,
LineToolFibCircles: i(815).LineToolFibCircles,
LineToolTrading: i(224),
LineStudyMtp: i(105).LineStudyMtp,
LineToolVertLine: i(816).LineToolVertLine,
LineToolBarsPattern: i(818).LineToolBarsPattern,
LineToolTrendBasedFibTime: i(819).LineToolTrendBasedFibTime,
LineToolFibTimeZone: i(820).LineToolFibTimeZone,
LineToolCircleLines: i(821).LineToolCircleLines,
LineToolDateRange: i(822).LineToolDateRange,
LineToolPriceRange: i(823).LineToolPriceRange,
LineToolDateAndPriceRange: i(824).LineToolDateAndPriceRange,
LineToolParallelChannel: i(825).LineToolParallelChannel,
LineToolTrendAngle: i(826).LineToolTrendAngle,
LineToolTrendLine: i(159).LineToolTrendLine,
LineToolArrowMark: i(129).LineToolArrowMark,
LineToolExecution: i(334).LineToolExecution,
LineToolPitchfan: i(827).LineToolPitchfan,
LineToolGannSquare: i(828).LineToolGannSquare,
LineToolFibSpeedResistanceFan: i(829).LineToolFibSpeedResistanceFan,
LineToolGannComplex: i(830).LineToolGannComplex,
LineToolGannFixed: i(831).LineToolGannFixed,
LineToolGannFan: i(832).LineToolGannFan,
LineToolFibWedge: i(333).LineToolFibWedge,
LineToolPitchfork: i(161).LineToolPitchfork,
LineToolDisjointAngle: i(833).LineToolDisjointAngle,
LineToolFlatBottom: i(834).LineToolFlatBottom,
LineToolIcon: i(835).LineToolIcon,
LineToolRotatedRectangle: i(836).LineToolRotatedRectangle,
LineToolFibSpiral: i(837).LineToolFibSpiral,
LineToolHeadAndShoulders: i(838).LineToolHeadAndShoulders,
LineToolTriangle: i(839).LineToolTriangle,
LineToolTrianglePattern: i(840).LineToolTrianglePattern,
LineTool5PointsPattern: i(336).LineTool5PointsPattern,
LineToolThreeDrivers: i(841).LineToolThreeDrivers,
LineToolABCD: i(842).LineToolABCD,
LineToolRiskReward: i(225).LineToolRiskReward,
LineToolPolyline: i(844).LineToolPolyline,
LineToolPrediction: i(845).LineToolPrediction,
LineToolPriceLabel: i(846).LineToolPriceLabel,
LineToolNote: i(337).LineToolNote,
LineToolNoteAbsolute: i(337).LineToolNoteAbsolute,
LineToolBrush: i(847).LineToolBrush,
LineToolArc: i(848).LineToolArc,
LineToolCallout: i(849).LineToolCallout,
LineToolBalloon: i(850).LineToolBalloon,
LineToolText: i(338).LineToolText,
LineToolHorzLine: i(851).LineToolHorzLine,
LineToolHorzRay: i(852).LineToolHorzRay,
LineToolRectangle: i(853).LineToolRectangle,
LineToolEllipse: i(854).LineToolEllipse,
LineToolTimeCycles: i(855).LineToolTimeCycles,
LineToolSineLine: i(856).LineToolSineLine,
LineToolGhostFeed: i(857).LineToolGhostFeed,
LineToolBezierQuadro: i(858).LineToolBezierQuadro,
LineToolBezierCubic: i(859).LineToolBezierCubic,
LineToolArrow: i(860).LineToolArrow,
LineToolRay: i(861).LineToolRay,
LineToolExtended: i(862).LineToolExtended,
LineToolSchiffPitchfork: i(863).LineToolSchiffPitchfork,
LineToolSchiffPitchfork2: i(864).LineToolSchiffPitchfork2,
LineToolInsidePitchfork: i(865).LineToolInsidePitchfork,
LineToolTextAbsolute: i(338).LineToolTextAbsolute,
LineToolArrowMarkLeft: i(129).LineToolArrowMarkLeft,
LineToolArrowMarkRight: i(129).LineToolArrowMarkRight,
LineToolArrowMarkUp: i(129).LineToolArrowMarkUp,
LineToolArrowMarkDown: i(129).LineToolArrowMarkDown,
LineToolFlagMark: i(866).LineToolFlagMark,
LineToolCypherPattern: i(867).LineToolCypherPattern,
LineToolElliottImpulse: i(104).LineToolElliottImpulse,
LineToolElliottTriangle: i(104).LineToolElliottTriangle,
LineToolElliottTripleCombo: i(104).LineToolElliottTripleCombo,
LineToolElliottCorrection: i(104).LineToolElliottCorrection,
LineToolElliottDoubleCombo: i(104).LineToolElliottDoubleCombo,
LineToolRiskRewardLong: i(225).LineToolRiskRewardLong,
LineToolRiskRewardShort: i(225).LineToolRiskRewardShort,
LineToolPosition: i(868).LineToolPosition,
LineToolOrder: i(869).LineToolOrder
}, n = Object.keys(o), r = n.length; r--;) TradingView[n[r]] = o[n[r]];
t.exports = o
}, function(t, e, i) {
"use strict";
(function(e) {
var o = i(411).ExchangeSession,
n = function() {
function t(t, e, i, o) {
return "" === t ? new h(60 * e, i) : "S" === t ? new h(e, i) : new u(i, o, e, n(t,
i))
}
function n(t, e) {
switch (t) {
case "D":
return new S(e);
case "W":
return new w(e);
case "M":
return new T(e)
}
return console.error("unknown dwm resolution: " + t), null
}
function r(t, e, i, o, n) {
var r, s, a, l, c, h, u, d = (new x).init("Etc/UTC", t),
p = "" !== e;
return p ? (s = i * E[e], r = E.D) : (s = 60 * i * 1e3, r = 60 * d.spec
.findSessionEntry(0, 0).length() * 1e3), a = r / s, l = p ? 7 : 7 - d.spec
.weekEndsCount(), c = l * a, o < c ? (h = o / a, n - h * E.D) : (u = o / c, n -
u * E.W)
}
function s(t, e, i, o) {
if ("number" != typeof i || "number" != typeof e || isNaN(i) || isNaN(e))
throw Error("Cannot extrapolate from " + e + " to " + i);
return l(t, e, function(t, e) {
return e > i || o && t.length > o
})
}
function a(t, e, i) {
return l(t, e, function(t, e) {
return t.length >= i
})
}
function l(t, e, i) {
var o, n, r, s, a, l = e;
for (t.moveTo(l), o = [], n = 0, r = 0; !i(o, l);) {
if (n > 5) throw console.trace(["0x10", new Date(e), "->", new Date(l)]), Error(
"Internal error 0x10 while extrapolating.");
if ((s = t.indexOfBar(l)) === I) l = t.startOfBar(0);
else if (s === k) l = t.startOfBar(k);
else {
if ((a = t.startOfBar(s)) !== e) {
if (r && r === a) throw console.trace(["0x11", new Date(e), "->",
new Date(a)
]), Error("Internal error 0x11 while extrapolating.");
r = a, n = 0, o.push(a)
}
l = t.startOfBar(s + 1)
}
t.moveTo(l), n++
}
return o
}
function c(t) {
if (isNaN(t)) return NaN;
var e = this.indexOfBar(t);
return e === k && (this.moveTo(t), e = this.indexOfBar(t)), e < 0 ? NaN : this
.startOfBar(e)
}
function h(t, e) {
this.period = t, this.session = e, this.sessionStart = Number.MIN_VALUE, this
.sessionEnd = Number.MIN_VALUE
}
function u(t, e, i, o) {
this.period = i, this.sessionTgt = t, this.sessionSrc = e || t, this.builder = o,
this.periodStart = -Number.MAX_VALUE, this.periodEnd = -Number.MAX_VALUE, this
.periodLastBarStart = -Number.MAX_VALUE
}
function d(t, e, i) {
var o = M.clone(i);
return e.alignToSessionStart(o, t), M.cal_to_utc(t, o)
}
function p(t, e) {
var i = M.get_day_of_week(e) - t.firstDayOfWeek();
return i < 0 ? i + 7 : i
}
function _(t, e) {
var i = e + t.firstDayOfWeek();
return i > M.SATURDAY ? i - M.SATURDAY : i
}
function f(t, e) {
var i = M.get_day_of_year(e) - 1,
o = p(t, e) - i % 7;
return 0 === o ? C(i / 7) : (o >= 0 && (o -= 7), C((o + i) / 7))
}
function m(t, e, i) {
var o, n = 0;
for (o = e; o < i; ++o) n += t.isWeekEnd(_(t, o)) ? 1 : 0;
return n
}
function g(t, e) {
var i = new Date(Date.UTC(e, 11, 31, 23, 59)),
o = M.days_per_year(e) - v(t, i);
return t.isWeekEnd(M.get_day_of_week(i)) && o--, o
}
function v(t, e) {
var i, o, n = M.get_day_of_year(e) - 1,
r = p(t, e),
s = r - n % 7;
return s < 0 && (s += 7), i = 0, n < 7 - s ? i += m(t, s, r) : (o = 0 === s ? 0 : m(
t, s, 7), i += m(t, 0, r) + o), i + f(t, e) * t.weekEndsCount()
}
function y() {}
function b(t) {
this.sessionsSpec = t
}
function S(t) {
this.session = t
}
function w(t) {
this.session = t
}
function T(t) {
this.session = t
}
function C(t) {
return 0 | t
}
function x() {}
function P(t, e, i) {
var o, n, r, s, a = t.length;
if (0 === a) return -1;
for (o = 0, n = a - 1, r = C((o + n) / 2);;) {
if (0 === (s = i(t[r], e)) || s > 0) {
if ((n = r - 1) < o) return r
} else if (o = r + 1, n < o) return r < a - 1 ? r + 1 : -1;
r = C((o + n) / 2)
}
}
function L(t, e) {
var i = M.utc_to_cal(e.timezone, +t),
o = M.get_day_of_week(i),
n = M.get_minutes_from_midnight(i),
r = e.spec.findSessionEntry(o, n);
return r.isOvernight() && n > r.start() + r.length() && o === r.dayOfWeek() - 1 && (
o++, n -= 1440), o === r.dayOfWeek() && n >= r.start() && n < r.start() + r
.length()
}
var I = -1,
k = -2,
A = "undefined" != typeof window ? window : e,
M = A.PineJsCalendar ? A.PineJsCalendar : i(50),
E = {
S: 1e3,
D: 864e5,
W: 6048e5,
M: 2592e6
};
return h.prototype.alignTime = c, h.prototype.alignTimeIfPossible = function(t) {
var e = this.alignTime(t);
return isNaN(e) ? t : e
}, h.prototype.indexOfBar = function(t) {
return t < this.sessionStart ? I : t >= this.sessionEnd ? k : C(M
.time_seconds_diff(t, this.sessionStart) / this.period)
}, h.prototype.startOfBar = function(t) {
if (t === k) return this.sessionEnd;
if (t < 0) throw Error("Negative offset is not supported");
return this.sessionStart + M.time_seconds(this.period * t)
}, h.prototype.isLastBar = function(t, e) {
return e >= this.sessionStart + M.time_seconds(this.period * (t + 1) - 1)
}, h.prototype.moveTo = function(t) {
var e = this.session.timezone,
i = M.utc_to_cal(e, t),
o = this.session.spec,
n = o.alignToSessionStart(i, this.session.timezone);
this.sessionStart = M.cal_to_utc(e, i), this.sessionEnd = this.sessionStart + M
.time_minutes(n)
}, u.prototype.alignTime = c, u.prototype.alignTimeIfPossible = function(t) {
return this.tradingDayToSessionStart(t)
}, u.prototype.tradingDayToSessionStart = function(t) {
return this.moveTo(t), this.startOfBar(0)
}, u.prototype.indexOfBar = function(t) {
return t < this.periodStart ? I : t >= this.periodEnd ? k : 0
}, u.prototype.startOfBar = function(t) {
if (t === k || t > 0) return this.periodEnd;
if (t === I) throw Error("PRE_SESSION is not supported");
return this.periodStart
}, u.prototype.isLastBar = function(t, e) {
return e >= this.periodLastBarStart
}, u.prototype.moveTo = function(t) {
var e, i, o, n, r, s, a, l, c = M.utc_to_cal(this.sessionSrc.timezone, t);
c = this.sessionSrc.spec.correctTradingDay(c, this.sessionSrc.timezone), e =
this.sessionTgt.timezone, i = this.builder.indexOfPeriod(c, e), o = C(i /
this.period) * this.period, n = M.get_year(c), r = this.sessionTgt.spec,
s = this.builder.startOfPeriod(e, o, n), this.periodStart = d(e, r, s), a =
o + this.period, l = this.builder.startOfPeriod(e, a, n), this.periodEnd =
d(e, r, l), M.add_date(l, -1), this.moveToPrevWorkDay(r, l), this
.periodLastBarStart = d(e, r, l), (this.periodLastBarStart < this
.periodStart || this.periodLastBarStart === this.periodEnd) && (this
.periodLastBarStart = this.periodStart)
}, u.prototype.moveToPrevWorkDay = function(t, e) {
for (; t.isWeekEnd(M.get_day_of_week(e));) M.add_date(e, -1)
}, y.prototype.indexOfPeriod = function(t) {
return M.get_day_of_year(t) - 1
}, y.prototype.startOfPeriod = function(t, e, i) {
var o = M.get_cal(t, i, M.JANUARY, 1),
n = M.add_days_considering_dst(t, o, e);
return M.utc_to_cal(t, +n)
}, b.prototype.uber = new y, b.prototype.indexOfPeriod = function(t) {
return this.uber.indexOfPeriod(t) - v(this.sessionsSpec, t)
}, b.prototype.startOfPeriod = function(t, e, i) {
function o(t, e) {
this.weekEnds = m(t, e, 7), this.calendarDays = 7 - e,
this.businessDays = this.calendarDays - this.weekEnds
}
function n(t, e) {
var i, o = 0;
for (i = t; i < 7 && (s.sessionsSpec.isWeekEnd(_(s.sessionsSpec, i)) || !(--
e < 0)); ++i) o++;
return o
}
function r(t, e, i) {
var o, n, r, a, l, c, h = 0,
u = i % (7 - s.sessionsSpec.weekEndsCount());
for (o = 0, n = u - (0 === t ? 0 : e.businessDays); o < 7 && n > 0; ++o) r =
s.sessionsSpec.isWeekEnd(_(s.sessionsSpec, o)), h += r ? 1 : 0, n -= r ?
0 : 1;
return a = e.weekEnds + h, l = C((i - e.businessDays) / (7 - s.sessionsSpec
.weekEndsCount())), c = a + s.sessionsSpec.weekEndsCount() * l, i +
c
}
var s, a, l, c, h;
return e >= g(this.sessionsSpec, i) && (i++, e = 0), s = this, a = new Date(Date
.UTC(i, M.JANUARY, 1)), l = p(this.sessionsSpec, a), c = new o(this
.sessionsSpec, l), h = e < c.businessDays ? n(l, e) : r(l, c, e), this
.uber.startOfPeriod(t, h, i)
}, S.prototype.indexOfPeriod = function(t) {
return this.builder().indexOfPeriod(t)
}, S.prototype.startOfPeriod = function(t, e, i) {
return this.builder().startOfPeriod(t, e, i)
}, S.prototype.builder = function() {
return this._builder || (this._builder = this.session.spec.hasWeekEnds() ?
new b(this.session.spec) : new y), this._builder
}, w.prototype.indexOfPeriod = function(t, e) {
var i = f(this.session.spec, t);
return 0 === i && t < this.startOfPeriod(e, 0, M.get_year(t)) && (i = -1), i
}, w.prototype.startOfPeriod = function(t, e, i) {
var o, n, r = new Date(Date.UTC(i, M.JANUARY, 1)),
s = p(this.session.spec, r),
a = 0 === s ? 7 * e : 7 * (e + 1) - s,
l = M.get_days_per_year(r);
return a > l ? this.startOfPeriod(t, 0, i + C(a / l)) : (o = M.get_cal(t, i, M
.JANUARY, 1), n = M.add_days_considering_dst(t, o, a), M.utc_to_cal(
t, +n))
}, T.prototype.indexOfPeriod = function(t) {
return M.get_month(t)
}, T.prototype.startOfPeriod = function(t, e, i) {
var o, n, r, s;
return e < 0 ? (o = C((11 - e) / 12), i -= o, e += 12 * o) : e > M.DECEMBER && (
i++, e = M.JANUARY), n = M.get_cal_utc(i, e, 1), r = p(this.session
.spec, n), r > 4 && (s = 7 - r, M.add_date(n, s)), n
}, x.prototype.init = function(t, e) {
return this.timezone = "string" == typeof t ? M.get_timezone(t) : t, this.spec =
new o(e), this
}, {
PRE_SESSION: I,
POST_SESSION: k,
LASTBAR_SESSION: -3,
newBarBuilder: t,
Session: x,
alignPeriodsBack: r,
extrapolateBarsFrontByCount: a,
extrapolateBarsFrontToTime: s,
lower_bound: P,
isTradingNow: L,
numberOfFullWeeks: f,
numberOfWeekEndsSinceYearStart: v,
BusinessDaysBuilder: b,
alignExchangeTimeToSessionStartAndReturnUTC: d
}
}();
t.exports = n
}).call(e, i(78))
}, function(t, e, i) {
"use strict";
function o(t) {
var e = t.className,
i = t.icon,
o = void 0 === i ? "" : i,
r = t.onClick,
s = t.title;
return n.createElement("span", {
title: s,
className: e,
dangerouslySetInnerHTML: {
__html: o
},
onClick: r
})
}
Object.defineProperty(e, "__esModule", {
value: !0
});
var n = i(2);
e.Icon = o
}, function(t, e, i) {
"use strict";
function o(t, e) {
var i = e.edge;
return i.A * t.x + i.B * t.y + i.C > 0 === e.isPositive
}
function n(t, e, i, o) {
var n = e.add(i).scaled(.5),
r = n.add(o).scaled(.5),
s = l.intersectLineSegments(e, i, r, t);
return null === s && (null === (s = l.intersectLineSegments(i, o, r, t)) && null === (s = l
.intersectLineSegments(o, e, r, t)))
}
function r(t, e, i) {
return t.x >= e.x && t.x <= i.x && t.y >= e.y && t.y <= i.y
}
function s(t, e) {
var i, o, n, r = e.length - 1,
s = !1,
a = t.x,
l = t.y;
for (i = 0; i < e.length; i++) o = e[i], n = e[r], (o.y < l && n.y >= l || n.y < l && o.y >= l) && o
.x + (l - o.y) / (n.y - o.y) * (n.x - o.x) < a && (s = !s), r = i;
return s
}
function a(t, e, i) {
return (t.x - e.x) * (t.x - e.x) + (t.y - e.y) * (t.y - e.y) <= i * i
}
Object.defineProperty(e, "__esModule", {
value: !0
});
var l = i(132);
e.pointInHalfplane = o, e.pointInTriangle = n, e.pointInRectangle = r, e.pointInPolygon = s, e
.pointInCircle = a
}, function(t, e, i) {
"use strict";
function o() {
return s.replace(/[xy]/g, function(t) {
var e = 16 * Math.random() | 0;
return ("x" === t ? e : 3 & e | 8).toString(16)
})
}
function n() {
return r(12)
}
function r(t) {
var e, i, o = "";
for (e = 0; e < t; ++e) i = Math.round(Math.random() * (a.length - 1)), o += a[i];
return o
}
var s, a;
Object.defineProperty(e, "__esModule", {
value: !0
}), s = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx", a =
"0123456789abcdefghijklmopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", e.guid = o, e.randomHash = n, e
.randomHashN = r
}, , , function(t, e, i) {
"use strict";
(function(e) {
function i() {
return /on-features-page=1/i.test(window.location.search)
}
var o = window.TradingView = window.TradingView || {};
o.className = function(t) {
for (var e in this)
if (o[e] === t) return e;
return null
}, o.isOnFeaturePage = i(), o.wrapUrl = function(t) {
return e.enabled("charting_library_base") && (t = t.replace("/static/", "")), t
}, o.isMobile = function() {
var t = /Android/i.test(navigator.userAgent),
e = /BlackBerry/i.test(navigator.userAgent),
i = /iPhone|iPad|iPod/i.test(navigator.userAgent),
o = /Opera Mini/i.test(navigator.userAgent),
n = t || e || i || o;
return {
Android: function() {
return t
},
BlackBerry: function() {
return e
},
iOS: function() {
return i
},
Opera: function() {
return o
},
any: function() {
return n
}
}
}(), o.supportTouch = function() {
return Modernizr.touch || o.isMobile.any()
}, o.onWidget = function() {
var t, e, i = ["^widgetembed/?$", "^cmewidgetembed/?$",
"^([0-9a-zA-Z-]+)/widgetembed/?$", "^([0-9a-zA-Z-]+)/widgetstatic/?$",
"^([0-9a-zA-Z-]+)?/?miniwidgetembed/?$",
"^([0-9a-zA-Z-]+)?/?mediumwidgetembed/?$",
"^embed(-static)?/([0-9a-zA-Z]{8})/?$", "^widgetpopup/?$", "^extension/?$",
"^chatwidgetembed/?$", "^ideaswidgetembed/?$", "^ideas-widget/?$",
"^view-idea-widget/([0-9a-zA-Z]{8})/?$", "^user-info-widget/?$",
"^user-info-widget-get/(.+?)?/?$", "^embed-quotes-provider/?$",
"^idea-popup/?$", "^hotlistswidgetembed/?$", "^marketoverviewwidgetembed/?$",
"^([0-9a-zA-Z-]+)/marketoverviewwidgetembed/?$", "^eventswidgetembed/?$",
"^tickerswidgetembed/?$", "^forexcrossrateswidgetembed/?$",
"^forexheatmapwidgetembed/?$", "^marketquoteswidgetembed/?$",
"^screenerwidget/?$", "^cryptomktscreenerwidget/?$",
"^([0-9a-zA-Z-]+)/cryptomktscreenerwidget/?$",
"^([0-9a-zA-Z-]+)/marketquoteswidgetembed/?$"
],
o = window.location.pathname.replace(/^\//, "");
for (e = i.length - 1; e >= 0; e--)
if (t = RegExp(i[e]), t.test(o)) return !0;
return !1
}, o.onOrder = function() {
return "/order/" === window.location.pathname
}, t.exports.CheckMobile = o.isMobile, t.exports.isOnFeaturePage = i, t.exports.onWidget = o
.onWidget, t.exports.supportTouch = o.supportTouch
}).call(e, i(5))
}, function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
});
var o = i(584);
e.createDialog = o.createDialog
}, function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
}), i(13), i(12), e.lineToolsInfo = {
LineTool5PointsPattern: {
icon: i(622),
localizedName: $.t("XABCD Pattern")
},
LineToolABCD: {
icon: i(623),
localizedName: $.t("ABCD Pattern")
},
LineToolArc: {
icon: i(624),
localizedName: $.t("Arc")
},
LineToolArrow: {
icon: i(625),
localizedName: $.t("Arrow")
},
LineToolArrowMarkDown: {
icon: i(626),
localizedName: $.t("Arrow Mark Down")
},
LineToolArrowMarkLeft: {
icon: i(627),
localizedName: $.t("Arrow Mark Left")
},
LineToolArrowMarkRight: {
icon: i(628),
localizedName: $.t("Arrow Mark Right")
},
LineToolArrowMarkUp: {
icon: i(629),
localizedName: $.t("Arrow Mark Up")
},
LineToolBalloon: {
icon: i(630),
localizedName: $.t("Balloon")
},
LineToolBarsPattern: {
icon: i(631),
localizedName: $.t("Bars Pattern")
},
LineToolBezierCubic: {
icon: i(632),
localizedName: $.t("Double Curve")
},
LineToolBezierQuadro: {
icon: i(633),
localizedName: $.t("Curve")
},
LineToolBrush: {
icon: i(634),
localizedName: $.t("Brush")
},
LineToolCallout: {
icon: i(635),
localizedName: $.t("Callout")
},
LineToolCircleLines: {
icon: i(636),
localizedName: $.t("Cyclic Lines")
},
LineToolCypherPattern: {
icon: i(637),
localizedName: $.t("Cypher Pattern")
},
LineToolDateAndPriceRange: {
icon: i(638),
localizedName: $.t("Date and Price Range")
},
LineToolDateRange: {
icon: i(639),
localizedName: $.t("Date Range")
},
LineToolDisjointAngle: {
icon: i(640),
localizedName: $.t("Disjoint Angle")
},
LineToolElliottCorrection: {
icon: i(641),
localizedName: $.t("Elliott Correction Wave (ABC)")
},
LineToolElliottDoubleCombo: {
icon: i(642),
localizedName: $.t("Elliott Double Combo Wave (WXY)")
},
LineToolElliottImpulse: {
icon: i(643),
localizedName: $.t("Elliott Impulse Wave (12345)")
},
LineToolElliottTriangle: {
icon: i(644),
localizedName: $.t("Elliott Triangle Wave (ABCDE)")
},
LineToolElliottTripleCombo: {
icon: i(645),
localizedName: $.t("Elliott Triple Combo Wave (WXYXZ)")
},
LineToolEllipse: {
icon: i(646),
localizedName: $.t("Ellipse")
},
LineToolExtended: {
icon: i(647),
localizedName: $.t("Extended")
},
LineToolFibChannel: {
icon: i(648),
localizedName: $.t("Fib Channel")
},
LineToolFibCircles: {
icon: i(649),
localizedName: $.t("Fib Circles")
},
LineToolFibRetracement: {
icon: i(650),
localizedName: $.t("Fib Retracement")
},
LineToolFibSpeedResistanceArcs: {
icon: i(651),
localizedName: $.t("Fib Speed Resistance Arcs")
},
LineToolFibSpeedResistanceFan: {
icon: i(652),
localizedName: $.t("Fib Speed Resistance Fan")
},
LineToolFibSpiral: {
icon: i(653),
localizedName: $.t("Fib Spiral")
},
LineToolFibTimeZone: {
icon: i(654),
localizedName: $.t("Fib Time Zone")
},
LineToolFibWedge: {
icon: i(655),
localizedName: $.t("Fib Wedge")
},
LineToolFlagMark: {
icon: i(656),
localizedName: $.t("Flag Mark")
},
LineToolFlatBottom: {
icon: i(657),
localizedName: $.t("Flat Top/Bottom")
},
LineToolGannComplex: {
icon: i(305),
localizedName: $.t("Gann Square")
},
LineToolGannFixed: {
icon: i(305),
localizedName: $.t("Gann Square Fixed")
},
LineToolGannFan: {
icon: i(658),
localizedName: $.t("Gann Fan")
},
LineToolGannSquare: {
icon: i(659),
localizedName: $.t("Gann Box")
},
LineToolGhostFeed: {
icon: i(660),
localizedName: $.t("Ghost Feed")
},
LineToolHeadAndShoulders: {
icon: i(661),
localizedName: $.t("Head and Shoulders")
},
LineToolHorzLine: {
icon: i(662),
localizedName: $.t("Horizontal Line")
},
LineToolHorzRay: {
icon: i(663),
localizedName: $.t("Horizontal Ray")
},
LineToolIcon: {
icon: "icon",
localizedName: $.t("Font Icons")
},
LineToolInsidePitchfork: {
icon: i(664),
localizedName: $.t("Inside Pitchfork")
},
LineToolNote: {
icon: i(665),
localizedName: $.t("Note")
},
LineToolNoteAbsolute: {
icon: i(666),
localizedName: $.t("Anchored Note")
},
LineToolParallelChannel: {
icon: i(667),
localizedName: $.t("Parallel Channel")
},
LineToolPitchfan: {
icon: i(668),
localizedName: $.t("Pitchfan")
},
LineToolPitchfork: {
icon: i(669),
localizedName: $.t("Pitchfork")
},
LineToolPolyline: {
icon: i(670),
localizedName: $.t("Polyline")
},
LineToolPrediction: {
icon: i(671),
localizedName: $.t("Forecast")
},
LineToolPriceLabel: {
icon: i(672),
localizedName: $.t("Price Label")
},
LineToolPriceRange: {
icon: i(673),
localizedName: $.t("Price Range")
},
LineToolProjection: {
icon: i(674),
localizedName: $.t("Projection")
},
LineToolRay: {
icon: i(675),
localizedName: $.t("Ray")
},
LineToolRectangle: {
icon: i(676),
localizedName: $.t("Rectangle")
},
LineToolRegressionTrend: {
icon: i(677),
localizedName: $.t("Regression Trend")
},
LineToolRiskRewardLong: {
icon: i(678),
localizedName: $.t("Long Position")
},
LineToolRiskRewardShort: {
icon: i(679),
localizedName: $.t("Short Position")
},
LineToolRotatedRectangle: {
icon: i(680),
localizedName: $.t("Rotated Rectangle")
},
LineToolSchiffPitchfork: {
icon: i(681),
localizedName: $.t("Modified Schiff Pitchfork")
},
LineToolSchiffPitchfork2: {
icon: i(682),
localizedName: $.t("Schiff Pitchfork")
},
LineToolSineLine: {
icon: i(683),
localizedName: $.t("Sine Line")
},
LineToolText: {
icon: i(684),
localizedName: $.t("Text")
},
LineToolTextAbsolute: {
icon: i(685),
localizedName: $.t("Anchored Text")
},
LineToolThreeDrivers: {
icon: i(686),
localizedName: $.t("Three Drives Pattern")
},
LineToolTimeCycles: {
icon: i(687),
localizedName: $.t("Time Cycles")
},
LineToolTrendAngle: {
icon: i(688),
localizedName: $.t("Trend Angle")
},
LineToolTrendBasedFibExtension: {
icon: i(689),
localizedName: $.t("Trend-Based Fib Extension")
},
LineToolTrendBasedFibTime: {
icon: i(690),
localizedName: $.t("Trend-Based Fib Time")
},
LineToolTrendLine: {
icon: i(691),
localizedName: $.t("Trend Line")
},
LineToolTriangle: {
icon: i(692),
localizedName: $.t("Triangle")
},
LineToolTrianglePattern: {
icon: i(693),
localizedName: $.t("Triangle Pattern")
},
LineToolVertLine: {
icon: i(694),
localizedName: $.t("Vertical Line")
},
SyncDrawing: {
icon: i(695),
iconActive: i(696),
localizedName: $.t("Sync drawings to all charts")
},
arrow: {
icon: i(697),
localizedName: $.t("Arrow")
},
cursor: {
icon: i(698),
localizedName: $.t("Cross")
},
dot: {
icon: i(699),
localizedName: $.t("Dot")
},
drawginmode: {
icon: i(700),
iconActive: i(701),
localizedName: $.t("Stay in Drawing Mode")
},
eraser: {
icon: i(702),
localizedName: $.t("Eraser")
},
group: {
icon: i(703),
localizedName: $.t("Show Hidden Tools")
},
hideAllDrawings: {
icon: i(302),
iconActive: i(704),
localizedName: $.t("Hide All Drawing Tools")
},
lockAllDrawings: {
icon: i(705),
iconActive: i(706),
localizedName: $.t("Lock All Drawing Tools")
},
magnet: {
icon: i(707),
localizedName: $.t("Magnet Mode pulls the points of drawings to symbol values")
},
measure: {
icon: i(708),
localizedName: $.t("Measure (Shift + Click on the chart)")
},
removeAllDrawingTools: {
icon: i(709),
localizedName: $.t("Remove All Drawing Tools")
},
showObjectsTree: {
icon: i(710),
localizedName: $.t("Show Objects Tree")
},
zoom: {
icon: i(711),
localizedName: $.t("Zoom In")
},
"zoom-out": {
icon: i(712),
localizedName: $.t("Zoom Out")
}
}
}, function(t, e, i) {
"use strict";
var o, n, r;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(32), n = i(788), r = function() {
function t() {
this._rendererData = {
text: "",
coordinate: 0,
fixedCoordinate: 0,
color: "#FFF",
background: "#000",
visible: !1
}, this._renderer = new n.PriceAxisViewRenderer(this._rendererData), this
._invalidated = !0
}
return t.prototype.text = function() {
return this._rendererData.text
}, t.prototype.background = function() {
return this._rendererData.background
}, t.prototype.color = function() {
return this.generateTextColor(this.background())
}, t.prototype.generateTextColor = function(t) {
return "black" === o.rgbToBlackWhiteString(o.parseRgb(t), 160) ? "white" : "black"
}, t.prototype.coordinate = function() {
return this._updateRendererDataIfNeeded(), this._rendererData.coordinate
}, t.prototype.floatCoordinate = function() {
return this._updateRendererDataIfNeeded(), this._rendererData.floatCoordinate || this
._rendererData.coordinate
}, t.prototype.update = function() {
this._invalidated = !0
}, t.prototype.height = function(t, e) {
return void 0 === e && (e = !1), this._renderer.height(t, e)
}, t.prototype.getFixedCoordinate = function() {
return this._rendererData.fixedCoordinate || 0
}, t.prototype.setFixedCoordinate = function(t) {
this._rendererData.fixedCoordinate = t
}, t.prototype.isVisible = function() {
return this._rendererData.visible
}, t.prototype.renderer = function() {
return this._updateRendererDataIfNeeded(), this._renderer.setData(this._rendererData),
this._renderer
}, t.prototype._updateRendererDataIfNeeded = function() {
this._invalidated && (this._updateRendererData(this._rendererData), this
._invalidated = !1)
}, t
}(), e.PriceAxisView = r
}, , , function(t, e, i) {
"use strict";
function o(t) {
return s.createElement(t.href ? "a" : "div", t)
}
function n(t) {
t.stopPropagation()
}
var r, s, a, l, c, h;
Object.defineProperty(e, "__esModule", {
value: !0
}), r = i(0), s = i(2), a = i(14), l = i(85), c = i(731), h = function(t) {
function e() {
var e = null !== t && t.apply(this, arguments) || this;
return e._handleClick = function(t) {
var i = e.props,
o = i.dontClosePopup,
n = i.isDisabled,
r = i.onClick,
s = i.onClickArg;
n || (r && r(s, t), o || l.globalClosePopupMenu())
}, e
}
return r.__extends(e, t), e.prototype.render = function() {
var t, e, i = this.props,
r = i.className,
l = i.forceShowHint,
h = i.hint,
u = i.icon,
d = i.isActive,
p = i.isDisabled,
_ = i.isHovered,
f = i.appearAsDisabled,
m = i.label,
g = i.link,
v = i.showToolboxOnHover,
y = i.target,
b = i.toolbox,
S = i.theme,
w = void 0 === S ? c : S;
return s.createElement(o, {
className: a(r, w.item, u && w.withIcon, (t = {}, t[w.isActive] = d, t[w
.isDisabled] = p || f, t[w.hovered] = _, t)),
href: g,
target: y,
onClick: this._handleClick
}, void 0 !== u && s.createElement("div", {
className: w.icon,
dangerouslySetInnerHTML: {
__html: u
}
}), s.createElement("div", {
className: w.labelRow
}, s.createElement("div", {
className: w.label
}, m)), (void 0 !== h || l) && s.createElement("div", {
className: w.hint
}, h), void 0 !== b && s.createElement("div", {
onClick: n,
className: a(w.toolbox, (e = {}, e[w.showOnHover] = v, e))
}, b))
}, e
}(s.PureComponent), e.PopupMenuItem = h
}, function(t, e, i) {
"use strict";
(function(e) {
function o() {
if ("undefined" == typeof tradingService) return null;
var t = tradingService();
return t && t.connectStatus() === CONNECTSTATUSES.CONNECTED ? t.activeBroker() : null
}
function n() {
var t = o();
if (t && t.metainfo().configFlags.supportSymbolSearch) return t.metainfo().symbolSearchId ||
t.metainfo().id.toLowerCase()
}
var r = i(122).isIntervalAvailable,
s = i(76),
a = i(764),
l = i(121),
c = i(172).unifiedSpinner,
h = i(144),
u = i(200).regExpEscape,
d = i(765),
p = i(148).isFeatureEnabled,
_ = i(123),
f = function() {
function t(i) {
var o, n, r, s;
if (!(this instanceof t)) throw new TypeError("SymbolSearch is a constructor");
if (i = i || {}, o = !i.dontUseInputParser && e.enabled(
"symbol_search_parser_mixin") && t.canShowSpreadActions(), this
._inputParserMixin = o ? new SymbolSearchInputParserMixin(this) : void 0, this
._inputElement = $(i.input).get(0), !this._inputElement) throw new TypeError(
"options.input must be a DOM element, jQuery object or selector");
if (this.$list = $(i.list).eq(0), 0 === this.$list.size() && delete this.$list,
void 0 !== i.callback) {
if ("function" != typeof i.callback) throw new TypeError(
"options.callback must be function");
this._callback = i.callback
}
if (void 0 !== i.onValueChanged) {
if ("function" != typeof i.onValueChanged) throw new TypeError(
"options.onValueChanged must be function");
this._onValueChanged = i.onValueChanged
}
if (void 0 !== i.onEmptyApply) {
if ("function" != typeof i.onEmptyApply) throw new TypeError(
"options.onEmptyApply must be function");
this._onEmptyApply = i.onEmptyApply
}
if (i.ignoreInterval && (this._ignoreInterval = !0), t.resetStoredInterval(), i
.hidePro && (this._hidePro = !0), i.allowMultipleSymbols && (this
._allowMultipleSymbols = !0), void 0 !== i.onParse) {
if ("function" != typeof i.onParse) throw new TypeError(
"options.onParse must be function");
this._onParse = i.onParse
}
for (this._state = {}, this._resolveViaSymbolSearchId = null, this.acceptEmpty = !!i
.acceptEmpty, $(this._inputElement).data("symbol-search-instance", this), n =
this._boundListener = this._eventListener.bind(this), r = this
.boundTimeoutListener = function(t) {
setTimeout(function() {
n(t)
}, 0)
}, s = 0; s < w.length; s++) w[s].immediate ? $(this._inputElement).on(w[s]
.name, n) : $(this._inputElement).on(w[s].name, r);
this._boundOnKeyDown = this._onKeyDown.bind(this), this._boundOnKeyPress = this
._onKeyPress.bind(this), $(this._inputElement).on("keydown", this
._boundOnKeyDown).on("keypress", this._boundOnKeyPress), this
._eventListener(), i.autoFocus && t.registerAutoFocus(this)
}
function o(t, e) {
var i, o = ChartApiInstance.supportedSymbolsTypes();
return n() && (o = o.filter(function(t) {
return "quandl" !== t.value && "economic" !== t.value
})), i = TVSettings.getValue("symboledit.filter"), !o.some(function(t) {
return t.value === i
}) && o.length > 0 && (i = o[0].value), 0 !== o.length && (o.forEach(function(
o) {
var n = o.value,
r = $('<a class="type-filter">').attr("href", "#" + n).text($.t(
o.name));
n === i && r.addClass("active"), r.on("click", function(i) {
i.preventDefault(), e.find(".type-filter").removeClass(
"active"), $(this).addClass("active"), t
.typeFilter(n), TVSettings.setValue(
"symboledit.filter", n)
}), r.appendTo(e)
}), t.typeFilter(i), !0)
}
function f(t, i) {
var o, n, r, s = ChartApiInstance.supportedExchangesList();
if (s = a.displayedExchangesFilter(s), s = a.sortExchangesListByFlagIfNeeded(s), o =
TVSettings.getValue("symboledit.exchangefilter"),
"bovespa" !== TradingView.widgetCustomer) return !s.some(function(t) {
return t.value === o
}) && s.length > 0 && (o = s[0].value), 0 !== s.length && (n = $(
'<div id="exchange-filter" class="exchange-filter">').appendTo(i),
r = $("<select>").appendTo(n), s.forEach(function(t) {
var e = t.value,
i = t.name || e,
n = t.desc || i,
s = $("<option>").addClass("filter-item").attr("value", e)
.text($.t(i)).data("custom-option-text", $.t(n)).appendTo(
r);
t.value === o && s.attr("selected", !0)
}), r.change(function() {
var e = $(this).val() || "";
TVSettings.setValue("symboledit.exchangefilter", e), t
.setExchangeFilter(e)
}), r.selectbox({
speed: 0,
useCustomPrependWithSelector: "after",
customPrependSelectorClass: "exchange-with-flag",
classHolder: "tv-unstyled-select-container tv-symbol-select",
classOptions: e.enabled(
"symbol_search_three_columns_exchanges") ?
"sbOptions three-column-filter" : "sbOptions"
}), t.setExchangeFilter(o), !0)
}
function m(t) {
var e = f(t, t.$filterContainer);
return t.selectExchangeFilter(), e
}
function g(t) {
var e, i, n, r, s, a, l, c, h, u, d = $('<div class="symbol-edit-popup">').appendTo(
document.body),
p = $('<div class="filter">').appendTo(d);
return t.$filterContainer = p, o(t, p), m(t, p), e = $(
'<div class="table-wrapper">').appendTo(d), i = $(t._inputElement), n = i
.offset(), r = 0, s = Math.max(0, Math.min(n.left + r, $(window).width() - d
.outerWidth())), d.css("left", s + "px"), d.css("top", n.top + i
.outerHeight() + 1), a = p.outerHeight(), l = $(window).scrollTop(), c = i
.height(), h = TradingView.isMobile.any() ? parseInt(window.screen.height, 10) :
parseInt($(window).height(), 10), u = h - (n.top - l) - c / 2, e.css(
"maxHeight", u - c - a + "px"), {
popup: d,
listWrapper: e
}
}
function v(t) {
return !t.ctrlKey && (!t.metaKey && (!!t.charCode && (!(!t.which || t.which <=
32) && (!/^(input|textarea)$/i.test(t.target.tagName) && !
TVDialogs
.modalDialog))))
}
function y(t, e, i) {
this._container = t, this._tickerRegExp = e, this._translationCache = i, this
._roots = {}, this._itemsByTicker = {}
}
var b, S, w = [{
name: "input",
immediate: !0
}, {
name: "sync",
immediate: !0
}, {
name: "keypress"
}, {
name: "keydown"
}, {
name: "keyup"
}, {
name: "mousedown"
}, {
name: "mouseup"
}, {
name: "cut"
}, {
name: "paste"
}],
T = p("symbol_search_server_highlight");
return T = !1, b = [/^e\-m/i], S = /<\/?[^>]+(>|$)/g, t.registerAutoFocus = function(
e) {
if (e instanceof jQuery && (e = e.data("symbol-search-instance")), !(
e instanceof t)) throw new TypeError(
"arg must be an SymbolSearch instance of jQuery input with bound SymbolSearch object"
);
l.registerListener("symbolEdit", function(t) {
if (v(t)) {
t.preventDefault(), this.resetState(), this._skipAutoFocus = !0,
this._inputElement.focus();
var e = String.fromCharCode(t.charCode);
"function" == typeof this._setInputValue ? this._setInputValue(
e) : this._inputElement.value = e, this._eventListener()
}
}.bind(e))
}, t.prototype.searchRequestDelay = 0, t.setSearchRequestDelay = function(e) {
t.prototype.searchRequestDelay = e
}, t.prototype.resetState = function() {
this._state = {}
}, t.prototype.typeFilter = function(t) {
if (!(arguments.length > 0)) return this._state.typeFilter;
t !== this._state.typeFilter && (null == t ? delete this._state.typeFilter :
this._state.typeFilter = t + "", delete this._state.keepListFor, this
._onSelectionChanged(), this.selectExchangeFilter())
},
t.prototype.setExchangeFilter = function(t) {
t !== this._state.exchangeFilter && (null == t ? delete this._state
.exchangeFilter : this._state.exchangeFilter = t + "", delete this
._state.keepListFor, this._onSelectionChanged())
}, t.prototype.setTradableFilter = function(t) {
t !== this._state.tradableFilter && (this._state.tradableFilter = t, this
._onSelectionChanged())
}, t.prototype.getExchangeFilter = function() {
return this._state.exchangeFilter
}, t.prototype.destroy = function() {
$(this._inputElement).off(), $(this._inputElement).removeData(
"symbol-search-instance")
}, t.prototype._moveSelection = function(t, e) {
var i, o, n, r, s, a, l, c, h;
this.$list && (i = this.$list.find("table.symbol-edit-popup"), o = i.find(
"tr:not(.hidden)"), n = i.find("tr.symbol-edit-popup-active")
.removeClass("symbol-edit-popup-active"), r = 0 !== n.length ? o.index(
n) : -1, s = 1 === t ? n.get(0) === o.get(-1) ? 0 : r + t : Math
.max(-1, r + t), r !== s && (a = o.get(s)) && (l = this
._getItemByElement(a), c = y.isRoot(l), c ? (h = a.getAttribute(
"data-root"), a.classList.add("symbol-edit-popup-active"),
this._scrollHighlightIntoView(), h ? (this._state
.highlightedItem = null, this._selectedGroupRoot = h) : (
this._state.highlightedItem = l, this._replaceCurrentSymbol(
e))) : (delete this._selectedGroupRoot, this
._highlightItem(l, !0, e))))
}, t.prototype._groupToggleCollapsed = function(t, e) {
this._groupListHandler && this._groupListHandler.toggleCollapsed(t, e)
}, t.prototype._onKeyDown = function(t) {
t.keyCode !== _.DOWN_ARROW && t.keyCode !== _.UP_ARROW || (this._moveSelection(t
.keyCode === _.DOWN_ARROW ? 1 : -1, !0), t.preventDefault()), !this
._selectedGroupRoot || t.keyCode !== _.LEFT_ARROW && t.keyCode !== _
.RIGHT_ARROW || (this._groupToggleCollapsed(this._selectedGroupRoot, t
.keyCode === _.LEFT_ARROW), t.preventDefault())
}, t.prototype._onKeyPress = function(t) {
if (t.keyCode === _.DOWN_ARROW || t.keyCode === _.UP_ARROW) {
if (t.charCode) return;
if (this._boundOnKeyDown) return $(this._inputElement).off("keydown", this
._boundOnKeyDown), delete this._boundOnKeyDown, void t
.preventDefault();
this._moveSelection(t.keyCode === _.DOWN_ARROW ? 1 : -1), t.preventDefault()
}
t.keyCode === _.ENTER && (this._selectedGroupRoot ? (this._groupToggleCollapsed(
this._selectedGroupRoot, !1), t.preventDefault()) : this
.acceptTypeIn())
}, t.prototype._eventListener = function(t, i) {
var o, n, r, s, a, l = this._inputElement,
c = this._getInputValue();
e.enabled("uppercase_instrument_names") && (c = c.toUpperCase()), o = !1, n = !
1, this._state.value !== c && (this._state.hasOwnProperty("value") && this
._onValueChanged && this._onValueChanged(c), this._state.value = c,
o = !0, this._inputParserMixin && this._inputParserMixin.parse()), this
._fixIntervalCase(), r = this._limitInputSelectionValue("selectionStart"),
this._state.selectionStart !== r && (this._state.selectionStart = r, n = !
0), s = this._limitInputSelectionValue("selectionEnd"), this._state
.selectionEnd !== s && (this._state.selectionEnd = s, n = !0), this._state
.selectionDirection !== l.selectionDirection && (this._state
.selectionDirection = l.selectionDirection, n = !0), (o || n && this
._inputParserMixin) && (this._onSelectionChanged(void 0, i), a = !1,
this._getInputValue() !== this._state.value && (this._setInputValue(this
._state.value), a = !0),
(a || this._state.selectionStart !== this._limitInputSelectionValue(
"selectionStart") || this._state.selectionEnd !== this
._limitInputSelectionValue("selectionEnd")) && l
.setSelectionRange && l.setSelectionRange(this._state.selectionStart,
this._state.selectionEnd, this._state.selectionDirection))
}, t.prototype._fixIntervalCase = function() {
if (this._selectionInsideInterval()) {
var e = t.detachInterval(this._inputElement.value);
/[a-z]/.test(e.detached) && (this._inputElement.value = e.rest + e.detached
.toUpperCase())
}
}, t.prototype._selectionInsideInterval = function(e) {
if (this._ignoreInterval) return !1;
var i = t.detachInterval(this._inputElement.value);
return !!i && ("string" == typeof e ? this._inputElement[e] > i.rest.length :
this._inputElement.selectionStart > i.rest.length && this._inputElement
.selectionEnd > i.rest.length)
}, t.prototype._limitInputSelectionValue = function(e) {
return this._selectionInsideInterval(e) ? t.detachInterval(this._inputElement
.value).rest.length : e in this._inputElement ? this._inputElement[e] :
this._inputElement.value.length
}, t.prototype._getInputValue = function() {
if (this._ignoreInterval) return this._inputElement.value;
var e = t.detachStoreInterval(this._inputElement.value);
return $(this._inputElement).toggleClass("interval-error", t.intervalError()), e
}, t.prototype._setInputValue = function(e) {
this._ignoreInterval ? this._inputElement.value = e : this._inputElement.value =
t.recallAttachInterval(e)
}, t.prototype._onSelectionChanged = function(t, e) {
function i(t, e, i, o, r) {
n._state.contextTicker = t, n._state.contextExchange = e, n._state
.contextType = i, n._state.contextTradable = r, n._state.keepListFor &&
n._state.keepListFor === o || (n._getSuggestList(), delete n._state
.keepListFor)
}
var o, n = this;
!b.some(function(t) {
return t.test(n._state.value)
}) && (this._isSpreadInInput() || this._inputParserMixin && !0 !== e) ? this
._inputParserMixin.onSelectionChanged(i) : this.$list && (this._state
._selectedTicker = null, o = this._state.value, this
._isSpreadInInput() && this._state.contextToken && (o = this._state
.contextToken.value), i(o, this.getExchangeFilter(), this._state
.typeFilter, o, this._state.tradableFilter))
}, t.prototype._clearSelectionState = function() {
delete this._state.contextTicker, delete this._state.contextExchange,
delete this._state.contextType, delete this._state.contextToken, delete this
._state.keepListFor
}, t.prototype._clearSearchTimeout = function() {
this._searchTimeout && (clearTimeout(this._searchTimeout), this._searchTimeout =
null)
}, t.prototype._doGetSuggestList = function() {
var t, e, i, o, r, s, a;
this._clearSearchTimeout(), t = n(), e = this._state.contextTicker || "", i =
this._state.contextExchange || this.getExchangeFilter() || "", o = this
._state.typeFilter || "", r = t && this._state.tradableFilter, t &&
tradingService().trackEvent("Symbol Search Tradable checkbox", r ? "on" :
"off"), s = window.language || "", this._showLoading(), a = this,
ChartApiInstance.searchSymbols(e, i, o, s, T, !1, t, r, function(t) {
e !== (a._state.contextTicker || "") || i !== (a._state
.contextExchange || a.getExchangeFilter() || "") || o !== (a
._state.typeFilter || "") || (o === d.types.QUANDL && (t = a
._processQuandlResponse(t)), a._renderSuggestList(t), a
._onResponse(t))
})
},
t.prototype._getSuggestList = function() {
this._clearSearchTimeout(), this._searchTimeout = setTimeout(this
._doGetSuggestList.bind(this), t.prototype.searchRequestDelay)
}, t.prototype._showLoading = function() {
if (this.$list && !this._spinner) {
this._clearSuggestList();
var t = $('<div class="symbol-search-loading">').appendTo(this.$list);
this._spinner = c("medium").spin(t.get(0))
}
}, t.prototype._groupContracts = function(t) {
var e, i, o, n, r, s = ChartApiInstance.futuresRegex(),
a = {},
l = [];
for (e = 0; e < t.length; ++e) {
if (i = t[e], i.prefix || Array.isArray(i.contracts)) return t;
"futures" === i.type ? (o = s.exec(i.symbol), o ? (n = o[1], n in a ? r = a[
n] : (r = l.length, a[n] = r, l.push({
type: i.type,
symbol: n,
exchange: i.exchange,
description: i.description,
full_name: i.exchange + ":" + n,
contracts: []
})), l[r].contracts.push(i)) : l.push(i)) : l.push(i)
}
return l
}, t.prototype._renderSuggestList = function(i) {
var o, n, r, s, a, l, c, h, d, p;
if (this.$list) {
if (i = this._groupContracts(i), o = this, n = this._state, this
._clearSuggestList(), r = u(n.contextTicker).trim(), s = RegExp(r
.replace(" ", "|"), "i" + (r.length > 1 ? "g" : "")), delete n
.highlightedItem, this._hidePro && (i = i.filter(function(t) {
return !t.params || -1 === t.params.indexOf("pro")
})), 0 === i.length) return void this.$list.html(
'<div style="text-align: center; padding: 7px 0; font-style: italic;">' +
$.t("No symbols matched your criteria") + "</div>");
for (a = document.createElement("table"), a.setAttribute("class",
"symbol-edit-popup"), l = {}, c = new t.GroupListHandler(a, s, l),
h = null, this._renderedResponse = [], d = 0; d < i.length; d++) p = i[
d], c.append(p), h || p.ticker !== n.contextTicker || p.exchange !==
n.contextExchange || (h = p), this._renderedResponse.push(p);
e.enabled("expand_symbolsearch_items") || c.collapse(), this
._groupListHandler = c, h && this._highlightItem(p), $(a).on("click",
"tr",
function(t) {
if (!t.isDefaultPrevented()) {
t.preventDefault();
var e = o._getItemByElement(this);
e && e.full_name && (o._isSpreadInInput() ? o
._highlightItem(e, !0, !1) : o.accept(e.full_name, e
.ticker))
}
}).appendTo(this.$list)
}
}, t.prototype._isSpreadInInput = function() {
return this._inputParserMixin && this._state.parsed.length > 1
}, t.prototype._getItemByElement = function(t) {
return this._renderedResponse && this._groupListHandler ? this._groupListHandler
.getItemByTicker(t.getAttribute("data-item-ticker")) : null
}, t.prototype._getElementByItem = function(t) {
return this._renderedResponse && this.$list ? this.$list.get(0).querySelector(
'tr[data-item-ticker="' + (t.ticker || t.full_name) + '"]') : null
}, t.prototype._highlightItem = function(t, e, i) {
var o, n, r = this._state;
r.highlightedItem && (o = this._getElementByItem(r.highlightedItem)) && $(o)
.removeClass("symbol-edit-popup-active"), r.highlightedItem = t, n = this
._getElementByItem(r.highlightedItem), n && ($(n).addClass(
"symbol-edit-popup-active"), this._scrollHighlightIntoView()), e && this
._replaceCurrentSymbol(i)
}, t.prototype._scrollHighlightIntoView = function() {
var t = this.$list.find("tr.symbol-edit-popup-active");
t.length && (t.offset().top < this.$list.offset().top ? this.$list.scrollTop(
this.$list.scrollTop() - (this.$list.offset().top - t.offset().top)
) : t.offset().top + t.outerHeight() > this.$list.offset().top +
this.$list.outerHeight() && this.$list.scrollTop(this.$list
.scrollTop() + (t.offset().top + t.outerHeight() - (this.$list
.offset()
.top + this.$list.outerHeight()))))
}, t.prototype._clearSuggestList = function() {
this._renderedResponse = null, this._spinner && (this._spinner.stop(),
delete this._spinner), this.$list && this.$list.empty()
}, t.prototype._showErrorNotice = function() {
this.$list && (this._clearSuggestList(), this.$list.text("Invalid expression"))
}, t.prototype._replaceCurrentSymbol = function(t) {
var e, i, o, n, r = this._state;
if (r.highlightedItem) {
if (e = r.highlightedItem, i = "", o = 0, this._isSpreadInInput() || this
._inputParserMixin && !0 !== t) {
if (n = this._inputParserMixin.replaceCurrentSymbol(e), !n.ok) return;
i = n.newValue, o = n.newCaretPos, r.keepListFor = n.keepListFor
} else this._state._selectedTicker = e.ticker || e.symbol, r.keepListFor =
this._state._selectedTicker, i = !0 === t && e.full_name && this
._inputParserMixin ? e.full_name : e.symbol, o = i.length;
this._setInputValue(T ? i.replace(S, "") : i), this._inputElement
.setSelectionRange ? this._inputElement.setSelectionRange(o, o) : this
._inputElement.select(), this._eventListener(void 0, t)
}
}, t.prototype.splitAndAcceptUserInput = function() {
var t, e = this._getInputValue().split(",");
for (t = 0; t < e.length; t++) this.acceptSymbolIn(e[t])
}, t.prototype.acceptSymbolIn = function(t) {
var e, i;
this._inputParserMixin ? e = this._inputParserMixin.parseSymbol(t) : (e = t, i =
this._state._selectedTicker || t), this.accept(e, i)
}, t.prototype.acceptTypeIn = function() {
this._allowMultipleSymbols ? this.splitAndAcceptUserInput() : this
.acceptSymbolIn(this._getInputValue())
}, t.prototype.accept = function(e, i) {
var o = this;
! function() {
if ((i = i || e) || "" === i && o.acceptEmpty) {
delete o._state.keepListFor;
var n = o._ignoreInterval ? void 0 : t.getInterval(!0);
o._inputElement.value = e, o._eventListener(), o._callback && o
._callback(i, n), $(o._inputElement).trigger("accept-symbol", [i])
}
}()
}, t.prototype.bindListWrapper = function(t) {
if (t = $(t).eq(0), 0 === t.size()) throw new TypeError(
"element must be a DOM element, jQuery object or selector");
this.$list = t, this._clearSelectionState(), this._eventListener()
}, t.prototype.removeListWrapper = function() {
delete this.$list, this._clearSuggestList(), this._clearSelectionState(), this
._eventListener()
}, t.prototype.selectExchangeFilter = function() {
this.$filterContainer.find(".exchange-filter").hide(), this._state
.typeFilter === d.types.QUANDL ? this.$filterContainer.find(
"#quandl-filter").show() : this._state.typeFilter !== d.types
.ECONOMIC && this.$filterContainer.find("#exchange-filter").show()
}, t.prototype._onResponse = function(t) {
if (t.length > 0) {
this._state.typeFilter === d.types.QUANDL && this._showNotification()
}
}, t.prototype._showNotification = function() {
var t, e, i;
TVSettings.getBool("symboledit.show_quandl_notification", !0) && (t = $.t(
"Quandl is a huge financial database that we have connected to TradingView. Most of its data is EOD and is not updated in real-time, however the information may be extremely useful for fundamental analysis."
) + ' <a target="_blank" href="' + ("ru" === window.locale ?
"http://blog.tradingview.com/?p=1530&lang=ru" :
"http://blog.tradingview.com/?p=1530") + '">' + $.t(
"Read our blog for more info!") + "</a>", e = $(
'<div class="symbol-edit-notification">').prependTo(this.$list), e
.html(t), e.find("a").click(function(t) {
t.preventDefault();
var e = $(this).attr("href");
window.open(e, "_blank")
}), i = $('<a class="close">').appendTo(e), i.click(function() {
TVSettings.setValue("symboledit.show_quandl_notification", !1),
e.remove()
}))
}, t.prototype._processQuandlResponse = function(t) {
return t.datasets.filter(function(t) {
return !t.premium
}).map(function(t) {
return {
description: t.name,
exchange: t.database_code,
full_name: "QUANDL:" + t.database_code + "/" + t.dataset_code,
params: ["eod"],
symbol: t.dataset_code,
type: "quandl"
}
})
}, t.prototype.forceFocus = function() {
this._inputElement.focus()
}, t.createSuggestListRow = function(e, i, o, n) {
var r, s, a, l, c, h, u, d, p, _, f;
return n || (n = {}), r = document.createElement("tr"), s = "symbol-edit-popup",
n.addClass && (s += " " + n.addClass), r.setAttribute("class", s), a = !T ||
"quandl" === e.type, l = document.createElement("td"), l.setAttribute(
"class", "symbol-edit-popup-td name apply-overflow-tooltip"), c = a ? e
.symbol.replace(i, "<strong>$&</strong>") : e.symbol, h = n.nameContent ||
c, e.broker_symbol && (h = h + " (" + (a ? e.broker_symbol.replace(i,
"<strong>$&</strong>") : e.broker_symbol) + ")"), l.innerHTML = h, u =
document.createElement("td"), u.setAttribute("class",
"symbol-edit-popup-td desc apply-overflow-tooltip"), u.innerHTML = !a ||
i.test(e.symbol) ? e.description : e.description.replace(i,
"<strong>$&</strong>"), d = document.createElement("td"), d
.setAttribute("class", "symbol-edit-popup-td type apply-overflow-tooltip"),
p = "", n.typeContent ? p = n.typeContent : (e.params && ~e.params.indexOf(
"eod") && (p = '<i class="eod">eod</i>&nbsp;'), e.type in o || (o[e
.type] = "bitcoin" === e.type ? $.t("crypto") : $.t(e.type)), e
.exchange ? e.exchange.startsWith("CHXEUR_") ? p += o[e.type] + " - " +
e.exchange.split("_")[0] : p += o[e.type] + " - " + e.exchange : p += o[
e.type]), d.innerHTML = p, _ = document.createElement("td"), _
.setAttribute("class", "symbol-edit-popup-td flag apply-overflow-tooltip"),
_.innerHTML = t.getItemFlag(e), f = _.getElementsByTagName("svg")[0], f && f
.setAttribute("class", "flag"), r.appendChild(l), r.appendChild(u), r
.appendChild(d), r.appendChild(_), r
}, t.getItemFlag = function(t) {
return ""
}, t.showDialog = function(e) {
var n, r, s, a, l, c, h, u, d, p, _, f, g = i(205);
if (e = e || {}, n = "Symbol Search", !TVDialogs.get(n)) return r = TVDialogs
.createDialog(n, {
hideTitle: !0,
hideCloseCross: !0,
dragHandle: ".filter",
width: "750px",
dragOptions: {
cancel: ".sbOptions"
},
content: g.dialogs.symbolSearch
}), TVDialogs.positionDialog(r), s = r.find("._tv-dialog-content")
.addClass("symbol-search-dialog"), a = s.find(".results"), a.mousewheel(
function(t, e) {
var i = $(this);
e > 0 ? i.scrollTop(i.scrollTop() - 15) : i.scrollTop(i
.scrollTop() + 15)
}),
l = s.find("input").get(0), e.initialValue && (l.value = e
.initialValue), "selectionStart" in l && (l.selectionStart = l
.selectionEnd = l.value.length), l.focus(), this
.canShowSpreadActions() && (e.ignoreInterval || (h = t
.getInputValueGetter(l), u = t.getInputValueSetter(l)), c =
SymbolSearchInputParserMixin.addSpreadActions(s.find(
".spread-actions"), l, h, u)), d = new t({
input: l,
list: s.find(".results").get(0),
callback: function(t, i) {
e.callback && e.callback(t, i), TVDialogs.destroy(n)
},
onParse: c,
ignoreInterval: e.ignoreInterval
}), p = s.find(".filter"), d.$filterContainer = p, _ = o(d, p), f = m(d,
p), _ || f || p.attr("style", "display: none"), TVDialogs
.resizeContent(r.height(), a), TVDialogs.applyHandlers(r), TVDialogs
.positionDialog(r), r.on("destroy", function() {
TVSettings.setValue("symboledit.dialog_last_entry", l.value)
}), r
}, t.bindToInput = function(i, o) {
function n() {
v && (T.removeListWrapper(), v.off(), v.remove(), v = null, h.hide(),
"function" == typeof o.onPopupClose && o.onPopupClose())
}
function r(t) {
t.preventDefault()
}
function a() {
var t, i, n, s;
if (v || (t = g(T), v = t.popup, T.bindListWrapper(t.listWrapper), v.on(
"focus", r), v.on("click", r), v.on("mousedown", r), v.on(
"focus", "*", r), v.on("click", "*", r), v.on("mousedown", "*",
r), "function" == typeof o.onPopupOpen && o.onPopupOpen(t
.popup)), e.enabled("charting_library_base") && (i = this._state, i
.keepListFor)) {
if (!i.highlightedItem) return void delete this._state.keepListFor;
n = i.highlightedItem, s = this._getInputValue(), e.enabled(
"uppercase_instrument_names") && (s = s.toUpperCase()), n
.symbol !== s && delete this._state.keepListFor
}
}
function l(t, e) {
var i;
return e ? (RegExp("^" + d.types.QUANDL, "i").test(t) ? (i = t.split(/\//),
i.length && (t = i[i.length - 1])) : t = s.seriesShortSymbol
.value() || t, t) : t
}
function c(t) {
var e = s.symbol.value() || "";
e = l(e, t), i.val(e), T.resetState()
}
var u, p, f, m, v, y, b, S, w, T, C, x, P;
return o = o || {}, i = $(i).eq(0), u = o.callback, p = null, f = null, m = !1,
v = null, b = o.spreadActions && $(o.spreadActions).eq(0), b && b.size() &&
this.canShowSpreadActions() && (o.ignoreInterval || (S = t
.getInputValueGetter(i.get(0)), w = t.getInputValueSetter(i.get(0))
), y = SymbolSearchInputParserMixin.addSpreadActions(b, i.get(0), S,
w)), T = new t({
input: i,
onValueChanged: a,
callback: function(t, e) {
n(), "function" == typeof f && f(t, e) || ("function" ==
typeof u && u(t, e), "function" == typeof p && p(t,
e)), o.clearAfterAccept && i.val(""), o
.keepFocus ? i.get(0).focus() : i.get(0).blur(), T
.resetState()
},
hidePro: o.hidePro,
autoFocus: o.autoFocus,
onEmptyApply: o.onEmptyApply,
onParse: y,
acceptEmpty: o.acceptEmpty,
dontUseInputParser: o.dontUseInputParser,
allowMultipleSymbols: o.allowMultipleSymbols,
ignoreInterval: o.ignoreInterval
}), C = !1, x = !0, TradingView.isMobile.iOS() && $("body").css("cursor",
"pointer"), i.on("focus", function(t, e) {
C = !0, m = !0, T._skipAutoFocus ? delete T._skipAutoFocus :
setTimeout(function() {
C && i.get(0).select()
}, 0)
}), i.on("blur", function(t) {
var e, o, r, s, a = this;
if (v && (e = document.activeElement, o = v.is(e), r = v.has(e)
.length > 0, (-1 !== navigator.userAgent.indexOf(
"Trident") || -1 !== navigator.userAgent.indexOf(
"MSIE")) && (o || r))) return t.preventDefault(), t
.stopImmediatePropagation(), void setTimeout(function() {
i.focus()
}, 0);
TradingView.isMobile.iOS() && x && (x = !1,
C = !0), TradingView.isMobile.iOS() && C && null === t
.relatedTarget ? (s = function(t) {
$(a).is($(t.target)) || (C = !1, setTimeout(function() {
n()
}, 0), $(document).off("click", "body", s))
}, $(document).on("click", "body", s)) : C = !1, setTimeout(
function() {
C || n()
}, 0)
}), o.syncWithChartWidget && (c(!0), s.seriesShortSymbol.subscribe(
function() {
c(!0)
}), p = function(t, e) {
m = !(t || e), t && s.symbol.setValue(t), e && s.interval.setValue(
e)
}, f = function(t, e) {
return !e && (t === s.symbol.value() || (t === s.seriesShortSymbol
.value() || void 0))
}, o.syncOnBlur && i.on("blur", function() {
m && (c(!0), m = !1)
}), P = function() {
i.get(0).blur(), c(!1)
}, i.on("keypress", function(t) {
t.keyCode === _.ESC && P()
}), i.on("keydown", function(t) {
t.keyCode === _.ESC && P()
})), T
}, y.isRoot = function(t) {
return !(!t || !Array.isArray(t.contracts))
}, y.prototype.addRoot = function(t, e) {
var i, o;
this._currentTbody = null, i = document.createElement("tbody"), this._container
.appendChild(i), o = this, e.addEventListener("click", function(i) {
i.preventDefault(), e.classList.contains("collapsed") ? o.expand(
t) : o.collapse(t)
}), e.setAttribute("data-root", t), i.appendChild(e), this._roots[t] = {
titleRow: e,
tbody: i
}
}, y.prototype.append = function(e) {
var i, o, n, r, s, a = null,
l = null;
if (y.isRoot(e))
for (i = e.symbol, o = (e.exchange || "unknown") + "_" + i, this
._translationCache[e.type] || (this._translationCache[e.type] =
"bitcoin" === e.type ? $.t("crypto") : $.t(e.type)), a = t
.createSuggestListRow(e, this._tickerRegExp, this._translationCache, {
nameContent: "<div>" + (T ? i : i.replace(this._tickerRegExp,
"<strong>$&</strong>")) + "</div>",
typeContent: this._translationCache[e.type] + (e.exchange &&
" - " + e.exchange || ""),
addClass: "group-title"
}), this._roots[o] || this.addRoot(o, a), n = 0; n < e.contracts
.length; ++n) r = e.contracts[n], s = t.createSuggestListRow(r, this
._tickerRegExp, this._translationCache), l = r.ticker || r
.full_name, this._itemsByTicker[l] = r, s.setAttribute(
"data-item-ticker", l), this._roots[o].tbody.appendChild(s);
else this._currentTbody || (this._currentTbody = document.createElement(
"tbody"), this._container.appendChild(this._currentTbody)), a = t
.createSuggestListRow(e, this._tickerRegExp, this._translationCache), this
._currentTbody.appendChild(a);
l = e.ticker || e.full_name, this._itemsByTicker[l] = e, a.setAttribute(
"data-item-ticker", l)
}, y.prototype.toggleCollapsed = function(t, e) {
var i;
if (t)(i = this._roots[t]) && ($(i.titleRow).toggleClass("collapsed", !!e), $(i
.tbody).find("tr:not(.group-title)").toggleClass("hidden", !!e));
else
for (t in this._roots) this.toggleCollapsed(t, e)
}, y.prototype.collapse = function(t) {
this.toggleCollapsed(t, !0)
}, y.prototype.expand = function(t) {
this.toggleCollapsed(t, !1)
}, y.prototype.getItemByTicker = function(t) {
return this._itemsByTicker[t] || null
}, t.GroupListHandler = y, t.isIntervalInit = function(t) {
return /[\d,]/.test(t) && e.enabled("show_interval_dialog_on_key_press")
}, t.isIntervalChar = function(t) {
return e.enabled("seconds_resolution") ? /[\dhdwms]/i.test(t) : /[\dhdwm]/i
.test(t)
}, t.parseIntervalValue = function(t) {
var e = /^[,\s]*(\d*)\s*([hdwms]?)\s*$/i.exec(t) || [],
i = ~~e[1],
o = e[2] && e[2].toUpperCase(),
n = {
qty: !i && o ? 1 : i,
unit: o || null
};
return n.error = !i && !o, n.intraday = !(n.error || n.unit && "H" !== n.unit),
n
},
t.sanitizeIntervalValue = function(e) {
var i = t.parseIntervalValue(e),
o = i.qty,
n = i.unit;
return i.error ? null : ("H" === n && (o *= 60, n = null), o && !n ? o + "" :
n && (!o || 1 === o && "S" !== n) ? n : o + n)
}, t.detachInterval = function(t) {
var e = /,[^,]*$/i.exec(t) || [];
if (e[0]) return {
rest: t.substr(0, t.length - e[0].length),
detached: e[0]
}
}, t.intervalIsSupported = function(i) {
var o, n, a;
return e.enabled("allow_supported_resolutions_set_only") ? null !== (o = this
.sanitizeIntervalValue(i)) && r(o) : (n = t.parseIntervalValue(i), !n
.error && (n.intraday ? s.intraday.value() : !(a = s
.supportedResolutions.value()) || !!~a.indexOf(n.unit)))
},
function() {
var e = "",
i = null;
t.resetStoredInterval = function() {
e = "", i = null
}, t.detachStoreInterval = function(o) {
var n = t.detachInterval(o);
return n ? (e = n.detached, i = t.sanitizeIntervalValue(e), n.rest) : (t
.resetStoredInterval(), o)
}, t.recallAttachInterval = function(t) {
return t + e
}, t.getInterval = function(e) {
var o = i;
return !0 === e && t.resetStoredInterval(), o
}, t.getInputValueGetter = function(e) {
return function() {
return t.detachStoreInterval(e.value)
}
}, t.getInputValueSetter = function(e) {
return function(i) {
e.value = t.recallAttachInterval(i)
}
}, t.intervalError = function() {
return !(!e || /^,\s*$/.test(e)) && !i
}
}(), t.activateKeyPressHandler = function() {
l.pushBackListener("symbolEdit", this._keyPressHandler)
}, t._keyPressHandler = function(o) {
var n, r = i(317);
if (v(o))
if (o.preventDefault(), n = String.fromCharCode(o.charCode), t
.isIntervalInit(n)) new r({
callback: function(t) {
s.interval.setValue(t)
}
}).show(n);
else {
if (!e.enabled("symbol_search_hot_key")) return;
t.showDialog({
initialValue: n,
callback: function(t, e) {
s.symbol.setValue(t), e && s.interval.setValue(e)
}
})
}
}, t.canShowSpreadActions = function() {
return "undefined" != typeof SymbolSearchInputParserMixin && "cme" !==
TradingView.widgetCustomer && "bovespa" !== TradingView.widgetCustomer
}, t
}();
t.exports = f
}).call(e, i(5))
}, function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
});
var o = function() {
function t(t, e) {
void 0 === e && (e = !0), this._customFlags = {}, this._text = t, this._executeOnPush = e
}
return t.prototype.text = function() {
return this._text
}, t.prototype.executeOnPush = function() {
return this._executeOnPush
}, t.prototype.customFlag = function(t) {
return this._customFlags[t]
}, t.prototype.setCustomFlag = function(t, e) {
this._customFlags[t] = e
}, t
}();
e.UndoCommand = o
}, function(t, e, i) {
"use strict";
var o = i(15),
n = i(7),
r = n.getLogger("Chart.PriceRange"),
s = function() {
function t(t, e) {
var i, o;
null !== t && "object" == typeof t ? (i = t, this._minValue = i.m_minValue, this._maxValue =
i.m_maxValue) : (o = t, this._minValue = o, void 0 !== e && (this._maxValue = e))
}
return t.prototype.equals = function(t) {
return this._minValue === t._minValue && this._maxValue === t._maxValue
}, t.prototype.clone = function() {
return new t(this._minValue, this._maxValue)
}, t.prototype.minValue = function() {
return this._minValue
}, t.prototype.setMinValue = function(t) {
this._minValue = t
}, t.prototype.maxValue = function() {
return this._maxValue
}, t.prototype.setMaxValue = function(t) {
this._maxValue = t
}, t.prototype.length = function() {
return this._maxValue - this._minValue
}, t.prototype.isEmpty = function() {
return this._maxValue === this._minValue || this._maxValue !== this._maxValue || this
._minValue !== this._minValue
}, t.prototype.serialize = function() {
return {
m_maxValue: this._maxValue,
m_minValue: this._minValue
}
}, t.prototype.state = function() {
return {
max: this._maxValue,
min: this._minValue
}
}, t.prototype.merge = function(e) {
return new t(Math.min(this.minValue(), e.minValue()), Math.max(this.maxValue(), e
.maxValue()))
}, t.prototype.apply = function(t, e) {
this._minValue = Math.min(this._minValue, t), this._maxValue = Math.max(this._maxValue,
e)
}, t.prototype.set = function(t, e) {
this._minValue = t, this._maxValue = e
}, t.prototype.scaleAroundCenter = function(t) {
var e, i, n, s;
if (!o.isNumber(t)) return void r.logDebug(
"PriceRange.scaleAroundCenter: invalid coeff");
0 !== (e = this._maxValue - this._minValue) && (i = .5 * (this._maxValue + this
._minValue), n = this._maxValue - i, s = this._minValue - i, n *= t, s *= t,
this._maxValue = i + n, this._minValue = i + s)
}, t.prototype.shift = function(t) {
if (!o.isNumber(t)) return void r.logDebug("PriceRange.shift: invalid coeff");
this._maxValue += t, this._minValue += t
}, t.prototype.containsStrictly = function(t) {
return t.minValue() > this._minValue && t.maxValue() < this._maxValue
}, t.prototype.convertToPercent = function(t, e) {
return 100 * (t - e) / e
}, t.prototype.convertFromPercent = function(t, e) {
return t / 100 * e + e
}, t.prototype.convertToPercents = function(e) {
return new t(100 * (this._minValue - e) / e, 100 * (this._maxValue - e) / e)
}, t.prototype.convertFromPercents = function(e) {
return new t(this._minValue / 100 * e + e, this._maxValue / 100 * e + e)
}, t
}();
t.exports = s
}, function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
});
! function(t) {
t[t.Normal = 0] = "Normal", t[t.Arrow = 1] = "Arrow", t[t.Circle = 2] = "Circle"
}(e.LineEnd || (e.LineEnd = {}))
}, , function(t, e, i) {
"use strict";
var o, n, r = i(17),
s = i(5);
! function(t) {
t[t.NotBound = 0] = "NotBound", t[t.BoundToWidget = 1] = "BoundToWidget", t[t.BoundToModel = 2] =
"BoundToModel"
}(o || (o = {})), n = function() {
function t() {
this._watchedSymbol = new r, this._seriesShortSymbol = new r, this._proSymbol = new r, this
._watchedInterval = new r, this._watchedIntraday = new r, this
._watchedSupportedResolutions = new r, this._symbolNamesList = new r, this
._chartWidgetBindingState = o.NotBound, this._activeChartWidget = null, this
._watchedSymbolListenerBound = this._watchedSymbolListener.bind(this), this
._watchedIntervalListenerBound = this._watchedIntervalListener.bind(this), this
._onSymbolLinkBound = this._onSymbolLink.bind(this), this._searchCharts = null, this
._selfEmit = !1, this._preventFeedBySymbol = !1
}
return Object.defineProperty(t.prototype, "symbol", {
get: function() {
return this._watchedSymbol
},
enumerable: !0,
configurable: !0
}), Object.defineProperty(t.prototype, "proSymbol", {
get: function() {
return this._proSymbol
},
enumerable: !0,
configurable: !0
}), Object.defineProperty(t.prototype, "symbolNamesList", {
get: function() {
return this._symbolNamesList
},
enumerable: !0,
configurable: !0
}), Object.defineProperty(t.prototype, "seriesShortSymbol", {
get: function() {
return this._seriesShortSymbol.readonly()
},
enumerable: !0,
configurable: !0
}), Object.defineProperty(t.prototype, "interval", {
get: function() {
return this._watchedInterval
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(t.prototype, "intraday", {
get: function() {
return this._watchedIntraday.readonly()
},
enumerable: !0,
configurable: !0
}), Object.defineProperty(t.prototype, "supportedResolutions", {
get: function() {
return this._watchedSupportedResolutions.readonly()
},
enumerable: !0,
configurable: !0
}), Object.defineProperty(t.prototype, "preventFeedBySymbol", {
get: function() {
return this._preventFeedBySymbol
},
enumerable: !0,
configurable: !0
}), t.prototype.bindToChartWidget = function(t) {
var e, i;
if (this.unbindFromChartWidget(), this._activeChartWidget = t, e = t.model())
return void this._onChartModelCreated(e);
t.modelCreated().subscribe(this, this._onChartModelCreated), this
._chartWidgetBindingState = o.BoundToWidget, i = t.properties()
.mainSeriesProperties, this._watchedSymbol.setValue(i.symbol.value()), this
._watchedInterval.setValue(i.interval.value())
}, t.prototype.unbindFromChartWidget = function() {
switch (this._chartWidgetBindingState) {
case o.BoundToWidget:
if (!this._activeChartWidget) throw Error("ChartWidget is undefined");
this._activeChartWidget.modelCreated().unsubscribe(this, this
._onChartModelCreated);
break;
case o.BoundToModel:
this._symbolProperty().unsubscribe(this, this._onSymbolPropertyChange), this
._watchedSymbol.unsubscribe(this._watchedSymbolListenerBound), this
._mainSeries().onSymbolResolved().unsubscribe(this, this
._updateSeriesSymbolInfo), this._mainSeries().onSymbolError()
.unsubscribe(this, this._updateSeriesSymbolInfo), this._intervalProperty()
.unsubscribe(this, this._onIntervalPropertyChange), this._watchedInterval
.unsubscribe(this._watchedIntervalListenerBound), delete this._watchedSymbol
.hook, delete this._watchedSymbol.writeLock
}
this._activeChartWidget = null, this._chartWidgetBindingState = o.NotBound
}, t.prototype.getChartWidget = function() {
return this._activeChartWidget
}, t.prototype.bindToChartWidgetCollection = function(t) {
var e = this;
this._chartWidgetCollection = t, this.unbindFromChartWidget(), t.activeChartWidget
.subscribe(function(t) {
e.unbindFromChartWidget(), e.bindToChartWidget(t)
}, {
callWithLast: !0
})
}, t.prototype.bindToSearchCharts = function(t) {
this.unbindFromSearchCharts(), this._searchCharts = t, t.onSearchBySymbol.subscribe(
this, this._onSearchBySymbol), this._watchedSymbol.subscribe(this
._onSymbolLinkBound)
}, t.prototype.unbindFromSearchCharts = function() {
this._searchCharts && (this._searchCharts.onSearchBySymbol.unsubscribe(this, this
._onSearchBySymbol), this._watchedSymbol.unsubscribe(this
._onSymbolLinkBound), this._searchCharts = null)
}, t.prototype.setPreventFeedBySymbol = function(t) {
this._preventFeedBySymbol = t
}, t.prototype._onSearchBySymbol = function(t) {
if (!t.resolved_symbol) throw Error("no resolved_symbol");
this._selfEmit = !0, this._watchedSymbol.setValue(t.resolved_symbol), this._selfEmit = !
1
}, t.prototype._onSymbolLink = function(t) {
if (!this._selfEmit) {
if (!this._searchCharts) throw Error("No search charts defined");
this._preventFeedBySymbol || this._searchCharts.feedBySymbol(t)
}
}, t.prototype._mainSeries = function() {
if (!this._activeChartWidget) throw Error("ChartWidget is undefined");
return this._activeChartWidget.model().mainSeries()
},
t.prototype._properties = function() {
return this._mainSeries().properties()
}, t.prototype._symbolProperty = function() {
return this._properties().symbol
}, t.prototype._intervalProperty = function() {
return this._properties().interval
}, t.prototype._watchedSymbolListener = function(t) {
(s.enabled("same_data_requery") || this._symbolProperty().value() !== t) && this
._chartWidgetCollection.setSymbol(t)
}, t.prototype._onSymbolPropertyChange = function() {
this._watchedSymbol.setValue(this._symbolProperty().value())
}, t.prototype._onSymbolResolved = function(t) {
this._proSymbol.setValue(t.pro_name || s.enabled("trading_terminal") && (t.full_name ||
t.name) || ""), t.aliases && this._symbolNamesList.setValue(t.aliases)
}, t.prototype._updateSeriesSymbolInfo = function() {
this._seriesShortSymbol.setValue(this._properties().shortName.value());
var t = this._mainSeries().symbolInfo();
t ? (this._onSymbolResolved(t), t.hasOwnProperty("supported_resolutions") ? this
._watchedSupportedResolutions.setValue(t.supported_resolutions) : this
._watchedSupportedResolutions.setValue(void 0), this._watchedIntraday.setValue(!
!t.has_intraday)) : (this._watchedIntraday.deleteValue(), this._proSymbol
.deleteValue())
}, t.prototype._watchedIntervalListener = function(t) {
(s.enabled("same_data_requery") || this._intervalProperty().value() !== t) && this
._chartWidgetCollection.setResolution(t)
}, t.prototype._onIntervalPropertyChange = function() {
this._watchedInterval.setValue(this._intervalProperty().value())
}, t.prototype._onChartModelCreated = function(t) {
var e, i, n;
if (!this._activeChartWidget) throw Error("ChartWidget is undefined");
this._chartWidgetBindingState = o.BoundToModel, this._activeChartWidget.modelCreated()
.unsubscribe(this, this._onChartModelCreated), e = this._symbolProperty(), e
.subscribe(this, this._onSymbolPropertyChange), this._watchedSymbol.setValue(e
.value()), this._watchedSymbol.subscribe(this._watchedSymbolListenerBound), i =
this._mainSeries(), i.onSymbolResolved().subscribe(this, this._onSymbolResolved),
this._watchedSymbol.hook = function(t) {
return i.symbolSameAsCurrent(t) && (t = i.symbol()), t
}, i.onSymbolResolved().subscribe(this, this._updateSeriesSymbolInfo), i
.onSymbolError().subscribe(this, this._updateSeriesSymbolInfo), i
.onSymbolNotPermitted().subscribe(this, this._updateSeriesSymbolInfo), i
.onSymbolGroupNotPermitted().subscribe(this, this._updateSeriesSymbolInfo), i
.onExtendedHoursNotPermitted().subscribe(this, this._updateSeriesSymbolInfo), this
._updateSeriesSymbolInfo(), n = this._intervalProperty(), n.subscribe(this, this
._onIntervalPropertyChange), this._watchedInterval.setValue(n.value()), this
._watchedInterval.subscribe(this._watchedIntervalListenerBound), this
._activeChartWidget.readOnly() && (this._watchedSymbol.writeLock = !0)
}, t
}(), window.TradingView = window.TradingView || {}, window.TradingView.Linking = new n, t.exports =
window.TradingView.Linking
}, function(t, e, i) {
"use strict";
(function(e, o, n, r) {
function s(t) {
this._series = t, this._model = t.m_model, this._points = [new O(0, 0)], this
._invalidated = !0, this._lineRenderer = new L
}
function a() {
return {
count: TradingView.DEFAULT_BAR_COUNT
}
}
function l(t, n, r) {
var c, _ = i(158);
k.call(this, t),
this._boxSizeChanged = new e, this._tagsChanged = new e, this._symbolIntervalChanged =
new e, this._symbolResolved = new e, this._symbolError = new e, this
._symbolNotPermitted = new e, this._symbolGroupNotPermitted = new e, this
._intervalChanged = new e, this._extendedHoursChanged = new e, this
._extendedHoursNotPermitted = new e, this.chartTypeNotPermitted = new e, this
.intradaySpreadNotPermitted = new e, this.intradayExchangeNotPermitted = new e, this
.customIntervalNotPermitted = new e, this.chartWidgetInitialized = new e, this
._startLoading = new e, this._dataLoaded = new e, this._tickmarksRangeChanged = new e,
this._barReceived = new e, this._onStyleChanged = new e, this._onCompleted = new e, this
._onStatusChanged = new e, this._onRestarted = new e, this._onSessionsStudyCreated =
new e, this.requestingIntradayWhenNotSupported = new e, this
.requestingResolutionWhenNotSupported = new e, this.priceScaleChanged = new e, this
._onInReplayStateChanged = new e, this._requestOptions = r || a(), this.m_model = t,
this._chartApi = t._chartApi, this.m_data = new D(["time", "open", "high", "low",
"close", "adt", "style"
]), this.setProperties(n), this._prevChartStyle = n.style.value(), this
.createPaneView(), this._dataWindowView = new p(this, t), this._statusView = new h(this,
t
.properties()), this._priceAxisViews = [new d(this, {
model: t
}), new u(this, {
model: t
})], this._symbolInfo = null, this._status = l.STATUS_OFFLINE, this._syncModel = null,
this._replaySubscriber = null, c = this, this._turnaroundCounter = 1, this._turnaround =
"s" + this._turnaroundCounter, this._handler = function(t) {
c.onData(t)
}, this._haStyle = {
studyId: "BarSetHeikenAshi@tv-basicstudies-60"
}, this._renkoStyle = {
studyId: "BarSetRenko@tv-prostudies-15"
}, this._pbStyle = {
studyId: "BarSetPriceBreak@tv-prostudies-15"
}, this._kagiStyle = {
studyId: "BarSetKagi@tv-prostudies-15"
}, this._pnfStyle = {
studyId: "BarSetPnF@tv-prostudies-15"
}, this._properties.addExclusion && this._properties.addExclusion("visible"), this
._base = 100, this._formatter = new B(this._base), this._predictBars = 0, this
._futureBarsPaneView = null, this._properties.showInDataWindow.listeners().subscribe(t,
_.prototype.fullUpdate), this.marketStatus = new o, this._seriesLoaded = !1, this
.properties().minTick.listeners().subscribe(this, l.prototype._recreateFormatter), c =
this, this.properties().minTick.listeners().subscribe(null, function() {
c.m_model.invalidate(new V(V.FULL_UPDATE))
}), this._priceLineView = new s(this), this._gotoDateView = new I(this), this
.bindStyleChange(), this.bindJapChartsInputs(), this
._createIsPrevClosePriceAvailableProperty(), this.createExtendedHoursProperty(), this
.extendedHours.listeners().subscribe(this, function() {
this._extendedHoursChanged.fire()
}), this._extendedHoursNotPermitted.subscribe(this, function() {
this._properties.extendedHours.setValue(!1)
}), this._extendedHoursChanged.subscribe(this, function() {
this._status !== l.STATUS_SNAPSHOT && this.restart()
}), this._symbolIntervalChanged.subscribe(this, this.checkInterval), this.properties()
.showCountdown.listeners().subscribe(this, l.prototype._onChangeShowCountdown), this
._onChangeShowCountdown(this.properties().showCountdown), this._recreateFormatter(),
this._isDWMCached = null,
this.properties().lineStyle.priceSource.listeners().subscribe(this, this
._updateBarFunction), this.properties().areaStyle.priceSource.listeners().subscribe(
this, this._updateBarFunction), this.properties().baselineStyle.priceSource
.listeners().subscribe(this, this._updateBarFunction), this._updateBarFunction()
}
var c, h, u, d, p, _, f, m, g, v, y, b, S, w, T, C, x, P, L, I, k, A, M, E, D, V, O, R, B, z, F,
N, W, $, H, U, j, q, G, Y, K, Z, X, J, Q;
TradingView.DEFAULT_BAR_COUNT = 300, TradingView.TIME_PLOT = 0, TradingView.OPEN_PLOT = 1,
TradingView.HIGH_PLOT = 2, TradingView.LOW_PLOT = 3, TradingView.CLOSE_PLOT = 4, TradingView
.ADT_PLOT = 6, TradingView.STYLE_PLOT = 7, c = i(9).ensureNotNull, h = i(877), u = i(880)
.ProjectionSeriesPriceAxisView, d = i(341).SeriesPriceAxisView, p = i(881), _ = i(342), f =
_.SeriesAreaPaneView, m = _.SeriesLinePaneView, g = _.SeriesHollowCandlesPaneView, v = _
.SeriesCandlesPaneView, y = _.SeriesBarsPaneView, b = _.SeriesHeikenAshiPaneView, S = _
.SeriesBaselinePaneView, w = _.SeriesBaselineLinePaneView, T = i(5), C = i(3).propertyPages,
x = i(344).BarsRange, P = i(217).SeriesBarColorer, L = i(94).HorizontalLineRenderer, I = i(
883), k = i(46).PriceDataSource, A = i(124), M = i(884).FutureBarsPaneView, E = i(34)
.Interval, D = i(212).SeriesData, V = i(22), O = i(8).Point, R = i(346), B = i(28)
.PriceFormatter, z = i(19), F = z.PlotList, N = z.PlotRowSearchMode, W = z.mergeMinMax, $ =
i(33), H = i(347).SyncModel, U = i(40).trackEvent, j = i(162).translatedIntervalString, q =
i(61), G = i(7), Y = G.getLogger("Chart.Series"), K = G.getLogger("Chart.Series.Updates", {
highRate: !0
}), Z = i(49), X = i(348), J = i(349), Q = !T.enabled("hide_series_legend_item"), s
.prototype.update = function() {
this._invalidated = !0
}, s.prototype.updateImpl = function() {
if (this._visible = !1, this._series.properties().showPriceLine.value()) {
var t = this._series.lastValueData(void 0, !0);
t.noData || (this._visible = !0, this._points = [new O(0, t.coordinate)], this
._color = this._series.priceLineColor(t.color))
}
}, s.prototype.renderer = function() {
this._invalidated && (this.updateImpl(), this._invalidated = !1);
var t = {};
return t.width = this._model.timeScale().width(), t.height = this._series.priceScale()
.height(), t.points = this._points, t.color = this._color, t.linewidth = this
._series.properties().priceLineWidth.value(), t.linestyle = CanvasEx
.LINESTYLE_DOTTED, t.visible = this._visible, this._lineRenderer.setData(t), this
._lineRenderer
}, inherit(l, k), l.prototype.styleStudyInfos = function() {
return {
haStyle: this._haStyle,
renkoStyle: this._renkoStyle,
pbStyle: this._pbStyle,
kagiStyle: this._kagiStyle,
pnfStyle: this._pnfStyle
}
}, l.prototype.styleStudyInfo = function(t) {
return this.styleStudyInfos()[t]
}, l.prototype.priceLineColor = function(t) {
return this.properties().priceLineColor.value() || t
}, l.prototype.endOfData = function() {
return this._endOfData
}, l.prototype.serverTimeOffset = function() {
return this._chartApi.serverTimeOffset()
}, l.prototype._onChangeShowCountdown = function(t) {
var e = this;
t.value() ? this._countdownUpdateTimer = this.m_model.setInterval(function() {
e.isDWM() || (e._priceAxisViews[0].update(), e.m_model.invalidate(new V(V
.LIGHT_UPDATE)))
}, 500) : (this.m_model.clearInterval(this._countdownUpdateTimer), delete this
._countdownUpdateTimer)
}, l.prototype.lastValueData = function(t, e, i) {
var o, n, r, s, a, l, c, h, u, d, p = {
noData: !0
};
if (this.m_model.timeScale().isEmpty() || this.priceScale().isEmpty() || this.data()
.isEmpty()) return p;
if (null === (o = this.m_model.timeScale().visibleBars())) return p;
if (e) {
if (null === (s = this.data().bars().last())) return p;
n = s.value, r = s.index
} else {
if (null === (a = this.data().bars().search(o.lastBar(), N.NearestLeft))) return p;
n = this.data().bars().valueAt(a.index), r = a.index
}
return l = {
noData: !1
}, c = void 0 !== t ? n[t] : this._barFunction(n), i && (l.price = c), this
.priceScale().properties().percentage.value() && (h = this.firstValue(), c = this
.priceScale().priceRange().convertToPercent(c, h)), l.text = this.priceScale()
.formatter().format(c), u = this.barColorer(), d = u.barStyle(r, !1), l.color = d
.barColor, l.floatCoordinate = this.priceScale().priceToCoordinate(c, !0), l
.coordinate = Math.round(l.floatCoordinate), l.index = r, l
}, l.prototype.prevClose = function() {
var t, e;
return this.priceScale().isEmpty() || this.data().isEmpty() || !this.quoteData ? null :
null == (t = this.quoteData.prev_close_price) ? null : (this.priceScale()
.properties().percentage.value() && (e = this.firstValue(), t = this
.priceScale().priceRange().convertToPercent(t, e)), {
coordinate: this.priceScale().priceToCoordinate(t),
floatCoordinate: this.priceScale().priceToCoordinate(t, !0),
text: this.priceScale().formatter().format(t)
})
}, l.prototype._createIsPrevClosePriceAvailableProperty = function() {
this._isPrevClosePriceAvailable = new n(!this.isDWM()), this._onRestarted.subscribe(
this,
function() {
this._isPrevClosePriceAvailable.setValue(!this.isDWM())
})
}, l.prototype.isPrevClosePriceAvailable = function() {
return this._isPrevClosePriceAvailable
}, l.prototype._prepareChartApiParams = function() {
return this._requestOptions.startDate ? !this._requestOptions.startDate || this
._requestOptions.endDate || this._requestOptions.count ? this._requestOptions
.startDate && this._requestOptions.endDate ? ["from_to", this._requestOptions
.startDate, this._requestOptions.endDate
] : ["from_to", this._requestOptions.startDate, this._requestOptions.count] : [
"from_to", this._requestOptions.startDate
] : this._requestOptions.count || TradingView.DEFAULT_BAR_COUNT
}, l.prototype._nextSymbolId = 1, l.prototype._nextSeriesId = 1, Object.assign(l, Z), l
.PERMISSION_DENIED = "permission denied", l.PD_REASON_SYMBOL = "symbol", l
.PD_REASON_EXTENDED_HOURS = "extended_hours", l.PD_REASON_GROUP_PERMISSION = "group", l
.STUDY_NOT_AUTH = "study_not_auth", l.prototype.model = function() {
return this.m_model
}, l.prototype.fixLastBar = function(t) {
this._futureBarsPaneView || (this._futureBarsPaneView = new M(this, this.data().bars()
.lastIndex(), t))
}, l.prototype.clearData = function() {
this.data().clear()
}, l.prototype.data = function() {
return this.m_data
}, l.prototype.symbolId = function() {
return this._symbolId
}, l.prototype.isPulse = function() {
return this._symbolInfo && this._symbolInfo.resolutions.length > 0
}, l.prototype.onTagsChanged = function() {
return this._tagsChanged
}, l.prototype.onSymbolIntervalChanged = function() {
return this._symbolIntervalChanged
}, l.prototype.onSymbolResolved = function() {
return this._symbolResolved
}, l.prototype.onSymbolError = function() {
return this._symbolError
},
l.prototype.onSymbolNotPermitted = function() {
return this._symbolNotPermitted
}, l.prototype.onSymbolGroupNotPermitted = function() {
return this._symbolGroupNotPermitted
}, l.prototype.onIntervalChanged = function() {
return this._intervalChanged
}, l.prototype.onExtendedHoursNotPermitted = function() {
return this._extendedHoursNotPermitted
}, l.prototype.onStartLoading = function() {
return this._startLoading
}, l.prototype.onDataLoaded = function() {
return this._dataLoaded
}, l.prototype.onStatusChanged = function() {
return this._onStatusChanged
}, l.prototype.onTickmarksRangeChanged = function() {
return this._tickmarksRangeChanged
}, l.prototype.onBarReceived = function() {
return this._barReceived
}, l.prototype.onStyleChanged = function() {
return this._onStyleChanged
}, l.prototype.onCompleted = function() {
return this._onCompleted
}, l.prototype.onRestarted = function() {
return this._onRestarted
}, l.prototype.onBoxSizeChanged = function() {
return this._boxSizeChanged
}, l.prototype.status = function() {
return this._status
}, l.prototype.isDWM = function() {
var t, e;
return null !== this._isDWMCached ? this._isDWMCached : (t = new E(this._properties
.interval.value()), t.isDWM() ? this._isDWMCached = !0 : (e = t.kind() === E
.SECONDS ? t.multiplier() : 60 * t.multiplier(), this._isDWMCached = !(e <
216e3)), this._isDWMCached)
}, l.prototype.lastPriceLabelFixedCoordinate = function() {
return this._priceAxisViews[0]._fixedCoordinate
}, l.prototype.createPaneView = function() {
this._paneView = null, this._projectionBarsPaneView = null, this._baseLineView = null,
this._symbolLabelView = new A(this.m_model, this, void 0, "firstShortName",
"showSymbolLabels");
var t = this._properties.style.value();
switch (t) {
case l.STYLE_BARS:
this._paneView = new y(this, this.m_model);
break;
case l.STYLE_CANDLES:
this._paneView = new v(this, this.m_model);
break;
case l.STYLE_LINE:
this._paneView = new m(this, this.m_model);
break;
case l.STYLE_AREA:
this._paneView = new f(this, this.m_model);
break;
case l.STYLE_HEIKEN_ASHI:
this._paneView = new b(this, this.m_model);
break;
case l.STYLE_HOLLOW_CANDLES:
this._paneView = new g(this, this.m_model);
break;
case l.STYLE_BASELINE:
this._paneView = new S(this, this.m_model), this._baseLineView = new w(this,
this.m_model);
break;
default:
throw Error("Unknown chart style assigned: " + t)
}
}, l.prototype._clearStylePlot = function(t, e) {
var i, o;
0 !== t.size() && (i = e || c(t.firstIndex()), o = c(t.lastIndex()) + 1, t.range(i, o)
.each(function(t, e) {
e[TradingView.STYLE_PLOT] = null
}))
}, l.prototype.invalidateBarStylesCache = function(t) {
Y.logDebug("Invalidate style cache starting from " + t), this._clearStylePlot(this
.m_data.m_bars, t), this._clearStylePlot(this.m_data.m_nsBars)
}, l.prototype.invalidateBarColorerCache = function() {
delete this._barColorerCache, this.invalidateBarStylesCache()
}, l.prototype.barColorer = function() {
var t, e, i, o;
if (this._barColorerCache) return this._barColorerCache;
for (t = null, e = this.m_model.dataSources().length - 1; e >= 0; e--) i = this.m_model
.dataSources()[e], i.metaInfo && TradingView.isInherited(i.constructor, TradingView
.Study) && i.hasBarColorer() && i.properties().visible.value() && (o = i
.barColorer(), null === t ? t = o : t.pushBackBarColorer(o));
return null === t ? t = new P(this) : t.pushBackBarColorer(new P(this)), this
._barColorerCache = t, this._barColorerCache
}, l.prototype.properties = function() {
return this._properties
}, l.prototype._barsState = function(t) {
var e = t.state();
return e.columns = e.columns.filter(function(t) {
return "style" !== t
}), e.data.forEach(function(t) {
t.value.splice(7, 1)
}), e
}, l.prototype.state = function(t) {
var e = this === this.m_model.mainSeries() ? "MainSeries" : TradingView.className(this
.constructor),
i = {
type: e,
id: this.id(),
state: this.properties().state(),
zorder: this.zorder(),
haStyle: this._haStyle,
renkoStyle: this._renkoStyle,
pbStyle: this._pbStyle,
kagiStyle: this._kagiStyle,
pnfStyle: this._pnfStyle
};
return this._symbolInfo && this._symbolInfo.ticker && (i.state.symbol = this._symbolInfo
.ticker), t && (i.bars = this._barsState(this.m_data.m_bars), i.nsBars = this
._barsState(this.m_data.m_nsBars), i.symbolInfo = this._symbolInfo, i.rtPrice =
this.data().lastProjectionPrice), i.boxSize = this.data().boxSize, i
.reversalAmount = this.data().reversalAmount, i
}, l.prototype.restoreData = function(t, e, i, o, n, r) {
this._status = l.STATUS_SNAPSHOT, this.m_data.m_bars.restoreState(t), this.m_data
.m_nsBars.restoreState(e), this.updateSymbolInfo(i), this.m_data
.lastProjectionPrice = o, this.m_data.boxSize = n, n || (this.properties().style
.value() === l.STYLE_PNF ? this.m_data.boxSize = this.properties().pnfStyle
.inputs.boxSize.value() : this.properties().style.value() === l.STYLE_RENKO && (
this.m_data.boxSize = this.properties().renkoStyle.inputs.boxSize.value())),
this.m_data.reversalAmount = r, r || this.properties().style.value() === l
.STYLE_KAGI && (this.m_data.reversalAmount = this.properties().kagiStyle.inputs
.reversalAmount.value())
}, l.prototype.setProperties = function(t) {
t.timeframe || t.merge({
timeframe: ""
}), t.shortName || t.merge({
shortName: ""
}), this._properties = t, this._properties.symbol.listeners().subscribe(this, l
.prototype.changeSymbol), this._properties.interval.listeners().subscribe(this,
l.prototype.changeInterval), this._properties.timeframe.listeners().subscribe(
this, l.prototype.changeTimeFrame), this._properties.listeners().subscribe(this,
l.prototype.changeProperties)
}, l.prototype.changeSymbol = function() {
this.setSymbolIntervalDelayed(), this.m_model.checkLineToolSelection()
}, l.prototype.changeInterval = function() {
this.setSymbolIntervalDelayed()
}, l.prototype.changeTimeFrame = function() {
U("GUI", "Change timeframe")
}, l.prototype.title = function() {
return this.properties().symbol.value() + ", " + j(this.properties().interval.value())
}, l.prototype.changeProperties = function(t) {
t !== this._properties.symbol && t !== this._properties.interval && t !== this
._properties.timeframe && (this._tagsChanged.fire(), this.createPaneView(), this
.updateAllViews(), this.m_model.updateSource(this))
}, l.prototype._makeNextSymbolId = function() {
return "symbol_" + this._nextSymbolId++
}, l.prototype._makeNextSeriesId = function() {
return "s" + this._nextSeriesId++
}, l.prototype.onData = function(t) {
var e, i, o, n, r, s, a, h, u, d, p, _, f, m, g, v, y, b = this;
switch (t.method) {
case "symbol_resolved":
if (t.params[0] !== this._symbolId) {
Y.logNormal("command for old symbol. Expected:" + this._symbolId +
", actual" + t.params[0]);
break
}
this.updateSymbolInfo(t.params[1]), this.m_model.updateSource(this), this
._symbolResolved.fire(this._symbolInfo), this.m_model.realignLineTools(),
TradingView.onWidget() || U("Symbol", t.params[1].listed_exchange, t.params[
1].name), e = this.symbolInfo().minmov / this.symbolInfo().pricescale,
i = this.properties(), i.style.value() === l.STYLE_RENKO && i.renkoStyle
.inputs.boxSize.value() < e ? i.renkoStyle.inputs.merge({
boxSize: e
}) : i.style.value() === l.STYLE_PNF && i.pnfStyle.inputs.boxSize.value() <
e ? i.pnfStyle.inputs.merge({
boxSize: e
}) : i.style.value() === l.STYLE_KAGI && i.kagiStyle.inputs.reversalAmount
.value() < e && i.kagiStyle.inputs.merge({
reversalAmount: e
});
break;
case "symbol_error":
if (t.params[0] !== this._symbolId) {
Y.logNormal("command for old symbol. Expected:" + this._symbolId +
", actual" + t.params[0]);
break
}
if (this._setStatus(l.STATUS_INVALID_SYMBOL), this._properties.shortName
.setValue(this._properties.symbol.value()), this.m_model.clearAllStudies(),
this.updateAllViews(), this.m_model.updateSource(this), t.params[1] === l
.PERMISSION_DENIED) switch (t.params[2]) {
case l.PD_REASON_EXTENDED_HOURS:
this._extendedHoursNotPermitted.fire();
break;
case l.PD_REASON_SYMBOL:
this._symbolNotPermitted.fire(t.params[3]);
break;
case l.PD_REASON_GROUP_PERMISSION:
this._symbolGroupNotPermitted.fire(t.params[3]);
break;
default:
this._symbolNotPermitted.fire(t.params[2])
} else this.m_model.resetTimeScale(), this._symbolError.fire();
this.m_model.realignLineTools();
break;
case "series_timeframe":
if (t.params[1] !== this._turnaround) break;
o = t.params[2], n = t.params[3], r = t.params[4], s = void 0 !== r && r ? n :
n + 10, this.m_model.setTimeViewport(o, s);
break;
case "series_error":
a = t.params[2], delete this._loadingStartTime, T.enabled(
"charting_library_debug_mode") && Y.logNormal("Error reason: " + a),
this._setStatus(T.enabled("no_bars_status") && this._symbolInfo ? l
.STATUS_NO_BARS : l.STATUS_INVALID_SYMBOL), "string" == typeof a && (a
.startsWith("study_not_auth:") ? (h = a.split(":", 2)[1].split("@", 2)[
0], h in {
BarSetRenko: !0,
BarSetPriceBreak: !0,
BarSetKagi: !0,
BarSetPnF: !0
} ? this.chartTypeNotPermitted.fire(h) : "BarSetSpread" === h &&
this.intradaySpreadNotPermitted.fire()) :
"resolution_not_entitled" === a ? this.intradayExchangeNotPermitted
.fire() : "custom_resolution" === a && this.customIntervalNotPermitted
.fire()), this._seriesLoaded = !0;
break;
case "series_loading":
if (t.params[1] !== this._turnaround) break;
if (t.params[0] !== this._seriesId) {
Y.logNormal("command for old series. Expected:" + this._seriesId +
", actual" + t.params.customId);
break
}
this._setStatus(l.STATUS_LOADING), b._loadingStartTime = (new Date).getTime();
break;
case "series_completed":
if (t.params[2] !== this._turnaround) break;
if (t.params[0] !== this._seriesId) {
Y.logNormal("command for old series. Expected:" + this._seriesId +
", actual" + t.params.customId);
break
}
switch (u = "chartSession:" + b._chartApi._sessionid, d = (new Date).getTime() -
this._loadingStartTime, Y.logDebug(u + ", Series loading took " + d +
" ms, eod:" + this._endOfData), delete this._loadingStartTime, p = t
.params[1], "pulsed" === p && (p = "delayed"), p) {
case "streaming":
this._setStatus(l.STATUS_READY);
break;
case "endofday":
this._setStatus(l.STATUS_EOD);
break;
case "delayed":
this._setStatus(l.STATUS_DELAYED);
break;
case "pulsed":
this._setStatus(l.STATUS_PULSE);
break;
case "replay":
this._setStatus(l.STATUS_REPLAY)
}
p.match(/delayed_streaming/) && this._setStatus(l.STATUS_DELAYED_STREAMING), _ =
this.m_model.paneForSource(this), _.recalculatePriceScale(this
.priceScale()), this.m_model.invalidate(new V(V.FULL_UPDATE)), this
.m_data
.size() && this._tickmarksRangeChanged.fire({
start: c(this.data().first()).value[TradingView.TIME_PLOT],
end: c(this.data().last()).value[TradingView.TIME_PLOT]
}), this.model().recalcVisibleRangeStudy(this.model().dataSources(), !0),
this.model().recalcStudyBasedLineTools(), !this.m_priceScale
.isLockScale() || this.model().timeScale().isEmpty() || this
._seriesLoaded || (
this.model().timeScale()._correctOffset(), this.model().timeScale()
.correctBarSpacing(), f = this.model().timeScale().visibleBars(), this
.priceScale().setPriceRange(this.priceRange(f.firstBar(), f.lastBar()))
), this._seriesLoaded = !0, this._onCompleted.fire(this._endOfData),
this.requestMoreData();
break;
case "series_deleted":
break;
case "data_update":
if (t.params.customId !== this._seriesId) {
Y.logNormal("command for old series. Expected:" + this._seriesId +
", actual" + t.params.customId);
break
}
if (t.params.turnaround !== this._turnaround) {
Y.logNormal("command for old series turnaround. Expected:" + this
._turnaround + ", actual" + t.params.turnaround);
break
}
if (this._setSymbolIntervalDelay) {
if (this._willSymbolIntervalChanged()) return void Y.logNormal(
"command comes during symbol/interval changing");
Y.logNormal(
"data_update comes when symbol interval delay present but symbol/interval should not be changed"
)
}
if (this.status() === l.STATUS_INVALID_SYMBOL) break;
t.params.plots.length ? (m = this.m_data.bars().size(), g = this.m_data.bars()
.firstIndex(), v = this.m_data.bars().merge(t.params.plots), (null ===
g || v.earliestRow.index < g) && (this._endOfData = !1), y =
"Merge bars. Changes:{length:" + v.length + ", earliestRow:" + v
.earliestRow.index + "} ", y += "bars state:{firstBar:" + c(this.m_data
.bars().firstIndex()) + ",lastBar:" + c(this.m_data.bars()
.lastIndex()) + ",size:" + this.m_data.bars().size() + "}", K
.logDebug(y), m !== this.bars().size() && (this._barReceived.fire(v),
this.model().recalcVisibleRangeStudy(this.model().dataSources(), !0)
)) : (this.m_data.clear(), this._startLoading.fire()), new Promise(
function(e) {
var i = b.properties().style.value();
t.params.nonseries && J.isJapaneseStyle(i) ? b.parseJapProjBars(t
.params.nonseries).then(function(t) {
b.m_data.m_nsBars = t.nsBars, b.m_data
.lastProjectionPrice = t.lastPrice;
var i = b.m_data.boxSize !== t.boxSize;
b.m_data.boxSize = t.boxSize, b.m_data.reversalAmount =
t.reversalAmount, i && b._boxSizeChanged.fire(b
.m_data.boxSize), e()
}) : (t.params.nonseries || (b.m_data.m_nsBars.clear(), b.m_data
.lastProjectionPrice = void 0), e(), e())
}).then(function() {
b._statusView.invalidate();
var t = b.m_model.paneForSource(b);
b.m_model.updateAllVolumeStudies(), b.m_model.recalculatePane(t), b
.m_model.updateSource(b), b.m_model.updateLineTools(), b.m_model
.updateCrossHair()
})
}
this._dataLoaded.fire(t)
}, l.prototype.parseJapProjBars = function(t) {
var e, i, o, n = new F(["time", "open", "high", "low", "close", "adt", "style"]),
r = this.model().timeScale(),
s = this.properties().style.value(),
a = this;
return new Promise(function(c) {
t.d && "" !== t.d ? TradingView.Study.prototype._makeJSONForNSData.call(a, {
params: {
nonseries: t
}
}).then(function(a) {
var h, u, d, p, _ = a.data;
for (e = _.price, i = _.boxSize, o = _.reversalAmount, h = _
.bars, u = 0; h && u < h.length; u++) d = [], p = t.indexes[
h[u].time], d.push(r.points().valueAt(p)), d.push(h[u]
.open), d.push(h[u].high), d.push(h[u].low), d.push(h[u]
.close), d.push(h[u].volume), s === l.STYLE_KAGI ? d
.push(h[u].additionalPrice) : s === l.STYLE_PNF && d.push(h[
u].factor), n.add(p, d);
c({
nsBars: n,
lastPrice: e,
boxSize: i,
reversalAmount: o
})
}) : c({
nsBars: n,
lastPrice: e,
boxSize: i,
reversalAmount: o
})
})
}, l.prototype.disconnect = function() {
this._seriesId && this._chartApi.removeSeries(this._seriesId), this._symbolId = null,
this._seriesId = null, this._predictBars = 0, this._status = l.STATUS_OFFLINE
}, l.prototype.isStarted = function() {
return !!this._symbolId
}, l.prototype.restart = function() {
var t, e = i(158);
this._onRestarted.fire(), this._setStatus(l.STATUS_RESOLVING), this.m_data = new D([
"time", "open", "high", "low", "close", "adt", "style"
]), this.updateSymbolInfo(null), this._prevSymbolId = this._symbolId, this
._symbolId = this._makeNextSymbolId(), t = this._properties.interval.value(), this
._pendingTimeRange && (t = this._generateTimeframe(t, this._pendingTimeRange),
delete this._pendingTimeRange), this._onBeforeModifySeries(this
.getSymbolString(), t), this._chartApi.resolveSymbol(this._symbolId, this
._getResolvingSymbolString(), this._handler), this._seriesId ? (this
._turnaround = "s" + ++this._turnaroundCounter, this._chartApi.modifySeries(this
._seriesId, this._turnaround, this._symbolId, t, this._handler, this
._prevSymbolId)) : (this._seriesId = this._makeNextSeriesId(), !1 === this
._chartApi.createSeries(this._seriesId, this._turnaround, this._symbolId, t,
this._prepareChartApiParams(), this._handler) && (this._seriesId = void 0)),
this._properties.showInDataWindow.listeners().subscribe(this.m_model, e.prototype
.fullUpdate), this.m_symbol = this._properties.symbol.value(), this.m_interval =
this._properties.interval.value()
}, l.prototype._generateTimeframe = function(t, e) {
var i, o = e.right(1),
n = t;
return "ytd" === e ? n += ",YTD" : "d" === o ? (i = e.left(e.length - 1), n += "," + i,
T.enabled("daily_timeframe_suffix") && (n += "D")) : "m" === o ? (i = e.left(e
.length - 1), n += "," + i + "M") : "all" === e && (n += ",ALL"), n
}, l.prototype.hasDelayedSymbolIntervalChange = function() {
return !!this._setSymbolIntervalDelay
}, l.prototype.setSymbolIntervalDelayed = function() {
this._isDWMCached = null, this._willSymbolIntervalChanged() && (this
._setSymbolIntervalDelay && (Y.logNormal(
"Clear timeout to change symbol/interval #" + this
._setSymbolIntervalDelay), clearTimeout(this._setSymbolIntervalDelay)), this
._setSymbolIntervalDelay = setTimeout(function() {
Y.logNormal("Timeout #" + this._setSymbolIntervalDelay +
' fired, new symbol will be "' + this._properties.symbol
.value() + '"'), delete this._setSymbolIntervalDelay, this
._setSymbolInterval(this._properties.symbol.value(), this
._properties.interval.value())
}.bind(this), 30),
Y.logNormal("Started timeout #" + this._setSymbolIntervalDelay +
' to change symbol/interval from "' + this.m_symbol + '" to "' + this
._properties.symbol.value() + '"'))
}, l.prototype._willSymbolIntervalChanged = function() {
var t = this._checkIntervalWillChanged(this._parseInterval(this._properties.interval
.value()).interval);
return this._checkSymbolWillChanged(this._properties.symbol.value()) || t
}, l.prototype._checkSymbolWillChanged = function(t) {
return !this.symbolSameAsCurrent(t) || T.enabled("same_data_requery")
}, l.prototype._checkIntervalWillChanged = function(t) {
return this.m_interval !== t || T.enabled("same_data_requery")
}, l.prototype._parseInterval = function(t) {
var e = (t + "").split(",");
return {
interval: 2 === e.length ? e[0] : t,
timeframe: 2 === e.length ? e[1] : 0
}
}, l.prototype.rerequestData = function() {
this._setSymbolInterval(this.m_symbol, this.m_interval, !0)
}, l.prototype._setSymbolInterval = function(t, e, i) {
var o, n, r, s, a, c;
delete this._gotoDateResult, o = this._parseInterval(e), n = o.interval, r = o
.timeframe, s = this._checkSymbolWillChanged(t), a = this._checkIntervalWillChanged(
n), (s || a || i) && (this._syncModel = null, this.m_symbol = t, this
.m_interval = n, this.m_timeframe = r, this._symbolId && !s || this
.updateSymbolInfo(null), this.m_model.realignLineTools(), this._status !== l
.STATUS_SNAPSHOT && (this._setStatus(l.STATUS_RESOLVING), this
._symbolIntervalChanged.fire(), a && (c = {
timeframe: this._pendingTimeRange
}, this._intervalChanged.fire(this.m_interval, c), this
._pendingTimeRange = c.timeframe && c.timeframe.toLowerCase()), this
._onRestarted.fire(), this._seriesLoaded = !1, this._chartApi && this
._chartApi.connected() && (this._symbolId && !s || (this._prevSymbolId =
this._symbolId, this._symbolId = this._makeNextSymbolId(), this
._chartApi.resolveSymbol(this._symbolId, this
._getResolvingSymbolString(), this._handler)), this._seriesId ?
(this._turnaround = "s" + ++this._turnaroundCounter, this
._pendingTimeRange && (e = this._generateTimeframe(e, this
._pendingTimeRange), delete this._pendingTimeRange), this
._onBeforeModifySeries(this.getSymbolString(), e), this
._predictBars = 0, this._chartApi.modifySeries(this._seriesId, this
._turnaround, this._symbolId, e, this._handler, this
._prevSymbolId)) : (this._onBeforeModifySeries(this
.getSymbolString(), e), this._seriesId = this
._makeNextSeriesId(), this._chartApi.createSeries(this._seriesId,
this._turnaround, this._symbolId, e, this
._prepareChartApiParams(), this._handler)))))
}, l.prototype.setDefaultTimeframe = function(t) {
this._pendingTimeRange = t
}, l.prototype.actualSymbol = function() {
return this.symbolInfo() ? this.symbolInfo().full_name : this.symbol()
}, l.prototype.proSymbol = function() {
return this.symbolInfo() ? this.symbolInfo().pro_name : this.symbol()
}, l.prototype.symbol = function() {
return this.properties().symbol.value()
}, l.prototype.interval = function() {
return this.properties().interval.value()
}, l.prototype.isIntradayInterval = function() {
return !!/^\d*$/.test(this.interval()) && this.interval() <= 1440
}, l.prototype.bars = function() {
return this.m_data.m_bars
}, l.prototype.nsBars = function() {
return this.m_data.m_nsBars
}, l.prototype.open = function(t) {
return this.m_data.valueAt(t)[TradingView.OPEN_PLOT]
},
l.prototype.high = function(t) {
return this.m_data.valueAt(t)[TradingView.HIGH_PLOT]
}, l.prototype.low = function(t) {
return this.m_data.valueAt(t)[TradingView.LOW_PLOT]
}, l.prototype.close = function(t) {
return this.m_data.valueAt(t)[TradingView.CLOSE_PLOT]
}, l.prototype.hl2 = function(t) {
return (this.high(t) + this.low(t)) / 2
}, l.prototype.hlc3 = function(t) {
return (this.high(t) + this.low(t) + this.close(t)) / 3
}, l.prototype.ohlc4 = function(t) {
return (this.open(t) + this.high(t) + this.low(t) + this.close(t)) / 4
}, l.prototype.priceRange = function(t, e) {
var i, o, n, s, a, l, c, h;
return TradingView.isInteger(t) ? TradingView.isInteger(e) ? this.data().isEmpty() ?
null : this.m_priceScale.isLockScale() && null !== (i = this._model
.mainSeriesScaleRatio()) ? (o = this.priceScale().internalHeight() / (this
.model().timeScale().barSpacing() / i), n = this.data().search(e, N
.NearestLeft), s = (n.value[TradingView.HIGH_PLOT] + n.value[TradingView
.LOW_PLOT]) / 2, a = new r(s - .5 * o, s + .5 * o), l = this.data().search(
t, N.NearestRight), this.priceScale().isPercentage() ? a.convertToPercents(l
.value[TradingView.CLOSE_PLOT]) : a) : (c = this.data().bars().minMaxOnRange2(t,
e, [{
index: TradingView.LOW_PLOT,
offset: 0
}, {
index: TradingView.HIGH_PLOT,
offset: 0
}]), h = this.data().nsBars().minMaxOnRange(t, e, [{
index: TradingView.LOW_PLOT,
offset: 0
}, {
index: TradingView.HIGH_PLOT,
offset: 0
}]), c = W(c, h), a = null !== c ? c.min === c.max ? new r(c.min - .5, c.max +
.5) : new r(c.min, c.max) : new r(-.5, .5), this.priceScale().isPercent() ?
(l = this.data().search(t, N.NearestRight), null === l ? null : a
.convertToPercents(l.value[TradingView.CLOSE_PLOT])) : this.priceScale()
.isLog() ? new r(this.priceScale().priceToLogical(a.minValue()), this
.priceScale().priceToLogical(a.maxValue())) : a) : (Y.logDebug(
"Series.priceRange: incorrect endBar"), null) : (Y.logDebug(
"Series.priceRange: incorrect startBar"), null)
}, l.prototype.nearestData = function(t, e) {
if (!TradingView.isInteger(t)) return void Y.logDebug(
"Series.nearestData: incorrect logicalPoint");
var i = this.data().search(t, e);
return null !== i ? i : void 0
}, l.prototype.nearestIndex = function(t, e) {
var i = this.nearestData(t, e);
return i ? i.index : void 0
}, l.prototype.paneViews = function(t) {
if (!this.properties().visible.value()) return null;
var e = [this._paneView];
return this._futureBarsPaneView && e.push(this._futureBarsPaneView), this
._projectionBarsPaneView && e.push(this._projectionBarsPaneView), null !== this
._baseLineView && e.push(this._baseLineView), e.push(this._priceLineView), e.push(
this._symbolLabelView), e.push(this._gotoDateView), e
}, l.prototype.dataWindowView = function() {
return this._dataWindowView
}, l.prototype.statusView = function() {
return Q ? this._statusView : null
}, l.prototype.priceAxisViews = function(t, e) {
return this.m_model.paneForSource(this) === t && e === this.priceScale() && (this
.m_model.properties().scalesProperties.showSeriesLastValue.value() || this
.properties().showCountdown.value()) ? this._priceAxisViews : null
}, l.prototype.base = function() {
return this._base
}, l.prototype.formatter = function() {
return this._formatter
}, l.prototype.purgeSymbolInfo = function() {
this._symbolInfo = null
}, l.prototype.symbolInfo = function() {
return this._symbolInfo
},
l.prototype._recreateFormatter = function() {
var t, e, i, o;
"default" === this.properties().minTick.value() ? this._formatter = new B(this
._symbolInfo ? this._symbolInfo.pricescale : 100, this._symbolInfo ? this
._symbolInfo.minmov : 1, !!this._symbolInfo && this._symbolInfo.fractional, this
._symbolInfo ? this._symbolInfo.minmove2 : void 0) : (t = this.properties()
.minTick.value().split(","), e = parseInt(t[0]), i = parseInt(t[1]), o =
"true" === t[2], this._formatter = new B(e, i, o)), this.priceScale() && this
.priceScale().updateFormatter()
}, l.prototype.updateSymbolInfo = function(t) {
var e, i, o = this,
n = t && (t.pro_name || t.full_name || t.name);
T.enabled("charting_library_single_symbol_request") && this.m_symbol && (n = this
.m_symbol), this._symbolInfo = t, t && (this._properties.shortName.setValue(t
.name), e = this._properties.symbol.value(), i = n, T.enabled(
"uppercase_instrument_names") && (e = e.toUpperCase(), i = i.toUpperCase()),
n && e !== i && this._properties.symbol.setValue(n)), this._base = t ? t
.pricescale / t.minmov : 100, this._recreateFormatter(), this._statusView.update(),
this.priceScale().updateFormatter(), "undefined" !=
typeof quoteSessionMultiplexerInstance && this._quoteSessionSymbol !== n && (this
._quoteSessionClientId || (this._quoteSessionClientId = "series-" + q.guid()),
this._unsubscribeQuoteSession(), n && (this._quoteSessionSymbol = n,
quoteSessionMultiplexerInstance.full.subscribe(this._quoteSessionClientId,
this._quoteSessionSymbol,
function(t, e) {
o.quoteData = t && t.values || null, e && e.values && e.values
.current_session && o.marketStatus.setValue(e.values
.current_session)
}))), this.checkInterval()
}, l.prototype._unsubscribeQuoteSession = function() {
this._quoteSessionSymbol && (quoteSessionMultiplexerInstance.full.unsubscribe(this
._quoteSessionClientId, this._quoteSessionSymbol), this
._quoteSessionSymbol = void 0)
}, l.prototype.symbolSameAsCurrent = function(t) {
if (this.m_symbol === t) return !0;
var e = this._symbolInfo;
if (e) {
if (e.full_name === t || e.pro_name === t) return !0;
if (e.ticker === t) return !0;
if (e.aliases && -1 !== e.aliases.indexOf(t)) return !0;
if (e.alternatives && -1 !== e.alternatives.indexOf(t)) return !0;
if (0 === t.indexOf("FRA:") && e.pro_name === t.replace("FRA:", "FWB:")) return !0
}
return !1
}, l.prototype.updateAllViews = function() {
var t, e;
for (this._paneView.update(), this._dataWindowView.update(), this._statusView.update(),
t = this._priceAxisViews.length, e = 0; e < t; e++) this._priceAxisViews[e]
.update();
this._futureBarsPaneView && this._futureBarsPaneView.update(), this
._projectionBarsPaneView && this._projectionBarsPaneView.update(), null !== this
._baseLineView && this._baseLineView.update(), this._priceLineView.update(), this
._gotoDateView.update(), this._symbolInfo && this._symbolLabelView.update()
}, l.prototype._setStatus = function(t) {
this._status = t, this._statusView.update(), this.m_model.updateSource(this), this
._onStatusChanged.fire()
}, l.prototype.requestMoreData = function(t) {
var e, i, o, n;
this._status !== l.STATUS_READY && this._status !== l.STATUS_PULSE && this._status !== l
.STATUS_DELAYED && this._status !== l.STATUS_DELAYED_STREAMING && this._status !== l
.STATUS_EOD && this._status !== l.STATUS_REPLAY || this.m_model.timeScale()
.isEmpty() || null !== (e = this.m_model.timeScale().visibleBars()) && 0 !== this
.bars().size() && (i = t || e.lastBar() - c(this.data().last()).index, this
._predictBars < i && (this._predictBars = i, this._chartApi && this._chartApi
.connected() && this._chartApi.requestMoreTickmarks(this._seriesId, i, this
._handler)), this._endOfData || (o = c(this.bars().firstIndex()), (n =
t || o - e.firstBar()) <= 0 || (this._endOfData = !0, this._chartApi &&
this._chartApi.connected() && (this._chartApi.requestMoreData(this
._seriesId, n, this._handler), T.enabled(
"charting_library_base") && (this._predictBars = 0)), this
._setStatus(l.STATUS_LOADING))))
}, l.prototype.bindStyleChange = function() {
var t = this;
["candleStyle", "hollowCandleStyle", "haStyle", "barStyle", "lineStyle", "areaStyle",
"renkoStyle", "pbStyle", "kagiStyle", "pnfStyle"
].forEach(function(e) {
t._properties[e].listeners().subscribe(t, l.prototype
.invalidateBarStylesCache)
})
}, l.prototype.bindJapChartsInputs = function() {
this._properties.style.listeners().subscribe(this, this.onChartStyleChanged), this
._properties.renkoStyle.inputs.boxSize.listeners().subscribe(this, this
.onInputChanged), this._properties.renkoStyle.inputs.style.listeners()
.subscribe(this, this.onInputChanged), this._properties.renkoStyle.inputs.atrLength
.listeners().subscribe(this, this.onInputChanged), this._properties.renkoStyle
.inputs.wicks.listeners().subscribe(this, this.onInputChanged), this._properties
.pbStyle.inputs.lb.listeners().subscribe(this, this.onInputChanged), this
._properties.kagiStyle.inputs.reversalAmount.listeners().subscribe(this, this
.onInputChanged), this._properties.kagiStyle.inputs.style.listeners().subscribe(
this, this.onInputChanged), this._properties.kagiStyle.inputs.atrLength
.listeners().subscribe(this, this.onInputChanged), this._properties.pnfStyle.inputs
.boxSize.listeners().subscribe(this, this.onInputChanged), this._properties.pnfStyle
.inputs.reversalAmount.listeners().subscribe(this, this.onInputChanged), this
._properties.pnfStyle.inputs.sources.listeners().subscribe(this, this
.onInputChanged), this._properties.pnfStyle.inputs.style.listeners().subscribe(
this, this.onInputChanged), this._properties.pnfStyle.inputs.atrLength
.listeners().subscribe(this, this.onInputChanged)
}, l.prototype.createExtendedHoursProperty = function() {
function t() {
var t = "undefined" != typeof ProductFeatures && T.enabled(ProductFeatures
.EXTENDED_SESSION),
i = e.model().readOnly(),
o = e._properties.extendedHours.value(),
n = T.enabled("widget");
!o || n || i || t || (e._extendedHoursNotPermitted.fire(), o = !1), o && !e
.isIntradayInterval() && (o = !1), e.extendedHours.setValue(o)
}
var e = this;
e.extendedHours = new n, e._properties.extendedHours.listeners().subscribe(null, t), e
._properties.interval.listeners().subscribe(null, t), e.chartWidgetInitialized
.subscribe(null, t), t()
}, l.prototype.isNeedRestart = function(t) {
if (void 0 === t && (t = this.properties().style.value()), this._prevChartStyle !== t) {
var e = [l.STYLE_BARS, l.STYLE_CANDLES, l.STYLE_HOLLOW_CANDLES, l.STYLE_LINE, l
.STYLE_AREA, l.STYLE_BASELINE
];
if (!(e.indexOf(this._prevChartStyle) > -1 && e.indexOf(t) > -1)) return !0
}
return !1
}, l.prototype.onChartStyleChanged = function() {
this._updateBarFunction(), this.isNeedRestart() && (this.data().clear(), this.model()
.timeScale().scrollToRealtime(!1), this.restart()), this._prevChartStyle = this
.properties().style.value(), this._onStyleChanged.fire(this.properties().style
.value()), this.invalidateBarStylesCache()
}, l.prototype.barFunction = function() {
return this._barFunction
}, l.prototype._updateBarFunction = function() {
var t = "close";
switch (this._properties.style.value()) {
case l.STYLE_LINE:
t = this._properties.lineStyle.priceSource.value();
break;
case l.STYLE_AREA:
t = this._properties.areaStyle.priceSource.value();
break;
case l.STYLE_BASELINE:
t = this._properties.baselineStyle.priceSource.value()
}
this._barFunction = J.barFunction(t)
}, l.prototype.style = function() {
return this.properties().style.value()
}, l.prototype.isJapaneseStyle = function() {
return J.isJapaneseStyle(this.style())
}, l.prototype.onInputChanged = function() {
this.restart()
}, l.prototype.onExtendedHoursChanged = function() {
return this._extendedHoursChanged
}, l.prototype.getSymbolString = function() {
var t, e, i;
return t = T.enabled("pay_attention_to_ticker_not_symbol") && this._symbolInfo ? this
._symbolInfo.ticker : this.actualSymbol(), this.extendedHours.value() && (t = {
symbol: t,
session: "extended"
}), l.SYMBOL_STRING_DATA.hasOwnProperty(this._properties.style.value()) && (e = this
.styleStudyInfo(this.getStyleShortName() + "Style").studyId, i = this
.getInputsProperties(), t = {
symbol: t,
type: e + "!",
inputs: i.state()
}), "string" != typeof t && (t = "=" + JSON.stringify(t)), t
}, l.prototype._getResolvingSymbolString = function() {
return this.getSymbolString()
}, l.prototype.getStyleShortName = function() {
var t = this._properties.style.value();
if (l.STYLE_SHORT_NAMES.hasOwnProperty(t)) return l.STYLE_SHORT_NAMES[t];
throw Error("Missed short name for style " + t)
}, l.prototype.getStyleProperties = function() {
return this._properties[this.getStyleShortName() + "Style"]
}, l.prototype.getInputsProperties = function() {
return this.getStyleProperties().inputs || new n
}, l.prototype.getRealVisibleRange = function() {
var t, e, i = this.model().timeScale().visibleBars();
return null === i ? null : (t = this.data().search(i.firstBar(), N.NearestRight), e =
this.data().search(i.lastBar(), N.NearestLeft), null === t || null === e ?
null : new x(t.index, e.index))
}, l.prototype.firstValue = function() {
var t = this.firstBar();
return null === t ? null : this._barFunction(t)
}, l.prototype.firstBar = function() {
var t, e, i = this.model().timeScale().visibleBars();
return null === i ? null : (t = i.firstBar(), e = this.data().search(t, N.NearestRight),
null !== e ? e.value : null)
}, l.prototype.sessionsStudy = function() {
var t, e, i, o;
if (this._sessionsStudy) return this._sessionsStudy;
for (t = this.model().paneForSource(this), e = t.dataSources(), i = 0; i < e
.length; i++)
if ((o = e[i]) instanceof TradingView.Study && "Sessions" === o.metaInfo().shortId)
return this._sessionsStudy = o, this._sessionsStudy;
return !1
}, l.prototype.clearSessionStudy = function() {
this._sessionsStudy = null
},
l.prototype.createSessStudy = function() {
if (!this.sessionsStudy()) {
var t = $.findStudyMetaInfo(this.model().studiesMetaData(),
"Sessions@tv-basicstudies");
this.model().insertStudy(t, !1, !0), this._onSessionsStudyCreated.fire()
}
}, l.prototype.checkSessStudy = function() {
T.enabled("charting_library_base") || (this.sessionsStudy() || this.createSessStudy(),
this.sessionsStudy().start())
}, l.prototype.isSpread = function() {
return "spread" === this._symbolInfo.type
}, l.prototype.firstSymbol = function() {
return this._symbolInfo ? this._symbolInfo.legs[0] : ""
}, l.prototype.firstShortName = function() {
return R.ticker(this.firstSymbol())
}, l.prototype.onSessionsStudyCreated = function() {
return this._onSessionsStudyCreated
}, l.prototype.loadDataTo = function(t) {
this._turnaround = "s" + ++this._turnaroundCounter;
var e = this._properties.interval.value();
e = this._generateTimeframe(e, t), this._chartApi.modifySeries(this._seriesId, this
._turnaround, this._symbolId, e, this._handler)
}, l.prototype.checkInterval = function() {
if (this._symbolInfo && (E.kind(this.interval()) !== E.MINUTES || this._symbolInfo
.has_intraday || this.requestingIntradayWhenNotSupported.fire(), this
._symbolInfo.hasOwnProperty("supported_resolutions"))) {
var t = E.normalize(this._properties.interval.value()); - 1 === this._symbolInfo
.supported_resolutions.indexOf(t) && this.requestingResolutionWhenNotSupported
.fire(this._symbolInfo.supported_resolutions[0])
}
}, l.prototype.priceScale = function() {
return this.m_priceScale
}, l.prototype.setPriceScale = function(t) {
this.m_priceScale !== t && (this.m_priceScale = t, this.priceScaleChanged.fire(t))
}, l.prototype.setGotoDateResult = function(t) {
this._gotoDateResult = t
}, l.prototype.gotoDateResult = function() {
return this._gotoDateResult
}, l.prototype.syncModel = function() {
var t, e;
if (!this._syncModel) {
if (t = this.symbolInfo(), e = this.interval(), !t || !e) return null;
this._syncModel = new H(t, e)
}
return this._syncModel
};
l.prototype.turnaround = function() {
return this._turnaround
}, l.prototype.getStylesPropertyPage = function() {
return T.enabled("show_chart_property_page") ? C.ChartStylesPropertyPage : null
}, l.prototype.getSourceIcon = function() {
return {
type: "svg",
svgCode: X[this.properties().style.value()]
}
}, l.prototype.isStyleSupported = function(t) {
return !0
}, l.prototype._onBeforeModifySeries = function(t, e) {}, l.prototype
._isExtendedHoursAllowed = function() {
return this._symbolInfo && -1 !== ["stock", "index", "futures"].indexOf(this._symbolInfo
.type)
}, l.prototype.destroy = function() {
this._unsubscribeQuoteSession()
}, TradingView.Series = l, t.exports = l
}).call(e, i(10), i(17), i(25), i(73))
}, , , , , , , function(t, e, i) {
"use strict";
function o(t, e) {
var o, n, r, a, l, c, h, u, d;
if (!t) throw Error("No studies metainfo");
if (o = i(301), this._studiesMetainfo = t, !e) throw Error("No studies migrations");
for (this._studiesMigrations = e, this._migrations = {}, n = 0; n < this._studiesMigrations
.length; n++)
for (r = this._studiesMigrations[n], a = r.versFrom, l = r.versTo, c = 0; c < r.studyMigrations
.length; c++) h = r.studyMigrations[c], u = h.studyId, 0 !== h.rules.length ? (d = u in this
._migrations ? this._migrations[u] : new o(u), d.addMigration(a, l, h.rules),
this._migrations[u] = d) : s.logError(
"Study Migration should have at least one convertion rule");
this._clientMigrations = [function(t, e) {
var i, o, n, r, s;
if (0 === this._studiesMetainfo.length || !t.isTVScript || t.version >= 22) return e;
for (i = {}, o = 0, n = 0; void 0 !== (r = e[n]);) s = e[r.id], r.isFake && (r.id =
"in_" + o++), i[n] = r, i[r.id] = s, n++;
return i
}]
}
var n = i(9).assert,
r = i(300).Version,
s = i(7).getLogger("Chart.Study.Versioning"),
a = i(600),
l = i(33);
o.prototype.updateMetaInfo = function(t) {
var e, i, o;
if (!t) return t;
for (n(!t.isTVScript,
"This method should update only built-in java indicators metaInfo. For Pine indicators use updateMetaInfoAsync"
), e = null, i = this._studiesMetainfo, o = 0; o < i.length; o++)
if (i[o].id === t.id) {
e = i[o];
break
} return TradingView.clone(e)
}, o.prototype.updateMetaInfoAsync = function(t, e) {
var i, o, n, r, s, a = $.Deferred(),
c = a.promise();
if (!t) return a.reject("No old metaInfo was given"), c;
if (e) return a.resolve(null), c;
if (i = t.isTVScript && t.scriptIdPart && TVScript.pineType(t.scriptIdPart) === TVScript
.PineType.Addon, o = l.versionOf(t), t.isTVScript && !t.pine && !i && o < l
.VERSION_PINE_PROTECT_TV_4164);
else if ((t.isTVScript || t.isTVScriptStubToCompile) && t.pine && !i);
else {
for (n = null, r = this._studiesMetainfo, s = 0; s < r.length; s++)
if (r[s].id === t.id) {
n = r[s];
break
} n ? a.resolve(TradingView.clone(n)) : a.resolve(null)
}
return c
}, o.prototype.updateStudyInputs = function(t, e, i, o, n) {
var a, l, c, h, u, d, p = TradingView.clone(o);
if (t in this._migrations && (a = r.parse(e), l = r.parse(i), c = this._migrations[t], h = c
.updateInputs(a, l, p), p = h), null == n) return p;
for (u in n) u in p || (p[u] = n[u]);
for (u in p) u in n || (d = p[u], s.logWarn("Extra input detected, studyId=" + t +
", versionFrom=" + e + ", inputId=" + u + ", inputValue=" + d +
", removing it and continue..."), delete p[u]);
return p
}, o.prototype.updateStudyState = function(t, e, i) {
var o, n, r, a, c, h, u, d, p, _, f, m, g, v;
if (null == t || null == e || null == i) return t;
for (t = TradingView.clone(t), o = e.isTVScript || !!e.pine, o || e.version === i.version || (
n = i && i.defaults.inputs, r = this.updateStudyInputs(e.id, e.version, i.version, t
.inputs, n), t.inputs = r), a = 0; a < this._clientMigrations.length; ++a) r = this
._clientMigrations[a].call(this, e, t.inputs), Object.keys(r).length === Object.keys(t
.inputs).length ? t.inputs = r : s.logWarn(
"StudyVersioning._clientMigrations application returned bad result. Skipping it...");
if (c = l.versionOf(e), e.isTVScript && e.TVScriptSourceCode && c >= 12 && c <= 26) {
for (h = {}, a = 0; a < e.plots.length; ++a) u = e.plots[a], d = i.plots[a], h[u.id] = d.id;
for (p = Object.keys(t.styles), a = 0; a < p.length; ++a) _ = p[a], f = t.styles[_],
delete t.styles[_], m = h[_], t.styles[m] = f;
for (g = Object.keys(t.plots), a = 0; a < g.length; ++a) v = g[a], _ = t.plots[v].id, t
.plots[v].id = h[_]
}
return t
}, o.prototype.patchPointsBasedStudyState = function(t) {
return o._fixInputsMaxValue(t.state, t.metaInfo), t
}, o.prototype.patchPointsBasedStudyData = function(t, e) {
if (!a.isProd()) return e;
if (!t || !e) return e;
var i = TradingView.clone(e);
return "VbPFixed@tv-volumebyprice" === t.id && t.version && t.version <= 4 && o
._patchOldVolumeProfiles(0, i), i
}, o.prototype.patchStudyData = function(t, e, i, n) {
var r, s, c, h, u, d, p;
if (!a.isProd()) return {
data: e,
nsData: i,
indexes: n
};
if (r = TradingView.clone(e),
s = TradingView.clone(i), c = TradingView.clone(n), "VbPVisible@tv-volumebyprice" === t
.id && t.version && t.version <= 4 && o._patchOldVolumeProfiles(0, r.graphics),
"VbPSessions@tv-volumebyprice" === t.id && t.version && t.version <= 4 && o
._patchOldVolumeProfiles(0, r.graphics), h = l.versionOf(t), t.isTVScript && t
.TVScriptSourceCode && h >= 12 && h <= 26)
for (u = r.columns, r.columns = [], d = 0; d < u.length; ++d) p = "plot_" + d, r.columns
.push(p);
return {
data: r,
nsData: s,
indexes: c
}
}, o._patchOldVolumeProfiles = function(t, e) {
var i, o = e.hhists[t].data,
n = [];
for (i in o) n = n.concat(o[i]);
e.hhists[0].data = n
}, o._fixInputsOrder = function(t, e) {
var i, n, r, s, a = l.getOrderedInputIds(e),
c = o.splitInputs(t.inputs),
h = c.arr,
u = c.obj,
d = TradingView.merge({}, u);
for (i = 0; i < a.length; ++i) n = a[i], null !== (r = o.findInputKeyById(h, n)) && (s = h[r],
d[i] = s);
t.inputs = d
}, o.INPUT_MAX_VALUE = 1e12, o._verifyInputsMaxValue = function(t) {
var e, i, n = o.INPUT_MAX_VALUE;
if (t.inputs)
for (e = 0; e < t.inputs.length; e++) i = t.inputs[e], "integer" === i.type && i.max && i
.max > n && s.logWarn("Bad integer input max value in metaInfo id=" + t.id + " title=" +
t.description)
}, o._fixInputsMaxValue = function(t, e) {
var i, n, r, s, a, l;
if (!TradingView.isAbsent(e)) {
if (i = o.INPUT_MAX_VALUE, e.inputs)
for (n = 0; n < e.inputs.length; n++) r = e.inputs[n], "integer" === r.type && r.max &&
r.max > i && (r.max = i);
if (t && t.inputs) {
s = o.splitInputs(t.inputs), a = s.arr;
for (l in a) r = a[l], "integer" === r.type && r.max && r.max > i && (r.max = i);
t.inputs = TradingView.merge(s.obj, s.arr)
}
}
}, o.prototype.patchPropsStateAndMetaInfo = function(t, e, i) {
var n, r, s, a, c, h, u, d, p, _, f, m, g, v, y, b, S, w;
if ("Script$BOOKER" !== e.productId || e.alerts || delete t.alerts, o._fixInputsOrder(t, e), o
._fixInputsMaxValue(t, e), n = o.splitInputs(t.inputs), t.inputs = n.obj, l.versionOf(e) < l
.METAINFO_FORMAT_VERSION_SOS_V2 && e.isChildStudy && (t.isChildStudy = e.isChildStudy), r =
60, e.isTVScript && e.version < r && ("Script$TV_EARNINGS@tv-scripting" !== e.id &&
"Script$TV_DIVIDENDS@tv-scripting" !== e.id && "Script$TV_SPLITS@tv-scripting" !== e
.id || delete e.TVScriptSourceCode), "Volume" !== e.id && "Volume@tv-basicstudies" !== e
.id || 0 !== e.inputs.length || (e.inputs = [{
id: "length",
type: "integer",
defval: 20,
min: 1,
max: 1e3
}], e.plots.push({
id: "vol_ma",
type: "line"
})), "Volume@tv-basicstudies" === e.id && e.version && e.version <= 46 && (t.styles.vol
.transparency = t.transparency || 87), "PivotPointsStandard@tv-basicstudies" === e.id &&
(0 === e.inputs.length ? (t.inputs = {
kind: "Traditional",
showHistoricalPivots: !0
}, e.inputs = [{
defval: "Traditional",
id: "kind",
type: "text",
options: ["Traditional", "Fibonacci", "Woodie", "Classic", "DeMark",
"Camarilla"
]
}, {
id: "showHistoricalPivots",
type: "bool",
defval: !0
}]) : 1 === e.inputs.length && (t.inputs = {
kind: "Traditional"
}, e.inputs = [{
defval: "Traditional",
id: "kind",
type: "text",
options: ["Traditional", "Fibonacci", "Woodie", "Classic", "DeMark",
"Camarilla"
]
}, {
id: "showHistoricalPivots",
type: "bool",
defval: !0
}]), void 0 === t._hardCodedDefaultsVersion && (t._hardCodedDefaultsVersion = 1, s = t
.color, delete t.color, t.levelsStyle = {
colors: {
P: s,
"S1/R1": s,
"S2/R2": s,
"S3/R3": s,
"S4/R4": s,
"S5/R5": s
}
})), "CMF" === e.shortId && 2 === e.inputs.length && (t.inputs = {
length: t.inputs["length fast"]
}, e.inputs = e.inputs.splice(0, 1), e.inputs[0].id = "length"),
e.defaults && void 0 === e.defaults.precision && (-1 !== ["Volume@tv-basicstudies",
"VbPVisible@tv-volumebyprice", "VbPSessions@tv-volumebyprice"
].indexOf(e.id) ? e.defaults.precision = 0 : e.defaults.precision = 4), a = 60, e.version <
a)
for (c = ["TV_DIVIDENDS", "TV_SPLITS", "TV_EARNINGS"], h = 6, u = 0; u < c.length; u++) e.id
.startsWith("Script$" + c[u] + "@tv-scripting") && (e.fullId = "ESD" + e.fullId
.substring(h), e.id = "ESD" + e.id.substring(h), e.name = "ESD" + e.name.substring(
h), e.shortId = "ESD" + e.shortId.substring(h), e.productId = "ESD" + e
.productId.substring(h));
if (l.versionOf(e) < l.VERSION_PINE_PROTECT_TV_4164 && (d = {
"StrategyScript$STD;Consecutive%1Ups/Downs%1Strategy": {
pineId: "STD;Consecutive%1Ups%1Downs%1Strategy",
className: "StrategyScript"
},
Script$EDGR_NET_INCOME_FROM_CONTINUING_OPERATIONS_APPLICABLE_TO_COMMON_V2: {
pineId: "Script$EDGR_NET_INCOME_FROM_CONTINUING_OPS_APPLICABLE_TO_COMMON_V2",
className: "Script"
}
}, e.shortId in d && (p = d[e.shortId].className + "$" + d[e.shortId].pineId, _ = {
scriptIdPart: d[e.shortId].pineId,
fullId: e.fullId.replace(e.shortId, p),
id: e.id.replace(e.shortId, p),
name: e.name.replace(e.shortId, p),
shortId: p
}, TradingView.merge(e, _), TradingView.merge(t, _)), f = TradingView.StudyMetaInfo
.cutScriptIdPart(e.fullId), (m = f.match(/^(USER)(_\d+)(;)(.*)$/)) && (g = m[0], v = m[
1] + m[3] + m[2] + m[4], _ = {
scriptIdPart: v,
fullId: e.fullId.replace(g, v),
id: e.id.replace(g, v),
name: e.name.replace(g, v),
shortId: e.shortId.replace(g, v)
}, TradingView.merge(e, _), TradingView.merge(t, _))), "MA" === e.id) {
switch (y = new l({
id: "MAExp",
properties: [{
id: "is_price_study",
type: "bool",
value: "true"
}],
inputs: [{
id: "length",
type: "integer",
defval: 20,
min: 1,
max: 500
}, {
id: "source",
type: "text",
defval: "close",
options: ["open", "high", "low", "close"]
}],
plots: [{
id: "MovAvgExp",
type: "line"
}],
palettes: {}
}), b = new l({
id: "MASimple",
properties: [{
id: "is_price_study",
type: "bool",
value: "true"
}],
inputs: [{
id: "length",
type: "integer",
defval: 20,
min: 1,
max: 500
}, {
id: "source",
type: "text",
defval: "close",
options: ["open", "high", "low", "close"]
}],
plots: [{
id: "MovAvgSimple",
type: "line"
}],
palettes: {}
}), S = new l({
id: "MAVolumeWeighted",
properties: [{
id: "is_price_study",
type: "bool",
value: "true"
}],
inputs: [{
id: "length",
type: "integer",
defval: 20,
min: 1,
max: 500
}, {
id: "source",
type: "text",
defval: "close",
options: ["open", "high", "low", "close"]
}],
plots: [{
id: "MovAvgVolumeWeighted",
type: "line"
}],
palettes: {}
}), w = new l({
id: "MAWeighted",
properties: [{
id: "is_price_study",
type: "bool",
value: "true"
}],
inputs: [{
id: "length",
type: "integer",
defval: 20,
min: 1,
max: 500
}, {
id: "source",
type: "text",
defval: "close",
options: ["open", "high", "low", "close"]
}],
plots: [{
id: "MovAvgWeighted",
type: "line"
}],
palettes: {}
}), t.inputs.type) {
case "exp":
e = y;
break;
case "simple":
e = b;
break;
case "weighted":
e = w;
break;
case "volume weighted":
e = S
}
t.styles[e.plots[0].id] = t.styles.MovAvg, delete t.styles.MovAvg, delete t.inputs.type
}
return i.oldShowStudyLastValueProperty && (t.oldShowLastValue = t.showLastValue), delete t
.showLastValue, delete t.showStudyArguments, {
propsState: t,
metaInfo: e
}
}, o.isVersionTesting = function(t) {
var e;
return !!t && (t = "" + t, e = RegExp("\\d+.\\d+"), e.exec(t) === t)
}, o.isVersionHead = function(t) {
var e;
return !!t && (t = "" + t,
e = RegExp("\\d+"), e.exec(t) === t)
}, o.mergeInputs = function(t, e) {
o.mergeInputsArrPart(t, e), o.mergeInputsObjPart(t, e)
}, o.mergeInputsArrPart = function(t, e) {
var i, n, r = o.splitInputs(e);
for (i in r.arr) n = o.findInputKeyById(t, r.arr[i].id), n ? TradingView.merge(t[n], r.arr[i]) :
o.appendInputInfoToArr(t, r.arr[i])
}, o.mergeInputsObjPart = function(t, e) {
var i = o.splitInputs(e);
TradingView.merge(t, i.obj)
}, o.appendInputInfoToArr = function(t, e) {
var i, o, n = -1;
for (i in t) o = parseInt(i, 10), isNumber(o) && o > n && (n = o);
t[n + 1] = e
}, o.splitInputs = function(t) {
var e, i = {},
o = {};
for (e in t) isNumber(parseInt(e, 10)) ? i[e] = t[e] : o[e] = t[e];
return {
arr: i,
obj: o
}
}, o.findInputKeyById = function(t, e) {
var i, o = null;
for (i in t)
if (isNumber(parseInt(i, 10)) && t[i].id === e) {
o = i;
break
} return o
}, o.getInputKeyById = function(t, e) {
var i = o.findInputKeyById(t, e);
if (!i) throw Error("Cannot find input with id: " + e);
return i
}, t.exports = o
}, function(t, e, i) {
"use strict";
function o() {
v.fire()
}
var n, r, s, a, l, c, h, u, d, p, _, f, m, g, v, y;
Object.defineProperty(e, "__esModule", {
value: !0
}), n = i(0), i(43), r = i(2), s = i(39), a = i(83), l = i(14), c = i(10), h = i(374), u = i(718),
d = i(719),
function(t) {
t[t.ToLeft = 0] = "ToLeft", t[t.ToRight = 1] = "ToRight", t[t.None = 2] = "None"
}(p = e.DirectionHorz || (e.DirectionHorz = {})),
function(t) {
t[t.ToTop = 0] = "ToTop", t[t.ToBottom = 1] = "ToBottom", t[t.None = 2] = "None"
}(_ = e.DirectionVert || (e.DirectionVert = {})), f = p.ToRight, m = _.ToBottom, g = 5, v = new c, e
.globalClosePopupMenu = o, y = function(t) {
function e(e) {
var i = t.call(this, e) || this;
return i._handleClose = function() {
i.props.onClose()
}, i._handleClickOutside = function(t) {
var e = i.props,
o = e.closeOnClickOutside,
n = e.onClickOutside,
r = e.doNotCloseOn;
n && n(t), !o || void 0 !== r && s.findDOMNode(r).contains(t.target) || i
._handleClose()
}, i._handleMeasure = function(t) {
var e, o, n = t.height,
r = t.width,
s = i.props,
a = s.directionHorz,
l = void 0 === a ? f : a,
c = s.directionVert,
h = void 0 === c ? m : c,
u = s.position,
d = s.positionType,
v = window.innerHeight,
y = window.innerWidth,
b = v - 2 * g,
S = "function" == typeof u ? u(r, n) : u;
"fixed" === d ? (e = Math.max(g, S.x - Math.max(0, r - (l === p.ToLeft ? 0 : y - S
.x - g))), o = Math.max(g, S.y - Math.max(0, n - (h === _.ToTop ? 0 :
v - S.y - g)))) : (e = S.x - (l === p.ToLeft ? r : 0), o = S.y - (h === _
.ToTop ? n : 0)), i.setState({
appearingContentHeight: n,
appearingDirectionHorz: l,
appearingDirectionVert: n > b ? _.None : h,
appearingMenuHeight: n >= b ? b : void 0,
appearingMenuWidth: S.overrideWidth,
appearingPosition: {
x: e,
y: o
},
isMeasureValid: !0
})
}, i.state = {
appearingContentHeight: 0
}, i
}
return n.__extends(e, t), e.prototype.componentWillReceiveProps = function(t) {
this.props.isOpened && !t.isOpened && this.setState({
isMeasureValid: void 0
})
}, e.prototype.componentDidUpdate = function(t, e) {
t.isOpened && !this.props.isOpened && v.unsubscribe(this, this._handleClose), !t
.isOpened && this.props.isOpened && v.subscribe(this, this._handleClose)
}, e.prototype.componentWillUnmount = function() {
v.unsubscribe(this, this._handleClose)
}, e.prototype.render = function() {
var t, e = this.props,
i = e.children,
o = e.isOpened,
n = e.minWidth,
s = e.positionType,
c = e.theme,
u = void 0 === c ? d : c,
p = e.className,
_ = this.state,
f = _.appearingMenuHeight,
m = _.appearingMenuWidth,
g = _.appearingPosition,
v = _.isMeasureValid;
return o ? this._wrapOrNot(r.createElement(h.OutsideEvent, {
handler: this._handleClickOutside,
mouseDown: !0,
touchStart: !0,
ctor: "div"
}, r.createElement("div", {
className: l(p, u.menuWrap, (t = {}, t[u.isMeasuring] = !v, t)),
style: {
height: f,
left: g && g.x,
minWidth: n,
position: s,
top: g && g.y,
width: m
}
}, r.createElement("div", {
className: u.scrollWrap
}, r.createElement(a, {
onMeasure: this._handleMeasure,
shouldMeasure: !v,
whitelist: ["height", "width"]
}, r.createElement("div", {
className: u.menuBox
}, i)))))) : null
}, e.prototype._wrapOrNot = function(t) {
return "fixed" === this.props.positionType ? r.createElement(u.OutsideRenderWrap, null,
t) : t
}, e.defaultProps = {
closeOnClickOutside: !0,
directionHorz: f,
directionVert: m,
positionType: "fixed"
}, e
}(r.PureComponent), e.PopupMenu = y
}, function(t, e, i) {
"use strict";
function o(t, e) {
return t < e
}
function n(t, e, i, o, n) {
var r, s, a;
for (void 0 === o && (o = 0), void 0 === n && (n = t.length), r = n - o; 0 < r;) s = r >> 1, a = o +
s, i(t[a], e) ? (o = a + 1, r -= s + 1) : r = s;
return o
}
function r(t, e, i, r) {
return void 0 === i && (i = 0), void 0 === r && (r = t.length), n(t, e, o, i, r)
}
function s(t, e, i, o, n) {
var r, s, a;
for (void 0 === o && (o = 0), void 0 === n && (n = t.length), r = n - o; 0 < r;) s = r >> 1, a = o +
s, i(e, t[a]) ? r = s : (o = a + 1, r -= s + 1);
return o
}
function a(t, e, i, n) {
return void 0 === i && (i = 0), void 0 === n && (n = t.length), s(t, e, o, i, n)
}
function l(t, e, i, o, n) {
var r, s;
for (void 0 === o && (o = 0), void 0 === n && (n = t.length - 1); o <= n;)
if (r = o + n >>> 1, (s = i(t[r], e)) > 0) o = r + 1;
else {
if (!(s < 0)) return r;
n = r - 1
} return -1
}
Object.defineProperty(e, "__esModule", {
value: !0
}), e.lowerbound = n, e.lowerbound_int = r, e.upperbound = s, e.upperbound_int = a, e.bSearch = l
}, function(t, e, i) {
"use strict";
function o(t, e, i, o) {
var n, r;
for (this.m_study = t, this.m_series = e, this.m_model = i, this._plotName = o, this.m_items = [],
this._invalidated = !0, this._isMarkersEnabled = j.enabled("source_selection_markers"), n = this
.m_study.metaInfo().plots, this._colorer = null, this._palette = null, this._paletterProps =
null, this._plotIndex = 0, r = 0; r < n.length; r++) n[r].id === this._plotName && (this
._plotIndex = r), this.m_study.isSelfColorerPlot(r) && n[r].target === this._plotName && (
this._colorer = r, this._palette = this.m_study.metaInfo().palettes[n[r].palette], this
._paletterProps = this.m_study.properties().palettes[n[r].palette])
}
function n(t, e, i, o) {
var n, r;
for (this._study = t, this._series = e, this._model = i, this._plotName = o, this._items = [], this
._invalidated = !0, this._isMarkersEnabled = j.enabled("source_selection_markers"), n = this
._study.metaInfo().plots, r = 0; r < n.length; r++) n[r].id === this._plotName && (this
._plotIndex = r, d(this._study.isBgColorerPlot(r), "Plot '" + this._plotName +
"' is not a background colorer!"))
}
function r(t, e, i, o) {
var n, r;
for (this.m_study = t, this.m_series = e, this.m_model = i, this.m_plotName = o, this.m_items = [],
this.m_invalidated = !0, this._isMarkersEnabled = j.enabled("source_selection_markers"), this
.m_selectionData = null, this.m_plotIndex = null, n = this.m_study.metaInfo().plots, r = 0; r <
n.length; r++)
if (n[r].id === this.m_plotName) {
this.m_plotIndex = r;
break
} for (n = this.m_study.metaInfo().plots, this._colorer = null, this._textColorer = null, this
._palette = null, this._textPalette = null, this._paletterProps = null, this
._textPaletterProps = null, this._plotIndex = 0,
r = 0; r < n.length; r++) n[r].id === this.m_plotName && (this._plotIndex = r), this.m_study
.isSelfColorerPlot(r) && n[r].target === this.m_plotName && (this._colorer = r, this._palette =
this.m_study.metaInfo().palettes[n[r].palette], this._paletterProps = this.m_study
.properties().palettes[n[r].palette]), this.m_study.isTextColorerPlot(r) && n[r].target ===
this.m_plotName && (this._textColorer = r, this._textPalette = this.m_study.metaInfo().palettes[
n[r].palette], this._textPaletterProps = this.m_study.properties().palettes[n[r]
.palette])
}
function s(t, e, i, o) {
r.call(this, t, e, i, o)
}
function a(t, e, i, o) {
s.call(this, t, e, i, o)
}
function l(t, e, i, o) {
r.call(this, t, e, i, o), this._maxAbsValue = 0
}
function c(t, e, i, o) {
var n, r;
for (this.m_study = t, this.m_series = e, this.m_model = i, this.m_plotName = o, this.m_bars = [],
this._invalidated = !0, this._isMarkersEnabled = j.enabled("source_selection_markers"), n = this
.m_study.metaInfo().plots, this._colorer = null, this._palette = null, this._paletterProps =
null, this._ohlcPlotIndexes = {}, r = 0; r < n.length; r++) n[r].target === this.m_plotName && (
this.m_study.isOHLCOpenPlot(r) && (this._ohlcPlotIndexes[TradingView.OPEN_PLOT] = r), this
.m_study.isOHLCHighPlot(r) && (this._ohlcPlotIndexes[TradingView.HIGH_PLOT] = r), this
.m_study.isOHLCLowPlot(r) && (this._ohlcPlotIndexes[TradingView.LOW_PLOT] = r), this.m_study
.isOHLCClosePlot(r) && (this._ohlcPlotIndexes[TradingView.CLOSE_PLOT] = r), this.m_study
.isOHLCColorerPlot(r) && (this._colorer = r, this._palette = this.m_study.metaInfo()
.palettes[n[r].palette], this._paletterProps = this.m_study.properties().palettes[n[r]
.palette]))
}
function h(t, e, i, o) {
c.call(this, t, e, i, o)
}
function u(t, e, i, o) {
c.call(this, t, e, i, o)
}
var d = i(9).assert,
p = i(8).Point,
_ = i(32),
f = _.rgbToHsl,
m = _.hslToRgb,
g = _.rgbToHexString,
v = _.parseRgb,
y = _.parseRgba,
b = i(11),
S = i(131),
w = S.SelectionRenderer,
T = S.SelectionRendererArrowsUpDown,
C = i(325).PaneRendererBars,
x = i(789).PaneRendererHistogram,
P = i(790).PaneRendererColumns,
L = i(176).PaneRendererLine,
I = i(326).PaneRendererArea,
k = i(247).PaneRendererCandles,
A = i(791).PaneRendererCross,
M = i(792).PaneRendererCircles,
E = i(218).PaneRendererArrowsUpDownItem,
D = i(218).PaneRendererArrowsUpDown,
V = i(399).PaneRendererUnicodeChar,
O = i(793).PaneRendererBackground,
R = i(794).PaneRendererStepLine,
B = i(327),
z = i(53).CompositeRenderer,
F = i(328),
N = i(54).clamp,
W = i(111),
$ = i(795),
H = i(30),
U = i(19).PlotRowSearchMode,
j = i(5);
i(796), i(797), i(798), i(799), i(800), i(801), i(802), i(803), i(804), o.isIndexValid = function(t,
e) {
return null !== t && t >= 0 && t < e._length()
}, o.prototype.items = function() {
return this.m_items
}, o.prototype.update = function() {
this._invalidated = !0
}, o.prototype._updateImpl = function() {
var t, e, i, n, r, s, a, l, c, h, u, d, _, f, m, g, v, y, S, w, T, C, x, P, L, I, k;
if (this._histogramBase = null, this.m_items = [], !(this.m_model.timeScale().isEmpty() || this
.m_study.priceScale().isEmpty() || null === (t = this.m_model.timeScale()
.visibleBars()) || (e = this.m_series.nearestIndex(t.firstBar(), U.NearestRight),
i = this
.m_series.nearestIndex(t.lastBar(), U.NearestLeft), n = this.m_study.offset(this
._plotName), n > 0 ? (e -= n, i += n) : (e += n, i -= n), (r = this.m_study
.getMinFirstBarIndexForPlot(this._plotName)) > i))) {
if (e = Math.max(r, e),
s = this.m_study.properties().styles[this._plotName], a = s.plottype.value(), l = [W
.PlotType.Line, W.PlotType.Area, W.PlotType.Circles, W.PlotType.Cross
].indexOf(a) >= 0, c = this.m_study.data(), h = this.m_study.firstValue(), l && c
._length() > 0) {
for (u = c._bsearch(e); o.isIndexValid(u, c) && void 0 === c._valueAt(u)[this
._plotIndex + 1];) u -= 1;
for (e = o.isIndexValid(u, c) ? c._indexAt(u) : e, d = c._bsearch(i); o.isIndexValid(d,
c) && void 0 === c._valueAt(d)[this._plotIndex + 1];) d += 1;
i = o.isIndexValid(d, c) ? c._indexAt(d) : i
}
if (_ = c.range(e, i), f = this.m_study.priceScale(), m = f.properties().percentage.value(),
g = N(this._getTranspValue(), 0, 100), v = {}, y = function(t, e) {
var i = t + "@" + e;
return v[i] || (this._plotName && "vol" === this._plotName ? v[i] = H.generateColor(
t, e) : v[i] = H.generateColor(t, e, !0)), v[i]
}.bind(this), _.each(function(t, e) {
var i, o, r, a, c, u, d, _, f;
return t += n, t = Math.floor(t), i = e[this._plotIndex + 1], o = void 0 ===
i || null === i, i = o ? NaN : i, m && !o && (i = 100 * (i - h) / h), (!l ||
!o) && (r = new p(t, i), a = void 0 !== e[this._colorer + 1] || this
._palette && this._palette.addDefaultColor, this._colorer && a && (i =
e[this._colorer + 1], r.style = {}, null != i ? (c = this._palette
.valToIndex ? this._palette.valToIndex[i] : i, u = this
._paletterProps.colors[c], d = u.color.value(), r.style.color =
H.isHexColor(d) ? y(d, g) : d) : (d = s.color.value(), r.style
.color = y(d, 100)), _ = void 0 !== c ? u.width.value() : s
.linewidth.value(), f = void 0 !== c ? u.style.value() : s.linestyle
.value(), r.style.width = _, r.style.style = f), this.m_items.push(
r), !1)
}.bind(this)), f.pricesToCoordinates(this.m_items), this.m_model.timeScale()
.indexesToCoordinates(this.m_items), s.histogramBase && (this._histogramBase = this
.m_study.priceScale().priceToCoordinate(s.histogramBase.value())), this.m_study ===
this.m_model.selectedSource())
for (S = F(e, i), this._selectionData = {
points: []
}, this._selectionData.hittestResult = b.REGULAR, w = 0; w < S.length; w++) T = S[
w], C = this.m_study.data().valueAt(T), T += n, null !== C && (x = C[this
._plotIndex + 1], f.isPercentage() && (x = 100 * (x - h) / h), P = this
.m_model.timeScale().indexToCoordinate(Math.floor(T)), L = this.m_study
.priceScale().priceToCoordinate(x), this._selectionData.points.push(new p(P, L))
);
I = s, this._lineColor = H.generateColor(I.color.value(), g), this._lineWidth = I.linewidth
.value(), k = I.color.value(), this._colorer && null != (x = this._paletterProps.colors[
0]) && (k = x.color.value(), this._lineWidth = x.width.value(), this._lineColor = H
.generateColor(x.color.value(), g)), this._color2 = H.generateColor(k, g), this
._color1 = H.generateColor(o.addHueForColor(k), g)
}
}, o.addHueForColor = $(function(t) {
var e = f(v(t)),
i = e[0] + .05;
return e[0] = i - Math.floor(i), g(m(e))
}), o.prototype._getTranspValue = function() {
var t = this.m_study.properties(),
e = t.styles[this._plotName],
i = 0,
o = 0,
n = this.m_study.metaInfo();
return "Volume@tv-basicstudies" === n.id && n.version <= 46 && "transparency" in t ? (i = t
.transparency.value(), i = isNumber(i) ? i : o) : (e.transparency && (i = e.transparency
.value(), i = isNumber(i) ? i : o), i)
}, o.prototype.renderer = function() {
var t, e, i, o, n, r = this.m_study.properties().styles[this._plotName];
if (r.visible.value() && this.m_study.priceScale()) {
switch (this._invalidated && (this._updateImpl(), this._invalidated = !1), t = {},
t.barSpacing = this.m_model.timeScale().barSpacing(), t.items = this.m_items, t
.histogramBase = this._histogramBase ? this._histogramBase : this.m_study.priceScale()
.height(), t.lineIndex = 0, t.lineStyle = r.linestyle.value(), t.lineColor = this
._lineColor, t.lineWidth = this._lineWidth, t.lineWidth = isNumber(t.lineWidth) ? t
.lineWidth : 1, t.color1 = this._color1, t.color2 = this._color2, t.bottom = t
.histogramBase, this._colorer || (t.simpleMode = !0), e = new z, i = !!r.joinPoints && r
.joinPoints.value(), r.plottype.value()) {
case W.PlotType.Line:
case W.PlotType.LineWithBreaks:
e.append(new L(t));
break;
case W.PlotType.Area:
case W.PlotType.AreaWithBreaks:
e.append(new I(t));
break;
case W.PlotType.Histogram:
e.append(new x(t));
break;
case W.PlotType.Columns:
e.append(new P(t));
break;
case W.PlotType.Cross:
e.append(new A(t)), i && (o = TradingView.merge({}, t), o.lineWidth = 1, o
.forceLineWidth = !0, e.append(new L(o)));
break;
case W.PlotType.Circles:
e.append(new M(t)), i && (o = TradingView.merge({}, t), o.lineWidth = 1, o
.ignorePaletteLineWidth = !0, e.append(new L(o)));
break;
case W.PlotType.StepLine:
n = new R, n.setData(t), e.append(n);
break;
default:
e.append(new L(t))
}
return this.m_study === this.m_model.selectedSource() && this._isMarkersEnabled && e.append(
new w(this._selectionData)), e
}
}, n.prototype.items = function() {
return this._items
}, n.prototype.update = function() {
this._invalidated = !0
}, n.prototype._scalesReady = function() {
var t = this._model.timeScale(),
e = this._study.priceScale();
return t && e && !t.isEmpty() && !e.isEmpty()
}, n.prototype._getTranspValue = function() {
var t = this._study.properties(),
e = t.styles[this._plotName],
i = 0;
return e.transparency && (i = e.transparency.value(), i = isNumber(i) ? i : 40), i
}, n.prototype._updateImpl = function() {
var t, e, i, o, n, r, s, a, l, c, h, u, _;
this._items = [], d(this._scalesReady(), "Scales must be ready!"), null !== (t = this._model
.timeScale().visibleBars()) && (e = this._study.metaInfo().plots, i = e[this._plotIndex]
.palette, o = this._study.properties().palettes[i], n = o.colors, r = this._study
.metaInfo().palettes[i], s = this._getTranspValue(), a = this._series.nearestIndex(t
.firstBar(), U.NearestRight), l = this._series.nearestIndex(t.lastBar(), U
.NearestLeft), c = this._study.offset(this._plotName), c > 0 ? (a -= c, l += c) : (
a += c, l -= c), (h = this._study.getMinFirstBarIndexForPlot(this._plotName)) > l ||
(a = Math.max(h, a), u = this._study.data(), _ = u.range(a, l), _.each(function(t, e) {
var i, o, a, l;
return t += c, i = e[this._plotIndex + 1], o = new p(Math.floor(t) - .5),
a = isNumber(s) ? s : 50, a = Math.min(a, 100), a = Math.max(a, 0),
null != i ? (l = r.valToIndex ? r.valToIndex[i] : i, o.color = H
.generateColor(n[l].color.value(), a)) : o.color = null, this._items
.push(o), !1
}.bind(this)), this._model.timeScale().indexesToCoordinates(this._items)))
}, n.prototype.renderer = function() {
var t, e;
if (this._study.properties().styles[this._plotName].visible && this._study.properties().styles[
this._plotName].visible.value() && this._scalesReady()) return this._invalidated && (
this._updateImpl(), this._invalidated = !1), t = {
items: this._items,
y: 0,
h: this._study.priceScale().height(),
w: Math.ceil(this._model.timeScale().barSpacing())
}, e = new z, e.append(new O(t)), e
}, r.prototype.items = function() {
return this.m_items
},
r.prototype.update = function() {
this.m_invalidated = !0
}, r.prototype._scalesReady = function() {
var t = this.m_model.timeScale(),
e = this.m_study.priceScale();
return t && e && !t.isEmpty() && !e.isEmpty()
}, r.prototype._updateImpl = function() {
var t, e, i, o, n, r, s, a, l, c, h, u, d, p, _, f, m, g;
this.m_items = [], this._scalesReady() && (t = this.m_model.timeScale(), e = this.m_study
.priceScale(), null !== (i = t.visibleBars()) && (o = this.m_series.nearestIndex(i
.firstBar(), U.NearestRight), n = this.m_series.nearestIndex(i.lastBar(), U
.NearestLeft), r = this.m_study.offset(this.m_plotName), r > 0 ? (o -= r, n +=
r) : (o += r, n -= r), (s = this.m_study.getMinFirstBarIndexForPlot(this
.m_plotName)) > n || (o = Math.max(s, o), a = this.m_study.data(), l = this
.m_study.firstValue(), c = a.range(o, n), h = e.properties().percentage.value(),
u = this._getTranspValue(), d = F(o, n), p = this.m_study === this.m_model
.selectedSource(), this.m_selectionData = p ? {
points: [],
hittestResult: b.REGULAR,
vertOffset: 0
} : null, _ = this.m_series.properties().style.value(), f = _ === TradingView
.Series.STYLE_LINE ? "lineStyle" : _ === TradingView.Series.STYLE_AREA ?
"areaStyle" : null, f ? (m = this.m_series.properties()[f].priceSource.value(),
g = m) : (m = "high", g = "low"), this._topCoord = e.coordinateToPrice(e
.height() * e.topMargin()), this._bottomCoord = e.coordinateToPrice(e
.height() * (1 - e.bottomMargin())), c.each(function(t, e) {
var i, o, n, s, a, c, _, f = Math.floor(t + r),
v = e[this.m_plotIndex + 1];
return null !== v && void 0 !== v && (i = this._createItem(f, v, m, g,
h, l), void 0 !== i && null !== i ? (o = void 0 !== e[this
._colorer + 1] || this._palette && this._palette
.addDefaultColor, this._colorer && o && (v = e[this
._colorer + 1], i.style = {}, null != v ? (s = this
._palette.valToIndex ? this._palette.valToIndex[v] :
v, n = this._paletterProps.colors[s].color.value(),
i.style.color = H.generateColor(n, u)) : (n = this
.m_study.properties().styles[this.m_plotName].color
.value(), i.style.color = H.generateColor(n, 100)),
a = u > 9 ? u - 10 : 0, i.style.borderColor = H
.generateColor(n, a)), c = void 0 !== e[this
._textColorer + 1] || this._textPalette && this
._textPalette.addDefaultColor, this._textColorer && c && (
v = e[this._textColorer + 1], i.style || (i.style = {}),
null != v ? (s = this._textPalette.valToIndex ? this
._textPalette.valToIndex[v] : v, _ = this
._textPaletterProps.colors[s].color.value(), i.style
.textColor = H.generateColor(_, u)) : (_ = this
.m_study.properties().styles[this.m_plotName]
.textColor.value(), i.style.textColor = H
.generateColor(_, 100))), p && -1 !== d.indexOf(
t) && this.m_selectionData.points.push(i), this.m_items
.push(i), !1) : void 0)
}.bind(this)), this._convertItemsToCoordinates())))
}, r.prototype._getSeriesVal = function(t, e) {
var i;
t = t || "close", i = null;
try {
i = this.m_series[t](e)
} catch (t) {}
return i
}, r.prototype._getTranspValue = function() {
var t, e = 0;
return this.m_study.properties().transparency && (e = this.m_study.properties().transparency
.value(), e = isNumber(e) ? e : 50), t = this.m_study.properties().styles[this
.m_plotName], t.transparency && (e = t.transparency.value(), e = isNumber(e) ? e : 50),
N(e, 0, 100)
}, r.prototype._createItem = function(t, e, i, o, n, r) {
var s, a, l, c = this.m_study.properties().styles[this.m_plotName].location.value();
if (!e && c !== CanvasEx.MARKLOC_ABSOLUTE) return null;
switch (c) {
case CanvasEx.MARKLOC_ABOVEBAR:
if (void 0 === (s = this._getSeriesVal(i, t)) || null == s) return null;
a = s;
break;
case CanvasEx.MARKLOC_BELOWBAR:
if (void 0 === (l = this._getSeriesVal(o, t)) || null == l) return null;
a = l;
break;
case CanvasEx.MARKLOC_TOP:
a = this._topCoord;
break;
case CanvasEx.MARKLOC_BOTTOM:
a = this._bottomCoord;
break;
case CanvasEx.MARKLOC_ABSOLUTE:
a = e;
break;
default:
throw Error("Bad value: " + c)
}
return n && c !== CanvasEx.MARKLOC_TOP && c !== CanvasEx.MARKLOC_BOTTOM && (a = 100 * (a - r) /
r), new p(t, a)
}, r.prototype._convertItemsToCoordinates = function() {
var t = this.m_model.timeScale(),
e = this.m_study.priceScale();
t.indexesToCoordinates(this.m_items), e.pricesToCoordinatesEx(this.m_items, function(t) {
return t.y
}, function(t, e) {
t.y = e
})
}, r.prototype._calculateVerticalOffset = function(t, e) {
var i = 0;
switch (t) {
case CanvasEx.MARKLOC_ABOVEBAR:
case CanvasEx.MARKLOC_BOTTOM:
i = -e;
break;
case CanvasEx.MARKLOC_BELOWBAR:
case CanvasEx.MARKLOC_TOP:
i = e
}
return i
}, r.prototype._calculateShapeHeight = function(t, e) {
var i = t;
switch (e) {
case CanvasEx.SIZE_TINY:
i = .3 * t;
break;
case CanvasEx.SIZE_SMALL:
i = .6 * t;
break;
case CanvasEx.SIZE_NORMAL:
i = t;
break;
case CanvasEx.SIZE_LARGE:
i = 1.5 * t;
break;
case CanvasEx.SIZE_HUGE:
i = 2 * t
}
return i
}, r.prototype.renderer = function() {
var t, e, i, o, n, r, s, a, l, c;
if (this.m_study.properties().styles[this.m_plotName].visible && this.m_study.properties()
.styles[this.m_plotName].visible.value() && this._scalesReady()) return t = this.m_model
.timeScale(), this.m_invalidated && (this._updateImpl(), this.m_invalidated = !1),
e = {}, i = this._getTranspValue(), o = t.barSpacing(), n = this._calculateShapeHeight(
o), r = this.m_study.properties().styles[this.m_plotName].location.value(), s = this
._calculateVerticalOffset(r, n + n / 2), e.barSpacing = o, e.items = this.m_items, e
.color = H.generateColor(this.m_study.properties().styles[this.m_plotName].color
.value(), i), e.height = n, e.vertOffset = s, a = this.m_study.properties().styles[
this
.m_plotName].plottype.value(), l = W.plotShapesData[a], c = new z, l && c.append(
new TradingView[l.paneRendererClass](e)), this.m_study === this.m_model
.selectedSource() && this._isMarkersEnabled && null !== this.m_selectionData && (this
.m_selectionData.vertOffset = s, c.append(new w(this.m_selectionData))), c
}, inherit(s, r), s.prototype.renderer = function() {
var t, e, i, o, n, r, s, a, l, c, h, u, d, p, _, f, m, g, v, y, b = this.m_study.properties()
.styles[this.m_plotName];
if (b.visible && b.visible.value() && this._scalesReady()) return t = this.m_model.timeScale(),
this.m_invalidated && (this._updateImpl(), this.m_invalidated = !1), e = {}, i = this
._getTranspValue(), o = t.barSpacing(), b.size ? (r = b.size.value(), n = this
._calculateShapeHeight(25, r)) : n = Math.round(o / 2), s = b.location.value(), a =
H.generateColor(b.color.value(), i), l = i > 19 ? i - 10 : 0, c = this
._calculateVerticalOffset(s, Math.round(1.5 * n)), e.barSpacing = o, e.items = this
.items(), e.color = a, e.borderColor = H.generateColor(b.color.value(), l), e.height =
n, e.vertOffset = c, h = b.plottype.value(), u = W.plotShapesData[h], d = new z, p = b
.text ? b.text.value() : void 0, void 0 !== p && "" !== p.trim() && (_ = p.trim()
.replace(/\\n/gm, "\n"), _ = TradingView.cleanButAmpersand(_, !0), f = !1, m = !1,
g = "Arial", v = 12, e.textCache = new B(_, f, m, g, v), y = b.textColor ? b
.textColor.value() : void 0,
e.textColor = y ? H.generateColor(y, i) : a), null != u && d.append(new TradingView[
u.paneRendererClass](e)), this.m_study === this.m_model.selectedSource() && this
._isMarkersEnabled && null !== this.m_selectionData && (this.m_selectionData
.vertOffset = c, d.append(new w(this.m_selectionData))), d
}, inherit(a, s), a.prototype.renderer = function() {
var t, e, i, o, n, r, s, a, l, c, h, u, d, p, _, f, m, g = this.m_study.properties().styles[this
.m_plotName];
if (g.visible && g.visible.value() && this._scalesReady()) return t = this.m_model.timeScale(),
this.m_invalidated && (this._updateImpl(), this.m_invalidated = !1), e = {}, i = this
._getTranspValue(), o = t.barSpacing(), g.size ? (r = g.size.value(), n = this
._calculateShapeHeight(50, r)) : n = Math.round(o), s = g.location.value(), a = H
.generateColor(g.color.value(), i), l = this._calculateVerticalOffset(s, n), e.items =
this.items(), e.char = g.char.value(), e.height = n, e.vertOffset = l, e.color = a, c =
new z, h = g.text ? g.text.value() : void 0, void 0 !== h && "" !== h.trim() && (u = h
.trim().replace(/\\n/gm, "\n"), u = TradingView.cleanButAmpersand(u, !0), d = !1,
p = !1, _ = "Arial", f = 12, e.textCache = new B(u, d, p, _, f), m = g.textColor ? g
.textColor.value() : void 0, e.textColor = m ? H.generateColor(m, i) : a), c.append(
new V(e)), this.m_study === this.m_model.selectedSource() && this
._isMarkersEnabled && null !== this.m_selectionData && (this.m_selectionData
.vertOffset = l, c.append(new w(this.m_selectionData))), c
}, inherit(l, r), l.prototype.renderer = function() {
var t, e, i, o, n, r, s, a, l;
if (this.m_study.properties().styles[this.m_plotName].visible && this.m_study.properties()
.styles[this.m_plotName].visible.value() && this._scalesReady()) return this
.m_invalidated && (this._updateImpl(), this.m_invalidated = !1), t = {}, e = N(this
._getTranspValue(), 0, 100), i = this.m_model.timeScale().barSpacing(), t.items =
this.m_items, t.barSpacing = i, t.colorup = H.generateColor(this.m_study.properties()
.styles[this.m_plotName].colorup.value(), e), t.colordown = H.generateColor(this
.m_study.properties().styles[this.m_plotName].colordown.value(), e), o = y(t
.colorup), n = o ? 100 * (1 - o[3]) : 0, r = y(t.colordown), s = r ? 100 * (1 - r[
3]) : 0, t.colorBorderUp = H.generateColor("#000000", n), t.colorBorderDown = H
.generateColor("#000000", s), t.minHeight = this.m_study.properties().styles[this
.m_plotName].minHeight.value(), t.maxHeight = this.m_study.properties().styles[this
.m_plotName].maxHeight.value(), a = new z, a.append(new D(t)), this.m_study === this
.m_model.selectedSource() && null !== this.m_selectionData && (l = this.m_selectionData,
l.barSpacing = i, a.append(new T(l))), a
}, l.prototype._createItem = function(t, e, i, o, n, r) {
var s, a, l, c;
if (0 !== e) {
if (Math.abs(e) > this._maxAbsValue && (this._maxAbsValue = Math.abs(e)), s = e > 0) {
if (void 0 === (l = this._getSeriesVal(o, t)) || null == l) return null;
a = l
} else {
if (void 0 === (c = this._getSeriesVal(i, t)) || null == c) return null;
a = c
}
return n && (a = 100 * (a - r) / r), new E(t, a, e, s)
}
}, l.prototype._convertItemsToCoordinates = function() {
var t, e, i, o, n, r, s, a, l, c = this.m_model.timeScale(),
h = this.m_study.priceScale();
for (c.indexesToCoordinates(this.m_items), h.pricesToCoordinatesEx(this.m_items, function(t) {
return t.y
}, function(t, e) {
t.y = e
}), t = Math.abs(this.m_study.properties().styles[this.m_plotName].minHeight.value()),
e = Math.abs(this.m_study.properties().styles[this.m_plotName].maxHeight.value()), t > e &&
(i = t, t = e, e = i), o = e - t, n = o / this._maxAbsValue, r = this.m_items, s = 0; s < r
.length; s++) a = r[s], l = Math.abs(a.height), a.height = l * n + t
}, c.prototype.update = function() {
this._invalidated = !0
}, c.prototype._updateImpl = function() {
var t, e, i, o, n, r, s, a, l, c, h, u, d, _, y, S, w, T, C, x;
if (this.m_bars.length = 0, !(this.m_model.timeScale().isEmpty() || this.m_study.priceScale()
.isEmpty() || null === (t = this.m_model.timeScale().visibleBars()) || (e = this
.m_series.nearestIndex(t.firstBar(), U.NearestRight), i = this.m_series
.nearestIndex(t.lastBar(), U.NearestLeft), (o = this.m_study
.getMinFirstBarIndexForPlot(this.m_plotName)) > i || (e = Math.max(o, e), n =
this.m_study.data(), r = this.m_study.firstValue(), s = n.range(e, i), a = this
.m_study.priceScale(), l = a.properties().percentage.value(), c = 0, h = this
.m_study.properties().ohlcPlots[this.m_plotName], u = {}, d = function(t, e) {
var i = t + "@" + e;
return u[i] || (u[i] = H.generateColor(t, e)), u[i]
}, s.each(function(t, e) {
var i, o, n, s, a, u, p, _, y, b, S, w, T, C, x, P;
for (t = Math.floor(t), i = !0, o = {}, n = TradingView.OPEN_PLOT; n <=
TradingView.CLOSE_PLOT; ++n) {
if (void 0 === (s = e[this._ohlcPlotIndexes[n] + 1]) || null ===
s) {
i = !1;
break
}
o[n] = s
}
return !!i && (a = o[TradingView.OPEN_PLOT], u = o[TradingView
.CLOSE_PLOT], p = Math.max(a, o[TradingView.HIGH_PLOT], o[
TradingView.LOW_PLOT], u), _ = Math.min(a, o[TradingView
.HIGH_PLOT], o[TradingView.LOW_PLOT], u), y = {}, y.time =
Math.round(t), l ? (y.open = 100 * (a - r) / r, y.high = 100 * (
p - r) / r, y.low = 100 * (_ - r) / r, y.close = 100 * (
u - r) / r) : (y.open = a, y.high = p, y.low = _, y.close =
u), b = h.color.value(), S = void 0 !== e[this._colorer +
1] || this._palette && this._palette.addDefaultColor, this
._colorer && S && null != (s = e[this._colorer + 1]) && (w =
this._palette.valToIndex ? this._palette.valToIndex[s] : s,
T = this._paletterProps.colors[w], b = T.color.value()), y
.color = d(b, c), C = f(v(b)), x = C[2] > .25 ? C[2] - .26 : C[
2] + .75, P = m(C[0], C[1], x), y.borderColor = d(g(P), c),
y.hollow = null, this.m_bars.push(y), !1)
}.bind(this)), a.barPricesToCoordinates(this.m_bars), this.m_model.timeScale()
.barIndexesToCoordinates(this.m_bars), this.m_study !== this.m_model
.selectedSource()))))
for (_ = F(e, i), this._selectionData = {
points: [],
hittestResult: b.REGULAR
}, y = 0; y < _.length; y++) S = _[y], null !== (w = this.m_study.data().valueAt(S)) &&
(T = w[this._plotIndex + 1], a.properties().percentage.value() && (T = 100 * (T - r) /
r), C = this.m_model.timeScale().indexToCoordinate(Math.floor(S)), x = this
.m_study.priceScale().priceToCoordinate(T), this._selectionData.points.push(new p(C,
x)))
}, c.prototype.items = function() {
return this.m_bars
}, inherit(h, c), h.prototype.renderer = function() {
var t, e;
if (this.m_study.properties().ohlcPlots[this.m_plotName].visible.value()) return this
._invalidated && (this._updateImpl(), this._invalidated = !1), t = {}, t.bars = this
.m_bars, t.barSpacing = this.m_model.timeScale().barSpacing(), t.dontDrawOpen = this
.m_series.properties().barStyle.dontDrawOpen.value(), e = new z, e.append(new C(t)),
this.m_series === this.m_model.selectedSource() && this._isMarkersEnabled && e.append(
new w(this._selectionData)), e
}, inherit(u, c), u.prototype.renderer = function() {
var t, e, i, o = this.m_study.properties().ohlcPlots[this.m_plotName];
if (o.visible.value()) return this._invalidated && (this._updateImpl(), this._invalidated = !1),
t = {}, t.bars = this.m_bars, t.barSpacing = this.m_model.timeScale().barSpacing(), t
.drawWick = o.drawWick.value(), t.drawBorder = o.drawBorder.value(), e = o.wickColor
.value(), t.borderColor = e, t.wickColor = e, i = new z, i.append(new k(t)), this
.m_series === this.m_model.selectedSource() && this._isMarkersEnabled && i.append(new w(
this._selectionData)), i
}, e.StudyPaneView = o, e.StudyBackgroundPaneView = n, e.StudyPlotShapesPaneView = s, e
.StudyPlotCharsPaneView = a, e.StudyPlotArrowsPaneView = l, e.StudyPlotCandlesPaneView = u, e
.StudyPlotBarsPaneView = h
}, function(t, e, i) {
"use strict";
function o() {
this._registeredSources = {}, this._sourcesToRow = {}, this._rowsToSources = {}, this
._currentSymbol = "", this._actualCapacity = 0, this._actualWidth = 1, this._numericFormatter =
new r, this._percentageFormatter = new n
}
var n = i(167).PercentageFormatter,
r = i(89).NumericFormatter;
o.prototype.levelsCount = function() {
return 0
}, o.prototype.topByRow = function(t) {
return t * o.ROW_HEIGHT
}, o.prototype.rowHeight = function(t) {
return o.ROW_HEIGHT
}, o.prototype.canvas = function() {
if (!this._canvas) {
this._canvas = $("<canvas>"), this._cache = this._canvas.get(0).getContext("2d"), this
._canvas.prop("width", 100).css("position", "absolute").css("top", 0).css("z-index",
1e3).css("left", 0);
this._canvas.get(0).getContext("2d").font = "12px Verdana"
}
return this._canvas
}, o.ROW_HEIGHT = 14, o.prototype.points = function(t) {
return [t.points()[0], t.points()[1]]
}, o.prototype.startPoint = function(t, e) {
return e ? t.points()[0] : t.points()[1]
}, o.prototype.priceRange = function(t, e) {
var i = this.points(t),
o = i[0],
n = i[1];
return e ? n.price - o.price : o.price - n.price
}, o.prototype.sourceIsReady = function(t) {
return t.points().length >= 2
}, o.prototype._calculateWidth = function(t) {
var e, i, o, n, r, s, a, l, c, h, u, d, p, _, f, m, g, v, y, b, S, w, T;
if (!this.sourceIsReady(t)) return null;
if (e = this.canvas().get(0).getContext("2d"), e.font = "12px Verdana", i = !!t.properties()
.showPrices && t.properties().showPrices.value(), o = !!t.properties().coeffsAsPercents && t
.properties().coeffsAsPercents.value(), n = t.properties().showCoeffs.value(), r = t
.priceScale().formatter(), s = this.points(t), a = s[0], l = s[1], !a || !l) return null;
if (c = !1, h = t.properties(), h.reverse && h.reverse.value() && (c = h.reverse.value()), u =
this.priceRange(t, c), d = this.startPoint(t, c).price, t.priceScale().isPercent() &&
null === (p = t.ownerSource().firstValue())) return 0;
for (_ = 0, f = [], m = 1; m <= this.levelsCount(); m++) g = "level" + m, v = h[g], y = v.coeff
.value(), b = d + y * u, t.priceScale().isPercent() && (b = t.priceScale().priceRange()
.convertToPercent(b, p)), S = "", n && (S += o ? this._percentageFormatter.format(Math
.round(1e4 * y) / 100) : this._numericFormatter.format(y)), i && (S += "(" + r.format(
b) + ")"), w = e.measureText(S).width, T = {
text: S,
left: _,
width: w + 4
}, f.push(T), _ += T.width;
return {
totalWidth: _,
cells: f
}
}, o.prototype._effectiveState = function(t) {
var e, i, o, n, r, s, a = {},
l = t.properties();
for (l.showPrices && (a.showPrices = l.showPrices.value()), l.coeffsAsPercents && (a
.coeffsAsPercents = l.coeffsAsPercents.value()), a.showCoeffs = l.showCoeffs.value(),
t.priceScale() && t.priceScale().formatter().state && (a.formatter = t.priceScale()
.formatter().state()), l.reverse && (a.reverse = l.reverse.value()), a.p1 = t.points()[
0], a.p2 = t.points()[1], 3 === t.points().length && (a.p3 = t.points()[2]), a
.items = [], e = 1; e <= this.levelsCount(); e++) i = "level" + e, o = l[i], n = o.coeff
.value(), r = o.color.value(), s = {
coeff: n,
color: r
}, a.items.push(s);
return a
}, o.prototype._findEmptyRow = function(t) {
for (var e, i = 0; this._rowsToSources[i];) i++;
return this._rowsToSources[i] = t, i >= this._actualCapacity && (this._actualCapacity++, e =
this.canvas(), TradingView.resizeCanvas(e, this._actualWidth, o.ROW_HEIGHT * this
._actualCapacity)), i
}, o.prototype._repaintSource = function(t, e, i) {
var n, r, s = o.ROW_HEIGHT * i.row,
a = this.canvas().get(0).getContext("2d");
for (a.clearRect(0, s, this._actualWidth, o.ROW_HEIGHT), a.textBaseline = "bottom", a.font =
"12px Verdana", s += o.ROW_HEIGHT, n = 0; n < t.cells.length; n++) r = t.cells[n], a
.fillStyle = e.items[n].color, a.fillText(r.text, r.left, s)
}, o.prototype.removeSource = function(t) {
var e, i;
this._sourcesToRow[t] && (e = this._sourcesToRow[t].row, i = this.canvas().get(0).getContext(
"2d"), i.save(), i.clearRect(0, this.topByRow(e), this._actualWidth, o.ROW_HEIGHT),
i.restore(), delete this._sourcesToRow[t], delete this._rowsToSources[e])
}, o.prototype._effectiveStatesEquals = function(t, e) {
var i, o = function(t, e) {
return !(!t && !e) && (!(!t || e) || (!(t || !e) || (t.minMove !== e.minMove || (t
.minMove2 !== e.minMove2 || (t.fractional !== e.fractional || t
.fractionalLength !== e.fractionalLength)))))
},
n = function(t, e) {
return !(!t && !e) && (!(!t || e) || (!(t || !e) || (t.index !== e.index || t.price !==
e.price)))
},
r = function(t, e) {
return t.coeff !== e.coeff || t.color !== e.color
};
if (t && !e) return !1;
if (!t && e) return !1;
if (t.showPrices !== e.showPrices) return !1;
if (t.coeffsAsPercents !== e.coeffsAsPercents) return !1;
if (t.showCoeffs !== e.showCoeffs) return !1;
if (t.reverse !== e.reverse) return !1;
if (o(t.formatter, e.formatter)) return !1;
if (n(t.p1, e.p1)) return !1;
if (n(t.p2, e.p2)) return !1;
if (n(t.p3, e.p3)) return !1;
if (t.items.length !== e.items.length) return !1;
for (i = 0; i < t.items.length; i++)
if (r(t.items[i], e.items[i])) return !1;
return !0
}, o.prototype.updateSource = function(t) {
var e, i, n, r, s = t.properties().symbol.value();
return this._currentSymbol !== s && (this._currentSymbol = s, this._sourcesToRow = {}, this
._rowsToSources = {}), this._sourcesToRow[t.id()] || (e = this._findEmptyRow(t.id()),
this._sourcesToRow[t.id()] = {
effectiveState: null,
row: e
}), i = this._sourcesToRow[t.id()].effectiveState, n = this._effectiveState(t), this
._effectiveStatesEquals(i, n) || (r = this._calculateWidth(t), r ? (this._sourcesToRow[t
.id()].effectiveState = n, r.totalWidth > this._actualWidth && (TradingView
.resizeCanvas(this.canvas(), r.totalWidth, o.ROW_HEIGHT * this._actualCapacity),
this._actualWidth = r.totalWidth), e = this._sourcesToRow[t.id()], this
._repaintSource(r, n, e), this._sourcesToRow[t.id()].effectiveState = n, this
._sourcesToRow[t.id()].preparedCells = r) : this._sourcesToRow[t.id()]
.effectiveState = null), this._sourcesToRow[t.id()]
}, t.exports = o
}, function(t, e, i) {
"use strict";
var o, n;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(28), n = function() {
function t(t) {
this._precision = t
}
return t.prototype.format = function(e) {
return (void 0 !== this._precision ? e.toFixed(this._precision) : t.formatNoE(e))
.replace(".", o.formatterOptions.decimalSign)
}, t.prototype.parse = function(t) {
var e = t.replace(o.formatterOptions.decimalSign, "."),
i = parseFloat(e);
return this._precision && (i = +i.toFixed(this._precision)), i
}, t.formatNoE = function(t) {
return t >= 1e-15 && t < 1 ? t.toFixed(15).replace(/\.?0+$/, "") : t + ""
}, t
}(), e.NumericFormatter = n
}, function(t, e, i) {
"use strict";
var o, n, r, s;
i(294), o = i(54), n = o.greaterThan, r = o.lessThan, s = window.CanvasEx = i(240), TradingView
.resizeCanvas = function(t, e, i) {
var o, n, r, s, a, l = t.prop("height"),
c = t.prop("width");
l && c && (l /= window.hidpiCanvasRatio || 1, c /= window.hidpiCanvasRatio || 1, l < 1 && (l =
1), c < 1 && (c = 1), o = $("<canvas>").prop("width", c).prop("height", l), n = o
.get(0).getContext("2d"), r = Math.min(c, e), s = Math.min(l, i), r && s && n.drawImage(
t.get(0), 0, 0, r, s, 0, 0, r, s), t.prop("height", i).prop("width", e), a = t.get(
0).getContext("2d"), r && s && a.drawImage(o.get(0), 0, 0, r, s, 0, 0, r, s), o
.remove())
}, s.computeDashPattern = function(t) {
return [
[t.lineWidth, 2 * t.lineWidth],
[5 * t.lineWidth, 6 * t.lineWidth],
[6 * t.lineWidth, 6 * t.lineWidth],
[t.lineWidth, 4 * t.lineWidth]
][t.lineStyle - 1]
}, s.drawLine = function(t, e, i, o, n) {
isFinite(e) && isFinite(o) && isFinite(i) && isFinite(n) && (t.lineStyle === s
.LINESTYLE_DASHED || t.lineStyle === s.LINESTYLE_DOTTED || t.lineStyle === s
.LINESTYLE_SPARSE_DOTTED ? t.drawDashedLine(t, e, i, o, n) : s.drawSolidLine(t, e, i, o,
n))
}, s.drawArrow = function(t, e, i, o, n) {
isFinite(e) && isFinite(o) && isFinite(i) && isFinite(n) && (t.beginPath(), t.moveTo(o, n), t
.lineTo(e, i), t.moveTo(e + 2, i + 2), t.lineTo(e - 2, i + 2), t.moveTo(e - 1, i + 1), t
.lineTo(e + 1, i + 1), t.stroke())
}, s.drawSolidLine = function(t, e, i, o, n) {
t.beginPath(), t.moveTo(e, i), t.lineTo(o, n), t.stroke()
}, s.setLineStyle = function(t, e) {
t.lineStyle = e;
var i = [];
e !== s.LINESTYLE_SOLID && (i = s.computeDashPattern(t)), "function" == typeof t.setLineDash ? t
.setLineDash(i) : void 0 !== t.mozDash ? t.mozDash = i : void 0 !== t.webkitLineDash && (t
.webkitLineDash = i)
}, s.drawPoly = function(t, e, i) {
var o, n;
for (t.beginPath(), t.moveTo(e[0].x, e[0].y), o = 0; o < e.length; o++) n = e[o], t.lineTo(n.x,
n.y);
t.closePath(), t.stroke(), i && t.fill()
}, s.lineStyles = [], "undefined" != typeof CanvasRenderingContext2D && (CanvasRenderingContext2D
.prototype.setFont = function(t) {
if (this.font !== t) try {
this.font = t
} catch (t) {}
}, CanvasRenderingContext2D.prototype.lineStyle = s.LINESTYLE_SOLID, s.originalSave =
CanvasRenderingContext2D.prototype.save, s.originalRestore = CanvasRenderingContext2D.prototype
.restore, CanvasRenderingContext2D.prototype.save = function() {
s.lineStyles.push(this.lineStyle), s.originalSave.call(this)
}, CanvasRenderingContext2D.prototype.restore = function() {
s.lineStyles.length > 0 && (this.lineStyle = s.lineStyles.pop(), s.originalRestore.call(
this))
}, CanvasRenderingContext2D.prototype.drawDashedLine = function(t, e, i, o, n) {
t.save();
var r = s.computeDashPattern(t);
if (t.beginPath(), "function" == typeof t.setLineDash) t.setLineDash(r);
else if (void 0 !== t.mozDash) t.mozDash = r;
else {
if (void 0 === t.webkitLineDash) return t.dashedLineTo(e, i, o, n, r), t.stroke(),
void t.restore();
t.webkitLineDash = r
}
t.moveTo(e, i), t.lineTo(o, n),
t.stroke(), t.restore()
}, CanvasRenderingContext2D.prototype.dashedLineTo = function(t, e, i, o, s) {
var a, l, c, h, u, d, p = {
thereYet: n,
cap: Math.min
},
_ = {
thereYet: n,
cap: Math.min
};
for (e - o > 0 && (_.thereYet = r, _.cap = Math.max), t - i > 0 && (p.thereYet = r, p.cap =
Math.max), this.moveTo(t, e), a = t, l = e, c = 0, h = !0; !p.thereYet(a, i) || !_
.thereYet(l, o);) u = Math.atan2(o - e, i - t), d = s[c], a = p.cap(i, a + Math.cos(u) *
d), l = _.cap(o, l + Math.sin(u) * d), h ? this.lineTo(a, l) : this.moveTo(a, l),
c = (c + 1) % s.length, h = !h
}, CanvasRenderingContext2D.prototype.roundRect = function(t, e, i, o, n) {
this.beginPath(), this.moveTo(t + n, e), this.lineTo(t + i - n, e), this.arcTo(t + i, e, t +
i, e + n, n), this.lineTo(t + i, e + o - n), this.arcTo(t + i, e + o, t + i - n, e +
o, n), this.lineTo(t + n, e + o), this.arcTo(t, e + o, t, e + o - n, n), this
.lineTo(t, e + n), this.arcTo(t, e, t + n, e, n)
}), t.exports = s
}, function(t, e, i) {
var o;
! function(e) {
"use strict";
function n() {}
function r(t, e) {
for (var i = t.length; i--;)
if (t[i].listener === e) return i;
return -1
}
function s(t) {
return function() {
return this[t].apply(this, arguments)
}
}
function a(t) {
return "function" == typeof t || t instanceof RegExp || !(!t || "object" != typeof t) && a(t
.listener)
}
var l = n.prototype,
c = e.EventEmitter;
l.getListeners = function(t) {
var e, i, o = this._getEvents();
if (t instanceof RegExp) {
e = {};
for (i in o) o.hasOwnProperty(i) && t.test(i) && (e[i] = o[i])
} else e = o[t] || (o[t] = []);
return e
}, l.flattenListeners = function(t) {
var e, i = [];
for (e = 0; e < t.length; e += 1) i.push(t[e].listener);
return i
}, l.getListenersAsObject = function(t) {
var e, i = this.getListeners(t);
return i instanceof Array && (e = {}, e[t] = i), e || i
}, l.addListener = function(t, e) {
var i, o, n;
if (!a(e)) throw new TypeError("listener must be a function");
i = this.getListenersAsObject(t), o = "object" == typeof e;
for (n in i) i.hasOwnProperty(n) && -1 === r(i[n], e) && i[n].push(o ? e : {
listener: e,
once: !1
});
return this
}, l.on = s("addListener"), l.addOnceListener = function(t, e) {
return this.addListener(t, {
listener: e,
once: !0
})
}, l.once = s("addOnceListener"), l.defineEvent = function(t) {
return this.getListeners(t), this
}, l.defineEvents = function(t) {
for (var e = 0; e < t.length; e += 1) this.defineEvent(t[e]);
return this
}, l.removeListener = function(t, e) {
var i, o, n = this.getListenersAsObject(t);
for (o in n) n.hasOwnProperty(o) && -1 !== (i = r(n[o], e)) && n[o].splice(i, 1);
return this
}, l.off = s("removeListener"), l.addListeners = function(t, e) {
return this.manipulateListeners(!1, t, e)
}, l.removeListeners = function(t, e) {
return this.manipulateListeners(!0, t, e)
}, l.manipulateListeners = function(t, e, i) {
var o, n, r = t ? this.removeListener : this.addListener,
s = t ? this.removeListeners : this.addListeners;
if ("object" != typeof e || e instanceof RegExp)
for (o = i.length; o--;) r.call(this, e, i[o]);
else
for (o in e) e.hasOwnProperty(o) && (n = e[o]) && ("function" == typeof n ? r.call(this,
o, n) : s.call(this, o, n));
return this
}, l.removeEvent = function(t) {
var e, i = typeof t,
o = this._getEvents();
if ("string" === i) delete o[t];
else if (t instanceof RegExp)
for (e in o) o.hasOwnProperty(e) && t.test(e) && delete o[e];
else delete this._events;
return this
}, l.removeAllListeners = s("removeEvent"), l.emitEvent = function(t, e) {
var i, o, n, r, s = this.getListenersAsObject(t);
for (r in s)
if (s.hasOwnProperty(r))
for (i = s[r].slice(0),
n = 0; n < i.length; n++) o = i[n], !0 === o.once && this.removeListener(t, o
.listener), o.listener.apply(this, e || []) === this
._getOnceReturnValue() && this.removeListener(t, o.listener);
return this
}, l.trigger = s("emitEvent"), l.emit = function(t) {
var e = Array.prototype.slice.call(arguments, 1);
return this.emitEvent(t, e)
}, l.setOnceReturnValue = function(t) {
return this._onceReturnValue = t, this
}, l._getOnceReturnValue = function() {
return !this.hasOwnProperty("_onceReturnValue") || this._onceReturnValue
}, l._getEvents = function() {
return this._events || (this._events = {})
}, n.noConflict = function() {
return e.EventEmitter = c, n
}, void 0 !== (o = function() {
return n
}.call(e, i, e, t)) && (t.exports = o)
}(this || {})
}, function(t, e, i) {
"use strict";
t.exports = i(311)
}, function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
}), i(102);
! function(t) {
function e(t, e) {
s[t] || (s[t] = []), s[t].push(e)
}
function i(t, e) {
if (s[t]) {
var i = s[t].indexOf(e); - 1 !== i && (1 === s[t].length ? delete s[t] : s[t].splice(i, 1))
}
}
function o(t) {
return TVLocalStorage.getItem(r + t)
}
function n(t, e) {
void 0 === e && (e = (new Date).valueOf()), e !== TVLocalStorage.getItem(r + t) &&
TVLocalStorage.setItem(r + t, e)
}
var r = "tvxwevents.",
s = {};
window.addEventListener("storage", function(t) {
if (null !== t.newValue) {
var e = t.key;
e && e.startsWith(r) && (e = e.substr(r.length), s[e] && s[e].forEach(function(e) {
e.call(t.newValue, t.newValue)
}))
}
}), t.on = e, t.off = i, t.current = o, t.emit = n
}(e.TVXWindowEvents || (e.TVXWindowEvents = {}))
}, function(t, e, i) {
"use strict";
var o, n, r;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(11), n = i(90), r = function() {
function t() {
this._data = null, this._hitTest = new o(o.REGULAR)
}
return t.prototype.setData = function(t) {
this._data = t
}, t.prototype.setHitTest = function(t) {
this._hitTest = t
}, t.prototype.draw = function(t) {
var e, i;
null !== this._data && 0 !== this._data.points.length && !1 !== this._data.visible && ((
e = this._data.points[0].y) < 0 || e > this._data.height || (i = this._data
.width, t.lineCap = "square", t.strokeStyle = this._data.color, t
.lineWidth = this._data.linewidth, void 0 !== this._data.linestyle && n
.setLineStyle(t, this._data.linestyle), n.drawLine(t, 0, e, i, e)))
}, t.prototype.hitTest = function(t) {
return null === this._data || !1 === this._data.visible ? null : 0 === this._data.points
.length ? null : Math.abs(t.y - this._data.points[0].y) <= 5 ? this._hitTest : null
}, t
}(), e.HorizontalLineRenderer = r
}, , , , , , , , function(t, e, i) {
"use strict";
var o, n, r;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(15), String.prototype.left = function(t) {
if (!o.isInteger(t)) throw Error("invalid length");
if (t > this.length) throw Error("invalid length");
return this.substring(0, t)
}, String.prototype.right = function(t) {
if (!o.isInteger(t)) throw Error("invalid length");
if (t > this.length) throw Error("invalid length");
return this.substring(this.length - t, this.length)
}, String.prototype.trimmed = function() {
return this.replace(/^\s*/, "").replace(/\s*$/, "")
}, String.prototype.startsWith = function(t) {
return !(t.length > this.length) && this.left(t.length) === t
}, n = /{(\w+)}/g, r = /{(\d+)}/g, String.prototype.format = function() {
var t, e, i, s, a = [];
for (t = 0; t < arguments.length; t++) a[t] = arguments[t];
return e = o.isObject(a[0]), i = e ? n : r,
s = e ? function(t, e) {
var i = a[0];
return void 0 !== i[e] ? i[e] : t
} : function(t, e) {
var i = parseInt(e, 10),
o = a[i];
return void 0 !== o ? o : t
}, this.replace(i, s)
}
}, function(t, e, i) {
"use strict";
function o(t) {
var e, i = t.icon,
o = t.isActive,
c = t.isOpened,
h = t.isDisabled,
u = t.onClick,
d = t.text,
p = t.textBeforeIcon,
_ = t.title,
f = t.theme,
m = void 0 === f ? l : f,
g = t.className,
v = t.forceInteractive,
y = n.__rest(t, ["icon", "isActive", "isOpened", "isDisabled", "onClick", "text",
"textBeforeIcon", "title", "theme", "className", "forceInteractive"
]),
b = s(g, m.button, "apply-common-tooltip", (e = {}, e[m.isActive] = o, e[m.isOpened] = c, e[m
.isInteractive] = (v || !!u) && !h, e[m.isDisabled] = h, e)),
S = i && ("string" == typeof i ? r.createElement(a.Icon, {
className: m.icon,
icon: i
}) : r.cloneElement(i, {
className: m.icon
}));
return r.createElement("div", n.__assign({}, y, {
className: b,
onClick: h ? void 0 : u,
title: _
}), p && d && r.createElement("div", {
className: s("js-button-text", m.text)
}, d), S, !p && d && r.createElement("div", {
className: s("js-button-text", m.text)
}, d))
}
var n, r, s, a, l;
Object.defineProperty(e, "__esModule", {
value: !0
}), n = i(0), r = i(2), s = i(14), a = i(59), l = i(149), e.ToolWidgetButton = o
}, function(t, e, i) {
"use strict";
function o(t, e) {
var o = e || new p("linetoolelliott");
u.call(this, t, o), i.e(1).then(function(t) {
var e = i(249).ElliottLabelsPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
function n(t, e) {
var o = e || new p("linetoolelliott");
u.call(this, t, o), this.version = n.version, i.e(1).then(function(t) {
var e = i(249).ElliottLabelsPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
function r(t, e) {
this._constructor = "LineToolElliottImpulse";
var i = e || new p("linetoolelliottimpulse");
n.call(this, t, i)
}
function s(t, e) {
this._constructor = "LineToolElliottTriangle";
var i = e || new p("linetoolelliotttriangle");
n.call(this, t, i)
}
function a(t, e) {
this._constructor = "LineToolElliottTripleCombo";
var i = e || new p("linetoolelliotttriplecombo");
n.call(this, t, i)
}
function l(t, e) {
var o = e || new p("linetoolelliott");
u.call(this, t, o), this.version = l.version, i.e(1).then(function(t) {
var e = i(249).ElliottLabelsPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
function c(t, e) {
this._constructor = "LineToolElliottCorrection";
var i = e || new p("linetoolelliottcorrection");
l.call(this, t, i)
}
function h(t, e) {
this._constructor = "LineToolElliottLineToolElliottDoubleCombo";
var i = e || new p("linetoolelliottdoublecombo");
l.call(this, t, i)
}
var u = i(1).LineDataSource,
d = i(52).Action,
p = i(6).DefaultProperty,
_ = i(3).propertyPages;
inherit(o, u), o.migrateState = function(t) {
var e = {
0: 11,
1: 10,
2: 9,
3: 8,
4: 7,
5: 6,
6: 5,
7: 4,
8: 3
},
i = {
0: 11,
1: 8
};
"LineToolElliottSubminuette" === t.type && (t.type = "LineToolElliottImpulse", t.state.degree =
e[t.state.wavesize]), "LineToolElliottMinor" === t.type && (t.type =
"LineToolElliottImpulse", t.state.degree = e[t.state.wavesize]),
"LineToolElliottCircle" === t.type && (t.type = "LineToolElliottImpulse", t.state.degree =
e[t.state.wavesize]), "LineToolElliottMinorRetr" === t.type && (t.type =
"LineToolElliottCorrection", t.state.degree = i[t.state.wavesize]),
"LineToolElliottMajorRetr" === t.type && (t.type = "LineToolElliottCorrection", t.state
.degree = i[t.state.wavesize])
}, o.prototype.title = function() {
return "Elliott Labels"
}, o.degrees = [$.t("Supermillennium"), $.t("Millennium"), $.t("Submillennium"), $.t(
"Grand Supercycle"), $.t("Supercycle"), $.t("Cycle"), $.t("Primary"), $.t("Intermediate"), $
.t("Minor", {
context: "wave"
}), $.t("Minute"), $.t("Minuette"), $.t("Subminuette"), $.t("Micro"), $.t("Submicro"), $.t(
"Miniscule")
], o.prototype.additionalActions = function(t) {
var e = new d({
text: $.t("Degree")
}),
i = this;
return e.subActions = o.degrees.map(function(e, o) {
var n = new d({
text: e,
checkable: !0,
checked: i.properties().degree.value() === o
});
return n.callbacks().subscribe(null, function() {
t.setProperty(i.properties().degree, o, "Change Elliott Degree")
}), n
}), [e]
}, o.prototype.label = function(t) {
var e = o.degrees.length - this.properties().degree.value() - 1,
i = Math.floor(e / 3),
n = e % 3;
return {
fontIncrease: 4 * Math.floor(i),
bold: !!(i % 2),
decoration: ["", "brackets", "circle"][n],
label: this.labelsGroup()[i][t]
}
}, o.prototype.getStylesPropertyPage = function() {
return _.LineToolElliottStylesPropertyPage
}, o.prototype.getDegrees = function() {
return o.degrees
}, inherit(n, o), n.version = 3, n.prototype.pointsCount = function() {
return 6
}, n.prototype.migrateVersion = function(t, e, i) {
if (1 === t) {
var o = $.extend({}, this._timePoint[0]);
this._timePoint.unshift(o), this._points.length > 0 && (o = $.extend({}, this._points[0]),
this._points.unshift(o))
}
}, inherit(r, n), r._labelsGroups = [
["0", "1", "2", "3", "4", "5"],
["0", "i", "ii", "iii", "iv", "v"],
["0", "1", "2", "3", "4", "5"],
["0", "I", "II", "III", "IV", "V"],
["0", "1", "2", "3", "4", "5"]
], r.prototype.labelsGroup = function() {
return r._labelsGroups
}, inherit(s, n), s._labelsGroups = [
["0", "A", "B", "C", "D", "E"],
["0", "a", "b", "c", "d", "e"],
["0", "A", "B", "C", "D", "E"],
["0", "a", "b", "c", "d", "e"],
["0", "A", "B", "C", "D", "E"]
], s.prototype.labelsGroup = function() {
return s._labelsGroups
}, inherit(a, n), a._labelsGroups = [
["0", "W", "X", "Y", "X", "Z"],
["0", "w", "x", "y", "x", "z"],
["0", "W", "X", "Y", "X", "Z"],
["0", "w", "x", "y", "x", "z"],
["0", "W", "X", "Y", "X", "Z"]
], a.prototype.labelsGroup = function() {
return a._labelsGroups
}, inherit(l, o), l.version = 3, l.prototype.pointsCount = function() {
return 4
}, l.prototype.migrateVersion = function(t, e, i) {
if (1 === t) {
var o = $.extend({}, this._timePoint[0]);
this._timePoint.insert(o, 0), this._points.length > 0 && (o = $.extend({}, this._points[0]),
this._points.insert(o, 0))
}
}, inherit(c, l), c._labelsGroups = [
["0", "A", "B", "C"],
["0", "a", "b", "c"],
["0", "A", "B", "C"],
["0", "a", "b", "c"],
["0", "A", "B", "C"]
], c.prototype.labelsGroup = function() {
return c._labelsGroups
}, inherit(h, l), h._labelsGroups = [
["0", "W", "X", "Y"],
["0", "w", "x", "y"],
["0", "W", "X", "Y"],
["0", "w", "x", "y"],
["0", "W", "X", "Y"]
], h.prototype.labelsGroup = function() {
return h._labelsGroups
}, e.LineToolElliott = o, e.LineToolElliottImpulse = r, e.LineToolElliottTriangle = s, e
.LineToolElliottTripleCombo = a, e.LineToolElliottCorrection = c, e.LineToolElliottDoubleCombo = h
}, function(t, e, i) {
"use strict";
function o(t, e, i) {
var o = this._mtpStudyId() + "@mtp-mtpredictor",
n = i || d.findStudyMetaInfo(t.studiesMetaData(), o),
s = e || a(n, null, null, t.studyVersioning()),
c = l.lineToolNameForPointsBasedStudy(o);
r.call(this, t, s, c), this._setPaneViews(this.createPaneViews(t)), this._turnaroundCounter = 0,
this._nextTurnaround(), this._metaInfo = n, this._graphics = new h(n), this._formatter = new u
}
var n = i(128),
r = n.StudyLineDataSource,
s = i(35),
a = s.prepareStudyProperties,
l = s.Study,
c = i(1).LineDataSource,
h = i(219),
u = i(331).VolumeFormatter,
d = i(33);
inherit(o, r), o.prototype.series = function() {
return TradingView.isInherited(this._ownerSource.constructor, TradingView.Series) ? this
._ownerSource : this._ownerSource.series()
}, o.prototype.calcIsActualSymbol = function() {
return c.prototype.calcIsActualSymbol.call(this)
}, o.prototype._nextTurnaround = function() {
this._turnaround = this._mtpStudyId() + "_" + ++this._turnaroundCounter
}, o.prototype.createPaneViews = function(t) {
return [new l.StudyPaneView_textmarks(this, t), new l.StudyPaneView_polygons(this, t), new l
.StudyPaneView_lines(this, t)
]
}, o.prototype.onData = function(t) {
var e = this;
if ("data_update" === t.method && t.params.customId === "pointset_" + this._currentPointsetId) c
.prototype.onData.call(this, t), this._points.length === this.pointsCount() && this
._requestStudy();
else if ("data_update" === t.method && t.params.customId === this._studyId) {
if (!this._checkTurnaround(t.params.turnaround)) return;
l.prototype._makeJSONForNSData.call(this, t).then(function(i) {
t.params.nonseries.d = i, "" !== t.params.nonseries.d && e._graphics.process(t
.params.nonseries), t.params.nonseries.indexes.length > 0 && (e
._indexes = t.params.nonseries.indexes), e.updateAllViews(), e._model
.updateSource(e)
})
}
}, o.prototype._requestStudy = function() {
var t = this,
e = function(e) {
t.onData(e)
},
i = this._studyInputs();
i && (this._studyId ? (this._nextTurnaround(), this._model.chartApi().modifyStudy(this._studyId,
this._turnaround, i, e)) : (this._studyId = l.makeNextStudyId(), this._model
.chartApi().createStudy(this._studyId, this._turnaround, this._model.mainSeries()
._seriesId, this._metaInfo.fullId + "!", i, e)))
}, e.LineStudyMtp = o
}, function(t, e, i) {
"use strict";
(function(t, o, n) {
function r(e, i) {
var r, a = e._undoModel._chartWidget,
l = a.onWidget(),
c = !1;
c = l ? a._options && !a._options.hideIdeas : !!t.enabled("bars_marks") && TVSettings
.getBool("BarsMarksContainer.visibile", !1), i ? i.merge({
visible: c,
frozen: !1
}) : i = new o({
visible: c,
frozen: !1
}), r = this, i.visible.listeners().subscribe(null, function(e) {
l || a._containsData || !t.enabled("bars_marks") || TVSettings.setValue(
"BarsMarksContainer.visibile", !!e.value()), r._tooltip && r._tooltip
.removeAll()
}), s.call(this, e, i), this.onNeedRepaint = new n, this._requests = [], this
._marks = {}, this._loadedRange = null, this._getDataTimeout = null, this
._collectedRange = null, this._model.mainSeries().onSymbolIntervalChanged().subscribe(
this, this.clearMarks), this._model.mainSeries().onSymbolResolved().subscribe(this,
this.clearMarks), this._model.mainSeries().onTickmarksRangeChanged().subscribe(this,
this.getData), this._initialize(), this.pinnedTooltips = {}, this._tooltip = new h(
this._createTooltip.bind(this), this)
}
var s = i(1).LineDataSource,
a = i(15).isNumber,
l = i(230).BarsMarksContainerPaneView,
c = i(230).BarsMarksContainerRenderer,
h = i(913).TooltipRenderer,
u = i(7).getLogger("Chart.BarsMarksContainer");
inherit(r, s), r.prototype._constructor = "Child class must override this member", r.prototype
._initialize = function(t) {
throw Error("Child class must override this member")
}, r.prototype.onClicked = function() {
throw Error("Child class must override this member")
}, r.prototype._getData = function(t) {
throw Error("Child class must override this member")
}, r.prototype._createTooltip = function() {
throw Error("Child class must override this member")
}, r.prototype.updateDotData = function(t, e) {
return e
}, r.prototype.updatePlateData = function(t, e) {}, r.prototype._plateViewData = function(
t) {
return {}
}, r.prototype.pinTooltip = function(t, e) {
this.pinnedTooltips[t] = e
}, r.prototype.timeScale = function() {
return this._model.timeScale()
}, r.prototype.getIntervalInTicks = function() {
function t(t) {
if ((t = parseInt(t)) != t) throw new TypeError("Unexpected interval");
return 60 * t
}
var e = t(1440),
i = 7 * e,
o = 31 * e,
n = this._model.mainSeries().properties().interval.value();
switch (n) {
case "M":
return o;
case "W":
return i;
case "D":
return e;
default:
return t(n)
}
}, r.prototype._maxDate = Math.round(new Date(2037, 0, 1).getTime() / 1e3), r.prototype
.getVisibleTickmarksRange = function() {
var t, e;
return this.timeScale().isEmpty() ? {
start: 0,
end: 0
} : (t = this.timeScale().visibleBars(), t.lastBar() > this.timeScale().points()
.firstIndex() && t.firstBar() < this.timeScale().points().lastIndex() ? (e = t
.lastBar() < this.timeScale().points().lastIndex() ? this.timeScale()
.indexToTimePoint(t.lastBar()) : this._maxDate, t = {
start: this.timeScale().indexToTimePoint(Math.max(t.firstBar(), this
.timeScale().points().firstIndex())),
end: e
}, {
start: t.start ? t.start : void 0,
end: t.end ? t.end : void 0
}) : {
start: 0,
end: 0
})
}, r.prototype.getVisibleRangePlates = function() {
var t = [],
e = this.getVisibleTickmarksRange(),
i = this.getIntervalInTicks();
return $.each(this._marks, function(o, n) {
var r = n.tickmark;
r >= e.start && r <= e.end + i && t.push(n)
}), t
}, r.prototype.getPublishedPlates = function() {
var t = {},
e = this;
return is_authenticated ? ($.each(this.getVisibleRangePlates(), function(i, o) {
o.is_public && (e.pinnedTooltips[o.id] || o.user__id === user.id) && (t[
o.id] = o)
}), t) : t
}, r.prototype._maxPlatesPerBar = 10, r.prototype.filterDisplayedPlates = function(t) {
return t = t.reduce(function(t, e) {
var i = this._getIndex(e.tickmark);
return t[i] = t[i] || [], t[i].push(e), t
}.bind(this), {}), t = Object.keys(t).reduce(function(e, i) {
var o = t[i];
return o = o.sort(function(t, e) {
return e.views_count - t.views_count
}), o = o.slice(0, this._maxPlatesPerBar), e.concat(o)
}.bind(this), [])
}, r.prototype._layout = function(t) {
switch (t) {
default:
case 0:
return "up";
case 1:
return "down";
case 2:
return "up";
case 3:
case 4:
case 5:
case 6:
return "up"
}
}, r.prototype._theme = function(t) {
switch (t) {
default:
case 0:
return "neutral";
case 1:
return "green";
case 2:
return "red";
case 3:
return "yellow";
case 4:
return "blue";
case 5:
return "green";
case 6:
return "red"
}
}, r.prototype._offset = function(t, e) {
var i;
switch (t) {
default:
case "up":
i = e[TradingView.HIGH_PLOT];
break;
case "down":
i = e[TradingView.LOW_PLOT]
}
return this.priceScale().isPercent() && (i = this.priceScale().priceRange()
.convertToPercent(i, this.ownerSource().firstValue())), this.priceScale()
.priceToCoordinate(i)
}, r.prototype._getIndex = function(t) {
return this.timeScale().timePointToIndex(t)
}, r.prototype.getViewData = function() {
return {
barWidth: this.barWidth(),
plates: this.getPlatesViewData(),
tooltip: this._tooltip
}
}, r.prototype.barWidth = function() {
return this.timeScale().barSpacing()
}, r.prototype.getPlatesViewData = function() {
var t, e, i, o, n, r;
if (this._model.mainSeries().data().isEmpty()) return [];
t = this.filterDisplayedPlates(this.getVisibleRangePlates()), e = this, i = {}, o = this
._model.lastHittestData(), t = t.map(function(t) {
var n, r, s, a, l, c, h = this._getIndex(t.tickmark),
u = this._getBar(h);
return null !== u && (n = this._layout(t.direction), r = this._theme(t
.direction), s = o && o.id === t.id, a = this.timeScale()
.indexToCoordinate(h), l = this._offset(n, u), c = 0, h in i || (i[
h] = {
up: 0,
down: 0
}), c = i[h][n]++, TradingView.merge({
id: t.id,
x: a,
y: l,
order: c,
direction: n,
theme: r,
hovered: s,
pinned: !0 === e.pinnedTooltips[t.id],
user__id: t.user__id,
label: t.label,
labelFontColor: t.labelFontColor || "#444",
minSize: t.minSize || 5
}, this._plateViewData(t)))
}.bind(this)), t = t.filter(function(t) {
return !!t
}), n = t.filter(function(t) {
return !0 === t.hovered
});
for (r = 0; r < t.length; r++) null != n[0] && t[r].user__id === n[0].user__id && (t[r]
.highlightByAuthor = !0);
return t.sort(function(t, e) {
return t.hovered && !e.hovered ? 1 : 0
}), t
}, r.prototype._getBar = function(t) {
return this._model.mainSeries().data().valueAt(t)
}, r.prototype.paneViews = function(t) {
var e = this;
return this._properties.visible.value() ? [new l(this, t, function(t) {
return new c(t.getViewData(), e)
})] : []
}, r.prototype.dataWindowView = function() {
return null
}, r.prototype.priceAxisViews = function() {
return null
}, r.prototype.statusView = function() {
return null
}, r.prototype.updateAllViews = function() {}, r.prototype.pointsCount = function() {
return 0
}, r.prototype.properties = function() {
return this._properties
}, r.prototype._rangeDifference = function(t) {
return t = $.extend({}, t), this._loadedRange && (t.start < this._loadedRange.start ? t
.end = this._loadedRange.start : t.end > this._loadedRange.end && (t.start =
this._loadedRange.end)), t
}, r.prototype._rangeUnion = function(t, e) {
return t = $.extend({}, t), e && (t.start = Math.min(e.start, t.start), t.end = Math
.max(e.end, t.end)), t
}, r.prototype._pushGetDataStack = function(t) {
if (!a(t.start) || !a(t.end)) return void u.logError("Wrong tickmark range");
this._getDataTimeout && clearTimeout(this._getDataTimeout), this._collectedRange = this
._rangeUnion(t, this._collectedRange), this._getDataTimeout = setTimeout(
function() {
this._getData(this._collectedRange), this._getDataTimeout = this
._collectedRange = null
}.bind(this), 300)
}, r.prototype.roundRange = function(t) {
return {
start: Math.round(t.start),
end: Math.round(t.end)
}
}, r.prototype.refreshData = function() {
this.getData(this._lastRange)
}, r.prototype.getData = function(t) {
if (!a(t.start) || !a(t.end)) return void u.logError("Wrong range");
this._lastRange = t;
var t = $.extend({}, t);
t.end = this._maxDate, this._pushGetDataStack(t)
}, r.prototype._abortAllRequests = function() {
this._requests.forEach(function(t) {
t.abort()
}), this._requests = [], this._getDataTimeout && clearTimeout(this._getDataTimeout),
this._getDataTimeout = this._collectedRange = null
}, r.prototype.clearMarks = function() {
this._abortAllRequests(), this._marks = {}, this._loadedRange = null
}, e.BarsMarksContainer = r
}).call(e, i(5), i(25), i(10))
}, function(t, e, i) {
"use strict";
function o(t, e) {
var i = t.offset();
e.localX = e.pageX - i.left, e.localY = e.pageY - i.top
}
function n(t, e, i, o) {
new c(t, e, i, o)
}
var r, s, a, l, c;
Object.defineProperty(e, "__esModule", {
value: !0
}), i(13), i(43), r = i(351), s = i(9), a = 2, l = !1, c = function() {
function t(t, e, i, o) {
this._clickCount = 0, this._clickTimeoutId = null, this._touchContextMenuTimeout = null,
this._lastTouchPosition = {
x: 0,
y: 0
}, this._mouseMoveStartPosition = null, this._cancelClick = !1, this._$target = t, this
._handler = e, this._originalPreventDefault = i, this._preventDefault = !o && i, this
._verticalTouchScroll = o, this._init()
}
return t.prototype._mouseEnterHandler = function(t) {
this._$target.off("mousemove.chartgui"), this._$target.on("mousemove.chartgui", this
._mouseMoveHandler.bind(this)), Modernizr.touch && this._mouseMoveHandler(t),
this._processEvent(t, this._handler.mouseEnterEvent), this._preventDefaultIfNeeded(
t)
}, t.prototype._resetClickTimeout = function() {
null !== this._clickTimeoutId && clearTimeout(this._clickTimeoutId), this._clickCount =
0, this._clickTimeoutId = null
}, t.prototype._mouseMoveHandler = function(t) {
l && !Modernizr.touch || (this._processEvent(t, this._handler.mouseMoveEvent), this
._preventDefaultIfNeeded(t))
}, t.prototype._mouseMoveWithDownHandler = function(t) {
var e, i, o, n, r, l, c;
void 0 === t.button && (t.button = 0), e = !1, i = Modernizr.touch || t.originalEvent
.touches, i && (this._fixMouseTouchEvent(t, t.originalEvent), t.clientX = t.pageX, t
.clientY = t.pageY, this._verticalTouchScroll && (o = Math.abs(.5 * (t.pageX -
this._lastTouchPosition.x)), n = Math.abs(t.pageY - this
._lastTouchPosition.y), o <= n ? (e = !0, this._preventDefault = !1) :
this._preventDefault = this._originalPreventDefault), this
._lastTouchPosition.x = t.pageX, this._lastTouchPosition.y = t.pageY), r = s
.ensure(this._mouseMoveStartPosition), l = Math.abs(r.x - t.pageX), c = Math.abs(r
.y - t.pageY), l + c > 5 && (this._cancelClick = !0, i && this
._clearContextMenuTimeout()), t.button === a || e || this._processEvent(t, this
._handler.pressedMouseMoveEvent), this._preventDefaultIfNeeded(t)
}, t.prototype._mouseUpHandler = function(t) {
void 0 === t.button && (t.button = 0), (Modernizr.touch || t.originalEvent.touches) && (
t.pageX = this._lastTouchPosition.x, t.pageY = this._lastTouchPosition.y, t
.localX = this._lastTouchPosition.x, t.localY = this._lastTouchPosition.y, this
._clearContextMenuTimeout()), this._mouseMoveStartPosition = null, l = !1, $(
document.body).off("mousemove.chartgui"), $(document.body).off(
"mouseup.chartgui"), Modernizr.touch || t.originalEvent.touches ? ($(document
.body).off("touchmove.chartgui"), $(document.body).off("touchend.chartgui"),
this._mouseLeaveHandler(t)) : ($(document.body).off(
"mousemove.chartgui touchmove.chartgui"), $(document.body).off(
"mouseup.chartgui touchend.chartgui")), t.button !== a && (this._processEvent(t,
this._handler.mouseUpEvent), ++this._clickCount,
this._clickTimeoutId && this._clickCount > 1 ? (this._processEvent(t, this
._handler.mouseDoubleClickEvent), this._resetClickTimeout()) : this
._cancelClick || this._processEvent(t, this._handler.mouseClickEvent)), this
._preventDefaultIfNeeded(t), Modernizr.touch && this._mouseLeaveHandler(t)
}, t.prototype._clearContextMenuTimeout = function() {
null !== this._touchContextMenuTimeout && (clearTimeout(this._touchContextMenuTimeout),
this._touchContextMenuTimeout = null)
}, t.prototype._mouseDownHandler = function(t) {
if (void 0 === t.button && (t.button = 0), this._cancelClick = !1, (Modernizr.touch || t
.originalEvent.touches) && (this._fixMouseTouchEvent(t, t.originalEvent), this
._lastTouchPosition.x = t.pageX, this._lastTouchPosition.y = t.pageY, this
._mouseEnterHandler(t)), this._mouseMoveStartPosition = {
x: t.pageX,
y: t.pageY
}, Modernizr.touch ? ($(document.body).off("touchmove.chartgui"), $(document.body)
.off("touchend.chartgui"), $(document.body).on("touchmove.chartgui", this
._mouseMoveWithDownHandler.bind(this)), $(document.body).on(
"touchend.chartgui", this._mouseUpHandler.bind(this)), this
._clearContextMenuTimeout(), this._touchContextMenuTimeout = setTimeout(this
._contextMenuHandler.bind(this, t), 500)) : ($(document.body).off(
"mousemove.chartgui touchmove.chartgui"), $(document.body).off(
"mouseup.chartgui touchend.chartgui"), $(document.body).on(
"mousemove.chartgui touchmove.chartgui", this._mouseMoveWithDownHandler
.bind(this)), $(document.body).on("mouseup.chartgui touchend.chartgui", this
._mouseUpHandler.bind(this))), l = !0, t.button !== a && (this._processEvent(t,
this._handler.mouseDownEvent), this._clickTimeoutId || (this._clickCount =
0, this._clickTimeoutId = setTimeout(this._resetClickTimeout.bind(this),
500))), this._preventDefaultIfNeeded(t), this._preventDefault) try {
window.focus()
} catch (t) {}
}, t.prototype._init = function() {
var t = this;
this._$target.mouseenter(this._mouseEnterHandler.bind(this)), this._$target.on(
"touchcancel", this._clearContextMenuTimeout.bind(this)), this._$target.on(
"touchstartoutside mousedownoutside",
function(e) {
t._handler.mouseDownOutsideEvent && t._handler.mouseDownOutsideEvent(e, t
._$target)
}), this._$target.mouseleave(this._mouseLeaveHandler.bind(this)), this._$target
.contextMenu && this._$target.contextMenu(this._contextMenuHandler.bind(this)),
Modernizr.touch ? (this._$target.on("touchstart.chartgui", this._mouseDownHandler
.bind(this)), this._initGestureEvents()) : this._$target.on(
"mousedown.chartgui touchstart.chartgui", this._mouseDownHandler.bind(this))
}, t.prototype._mouseLeaveHandler = function(t) {
this._$target.off("mousemove.chartgui touchmove.chartgui"), this._processEvent(t, this
._handler.mouseLeaveEvent), this._preventDefaultIfNeeded(t)
}, t.prototype._contextMenuHandler = function(t) {
this._processEvent(t, this._handler.contextMenuEvent), this._preventDefaultIfNeeded(t),
this._cancelClick = !0
}, t.prototype._processEvent = function(t, e) {
e && (o(this._$target, t), e.call(this._handler, t, this._$target))
}, t.prototype._preventDefaultIfNeeded = function(t) {
this._preventDefault && t.preventDefault()
}, t.prototype._initGestureEvents = function() {
var t = this,
e = new r(this._$target.get(0));
e.get("pinch").set({
enable: !0
}), e.on("pinchstart", function(e) {
t._handler.gestureStartEvent && t._handler.gestureStartEvent(e, t._$target),
t._clearContextMenuTimeout()
}), e.on("pinchmove", function(e) {
t._handler.gestureChangeEvent && t._handler.gestureChangeEvent(e, t
._$target)
}), e.on("pinchend pinchcancel", function(e) {
t._handler.gestureEndEvent && t._handler.gestureEndEvent(e, t._$target)
})
}, t.prototype._fixMouseTouchEvent = function(t, e) {
var i = e.touches[0].pageX,
o = e.touches[0].pageY;
t.pageX = i, t.pageY = o, t.localX = i, t.localY = o
}, t
}(), e.setMouseEventHandler = n
}, function(t, e, i) {
"use strict";
var o = i(353),
n = {
instances: [],
createMenu: function(t, e, i) {
var n = new o(t, e, i);
return this.instances.push(n), n
},
hideAll: function() {
for (var t in this.instances) this.instances[t].hide()
}
};
t.exports = n
}, function(t, e, i) {
"use strict";
var o, n, r, s, a;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(2), r = i(14), s = i(1026), a = function(t) {
function e() {
return null !== t && t.apply(this, arguments) || this
}
return o.__extends(e, t), e.prototype.render = function() {
var t = this.props,
e = t.children,
i = t.className,
a = o.__rest(t, ["children", "className"]);
return n.createElement("div", o.__assign({
className: r(i, s.wrap)
}, a), e)
}, e
}(n.PureComponent), e.ToolWidgetRowWrap = a
}, function(t, e, i) {
function o() {
this._data = null, this._hittest = new n(n.MOVEPOINT)
}
var n, r, s, a;
i(64), n = i(11), r = i(74).LineEnd, s = i(44).distanceToSegment, a = i(45).extendAndClipLineSegment, o
.prototype.setData = function(t) {
this._data = t
}, o.prototype.setHitTest = function(t) {
this._hittest = t
}, o.prototype.drawArrow = function(t, e, i, o) {
var n, r, s, a, l, c, h, u, d;
e.subtract(t).length() < 1 || (n = e.subtract(t).normalized(), r = 5 * o, s = n.scaled(r), a = e
.subtract(s), l = n.transposed(), c = 3 * o, h = l.scaled(c), u = a.add(h), d = a
.subtract(h), CanvasEx.drawLine(i, Math.round(u.x), Math.round(u.y), e.x, e.y), CanvasEx
.drawLine(i, Math.round(d.x), Math.round(d.y), e.x, e.y))
}, o.prototype.extendAndClipLineSegment = function(t, e) {
return a(t, e, this._data.width, this._data.height, this._data.extendleft, this._data
.extendright)
}, o.prototype.drawCircle = function(t, e, i, o) {
o = $.extend({
fillStyle: "#000000"
}, o), e.save(), e.fillStyle = o.fillStyle, e.beginPath(), e.arc(t.x, t.y, i, 0, 2 * Math
.PI, !1), e.fill(), o.strokeWidth && (e.lineWidth = o.strokeWidth, e.stroke()), e
.restore()
}, o.prototype.draw = function(t) {
var e, i, o, n, r;
null === this._data || this._data.points && this._data.points.length < 2 || this._data
.floatPoints && this._data.floatPoints.length < 2 || (t.lineCap = "butt", t.strokeStyle =
this._data.color, t.lineWidth = this._data.linewidth, t.lineStyle = this._data
.linestyle, e = this._data.floatPoints || this._data.points, i = e[0], o = e[1], this
._data.overlayLineEndings ? n = [$.extend(!0, {}, i), $.extend(!0, {}, o)] : this
.drawEnds(t, [i, o]), r = this.extendAndClipLineSegment(i, o), null !== r && this._data
.linewidth > 0 && CanvasEx.drawLine(t, r[0].x, r[0].y, r[1].x, r[1].y), this._data
.overlayLineEndings && this.drawEnds(t, n))
}, o.prototype.drawEnds = function(t, e) {
var i = e[0],
o = e[1];
switch (this._data.leftend) {
case r.Arrow:
this.drawArrow(o, i, t, t.lineWidth);
break;
case r.Circle:
this.drawCircle(i, t, t.lineWidth, this._data.endstyle)
}
switch (this._data.rightend) {
case r.Arrow:
this.drawArrow(i, o, t, t.lineWidth);
break;
case r.Circle:
this.drawCircle(o, t, t.lineWidth, this._data.endstyle)
}
}, o.prototype.hitTest = function(t) {
var e, i, o, n, r, a;
return null === this._data || this._data.points && this._data.points.length < 2 ? null : this
._data.floatPoints && this._data.floatPoints.length < 2 ? null : (e = TradingView.isMobile
.any() ? 24 : 3, i = this._data.floatPoints || this._data.points, o = i[0], n = i[1],
r = this.extendAndClipLineSegment(o, n), null !== r && (a = s(r[0], r[1], t), a
.distance <= e) ? this._hittest : null)
}, e.TrendLineRenderer = o
}, function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
}), i(12),
function(t) {
t.LINE = "line", t.COLORER = "colorer", t.BAR_COLORER = "bar_colorer", t.BG_COLORER =
"bg_colorer", t.TEXT_COLORER = "text_colorer", t.OHLC_COLORER = "ohlc_colorer", t.SHAPES =
"shapes", t.CHARS = "chars", t.ARROWS = "arrows", t.DATAOFFSET = "dataoffset", t.OHLC_OPEN =
"ohlc_open", t.OHLC_HIGH = "ohlc_high", t.OHLC_LOW = "ohlc_low", t.OHLC_CLOSE = "ohlc_close"
}(e.PlotTypes || (e.PlotTypes = {})),
function(t) {
t.BARS = "ohlc_bars", t.CANDLES = "ohlc_candles"
}(e.OHLCType || (e.OHLCType = {})),
function(t) {
t[t.Line = 0] = "Line", t[t.Histogram = 1] = "Histogram", t[t.Cross = 3] = "Cross", t[t.Area =
4] = "Area", t[t.Columns = 5] = "Columns", t[t.Circles = 6] = "Circles", t[t
.LineWithBreaks = 7] = "LineWithBreaks", t[t.AreaWithBreaks = 8] = "AreaWithBreaks", t[t
.StepLine = 9] = "StepLine"
}(e.PlotType || (e.PlotType = {})),
function(t) {
t[t.Right = 0] = "Right", t[t.Left = 1] = "Left", t[t.None = 2] = "None"
}(e.ScaleType || (e.ScaleType = {})), e.plotShapesData = {
shape_arrow_down: {
guiName: $.t("Arrow Down"),
id: "shape_arrow_down",
paneRendererClass: "PaneRendererArrowDown",
pineName: "shape.arrowdown"
},
shape_arrow_up: {
guiName: $.t("Arrow Up"),
id: "shape_arrow_up",
paneRendererClass: "PaneRendererArrowUp",
pineName: "shape.arrowup"
},
shape_circle: {
guiName: $.t("Circle"),
id: "shape_circle",
paneRendererClass: "PaneRendererCircleShape",
pineName: "shape.circle"
},
shape_cross: {
guiName: $.t("Cross"),
id: "shape_cross",
paneRendererClass: "PaneRendererCrossShape",
pineName: "shape.cross"
},
shape_diamond: {
guiName: $.t("Diamond"),
id: "shape_diamond",
paneRendererClass: "PaneRendererDiamond",
pineName: "shape.diamond"
},
shape_flag: {
guiName: $.t("Flag"),
id: "shape_flag",
paneRendererClass: "PaneRendererFlagShape",
pineName: "shape.flag"
},
shape_label_down: {
guiName: $.t("Label Down"),
id: "shape_label_down",
paneRendererClass: "PaneRendererLabelDown",
pineName: "shape.labeldown"
},
shape_label_up: {
guiName: $.t("Label Up"),
id: "shape_label_up",
paneRendererClass: "PaneRendererLabelUp",
pineName: "shape.labelup"
},
shape_square: {
guiName: $.t("Square"),
id: "shape_square",
paneRendererClass: "PaneRendererSquare",
pineName: "shape.square"
},
shape_triangle_down: {
guiName: $.t("Triangle Down"),
id: "shape_triangle_down",
paneRendererClass: "PaneRendererTriangleApexDown",
pineName: "shape.triangledown"
},
shape_triangle_up: {
guiName: $.t("Triangle Up"),
id: "shape_triangle_up",
paneRendererClass: "PaneRendererTriangleApexUp",
pineName: "shape.triangleup"
},
shape_xcross: {
guiName: $.t("X Cross"),
id: "shape_xcross",
paneRendererClass: "PaneRendererXCross",
pineName: "shape.xcross"
}
}
}, function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
});
var o = i(211);
e.createConfirmDialog = o.createConfirmDialog
}, , , , , , , , , function(t, e, i) {
"use strict";
function o(t) {
for (var e = 0; e < c.length; e++)
if (c[e].name === t) return e;
return -1
}
function n(t, e) {
var i = {
name: t,
func: e
},
n = o(i.name);
n > -1 ? c[n] = i : c.push(i)
}
function r(t) {
c.forEach(function(e, i) {
e.name === t && c.splice(i, 1)
})
}
function s(t, e) {
var i = {
name: t,
func: e
},
n = o(i.name);
n > -1 && c.splice(n, 1), c.unshift(i)
}
function a() {
h = !0
}
function l() {
h = !1
}
var c, h;
Object.defineProperty(e, "__esModule", {
value: !0
}), i(13), c = [], h = !1, $(window).on("keypress", function(t) {
if (!h)
for (var e = c.length - 1; e >= 0 && !0 !== c[e].func(t); e--);
}), e.registerListener = n, e.removeListener = r, e.pushBackListener = s, e.disable = a, e.enable =
l
}, function(t, e, i) {
"use strict";
function o(t) {
return f.Interval.parse(t).value()
}
function n(t) {
var e, i, n, r;
return t = o(t), e = m.supportedResolutions.value(), i = !1, void 0 !== e ? (n = e.map(o), i = -
1 !== n.indexOf(t)) : i = !0, r = m.intraday.value(), r ? i : f.Interval.isDWM(t) && i
}
function r(t) {
return void 0 === t && (t = []), t.concat(_.enabled("star_some_intervals_by_default") ? ["1", "30",
"60"
] : []).filter(function(t, e, i) {
return i.indexOf(t) === e
})
}
function s(t) {
var e = {};
return t.forEach(function(t) {
return e[t] = 1
}), e
}
function a(t) {
var e = new f.Interval(t);
return e.kind() !== f.Interval.MINUTES ? g[e.letter()] * (e.multiplier() || 1) : e.multiplier() || 0
}
function l(t) {
return t.sort(function(t, e) {
return a(t) - a(e)
})
}
function c(t) {
return void 0 === t && (t = []), l(t)
}
function h(t, e) {
if (e) {
var i = " ";
switch (t) {
case f.Interval.DAYS:
i += window.t("day", {
plural: "days",
count: e
});
break;
case f.Interval.WEEKS:
i += window.t("week", {
plural: "weeks",
count: e
});
break;
case f.Interval.MONTHS:
i += window.t("month", {
plural: "months",
count: e
});
break;
case f.Interval.SECONDS:
i += window.t("second", {
plural: "seconds",
count: e
});
break;
case f.Interval.MINUTES:
i += window.t("minute", {
plural: "minutes",
count: e
});
break;
case f.Interval.HOURS:
i += window.t("hour", {
plural: "hours",
count: e
});
break;
default:
i += t
}
return i
}
switch (t) {
case f.Interval.MINUTES:
return window.t("m", {
context: "interval_short"
});
case f.Interval.HOURS:
return window.t("h", {
context: "interval_short"
});
case f.Interval.DAYS:
return window.t("D", {
context: "interval_short"
});
case f.Interval.WEEKS:
return window.t("W", {
context: "interval_short"
});
case f.Interval.MONTHS:
return window.t("Mo", {
context: "interval_short"
});
default:
return ""
}
}
function u(t) {
return t >= 60 && !(t % 60)
}
function d(t) {
var e = f.Interval.parse(t),
i = e.multiplier(),
o = e.kind();
if (!e.isValid() || void 0 === i) throw new TypeError("Can't translate invalid interval");
return o === f.Interval.MINUTES && u(i) && (i = ~~(i / 60), o = f.Interval.HOURS), {
multiplier: "" + i,
shortKind: h(o),
hint: i + " " + h(o, i),
mayOmitMultiplier: e.isDWM() && 1 === i
}
}
function p(t) {
var e = d(t);
return "" + e.multiplier + e.shortKind
}
var _, f, m, g, v;
Object.defineProperty(e, "__esModule", {
value: !0
}), i(12), _ = i(5), f = i(34), m = i(76), e.normalizeIntervalString = o, e.isIntervalAvailable = n,
e.groupTranslations = (v = {}, v[f.Interval.SECONDS] = window.t("Second", {
context: "interval_group_name"
}), v[f.Interval.MINUTES] = window.t("Minute", {
context: "interval_group_name"
}), v[f.Interval.HOURS] = window.t("Hour", {
context: "interval_group_name"
}),
v[f.Interval.DAYS] = window.t("Day", {
context: "interval_group_name"
}), v[f.Interval.WEEKS] = window.t("Week", {
context: "interval_group_name"
}), v[f.Interval.MONTHS] = window.t("Month", {
context: "interval_group_name"
}), v), e.getDefaultFavoriteIntervals = r, e.convertIntervalsToObject = s, g = {
S: 1 / 60,
D: 1440,
W: 10080,
M: 43200
}, e.sortIntervals = l, e.getIntervals = c, e.isHour = u, e.getTranslatedModel = d, e
.getTranslated = p
}, function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
}), e.LEFT_ARROW = 37, e.UP_ARROW = 38, e.RIGHT_ARROW = 39, e.DOWN_ARROW = 40, e.ENTER = 13, e.ESC =
27, e.SPACE = 32, e.SLASH = 47
}, function(t, e, i) {
"use strict";
(function(e) {
function o(t) {
this._data = t, this._textWidthCache = new l
}
function n(t, e, i, o, n) {
this._model = t, this._source = e, this._plotIndex = i, this._getterName = o || "symbol",
this._propertyName = n, this._cache = {}, this._invalidated = !0, this
._rendererData = {}
}
var r = i(32),
s = r.parseRgb,
a = r.rgbToBlackWhiteString,
l = i(155),
c = i(53).CompositeRenderer,
h = i(156).makeFont,
u = i(30);
o.prototype.hitTest = function(t) {
return null
}, o.prototype.draw = function(t) {
var e, i, o, n, r, s, a, l, c, h;
this._data.visible && (this._textWidthCache.font !== this._data.font && (this
._textWidthCache.reset(), this._textWidthCache.font = this._data.font), t
.font = this._data.font, e = this._data.fontSize, i = Math.floor(e / 4.5), o =
Math.ceil(e / 4.5), n = Math.ceil(e / 3), r = Math.ceil(this._textWidthCache
.measureText(t, this._data.text)), s = Math.round(e / 10), a = e + i + o,
l = r + 2 * n, c = this._data.x - .5, "right" === this._data.align && (c -= l),
h = this._data.y - Math.floor(e / 2) - i - .5, t.fillStyle = u
.resetTransparency(this._data.backColor), t.fillRect(c, h, l, a), t.fillStyle =
this._data.color, t.textAlign = "left", t.fillText(this._data.text, c + n, h +
i + e - s))
}, n.prototype.isPropertyEnabled = function() {
return this._model.properties().scalesProperties[this._propertyName].value()
}, n.prototype.update = function() {
this._invalidated = !0
}, n.prototype.updateImpl = function() {
var t, i, o, n, r, l, u, d, p = this._rendererData;
if (p.visible = !1, p.text = "", this.isPropertyEnabled() && this._source.properties()
.visible.value() && (t = this._source.lastValueData(this._plotIndex, e.enabled(
"price_scale_always_last_bar_value")), !t.noData)) {
if (i = this._model.paneForSource(this._source), o = "right", i.leftPriceScale() ===
this._source.priceScale() && (o = "left"), n = this._model.properties(), r = !i
.leftPriceScale().mainSource() || !i.rightPriceScale().mainSource(), r && n
.scalesProperties.showLeftScale.value() && !n.scalesProperties.showRightScale
.value() && (o = "left"), !r) {
if ("left" === o && !n.scalesProperties.showLeftScale.value()) return new c;
if ("right" === o && !n.scalesProperties.showRightScale.value()) return new c
}
l = t.coordinate, u = this._source.m_data.m_series && this._source.m_data.m_series
.properties().style.value() === TradingView.Series.STYLE_HEIKEN_ASHI, this
._source.lastPriceLabelFixedCoordinate && !u && "showSymbolLabels" === !this
._propertyName && (l = this._source.lastPriceLabelFixedCoordinate(this
._plotIndex) || l), t.color !== p.backColor && (p.backColor = this._source
.priceLineColor(t.color), d = a(s(p.backColor), 160), p.color = "black" ===
d ? "white" : "black"), p.text = this._source[this._getterName](this
._plotIndex), p.visible = "" !== p.text,
p.align = o, p.x = "right" === o ? this._model.timeScale().width() : 0, p.y = l,
p.fontSize = this._model.properties().scalesProperties.fontSize.value(), p
.font = h(p.fontSize, "Arial", "")
}
}, n.prototype.renderer = function() {
return this._invalidated && (this.updateImpl(), this._invalidated = !1), this
._renderer || (this._renderer = new o(this._rendererData)), this._renderer
}, t.exports = n
}).call(e, i(5))
}, function(t, e, i) {
"use strict";
(function(t) {
function o(t, e) {
var i, o, n, r, l;
if (s.call(this), this._study = t, this._model = e, i = t.metaInfo().plots) {
for (o = 0; o < i.length; ++o)
if (!(this._study.isSelfColorerPlot(o) || this._study.isBarColorerPlot(o) || this
._study.isBgColorerPlot(o) || this._study.isDataOffsetPlot(o) || this._study
.isOHLCColorerPlot(o))) {
if (n = i[o].id, "Compare@tv-basicstudies" === this._study.metaInfo().id) r =
new a(this._study.inputsForGUI()[1], "");
else {
l = this._study.title();
try {
l = this._study.properties().styles[n].title.value()
} catch (t) {}
r = new a(l, "")
}
r.plotId = n, r.plotIndex = o, this._items.push(r)
} this.update(), this._invalidated = !0
}
}
function n(t, e) {
o.call(this, t, e)
}
var r = i(157),
s = r.DataWindowView,
a = r.DataWindowItem,
l = i(19).PlotRowSearchMode;
inherit(o, s), o.prototype.update = function() {
this._invalidated = !0
}, o.prototype._updateImpl = function() {
var e, i, o, n, r, s, a, c, h, u, d, p, _, f, m, g, v, y, b, S, w, T, C = !0;
for (this._header = this._study.title(C), this._title = this._study.title(), e = this
._study.isVisible() ? $.t("n/a") : "", i = 0; i < this._items.length; ++i) this
._items[i].setValue(e);
if (t.enabled("hide_last_na_study_output") && this._items.length && this._items[this
._items.length - 1].setValue(""), !this._model.timeScale().isEmpty()) {
if (o = this._study.metaInfo().plots, n = null, r = {}, o)
for (i = 0; i < o.length; i++)(this._study.isSelfColorerPlot(i) || this._study
.isOHLCColorerPlot(i)) && (r[o[i].target] = {
index: i
}, r[o[i].target].palette = this._study.metaInfo().palettes[o[i]
.palette], r[o[i].target].paletterProps = this._study.properties()
.palettes[o[i].palette]);
for (s = this._study.data().size() - 1, a = this._model.crossHairSource()
.appliedIndex(), c = this._study.formatter(), h = {}, i = 0; i < this._items
.length; ++i) u = this._items[i], d = u.plotId, p = u.plotIndex, _ = this._study
.offset(d), void 0 !== (f = isNumber(a) ? this._study.nearestIndex(a - _, l
.NearestLeft) : s) && (m = h[d], void 0 === m && (m = this._study
.getMinFirstBarIndexForPlot(d), h[d] = m), m > f || (g = this._study
.data().last(), null !== (v = this._study.data().valueAt(f) || (null !==
g ? g.value : null)) && (y = v[p + 1], isNumber(y) && (u.setValue(c
.format(y)), b = this._study.properties().styles[d].color
.value(), this._study.isOHLCSeriesPlot(p) && (d = o[p].target,
b = this._study.properties().ohlcPlots[d].color.value()), r[
d] && v.length > r[d].index + 1 ? (S = v[r[d].index + 1],
void 0 !== S && null !== S ? (n = r[d].palette, w = r[d]
.paletterProps, T = n.valToIndex ? n.valToIndex[S] : S,
this._items[i].setColor(w.colors[T].color.value())) :
this._items[i].setColor(b)) : this._items[i].setColor(b)))))
}
}, o.prototype.items = function() {
return this._invalidated && (this._updateImpl(), this._invalidated = !1), this._items
}, inherit(n, o), e.StudyDataWindowView = o, e.DataVendorStudyDataWindowView = n
}).call(e, i(5))
}, function(t, e, i) {
"use strict";
function o(t, e) {
n.call(this, e), this._study = t,
this._inputValueReplacements = {
NONE: "Default"
}
}
var n = i(329);
inherit(o, n), o.prototype.color = function() {
return this._study._failed || this._study.metaInfo && this._study.metaInfo().isTVScriptStub ?
"#ff0000" : n.prototype.color.call(this)
}, o.prototype.update = function() {
this._study._failed ? this._text = this._study.title(!0, this._inputValueReplacements) + ": " +
this._study.status() : this._text = this._study.title(!0, this._inputValueReplacements) +
" " + this._study.status()
}, t.exports = o
}, function(t, e, i) {
"use strict";
var o, n, r;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(135), n = i(177), r = function() {
function t(t) {
void 0 === t && (t = !1), this._dwm = t
}
return t.prototype.format = function(t) {
var e = (new n.DateFormatter).format(t);
return this._dwm || (e += " " + (new o.TimeFormatter).format(t)), e
}, t.prototype.formatLocal = function(t) {
var e = (new n.DateFormatter).formatLocal(t);
return this._dwm || (e += " " + (new o.TimeFormatter).formatLocal(t)), e
}, t
}(), e.DateTimeFormatter = r
}, function(t, e, i) {
"use strict";
function o(t, e, i) {
a.call(this, t, e), this.properties().listeners().subscribe(this, o.prototype.changeStyles), this
._beingCreatedPaneView = new n(this, t), this._anchorsPaneView = new r(this, t), this
._constructor = i, this._studyId = null, this._nonseriesdata = null, this._indexes = null, this
._metaInfo = null, this._graphics = null, this._inputs = null
}
function n(t, e) {
l.call(this, t, e), this._lineRenderer1 = new c, this._lineRenderer2 = new c, this._medianRenderer =
new h
}
function r(t, e) {
l.call(this, t, e)
}
var s = i(9).ensureNotNull,
a = i(1).LineDataSource,
l = i(371).LineSourcePaneView,
c = i(376).VerticalLineRenderer,
h = i(110).TrendLineRenderer,
u = i(131).SelectionRenderer,
d = i(53).CompositeRenderer,
p = i(219),
_ = i(19).PlotList,
f = i(33),
m = i(3).propertyPages,
g = i(74).LineEnd;
inherit(o, a), o.prototype.pointsCount = function() {
throw Error("Reimplement this in a child class")
}, o.prototype.title = function() {
return this._metaInfo.description
}, o.prototype.studyId = function() {
return this._metaInfo.id
}, o.prototype._requestStudy = function() {
throw Error("Reimplement this in a child class")
}, o.prototype.changeStyles = function() {
var t, e, o, n = i(84);
if (this._inputs) {
t = n.splitInputs(this.properties().inputs.state()), e = t.obj;
for (o in e)
if (e[o] !== this._inputs[o]) {
this._inputs = e, this._requestStudy(), this._properties.lastUpdateTime.setValue((
new Date).valueOf());
break
}
} else t = n.splitInputs(this.properties().inputs.state()), this._inputs = TradingView.clone(t
.obj), this._requestStudy(), this._properties.lastUpdateTime.setValue((new Date)
.valueOf())
}, o.prototype._checkTurnaround = function(t) {
return t === this._turnaround || t === this._model.mainSeries()._turnaround || t === this._model
.mainSeries()._turnaround + "_" + this._turnaround
}, o.prototype.stop = function() {
a.prototype.stop.call(this), this._studyId && (this._model.chartApi().removeStudy(this
._studyId), this.disconnect())
}, o.prototype.onData = function(t) {
throw Error("Reimplement this in a child class")
}, o.prototype._correctedPoint = function(t) {
var e = s(this._model.mainSeries().bars().firstIndex()),
i = s(this._model.mainSeries().bars().lastIndex());
return t.index = Math.max(t.index, e), t.index = Math.min(t.index, i), t
},
o.prototype.addPoint = function(t) {
return a.prototype.addPoint.call(this, this._correctedPoint(t))
}, o.prototype.setLastPoint = function(t) {
return a.prototype.setLastPoint.call(this, this._correctedPoint(t))
}, o.prototype.move = function(t) {}, o.prototype.clearData = function() {
void 0 !== this.m_data && (this.m_data = new _(this._plotFields)), this._nonseriesdata = null,
this._indexes = null, this._graphics = new p(this._metaInfo), this.updateAllViews()
}, o.prototype.state = function(t) {
var e = a.prototype.state.call(this, t);
return t && (void 0 !== this.m_data && (e.data = this.m_data.state()), e.nonseriesdata = this
._nonseriesdata, e.nonseriesindexes = this._indexes, e.graphics = this._graphics
.graphics()), this.metaInfo() instanceof f ? e.metaInfo = this.metaInfo().state() : (e
.metaInfo = $.extend({}, this.metaInfo()), e.metaInfo.id = f.parseIdString(e.metaInfo
.id + (e.metaInfo.version ? "-" + e.metaInfo.version : "")).fullId), e
}, o.prototype.restoreData = function(t) {
void 0 !== this.m_data && void 0 !== t.data && this.m_data.restoreState(t.data), this
._nonseriesdata = t.nonseriesdata ? t.nonseriesdata : null, this._indexes = t
.nonseriesindexes ? t.nonseriesindexes : null, this._graphics.setGraphics(t.graphics ? t
.graphics : p.emptyGraphics())
}, o.prototype.setPoint = function(t, e) {
this._nonseriesdata = null, this._indexes = null, a.prototype.setPoint.call(this, t, this
._correctedPoint(e))
}, o.prototype.disconnect = function() {
this._studyId = 0
}, o.prototype.graphics = function() {
return this._graphics.graphics()
}, o.prototype.firstValue = function() {
return this._model.mainSeries().firstValue()
}, o.prototype.metaInfo = function() {
return this._metaInfo
}, o.prototype.getMinFirstBarIndexForPlot = function() {
return -1 / 0
}, o.prototype.getInputsPropertyPage = function() {
return m.StudyLineDataSourcePropertyPage
}, o.prototype.getStylesPropertyPage = function() {
return m.StudyStylesPropertyPage
}, o.prototype.paneViews = function(t) {
var e, i = [];
return this._isReady() ? null !== (e = a.prototype.paneViews.call(this, t)) && (i = i.concat(
e)) : i.push(this._beingCreatedPaneView), i.push(this._anchorsPaneView), i
}, o.prototype._isReady = function() {
return !0
}, inherit(n, l), n.prototype.renderer = function() {
var t, e, i, o, n, r, s, a;
return this._invalidated && (this._updateImpl(), this._invalidated = !1), this._points.length <
2 ? null : (t = new d, e = this._points[0], i = this._points[1], o = this._model.timeScale()
.width(), n = this._source.priceScale().height(), r = {}, r.width = o, r.height = n, r
.points = [e], r.color = "#808080", r.linewidth = 1, r.linestyle = CanvasEx
.LINESTYLE_SOLID, this._lineRenderer1.setData(r), t.append(this._lineRenderer1), s = {},
s.width = o, s.height = n, s.points = [i], s.color = "#808080", s.linewidth = 1, s
.linestyle = CanvasEx.LINESTYLE_SOLID, this._lineRenderer2.setData(s), t.append(this
._lineRenderer2), a = {
points: [e, i],
width: this._model.timeScale().width(),
height: this._source.priceScale().height(),
color: "#808080",
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_SOLID,
extendleft: !1,
extendright: !1,
leftend: g.Normal,
rightend: g.Normal
}, this._medianRenderer.setData(a), t.append(this._medianRenderer), t)
}, inherit(r, l), r.prototype.renderer = function() {
this._invalidated && (this._updateImpl(), this._invalidated = !1);
var t = new d;
return this.isAnchorsRequired() && (t.append(new u({
points: this._points
})), t.append(this.createLineAnchor({
points: this._points
}))), t
}, e.StudyLineDataSource = o
}, function(t, e, i) {
"use strict";
function o(t, e) {
var o = e || new c("linetoolarrowmark");
l.call(this, t, o), i.e(1).then(function(e) {
var o = i(406).TextPaneView,
n = i(407).MarkPaneView,
r = [new n(this, t, this.image, this.width, this.height, this.offsetX, this
.offsetY)],
s = this._createTextPaneView(o);
null !== s && r.push(s), this._setPaneViews(r)
}.bind(this).bind(null, i)).catch(i.oe)
}
function n(t, e) {
this._constructor = "LineToolArrowMarkLeft", o.call(this, t, e)
}
function r(t, e) {
this._constructor = "LineToolArrowMarkUp", o.call(this, t, e)
}
function s(t, e) {
this._constructor = "LineToolArrowMarkRight", o.call(this, t, e)
}
function a(t, e) {
this._constructor = "LineToolArrowMarkDown", o.call(this, t, e)
}
var l = i(1).LineDataSource,
c = i(6).DefaultProperty,
h = i(3).propertyPages;
inherit(o, l), o.prototype.width = 21, o.prototype.height = 21, o.prototype.offsetX = 0, o.prototype
.offsetY = 0, o.prototype.paneViews = function(t) {
var e = l.prototype.paneViews.call(this, t);
return null !== e && this._textPaneView && e.push(this._textPaneView), e
}, o.prototype.pointsCount = function() {
return 1
}, o.prototype.title = function() {
return "Arrow Mark"
}, o.prototype.getStylesPropertyPage = function() {
return h.LineToolArrowMarkStylesPropertyPage
}, o.prototype._createTextPaneView = function(t) {
return null
}, inherit(n, o), n.prototype.image = new Image, n.prototype.image.src =
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAYAAACpF6WWAAAB50lEQVR4AWMgETAKKAgIAGkQ5mCgAmCWdtTWV4yxvgFkWwKxOKUGssr5Gccrx9t+Vk6w+w/kxwKxIrmGMTKIivIohFvONKsI+e/cl/ofamgGECuTYyCTqJ2mqlK01Vnr+uj/HjNy/1v1J8AMzSTHUBYZP6MgpTjb97bNsf9dpmf9N++J/W/UEQEztAiIbUEGo2EpIObE8C4oVuVDzLuBmv869aT8t5+c+t+0K/q/YXs4GGsWeIAMRscwy/yhBiO8K2ijJKcYZXXYuj7qv/u0nP/W/Yn/jTsjQYYRwliDhUXKy8BVKdbmuW1T7H+3Gdn/LXrjQN4FaSDLUBa5MItyoOAvp67k/45T0pC9S56hSrHWhY4tif9D5pUDXZjz36w7Blkx+S5VDLNoBUWMY3fKfwdExMAw+WEq7Wvkoxhn+waUhFwRSYhcQxGxL26jpqQYbX3CBpjY3aeDYj+BothHpFNxcW75cIvJpmXB/516Uv/bT0r5b9IVRUY6xQSssr6GkcAc9dGuNe6/y7RMMnMUJmCWcNTSBgbHZeuG6P+eM/P+W/VRlPcRwSGoJMgvH265yKIq/L9LfzqKoZSXp0Em6cDy9BvU0Dhyy1PM4PAwMFWKs7kFZFsBsQQDlQAjr4a0MJAWxFdHAQAcI3sGHsO1dgAAAABJRU5ErkJggg==",
n.prototype.offsetX = 1, n.prototype.offsetY = -10, n.prototype.title = function() {
return "Arrow Mark Left"
}, n.prototype._createTextPaneView = function(t) {
var e = new t(this, this._model, 22, -3, "middle", "left");
return e.disableSelection(), e
}, inherit(r, o), r.prototype.image = new Image,
r.prototype.image.src =
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAYAAACpF6WWAAACBklEQVR4AWMgErAoxVoXgmgGKgEWxTCLVseWxP9yYRbl1DCYSdrXyEc5we5vyLzy/0D6l5SXgStInFwDGcVt1JQU42zfOHan/HebkfPfqSv5v1KszXNBGyU5kDzpRoqLcytGW5+wbY797zA59b9Zd8x/xylp/22bYv8rRlkdBqrgINVIVvlwi8k29dH/Xadn/Tftiv5v2B4Opt1mZP+3ro/6Lx9i3k1K+DLL+hpGmpYF/3efnvPfvCcWZCAcW/TG/XeflvMfFM4yfkZBxIQvo4SjlrZSnO1Hp57U/9b9Cf+NOiKQDQXxgeKJ/516Uv4D1b0XtdNUxRu+gkqC/MBwvGzXGvffflLKf+POSISBCAwWtweGMyi8laKtzjKIivLgCUfLRdYN0f9dpmX+N+mKghiCieHh6wIMb2tguCuEW84E6ccIR7kgk3SLqvD/njPzYOFICIPVeczI/W9WEfJfzs84HmQOIhw9DEyV422/ufSn/7fqg4cjIQxWZwUMd+e+1P9A/Z+lHbX1weHLqyEtrBRncwsYm/+RsWaBBz4DwfLoehRjrG8IKAgIgOMHiK2AOA6IM6G4CKgIr6EgeZA6qPoMII4FYksgFmCA5gwJIFYEYmUotiXSUFuYHqh+cXw5TZlIQ5WxaR4mhuLBZBkqBcT+oJjFg/3B6kgAnFANyniwFEQdJgAAOuN7Bp7MBuYAAAAASUVORK5CYII=",
r.prototype.offsetX = -9, r.prototype.offsetY = 0, r.prototype.title = function() {
return "Arrow Mark Up"
}, r.prototype._createTextPaneView = function(t) {
var e = new t(this, this._model, 0, 18, "top", "center");
return e.disableSelection(), e
}, inherit(s, o), s.prototype.image = new Image, s.prototype.image.src =
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAYAAACpF6WWAAAB60lEQVR4AWPAAziAWJBXQ1oYSDMyUAlIALGVUpzNLQkPA1Mgm5kahioCcZxygt1/5Xjbb3JBJulAPiulhioDcSbIUJf+9P8WVeH/5cMtFwkqCfKDgoNiQ636Ev57zsz7b90Q/V8x2vqyhKOWNqHg4ARiKZAhaNgWiItAhhp1RPw374n97zIt879da9x/pTjbj7K+hpE4gwNqoD9IMzasWeDx37A9HIxNuqL+209K+e/Uk/rftCwYGBwWkxnExbkRwYHpTZBGgti4M/K/dX/Cf/fpOf9t6sHBcULcRk0JaAYT6YYiMDw4XKdn/bdtjv2vGGf7RtrXyAdoDguZhiKwaVf0f4fJqf8du1NAQfVXMcyiFWQwmYYisFl3zH+3GTn/Q+aV/3dsSfyvFGtdSLFLHaek/XfqSga59JdcmEU5yKVkh6lFbxzQhdn/bZtiga6zeS7lZeAKMpCC2E/87z4t5791fdR/xSirw4I2SnKg2CcxnSK8aw+MGKceSMTIh5h3Q0szRvJzFCQJgXLUexk/oyCQd8nP+8DE7jEjF+jd6P9K0VZnRe00VWHeJcfQDJChzn2p/80qQv4rhFvOZBAV5QF5l5LyNBZann6W8zOOp0Z5Kg7Eloox1jekHbX1qVLyQ2NVQEBBQIBU7wIAOFZ7BmG7RzYAAAAASUVORK5CYII=",
s.prototype.offsetX = -19, s.prototype.offsetY = -10, s.prototype.title = function() {
return "Arrow Mark Right"
}, s.prototype._createTextPaneView = function(t) {
var e = new t(this, this._model, -22, -3, "middle", "right");
return e.disableSelection(), e
}, inherit(a, o), a.prototype.image = new Image, a.prototype.image.src =
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAYAAACpF6WWAAAB/UlEQVR4AWPAATj3Wij8J4RB6hhIAFIgTS9a8nBhmKFSpBiqDNJ0P80PF4YZqkyyobfD7HDh4WJolaKY+G5zhXvoMXva2xifoWB5dD07zeTvFKvxioDMFY6RFUgEGvzzQVk8OGafVib9v5fkhc9QkDxIHVj9vaKY/7vM5b+HS/JFA80TAhnKA8TGZSoiS057GYFiFqzhTpQTPkNB8iB1YPUnPQz+5ykKzQGaYwjE3CBDmUCuBWKHabqSZ0656oI0EY1B6idoSx4F6reDupIJFrTMQCwtxsYcvNZY5uU5T0OiDDwLdOFKI9knvMzM/kD9kmBz0AAbEKs6iHAX7zSX/3nF3xyvgZd8Tf9vM5P/ZiXAmQdNBazYEgIjEHOBwiVHXmjWcSctnAbeDLH5f8xR83+SjNBEoHo9sD4owGWwIBDb9mtJHMIVviDxDg3x3UB11kDMD9ZHADCDwkeAmdlvhZHMI2C4oRh4xl3//1IDmbvszAxeQHXiUPWEATR8lE0EubJB4QYMP7CBF31M/m82k/usy8uRCpRXAKsjEXCCwiteVqD/qIPG/+tBVv/3WCj8C5Pi7wCKawMxBwMZgBEaXlbtGuI7T7ro/G9QFdsI5JsDMR/+cCQcvuLsLAzubRoSa4FsJyAWBSdwsgEifKVBXoYmcBYGagCoQZzEGggAoyq6zKXuV5gAAAAASUVORK5CYII=",
a.prototype.offsetX = -9, a.prototype.offsetY = -18, a.prototype.title = function() {
return "Arrow Mark Down"
},
a.prototype._createTextPaneView = function(t) {
var e = new t(this, this._model, 0, -23, "bottom", "center");
return e.disableSelection(), e
}, s.prototype.version = n.prototype.version = a.prototype.version = r.prototype.version = 2, e
.LineToolArrowMark = o, e.LineToolArrowMarkLeft = n, e.LineToolArrowMarkRight = s, e
.LineToolArrowMarkUp = r, e.LineToolArrowMarkDown = a
}, function(t, e, i) {
"use strict";
function o(t, e) {
t.width = e.w, t.height = e.h;
var i = t.getContext("2d");
i && i.translate(.5, .5)
}
function n(t, e) {
t.width = 0, o(t, e)
}
function r(t, e, i, o, n, r) {
t.save(), t.translate(-.5, -.5), t.fillStyle = r, t.fillRect(e, i, o, n), t.restore()
}
function s(t, e) {
var i = document.createElement("canvas");
return t.append(i), o(i, e), i
}
Object.defineProperty(e, "__esModule", {
value: !0
}), i(13);
var a = function() {
function t(t, e) {
this.w = t, this.h = e
}
return t.prototype.equals = function(t) {
return this.w === t.w && this.h === t.h
}, t
}();
e.Size = a, e.resizeCanvas = o, e.hardResizeCanvas = n, e.clearRect = r, e.addCanvasTo = s
}, function(t, e, i) {
"use strict";
function o(t) {
this._data = t
}
function n(t, e) {
this._data = t, this._model = e, this.radius = this._data.radius || n.OUTER_RADIUS
}
function r(t) {
o.call(this, t)
}
var s = i(11),
a = i(218).PaneRendererArrowsUpDown;
i(64), o.RADIUS = 3.5, o.prototype.tolerance = 2, o.prototype.draw = function(t) {
function e(t) {
return void 0 === t.x || TradingView.isNaN(t.x) || null === t.x || void 0 === t.y ||
TradingView.isNaN(t.y) || null === t.y
}
var i, o, n;
if (this._data)
for (t.strokeStyle = "#6B6B6B", t.fillStyle = "#D6D6D6", i = this._data.vertOffset || 0, o =
0; o < this._data.points.length; o++) n = this._data.points[o], e(n) || this
._drawMarker(t, n, i)
}, o.prototype._drawMarker = function(t, e, i) {
t.beginPath(), t.arc(e.x + .5, e.y + .5 + i, o.RADIUS, 0, 2 * Math.PI, !0), t.closePath(), t
.fill(), t.stroke()
}, o.prototype.hitTest = function(t) {
var e, i;
if (!this._data) return null;
for (e = 0; e < this._data.points.length; e++)
if (i = this._data.points[e], i.subtract(t).length() <= o.RADIUS + this.tolerance)
return new s(this._data.hittestResult, i.data);
return null
}, n.OUTER_RADIUS = TradingView.isMobile.any() ? 16 : 8, n.prototype.tolerance = 2, n.prototype
.draw = function(t) {
var e, i, o, n, r, s, a, l, c, h = this._data.currentPoint,
u = this._data.outerStrokeWidth || 1;
for (e = 0; e < this._data.points.length; e++) i = this._data.points[e], o = i.subtract(h)
.length(), n = TradingView.isInteger(i.data) && this._data.linePointBeingEdited === i.data,
r = this.radius, s = this._data.strokeWidth || 2, a = o <= r + this.tolerance, l = a ? 1 :
0, r += l, s += l, n || (i.square ? (t.fillStyle = this._data.backgroundColor, t.fillRect(i
.x - r, i.y - r, 2 * r, 2 * r), t.fillStyle = this._data.color, c = r - u, t
.fillRect(i.x - c, i.y - c, 2 * c, 2 * c), c = r - u - s, t.fillStyle = this._data
.backgroundColor, t.fillRect(i.x - c, i.y - c, 2 * c, 2 * c)) : (t.beginPath(), t
.arc(i.x, i.y, r, 0, 2 * Math.PI, !0), t.closePath(), t.fillStyle = this._data
.backgroundColor, t.fill(), t.beginPath(), t.arc(i.x, i.y, r - u, 0, 2 * Math.PI, !
0), t.closePath(), t.fillStyle = this._data.color, t.fill(), t.beginPath(), t
.arc(i.x, i.y, r - u - s, 0, 2 * Math.PI, !0), t.closePath(), t.fillStyle = this
._data.backgroundColor, t.fill()))
}, n.prototype.hitTest = function(t) {
var e, i, o;
for (e = 0; e < this._data.points.length; e++)
if (i = this._data.points[e], o = i.subtract(t).length(),
o <= this.radius + this.tolerance) return new s(this._data.hittestResult, i.data);
return null
}, inherit(r, o), r.prototype._drawMarker = function(t, e, i) {
var n = e.isUp ? 1 : -1,
r = a.prototype._calculateVerticalOffset(this._data.barSpacing),
s = a.prototype._calculateMinHeight(this._data.barSpacing),
l = i + n * r + n * s;
t.beginPath(), t.arc(e.x + .5, e.y + .5 + l, o.RADIUS, 0, 2 * Math.PI, !0), t.closePath(), t
.fill(), t.stroke()
}, e.SelectionRenderer = o, e.LineAnchor = n, e.SelectionRendererArrowsUpDown = r
}, function(t, e, i) {
"use strict";
function o(t, e, i) {
function o(t, e, i, o, n, r) {
var s = 0;
return t < i ? s |= 1 : t > n && (s |= 2), e < o ? s |= 4 : e > r && (s |= 8), s
}
for (var n, r, s, a = t[0].x, l = t[0].y, c = t[1].x, h = t[1].y, u = e.x, d = e.y, p = i.x, _ = i
.y, f = o(a, l, u, d, p, _), g = o(c, h, u, d, p, _), v = !1, y = 0;;) {
if (y > 1e3) throw Error("Cohen - Sutherland algorithm: infinity loop");
if (y++, !(f | g)) {
v = !0;
break
}
if (f & g) break;
n = f || g, r = void 0, s = void 0, 8 & n ? (r = a + (c - a) * (_ - l) / (h - l), s = _) : 4 &
n ? (r = a + (c - a) * (d - l) / (h - l), s = d) : 2 & n ? (s = l + (h - l) * (p - a) / (c -
a), r = p) : (s = l + (h - l) * (u - a) / (c - a), r = u), n === f ? (a = r, l = s, f =
o(a, l, u, d, p, _)) : (c = r, h = s, g = o(c, h, u, d, p, _))
}
return v ? m.equalPoints(m.point(a, l), m.point(c, h)) ? m.point(a, l) : m.lineSegment(m.point(a,
l), m.point(c, h)) : null
}
function n(t, e) {
var i, o, n = t.A,
r = e.A,
s = t.B,
a = e.B,
l = t.C,
c = e.C,
h = n * a - r * s;
return Math.abs(h) < 1e-6 ? null : (i = (s * c - a * l) / h, o = (r * l - n * c) / h, new m.Point(i,
o))
}
function r(t, e, i, o) {
var n, r = e.subtract(t),
s = o.subtract(i),
a = r.x * s.y - r.y * s.x;
return Math.abs(a) < 1e-6 ? null : (n = t.subtract(i), (n.y * s.x - n.x * s.y) / a)
}
function s(t, e, i, o) {
var n, s, a, l = r(t, e, i, o);
return null === l ? null : (n = e.subtract(t), s = n.scaled(l).add(t), a = g.distanceToSegment(i, o,
s), Math.abs(a.distance) < 1e-6 ? l : null)
}
function a(t, e) {
return -(t.C + t.B * e) / t.A
}
function l(t, e) {
return -(t.C + t.A * e) / t.B
}
function c(t, e) {
var i, o, n;
for (i = 0, o = t; i < o.length; i++)
if (n = o[i], m.equalPoints(n, e)) return !1;
return t.push(e), !0
}
function h(t, e, i) {
var o, n, r, s, h, u = e.x,
d = e.y,
p = i.x,
_ = i.y;
if (0 === t.A) return o = -t.C / t.B, d <= o && o <= _ ? m.lineSegment(m.point(u, o), m.point(p,
o)) : null;
if (0 === t.B) return n = -t.C / t.A, u <= n && n <= p ? m.lineSegment(m.point(n, d), m.point(n,
_)) : null;
switch (r = [], s = function(e) {
var i = l(t, e);
d <= i && i <= _ && c(r, new m.Point(e, i))
}, h = function(e) {
var i = a(t, e);
u <= i && i <= p && c(r, new m.Point(i, e))
}, s(u), h(d), s(p), h(_), r.length) {
case 0:
return null;
case 1:
return r[0];
case 2:
return m.equalPoints(r[0], r[1]) ? r[0] : m.lineSegment(r[0], r[1])
}
return f.assert(!1, "We should have at most two intersection points"), null
}
function u(t, e, i, o) {
var n, r = s(t, e, i, new m.Point(o.x, i.y)),
a = s(t, e, new m.Point(o.x, i.y), o),
l = s(t, e, o, new m.Point(i.x, o.y)),
c = s(t, e, new m.Point(i.x, o.y), i),
h = [];
return null !== r && r >= 0 && h.push(r), null !== a && a >= 0 && h.push(a), null !== l && l >= 0 &&
h.push(l), null !== c && c >= 0 && h.push(c), 0 === h.length ? null : (h.sort(function(t, e) {
return t - e
}), n = v.pointInRectangle(t, i, o) ? h[0] : h[h.length - 1], t.addScaled(e.subtract(t), n))
}
function d(t, e) {
return !(t.length > 0 && m.equalPoints(t[t.length - 1], e)) && (t.push(e), !0)
}
function p(t, e) {
var i, o, r, s, a, l = [];
for (i = 0; i < t.length; ++i) o = t[i], r = t[(i + 1) % t.length], s = m.lineThroughPoints(o, r), v
.pointInHalfplane(o, e) ? (d(l, o),
v.pointInHalfplane(r, e) || null !== (a = n(s, e.edge)) && d(l, a)) : v.pointInHalfplane(r,
e) && null !== (a = n(s, e.edge)) && d(l, a);
return l.length >= 3 ? l : null
}
function _(t, e) {
var i, o, n, r, s, a = t;
for (i = 0; i < e.length && null !== a; ++i) o = e[i], n = e[(i + 1) % e.length], r = e[(i + 2) % e
.length], s = m.lineThroughPoints(o, n), a = p(a, m.halfplaneThroughPoint(s, r));
return a
}
var f, m, g, v;
Object.defineProperty(e, "__esModule", {
value: !0
}), f = i(9), m = i(8), g = i(44), v = i(60), e.intersectLineSegmentAndRectangle = o, e
.intersectLines = n, e.intersectLineSegments = s, e.intersectLineAndRectangle = h, e
.intersectRayAndRectangle = u, e.intersectPolygonAndHalfplane = p, e.intersectPolygons = _
}, function(t, e, i) {
"use strict";
var o, n = function(t, e, o) {
var r, s, a, l, c, h;
t = $(t), o = o || {}, o.activeClass = o.activeClass || "", r = (o.event || "click") +
".popup-menu", o.hideEvent && (s = o.hideEvent + ".popup-menu"), a = function() {}, l = a,
c = {}, h = function(r, s, h) {
function u(e) {
var i = $(e.target).parents().andSelf();
i.is(f) || i.is(t) || i.is(".charts-popup-tab-headers, .charts-popup-itemheader") ||
l()
}
function d(t) {
var e = $(t.target).parents().andSelf();
e.is(".charts-popup-tab-headers, .charts-popup-itemheader") || o
.notCloseOnButtons && e.is(".icon-delete") || l()
}
function p(e, r, s) {
var a, l, c, h, u, d, _, m, g, v, y, b, S, w, T, C;
if (e instanceof n.TabGroup) {
if (!e.tabs || !e.tabs.length) return;
return 1 !== e.tabs.length || e.tabs[0].title ? (a = $(
'<div class="charts-popup-tab-group"></div>').appendTo(s), l = $(
'<div class="charts-popup-tab-headers"></div>').appendTo(a), c =
null, void $.each(e.tabs || [], function(t, i) {
var o, n;
i.items && i.items.length && (o = $(
'<div class="charts-popup-tab"></div>').hide()
.appendTo(a), $.each(i.items, function() {
p(this, void 0, o)
}), n = $('<span class="charts-popup-tab-header">')
.append($(
'<a href="javascript://" class="charts-popup-tab-header-label">'
).text(i.name)).appendTo(l), n.on("click", function(
t) {
n.is(".active") || (l.find(
".charts-popup-tab-header.active")
.removeClass("active"), n.addClass(
"active"), a.find(
".charts-popup-tab").hide(), o
.show(), t && t.preventDefault(),
"function" == typeof e.onChange && e
.onChange.call(e, i.name))
}), c && !i.active || (c = n, l.find(
".charts-popup-tab-header.active").removeClass(
"active"), n.addClass("active"), a.find(
".charts-popup-tab").hide(), o.show()))
})) : void $.each(e.tabs[0].items, function() {
p(this, void 0, s)
})
}
return e instanceof n.Group ? (h = $('<div class="charts-popup-group"></div>')
.appendTo(s), e.title && (u = $(
'<div class="charts-popup-itemheader"></div>').text(e.title)
.prepend($('<span class="charts-popup-itemheader-icon"></span>')), e
.collapsible && (h.addClass("charts-popup-group-collapsible"), h
.toggleClass("collapsed", e.collapsed), u.on("click", function() {
h.toggleClass("collapsed"), "function" == typeof e
.onChange && e.onChange(h.hasClass("collapsed")), f
.height() === parseInt(f.css("max-height")) ? f
.addClass("popup-menu-scroll-y") : f.height() <
parseInt(f.css("max-height")) && f.removeClass(
"popup-menu-scroll-y")
})), h.append(u)), void $.each(e.items, function(t) {
p(this, 1, h)
})) : e instanceof n.Header ? void s.append($(
'<div class="charts-popup-itemheader"></div>').text(e.title)) : e
.separator ? (d = $('<span class="separator"></span>'),
void s.append(d)) : (d = $('<a class="item" href="#">'), e.url && d.attr(
"href", e.url), e.target && d.attr("target", e.target), r || d.addClass(
"first"), "function" == typeof e.active ? e.active(e) && d.addClass(
"active") : e.active && d.addClass("active"), e.addClass && d.addClass(e
.addClass), e.addData && d.data(e.addData), e.disabled && d.addClass(
"disabled"), "function" == typeof e.action && (_ = e.action, m =
function(t) {
$(t.target).parents().andSelf().is(w) || (_.apply(d, arguments), !e
.url && t && "function" == typeof t.preventDefault && t
.preventDefault())
}, o.upAction ? d.bind("mouseup", m) : d.bind("click", m)), e.date ? (
g = $('<span class="title"></span>').appendTo(d), $(
'<span class="date"></span>').text(e.date || "").appendTo(d)) : e
.icon && !o.svg ? (v = $('<span class="icon"></span>').appendTo(d), v.css(
"background-image", e.icon.image || ""), e.icon.offset && v.css(
"background-position", "string" == typeof e.icon.offset ? e.icon
.offset : e.icon.offset.x + "px " + e.icon.offset.y + "px"), g = $(
'<span class="title"></span>').appendTo(d)) : !0 === o.svg && e.svg ? (o
.wrapIcon ? d.append($('<span class="icon-wrap">').addClass(e.iconClass)
.append(e.svg)) : d.append(e.svg), g = $(
'<span class="title"></span>').appendTo(d)) : e.iconClass ? (d
.append($('<span class="icon"></span>').addClass(e.iconClass)), g = $(
'<span class="title"></span>').appendTo(d)) : g = $(
'<span class="title-expanded"></span>').appendTo(d), e.html ? g.html(e
.html) : g.text(TradingView.clean(e.title, !0) || ""), y = $(
'<span class="shortcut"></span>').appendTo(d), e.shortcut && y.text(e
.shortcut.keys), "function" == typeof e.deleteAction && (b = e
.deleteAction, S = e.deleteAction.title || $.t("Delete"), w = $(
'<span class="icon-delete">'), w.html(i(169)), w.attr("title", S), w
.on("click", function(t) {
b.apply(d, arguments), t.preventDefault()
}), d.append(w)), e.buttons instanceof Array && e.buttons.length && e
.buttons.forEach(function(t) {
t.el instanceof $ || (t.el = $(t.el)), t.el.appendTo(d), t
.handler && t.el.on("click", function(e) {
t.handler.apply(d, arguments)
})
}), void 0 !== e.counter && ("function" == typeof e.counter ? (T = $(
'<span class="counter"></span>').html(e.counter()), T.appendTo(
d)) : (C = e.counterBlue ? "blue" : "", $(
'<span class="counter"></span>').text(e.counter + "").addClass(
C).appendTo(d))), s.append(d), void t.data("popup-menu", s))
}
var _, f, m, g, v, y, b, S, w, T, C, x, P, L, I, k, A, M, E, D, V, O, R, B, z, F, N =
s || e;
if ("function" == typeof N && (N = N()), $(this).hasClass("open") || $(this).hasClass(
"active")) return r.preventDefault(), l(), void(_ = c.scrollTop);
switch (l = function() {
c.scrollTop = f.scrollTop(), f.remove(), t.removeClass("active open " + o
.activeClass), t.data("popup-menu", null), $(document).off("click", d),
$(document).off("mousedown", u), Modernizr.touch && $(document).off(
"touchstart.chartgui", u), $(document).off("selectstart.popup-menu"),
l = a, o.onRemove && o.onRemove()
}, t.addClass("active open " + o.activeClass), f = $(
'<div class="charts-popup-list">'), o.addClass && f.addClass(o.addClass), o
.zIndex && f.css("z-index", o.zIndex), m = f, o.listInner && (m = $(
'<div class="list-inner">').appendTo(m)), o.listTable && (m = $(
'<div class="list-table">').appendTo(m)), $.each(N, function(t) {
p(this, t, m)
}), setTimeout(function() {
$(document).on("click", d),
$(document).on("mousedown", u), Modernizr.touch && $(document).on(
"touchstart.chartgui", u)
}, 0), o.upAction && $(document).on("selectstart.popup-menu", function() {
return !1
}), f.appendTo(document.body), g = $(window).width(), v = Math.min($(window)
.height(), $("body").height()), y = t.outerWidth(), b = t.outerHeight(), S = t
.offset(), _ = $(window).scrollTop() || 0, S.top -= _, S.top = Math.round(S.top), S
.left = Math.round(S.left), w = f.outerWidth(), T = f.outerHeight(), C = void 0 !==
o.viewportSpacing ? o.viewportSpacing : 10, x = o.popupSpacing ? ~~o.popupSpacing :
1, P = o.popupDrift ? ~~o.popupDrift : 0, L = T - f.height(), I = "down", o
.direction && (I = "function" == typeof o.direction ? o.direction() : o.direction),
k = !!o.reverse, "down" === I ? (A = v - S.top - b - x - C - L, M = S.top - x - C -
L, A < Math.max(T || 0, 100) && M > A && (I = "up")) : "right" === I && (E = g -
S.left - y - x - C - L, D = S.left - x - C - L, E < Math.max(w || 0, 100) && D >
E && (I = "left")), I) {
case "down":
case "up":
"down" === I ? f.css("top", S.top + b + x + "px") : f.css("bottom", v - S.top +
x + "px").css("top", "auto"), k ? f.css("left", Math.max(S.left + P +
y - w, C) + "px").css("right", "auto") : f.css("left", S.left + P +
"px").css("right", "auto");
break;
case "right":
case "left":
x = Math.max(x, 4), "right" === I ? f.css("left", Math.floor(S.left + y + x) +
"px").css("right", "auto") : f.css("left", Math.floor(Math.max(S.left -
w - x, C)) + "px").css("right", "auto"), k ? f.css("top", Math.floor(
Math.max(S.top + P + b - T, C)) + "px") : f.css("top", Math.floor(S
.top + P) + "px")
}
for (f.show(), V = S.top, "up" === I || {
left: 1,
right: 1
} [I] && k ? "up" !== I ? V += b : V -= b + x + L + C : V = v - V - b - 2 * x - L, f
.height() > V && f.addClass("popup-menu-scroll-y"), f.css("max-height", V + "px"), o
.careRightBorder && (O = g + $(window).scrollLeft(), parseInt(f.css("left")) + f
.width() + C > O && f.css("left", O - f.width() - C + "px").css("right", "auto")
), o.careBottomBorder && parseInt(f.css("top")) + f.height() + C > v + _ && f
.css("top", v - f.height() - C + _ + "px"), B = t.parents().andSelf(), z = B
.size(); z--;)
if ("fixed" === B.eq(z).css("position")) {
R = B.eq(z);
break
} R && (F = f.offset(), f.css({
position: "fixed",
left: F.left - $(document).scrollLeft(),
right: "auto"
})), f[0].scrollHeight > f.height() && f.addClass("popup-with-scroll"), r && r
.preventDefault()
}, r && t.bind(r, h), s && t.bind(s, function() {
l()
}), o.runOpened && h()
};
n.TabGroup = function t(e) {
if (!(this instanceof t)) return new t(e);
e = e || {}, this.tabs = [], "function" == typeof e.onChange && (this.onChange = e.onChange)
}, n.TabGroup.prototype.appendTab = function(t, e, i) {
if (null == t ? t = "" : t += "", e || (e = []), i || (i = {}), !Array.isArray(e))
throw new TypeError("items must be an array");
return this.tabs.push({
name: t,
items: e,
active: !!i.active
}), e
}, n.Header = function t(e) {
if (!(this instanceof t)) return new t(e);
this.title = e
}, n.Group = function t(e) {
if (!(this instanceof t)) return new t(e);
e = e || {}, this.items = [], this.title = null == e.title ? "" : e.title + "", this
.collapsible = !!e.collapsible, this.collapsed = !!e.collapsed, "function" == typeof e
.onChange && (this.onChange = e.onChange)
}, n.Group.prototype.push = function() {
this.items.push.apply(this.items, arguments)
}, e.bindPopupMenu = n, o = function(t) {
t = $(t), t.unbind(".popup-menu"), t.removeData("popup-menu")
}, e.unbindPopupMenu = o
}, function(t, e, i) {
"use strict";
function o(t) {
return t in $.fn ? Promise.resolve() : (r || (r = new Promise(function(t) {
i.e(7).then(function(e) {
i(390), t()
}.bind(null, i)).catch(i.oe)
})), r)
}
function n(t) {
return new s(t)
}
var r, s;
Object.defineProperty(e, "__esModule", {
value: !0
}), i(13), s = function() {
function t(t) {
this._$elem = t
}
return t.prototype.draggable = function() {
var t = arguments,
e = this._$elem;
return o("draggable").then(function() {
return e.draggable.apply(e, t)
})
}, t.prototype.resizable = function() {
var t = arguments,
e = this._$elem;
return o("resizable").then(function() {
return e.resizable.apply(e, t)
})
}, t.prototype.sortable = function() {
var t = arguments,
e = this._$elem;
return o("sortable").then(function() {
return e.sortable.apply(e, t)
})
}, t.prototype.datepicker = function() {
var t = arguments,
e = this._$elem;
return o("datepicker").then(function() {
return e.datepicker.apply(e, t)
})
}, t
}(), e.LazyJqueryUI = s, e.lazyJqueryUI = n
}, function(t, e, i) {
"use strict";
var o, n;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(28), n = function() {
function t(t) {
this._formatStr = t || "%h:%m:%s"
}
return t.prototype.format = function(t) {
return o.customFormatters.timeFormatter ? o.customFormatters.timeFormatter.format(t) :
this._formatStr.replace("%h", o.numberToStringWithLeadingZero(t.getUTCHours(), 2))
.replace("%m", o.numberToStringWithLeadingZero(t.getUTCMinutes(), 2)).replace("%s",
o.numberToStringWithLeadingZero(t.getUTCSeconds(), 2))
}, t.prototype.formatLocal = function(t) {
return o.customFormatters.timeFormatter ? o.customFormatters.timeFormatter.formatLocal ?
o.customFormatters.timeFormatter.formatLocal(t) : o.customFormatters.timeFormatter
.format(t) : this._formatStr.replace("%h", o.numberToStringWithLeadingZero(t
.getHours(), 2)).replace("%m", o.numberToStringWithLeadingZero(t.getMinutes(),
2)).replace("%s", o.numberToStringWithLeadingZero(t.getSeconds(), 2))
}, t
}(), e.TimeFormatter = n
}, function(t, e, i) {
"use strict";
function o(t, e, o, r) {
var s = n.loadPropertyPages();
return new Promise(function(n) {
i.e(8).then(function(a) {
s.then(function() {
var s = i(412),
a = new s(t, e, r);
a.show(o), n(a)
})
}.bind(null, i)).catch(i.oe)
})
}
Object.defineProperty(e, "__esModule", {
value: !0
});
var n = i(3);
e.showEditObjectDialog = o
}, , , , , , , , function(t, e, i) {
"use strict";
function o(t, e) {
var i, o, n;
return void 0 === e && (e = !1), i = t.data("commonTooltipText") || "", o = t.attr("title"), i ||
o || e ? (i = s(t), n = {
h: t.outerHeight(),
w: t.outerWidth(),
x: t.offset().left - $(window).scrollLeft(),
y: t.offset().top - $(window).scrollTop()
}, {
above: t.hasClass("common-tooltip-above"),
below: t.hasClass("common-tooltip-below"),
html: t.hasClass("common-tooltip-html"),
otl: t.hasClass("common-tooltip-otl"),
otr: t.hasClass("common-tooltip-otr"),
fixed: t.hasClass("common-tooltip-fixed"),
rect: n,
text: i,
vertical: t.hasClass("common-tooltip-vertical"),
tooltipDelay: parseInt(t.attr("data-tooltip-delay")),
colorTheme: t.data("color-theme") || ""
}) : null
}
function n(t) {
var e = -1 !== g.indexOf(t) ? m[t] : "";
d.removeClass(g.filter(function(t) {
return !!t
}).map(function(t) {
return m[t]
}).join(" ")), e && !d.hasClass(e) && d.addClass(e)
}
function r(t) {
var e, i, o, n, r = t.rect;
r && (d.attr("class", "common-tooltip-wrapper").css({
bottom: "auto",
left: "auto",
right: "auto",
top: "auto"
}), Modernizr.pointerevents || d.addClass("no-pointer-events"),
d.toggleClass("pointer-events-auto", !!t.pointerEventsAuto), p.css({
left: "0",
width: "auto"
}), p.width(p.width() + 2), e = $(window).width(), i = $(window).height(), o = t.vertical, (
o && r.w < 20 || !o && r.h < 20) && d.addClass("farther"), n = "", o ? (d.addClass(
"vertical").css({
left: r.x + r.w,
top: r.y - (d.outerHeight() - r.h) / 2
}), n = t.otr ? "otr" : t.otl || p.offset().left + p.outerWidth() + u > e ? "otl" :
"otr", "otl" === n ? d.addClass("otl").css({
left: "auto",
right: e - r.x
}) : d.addClass("otr")) : (d.css({
bottom: i - r.y,
left: r.x - (d.outerWidth() - r.w) / 2
}), n = t.above ? "above" : t.below || p.offset().top - $(window).scrollTop() < u ?
"below" : "above", "below" === n ? d.addClass("below").css({
bottom: "auto",
top: r.y + r.h
}) : d.addClass("above"), p.offset().left - u < 0 ? p.css("left", Math.abs(p.offset()
.left) + u) : p.offset().left + p.outerWidth() + u > e && (t.fixed || p.css("left",
e - (p.offset().left + p.outerWidth() + u)))))
}
function s(t) {
var e = t.data("commonTooltipText") || "",
i = t.attr("title");
return void 0 !== i && (e = i, t.data("commonTooltipText", e), t.removeAttr("title")), e
}
function a() {
clearTimeout(_), clearTimeout(f), document.body.contains(d[0]) && (d.css("opacity", "0"), f =
setTimeout(d.detach.bind(d), h / 2))
}
function l(t, e) {
var i, n;
void 0 === e && (e = {}), i = $(t), 0 !== i.length && (n = !(!e.text && !e.$inner), e = $.extend({},
o(i, n), e), $.isEmptyObject(e) || "" === e.text && !e.$inner || c(e))
}
function c(t) {
var e = document.body.contains(d[0]);
if (clearTimeout(_), clearTimeout(f), !e) return void(_ = setTimeout(function() {
d.appendTo(document.body), c(t)
}, "number" != typeof t.tooltipDelay || isNaN(t.tooltipDelay) ? h : t.tooltipDelay));
p.toggleClass("common-tooltip-body--width_wide", !!t.wide), t.$inner ? p.empty().append(t.$inner) :
t.html ? p.html(t.text || "") : p.text(t.text || ""), r(t), n(t.colorTheme || "default"), d
.addClass(t.addClass || ""), d.css("opacity", "1"), t.forceHideOnMove && $(document).on(
"mousemove.common-tooltip-force-hide",
function() {
$(document).off("mousemove.common-tooltip-force-hide"), a()
})
}
var h, u, d, p, _, f, m, g;
Object.defineProperty(e, "__esModule", {
value: !0
}), i(582), i(13), i(43), h = 500, u = 10, d = $("<div>").css("opacity", "0"), p = $(
'<div class="common-tooltip-body">').appendTo(d), _ = 0, f = 0, m = {
default: "",
white: "theme-white",
"round-shadow": "theme-round-shadow"
}, g = Object.keys(m), e.updateTooltipText = s, e.hide = a, e.showOnElement = l, e.show = c,
Modernizr.touch || $(document).on("mouseenter", ".apply-common-tooltip", function(t) {
var e, i, o, n = t.originalEvent;
if ("buttons" in n) {
if (1 & n.buttons) return
} else if (1 === t.which) return;
e = $(this), i = function() {
l(e)
}, i(), o = function() {
e.off("common-tooltip-update", i), e.off("mouseleave mousedown", o), $(document)
.off("scroll", o), a()
}, e.on("common-tooltip-update", i), e.on("mouseleave mousedown", o), $(document).on(
"scroll", o)
})
}, function(t, e, i) {
"use strict";
function o() {
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
return (0, r.createDialog)(n({}, s, t))
}
var n, r, s;
Object.defineProperty(e, "__esModule", {
value: !0
}), n = Object.assign || function(t) {
var e, i, o;
for (e = 1; e < arguments.length; e++) {
i = arguments[e];
for (o in i) Object.prototype.hasOwnProperty.call(i, o) && (t[o] = i[o])
}
return t
}, e.createNoticeDialog = o, r = i(65), s = {
width: 400,
destroyOnClose: !0,
title: $.t("Notification"),
content: $.t("You are notified"),
contentWrapTemplate: '<div class="tv-dialog__section tv-dialog__section--no-border"><div class="tv-text"><p></p></div></div>',
actionsWrapTemplate: '<div class="tv-dialog__section tv-dialog__section--actions tv-dialog__section--no-border">',
actions: [{
name: "ok",
type: "primary",
text: $.t("Ok"),
method: "close",
key: [13, 32]
}]
}
}, function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 11 9" width="11px" height="9px"><path fill="none" fill-rule="evenodd" stroke-width="2" d="M1 3.22l3.415 3.496L10 1"/></svg>'
}, function(t, e, i) {
"use strict";
function o(t) {
return "." + t.replace(/\+/g, "")
}
function n(t, e) {
var i = o(t);
c.unbind("keydown" + i).bind("keydown" + i, t, function(t) {
$(t.target).is("input[type=password]") || h || e.apply(null, Array.prototype.slice.call(
arguments))
}), l[t] = e
}
function r(t) {
c.unbind("keydown" + o(t)), delete l[t]
}
function s() {
h = !0
}
function a() {
h = !1
}
var l, c, h;
Object.defineProperty(e, "__esModule", {
value: !0
}), i(13), l = {}, c = $(document), h = !1, e.bind = n, e.unbind = r, e.disable = s, e.enable = a
}, function(t, e, i) {
"use strict";
var o = i(199).TVLocalStorage;
i(64), TradingView.FeatureToggle = {
force_prefix: "forcefeaturetoggle.",
enableFeature: function(t) {
o.setItem(this.force_prefix + t, "true")
},
disableFeature: function(t) {
o.setItem(this.force_prefix + t, "false")
},
resetFeature: function(t) {
o.removeItem(this.force_prefix + t)
}
}, TradingView.isFeatureEnabled = function(t) {
function e(e) {
var i = Math.random() <= t[e];
return o.setItem(n + e, i), i
}
function i(t) {
return -1 === ["address-autocomplete-google-key", "black_friday", "black_friday_popup",
"black_friday_mainpage", "coinbase_payments", "ios_app_info",
"symbol_search_server_highlight", "text_notes", "multiple-sos", "datawindow"
].indexOf(t) && -1 === t.indexOf("-maintenance")
}
var n = "featuretoggle.";
return function(r) {
var s, a;
return !(!s && "local" !== window.environment || !i(r)) || (!t[r] || -1 !== t[r]) && (!!
("true" === o.getItem(TradingView.FeatureToggle.force_prefix + r) || window
.is_authenticated && "undefined" != typeof user && user.settings &&
"true" === user.settings[TradingView.FeatureToggle.force_prefix + r]) || !(
"false" === o.getItem(TradingView.FeatureToggle.force_prefix + r) || window
.is_authenticated && "undefined" != typeof user && user.settings &&
"false" === user.settings[TradingView.FeatureToggle.force_prefix + r]) && (!
!t[r] && (1 === t[r] || (a = o.getItem(n + r), void 0 === a || null === a ?
e(r) : "true" === a))))
}
}(window.featureToggleState || {}), e.FeatureToggle = TradingView.FeatureToggle, e
.isFeatureEnabled = TradingView.isFeatureEnabled
}, function(t, e) {
t.exports = {
button: "button-2ioYhFEY-",
isInteractive: "isInteractive-20uLObIc-",
hovered: "hovered-3perbaxJ-",
isActive: "isActive-22S-lGpa-",
isOpened: "isOpened-p-Ume5l9-",
isDisabled: "isDisabled-1_tmrLfP-",
text: "text-1sK7vbvh-",
icon: "icon-beK_KS0k-"
}
}, function(t, e, i) {
"use strict";
function o(t, e, i) {
return t * (1 - i) + e * i
}
function n(t, e, i, r) {
var s, a, l, c, h;
if (r = !r || r < 1e12 ? Date.now() : r, s = r - t, a = s >= i.duration, l = o(i.from, i.to, i
.easing(s / i.duration)), c = a ? i.to : l, h = c - e, i.onStep(h, c), a) return void(i
.onComplete && i.onComplete());
requestAnimationFrame(n.bind(null, t, c, i))
}
function r(t) {
t.from = t.from || 0,
t.duration = t.duration || 250, t.easing = t.easing || s.easingFunc.easeOutCubic,
requestAnimationFrame(n.bind(null, Date.now(), t.from, t))
}
Object.defineProperty(e, "__esModule", {
value: !0
});
var s = i(31);
e.doAnimate = r
}, function(t, e, i) {
"use strict";
function o(t) {
var e, i = t.activeClass,
o = t.children,
l = t.className,
c = t.icon,
h = t.isActive,
u = t.isBgFull,
d = t.isGrayed,
p = t.isHidden,
_ = t.isTransparent,
f = t.onClick,
m = t.title;
return n.createElement("div", {
className: r(a.button, l, h ? i : "", "apply-common-tooltip common-tooltip-vertical", (
e = {}, e[a.isActive] = h, e[a.isBgFull] = u, e[a.isGrayed] = d, e[a
.isHidden] = p, e[a.isTransparent] = _, e)),
onClick: f,
title: m
}, n.createElement("div", {
className: a.bg
}, c && ("string" == typeof c ? n.createElement(s.Icon, {
className: a.icon,
icon: c
}) : n.createElement("span", {
className: a.icon
}, c)), o))
}
var n, r, s, a;
Object.defineProperty(e, "__esModule", {
value: !0
}), n = i(2), r = i(14), s = i(59), a = i(720), e.ToolButton = o
}, function(t, e, i) {
"use strict";
function o() {
return n.createElement("div", {
className: r.separator
})
}
var n, r;
Object.defineProperty(e, "__esModule", {
value: !0
}), n = i(2), r = i(723), e.PopupMenuSeparator = o
}, function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c, h;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), i(12), n = i(2), r = i(14), s = i(730), a = i(209), l = i(210), c = {
add: window.t("Add to favorites"),
remove: window.t("Remove from favorites")
}, h = function(t) {
function e() {
var e = null !== t && t.apply(this, arguments) || this;
return e._handleClick = function(t) {
var i = e.props,
o = i.onClick,
n = i.onClickArg;
o && o(n, t)
}, e
}
return o.__extends(e, t), e.prototype.render = function() {
var t, e = this.props.isFilled;
return n.createElement("span", {
className: r(s.star, "apply-common-tooltip", (t = {}, t[s.checked] = e, t)),
dangerouslySetInnerHTML: {
__html: e ? a : l
},
onClick: this._handleClick,
title: e ? c.remove : c.add
})
}, e
}(n.PureComponent), e.FavoriteButton = h
}, function(t, e, i) {
"use strict";
var o, n, r, s, a;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(746), Object.defineProperty(e, "AutocompleteField", {
enumerable: !0,
get: function() {
return o.AutocompleteField
}
}), n = i(756), Object.defineProperty(e, "CheckboxField", {
enumerable: !0,
get: function() {
return n.CheckboxField
}
}), r = i(395), Object.defineProperty(e, "InputField", {
enumerable: !0,
get: function() {
return r.InputField
}
}), s = i(757), Object.defineProperty(e, "InputFieldRegExp", {
enumerable: !0,
get: function() {
return s.InputFieldRegExp
}
}), a = i(396), Object.defineProperty(e, "SaveRenameDialog", {
enumerable: !0,
get: function() {
return a.SaveRenameDialog
}
})
}, function(t, e, i) {
"use strict";
function o(t) {
this._maxSize = t || 50, this.reset()
}
var n = /[2-9]/g;
o.prototype.measureText = function(t, e, i) {
var o, r, s = i || n,
a = (e + "").replace(s, "0");
return this._cache[a] ? this._cache[a].width : (this._actualSize === this._maxSize && (o = this
._tick2Labels[this._oldestTick], delete this._tick2Labels[this._oldestTick],
delete this._cache[o], this._oldestTick++, this._actualSize--), 0 === (r = t
.measureText(a).width) && e.length ? 0 : (this._cache[a] = {
width: r,
tick: this._usageTick
}, this._tick2Labels[this._usageTick] = a, this._actualSize++, this._usageTick++, r))
}, o.prototype.reset = function() {
this._actualSize = 0, this._cache = {}, this._usageTick = 1,
this._oldestTick = 1, this._tick2Labels = {}
}, t.exports = o
}, function(t, e, i) {
"use strict";
function o(t, e, i) {
return i && (i += " "), (i || "") + t + "px " + e
}
Object.defineProperty(e, "__esModule", {
value: !0
}), e.makeFont = o
}, function(t, e, i) {
"use strict";
function o(t, e) {
this.m_title = t, this.m_value = e, this._visible = !0, this._color = void 0
}
function n() {
this._header = "", this._title = "", this._items = []
}
o.prototype.title = function() {
return this.m_title
}, o.prototype.text = function() {
return this.m_value
}, o.prototype.visible = function() {
return this._visible
}, o.prototype.color = function() {
return this._color
}, o.prototype.setVisible = function(t) {
this._visible = t
}, o.prototype.setValue = function(t) {
this.m_value = t
}, o.prototype.setColor = function(t) {
this._color = t
}, o.prototype.value = function() {
return this.m_value
}, n.prototype.header = function() {
return this._header
}, n.prototype.title = function() {
return this._title
}, n.prototype.items = function() {
return this._items
}, n.prototype.update = function() {}, e.DataWindowItem = o, e.DataWindowView = n
}, function(t, e, i) {
"use strict";
var o, n = i(9).assert,
r = i(32),
s = r.rgba,
a = r.rgbaToString,
l = r.parseRgb,
c = i(807),
h = i(229),
u = i(163),
d = i(220),
p = i(1).LineDataSource,
_ = i(128).StudyLineDataSource,
f = i(57).LineToolBarsPattern,
m = i(57).LineToolCallout,
g = i(917),
v = i(35),
y = v.Study,
b = v.prepareStudyPropsStateForLoadChart,
S = v.prepareStudyPropertiesForLoadChart,
w = v.createStudy,
T = i(77),
C = i(49),
x = i(6).DefaultProperty,
P = i(33),
L = i(5),
I = i(7).getLogger("Chart.Serialization"),
k = i(57).LineToolParallelChannel,
A = i(57).LineToolTrendAngle,
M = i(57).LineToolGhostFeed,
E = i(57).LineToolElliott,
D = i(46).PriceDataSource,
V = i(228),
O = i(22),
R = i(30);
c.version = 2, c.prototype.state = function(t, e) {
var i, o, n, r = {};
for (r.panes = [], i = 0; i < this.panes().length; i++) r.panes.push(this.panes()[i].state(!0,
t, !1, e));
return r.timeScale = this.m_timeScale.state(t), o = null, n = this.properties(), r
.chartProperties = {
paneProperties: n.paneProperties.state(),
scalesProperties: n.scalesProperties.state(),
publishedChartsTimelineProperties: o ? o.state(t) : void 0,
chartEventsSourceProperties: n.chartEventsSourceProperties.state()
}, n.chartEventsSourceProperties && (r.chartProperties.chartEventsSourceProperties = n
.chartEventsSourceProperties.state()), r.version = c.version, r.timezone = this
.timezone(), r
}, c.prototype.chartPropertiesTransparencyMigrate = function(t) {
var e, i, o;
t.chartProperties.paneProperties.crossHairProperties && (o = t.chartProperties.paneProperties
.crossHairProperties, R.isHexColor(o.color) && (i = o.transparency / 100, e = l(o
.color), o.color = a(s(e, i)))), t.chartProperties.paneProperties
.dataWindowProperties && (o = t.chartProperties.paneProperties.dataWindowProperties, R
.isHexColor(o.color) && (i = o.transparency / 100, e = l(o.color), o.color = a(s(e, i)))
)
}, c.prototype.resetDeferredStudies = function() {
new o(this).reset()
}, c.prototype._getExceedingChildStudies = function(t) {
var e, i, o, n, r, s, a, l, c = [];
for (e = 0; e < t.length; ++e) c = c.concat(t[e].sources || []);
for (i = 0, o = 1, n = [], r = {}, s = 0, a = 1e6; c.length && --a;) l = c[s], (l.ownerSource &&
r[l.ownerSource] || !l.ownerSource) && (r[l.id] = l, c.splice(c.indexOf(l), 1),
l.ownerSource && "Study" === l.type && l.state && l.state.isChildStudy && ++i > o && n
.push(l)), s = (s + 1) % c.length;
return n
}, c.prototype.restoreState = function(t, e) {
var i, n, r, s, a, l, c, h, u, d, _, f;
if (new o(this).reset(), i = {}, !t.panes) return void I.logDebug(
"ChartModel.restoreState: invalid state");
if (!Array.isArray(t.panes)) return void I.logDebug("ChartModel.restoreState: invalid state");
if (t.panes.length < 1) return void I.logDebug("ChartModel.restoreState: invalid state");
if (t.chartProperties && !t.chartProperties.timezone && (t.chartProperties.timezone = t
.timezone), t.chartProperties && (n = TradingView.factoryDefaults("chartproperties")
.scalesProperties, TradingView.merge(n, t.chartProperties.scalesProperties), !(
"showLastValue" in n) || "showSeriesLastValue" in n || "showStudyLastValue" in n ||
(n.showSeriesLastValueProperty = n.showLastValue, n.showStudyLastValueProperty = n
.showLastValue), "showSeriesLastValue" in n && (i.showSeriesLastValueProperty = !0),
"showStudyLastValue" in n && (i.showStudyLastValueProperty = !0), t.chartProperties
.paneProperties.vertGridProperties = t.chartProperties.paneProperties
.vertGridProperties || TradingView.clone(t.chartProperties.paneProperties
.gridProperties), t.chartProperties.paneProperties.horzGridProperties = t
.chartProperties.paneProperties.horzGridProperties || TradingView.clone(t
.chartProperties.paneProperties.gridProperties), this._properties.paneProperties
.merge(t.chartProperties.paneProperties), this._properties.scalesProperties.merge(n), t
.chartProperties.timezone && this._properties.timezone.setValue(t.chartProperties
.timezone), t.chartProperties.chartEventsSourceProperties && this._properties
.chartEventsSourceProperties && this._properties.chartEventsSourceProperties.merge(t
.chartProperties.chartEventsSourceProperties), this.m_timeScale.restoreState(t
.timeScale, e)), t.timeScale && this.m_timeScale.restoreState(t.timeScale, e), !this
.readOnly() && (r = this._getExceedingChildStudies(t.panes), r.length))
for (s = t.panes.length - 1; s >= 0; --s) {
for (a = t.panes[s], l = a.sources.length - 1; l >= 0; --l) c = a.sources[l], ~r
.indexOf(c) && a.sources.splice(l, 1);
a.sources.length || t.panes.splice(s, 1)
}
for (h = t.panes, this.panes()[0].restoreState(h[0], e, t.version, i), s = 1; s < t.panes
.length; s++) a = this.panes()[s] || this.createPane(), a.restoreState(t.panes[s], e, t
.version, i);
for (this._invalidateBarColorerCaches(), u = this.dataSources(), d = 0, s = 0; s < u
.length; s++) _ = u[s], TradingView.isInherited(_.constructor, p) && (d++, _
.calcIsActualSymbol());
return this._version = t.version, this.updateTimeScaleBaseIndex(), this.recalculateAllPanes(),
this.invalidate(new O(O.FULL_UPDATE)), f = TVLocalStorage.getItem("linetools_limit") || 1e3,
window.is_authenticated && window.user && window.user.settings && (f = window.user.settings
.linetools_limit || f), d > f ? {
lines_limit_exceeded: !0,
line_tools_count: d
} : {}
}, V.prototype.state = function(t, e, i, o) {
function n(t) {
return i && !t.isSavedInStudyTemplates() || !t.state || !t.state() || !t.isSavedInChart(
e) || o && t.isActualSymbol && !t.isActualSymbol()
}
var r, s, a = {};
if (t)
for (a.sources = [], r = 0; r < this.m_dataSources.length; r++) n(this.m_dataSources[r]) ||
a.sources.push(this.m_dataSources[r].state(e));
for (a.leftAxisState = this.m_leftPriceScale.state(), a.leftAxisState.m_isLockScale && null !==
this._lastLeftPriceScaleRatio && (a.leftPriceScaleRatio = this._lastLeftPriceScaleRatio), a
.leftAxisSources = [], r = 0; r < this.m_leftPriceScale.dataSources().length; r++) n(this
.m_leftPriceScale.dataSources()[r]) || a.leftAxisSources.push(this.m_leftPriceScale
.dataSources()[r].id());
for (a.rightAxisState = this.m_rightPriceScale.state(), a.rightAxisState.m_isLockScale &&
null !== this._lastRightPriceScaleRatio && (a.rightPriceScaleRatio = this
._lastRightPriceScaleRatio), a.rightAxisSources = [], r = 0; r < this.m_rightPriceScale
.dataSources().length; r++) n(this.m_rightPriceScale.dataSources()[r]) || a.rightAxisSources
.push(this.m_rightPriceScale.dataSources()[r].id());
for (a.overlayPriceScales = {}, r = 0; r < this.m_dataSources.length; r++) s = this
.m_dataSources[r], this.isOverlay(s) && s.isSavedInChart(e) && (a.overlayPriceScales[s
.id()] = s.priceScale().state());
return a.stretchFactor = this._stretchFactor, this.m_mainDataSource && (a.mainSourceId = this
.m_mainDataSource.id()), a
}, V.prototype.sourceById = function(t) {
for (var e = 0; e < this.m_dataSources.length; e++)
if (this.m_dataSources[e].id() === t) return this.m_dataSources[e];
return null
}, V.prototype.isESDStudy = function(t) {
return "Script$TV_EARNINGS@tv-scripting" === t.id || "Script$TV_DIVIDENDS@tv-scripting" === t
.id || "Script$TV_SPLITS@tv-scripting" === t.id || "ESD$TV_EARNINGS@tv-scripting" === t
.id || "ESD$TV_DIVIDENDS@tv-scripting" === t.id || "ESD$TV_SPLITS@tv-scripting" === t.id
}, V.prototype.isStudyToSkip = function(t) {
return !!this.isESDStudy(t)
}, V.prototype.restoreState = function(t, e, i, o) {
var n, r, s, a, l, c, u, d, _, f, m, g, v, b, S;
if (o = o || {}, !t.leftAxisState || !t.rightAxisState) throw Error("invalid state");
if (!t.leftAxisSources || !t.rightAxisSources) throw Error("invalid state");
if (t.stretchFactor && (this._stretchFactor = t.stretchFactor), n = {}, t.sources)
for (r = -1 !== this.m_dataSources.indexOf(this._model.mainSeries()), this.clearSeries(),
this.m_mainDataSource = null, r && this.m_dataSources.push(this._model.mainSeries()),
s = this.getZOrderMinMax(), a = s.minZOrder, l = s.maxZOrder, c = 0; c < t.sources
.length; c++) u = t.sources[c], d = u.type, Math.abs(u.zorder) > 1e200 ? (_ = a - 1, I
.logWarn("Datasource zorder has bad value: " + u.zorder + " Resetting it to " + _),
u.zorder = _) : this.isZOrderAvailable(u.zorder) || r && "MainSeries" === d && this
._model.mainSeries().zorder() === u.zorder || (u.zorder = l + 1), f = u.id, n[f] = u
.ownerSource, d && ("MainSeries" === d ? this._restoreMainSeries(u, e, r, o) : d
.toLowerCase().startsWith("study") ? this._restoreStudy(u, e, o) : TradingView
.isInherited(TradingView[d], p) ? this._restoreLineTool(u, e) : TradingView[d] &&
TradingView[d].createFromState && this._restoreSpecialSource(u, e)), a = Math.min(a,
u.zorder), l = Math.max(l, u.zorder);
for (this.m_leftPriceScale.dataSources().splice(0, 1 / 0), this.m_leftPriceScale._hasSeries = !
1, m = defaults("chartproperties").paneProperties.leftAxisProperties, TradingView.merge(m, t
.leftAxisState), this.m_leftPriceScale.restoreState(m), void 0 !== t
.leftPriceScaleRatio && (this._lastLeftPriceScaleRatio = t.leftPriceScaleRatio),
c = 0; c < t.leftAxisSources.length; c++)(g = this.dataSourceForId(t.leftAxisSources[c])) &&
(void 0 !== m.m_showSymbolLabels && g instanceof T && this.model().properties()
.scalesProperties.showSymbolLabels.setValue(m.m_showSymbolLabels), g.setPriceScale(this
.m_leftPriceScale), this.m_leftPriceScale.addDataSource(g));
for (this.m_rightPriceScale.dataSources().splice(0, 1 / 0), this.m_rightPriceScale
._hasSeries = !1, m = defaults("chartproperties").paneProperties.rightAxisProperties,
TradingView.merge(m, t.rightAxisState), this.m_rightPriceScale.restoreState(m), void 0 !== t
.rightPriceScaleRatio && (this._lastRightPriceScaleRatio = t.rightPriceScaleRatio), c =
0; c < t.rightAxisSources.length; c++)(g = this.dataSourceForId(t.rightAxisSources[c])) && (
void 0 !== m.m_showSymbolLabels && g instanceof T && this.model().properties()
.scalesProperties.showSymbolLabels.setValue(m.m_showSymbolLabels), g.setPriceScale(this
.m_rightPriceScale), this.m_rightPriceScale.addDataSource(g));
for (c = 0; c < this.m_dataSources.length; c++) g = this.m_dataSources[c], -1 === this
.m_rightPriceScale.dataSources().indexOf(g) && -1 === this.m_leftPriceScale.dataSources()
.indexOf(g) ? (g._isOverlay = !0, v = new h(this._model.properties().scalesProperties), v
.setHeight(this.m_height), v.setTopMargin(this.m_rightPriceScale.topMargin()), v
.setBottomMargin(this.m_rightPriceScale.bottomMargin()), v.addDataSource(g), t
.overlayPriceScales && t.overlayPriceScales[g.id()] && (m = t.overlayPriceScales[g
.id()], m.m_isAutoScale = !0, m.m_isLog = !1, m.m_isPercentage = !1, m
.m_isLockScale = !
1, v.restoreState(m)), g.setPriceScale(v)) : g._isOverlay = !1;
for (f in n)(b = n[f]) && (g = this.sourceById(f)) && this.sourceById(f).setOwnerSource(this
.sourceById(b));
if (t.mainSourceId && !this.m_mainDataSource && (this.m_mainDataSource = this.dataSourceForId(t
.mainSourceId)), !this.m_mainDataSource)
for (c = 0; c < this.m_dataSources.length; c++)
if (g = this.m_dataSources[c], TradingView.isInherited(g.constructor, D)) {
this.m_mainDataSource = g;
break
} for (c = 0; c < this.m_dataSources.length; c++) g = this.m_dataSources[c], TradingView
.isInherited(g.constructor, p) ? (g.ownerSource() || g.setOwnerSource(this
.mainDataSource()), g.isFixed() && g.restoreFixedPoints(), 1 === i && g.priceScale()
.isPercent() && !g.isFixed() && g.correctPricesToPercents(), g
.fixAfterRestorePriceAxis && g.fixAfterRestorePriceAxis()) : TradingView.isInherited(g
.constructor, y) && (S = g.properties(), S.linkedToSeries && S.linkedToSeries.value() &&
(g.ownerSource() || g.setOwnerSource(this.model().mainSeries())));
this._updateMargins(), this._cachedOrderedSoruces = null, this._cachedHitTestSources = null
}, V.prototype._restoreMainSeries = function(t, e, i, o) {
var n, r, s, a, l, c, h, u, d, p, _, f, m, g, v, y = t.id,
b = t.state,
S = t.zorder;
if (b && ["candleStyle", "hollowCandleStyle", "haStyle"].forEach(function(t) {
b[t] && (b[t].wickUpColor = b[t].wickUpColor || b[t].wickColor, b[t].wickDownColor =
b[t].wickDownColor || b[t].wickColor)
}), i || (n = this._model.paneForSource(this._model.mainSeries()), n.removeDataSource(this
._model.mainSeries()), this.m_dataSources.push(this._model.mainSeries())), this
.m_mainDataSource = this._model.mainSeries(), r = b && b.style ? b.style : void 0,
r === T.STYLE_PNF && "ATR" === this._model.mainSeries().properties().pnfStyle.inputs.style
.value() ? this._model.mainSeries().properties().pnfStyle.inputs.style._value =
"Traditional" : r === T.STYLE_RENKO && "ATR" === this._model.mainSeries().properties()
.renkoStyle.inputs.style.value() && (this._model.mainSeries().properties().renkoStyle.inputs
.style._value = "Traditional"), b && !b.hasOwnProperty("showSessions") && (b
.showSessions = !1), b && !b.extendedHours && (b.extendedHours = !1), b && e && (b
.showCountdown = !1), b && (e && !("showSeriesLastValueProperty" in o) &&
"showLastValue" in b && this._model.properties().scalesProperties.showSeriesLastValue
.setValue(b.showLastValue), delete b.showLastValue), b)
for (s = {
haStyle: "BarSetHeikenAshi@tv-basicstudies-60",
renkoStyle: "BarSetRenko@tv-prostudies-15",
pbStyle: "BarSetPriceBreak@tv-prostudies-15",
kagiStyle: "BarSetKagi@tv-prostudies-15",
pnfStyle: "BarSetPnF@tv-prostudies-15"
}, a = this._model.studyVersioning(), l = this._model.mainSeries().styleStudyInfos(),
c = Object.keys(C.SYMBOL_STRING_DATA), h = 0; h < c.length; h++) r = c[h], u = C
.STYLE_SHORT_NAMES[r] + "Style", d = u in t ? t[u].studyId : s[u], null != (r = b[u]) &&
(p = r.inputs, _ = P.parseIdString(d), f = l[u].studyId, m = P.parseIdString(f), g = a
.updateStudyInputs(_.id, _.version, m.version, p, null), r.inputs = g);
this._model.mainSeries().clearSessionStudy(), this._model.mainSeries().properties().merge(b),
this._model.mainSeries()._prevChartStyle = this._model.mainSeries().properties().style
.value(), this._model.mainSeries().createPaneView(), this._model.mainSeries().setId(y), e &&
this._model.mainSeries().restoreData(t.bars, t.nsBars, t.symbolInfo, t.rtPrice, t.boxSize, t
.reversalAmount), void 0 !== S && this._model.mainSeries().setZorder(S), this._model
.mainSeries().properties().extendedHours.listeners().fire(this._model.mainSeries()
.properties().extendedHours), (v = this._model.mainSeries().symbolInfo()) && this._model
.mainSeries().onSymbolResolved().fire(this._model.mainSeries().symbolInfo())
}, V.prototype._restoreStudy = function(t, e, i) {
var n, r, s, a, l, c, h, d, p, _;
return e && void 0 === t.data && void 0 === t.nonSeriesData && void 0 === t.indexes ? void I
.logError("Cannot restore (skipping) study without data " + t.id + ", " + t.metaInfo.id) : (
n = t.id, r = t.state, s = t.zorder, a = t.ownerSource, l = TradingView.clone(t
.metaInfo), $.extend(l, P.parseIdString(l.id)), this.isStudyToSkip(l) && !e ? void I
.logNormal("Skipping study " + l.id) : (c = r, h = this._model.studyVersioning(), d = h
.patchPropsStateAndMetaInfo(c, l, {
oldShowStudyLastValueProperty: e && !i.showStudyLastValueProperty
}), c = d.propsState, l = d.metaInfo, p = new u(this._model, t, l.shortDescription),
p.setId(n), _ = this, h.updateMetaInfoAsync(l, e).done(function(i) {
function r(o) {
var r, a = S(l, i, c, null, h, o),
d = w(_._model, a, o || _._model.mainSeries(), s);
d.setId(n), e && (r = h.patchStudyData(l, t.data, t.nonSeriesData, t
.indexes), d.restoreData(r.data, r.nsData, r.indexes)), _._model
.replaceStudyStub(p, d) || (p = d), u.add(n, d)
}
var s, u, d;
p.setStatus(""), s = i || l, u = new o(_._model), d = a && t.state
.isChildStudy, d ? u.get(a).done(r) : r()
}).fail(function(t) {
p.setStatus("error: " + t), p.setFailed(!0)
}), p && this.m_dataSources.push(p), delete this._cachedOrderedSoruces,
delete this._cachedHitTestSources, p && void 0 !== s && p.setZorder(s), p))
}, V.prototype._restoreLineTool = function(t, e, i) {
var o, r, s, a, l, c, h, v, y, S, w, T, C, I, D, V, O, R, B, z, F, N, W;
for (i = void 0 === i || i, E.migrateState(t), g.migrateState(t), o = t.type, r = t.id, s = t
.state, a = i ? t.zorder : this._newZOrderForLineTool(), l = TradingView[o], n(TradingView
.isInherited(l, p), "invalid data source type:" + o + " (expected to be a Line Tool)"),
c = t.points, h = !1, v = 0; v < c.length; v++)
if (Math.abs(c[v].offset) > 1e4) {
h = !0;
break
} if (!h) {
if (y = null, S = TradingView.factoryDefaults("linetool"), TradingView.isInherited(l, _)) {
if (y = this._model.studyVersioning(), t = y.patchPointsBasedStudyState(t), TradingView
.merge(S, s), C = t.metaInfo, $.extend(C, P.parseIdString(C.fullId)), !e && (I = C
.productId, !pro.hasPackage(I))) return D = new u(this._model, t, C
.shortDescription), D.setId(r), this.m_dataSources.push(D), void 0 !== a &&
D.setZorder(a), D.setStatus($.t("not authorized")), void D.setFailed(!0);
V = y.updateMetaInfo(C), O = V || C, S = b(O, C, S, null, y), e ? TradingView.merge(S, {
fixedSize: !1
}) : TradingView.merge(S, {
fixedSize: !0
}), T = new x("study_" + O.id, S, !0), w = d.create(o, this._model, T, O, this
.mainDataSource())
} else R = o.toLowerCase(), TradingView.merge(S, TradingView.factoryDefaults(R)), T =
TradingView[o].prototype.createPropertiesObject(R, S), T.merge(s), e ? T.merge({
fixedSize: !1
}) : T.merge({
fixedSize: !0
}), w = new TradingView[o](this._model, T, !0);
return w.setId(r), w.linkKey = t.linkKey, B = t.alertId, B && "function" == typeof w
.setAlert && L.enabled("alerts") && !this._model.readOnly() && !this._model
.isJustClonedChart() && w.setAlert(B, {
noChartSave: !0
}), z = t.indexes ? t.indexes : [], z = z.slice(0, t.points.length), w.isFixed() ? w
.restorePositionPercents(t.positionPercents) : w.restorePoints(t.points, z, e),
w instanceof f || w instanceof m || w instanceof A || w instanceof M || w instanceof k ?
w.restoreData(t) : e && w.restoreData && (F = t, y && (F.graphics = y
.patchPointsBasedStudyData(F.metaInfo, F.graphics)), w.restoreData(F)), N = null ==
t.version ? 1 : t.version, W = null == w.version ? 1 : w.version, N !== W &&
"function" == typeof w.migrateVersion && w.migrateVersion(N, W, {
pane: this,
model: this._model,
properties: T
}), this.m_dataSources.push(w), delete this._cachedOrderedSoruces, delete this
._cachedHitTestSources, void 0 !== a && w.setZorder(a), w
}
}, V.prototype._restoreSpecialSource = function(t, e) {
var i, o = TradingView[t.type];
o && o.createFromState && (i = o.createFromState(t, e, this._model)) && (i.setId(t.id), this
.m_dataSources.push(i), i.zorder && i.setZorder(i.zorder))
}, c.prototype.studyTemplate = function(t) {
var e, i, o, n, r = {};
for (r.panes = [], e = 0; e < this.panes().length; e++) i = !0, o = !1, n = !0, r.panes.push(
this.panes()[e].state(i, o, n));
return t && (r.interval = this.mainSeries().interval()), r.version = c.version, r
}, c.prototype.restoreStudyTemplate = function(t, e) {
this._undoModel.studyLoadTemplate(this._undoModel, this.studyTemplate(), t, e)
}, c.prototype.theme = function() {
var t = {};
return t.chartProperties = {
paneProperties: this.properties().paneProperties.state(),
scalesProperties: this.properties().scalesProperties.state(),
symbolWatermarkProperties: this.properties().symbolWatermarkProperties.state()
}, t.mainSourceProperties = this.mainSeries().state().state,
delete t.mainSourceProperties.symbol, delete t.mainSourceProperties.interval, delete t
.chartProperties.paneProperties.topMargin, delete t.chartProperties.paneProperties
.bottomMargin, t.version = c.version, t
}, c.prototype.restoreTheme = function(t) {
var e, i, o = {
hollowCandle: {
related: "candle"
}
};
for (e in o) t.mainSourceProperties[e + "Style"] || (i = t.mainSourceProperties[o[e].related +
"Style"], t.mainSourceProperties[e + "Style"] = TradingView.clone(i));
this._undoModel.chartLoadTheme(this, t)
}, o = function() {
function t(o) {
var n = e.indexOf(o);
return ~n ? i[n] : this instanceof t ? (this._source = o, this._studies = {}, this
._deferreds = {}, e.push(o), void i.push(this)) : new t(o)
}
var e = [],
i = [];
return t.prototype.add = function(t, e) {
this._deferreds[t] && (this._deferreds[t].resolve(e), delete this._deferreds[t]), this
._studies[t] = e
}, t.prototype.get = function(t) {
return this._studies[t] ? $.Deferred().resolve(this._studies[t]) : (this._deferreds[
t] || (this._deferreds[t] = $.Deferred()), this._deferreds[t].promise())
}, t.prototype.reset = function() {
var t = e.indexOf(this._source);
~t && (e.splice(t, 1), i.splice(t, 1))
}, t
}(), t.exports = c
}, function(t, e, i) {
"use strict";
function o() {
var t, e, i, o;
this._registeredSources = {}, this._sourcesToRow = {}, this._rowsToSources = {}, this
._currentSymbol = "", this._actualCapacity = 0, this._actualWidth = 0, this._canvas = $(
"<canvas>"), this._cache = this._canvas.get(0).getContext("2d"), this._currentWidth = 400,
this._canvas.prop("width", this._currentWidth).prop("height", 1).css("position", "absolute")
.css("top", 0).css("z-index", 1e3).css("left", 0), this._ctx = this._canvas.get(0).getContext(
"2d"), this._ctx.font = u.fontSize + "px" + u.font, t = u.fontSize, e = u.lineSpacing, i =
t + e, o = 3, this._padding = 8, this._rowHeight = i * o - e + 2 * this._padding + 2
}
function n(t, e) {
this._constructor = "LineToolTrendLine";
var n = e || new a("linetooltrendline");
s.call(this, t, n), t._trendLineStatsCache || (t._trendLineStatsCache = new o), i.e(1).then(
function(t) {
var e = i(1151).TrendLinePaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var r = i(8).Point,
s = i(1).LineDataSource,
a = i(6).DefaultProperty,
l = i(3).propertyPages,
c = i(7).getLogger("Chart.LineToolTrendLine"),
h = i(405).TrendLineStatsRenderer,
u = i(386).LabelSettings;
o.prototype.canvas = function() {
return this._canvas
}, o.prototype.topByRow = function(t) {
return t * this._rowHeight
}, o.prototype.rowHeight = function(t) {
return this._rowHeight
}, o.prototype.rowWidth = function(t) {
var e = this._rowsToSources[t];
return this._sourcesToRow[e].width
}, o.prototype.currentWidth = function() {
return this._currentWidth
}, o.prototype._findEmptyRow = function(t) {
for (var e = 0; this._rowsToSources[e];) e++;
return this._rowsToSources[e] = t, e >= this._actualCapacity && (this._actualCapacity++,
TradingView.resizeCanvas(this._canvas, this._currentWidth, this._rowHeight * this
._actualCapacity), this._ctx = this._canvas.get(0).getContext("2d"), c.logDebug(
"TrendLineCache. Expanging cache to " + this._actualCapacity + " items")), e
}, o.prototype._effectiveState = function(t) {
var e, i = {};
return i.p1 = $.extend({}, t.points()[0]), i.p2 = $.extend({}, t.points()[1]), e = t
.properties(), i.showBars = e.showBarsRange.value(),
i.showTimeRange = e.showDateTimeRange.value(), i.showDistance = e.showDistance.value(), i
.showPriceRange = e.showPriceRange.value(), i.showAngle = e.showAngle.value(), i.color = e
.textcolor.value(), i.showAngle && (i.priceRange = t.priceScale().priceRange().state(), i
.barSpacing = t._model.timeScale().barSpacing()), i
}, o.prototype._effectiveStatesEquals = function(t, e) {
var i = function(t, e) {
return !(!t && !e) && (!(!t || e) || (!(t || !e) || (t.index !== e.index || t.price !==
e.price)))
};
if (t && !e) return !1;
if (!t && e) return !1;
if (i(t.p1, e.p1)) return !1;
if (i(t.p2, e.p2)) return !1;
if (t.color !== e.color) return !1;
if (t.showBars !== e.showBars) return !1;
if (t.showTimeRange !== e.showTimeRange) return !1;
if (t.showDistance !== e.showDistance) return !1;
if (t.showPriceRange !== e.showPriceRange) return !1;
if (t.showAngle !== e.showAngle) return !1;
if (t.showAngle) {
if (t.priceRange.min !== e.priceRange.min) return !1;
if (t.priceRange.max !== e.priceRange.max) return !1;
if (t.barSpacing !== e.barSpacing) return !1
}
return !0
}, o.prototype.removeSource = function(t) {
if (this._sourcesToRow[t]) {
var e = this._sourcesToRow[t].row;
this._ctx.save(), this._ctx.clearRect(0, this.topByRow(e), this._currentWidth, this
.rowHeight(e)), this._ctx.restore(), delete this._sourcesToRow[t], delete this
._rowsToSources[e]
}
}, o.prototype._repaintSource = function(t, e, i) {
var o, n;
this._ctx.save(), this._ctx.translate(0, this.topByRow(e) + .5), i.points[0] = new r(0, 0), i
.offsetX = 0, i.offsetY = 0, delete i.horzAlign, delete i.vertAlign, this._ctx.clearRect(0,
0, this._currentWidth, this.rowHeight(e)), o = new h(i, {}), n = o.draw(this._ctx), this
._sourcesToRow[t].width = n.width, this._ctx.restore()
}, o.prototype.updateSource = function(t, e) {
var i, o, n, r, s, a = t.properties().symbol.value();
return this._currentSymbol !== a && (c.logDebug(
"TrendLineCache. Clearing canvas because of changing symbol from " + this
._currentSymbol + " to " + a), this._currentSymbol = a, this._sourcesToRow = {},
this._rowsToSources = {}), i = t.id(), this._sourcesToRow[i] || (o = this._findEmptyRow(
i), this._sourcesToRow[i] = {
effectiveState: null,
row: o
}), n = this._sourcesToRow[t.id()].effectiveState, r = this._effectiveState(t), this
._effectiveStatesEquals(n, r) || (o = this._sourcesToRow[t.id()], s = e(), this
._repaintSource(i, o.row, s), this._sourcesToRow[i].effectiveState = r), this
._sourcesToRow[i]
}, inherit(n, s), n.prototype.stop = function() {
s.prototype.stop.call(this), this._model._trendLineStatsCache.removeSource(this.id())
}, n.prototype.pointsCount = function() {
return 2
}, n.prototype.title = function() {
return "Trend Line"
}, n.prototype.canHasAlert = function() {
return !0
}, n.prototype._getAlertPlots = function() {
return [this._linePointsToAlertPlot(this._points, null, this.properties().extendLeft.value(),
this.properties().extendRight.value())]
}, n.prototype.getStylesPropertyPage = function() {
return l.LineToolTrendLineStylesPropertyPage
}, e.LineToolTrendLine = n
}, function(t, e, i) {
"use strict";
function o(t, e) {
var i, o;
return e.isPercentage() ? null === (i = e.mainSource()) ? null : (o = i.firstValue(), null === o ||
void 0 === o ? null : t.convertFromPercents(o).length()) : t.length()
}
function n(t) {
var e, i;
return t.isEmpty() ? null : null === (e = t.priceRange()) ? null : (i = o(e, t), null === i ? null :
t.internalHeight() / i)
}
function r(t, e) {
var i, o, r;
return t.isEmpty() || e.isEmpty() ? null : null === (i = n(e)) ? null : (o = t.getValidBarSpacing(),
r = Math.max(c, i), o / r)
}
function s(t, e, i) {
var n, r, s, a;
return null === i || t.isEmpty() ? null : null === (n = t.priceRange()) || n.isEmpty() ? null : (r =
t.internalHeight() / (e / i), null === (s = o(n, t)) ? null : r === s ? n : (a = (r - s) /
2, new l(n.minValue() - a, n.maxValue() + a)))
}
function a(t, e) {
var i, n;
return null === e || t.isEmpty() ? null : null === (i = t.priceRange()) ? null : (n = o(i, t),
null === n ? null : t.internalHeight() / n * e)
}
var l, c;
Object.defineProperty(e, "__esModule", {
value: !0
}), l = i(73), c = 1e-10, e.scaleRatio = r, e.priceRangeByScaleRatio = s, e.barSpacingByScaleRatio =
a
}, function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolPitchfork";
var i = e || this.createPropertiesObject("linetoolpitchfork");
n.call(this, t, i), this._properties.style.listeners().subscribe(this, o.prototype
._recreatePaneView), this._recreatePaneView()
}
var n = i(1).LineDataSource,
r = i(21),
s = i(52).Action,
a = i(3).propertyPages,
l = i(299).LineToolPitchforkStyle,
c = null;
inherit(o, n), o.prototype.additionalActions = function() {
var t, e, i = [],
o = ["Original", "Modified Schiff", "Inside", "Schiff"];
for (t = 0; t < 4; t++) e = new s({
checked: this.properties().style.value() === t,
checkable: !0,
text: $.t(o[t]),
callbackContext: {
target: this,
value: t
}
}), e.callbacks().subscribe(null, function(t) {
var e = t.callbackContext(),
i = e.target,
o = e.value;
i.properties().style.setValue(o), i.updateAllViews(), i._model.updateSource(i)
}), i.push(e);
return [i[0], i[3], i[1], i[2]]
}, o.prototype._recreatePaneView = function() {
if (null === c) return void i.e(1).then(function(t) {
null === c && (c = i(1159)), this._recreatePaneView()
}.bind(this).bind(null, i)).catch(i.oe);
var t = [];
this._properties.style.value() === l.Original ? t = [new c.PitchforkLinePaneView(this, this
._model)] : this._properties.style.value() === l.Schiff ? t = [new c
.SchiffPitchforkLinePaneView(this, this._model)
] : this._properties.style.value() === l.Schiff2 ? t = [new c.SchiffPitchfork2LinePaneView(
this, this._model)] : this._properties.style.value() === l.Inside && (t = [new c
.InsidePitchforkLinePaneView(this, this._model)
]), this._setPaneViews(t)
}, o.prototype.pointsCount = function() {
return 3
}, o.prototype.title = function() {
return $.t("Pitchfork")
}, o.prototype.processErase = function(t, e) {
var i = "level" + e,
o = this.properties()[i].visible;
t.setProperty(o, !1, "Erase level line")
}, o.prototype.createPropertiesObject = function(t, e, i) {
return new r(t, e, i, {
range: [0, 8]
})
}, o.prototype.getStylesPropertyPage = function() {
return a.LineToolPitchforkStylesPropertyPage
}, e.LineToolPitchfork = o
}, function(t, e, i) {
"use strict";
function o(t) {
var e = ("" + t).match(/(.*)([DWM])/);
return e ? e[1] + $.t(e[2], {
context: "interval_short"
}) : t
}
Object.defineProperty(e, "__esModule", {
value: !0
}), i(12), e.translatedIntervalString = o
}, function(t, e, i) {
"use strict";
(function(e) {
function o(t, i, o) {
r.call(this, t), this._origState = i, this._title = o;
var a = {
visible: !0
};
this._properties = new e(a), this._statusView = new n(this, t.properties()), this._status =
$.t("compiling..."), this._statusView.setText(this._title + " " + this._status), this
._formatter = new s(Math.pow(10, 2)), this._failed = !1
}
var n = i(126),
r = i(46).PriceDataSource,
s = i(28).PriceFormatter;
inherit(o, r), o.prototype.properties = function() {
return this._properties
}, o.prototype.statusView = function() {
return this._statusView
}, o.prototype.state = function(t) {
return this._origState
}, o.prototype.setStatus = function(t) {
this._status = t, this._statusView.setText(this._title + " " + this._status)
}, o.prototype.formatter = function() {
return this._formatter
}, o.prototype.title = function() {
return this._title
}, o.prototype.setFailed = function(t) {
this._failed = t
}, o.prototype.start = function(t) {}, o.prototype.firstValue = function(t) {
return null
}, t.exports = o
}).call(e, i(25))
}, function(t, e, i) {
"use strict";
(function(e) {
function o(t, e, i) {
this.pane = t, this._isLeft = o.isLeft(e), this._properties = t.chart().properties()
.scalesProperties, this._disableContextMenu = !!i, this.jqCell = $(document
.createElement("td")), this.jqCell.addClass("chart-markup-table"), this.jqCell
.addClass("price-axis"), this.jqCell.width(25), this._dv = $("<div>"), this._dv.css(
"width", "100%"), this._dv.css("height", "100%"), this._dv.css("position",
"relative"), this._dv.css("overflow", "hidden"), this._dv.appendTo(this.jqCell),
this.canvas = g(this._dv, new v(16, 16)), $(this.canvas).css("position", "absolute"), $(
this.canvas).css("z-order", "2"), $(this.canvas).css("left", 0), $(this.canvas).css(
"top", 0), this.ctx = this.canvas.getContext("2d"), this.top_canvas = g(this._dv,
new v(16, 16)), $(this.top_canvas).css("position", "absolute"), $(this.top_canvas)
.css("z-order", "1"), $(this.top_canvas).css("left", 0), $(this.top_canvas).css("top",
0), this.top_ctx = this.top_canvas.getContext("2d"), this._textWidthCache = new s,
this.restoreDefaultCursor(), this.update(), y(this.jqCell, this, !0), this.dialog = this
.pane.chart().dialog, this.contextMenu = null, this.actions = {}, this._isVisible = !0,
this.priceScale().onMarksChanged.subscribe(this, this.onMarksChanged)
}
function n(t) {
var e = new C(t);
return function(t, i) {
return isNumber(i) && !t.isLog() ? e.format(i) : ""
}
}
var r, s, a, l, c, h, u, d, p, _, f, m, g, v, y, b, S, w, T, C, x;
i(927), r = i(1).LineDataSource, s = i(155), a = i(52), l = a.Action, c = a.ActionSeparator, h =
i(108), u = i(930), d = i(22), p = i(130), _ = p.resizeCanvas, f = p.hardResizeCanvas, m = p
.clearRect, g = p.addCanvasTo, v = p.Size, y = i(107).setMouseEventHandler, b = i(40)
.trackEvent, S = i(156).makeFont, w = i(232).ActionBinder, T = i(7).getLogger(
"Chart.PriceAxisWidget"), C = i(213).LimitedPrecisionNumericFormatter, o.prototype
._BORDER_SIZE = 1, o.prototype._OFFSET_SIZE = 1, o.prototype._TICK_LENGTH = 3, o.LHS = 1, o
.RHS = 2, o.isLeft = function(t) {
return t === o.LHS || t !== o.RHS && (T.logDebug("PriceAxisWidget.isLeft: wrong side"),
!1)
}, o.prototype.destroy = function() {
this.actions.reset && this.actions.reset.setActive(!1)
}, o.prototype.backgroundColor = function() {
return this.pane.chart().properties().paneProperties.background.value()
}, o.prototype.lineColor = function() {
return this._properties.lineColor.value()
}, o.prototype.textColor = function() {
return this._properties.textColor.value()
}, o.prototype.fontSize = function() {
return this._properties.fontSize.value()
}, o.prototype.baseFont = function() {
return S(this.fontSize(), "Arial", "")
}, o.prototype.rendererOptions = function() {
var t, e, i;
return this._rendererOptions || (this._rendererOptions = {
isLeft: this._isLeft,
width: 0,
height: 0,
borderSize: this._BORDER_SIZE,
offsetSize: this._OFFSET_SIZE,
tickLength: this._TICK_LENGTH,
fontSize: NaN,
font: "",
widthCache: new s,
_tickmarksCache: new u(11, "Arial", "", "#000"),
color: ""
}), t = this._rendererOptions, e = !1, t.color !== this.textColor() && (t.color =
this.textColor(), e = !0), t.fontSize !== this.fontSize() && (i = this
.fontSize(), t.fontSize = i, t.font = this.baseFont(), t.paddingTop = Math
.floor(i / 4.5), t.paddingBottom = Math.ceil(i / 4.5), t.paddingInner = Math
.max(Math.ceil(i / 3 - t.tickLength / 2), 0), t.paddingOuter = Math.ceil(i / 3),
t.baselineOffset = Math.round(i / 10), t.widthCache.reset(), e = !0), e && t
._tickmarksCache.reset(t.fontSize, "Arial", "", t.color), this.size && (t.width =
this.size.w, t.height = this.size.h), this._rendererOptions
}, o.prototype.mouseDownEvent = function(t) {
var i, o;
!this.priceScale().isEmpty() && e.enabled("chart_zoom") && (i = this.pane.chart()
.model(), o = this.pane.state(), this._mousedown = !0, this.setCursor(
"ns-resize"), i.startScalePrice(o, this.priceScale(), t.localY))
}, o.prototype.pressedMouseMoveEvent = function(t) {
var e = this.pane.chart().model(),
i = this.pane.state(),
o = this.priceScale();
e.scalePriceTo(i, o, t.localY)
}, o.prototype.mouseDownOutsideEvent = function(t) {
var e = this.pane.chart().model(),
i = this.pane.state(),
o = this.priceScale();
this._mousedown && (this._mousedown = !1, e.endScalePrice(i, o), this
.restoreDefaultCursor())
}, o.prototype.mouseUpEvent = function(t) {
var e = this.pane.chart().model(),
i = this.pane.state(),
o = this.priceScale();
this._mousedown = !1, e.endScalePrice(i, o), this.restoreDefaultCursor()
}, o.prototype._initActions = function(t) {
var e, i, n, r, s;
this.pane.state() && (e = this, this.actions.reset = new l({
text: $.t("Reset Scale"),
shortcut: "Alt+R",
statName: "ResetScale"
}), this.actions.reset.callbacks().subscribe(this, o.prototype.reset), this
.priceScale().mainSource() instanceof TradingView.Series && (i = function(t) {
this._undoModel.setLockScaleProperty(this._property, t.checked, e
.priceScale().mainSource(), this._undoText)
}, n = x(this.priceScale(), this.pane.chart().model().model()
.mainSeriesScaleRatio()), this.actions.setLockScale = new l({
text: $.t("Lock Scale") + " " + n,
checkable: !0,
checked: this.priceScale().isLockScale(),
statName: "ToggleLockScale"
}), this._lockScaleBinding = new w(this.actions.setLockScale, this
.priceScale().properties().lockScale, this.pane.chart().model(),
"Lock Scale", i), this._lockScaleBinding.setValue(this.priceScale()
.isLockScale())), r = function() {
this._undoModel.setAutoScaleProperty(this._property, this.value(), e
.priceScale(), this._undoText)
}, this.actions.setAutoScale = new l({
text: $.t("Auto Scale"),
checkable: !0,
checked: !0,
statName: "ToggleAutoScale"
}), this._autoScaleBinding = new w(this.actions.setAutoScale, this.priceScale()
.properties().autoScale, this.pane.chart().model(), "Undo AutoScale", r),
this._autoScaleBinding.setValue(this._autoScaleBinding.property().value()), this
.actions.setPercentage = new l({
text: $.t("Percentage", {
context: "scale_menu"
}),
checkable: !0,
checked: !1,
statName: "TogglePercantage"
}), s = function() {
this._undoModel.setPercentProperty(this._property, this.value(), e
.priceScale(), this._undoText)
}, this.actions.setPercentage.binding = new w(this.actions.setPercentage, this
.priceScale().properties().percentage, this.pane.chart().model(),
"Undo Percentage", s), this.actions.setLog = new l({
text: $.t("Log Scale", {
context: "scale_menu"
}),
checkable: !0,
checked: !1,
statName: "ToggleLogScale"
}), this.actions.setLog.binding = new w(this.actions.setLog, this.priceScale()
.properties().log, this.pane.chart().model(), "Undo Log Scale"), this
.actions.alignLabels = new l({
text: $.t("No Overlapping Labels", {
context: "scale_menu"
}),
checkable: !0,
checked: !1,
statName: "TogglePreciseLabels"
}), this.actions.alignLabels.binding = new w(this.actions.alignLabels, this
.priceScale().properties().alignLabels, this.pane.chart().model(),
"No Overlapping Labels"), this._updateScalesActions())
}, o.prototype._updateScalesActions = function() {
var t = this.priceScale(),
e = t.mainSource() instanceof TradingView.Series,
i = t.mainSource().properties();
this.actions.setPercentage.setEnabled(!(t.isLog() || e && t.isLockScale() || e && i
.style.value() === TradingView.Series.STYLE_PNF)), this.actions.setLog
.setEnabled(!(t.isPercent() || e && t.isLockScale() || e && i.style.value() ===
TradingView.Series.STYLE_PNF)), this.actions.setAutoScale.setChecked(t
.properties().autoScale.value()), this.actions.setAutoScale.setEnabled(!t
.properties().autoScaleDisabled.value())
}, o.prototype.mouseClickEvent = function(t) {}, o.prototype.mouseDoubleClickEvent =
function(t) {
this.reset(), b("GUI", "Double click price scale")
}, o.prototype.contextMenuEvent = function(t, i) {
!this._disableContextMenu && e.enabled("scales_context_menu") && this
._createContextMenu().show(t)
}, o.prototype._createContextMenu = function() {
return h.createMenu(this.getContextMenuActions(), {
statName: "PriceScaleContextMenu"
})
}, o.prototype.getContextMenuActions = function() {
var t, i;
return this._initActions(), t = this.pane.chart().actions(), i = [], i.push(this.actions
.reset, new c, t.showLeftAxis, t.showRightAxis, new c, this.actions.setAutoScale
), this.actions.setLockScale && i.push(this.actions.setLockScale), i.push(t
.scaleSeriesOnly, new c, this.actions.setPercentage, this.actions.setLog, new c
), e.enabled("fundamental_widget") || i.push(t.showSymbolLabelsAction, t
.showSeriesLastValue), i.push(t.showStudyPlotNamesAction, t.showStudyLastValue),
e.enabled("countdown") && i.push(t.showCountdown), i.push(this.actions.alignLabels),
!TradingView.onWidget() && e.enabled("show_chart_property_page") && e.enabled(
"chart_property_page_scales") && t.scalesProperties && i.push(new c, t
.scalesProperties), i
}, o.prototype.backLabels = function(t) {
var e, i, o, n, r, s = [],
a = this.priceScale().orderedSources().slice(),
l = this.pane,
c = l.chart().model(),
h = l.state(),
u = [],
d = c.sourceBeingMoved() || c.lineBeingEdited() || c.lineBeingCreated();
if (d && u.push(d), c.selectedSource() && u.push(c.selectedSource()), c
.hoveredSource() && u.push(c.hoveredSource()), this.priceScale() === h
.defaultPriceScale())
for (e = this.pane.state().dataSources(), i = 0; i < e.length; i++) h.isOverlay(e[
i]) && a.push(e[i]);
for (i = 0; i < a.length; ++i)
if (o = a[i],
(t || -1 === u.indexOf(o)) && (n = o.priceAxisViews(h, o.priceScale())))
for (r = 0; r < n.length; r++) s.push(n[r]);
return s
}, o.prototype.optimalWidth = function() {
var t, e, i, o, n, r, s;
if (!this.isVisible()) return 0;
if (t = 0, e = this.rendererOptions(), this.pane.state())
for (i = this.ctx, o = this.priceScale().marks(), i.setFont(this.baseFont()), o
.length > 0 && (t = Math.max(e.widthCache.measureText(i, o[0].label), e
.widthCache.measureText(i, o[o.length - 1].label))), n = this.backLabels(!
0), r = n.length; r--;)(s = e.widthCache.measureText(i, n[r].text())) > t &&
(
t = s);
return Math.ceil(e.offsetSize + e.borderSize + e.tickLength + e.paddingInner + e
.paddingOuter + t)
}, o.prototype.setSize = function(t) {
this.size && this.size.equals(t) || (this.size = t, _(this.canvas, t), _(this
.top_canvas, t), this.jqCell.css({
width: t.w,
"min-width": t.w,
height: t.h
}))
}, o.prototype.update = function() {}, o.prototype._hightlightBackground = function(t, e,
i) {
var o, n, r, s, a, l, c = e[0].price,
h = e[0].price;
for (o = 1; o < e.length; o++) c = Math.min(c, e[o].price), h = Math.max(h, e[o].price);
n = this.priceScale(), n.isPercent() && i && (r = i.firstValue(), c = n.priceRange()
.convertToPercent(c, r), h = n.priceRange().convertToPercent(h, r)), s = this
.priceScale().priceToCoordinate(c), a = this.priceScale().priceToCoordinate(h), l =
"rgba(109, 158, 235, 0.3)", m(t, 1, s, this.size.w - 1, a - s, l)
}, o.prototype.drawBackground = function(t) {
var e, i, o, n;
if (m(t, 0, 0, this.size.w, this.size.h, this.backgroundColor()), e = this.pane.chart()
.model(), (i = e.model().selectedSource()) && i.priceScale() === this
.priceScale() && i instanceof r) {
if (o = i.axisPoints(), 0 === o.length) return;
this._hightlightBackground(t, o, i.ownerSource())
}
n = e.model().crossHairSource(), n.startMeasurePoint() && this._hightlightBackground(t,
n.measurePoints(), this.pane.state().mainDataSource())
}, o.prototype.drawBorder = function(t) {
var e, i, o;
t.save(), t.fillStyle = this.lineColor(), e = this.size.h, this._isLeft ? (t.translate(-
.5, -.5), i = this.size.w - this._BORDER_SIZE - 1, o = this.size.w - 1) : (t
.translate(.5, -.5), i = 0, o = i + this._BORDER_SIZE), t.fillRect(i, 0, o - i,
e), t.restore()
}, o.prototype.drawTickMarks = function(t) {
var e, i, o, n, r, s;
if (t.save(), t.strokeStyle = this.lineColor(), e = this.priceScale().marks(), t
.fillStyle = this.textColor(), t.setFont(this.baseFont()), i = this, t.translate(-
.5, -.5), o = this.rendererOptions(), i._isLeft) {
for (t.fillStyle = i.lineColor(), t.beginPath(), n = this.size.w - i._OFFSET_SIZE -
i._BORDER_SIZE - i._TICK_LENGTH, r = e.length; r--;) t.rect(n, e[r].coord, i
._TICK_LENGTH, 1);
for (t.fill(), r = e.length; r--;) o._tickmarksCache.paintTo(t, e[r].label, n - o
.paddingInner, e[r].coord, "right")
} else {
for (t.fillStyle = i.lineColor(), t.beginPath(), s = i._BORDER_SIZE + i
._OFFSET_SIZE, r = e.length; r--;) t.rect(s, e[r].coord, i._TICK_LENGTH, 1);
for (t.fill(), r = e.length; r--;) o._tickmarksCache.paintTo(t, e[r].label, s + i
._TICK_LENGTH + o.paddingInner, e[r].coord, "left")
}
t.restore()
}, o.prototype._alignLabels = function() {
var t, e, i, o, n, r, s, a, l, c, h, u, d, p, _, f = this.size.h / 2,
m = [],
g = this.priceScale().orderedSources().slice(),
v = this.pane,
y = v.state(),
b = this.rendererOptions();
if (this.priceScale() === y.defaultPriceScale())
for (t = this.pane.state().dataSources(), e = 0; e < t.length; e++) y.isOverlay(t[
e]) && g.push(t[e]);
for (i = this.priceScale().mainSource(), e = 0; e < g.length; ++e)
if (o = g[e], n = o.priceAxisViews(y, o.priceScale())) {
for (r = 0; r < n.length; r++) s = n[r], s.isVisible() && m.push(s);
i === o && n.length > 0 && (f = n[0].floatCoordinate())
} for (a = m.filter(function(t) {
return t.floatCoordinate() <= f
}), l = m.filter(function(t) {
return t.floatCoordinate() > f
}), a.sort(function(t, e) {
return e.floatCoordinate() - t.floatCoordinate()
}), a.length && l.length && l.push(a[0]), l.sort(function(t, e) {
return t.floatCoordinate() - e.floatCoordinate()
}), c = m.length, e = 0; e < c; e++) s = m[e], s.setFixedCoordinate(s.coordinate());
if (h = this.priceScale().properties(), h.alignLabels && h.alignLabels.value()) {
for (e = 1; e < a.length; e++) s = a[e], u = a[e - 1], d = u.height(b, !1), p = s
.coordinate(), _ = u.getFixedCoordinate(), (p || _) && p > _ - d && s
.setFixedCoordinate(_ - d);
for (r = 1; r < l.length; r++) s = l[r], u = l[r - 1], d = u.height(b, !0), p = s
.coordinate(), _ = u.getFixedCoordinate(), (p || _) && p < _ + d && s
.setFixedCoordinate(_ + d)
}
}, o.prototype.drawBackLabels = function(t) {
var e, i, o, n;
for (t.save(), e = this.backLabels(), i = this.rendererOptions(), o = 0; o < e
.length; o++) n = e[o], n.renderer().draw(t, i);
t.restore()
}, o.prototype.drawCrossHairLabel = function(t) {
var e, i, o, n, r, s, a = this.pane.chart().model().model(),
l = [],
c = a.sourceBeingMoved() || a.lineBeingEdited() || a.lineBeingCreated();
for (c && l.push({
source: c,
scale: c.priceScale()
}), a.selectedSource() && l.push({
source: a.selectedSource(),
scale: a.selectedSource().priceScale()
}), a.hoveredSource() && l.push({
source: a.hoveredSource(),
scale: a.hoveredSource().priceScale()
}), l.push({
source: a.crossHairSource(),
scale: this.priceScale()
}), e = this.pane.state(), i = 0; i < l.length; i++)
if (o = l[i], n = o.source.priceAxisViews(e, o.scale))
for (r = 0; r < n.length; r++) s = n[r], t.save(), s.renderer().draw(t, this
.rendererOptions()), t.restore()
}, o.prototype.priceScale = function() {
var t = this.pane.state(),
e = [];
return e = this._isLeft ? [t.leftPriceScale(), t.rightPriceScale()] : [t
.rightPriceScale(), t.leftPriceScale()
], null === e[0].mainSource() ? null === e[1].mainSource() ? e[0] : e[1] : e[0]
}, o.prototype.isVisible = function() {
return this._isVisible
}, o.prototype.setVisible = function(t) {
(t = !!t) !== this._isVisible && (t ? this.jqCell.css("display", "table-cell") : this
.jqCell.css("display", "none"), this._isVisible = t)
}, o.prototype.setAutoScale = function(t) {
var e = this.pane.state,
i = this.priceScale();
this.pane.chart().model().setPriceAutoScale(e, i, t)
}, o.prototype.reset = function() {
var t = this.pane.state(),
e = this.priceScale();
this.pane.chart().model().resetPriceScale(t, e)
}, o.prototype.hardResetCanvas = function() {
this.size && (f(this.canvas, this.size), f(this.top_canvas, this.size))
}, o.prototype.paint = function(t) {
this._isVisible && t && (t === d.UPDATE_CURSOR_ONLY ? (this.top_ctx.clearRect(-.5, -.5,
this.size.w, this.size.h), this.drawCrossHairLabel(this.top_ctx)) : (this
._alignLabels(), this.drawBackground(this.ctx), this.drawBorder(this.ctx),
this.pane.state() && (this.drawTickMarks(this.ctx), this.drawBackLabels(this
.ctx), this.top_ctx.clearRect(-.5, -.5, this.size.w, this.size.h),
this.drawCrossHairLabel(this.top_ctx))))
}, o.prototype.restoreDefaultCursor = function() {
this.setCursor("")
}, o.prototype.setCursor = function(t) {
var e = "";
"grabbing" !== t && "ns-resize" !== t || (e = "price-axis--cursor-" + t), this
._currentCursorClassName !== e && (this._currentCursorClassName && this.jqCell
.removeClass(this._currentCursorClassName), e && this.jqCell.addClass(e), this
._currentCursorClassName = e, this.jqCell.css("cursor"))
}, o.prototype.image = function() {
var t = {};
return t.content = this.canvas.toDataURL(), t.contentWidth = this.size.w, t
.contentHeight = this.size.h, t
}, o.prototype.onMarksChanged = function() {
var t, e = this.optimalWidth();
this._prevOptimalWidth < e && (t = this, this.updateTimeout || (this.updateTimeout =
setTimeout(function() {
t.pane && t.pane.chart && t.pane.chart() && t.pane.chart().model()
.model().fullUpdate(), t.updateTimeout = null
}, 100))), this._prevOptimalWidth = e
}, x = n(7), t.exports = {
PriceAxisWidget: o,
scaleRatioForContextMenuTransformer: n
}
}).call(e, i(5))
}, function(t, e, i) {
"use strict";
function o(t) {
var e = t.text,
i = t.className,
o = t.displayMode,
c = t.collapseWhen,
h = void 0 === c ? ["medium", "small"] : c,
u = n.__rest(t, ["text", "className", "displayMode", "collapseWhen"]),
d = !h.includes(o);
return r.createElement(a.ToolWidgetButton, n.__assign({}, u, {
text: d ? e : void 0,
className: s(i, l.button, d ? l.withText : l.withoutText)
}))
}
var n, r, s, a, l;
Object.defineProperty(e, "__esModule", {
value: !0
}), n = i(0), r = i(2), s = i(14), a = i(103), l = i(1030), e.ToolWidgetCollapsibleButton = o
}, function(t, e, i) {
function o(t, e) {
this._linesMaxWidth = null, this._hittest = e || new n(n.MOVEPOINT), this._data = {}, this
._fontSize = 0, this.setData(t)
}
var n = i(11);
o.prototype.setData = function(t) {
var e, i, o, n = this._data,
r = this.fontStyle();
this._data = t, this._fontSize = t.fontsize || t.fontSize || 30, e = t.text === n.text, i = t
.wordWrapWidth === n.wordWrapWidth, o = r === this.fontStyle(), e && i && o ? (this._data
.lines = n.lines, this._lines = n.lines) : (this._linesMaxWidth = null, t.lines = this
.wordWrap(t.text, t.wordWrapWidth), this._lines = t.lines)
},
function() {
function t() {
var t = document.createElement("canvas");
t.width = 0, t.height = 0, e = t.getContext("2d"), t = null
}
var e;
o.prototype.setPoints = function(t, e) {
this._data.points = t, this._hittest = e || new n(n.MOVEPOINT)
}, o.prototype._getLinesMaxWidth = function() {
var i, o;
if (null !== this._linesMaxWidth) return this._linesMaxWidth;
if (e || t(), e.textBaseline = "alphabetic", e.font = this.fontStyle(), this._data
.wordWrapWidth) return this._data.wordWrapWidth;
for (i = 0, o = 0; o < this._lines.length; o++) i = Math.max(i, e.measureText(this
._lines[o]).width);
return this._linesMaxWidth = i, i
}, o.prototype.measure = function() {
var t = this._fontSize,
e = this._getLinesMaxWidth(),
i = t * this._lines.length,
o = ~~(t / 6);
return this._data.backgroundHorzInflate && (e += 2 * this._data.backgroundHorzInflate),
this._data.backgroundVertInflate && (i += 2 * this._data.backgroundVertInflate), e =
Math.ceil(e + 2 * o), i = Math.ceil(i + 2 * o), e % 2 != 0 && e++, this._data
.padding && (i += this._data.padding), {
width: e,
height: i,
textBgPadding: o
}
}, o.prototype.wordWrap = function(i, o, n) {
var r, s, a, l, c, h, u, d, p;
if (e || t(), o = +o, i += "", r = i.split(/[^\S\r\n]*(?:\r\n|\r|\n|$)/), r[r.length -
1] || r.pop(), !isFinite(o) || o <= 0) return r;
for (e.font = n || this.fontStyle(), s = [], a = 0; a < r.length; a++)
if (l = r[a], (c = e.measureText(l).width) <= o) s.push(l);
else
for (h = l.split(/([-\)\]\},.!?:;])|(\s+)/); h.length;) {
if ((u = ~~(o / c * (h.length + 2) / 3)) <= 0 || e.measureText(h.slice(0,
3 * u - 1).join("")).width <= o)
for (; e.measureText(h.slice(0, 3 * (u + 1) - 1).join("")).width <= o;)
u++;
else
for (; u > 0 && e.measureText(h.slice(0, 3 * --u - 1).join("")).width >
o;);
if (u > 0) s.push(h.slice(0, 3 * u - 1).join("")), h.splice(0, 3 * u);
else {
if (d = h[0] + (h[1] || ""), p = 1 === p ? 1 : ~~(o / e.measureText(d) *
d.length), e.measureText(d.substr(0, p)).width <= o)
for (; e.measureText(d.substr(0, p + 1)).width <= o;) p++;
else
for (; p > 1 && e.measureText(d.substr(0, --p)).width > o;);
p < 1 && (p = 1), s.push(d.substr(0, p)), h[0] = d.substr(p), h[1] = ""
}
if ((c = e.measureText(h.join("")).width) <= o) {
s.push(h.join(""));
break
}
}
return s
}
}(), o.prototype._x = function() {
return this._data.points[0].x + this._data.offsetX
}, o.prototype._y = function() {
var t, e = this._fontSize * this._lines.length;
switch (this._data.scaleY && (e *= this._data.scaleY), t = this._data.points[0].y + this._data
.offsetY + e, this._data.vertAlign) {
case "top":
break;
case "bottom":
t -= e;
break;
case "middle":
t -= e / 2
}
return t
}, o.prototype.fontStyle = function() {
return (this._data.bold ? "bold " : "") + (this._data.italic ? "italic " : "") + this
._fontSize + "px " + this._data.font
}, o.prototype.draw = function(t) {
var e, i, o, n, r, s, a, l, c, h, u, d, p, _, f;
if (0 !== this._data.points.length) {
switch (e = this._x(), i = this._y(), o = this._fontSize, this._data.scaleY && (o *= this
._data.scaleY), i -= o * (this._lines.length - 1), t.textBaseline = "alphabetic", t
.font = this.fontStyle(), this._data.horzAlign) {
case "left":
t.textAlign = "start";
break;
case "right":
t.textAlign = "end";
break;
case "center":
t.textAlign = "center"
}
if (t.translate(e + .5, i + .5), e = 0, i = 0, o = this._fontSize, this._data.scaleX && this
._data.scaleY && (n = Math.min(this._data.scaleX, this._data.scaleY), t.scale(n, n)),
r = this._getLinesMaxWidth(), s = 0, this._data.backgroundColor || this._data
.borderColor || this._data.highlightBorder && this._data.wordWrapWidth) {
switch (a = e, this._data.horzAlign) {
case "left":
break;
case "right":
a -= r;
break;
case "center":
a -= r / 2
}
l = o * this._lines.length, c = ~~(o / 6), this._data.backgroundHorzInflate && (r += 2 *
this._data.backgroundHorzInflate, a -= this._data.backgroundHorzInflate), this
._data.backgroundVertInflate && (l += 2 * this._data.backgroundVertInflate, i +=
this._data.backgroundVertInflate), h = {
x: Math.floor(a - c),
y: Math.floor(i - o),
w: Math.ceil(r + 2 * c),
h: Math.ceil(l + 2 * c)
}, h.w % 2 != 0 && h.w++, this._data.padding && (h.h += this._data.padding, s = this
._data.padding), this._data.backgroundVertInflate && (i += this._data
.backgroundVertInflate), this._data.backgroundRoundRect ? (t.roundRect(h.x, h.y,
h.w, h.h, this._data.backgroundRoundRect), this._data.backgroundColor && (t
.fillStyle = this._data.backgroundColor, t.fill()), this._data
.borderColor && (u = ~~Math.max(o / 12, 1), t.strokeStyle = this._data
.borderColor, t.lineWidth = u, t.stroke())) : (this._data.backgroundColor &&
(t.fillStyle = this._data.backgroundColor, t.fillRect(h.x, h.y, h.w, h.h)), this
._data.borderColor ? (u = ~~Math.max(o / 12, 1), t.strokeStyle = this._data
.borderColor, t.lineWidth = u, t.strokeRect(h.x - u / 2, h.y - u / 2, h.w +
u, h.h + u)) : this._data.highlightBorder && (t.strokeStyle = this._data
.color, t.lineWidth = 1, t.beginPath(), _ = [3, 1], t.dashedLineTo(h.x - .5,
p = h.y - .5, d = h.x + h.w + .5, p, _), t.dashedLineTo(d, p, d, p = h
.y + h.h + .5, _),
t.dashedLineTo(d = h.x - .5, p, h.x + h.w + .5, p, _), t.dashedLineTo(d, h
.y - .5, d, p, _), t.stroke()))
}
for (this._data.backgroundVertInflate && !this._data.backgroundColor && (i += 2 * this._data
.backgroundVertInflate), t.fillStyle = this._data.color, f = 0; f < this._lines
.length; f++) t.fillText(this._lines[f], e, i), i += o + s
}
}, o.prototype.hitTest = function(t) {
var e, i, o, n, r, s;
return 0 === this._data.points.length ? null : (e = this._fontSize, this._data.scaleY && (e *=
this._data.scaleY), i = this._getLinesMaxWidth(), this._data.scaleX && (i *= this
._data.scaleX), o = this._data.points[0].x + this._data.offsetX, n = this._data
.points[0].y + this._data.offsetY, "bottom" === this._data.vertAlign && (n -= this
._lines.length * this._fontSize), "middle" === this._data.vertAlign && (n -= this
._lines.length * this._fontSize / 2), "right" === this._data.horzAlign ? o -= i :
"center" === this._data.horzAlign && (o -= i / 2), r = this._data.backgroundColor ||
this._data.borderColor ? ~~(e / 6) : 0, s = this._data.borderColor ? ~~Math.max(e / 12,
1) : 0, t.x >= o - r - s && t.x <= o + i + r + s && t.y >= n - s && t.y <= n + this
._lines.length * this._fontSize + 2 * r + s ? this._hittest : null)
}, e.TextRenderer = o
}, function(t, e, i) {
"use strict";
var o, n, r;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(28), r = function(t) {
function e(e) {
void 0 === e && (e = 100);
var i = t.call(this, e) || this;
return i.type = "percentage", i
}
return o.__extends(e, t), e.prototype.state = function() {
var t = n.PriceFormatter.prototype.state.call(this);
return t.percent = !0, t
}, e.prototype.format = function(e, i, o, n) {
//百分比坐标
return t.prototype.format.call(this, e, i, o, n) + "%"
}, e.serialize = function(t) {
return t.state()
}, e.deserialize = function(t) {
return new e(t.priceScale)
}, e
}(n.PriceFormatter), e.PercentageFormatter = r
}, , function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 13 13" width="13" height="13"><path d="M5.182 6.596l-3.889-3.889-.707-.707 1.414-1.414.707.707 3.889 3.889 3.889-3.889.707-.707 1.414 1.414-.707.707-3.889 3.889 3.889 3.889.707.707-1.414 1.414-.707-.707-3.889-3.889-3.889 3.889-.707.707-1.414-1.414.707-.707 3.889-3.889z"/></svg>'
}, function(t, e, i) {
"use strict";
var o = i(22),
n = {
_fontHeightCache: {},
_parsedColorCache: {}
};
n._parseColor = function(t) {
var e, i, o;
return this._parsedColorCache[t] ? this._parsedColorCache[t] : (e = document.createElement(
"div"), e.style.color = t, i = e.style.color.match(
/^rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i) || e.style.color.match(
/^rgba\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\,\s*(\d*\.?\d+)\s*\)$/i), o = {
r: i[1],
g: i[2],
b: i[3],
a: i[4] || "1"
}, this._parsedColorCache[t] = o, o)
}, n.getColorFromProperties = function(t, e) {
var i = 1 - e.value() / 100,
o = this._parseColor(t.value());
return "rgba(" + o.r + "," + o.g + "," + o.b + "," + i + ")"
}, n.setColorToProperties = function(t, e, i) {
var o, n = this._parseColor(t);
e.setValue("rgb(" + n.r + "," + n.g + "," + n.b + ")"), o = 100 * (1 - n.a), i.setValue(Math
.max(0, Math.min(o, 100)))
}, n._parseFont = function(t) {
var e, i, o = document.createElement("div");
return o.style.font = t, e = o.style.fontSize.match(/(\d+)pt/), i = e && e[0] === o.style
.fontSize, {
family: o.style.fontFamily,
size: i ? e[1] : "",
bold: "bold" === o.style.fontWeight,
italic: "italic" === o.style.fontStyle
}
}, n.getFontFromProperties = function(t, e, i, o) {
return [i.value() ? "bold" : "", o.value() ? "italic" : "", e.value() + "pt", t.value()].join(
" ")
}, n.setFontToProperties = function(t, e, i, o, n) {
var r = this._parseFont(t);
r.family.length > 0 && e.setValue(r.family), r.size.length > 0 && i.setValue(r.size), o
.setValue(r.bold), n.setValue(r.italic)
}, n.fontHeight = function(t) {
var e, i;
return this._fontHeightCache[t] || (e = document.createElement("span"), e.appendChild(document
.createTextNode("height")), document.body.appendChild(e), e.style.cssText =
"font: " + t + "; white-space: nowrap; display: inline;", i = e.offsetHeight, document
.body.removeChild(e), this._fontHeightCache[t] = Math.ceil(i)), this._fontHeightCache[t]
}, n.drawPolyHoverOrPress = function(t, e, i, o) {
o ? (t.save(), t.fillStyle = "rgba(0, 0, 0, 0.15)", CanvasEx.drawPoly(t, e, !0), t.restore()) :
i && (t.save(), t.fillStyle = "rgba(0, 0, 0, 0.1)", CanvasEx.drawPoly(t, e, !0), t
.restore())
}, n.repaint = function(t) {
var e = new o(o.LIGHT_UPDATE);
e.force = !0, t.invalidate(e)
}, n.roundToMinTick = function(t, e) {
var i = t.mainSource().base(),
o = 1 / i;
return o * Math.round(e / o)
}, t.exports = n
}, function(t, e, i) {
"use strict";
function o(t) {
for (var i = 0; i < e.availableTimezones.length; i++)
if (t === e.availableTimezones[i].id) return !0;
return !1
}
var n, r, s, a, l, c, h;
for (Object.defineProperty(e, "__esModule", {
value: !0
}), i(12), n = i(332), r = [{
id: "Etc/UTC",
title: $.t("UTC")
}, {
id: "exchange",
title: $.t("Exchange")
}], s = [{
id: "Pacific/Honolulu",
title: $.t("Honolulu"),
offset: 0
}, {
id: "America/Vancouver",
title: $.t("Vancouver"),
offset: 0
}, {
id: "America/Los_Angeles",
title: $.t("Los Angeles"),
offset: 0
}, {
id: "America/Phoenix",
title: $.t("Phoenix"),
offset: 0
}, {
id: "America/El_Salvador",
title: $.t("San Salvador"),
offset: 0
}, {
id: "America/Mexico_City",
title: $.t("Mexico City"),
offset: 0
}, {
id: "America/Chicago",
title: $.t("Chicago"),
offset: 0
}, {
id: "America/Bogota",
title: $.t("Bogota"),
offset: 0
}, {
id: "America/Toronto",
title: $.t("Toronto"),
offset: 0
}, {
id: "America/New_York",
title: $.t("New York"),
offset: 0
}, {
id: "America/Caracas",
title: $.t("Caracas"),
offset: 0
}, {
id: "America/Argentina/Buenos_Aires",
title: $.t("Buenos Aires"),
offset: 0
}, {
id: "America/Sao_Paulo",
title: $.t("Sao Paulo"),
offset: 0
}, {
id: "Europe/London",
title: $.t("London"),
offset: 0
}, {
id: "Europe/Madrid",
title: $.t("Madrid"),
offset: 0
}, {
id: "Europe/Paris",
title: $.t("Paris"),
offset: 0
}, {
id: "Europe/Rome",
title: $.t("Rome"),
offset: 0
}, {
id: "Europe/Belgrade",
title: $.t("Belgrade"),
offset: 0
}, {
id: "Europe/Berlin",
title: $.t("Berlin"),
offset: 0
}, {
id: "Africa/Cairo",
title: $.t("Cairo"),
offset: 0
}, {
id: "Europe/Luxembourg",
title: $.t("Luxembourg"),
offset: 0
}, {
id: "Europe/Warsaw",
title: $.t("Warsaw"),
offset: 0
}, {
id: "Europe/Zurich",
title: $.t("Zurich"),
offset: 0
}, {
id: "Europe/Athens",
title: $.t("Athens"),
offset: 0
}, {
id: "Europe/Istanbul",
title: $.t("Istanbul"),
offset: 0
}, {
id: "Asia/Jerusalem",
title: $.t("Jerusalem"),
offset: 0
}, {
id: "Asia/Kuwait",
title: $.t("Kuwait"),
offset: 0
}, {
id: "Europe/Moscow",
title: $.t("Moscow"),
offset: 0
}, {
id: "Asia/Riyadh",
title: $.t("Riyadh"),
offset: 0
}, {
id: "Asia/Qatar",
title: $.t("Qatar"),
offset: 0
}, {
id: "Asia/Tehran",
title: $.t("Tehran"),
offset: 0
}, {
id: "Asia/Dubai",
title: $.t("Dubai"),
offset: 0
}, {
id: "Asia/Muscat",
title: $.t("Muscat"),
offset: 0
}, {
id: "Asia/Ashkhabad",
title: $.t("Ashkhabad"),
offset: 0
}, {
id: "Asia/Kolkata",
title: $.t("Kolkata"),
offset: 0
}, {
id: "Asia/Almaty",
title: $.t("Almaty"),
offset: 0
}, {
id: "Asia/Bangkok",
title: $.t("Bangkok"),
offset: 0
}, {
id: "Asia/Taipei",
title: $.t("Taipei"),
offset: 0
}, {
id: "Asia/Singapore",
title: $.t("Singapore"),
offset: 0
}, {
id: "Asia/Shanghai",
title: $.t("Shanghai"),
offset: 0
}, {
id: "Asia/Chongqing",
title: $.t("Chongqing"),
offset: 0
}, {
id: "Asia/Hong_Kong",
title: $.t("Hong Kong"),
offset: 0
}, {
id: "Asia/Seoul",
title: $.t("Seoul"),
offset: 0
}, {
id: "Asia/Tokyo",
title: $.t("Tokyo"),
offset: 0
}, {
id: "Australia/Brisbane",
title: $.t("Brisbane"),
offset: 0
}, {
id: "Australia/Adelaide",
title: $.t("Adelaide"),
offset: 0
}, {
id: "Australia/Sydney",
title: $.t("Sydney"),
offset: 0
}, {
id: "Pacific/Auckland",
title: $.t("New Zealand"),
offset: 0
}, {
id: "Pacific/Fakaofo",
title: $.t("Tokelau"),
offset: 0
}, {
id: "Pacific/Chatham",
title: $.t("Chatham Islands"),
offset: 0
}], a = 0, l = s; a < l.length; a++) c = l[a], h = n.parseTzOffset(c.id), c.title = "(" + h.string +
") " + c.title, c.offset = h.offset;
s.sort(function(t, e) {
var i = t.offset - e.offset;
return 0 !== i ? i : t.title.localeCompare(e.title)
}), e.availableTimezones = r.concat(s), e.timezoneIsAvailable = o, e.monthsShort = ["Jan", "Feb",
"Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
], e.futuresRoots = [{
d: "E-Mini S&P 500",
t: "ES"
}, {
d: "E-Mini Nasdaq 100",
t: "NQ"
}, {
d: "Gold",
t: "GC"
}, {
d: "Silver",
t: "SI"
}, {
d: "Crude Oil WTI",
t: "CL"
}, {
d: "Natural Gas",
t: "NG"
}, {
d: "Australian Dollar",
t: "6A"
}, {
d: "Australian Dollar (Floor)",
t: "AD"
}, {
d: "Euro FX",
t: "6E"
}, {
d: "Euro FX (Floor)",
t: "EC"
}, {
d: "Corn",
t: "ZC"
}, {
d: "Corn (Floor)",
t: "C"
}, {
d: "Eurodollar",
t: "GE"
}, {
d: "Eurodollar (Floor)",
t: "ED"
}]
}, function(t, e, i) {
"use strict";
function o(t, e) {
var i, o = {
className: "spinner",
color: r.color.spinner,
corners: 1,
direction: 1,
fps: 20,
hwaccel: !1,
left: "50%",
length: 0,
lines: 17,
opacity: 0,
radius: 20,
rotate: 0,
scale: 1,
shadow: !1,
speed: 1.5,
top: "50%",
trail: 60,
width: 3,
zIndex: 2e9
},
a = t ? s[t] : null;
return a && (o = $.extend(o, a)), i = $.extend({}, o, e), new n(i)
}
var n, r, s;
Object.defineProperty(e, "__esModule", {
value: !0
}), i(13), n = i(244), r = i(31), s = {
medium: {
lines: 14,
scale: .8
},
micro: {
lines: 12,
scale: .2
},
mini: {
lines: 14,
scale: .4
},
xlarge: {
lines: 16,
scale: 1.6
}
}, e.unifiedSpinner = o
}, function(t, e, i) {
"use strict";
(function(t) {
function o(e, i, o) {
var n, r, s, a, l, c, h = this;
if (this._options = $.extend({}, this._defaultOptions, o || {}), this._$wrapper = e, this
._$content = i, this._scroll_speed = 40, this._shadow_offset = 10, this._header_height =
this._options.headerHeight, this._scroll_margin_top = this._options.scrollMarginTop,
this.scrolled = new t, this.scrolltoend = new t, this.scrolltostart = new t, this
.visibilityCallbacks = [], n = navigator.platform.toLowerCase(), r = navigator.userAgent
.toLowerCase(), s = r.indexOf("firefox") > -1, a = n.indexOf("android") > -1 || r
.indexOf("android") > -1, this._touch = Modernizr.touch || navigator.msMaxTouchPoints ||
s && a, this._touch) return this._$content.css("position", "relative"), void this
._$wrapper.css({
"overflow-y": "auto",
"-webkit-overflow-scrolling": "touch",
"-ms-overflow-style": "-ms-autohiding-scrollbar"
}).scroll(this._onScroll.bind(this));
this._$wrapper.css("overflow", "hidden"),
this._$wrapper.on("mouseenter.sidebar-scroll", function() {
h._bottomFixed || h._dragging || (h._options.alwaysVisible || h._$scrollBar
.addClass("active"), h._onScroll())
}).on("mouseleave.sidebar-scroll", function() {
h._bottomFixed || h._dragging || (h._options.alwaysVisible || h._$scrollBar
.removeClass("active"), h._onScroll())
}).on("mousewheel.sidebar-scroll", function(t, e) {
if (!t.isDefaultPrevented()) return h.scroll(e, "MozMousePixelScroll" === t
.originalEvent.type ? 2 : null)
}), !1 !== this._options.showTopShadow && (this._$shadowTop = $(
'<div class="sb-inner-shadow top i-invisible">').appendTo(this._$wrapper)), !1 !==
this._options.showBottomShadow && (this._$shadowBottom = $(
'<div class="sb-inner-shadow">').appendTo(this._$wrapper)), this._$shadowTop && this
._header_height && this._$shadowTop.css("top", this._header_height - this
._shadow_offset), l = this._options.additionalClass ? " " + this._options
.additionalClass : "", c = this._options.alwaysVisible ? " active-always" : "", this
._$scrollBarWrapper = $('<div class="sb-scrollbar-wrap">').appendTo(this._$wrapper),
this._$scrollBar = $('<div class="sb-scrollbar sb-scrollbar-body' + l + c + '"></div>')
.appendTo(this._$scrollBarWrapper), this._onScroll()
}
var n = i(134).lazyJqueryUI;
o.prototype.isTouch = function() {
return this._touch
}, o.prototype.getScrollBar = function() {
return this._$scrollBar
}, o.prototype._defaultOptions = {
headerHeight: 0,
additionalClass: "",
alwaysVisible: !1,
showBottomShadow: !0,
scrollMarginTop: 1,
bubbleScrollEvent: !1
}, o.prototype.initDraggable = function() {
if (this._dragInitialized) return this;
var t = this;
return n(this._$scrollBar).draggable({
axis: "y",
containment: this._$scrollBarWrapper,
start: function() {
t._dragging = !0
},
stop: function() {
t._dragging = !1
},
drag: function(e, i) {
t.updateScroll()
}
}), this._dragInitialized = !0, this
}, o.prototype.updateScroll = function() {
var t, e, i, o, n;
return this._touch ? this : (t = 1, e = Math.ceil(this._$scrollBar.position().top - this
._scroll_margin_top - this._header_height), i = this
.getContainerHeightWithoutHeader(), o = this._$content.outerHeight(), n = o -
i - t, i <= 0 ? this : (this._scroll_target_top = n <= 0 ? this._header_height :
Math.min(-e * o / i + this._header_height, this._header_height), e + this
._$scrollBar.height() + 2 >= i ? this.scrollToEnd() : (this._$content.css(
"top", this._scroll_target_top + "px"), this._onScroll()), this))
}, o.prototype.getContainerHeightWithoutHeader = function() {
return this._$wrapper[0].getBoundingClientRect().height - this._header_height
}, o.prototype.getContainerHeight = function() {
return this._$wrapper[0].getBoundingClientRect().height
}, o.prototype.getContentHeight = function() {
return this._$content[0].getBoundingClientRect().height
}, o.prototype.updateScrollBar = function() {
var t, e, i, o, n, r, s, a, l;
return this._touch ? this : (t = 1, e = this._$content.position().top, i = this
.getContentHeight(), o = this.getContainerHeight(), n = this
.getContainerHeightWithoutHeader(), r = t + this._header_height, s = n - 2 * t,
a = (Math.abs(e) - this._header_height) * s / i, l = o * o / i, this
.isContentShort() ? (this._$scrollBar.addClass("js-hidden"), this._$wrapper
.removeClass("sb-scroll-active")) : (this._$scrollBar.removeClass(
"js-hidden").height(l).css("top", r + a),
this._$wrapper.addClass("sb-scroll-active"), this.initDraggable()), this)
}, o.prototype.scroll = function(t, e) {
var i, o, n, r, s;
return this._touch ? this : (i = this._$content.position().top, o = this._$content
.outerHeight(), n = this.getContainerHeightWithoutHeader(), r = o - n - 1, s =
e || this._scroll_speed, r <= 0 || (this._scroll_target_top = Math.max(-r + this
._header_height, Math.min(this._header_height, i + t * s)), this
.setContentTop(this._scroll_target_top), this._onScroll()))
}, o.prototype.animateTo = function(t) {
var e, i, o;
return this._touch ? this : (e = this._$content.outerHeight(), i = this
.getContainerHeightWithoutHeader(), (o = e - i - 1) <= 0 || (this
._scroll_target_top = Math.max(-o + this._header_height, Math.min(this
._header_height, -t)), void this._$content.animate({
top: this._scroll_target_top
}, 500, function() {
this._onScroll()
}.bind(this))))
}, o.prototype.resize = function() {
var t, e;
if (!this._bottomFixed) {
if (t = this._$content.outerHeight(), e = this._$wrapper.outerHeight(), !this
._options.vAlignBottom && t < e) return void(this.atStart() || this
.scrollToStart());
this.atEnd() ? this.scrollToEnd() : "number" == typeof this._stickyBottom && this
.setContentTop(Math.min(0, this._stickyBottom + this._$wrapper.outerHeight() -
this._$content.outerHeight()))
}
}, o.prototype.resizeHeader = function(t) {
var e = t - this._header_height;
this._header_height = t, this._scroll_target_top += e, this._$shadowTop && this
._$shadowTop.css("top", this._header_height - this._shadow_offset), this.resize()
}, o.prototype.scrollTo = function(t, e) {
var i, o, n, r, s, a;
if (e = $.extend({
position: "visible",
areaHeight: t instanceof $ ? t.height() : 0
}, e), t instanceof $ && (t = e.offsetTop || t.position().top), i = this._$content
.position().top, o = this._$content.outerHeight(), n = this
.getContainerHeightWithoutHeader(), o - n - 1 <= 0) return !0;
if (r = -1 * (i - this._header_height), s = r + n, a = 0, "visible" === e.position) {
if (t > r && t + e.areaHeight < s) return !1;
a = t + e.areaHeight > s ? s - t - e.areaHeight : r - t
} else "top" === e.position && (a = r - t);
return this.scroll(a, 1), this._onScroll(), !1
}, o.prototype.scrollToEnd = function() {
var t = this._$content.position().top,
e = this._$content.outerHeight(),
i = this._$wrapper.outerHeight(),
o = e + t;
return this.setContentTop(t + (i - o) + 1), this._onScroll(), this
}, o.prototype.scrollToStart = function() {
return this.setContentTop(this._header_height), this._onScroll(), this
}, o.prototype.currentPosition = function() {
return Math.round(this._$content.position().top)
}, o.prototype.atStart = function() {
return Math.round(this._$content.position().top) >= this._header_height
}, o.prototype.atEnd = function(t) {
var e, i, o, n;
return "number" == typeof t && isFinite(t) || (t = 0), e = 1, i = Math.round(this
._$content.position().top), o = this._$content.outerHeight(), n = this._$wrapper
.outerHeight(), o - Math.abs(i) - e <= n + t
}, o.prototype._onScroll = function(t) {
var e, i;
return this._touch || this._$content.css("bottom", "auto"), this.scrolled.fire(), this
._dragging && !0 !== t || this.updateScrollBar(), e = this.atStart(), i = this
.atEnd(), this._$shadowTop && this._$shadowTop.toggleClass("i-invisible", !!e), this
._$shadowBottom && this._$shadowBottom.toggleClass("i-invisible", !!i), this
._onContentVisible(), !this._atStart && e ? (this._atStart = !0,
this.scrolltostart.fire()) : this._atStart && !e && delete this._atStart, !this
._atEnd && i ? (this._atEnd = !0, this.scrolltoend.fire()) : this._atEnd && !i &&
delete this._atEnd, this._options.vAlignBottom && (this._stickyBottom = this
._$content.outerHeight() - Math.abs(this._$content.position().top) - this
._$wrapper.outerHeight()), !(!this._atStart && !this._atEnd || ("function" ==
typeof this._options.bubbleScrollEvent ? !this._options
.bubbleScrollEvent() : !this._options.bubbleScrollEvent))
}, o.prototype.checkContentVisibility = function() {
this._onContentVisible()
}, o.prototype.subscribeToContentVisible = function(t, e, i) {
this.visibilityCallbacks.push({
id: t,
$el: e,
callback: i
})
}, o.prototype.triggerVisibilityCallbacks = function(t) {
this._onContentVisible(t)
}, o.prototype._contentIsVisible = function(t) {
return t.$el.position().top > -1 * this.currentPosition()
}, o.prototype._onContentVisible = function(t) {
var e, i, o;
this.visibilityCallbacks.length && (e = t || this._contentIsVisible.bind(this), i = [],
o = this.visibilityCallbacks.filter(function(t, o) {
if (!$.contains(this._$content, t.$el[0])) return !1;
var n = e(t);
return n && i.push(o), !n
}, this), i.forEach(function(e) {
this.visibilityCallbacks[e].callback(!!t)
}, this), delete this.visibilityCallbacks, this.visibilityCallbacks = o)
}, o.prototype.save = function() {
return this._saved = {
top: this._$content.position().top,
height: this._$content.outerHeight()
}, this
}, o.prototype.restore = function() {
if (this._saved) {
if (this._saved.top === this._$content.position().top && this._saved.height === this
._$content.outerHeight()) return delete this._saved, this;
this._options.vAlignBottom && (this._saved.top -= this._$content.outerHeight() -
this._saved.height, this._saved.top > this._header_height && (this._saved
.top = this._header_height)), this.setContentTop(this._saved.top),
delete this._saved, this._onScroll(!0)
}
return this
}, o.prototype.fixBottom = function() {
var t, e;
return this._bottomFixed ? this : (this._touch ? (t = this._$content.outerHeight(), e =
this._$wrapper.scrollTop(), this._tempIntervalID = setInterval(function() {
this._$wrapper.scrollTop(e + (this._$content.outerHeight() - t))
}.bind(this), 0)) : this._$content.css({
top: "auto",
bottom: this._$wrapper.outerHeight() - this._$content.position().top -
this._$content.outerHeight()
}), this._bottomFixed = !0, this)
}, o.prototype.releaseBottom = function() {
return this._bottomFixed ? (this._touch ? clearInterval(this._tempIntervalID) : this
._$content.css({
top: this._$content.position().top,
bottom: "auto"
}), delete this._bottomFixed, this._onScroll(), this) : this
}, o.prototype.setContentTop = function(t) {
return this._touch ? this._options.vAlignBottom && this._$content.outerHeight() < this
._$wrapper.outerHeight() ? (this._$wrapper.css("overflow-y", "visible"), this
._$content.css({
position: "absolute",
bottom: 0
})) : (this._$content.css({
position: "relative",
bottom: "auto"
}), this._$wrapper.css("overflow-y", "auto"), this._$wrapper.scrollTop(-t)) : this
._$content.css("top", t), this
}, o.prototype.isContentShort = function() {
return this.getContentHeight() <= this.getContainerHeightWithoutHeader()
}, o.prototype.destroy = function() {
this._$scrollBarWrapper.remove(), this._$shadowBottom && this._$shadowBottom.remove(),
this._$shadowTop && this._$shadowTop.remove(), this._$wrapper.attr("style", "").off(
"mouseenter.sidebar-scroll").off("mouseleave.sidebar-scroll").off(
"mousewheel.sidebar-scroll"), this._$content.attr("style", "")
}, e.SidebarCustomScroll = o
}).call(e, i(10))
}, function(t, e, i) {
"use strict";
var o, n, r, s;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(10), r = function() {
function t(t, e, i, o, r) {
var s = this;
this._onChange = new n, this._handleChange = function() {
s._onChange.fire(s.get())
}, this._crossTabEvents = t, this._jsonKeyValueStore = e, this.CROSSTAB_EVENT_NAME = i,
this.JSON_STORE_KEY = o, this.defaultStoreValue = this._serialize(r), this._subscribe()
}
return t.prototype.get = function() {
var t = this._jsonKeyValueStore.getJSON(this.JSON_STORE_KEY, this.defaultStoreValue);
return this._deserialize(t)
}, t.prototype.set = function(t) {
var e = this._serialize(t);
this._jsonKeyValueStore.setJSON(this.JSON_STORE_KEY, e), this._crossTabEvents.emit(this
.CROSSTAB_EVENT_NAME), this._onChange.fire(t)
}, t.prototype.getOnChange = function() {
return this._onChange
}, t.prototype.destroy = function() {
this._unsubscribe(), this._onChange.destroy()
}, t.prototype._subscribe = function() {
this._crossTabEvents.on(this.CROSSTAB_EVENT_NAME, this._handleChange), this
._jsonKeyValueStore.onSync.subscribe(this, this._handleChange)
}, t.prototype._unsubscribe = function() {
this._crossTabEvents.off(this.CROSSTAB_EVENT_NAME, this._handleChange), this
._jsonKeyValueStore.onSync.unsubscribe(this, this._handleChange)
}, t
}(), e.AbstractJsonStoreService = r, s = function(t) {
function e() {
return null !== t && t.apply(this, arguments) || this
}
return o.__extends(e, t), e.prototype._serialize = function(t) {
return t
}, e.prototype._deserialize = function(t) {
return t
}, e
}(r), e.CommonJsonStoreService = s
}, function(t, e) {}, function(t, e, i) {
"use strict";
function o(t) {
this.items = t.items, this._simpleMode = t.simpleMode, this.barSpacing = t.barSpacing, this
.lineColor = t.lineColor, this.lineWidth = t.lineWidth, this.lineStyle = t.lineStyle, this
.withMarkers = t.withMarkers, this.withSteps = t.withSteps, this.hittest = t.hittest, this
.ignorePaletteLineWidth = t.ignorePaletteLineWidth, this.forceLineColor = !!t.forceLineColor
}
var n = i(8).Point,
r = i(44).distanceToSegment,
s = i(45),
a = i(11);
o.prototype.draw = function(t) {
t.lineCap = "square", t.lineJoin = this.withMarkers ? "round" : "miter", t.strokeStyle = this
.lineColor, t.fillStyle = this.lineColor, t.lineWidth = this.lineWidth, t.lineStyle = this
.lineStyle, s.setValidLineStyle(t, this.lineStyle), this._simpleMode ? this._drawSimpleMode(
t) : this._drawLines(t)
}, o.prototype._drawSimpleMode = function(t) {
var e, i, o, n;
if (t.beginPath(), this.walkLine(t, this.items), t.stroke(), this.withMarkers) {
for (e = this.lineWidth + 2, i = 2 * Math.PI, t.beginPath(), n = this.items.length; n--;)(
o = this.items[n]) && (t.moveTo(o.x, o.y), t.arc(o.x, o.y, e, 0, i));
t.fill()
}
}, o.prototype.walkLine = function(t, e, i, o) {
var n, r, a, l, c, h, u, d, p, _, f;
if (e) {
for (n = .25 * this.barSpacing, u = s.coordinateIsValid, d = 0, p = e.length; d < p; d++)
if (_ = e[d], u(_.y)) {
a = _, r = d;
break
} if (void 0 !== r && a)
for (f = this.withSteps && this.lineWidth && this.lineWidth % 2 == 0 ? .5 : 0, d = r,
p = e.length; d < p; d++) {
if (c = e[d], h = e[d + 1] || {},
u(c.y))
if (l && u(l.y)) this.withSteps && t.lineTo(l.x + f, c.y + f), t.lineTo(c.x + f,
c.y + f), i && !u(h.y) && t.lineTo(c.x + f, o);
else if (h && u(h.y)) i ? (d !== r && t.lineTo(c.x + f, o), t.lineTo(c.x + f, c
.y + f)) : t.moveTo(c.x + f, c.y + f);
else if (i) {
if (0 === d) continue;
d !== r && t.lineTo(c.x - n + f, o), t.lineTo(c.x - n + f, c.y + f), t.lineTo(c
.x + n + f, c.y + f), t.lineTo(c.x + n + f, o)
} else t.moveTo(c.x - n + f, c.y + f), t.lineTo(c.x + n + f, c.y + f);
l = c
}
}
}, o.prototype._drawLines = function(t) {
function e(e, i, o) {
a(i.y) && (a(e.y) ? t.lineTo(i.x, i.y) : o && a(o.y) ? t.moveTo(i.x, i.y) : (t.moveTo(i.x -
r, i.y), t.lineTo(i.x + r, i.y)))
}
var i, o, n, r, a, l, c, h, u, d, p, _, f, m;
if (this.items.length) {
for (r = .25 * this.barSpacing, a = s.coordinateIsValid, t.beginPath(), l = this.items[0],
l && t.moveTo(l.x, l.y), c = t.strokeStyle, h = t.lineWidth, u = t.lineStyle, d = 1; d <
this.items.length; ++d) i = this.items[d - 1], o = this.items[d], n = this.items[d + 1],
o.style && !this.forceLineColor ? (p = o.style.color, _ = o.style.width, f = o.style
.style) : (p = this.lineColor, _ = this.lineWidth, f = this.lineStyle), this
.ignorePaletteLineWidth && (_ = this.lineWidth), m = p !== c || _ !== h || f !== u, m &&
(c = p, h = _, u = f, t.stroke(), t.beginPath(), t.strokeStyle = p, t.lineWidth = _, s
.setValidLineStyle(t, f), t.moveTo(i.x, i.y)), e(i, o, n);
t.stroke()
}
}, o.prototype.hitTest = function(t) {
for (var e, i, o, l, c, h, u, d, p = s.selectionTolerance(this.lineWidth), _ = 0, f = this.items
.length - 1; f - _ > 2;) h = Math.round((f + _) / 2), u = this.items[h], u.x <= t.x ?
_ = h : f = h;
for (_ = Math.max(1, _ - 1), f = Math.min(this.items.length - 1, f + 1), d = _; d <= f; ++d)
if (e = this.items[d - 1], i = this.items[d], o = e.x, l = i.x, c = r(new n(o, e.y), new n(
l, i.y), new n(t.x, t.y)), c.distance <= p) return this.hittest ? this.hittest :
new a(a.REGULAR);
return null
}, e.PaneRendererLine = TradingView.PaneRendererLine = o
}, function(t, e, i) {
"use strict";
var o, n;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(28), n = function() {
function t() {}
return t.prototype.format = function(t) {
return o.customFormatters && o.customFormatters.dateFormatter ? o.customFormatters
.dateFormatter.format(t) : o.numberToStringWithLeadingZero(t.getUTCFullYear(), 4) +
"-" + o.numberToStringWithLeadingZero(t.getUTCMonth() + 1, 2) + "-" + o
.numberToStringWithLeadingZero(t.getUTCDate(), 2)
}, t.prototype.formatLocal = function(t) {
return o.customFormatters.dateFormatter ? o.customFormatters.dateFormatter.formatLocal ?
o.customFormatters.dateFormatter.formatLocal(t) : o.customFormatters.dateFormatter
.format(t) : o.numberToStringWithLeadingZero(t.getFullYear(), 4) + "-" + o
.numberToStringWithLeadingZero(t.getMonth() + 1, 2) + "-" + o
.numberToStringWithLeadingZero(t.getDate(), 2)
}, t
}(), e.DateFormatter = n
}, , , , , , , , , , , , , , , , , , , , , , function(t, e, i) {
"use strict";
var o, n = function() {
try {
this.isAvailable = !0, this.localStorage = window.localStorage, this.localStorage.setItem(
"tvlocalstorage.available", "true")
} catch (t) {
delete this.isAvailable, delete this.localStorage
}
this._updateLength()
};
n.prototype.length = 0, n.prototype.isAvailable = !1, n.prototype.localStorage = {
"tvlocalstorage.available": "false"
}, n.prototype._updateLength = function() {
var t, e;
if (this.isAvailable) this.length = this.localStorage.length;
else {
t = 0;
for (e in this.localStorage) this.localStorage.hasOwnProperty(e) && t++;
this.length = t
}
}, n.prototype.key = function(t) {
return this.isAvailable ? this.localStorage.key(t) : Object.keys(this.localStorage)[t]
}, n.prototype.getItem = function(t) {
return this.isAvailable ? this.localStorage.getItem(t) : this.localStorage[t]
}, n.prototype.setItem = function(t, e) {
this.isAvailable ? this.localStorage.setItem(t, e) : this.localStorage[t] = e, this
._updateLength()
}, n.prototype.removeItem = function(t) {
this.isAvailable ? this.localStorage.removeItem(t) : delete this.localStorage[t], this
._updateLength()
}, n.prototype.clear = function() {
this.isAvailable ? this.localStorage.clear() : this.localStorage = {}, this._updateLength()
}, o = function(t) {
this.storage = t
}, o.prototype.getItem = function(t) {
return Promise.resolve(this.storage.getItem(t))
}, o.prototype.setItem = function(t, e) {
return Promise.resolve(this.storage.setItem(t, e))
}, window.TVLocalStorage = new n, window.TVLocalStorageAsync = new o(window.TVLocalStorage), t
.exports = {
TVLocalStorage: window.TVLocalStorage,
TVLocalStorageAsync: window.TVLocalStorageAsync
}
}, function(t, e, i) {
"use strict";
function o(t) {
return t.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&")
}
Object.defineProperty(e, "__esModule", {
value: !0
}), e.regExpEscape = o
}, function(t, e, i) {
"use strict";
(function(o) {
function n(t) {
return t && t.__esModule ? t : {
default: t
}
}
function r() {
var t, e, i = h.width();
for (d.width = i, d.height = h.height(), t = 0; t < p.length; t++)
if (i <= d.breakpoints[p[t]]) {
d.device !== p[t] && (e = d.device, d.device = p[t], d.trigger("changeDevice", [p[
t], e]));
break
} return d
}
var s, a, l, c, h, u, d, p;
Object.defineProperty(e, "__esModule", {
value: !0
}), s = i(91), a = n(s), l = i(587), c = $("body"), h = $(window), u = 0, d = {
width: null,
height: null,
device: null,
checkDevice: r,
isMobileSafari: !!navigator.userAgent.match(/Version\/[\d\.]+.*Safari/) || !!navigator
.userAgent.match("CriOS"),
getScrollbarWidth: function() {
var t = void 0;
return function() {
var e, i, o, n;
return void 0 === t && (e = document.createElement("div"), e.style
.visibility = "hidden", e.style.width = "100px", e.style
.msOverflowStyle = "scrollbar", document.body.appendChild(e),
i = e.offsetWidth, e.style.overflow = "scroll", o = document
.createElement("div"), o.style.width = "100%", e.appendChild(o),
n = o.offsetWidth, e.parentNode.removeChild(e), t = i - n), t
}
}(),
hasScroll: function(t) {
return t.get(0).scrollHeight > t.height()
},
breakpoints: l.breakpoints,
widgetbarBreakpoint: 1064,
setFixedBodyState: function(t) {
var e, i, o;
t && 1 == ++u ? ("hidden" !== $(document.body).css("overflow").toLowerCase() &&
document.body.scrollHeight > document.body.offsetHeight && ($(
".widgetbar-wrap").css("right", d.getScrollbarWidth()), c.css(
"padding-right", parseInt(c.css("padding-right").replace("px",
"")) + d.getScrollbarWidth() + "px").data("wasScroll", !0)), !
TradingView.isMobile.any() && d.isMobileSafari ? c.addClass(
"i-no-scroll-safari") : c.css("top", -h.scrollTop()).addClass(
"i-no-scroll")) : !t && u > 0 && 0 == --u && (!TradingView.isMobile
.any() && d.isMobileSafari ? c.removeClass("i-no-scroll-safari") : (
e = -parseInt(c.css("top").replace("px", "")), c.removeClass(
"i-no-scroll").css("top", ""), h.scrollTop(e)), c.data(
"wasScroll") && (i = c.get(0), $(".widgetbar-wrap").css("right", 0),
o = $(".widgetbar-wrap").width() || 0, i.scrollHeight <= i
.clientHeight && (o -= d.getScrollbarWidth()),
c.css("padding-right", (o < 0 ? 0 : o) + "px").data("wasScroll",
void 0)))
}
}, p = Object.keys(d.breakpoints).sort(function(t, e) {
return d.breakpoints[t] - d.breakpoints[e]
}), o.extend(d, a.default.prototype), r(), $(r), h.on("resize", r), e.default = d, t
.exports = e.default
}).call(e, i(118))
}, function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
});
var o = i(588);
e.TVDialogAbstract = o.TVDialogAbstract, e.closeAllDialogs = o.closeAllDialogs
}, function(t, e, i) {
"use strict";
function o(t) {
if (t) return function(e, i, o) {
function n(e, i) {
return i ? t[e](a, i) : t[e](a)
}
var r, s, a = $(this);
return "get" === e ? (r = i, "function" == typeof t[r] ? n(r, o) : t[r]) : t[e] ? a
.each(function() {
return n(e, s)
}) : a
}
}
function n(t, e) {
function i(t, e, i) {
return void 0 === i ? t[e]() : t[e](i)
}
if (t && e) return t = "" + t,
function(o, n, a) {
var l, c, h;
return "get" === o ? l = n : (c = n, "object" === (void 0 === o ? "undefined" : r(o)) &&
void 0 === n ? (c = o, o = "init") : "string" != typeof o && (o = "init")),
"getInstance" === o ? $(this).eq(0).data(t) : "destroy" === o ? (h = $(this).eq(0)
.data(t)) ? void("function" == typeof h.destroy ? (i(h, "destroy", c), $(this)
.eq(0).removeData(t)) : s.logError("[Block Plugin] " + t +
" does not support destroy command")) : void console.warn(
"[Block Plugin] Trying to execute destroy method of " + t +
" but it has not been inited") : "get" === o ? (h = $(this).eq(0).data(t), h ?
"function" == typeof h[l] ? i(h, l, a) : h[l] : void console.warn(
"[Block Plugin] Trying to get prop or execute method of " + t +
" but it has not been inited")) : $(this).each(function() {
var n = $(this),
r = n.data(t);
void 0 === r && (r = void 0 === c ? e(n) : e(n, c), n.data(t, r)),
"init" !== o && ("function" == typeof r[o] ? i(r, o, c) : s.logError(
"[Block Plugin] " + t + " does not support command " + o))
})
}
}
var r = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) {
return typeof t
} : function(t) {
return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ?
"symbol" : typeof t
},
s = i(7).getLogger("CommonUI.CreateTVBlockPlugin");
t.exports.createTvBlockPlugin = o, t.exports.createTvBlockWithInstance = n
}, function(t, e, i) {
"use strict";
(function(o) {
function n(t, e) {
if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
}
var r, s, a, l, c, h;
Object.defineProperty(e, "__esModule", {
value: !0
}), r = function() {
function t(t, e) {
var i, o;
for (i = 0; i < e.length; i++) o = e[i], o.enumerable = o.enumerable || !1, o
.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t,
o.key, o)
}
return function(e, i, o) {
return i && t(e.prototype, i), o && t(e, o), e
}
}(), s = i(203), i(296), a = i(7).getLogger("Ui.TvControlCheckbox"), l = {
labelWrapper: '{{#hasLabel}}<label>{{#labelLeft}}<span class="tv-control-checkbox__label {{#labelAddClass}}{{labelAddClass}}{{/labelAddClass}}">{{labelLeft}}</span>{{/labelLeft}}{{> inputWrapper }}{{#labelRight}}<span class="tv-control-checkbox__label {{#labelAddClass}}{{labelAddClass}}{{/labelAddClass}}">{{labelRight}}</span>{{/labelRight}}</label>{{/hasLabel}}{{^hasLabel}}{{> inputWrapper }}{{/hasLabel}}',
inputWrapper: '<{{ tag }} class="{{ customClass }}{{#disabled}} i-disabled{{/disabled}}">{{^hasCheckbox}}{{> checkbox }}{{/hasCheckbox}}{{> box }}{{> ripple }}</{{ tag }}>',
checkbox: '<input{{#id}} id="{{ id }}"{{/id}} class="{{> checkboxClass }}" type="checkbox"{{#name}} name="{{ name }}"{{/name}}{{#checked}} checked{{/checked}}{{#disabled}} disabled{{/disabled}}>',
checkboxClass: "{{ customClass }}__input",
box: '<span class="{{ customClass }}__box {{#boxAddClass}}{{boxAddClass}}{{/boxAddClass}}">' +
i(146) + "</span>",
ripple: '<span class="{{ customClass }}__ripple js-ripple"></span>'
}, c = "i-inited", h = function() {
function t(e) {
var i, o = e.customClass,
r = void 0 === o ? "tv-control-checkbox" : o,
s = e.$checkbox,
l = e.tag,
h = e.id,
u = e.name,
d = e.checked,
p = e.disabled,
_ = e.labelLeft,
f = e.labelRight,
m = e.labelAddClass,
g = e.boxAddClass;
if (n(this, t), this.$el = null, void 0 === l && (l = _ || f ? "span" : "label"),
i = s instanceof $ && !!s.length) {
if (!s.is("input[type=checkbox]")) return void a.logError(
"`$checkbox` need to be input[type=checkbox]");
if (s.hasClass(c)) return;
this._setInputId(s, h), this._setInputClass(s, r), this._setInputName(s, u),
this._setInputChecked(s, d), this._setInputDisabled(s, p), d = !!s.prop(
"checked"), p = !!s.attr("disabled")
}
this.$el = this.render({
$checkbox: s,
hasCheckbox: i,
customClass: r,
tag: l,
id: h,
name: u,
checked: d,
disabled: p,
labelLeft: _,
labelRight: f,
hasLabel: _ || f,
labelAddClass: m,
boxAddClass: g
}), this.$checkbox = i ? s : this.$el.find("input[type=checkbox]")
}
return r(t, [{
key: "_setInputId",
value: function(t, e) {
void 0 !== e && t.attr("id", e)
}
}, {
key: "_setInputClass",
value: function(t, e) {
var i = o.render(l.checkboxClass, {
customClass: e
});
t.addClass(i)
}
}, {
key: "_setInputName",
value: function(t, e) {
void 0 !== e && t.attr("name", e)
}
}, {
key: "_setInputChecked",
value: function(t, e) {
void 0 !== e && t.prop("checked", !!e)
}
}, {
key: "_setInputDisabled",
value: function(t, e) {
void 0 !== e && (e ? t.setAttribute("disabled", "disabled") : t
.removeAttr("disabled"))
}
}, {
key: "render",
value: function(t) {
var e, i = t.$checkbox,
n = $(o.render(l.labelWrapper, t, l));
return t.hasCheckbox && (n.insertBefore(i), e = n.find("." + t
.customClass).andSelf().filter("." + t.customClass)
.eq(0), e.prepend(i.detach()), i.addClass(c)), n
}
}, {
key: "checked",
set: function(t) {
this._setInputChecked(this.$checkbox, !!t)
},
get: function() {
return !!this.$checkbox.prop("checked")
}
}]), t
}(), $.fn.tvControlCheckbox = (0, s.createTvBlockWithInstance)("tv-control-checkbox",
function(t) {
var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
return new h(TradingView.mergeObj(e, {
$checkbox: t
}))
}), e.default = h, t.exports = e.default
}).call(e, i(41))
}, function(t, e, i) {
"use strict";
i(102);
t.exports = TradingView.templates = {
dialogs: {},
lists: {},
onChartMessage: '<div class="onchart-message"><span class="onchart-message-close"></span><div class="onchart-message-top"><div class="onchart-message-copy"></div></div><div class="onchart-message-bottom"><div class="onchart-message-ear"></div></div></div>',
miniWidgetWizardAddSymbol: '<tr class="tv-external-tools__symbol-item"><td class="tv-external-tools__symbol-item-cell">{{symbol}}</td><td class="tv-external-tools__symbol-item-cell{{#descriptionShortening}} apply-common-tooltip" title="{{description}}"{{/descriptionShortening}}">{{#descriptionShortening}}{{descriptionShortening}}{{/descriptionShortening}}{{^descriptionShortening}}{{description}}{{/descriptionShortening}}</td>{{#timeframeSelectAllow}}<td class="tv-external-tools__symbol-item-cell">{{timeframe}}</td>{{/timeframeSelectAllow}}<td class="tv-external-tools__remove-cell"><div class="tv-external-tools__remove-symbol"></div></td></tr>',
textNotesWidgetLayout: '<div class="notes-block"><div class="textnotes-search-header"><div class="search-input-block">' +
i(595) +
'<div class="search-clean"></div><input type="text" class="search-input" placeholder="' + $
.t("Search Note") +
'" maxlength="1000" autocomplete="off"></div><div class="new-note-btn">' + i(596) + $.t(
"NEW") +
'</div></div><div class="notes-wrapper"><div class="notes"></div></div></div><div class="notes-desc-block"><div class="notes-desc-wrapper"><div class="notes-desc-inner"><div class="remove-note-btn" title="' +
$.t("Delete Text Note") + '">' + i(597) +
'</div><div class="title-wrap"><input type="text" maxlength="100" value="" class="title"></div><div class="date"><span class="created">' +
$.t("Created ") + '<span class="created-val"></span>. </span><span class="modified">' + $.t(
"Last edited ") +
'<span class="modified-val"></span></span></div><textarea></textarea></div></div></div>',
textNotesWidgetItem: '<div class="note"><div class="note-header"><div {{#symbol}}title="' + $.t(
"Open {{symbol}} Text Note") +
'"{{/symbol}} class="title {{#symbol}}title_with-badge{{/symbol}}">{{title}}</div>{{#symbol}}<div class="symbol-badge">' +
i(598) +
'<span class="symbol">{{symbol}}</span></div>{{/symbol}}</div><div class="note-desc">{{description}}</div><span class="favorite"></span></div>',
tvDataTable: '<table class="tv-data-table {{className}}"><thead class="tv-data-table__thead"><tr class="tv-data-table__stroke">{{#columns}}<th class="tv-data-table__cell tv-data-table__cell--bold {{className}}"><span class="tv-data-table__cell-text{{^notSortable}} tv-data-table__sortable{{/notSortable}}{{#help}} apply-common-tooltip{{/help}}{{#htmlHelp}} common-tooltip-html{{/htmlHelp}}" {{#help}}title="{{help}}"{{/help}}>{{{label}}}</span></th>{{/columns}}</tr></thead>{{#bodies}}<tbody class="tv-data-table__tbody {{className}}">{{#strokes}}<tr class="tv-data-table__stroke">{{#cells}}<td class="tv-data-table__cell {{className}}"{{#colspan}}colspan="{{colspan}}"{{/colspan}}>{{#contain}}{{{contain}}}{{/contain}}</td>{{/cells}}</tr>{{/strokes}}</tbody>{{/bodies}}</table>',
tvDataTableRow: '<tr class="tv-data-table__stroke {{rowClassName}}">{{#columns}}<td class="tv-data-table__cell {{className}}">{{#contain}}{{{contain}}}{{/contain}}</td>{{/columns}}</tr>',
tvDataTableCell: '<td class="tv-data-table__cell {{className}}">{{#contain}}{{{contain}}}{{/contain}}</td>'
}
}, function(t, e, i) {
"use strict";
function o(t) {
var e = t.split(":");
return {
name: e[0],
type: 2 === e.length ? e[1] : null
}
}
function n(t, e, i, n) {
var r, s, a, l, c, p, _, f, m, g, v, y, b, S, w, T = i.split(".");
if (0 !== T.length && 0 !== T[0].length) {
if (r = o(T[0]), s = r.name, a = r.type, l = null !== a, c = !l || "plot" === a, p = !l ||
"band" === a, _ = !l || "area" === a, f = !l || "input" === a, m = c ? d.getPlotIdByTitle(t,
s) : null, g = p ? d.getBandIndexByName(t, s) : null, v = _ ? d.getFilledAreaIdByTitle(
t, s) : null, y = f ? d.getInputByName(t, s) : null, b = e.hasOwnProperty(s), (null !==
m ? 1 : 0) + (null !== g ? 1 : 0) + (null !== v ? 1 : 0) + (null !== y ? 1 : 0) + (b ?
1 : 0) > 1) return void h.logWarn("Study '" + t.description +
"' has ambiguous identifier '" + s + "'");
if (S = T[1], null !== m) {
if (1 === T.length) return void h.logWarn("Path of sub-property of '" + s +
"' plot for study '" + t.description + "' must be not empty");
w = T.slice(1), u.applyPlotProperty(t, e, m, w, n)
} else if (null !== y) u.applyInputValue(e, y, n);
else if (null !== g) {
if (void 0 === S) return void h.logWarn("Property name of '" + s + "' band for study '" + t
.description + "' must be set");
u.applyBandProperty(e, g, S, n)
} else if (null !== v) {
if (void 0 === S) return void h.logWarn("Property name of '" + s + "' area for study '" + t
.description + "' must be set");
u.applyFilledAreaProperty(e, v, S, n)
} else b ? u.setRootProperty(e, T, n) : h.logWarn("Study '" + t.description +
"' has no plot or input '" + s + "'")
}
}
function r(t, e) {
var i, o, r = t.properties(),
s = r.state();
for (i in e) e.hasOwnProperty(i) && n(t.metaInfo(), s, i, e[i]);
r.merge(s), o = r.precision, void 0 !== o ? o.listeners().fire(o) : r.listeners().fire(r)
}
function s(t, e, i) {
var o, r, s, a, l;
for (o in t) t.hasOwnProperty(o) && -1 !== (r = o.indexOf(".")) && (s = o.substr(0, r), a = d
.getMetaInfoByDescription(e, s), null !== a ? (l = i(a.id), null !== l ? n(a, l, o.substr(
r + 1), t[o]) : h.logWarn("Cannot apply overrides for study " + s)) : h.logWarn(
"There is no such study " + s))
}
var a, l, c, h, u, d;
Object.defineProperty(e, "__esModule", {
value: !0
}), a = i(111), l = i(9), c = i(7), h = c.getLogger("Chart.Model.StudyPropertiesOverrider"),
function(t) {
function e(t) {
return "colorer" === t.type
}
function i(t, i, o) {
var n, r, s, a;
if (void 0 === t.plots) return null;
for (n = 0, r = t.plots; n < r.length; n++)
if (s = r[n], e(s) && void 0 !== i.palettes && (a = i.palettes[s.palette], s.target ===
o && void 0 !== a)) return a;
return null
}
function o(t, e, i, o, n) {
return void 0 === t.styles ? void h.logWarn("Study does not have styles") : null === e && !
isNaN(o) && o > 0 ? void h.logWarn("Study plot does not have color #" + o) : ((0 ===
o || isNaN(o)) && (l.ensureDefined(t.styles[i]).color = n + "", o = 0), void(
null !== e && (l.ensureDefined(e.colors[o]).color = n + "")))
}
function n(t, e, n, r, s) {
var a, l, c, u, p;
if (void 0 === e.styles) return void h.logWarn("Study does not have styles");
if ("color" === (a = r[0])) return l = i(t, e, n), c = r.length > 1 ? parseInt(r[1]) : NaN,
void o(e, l, n, c, s);
if (void 0 === (u = e.styles[n]) || !u.hasOwnProperty(a)) return void h.logWarn(
"Study plot does not have property '" + a + "'");
if ("plottype" === a) {
if (void 0 === (p = d[s + ""])) return void h.logWarn(
"Unsupported plot type for plot: " + s);
s = p
}
u[a] = s
}
function r(t, e, i, o) {
var n, r;
if (void 0 === t.bands) return void h.logWarn("Study does not have bands");
if (void 0 === (n = t.bands[e]) || !n.hasOwnProperty(i)) return void h.logWarn(
"Study band does not have property '" + i + "'");
if ("plottype" === i) {
if (void 0 === (r = d[o + ""])) return void h.logWarn(
"Unsupported plot type for band: " + o);
o = r
}
n[i] = o
}
function s(t, e, i, o) {
if (void 0 === t.filledAreasStyle) return void h.logWarn("Study does not have areas");
var n = t.filledAreasStyle[e];
if (void 0 === n || !n.hasOwnProperty(i)) return void h.logWarn(
"Study area does not have property '" + i + "'");
n[i] = o
}
function c(t, e, i) {
if (void 0 === t.inputs || !t.inputs.hasOwnProperty(e)) return void h.logWarn(
"Study does not have input '" + e + "'");
t.inputs[e] = i
}
function u(t, e, i) {
var o, n, r, s, a;
if (0 !== e.length) {
for (o = t, n = 0, r = e.slice(0, -1); n < r.length && (s = r[n], null != o && t
.hasOwnProperty(s)); n++) o = t[s];
if (a = e[e.length - 1], null == o || !o.hasOwnProperty(a)) return void h.logWarn(
"Study does not have property " + e.join("."));
o[a] = i
}
}
var d = {
line: a.PlotType.Line,
histogram: a.PlotType.Histogram,
cross: a.PlotType.Cross,
area: a.PlotType.Area,
columns: a.PlotType.Columns,
circles: a.PlotType.Circles,
line_with_breaks: a.PlotType.LineWithBreaks,
area_with_breaks: a.PlotType.AreaWithBreaks
};
t.applyPlotProperty = n, t.applyBandProperty = r, t.applyFilledAreaProperty = s, t
.applyInputValue = c, t.setRootProperty = u
}(u || (u = {})),
function(t) {
function e(t, e) {
var i, o, n;
if (void 0 === t.inputs) return null;
for (e = e.toLowerCase(), i = 0, o = t.inputs; i < o.length; i++)
if (n = o[i], n.name.toLowerCase() === e) return n.id;
return null
}
function i(t, e) {
var i, o, n;
if (void 0 === t.styles) return null;
e = e.toLowerCase();
for (i in t.styles)
if (o = t.styles[i], n = void 0 !== o && void 0 !== o.title ? o.title : i, n
.toLowerCase() === e) return i;
return null
}
function o(t, e) {
var i, o, n;
if (void 0 === t.filledAreas) return null;
for (e = e.toLowerCase(), i = 0, o = t.filledAreas; i < o.length; i++)
if (n = o[i], n.title.toLowerCase() === e) return n.id;
return null
}
function n(t, e) {
if (void 0 === t.bands) return null;
e = e.toLowerCase();
for (var i = 0; i < t.bands.length; ++i)
if (t.bands[i].name.toLowerCase() === e) return i;
return null
}
function r(t, e) {
var i, o, n;
for (e = e.toLowerCase(), i = 0, o = t; i < o.length; i++)
if (n = o[i], n.description.toLowerCase() === e || n.shortDescription.toLowerCase() ===
e) return n;
return null
}
t.getInputByName = e, t.getPlotIdByTitle = i, t.getFilledAreaIdByTitle = o, t
.getBandIndexByName = n, t.getMetaInfoByDescription = r
}(d || (d = {})), e.applyOverridesToStudy = r, e.applyOverridesToStudyDefaults = s
}, function(t, e, i) {
"use strict";
function o(t, e, i) {
var o, n, r, s, a = null,
l = 0;
return i = i || {}, s = function() {
l = !1 === i.leading ? 0 : Date.now(), a = null, r = t.apply(o, n), a || (o = n = null)
},
function() {
var c, h = Date.now();
return l || !1 !== i.leading || (l = h), c = e - (h - l), o = this, n = arguments, c <= 0 ||
c > e ? (a && (clearTimeout(a), a = null), l = h, r = t.apply(o, n), a || (o = n =
null)) : a || !1 === i.trailing || (a = setTimeout(s, c)), r
}
}
Object.defineProperty(e, "__esModule", {
value: !0
}), e.default = o, t.exports = e.default
}, function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c, h, u;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), i(43), n = i(2), r = i(14), s = i(59), a = i(85), l = i(151), c = i(722), h = i(392),
u = function(t) {
function e(e) {
var i = t.call(this, e) || this;
return i._toggleDropdown = function(t) {
i.setState({
isOpened: void 0 !== t ? t : !i.state.isOpened
})
}, i._handleClose = function() {
i._toggleDropdown(!1)
}, i._getDropdownPosition = function() {
if (!i._control) return {
x: 0,
y: 0
};
var t = i._control.getBoundingClientRect();
return {
x: t.left + t.width + 1,
y: t.top - 6
}
}, i._handleClickArrow = function() {
i._toggleDropdown()
}, i._handleTouchStart = function() {
i.props.onClickButton(), i._toggleDropdown()
}, i._handlePressStart = function() {
if (Modernizr.touch) i._longPressDelay || i.props.onClickButton();
else {
if (i._doubleClickDelay) return clearTimeout(i._doubleClickDelay), delete i
._doubleClickDelay, void i._toggleDropdown(!0);
i._doubleClickDelay = setTimeout(function() {
delete i._doubleClickDelay, i._longPressDelay || i.props
.onClickButton()
}, 175)
}
i._longPressDelay = setTimeout(function() {
delete i._longPressDelay, i._toggleDropdown(!0)
}, 300)
}, i._handlePressEnd = function() {
i._longPressDelay && (clearTimeout(i._longPressDelay), delete i._longPressDelay, i
.state.isOpened ? i._toggleDropdown(!1) : i.state.isOpened || !i.props
.isActive || Modernizr.touch || i._toggleDropdown(!0))
}, i.state = {
isOpened: !1
}, i
}
return o.__extends(e, t), e.prototype.render = function() {
var t, e = this,
i = this.props,
o = i.buttonActiveClass,
u = i.buttonClass,
d = i.buttonIcon,
p = i.buttonTitle,
_ = i.children,
f = i.isActive,
m = i.isGrayed,
g = i.onClickWhenGrayed,
v = this.state.isOpened;
return n.createElement("div", {
className: r(c.dropdown, "apply-common-tooltip common-tooltip-vertical", (
t = {}, t[c.isGrayed] = m, t[c.isActive] = f, t[c.isOpened] = v,
t)),
onClick: m ? g : void 0,
title: p,
"data-tooltip-delay": 1500
}, n.createElement("div", {
ref: function(t) {
return e._control = t
},
className: c.control
}, n.createElement("div", {
className: c.buttonWrap,
onMouseDown: m || Modernizr.touch ? void 0 : this._handlePressStart,
onMouseUp: m || Modernizr.touch ? void 0 : this._handlePressEnd,
onClick: !m && Modernizr.touch ? this._handleTouchStart : void 0
}, n.createElement(l.ToolButton, {
activeClass: o,
className: u,
icon: d,
isActive: f,
isGrayed: m,
isTransparent: !0
})), !m && !Modernizr.touch && n.createElement("div", {
className: c.arrow,
onClick: this._handleClickArrow
}, n.createElement(s.Icon, {
className: c.arrowIcon,
icon: h
}))), !m && n.createElement(a.PopupMenu, {
doNotCloseOn: this,
isOpened: v,
onClose: this._handleClose,
position: this._getDropdownPosition
}, _))
}, e
}(n.PureComponent), e.ToolDropdown = u
}, function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 14 14" width="14" height="14"><path fill-rule="evenodd" d="M10.893 9.512l.458 3.624c.014.105-.006.16-.02.176-.028.03-.109.005-.182-.03L7.812 11.73a1.973 1.973 0 0 0-.811-.16c-.302 0-.59.057-.81.16l-3.338 1.552c-.118.056-.164.051-.182.03-.014-.016-.034-.07-.02-.178L3.11 9.51c.06-.503-.162-1.18-.505-1.54L.087 5.302c-.085-.091-.09-.148-.086-.158.003-.01.04-.053.16-.077l3.621-.689c.491-.09 1.069-.506 1.315-.948L7.004 0l1.902 3.43c.246.442.824.859 1.312.947l3.617.69c.123.024.162.068.164.077.003.01-.003.066-.089.157L11.4 7.97c-.348.367-.57 1.045-.506 1.543z"/></svg>'
}, function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 14 14" width="14" height="14"><path d="M9.901 9.639c-.102-.797.218-1.775.77-2.356l1.438-1.527-2.07-.395c-.784-.142-1.615-.742-2.008-1.446L7.003 2.06 5.97 3.917c-.391.702-1.222 1.301-2 1.443l-2.08.396 1.44 1.526c.547.577.866 1.549.77 2.353l-.262 2.086 1.93-.897a2.95 2.95 0 0 1 1.233-.254c.44 0 .87.085 1.233.254l1.93.897-.263-2.082zm.992-.127l.458 3.624c.014.105-.006.16-.02.176-.028.03-.109.005-.182-.03L7.812 11.73a1.973 1.973 0 0 0-.811-.16c-.302 0-.59.057-.81.16l-3.338 1.552c-.118.056-.164.051-.182.03-.014-.016-.034-.07-.02-.178L3.11 9.51c.06-.503-.162-1.18-.505-1.54L.087 5.302c-.085-.091-.09-.148-.086-.158.003-.01.04-.053.16-.077l3.621-.689c.491-.09 1.069-.506 1.315-.948L7.004 0l1.902 3.43c.246.442.824.859 1.312.947l3.617.69c.123.024.162.068.164.077.003.01-.003.066-.089.157L11.4 7.97c-.348.367-.57 1.045-.506 1.543z"/></svg>'
}, function(t, e, i) {
"use strict";
function o(t) {
return n.createDialog(Object.assign({}, a, t))
}
var n, r, s, a;
Object.defineProperty(e, "__esModule", {
value: !0
}), i(12), n = i(65), r = {
key: 13,
name: "yes",
text: $.t("Yes"),
type: "success"
}, s = {
method: "close",
name: "no",
text: $.t("No"),
type: "default"
}, a = {
actions: [r, s],
actionsWrapTemplate: '<div class="tv-dialog__section tv-dialog__section--actions tv-dialog__section--no-border">',
content: $.t("Are you sure?"),
contentWrapTemplate: '<div class="tv-dialog__section tv-dialog__section--no-border"><div class="tv-text"><p></p></div></div>',
destroyOnClose: !0,
title: $.t("Confirmation"),
width: 400
}, e.createConfirmDialog = o
}, function(t, e, i) {
"use strict";
var o, n, r, s;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(9), n = i(19),
function(t) {
t[t.FromLeft = -1] = "FromLeft", t[t.FromRight = 1] = "FromRight"
}(r = e.TimePointIndexSearchMode || (e.TimePointIndexSearchMode = {})), s = function() {
function t(t) {
this.m_bars = new n.PlotList(t), this.m_nsBars = new n.PlotList(t)
}
return t.prototype.bars = function() {
return this.m_bars
}, t.prototype.nsBars = function() {
return this.m_nsBars
}, t.prototype.size = function() {
return this.m_bars.size() + this.m_nsBars.size()
}, t.prototype.each = function(t) {
this.m_bars.each(t), this.m_nsBars.each(t)
}, t.prototype.clear = function() {
this.m_bars.clear(), this.m_nsBars.clear(), this.lastProjectionPrice = void 0
}, t.prototype.isEmpty = function() {
return this.m_bars.isEmpty() && this.m_nsBars.isEmpty()
}, t.prototype.first = function() {
return this.m_bars.isEmpty() ? this.m_nsBars.first() : this.m_bars.first()
}, t.prototype.last = function() {
return this.m_nsBars.isEmpty() ? this.m_bars.last() : this.m_nsBars.last()
}, t.prototype.search = function(t, e) {
return this.nsBars().isEmpty() ? this.bars().search(t, e) : this.bars().isEmpty() ? this
.nsBars().search(t, e) : o.ensureNotNull(this.nsBars().firstIndex()) <= t ? this
.nsBars().search(t, e) : this.bars().search(t, e)
}, t.prototype.valueAt = function(t) {
var e = this.search(t);
return null !== e ? e.value : null
}, t.prototype.plotValueToTimePointIndex = function(t, e, i) {
var o, n, s, a;
if (i === r.FromRight) return o = function(i, o) {
var n = o[e];
return void 0 !== n && null !== n && t >= n
}, null !== (n = this.m_bars.findLast(o)) ? n.index : (s = this.m_nsBars
.findLast(o),
null !== s ? s.index : this.m_bars.firstIndex());
if (i === r.FromLeft) return a = function(i, o) {
var n = o[e];
return void 0 !== n && null !== n && t <= n
}, null !== (n = this.m_bars.findFirst(a)) ? n.index : (s = this.m_nsBars
.findFirst(a), null !== s ? s.index : this.m_bars.lastIndex());
throw Error("plotValueToTimePointIndex: unsupported search mode")
}, t
}(), e.SeriesData = s
}, function(t, e, i) {
"use strict";
var o, n;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(15), n = function() {
function t(t) {
void 0 === t && (t = 1), this._precision = t
}
return t.prototype.format = function(t) {
var e, i;
return o.isNumber(t) || (t = parseFloat(t)), e = t.toFixed(this._precision), i = Math
.pow(10, -this._precision), Math.max(parseFloat(e), i) + ""
}, t
}(), e.LimitedPrecisionNumericFormatter = n
}, function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="-80 -25 140 140" width="16" height="16"><path d="M10 12L-.7.7-41 43.2l.1.1-.1.1L-.7 85.9l10-10.6-29.7-31.2z"/></svg>'
}, function(t, e, i) {
"use strict";
var o, n, r;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(9), n = i(17), i(13), r = function() {
function t(t) {
var e = this;
this._alive = new n, this._body = new n, this._width = new n, this._height = new n, this
._fullscreen = new n, this._detachable = new n, this._visible = new n, this
._availWidth = new n, this._availHeight = new n, this._owner = new n, this
._ownersStack = [], this.owner = this._owner.readonly(), this._bridge = {
alive: this._alive.readonly(),
body: this._body.readonly(),
width: this._width.readonly(),
height: this._height.readonly(),
fullscreen: this._fullscreen.readonly(),
detachable: this._detachable.readonly(),
visible: this._visible.readonly(),
availWidth: this._availWidth.readonly(),
availHeight: this._availHeight.readonly(),
remove: function() {
var t = e._owner.value();
t && t.remove && t.remove()
},
negotiateWidth: function(t) {
var i = e._owner.value();
i && i.negotiateWidth && i.negotiateWidth(t)
},
negotiateHeight: function(t) {
var i = e._owner.value();
i && i.negotiateHeight && i.negotiateHeight(t)
},
requestFullscreen: function() {
var t = e._owner.value();
t && t.requestFullscreen && t.requestFullscreen()
},
exitFullscreen: function() {
var t = e._owner.value();
t && t.exitFullscreen && t.exitFullscreen()
},
detach: function(t) {
var i = e._owner.value();
i && i.detach && i.detach(t)
},
attach: function() {
var t = e._owner.value();
t && t.attach && t.attach()
}
}, t && this.pushOwner(t)
}
return t.prototype.bridge = function() {
return this._bridge
}, t.prototype.pushOwner = function(t) {
var e, i, o, n;
if (t.alive.value()) {
for (e = 0, i = this._ownersStack; e < i.length; e++) o = i[e], this
._unsubscribeOwner(o);
n = {
owner: t
}, this._ownersStack.push(n), this._subscribeOwner(n)
}
}, t.prototype._subscribeOwner = function(t) {
var e, i, o = this,
n = t.owner;
t.deathWatcher || (this._alive.setValue(!0), t.deathWatcher = n.alive.spawn(), t
.deathWatcher.subscribe(function(e) {
e || o._deadHandler(t)
})), t.subscriptions || (e = t.subscriptions = [], this._visible.setValue(!1),
i = function(t, i) {
if (t) {
var o = t.spawn();
e.push(o), o.subscribe(function(t) {
i.setValue(t)
}, {
callWithLast: !0
})
} else i.deleteValue()
}, i(n.body, this._body), i(n.width, this._width), i(n.height, this._height), i(
n.fullscreen, this._fullscreen), i(n.detachable, this._detachable), i(n
.availWidth, this._availWidth),
i(n.availHeight, this._availHeight), i(n.visible, this._visible)), this._owner
.setValue(n)
}, t.prototype._unsubscribeOwner = function(t, e) {
var i, o, n;
if (t.subscriptions) {
for (i = 0, o = t.subscriptions; i < o.length; i++) n = o[i], n.unsubscribe();
t.subscriptions = null
}
e && t.deathWatcher && (t.deathWatcher.unsubscribe(), t.deathWatcher = null)
}, t.prototype._deadHandler = function(t) {
var e, i = this._ownersStack.indexOf(t);
for (o.assert(-1 !== i, "sanitized owner should be in stack"), e = this._ownersStack
.length - 1; e >= i; e--) this._unsubscribeOwner(this._ownersStack[e], !0);
this._ownersStack.length = i, i > 0 ? this._subscribeOwner(this._ownersStack[i - 1]) : (
this._alive.setValue(!1), this._owner.deleteValue())
}, t
}(), e.ResizerDetacherState = r
}, function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
}), e.layouts = {
s: {
title: "1 chart",
count: 1,
sizer: function(t, e, i, o) {
return {
width: e.width - o - o,
height: e.height - o - o,
top: o,
left: o
}
}
}
}
}, function(t, e, i) {
"use strict";
function o() {
this.backColorers = []
}
function n(t) {
o.call(this), this._series = t
}
function r(t, e) {
o.call(this), this._study = t, this._plotIndex = e
}
var s = i(19).PlotRowSearchMode;
o.prototype.barStyle = function(t, e, i) {
var o, n = {};
for (o = this.backColorers.length - 1; o >= 0; o--) this.backColorers[o].applyBarStyle(t, e, n,
i);
return this.applyBarStyle(t, e, n, i), n
}, o.prototype.pushBackBarColorer = function(t) {
this.backColorers.push(t)
}, o.prototype.applyBarStyle = function(t, e, i) {
throw Error("This function is supposed to be reimplemented in a subclass")
}, inherit(n, o), n.prototype.applyBarStyle = function(t, e, i, o) {
var n, r, s, a, l, c, h, u, d, p, _, f, m, g, v;
switch (i || (i = {}), i.barColor = null, i.barBorderColor = null, i.barWickColor = null, i
.isBarHollow = null, i.isBarUp = null, i.upColor = null, i.downColor = null, i
.isTwoColorBar = null, n = this._series.properties(), n.style.value()) {
case TradingView.Series.STYLE_LINE:
i.barColor = n.lineStyle.color.value();
break;
case TradingView.Series.STYLE_AREA:
i.barColor = n.areaStyle.linecolor.value();
break;
case TradingView.Series.STYLE_BARS:
r = n.barStyle.upColor.value(), s = n.barStyle.downColor.value(), a = r, l = s, c = this
.findBar(t, !1, o), n.barStyle.barColorsOnPrevClose.value() ? (h = this.findPrevBar(
t, !1, o), i.barColor = h[TradingView.CLOSE_PLOT] <= c[TradingView
.CLOSE_PLOT] ? r : s, i.barBorderColor = h[TradingView.CLOSE_PLOT] <= c[
TradingView.CLOSE_PLOT] ? a : l) : (i.barColor = c[TradingView.OPEN_PLOT] <= c[
TradingView.CLOSE_PLOT] ? r : s, i.barBorderColor = c[TradingView
.OPEN_PLOT] <= c[TradingView.CLOSE_PLOT] ? a : l);
break;
case TradingView.Series.STYLE_CANDLES:
r = n.candleStyle.upColor.value(), s = n.candleStyle.downColor.value(), a = n
.candleStyle.borderUpColor ? n.candleStyle.borderUpColor.value() : n.candleStyle
.borderColor.value(), l = n.candleStyle.borderDownColor ? n.candleStyle
.borderDownColor.value() : n.candleStyle.borderColor.value(), u = n.candleStyle
.wickUpColor ? n.candleStyle.wickUpColor.value() : n.candleStyle.wickColor.value(),
d = n.candleStyle.wickDownColor ? n.candleStyle.wickDownColor.value() : n
.candleStyle.wickColor.value(), c = this.findBar(t, !1, o), n.candleStyle
.barColorsOnPrevClose.value() ? (h = this.findPrevBar(t, !1, o),
p = h[TradingView.CLOSE_PLOT] <= c[TradingView.CLOSE_PLOT]) : p = c[TradingView
.OPEN_PLOT] <= c[TradingView.CLOSE_PLOT], i.barColor = p ? r : s, i
.barBorderColor = p ? a : l, i.barWickColor = p ? u : d;
break;
case TradingView.Series.STYLE_HOLLOW_CANDLES:
r = n.hollowCandleStyle.upColor.value(), s = n.hollowCandleStyle.downColor.value(), a =
n.hollowCandleStyle.borderUpColor ? n.hollowCandleStyle.borderUpColor.value() : n
.hollowCandleStyle.borderColor.value(), l = n.hollowCandleStyle.borderDownColor ? n
.hollowCandleStyle.borderDownColor.value() : n.hollowCandleStyle.borderColor
.value(), u = n.hollowCandleStyle.wickUpColor ? n.hollowCandleStyle.wickUpColor
.value() : n.hollowCandleStyle.wickColor.value(), d = n.hollowCandleStyle
.wickDownColor ? n.hollowCandleStyle.wickDownColor.value() : n.hollowCandleStyle
.wickColor.value(), c = this.findBar(t, !1, o), h = this.findPrevBar(t, !1, o), h[
TradingView.CLOSE_PLOT] <= c[TradingView.CLOSE_PLOT] ? (i.barColor = r, i
.barBorderColor = a, i.barWickColor = u) : (i.barColor = s, i.barBorderColor =
l, i.barWickColor = d), c[TradingView.OPEN_PLOT] <= c[TradingView.CLOSE_PLOT] ?
i.isBarHollow = !0 : i.isBarHollow = !1;
break;
case TradingView.Series.STYLE_HEIKEN_ASHI:
r = n.haStyle.upColor.value(), s = n.haStyle.downColor.value(), a = n.haStyle
.borderUpColor.value(), l = n.haStyle.borderDownColor.value(), u = n.haStyle
.wickUpColor.value(), d = n.haStyle.wickDownColor.value(), c = this.findBar(t, e,
o), n.haStyle.barColorsOnPrevClose.value() ? (h = this.findPrevBar(t, e, o), p =
h[
TradingView.CLOSE_PLOT] <= c[TradingView.CLOSE_PLOT]) : p = c[TradingView
.OPEN_PLOT] <= c[TradingView.CLOSE_PLOT], i.barColor = p ? r : s, i
.barBorderColor = p ? a : l, i.barWickColor = p ? u : d;
break;
case TradingView.Series.STYLE_RENKO:
c = this.findBar(t, e, o), p = c[TradingView.OPEN_PLOT] <= c[TradingView.CLOSE_PLOT],
r = e ? n.renkoStyle.upColorProjection.value() : n.renkoStyle.upColor.value(), s =
e ? n.renkoStyle.downColorProjection.value() : n.renkoStyle.downColor.value(), a =
e ? n.renkoStyle.borderUpColorProjection.value() : n.renkoStyle.borderUpColor
.value(), l = e ? n.renkoStyle.borderDownColorProjection.value() : n.renkoStyle
.borderDownColor.value(), u = n.renkoStyle.wickUpColor.value(), d = n.renkoStyle
.wickDownColor.value(), i.barColor = p ? r : s, i.barBorderColor = p ? a : l, i
.barWickColor = p ? u : d, i.isBarUp = p;
break;
case TradingView.Series.STYLE_PB:
c = this.findBar(t, e, o), p = c[TradingView.OPEN_PLOT] <= c[TradingView.CLOSE_PLOT],
r = e ? n.pbStyle.upColorProjection.value() : n.pbStyle.upColor.value(), s = e ? n
.pbStyle.downColorProjection.value() : n.pbStyle.downColor.value(), a = e ? n
.pbStyle.borderUpColorProjection.value() : n.pbStyle.borderUpColor.value(), l = e ?
n.pbStyle.borderDownColorProjection.value() : n.pbStyle.borderDownColor.value(), i
.barColor = p ? r : s, i.barBorderColor = p ? a : l, i.isBarUp = p;
break;
case TradingView.Series.STYLE_KAGI:
i.upColor = e ? n.kagiStyle.upColorProjection.value() : n.kagiStyle.upColor.value(), i
.downColor = e ? n.kagiStyle.downColorProjection.value() : n.kagiStyle.downColor
.value(), _ = null, c = this.findBar(t, e, o), c[TradingView.LOW_PLOT] < c[
TradingView.ADT_PLOT] && c[TradingView.ADT_PLOT] < c[TradingView.HIGH_PLOT] ? (
_ = c[TradingView.OPEN_PLOT] <= c[TradingView.CLOSE_PLOT],
i.isTwoColorBar = !0) : (_ = c[TradingView.OPEN_PLOT] <= c[TradingView
.CLOSE_PLOT] ? c[TradingView.OPEN_PLOT] === c[TradingView.ADT_PLOT] : c[
TradingView.OPEN_PLOT] !== c[TradingView.ADT_PLOT], i.isTwoColorBar = !1), i
.barColor = _ ? i.upColor : i.downColor, i.isBarUp = c[TradingView.OPEN_PLOT] <= c[
TradingView.CLOSE_PLOT];
break;
case TradingView.Series.STYLE_PNF:
c = this.findBar(t, e, o), p = c[TradingView.ADT_PLOT] > 0, r = e ? n.pnfStyle
.upColorProjection.value() : n.pnfStyle.upColor.value(), s = e ? n.pnfStyle
.downColorProjection.value() : n.pnfStyle.downColor.value(), i.isBarUp = p, i
.barColor = p ? r : s;
break;
case TradingView.Series.STYLE_BASELINE:
c = this.findBar(t, e, o), f = n.baselineStyle, m = this._series.priceScale(), g = Math
.round(m.height() * (Math.abs(100 - f.baseLevelPercentage.value()) / 100)), v = m
.coordinateToPrice(g), c[TradingView.CLOSE_PLOT] > v ? i.barColor = n.baselineStyle
.topLineColor.value() : i.barColor = n.baselineStyle.bottomLineColor.value()
}
return i
}, n.prototype.getSeriesBars = function(t) {
return t ? this._series.nsBars() : this._series.bars()
}, n.prototype._findBarFieldValue = function(t, e, i) {
var o = this.getSeriesBars(i).valueAt(t);
if (null !== o) return o[e]
}, n.prototype.findBar = function(t, e, i) {
return i ? i.value : this.getSeriesBars(e).valueAt(t) || []
}, n.prototype.findPrevBar = function(t, e, i) {
var o, n;
return i && i.previousValue ? i.previousValue : (o = this._series.bars(), n = o._search(t, s
.Exact), null !== n && n > 0 ? this._series.bars()._valueAt(n - 1) : [])
}, inherit(r, o), r.prototype.applyBarStyle = function(t, e, i) {
var o, n, r, s, a, l, c, h, u, d, p, _, f;
return i || (i = {}), e ? i : (o = this._study.properties(), o.visible.value() ? (n = this
._study.metaInfo(), (r = this._study.data()) && 0 !== r.size() ? (s = n.plots[this
._plotIndex], this._study.getMinFirstBarIndexForPlot(s.id) > t ? i : (a = o
.styles[s.id], a.visible && !a.visible.value() ? i : (l = this._study
.offset(s.id), null === (c = r.valueAt(t - l)) ? i : null == (h = c[this
._plotIndex + 1]) ? i : (h = Math.round(h), u = n.plots[this
._plotIndex].palette, d = o.palettes, p = d[u], _ = n.palettes[
u].valToIndex ? n.palettes[u].valToIndex[h] : h, f = p.colors[_]
.color.value(), i.barColor = f, i.upColor = f.color, i.downColor = f
.color, i)))) : i) : i)
}, e.SeriesBarColorer = n, e.StudyBarColorer = r
}, function(t, e, i) {
"use strict";
function o(t) {
this.items = t.items, this.barSpacing = t.barSpacing, this.colorUp = t.colorup, this.colorDn = t
.colordown, this.colorBorderUp = t.colorBorderUp, this.colorBorderDown = t.colorBorderDown, this
.width = this._calculateWidth(t.barSpacing), this.minHeight = t.minHeight, this.vertOffset =
this._calculateVerticalOffset(t.barSpacing)
}
function n(t, e, i, o) {
this.x = t, this.y = e, this.height = i, this.isUp = o
}
var r = i(8).Point,
s = i(11);
o.prototype._calculateVerticalOffset = function(t) {
return Math.round((t || 0) / 4)
}, o.prototype._calculateMinHeight = function(t) {
return this.width || this._calculateWidth(t)
}, o.prototype._calculateWidth = function(t) {
var t = t || this.barSpacing;
return Math.round(t / 2)
}, o.prototype.draw = function(t) {
var e, i, o, n, r, s, a, l = this.width,
c = l < 4,
h = Math.max(parseInt(l / 2), 1),
u = Math.round(this.width / 2),
d = Math.round(this.width);
for (t.translate(1, 1), e = 0, i = this.items.length; e < i; e++) o = this.items[e], n = o
.isUp ? -1 : 1, r = Math.abs(o.height), s = o.y - n * this.vertOffset, t.beginPath(),
t.translate(o.x, s), c ? (t.moveTo(0, 0), t.lineTo(-u, -u * n), t.moveTo(0, 0), t.lineTo(u,
-u * n), t.moveTo(0, 0), t.lineTo(0, -r * n), t.moveTo(-u, -r * n), t.lineTo(u, -r *
n), t.lineWidth = h, t.strokeStyle = o.isUp ? this.colorUp : this.colorDn, t
.stroke()) : (t.moveTo(0, 0), r < d ? (t.lineTo(l, -r * n), t.lineTo(-l, -r * n)) : (t
.lineTo(l, -d * n), t.lineTo(u, -d * n), t.lineTo(u, -r * n), t.lineTo(-u, -r * n),
t.lineTo(-u, -d * n), t.lineTo(-l, -d * n)), t.lineTo(0, 0), a = o.isUp ? this
.colorBorderUp : this.colorBorderDown, t.strokeStyle = a, t.stroke(), t.fillStyle = o
.isUp ? this.colorUp : this.colorDn, t.fill()), t.translate(-o.x, -s);
t.translate(-1, -1)
}, o.prototype.hitTest = function(t) {
var e, i, o, n, r, a, l, c, h, u = Math.round(this.width / 2),
d = Math.round(this.width);
for (e = 0; e < this.items.length; ++e)
if ((i = this.items[e]) && void 0 !== i.x && null !== i.x && !TradingView.isNaN(i.x) &&
void 0 !== i.y && null !== i.y && !TradingView.isNaN(i.y) && (o = Math.abs(i.height),
n = i.isUp ? -1 : 1, r = o + d, a = i.y - n * this.vertOffset, l = a - n * r, c = i
.x - u, h = i.x + u, c < t.x && t.x < h && (i.isUp ? a < t.y && t.y < l : l < t.y &&
t.y < a))) return new s(s.REGULAR);
return null
}, inherit(n, r), e.PaneRendererArrowsUpDown = TradingView.PaneRendererArrowsUpDown = o, e
.PaneRendererArrowsUpDownItem = TradingView.PaneRendererArrowsUpDownItem = n
}, function(t, e, i) {
"use strict";
function o(t) {
this._graphics = o.emptyGraphics(), n(!!t, "Study metaInfo is absent!"), this._metaInfo = t
}
var n = i(9).assert,
r = i(7).getLogger("Chart.StudyGraphics");
o.emptyGraphics = function() {
return {
indexes: []
}
}, o.prototype.isEmpty = function() {
var t = Object.keys(this._graphics).length > 1;
return 0 === this._graphics.indexes.length && !t
}, o.prototype.graphics = function() {
return this._graphics
}, o.prototype.setGraphics = function(t) {
this._graphics = t, this._postProcessGraphicsData()
}, o.prototype.process = function(t) {
if ("" !== t.d) return t.d.indexes_replace ? void this.replaceIndexes(t) : void(t.d
.graphicsCmds && (this.processEraseCmds(t.d.graphicsCmds.erase), this
.processCreateCmds(t.d.graphicsCmds.create, t.indexes)))
}, o.prototype.replaceIndexes = function(t) {
"" !== t.d && (n(!!t.d.indexes_replace), this._graphics.indexes = t.indexes)
}, o.prototype.processEraseCmds = function(t) {
var e, i, r, s, a;
if (t)
for (n(!!this._graphics, "_graphics object doesn't exist in the study!"), n(!!this._graphics
.indexes, "_graphics.indexes array doesn't exist in the study!"), e = 0; e < t
.length; ++e)
if (i = t[e], "all" === i.action) this._graphics = o.emptyGraphics();
else {
if ("one" !== i.action) throw Error("Unknown graphics command " + i.action);
for (r in this._graphics[i.type]) s = this._graphics[i.type][r], (a = o
._findGraphicsObjIndexById(s.data, i.id)) >= 0 && s.data.splice(a, 1)
}
}, o._findGraphicsObjIndexById = function(t, e) {
for (var i = 0; i < t.length; ++i)
if (t[i].id === e) return i;
return -1
}, o.prototype.processCreateCmds = function(t, e) {
var i, o, r, s, a, l;
if (t) {
n(!!e, "indexes are missing in the study nonseries response!"), n(!!this._graphics,
"_graphics object doesn't exist in the study!"), n(!!this._graphics.indexes,
"_graphics.indexes array doesn't exist in the study!");
for (i in t) {
n(i in this._metaInfo.graphics, "There is a '" + i +
"' in study response, but it doesn't present in metaInfo!");
for (o = 0; o < t[i].length; ++o) {
r = t[i][o], s = r.styleId,
n(s in this._metaInfo.graphics[i]), this._graphics[i] || (this._graphics[
i] = []), a = null;
for (l = 0; l < this._graphics[i].length; ++l)
if (this._graphics[i][l].styleId === s) {
a = this._graphics[i][l];
break
} null === a && (a = {
styleId: s,
data: []
}, this._graphics[i].push(a)), a.data = a.data.concat(r.data)
}
}
"nochange" === e || (n(Array.isArray(e)), this._graphics.indexes = e), this
._postProcessGraphicsData()
}
}, o.prototype._postProcessGraphicsData = function() {
this._graphics && this._splitHHistItems()
}, o.prototype._splitHHistItems = function() {
var t, e, i, n, r, s, a, l, c, h, u, d;
if (void 0 !== this._graphics.hhists) {
for (t in this._graphics.hhists) e = this._graphics.hhists[t], o._sortHHistItemsByPrice(e
.data), i = this._graphics.indexes, e.dataObj = o._splitHHistItemsBySession(e.data,
i);
if (n = this._graphics.hhists[0], r = this._graphics.hhists[1], n && r && n.dataObj && r
.dataObj)
for (s in n.dataObj)
if (a = n.dataObj[s], l = r.dataObj[s], a && l) {
for (c = l[0], h = l[l.length - 1], u = 0; u < a.length; u++) d = a[u], (d
.priceHigh >= c.priceHigh || d.priceLow >= c.priceLow) && (d
.priceHigh <= h.priceHigh || d.priceLow <= h.priceLow) && (d.va = !0);
n.shortDataObj || (n.shortDataObj = {}), n.shortDataObj[s] = a.slice()
}
}
}, o._sortHHistItemsByPrice = function(t) {
t.sort(function(t, e) {
return t.priceLow - e.priceLow
})
}, o._splitHHistItemsBySession = function(t, e) {
var i, o, n, s = {};
for (i = 0; i < t.length; ++i) o = t[i], n = e[o.firstBarTime], void 0 !== n ? (n in s || (s[
n] = []), s[n].push(o)) : r.logError("Cannot find index " + o.firstBarTime +
" in study timescale indexes");
return s
}, t.exports = o
}, function(t, e, i) {
"use strict";
function o() {}
var n = i(9).assert,
r = i(57),
s = i(870);
o.isValid = function(t) {
return !(!r[t] && !s[t])
}, o.create = function(t, e, i, a, l) {
var c;
return n(o.isValid(t), "Unknown line tool: " + t), c = r[t] || s[t], "LineToolVbPFixed" === t ?
new c(e, i, a, l) : "LineToolRegressionTrend" === t ? new c(e, i, a) : [
"LineStudyMtpAnalysis", "LineStudyMtpDecisionPoint", "LineStudyMtpRiskReward",
"LineStudyMtpElliotWaveMain", "LineStudyMtpElliotWaveMajor",
"LineStudyMtpElliotWaveMinor", "LineStudyMtpDownWave1OrA", "LineStudyMtpDownWave2OrB",
"LineStudyMtpDownWave3", "LineStudyMtpDownWave4", "LineStudyMtpDownWave5",
"LineStudyMtpDownWaveC", "LineStudyMtpUpWave1OrA", "LineStudyMtpUpWave2OrB",
"LineStudyMtpUpWave3", "LineStudyMtpUpWave4", "LineStudyMtpUpWave5",
"LineStudyMtpUpWaveC"
].indexOf(t) >= 0 ? new c(e, i, a) : new c(e, i)
}, t.exports = o
}, function(t, e, i) {
"use strict";
var o, n, r, s, a;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(9), r = i(67), s = i(15), a = function(t) {
function e(e, i) {
var o = t.call(this) || this;
return o._activeBackground = "#0F6DBF", o._background = "#5592C9", o._active = !1, o
._source = e, o._data = i, o
}
return o.__extends(e, t), e.prototype.setActive = function(t) {
this._active = t
}, e.prototype.setBackground = function(t) {
this._background = t
}, e.prototype._updateRendererData = function(t) {
var e, i, o, r, a, l, c, h;
if (t.visible = !1, e = this._source.model(), e.timeScale() && !e.timeScale()
.isEmpty() && null !== (i = this._source.priceScale()) && !i.isEmpty() && (e
.selectedSource() === this._source || this._source.isForcedDrawPriceAxisLabel()
) && null !== e.timeScale().visibleBars() && (o = this._source.axisPoints(), r =
this._data.pointIndex, !(o.length <= r) && (a = o[r],
isFinite(a.price)))) {
if (i.isPercent()) {
if (!(l = this._source.ownerSource())) return;
if (c = l.firstValue(), !s.isNumber(c)) return;
a.price = n.ensureNotNull(i.priceRange()).convertToPercent(a.price, c)
}
h = this._active ? this._activeBackground : this._background, this._data
.backgroundProperty && (h = this._data.backgroundProperty.value()), t
.background = h, t.borderColor = "#2E84A6", t.color = this.generateTextColor(h),
t.coordinate = i.priceToCoordinate(a.price), t.text = i.formatter().format(a
.price), t.visible = !0
}
}, e
}(r.PriceAxisView), e.LineToolPriceAxisView = a
}, function(t, e, i) {
"use strict";
var o, n;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(32), n = function() {
function t() {
this._text = "", this._background = "#585858", this._coordinate = 0
}
return t.prototype.text = function() {
return this._text
}, t.prototype.background = function() {
return this._background
}, t.prototype.color = function() {
return "black" === o.rgbToBlackWhiteString(o.parseRgb(this._background), 150) ?
"white" : "black"
}, t.prototype.coordinate = function() {
return this._coordinate
}, t
}(), e.TimeAxisView = n
}, function(t, e, i) {
"use strict";
function o() {
this._data = null
}
var n = /[1-9]/g;
o.prototype.setData = function(t) {
this._data = t
}, o.prototype.draw = function(t, e) {
var i, o, r, s, a, l, c, h, u, d, p, _, f, m, g, v, y, b, S;
null != this._data && !1 !== this._data.visible && 0 !== this._data.text.length && (t.font = e
.font, (i = Math.round(e.widthCache.measureText(t, this._data.text, n))) <= 0 || (o = e
.paddingHorizontal, r = i + 2 * o, s = r / 2, a = this._data.width, l = this._data
.coordinate, c = Math.floor(l - s) + .5, c < 0 ? (l += Math.abs(0 - c), c = Math
.floor(l - s) + .5) : c + r > a && (l -= Math.abs(a - (c + r)), c = Math.floor(
l - s) + .5), h = c, u = h + r, d = u, p = Math.round(this._data.coordinate +
1), _ = p, f = .5, m = f + e.borderSize + e.tickLength + e.paddingTop + e
.fontSize +
e.paddingBottom, g = m, v = f, y = v, b = y + e.borderSize + e.tickLength, S = m - e
.baselineOffset - e.paddingBottom, t.fillStyle = this._data.background, t
.lineWidth = 1, t.beginPath(), t.strokeStyle = this._data.color, t.moveTo(c, f), t
.lineTo(h, m), t.lineTo(u, g), t.lineTo(d, v), t.fill(), t.beginPath(), t.moveTo(p,
y), t.lineTo(_, b), t.stroke(), t.textAlign = "left", t.fillStyle = this._data
.color, t.fillText(this._data.text, c + o, S)))
}, t.exports = o
}, function(t, e, i) {
"use strict";
function o(t, e) {
this.customization = {
forcePriceAxisLabel: !0,
disableSelection: !0,
disableErasing: !0
}, n.call(this, t, e)
}
var n = i(1).LineDataSource;
inherit(o, n), o.POINTS_COUNT = 1, o.prototype.pointsCount = function() {
return o.POINTS_COUNT
}, o.prototype.hasContextMenu = function() {
return !1
}, o.prototype.state = function() {
return null
}, o.prototype.startMoving = function() {
n.prototype.startMoving.apply(this, arguments), this._cursorMoved = !1
}, o.prototype.endMoving = function() {
n.prototype.endMoving.apply(this, arguments), this._cursorMoved = !1
}, o.prototype.correctPoints = function(t) {
var e, i, o, n, r;
for (this._currentMovingPoint && this._startMovingPoint ? this._currentMovingPoint.price - this
._startMovingPoint.price && (this._cursorMoved = !0) : this._cursorMoved = !1, e = this
.priceScale(), i = e.mainSource().base(), o = 1 / i, n = 0; n < t.length; n++) r = t[n],
this._cursorMoved && (r.price = this._currentMovingPoint.price), r.price = o * Math.round(r
.price / o), t[n] = r
}, o.prototype.userEditEnabled = function() {
return !0
},
o.prototype.canBeHidden = function() {
return !1
}, o.prototype.isUserDeletable = function() {
return !1
}, o.prototype.showInObjectTree = function() {
return !1
}, o.prototype.getInputsPropertyPage = function() {
return null
}, t.exports = o
}, function(t, e, i) {
"use strict";
(function(t) {
function o(e, n) {
var r, s, c, d, p, _, f, m, g, v, y = n || new h("linetoolriskreward");
a.call(this, e, y), this._properties.addExclusion && (this._properties.addExclusion(
"stopLevel"), this._properties.addExclusion("profitLevel")), n.stopLevel || n
.profitLevel || (r = e.timeScale().visibleBars(), s = r.firstBar(), c = r.lastBar(), d =
e.mainSeries().priceRange(s, c), p = e.mainSeries().priceScale(), p.isLog() && (_ =
p.logicalToPrice(d.minValue()), f = p.logicalToPrice(d.maxValue()), d = new t(_,
f)), p.isPercent() && (m = e.mainSeries().firstValue(), _ = p.priceRange()
.convertFromPercent(d.minValue(), m), f = p.priceRange().convertFromPercent(d
.maxValue(), m), d = new t(_, f)), d && !d.isEmpty() && (g = Math.round(.2 *
d.length() * e.mainSeries().base()), y.merge({
stopLevel: g,
profitLevel: g
}))), v = this, y.stopLevel.listeners().subscribe(this, this.recalculate), y
.stopLevel.listeners().subscribe(null, function() {
v.properties().stopPrice._listeners.fire(v.properties().stopPrice)
}), y.profitLevel.listeners().subscribe(this, this.recalculate), y.profitLevel
.listeners().subscribe(null, function() {
v.properties().targetPrice._listeners.fire(v.properties().targetPrice)
}), y.addChild("entryPrice", new o.PriceProperty(this, 0)), y.addChild("stopPrice",
new o.StopPriceProperty(this)), y.addChild("targetPrice", new o.TargetPriceProperty(
this)), y.addProperty("riskSize", 250), y.addProperty("qty", 0), y.addProperty(
"amountTarget", y.accountSize.value()), y.addProperty("amountStop", y.accountSize
.value()), this._riskInPercentsFormatter = new u(2), this._riskInMoneyFormatter =
new u, y.risk.subscribe(this, this._recalculateRiskSize), y.accountSize.subscribe(this,
this._recalculateRiskSize), y.riskDisplayMode.subscribe(this, this
._recalculateRisk), y.riskDisplayMode.subscribe(this, this._recalculateRiskSize), y
.entryPrice.subscribe(this, this._recalculateRiskSize), y.stopPrice.subscribe(this, this
._recalculateRiskSize), y.profitLevel.subscribe(this, this._recalculateRiskSize), y
.stopLevel.subscribe(this, this._recalculateRiskSize), y.qty.subscribe(this, this
._recalculateRiskSize), "percents" === y.riskDisplayMode.value() && y.risk.value() >
100 && y.riskDisplayMode.setValueSilently("money"), this._syncStateExclusions = [
"entryPrice", "stopPrice", "targetPrice", "riskSize", "qty", "amountTarget",
"amountStop", "risk", "accountSize"
], this.version = o.version, this._entryPriceAxisView = new l(this, {
colorProperty: y.linecolor,
priceProperty: y.entryPrice
}), this._stopPriceAxisView = new l(this, {
colorProperty: y.stopBackground,
priceProperty: y.stopPrice
}), this._profitPriceAxisView = new l(this, {
colorProperty: y.profitBackground,
priceProperty: y.targetPrice
}), i.e(1).then(function(t) {
var e = i(1170).RiskRewardPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
function n(t, e) {
var i, n;
this._constructor = "LineToolRiskRewardShort", i = e || new h("linetoolriskrewardshort"), o
.call(this, t, i), n = this.properties(),
n.entryPrice.subscribe(this, this._recalculateQty), n.stopPrice.subscribe(this, this
._recalculateQty), n.riskSize.subscribe(this, this._recalculateQty), n.entryPrice
.subscribe(this, this._recalculateAmount), n.profitLevel.subscribe(this, this
._recalculateAmount), n.stopLevel.subscribe(this, this._recalculateAmount), n
.accountSize.subscribe(this, this._recalculateAmount), n.riskSize.subscribe(this, this
._recalculateAmount), n.qty.subscribe(this, this._recalculateAmount)
}
function r(t, e) {
var i, n;
this._constructor = "LineToolRiskRewardLong", i = e || new h("linetoolriskrewardlong"), o
.call(this, t, i), n = this.properties(), n.entryPrice.subscribe(this, this
._recalculateQty), n.stopPrice.subscribe(this, this._recalculateQty), n.riskSize
.subscribe(this, this._recalculateQty), n.entryPrice.subscribe(this, this
._recalculateAmount), n.profitLevel.subscribe(this, this._recalculateAmount), n
.stopLevel.subscribe(this, this._recalculateAmount), n.accountSize.subscribe(this, this
._recalculateAmount), n.riskSize.subscribe(this, this._recalculateAmount), n.qty
.subscribe(this, this._recalculateAmount)
}
var s = i(9).ensureNotNull,
a = i(1).LineDataSource,
l = i(843).LineToolRiskRewardPriceAxisView,
c = i(26),
h = i(6).DefaultProperty,
u = i(89).NumericFormatter,
d = i(3).propertyPages,
p = i(408).RiskRewardPointIndex;
inherit(o, a), o.prototype.riskFormatter = function(t) {
return "percents" === t ? this._riskInPercentsFormatter : this._riskInMoneyFormatter
}, o.prototype.getRiskStep = function(t) {
return "percents" === t ? .01 : 1
}, o.prototype._roundValue = function(t) {
return parseFloat(t.toFixed(2))
}, o.prototype._recalculateRisk = function() {
var t = this.properties(),
e = t.riskDisplayMode.value(),
i = t.riskSize.value(),
o = t.accountSize.value(),
n = t.risk.value();
n = "percents" === e ? this._roundValue(i / o * 100) : this._roundValue(o / 100 * n),
this._riskInChange = !0, t.risk.setValue(this.riskFormatter(e).format(n)), this
._riskInChange = !1
}, o.prototype._recalculateRiskSize = function() {
var t, e, i, o;
this._riskInChange || (t = this.properties(), e = t.risk.value(), i = t.riskDisplayMode
.value(), o = t.accountSize.value(), "percents" === i ? t.riskSize.setValue(e /
100 * o) : e > o ? (t.risk.setValue(o), t.riskSize.setValue(o)) : t.riskSize
.setValue(e))
}, o.version = 2, o.prototype.i18nCache = {
title: $.t("Risk/Reward")
}, o.prototype.lastBarData = function() {
var t, e, i, o, n, r = this._model.mainSeries().bars().firstIndex(),
a = this._model.mainSeries().bars().lastIndex();
return null === r || null === a || isNaN(r) || isNaN(a) ? null : (t = this.points(),
4 === t.length ? (e = t[p.ActualClose], e.index < r ? null : {
closePrice: e.price,
index: Math.min(a, e.index)
}) : (i = t[p.Close], i.index < r ? null : (o = Math.min(a, i.index), n = s(this
._model.mainSeries().bars().valueAt(o)), {
closePrice: n[TradingView.CLOSE_PLOT],
index: o
})))
}, o.prototype.migrateVersion = function(t, e, i) {
var o, n, r, s;
1 === t && this._points.length >= 1 && (o = [], o.push(this._points[0]), n = this
._points[0], n = {
price: n.price,
index: n.index + 50
}, o.push(n), this._points[1] && o.push(this._points[1]), this._points[2] && o
.push(this._points[2]), this._points = o, this._timePoint.length >= 1 && (
r = [], n = this._timePoint[0], r.push(n), s = {
price: n.price,
time_t: n.time_t,
offset: n.offset + 50
}, r.push(s),
this._timePoint[1] && o.push(this._points[1]), this._timePoint[2] && o.push(
this._points[2]), this._timePoint = r))
}, o.prototype.checkAlert = function() {
this.recalculate()
}, o.prototype.priceAxisViews = function(t, e) {
return this.isSourceHidden() ? null : e !== this.priceScale() || this._model
.paneForSource(this) !== t ? null : [this._entryPriceAxisView, this
._stopPriceAxisView, this._profitPriceAxisView
]
}, o.prototype.updateAllViews = function() {
this.isActualSymbol() && this._properties.visible.value() && (c.hideAllDrawings()
.value() && this.userEditEnabled() || (a.prototype.updateAllViews.call(this),
this._entryPriceAxisView.update(), this._stopPriceAxisView.update(), this
._profitPriceAxisView.update()))
}, o.prototype.setPoint = function(t, e) {
var i, o = this.priceScale();
switch (o.isPercent() && (i = this.ownerSource().firstValue(), e.price = o.priceRange()
.convertFromPercent(e.price, i)), t) {
case 0:
e.price = this._roundPrice(e.price), o.isPercent() && (e.price = o.priceRange()
.convertToPercent(e.price, i)), a.prototype.setPoint.call(this, t, e),
this.recalculate();
break;
case 1:
this.isActualSymbol() && this.properties().stopPrice.setValue(this
.preparseStopPrice(e.price));
break;
case 2:
this.isActualSymbol() && this.properties().targetPrice.setValue(this
.preparseProfitPrice(e.price));
break;
case 3:
e.price = this._roundPrice(e.price), o.isPercent() && (e.price = o.priceRange()
.convertToPercent(e.price, i)), a.prototype.setPoint.call(this, 1, e),
this.recalculate()
}
}, o.PriceProperty = function(t, e) {
a.PointPriceProperty.call(this, t, e)
}, inherit(o.PriceProperty, a.PointPriceProperty), o.PriceProperty.prototype.setValue =
function(t) {
var e = this._lineSource.points()[this._pointIndex];
e.price = parseFloat(t), this._lineSource.setPoint(this._pointIndex, e), this
._lineSource.recalculate(), this._lineSource._model.updateSource(this._lineSource),
this._listeners.fire(this), this._lineSource.endChanging(), this._lineSource
._syncMultichartState()
}, o.StopPriceProperty = function(t) {
o.PriceProperty.call(this, t, 1)
}, inherit(o.StopPriceProperty, o.PriceProperty), o.StopPriceProperty.prototype.value =
function() {
var t = this._lineSource.stopPrice(),
e = this._lineSource.ownerSource().formatter(),
i = e.parse(e.format(t));
return i.price ? i.price : i.value
}, o.StopPriceProperty.prototype.setValue = function(t) {
var e = Math.round(Math.abs(t - this._lineSource.entryPrice()) * this._lineSource._model
.mainSeries().base());
this._lineSource.properties().stopLevel.setValue(e), this._lineSource.properties()
.stopLevel.listeners().fire(this._lineSource.properties().stopLevel)
}, o.TargetPriceProperty = function(t) {
o.PriceProperty.call(this, t, 2)
}, inherit(o.TargetPriceProperty, o.PriceProperty), o.TargetPriceProperty.prototype.value =
function() {
var t = this._lineSource.profitPrice(),
e = this._lineSource.ownerSource().formatter(),
i = e.parse(e.format(t));
return i.price ? i.price : i.value
}, o.TargetPriceProperty.prototype.setValue = function(t) {
var e = Math.round(Math.abs(t - this._lineSource.entryPrice()) * this._lineSource._model
.mainSeries().base());
this._lineSource.properties().profitLevel.setValue(e), this._lineSource.properties()
.profitLevel.listeners().fire(this._lineSource.properties().profitLevel)
}, o.prototype.pointsCount = function() {
return 1
}, o.prototype.title = function() {
return this.i18nCache.title
}, o.prototype.addPoint = function(t) {
var e, i;
return t.price = this._roundPrice(t.price), a.prototype.addPoint.call(this, t, null, !
0), e = {
price: t.price,
index: t.index + 50
}, a.prototype._addPointIntenal.call(this, e, null, !0), i = this
.calculateActualEntry(t, e), i && (a.prototype._addPointIntenal.call(this, i, null,
!0), (e = this.findClosePoint(i, e)) && a.prototype._addPointIntenal.call(
this, e, null, !0)), this._lastPoint = null, this.normalizePoints(), this
.createServerPoints(), !0
}, o.prototype._roundPrice = function(t) {
var e = this._model.mainSeries().base();
return Math.round(t * e) / e
}, o.prototype.recalculate = function() {
var t, e, i, o, n;
this.properties().interval.value() === this._model.mainSeries().interval() && 0 !== this
.points().length && (t = this.properties().targetPrice.value(), e = this
.properties().stopPrice.value(), i = [this._points[0], this._points[1]], o =
this.calculateActualEntry(this.points()[0], this.points()[1]), o && (i.push(o),
(n = this.findClosePoint(o, this.points()[1])) && i.push(n)), this._points =
i, t !== this.properties().targetPrice.value() && this.properties().targetPrice
._listeners.fire(this.properties().targetPrice), e !== this.properties()
.stopPrice.value() && this.properties().stopPrice._listeners.fire(this
.properties().stopPrice))
}, o.prototype.start = function() {
a.prototype.start.call(this), this.recalculate()
}, o.prototype.startMoving = function(t) {
t.price = this._roundPrice(t.price), a.prototype.startMoving.call(this, t)
}, o.prototype.move = function(t) {
t.price = this._roundPrice(t.price), a.prototype.move.call(this, t), this.recalculate(),
this._entryPriceAxisView.update()
}, o.prototype.correctPoints = function(t) {
return !!this.isActualSymbol() && a.prototype.correctPoints.call(this, [t[0], t[1]])
}, o.prototype.entryPrice = function() {
return this.points()[0].price
}, o.prototype.findClosePoint = function(t, e) {
var i, o, n, r = this._model.mainSeries().bars(),
a = s(r.firstIndex()),
l = Math.max(t.index, a),
c = s(r.lastIndex());
for (i = l; i <= Math.min(c, e.index); i++)
if (o = s(r.valueAt(i)), null != (n = this.checkStopPrice(o))) return {
index: i,
price: n
};
return null
}, o.prototype.calculateActualEntry = function(t, e) {
var i, o, n = this._model.mainSeries().bars(),
r = s(n.firstIndex()),
a = Math.max(t.index, r),
l = t.price,
c = s(n.lastIndex());
for (i = a; i <= Math.min(c, e.index); i++)
if (o = s(n.valueAt(i)), o[TradingView.HIGH_PLOT] >= l && o[TradingView.LOW_PLOT] <=
l) return {
index: i,
price: l
};
return null
}, o.prototype.axisPoints = function() {
var t, e, i;
if (!this._points[p.ActualEntry]) return [];
if (t = this._points[p.ActualEntry], e = null, 4 === this._points.length) e = this
._points[p.ActualClose];
else {
if (!(i = this.lastBarData())) return [];
e = {
index: i.index,
price: i.closePrice
}
}
return [t, e]
}, o.prototype.getInputsPropertyPage = function() {
return d.LineToolRiskRewardInputsPropertyPage
}, o.prototype.getStylesPropertyPage = function() {
return d.LineToolRiskRewardStylesPropertyPage
}, inherit(n, o), n.prototype.i18nCache = {
title: $.t("Risk/Reward short")
}, n.prototype._recalculateQty = function() {
var t, e, i, o, n;
0 !== this.points().length && (t = this.properties(), e = t.entryPrice.value(), i = t
.stopPrice.value(),
o = t.riskSize.value(), n = Math.floor(o / Math.abs(i - e)), t.qty.setValue(n))
}, n.prototype._recalculateAmount = function() {
var t, e, i, o, n, r, s, a;
0 !== this.points().length && (t = this.properties(), e = t.accountSize.value(), i = t
.entryPrice.value(), o = t.qty.value(), n = t.stopPrice.value(), r = t
.targetPrice.value(), s = this._roundValue(e + (i - r) * o), a = this
._roundValue(e - (n - i) * o), t.amountTarget.setValue(s), t.amountStop
.setValue(a))
}, n.prototype.title = function() {
return this.i18nCache.title
}, n.prototype.stopPrice = function() {
return this.entryPrice() + this.properties().stopLevel.value() / this._model
.mainSeries().base()
}, n.prototype.profitPrice = function() {
return this.entryPrice() - this.properties().profitLevel.value() / this._model
.mainSeries().base()
}, n.prototype.calculatePL = function(t) {
return this.entryPrice() - t
}, n.prototype.preparseStopPrice = function(t) {
t = this._roundPrice(t);
var e = this.entryPrice() + 1 / this._model.mainSeries().base();
return Math.max(t, e)
}, n.prototype.preparseProfitPrice = function(t) {
t = this._roundPrice(t);
var e = this.entryPrice() - 1 / this._model.mainSeries().base();
return Math.min(t, e)
}, n.prototype.checkStopPrice = function(t) {
var e = this.stopPrice(),
i = this.profitPrice();
return t[TradingView.HIGH_PLOT] >= e ? this.stopPrice() : t[TradingView.LOW_PLOT] <= i ?
this.profitPrice() : null
}, r.prototype.i18nCache = {
title: $.t("Risk/Reward long")
}, inherit(r, o), r.prototype._recalculateQty = function() {
var t, e, i, o, n;
0 !== this.points().length && (t = this.properties(), e = t.entryPrice.value(), i = t
.stopPrice.value(), o = t.riskSize.value(), n = Math.floor(o / Math.abs(e - i)),
t.qty.setValue(n))
}, r.prototype._recalculateAmount = function() {
var t, e, i, o, n, r, s, a;
0 !== this.points().length && (t = this.properties(), e = t.accountSize.value(), i = t
.entryPrice.value(), o = t.qty.value(), n = t.stopPrice.value(), r = t
.targetPrice.value(), s = this._roundValue(e + (r - i) * o), a = this
._roundValue(e - (i - n) * o), t.amountTarget.setValue(s), t.amountStop
.setValue(a))
}, r.prototype.stopPrice = function() {
return this.entryPrice() - this.properties().stopLevel.value() / this._model
.mainSeries().base()
}, r.prototype.profitPrice = function() {
return this.entryPrice() + this.properties().profitLevel.value() / this._model
.mainSeries().base()
}, r.prototype.calculatePL = function(t) {
return t - this.entryPrice()
}, r.prototype.preparseStopPrice = function(t) {
t = this._roundPrice(t);
var e = this.entryPrice() - 1 / this._model.mainSeries().base();
return Math.min(t, e)
}, r.prototype.preparseProfitPrice = function(t) {
t = this._roundPrice(t);
var e = this.entryPrice() + 1 / this._model.mainSeries().base();
return Math.max(t, e)
}, r.prototype.checkStopPrice = function(t) {
var e = this.stopPrice(),
i = this.profitPrice();
return t[TradingView.LOW_PLOT] <= e ? this.stopPrice() : t[TradingView.HIGH_PLOT] >= i ?
this.profitPrice() : null
}, r.prototype.title = function() {
return this.i18nCache.title
}, e.LineToolRiskReward = o, e.LineToolRiskRewardLong = r, e.LineToolRiskRewardShort = n
}).call(e, i(73))
}, function(t, e, i) {
"use strict";
function o(t, e) {
this._formatter = t, this._maxSize = e || 50, this._actualSize = 0, this._cache = {}, this
._usageTick = 1, this._oldestTick = 1, this._tick2Labels = {}
}
o.prototype.format = function(t) {
var e, i;
return this._cache[t] ? this._cache[t].string : (this._actualSize === this._maxSize && (e = this
._tick2Labels[this._oldestTick], delete this._tick2Labels[this._oldestTick],
delete this._cache[e], this._oldestTick++, this._actualSize--), i = this._formatter(
t), this._cache[t] = {
string: i,
tick: this._usageTick
}, this._tick2Labels[this._usageTick] = t, this._actualSize++, this._usageTick++, i)
}, t.exports = o
}, function(t, e, i) {
"use strict";
function o(t, e, i) {
a.call(this, t, e, i)
}
function n(t, e, i) {
o.call(this, t, e, i)
}
function r(t, e, i) {
o.call(this, t, e, i)
}
function s(t, e, i) {
o.call(this, t, e, i)
}
var a = i(105).LineStudyMtp;
inherit(o, a), o.prototype.pointsCount = function() {
return 1
}, o.prototype._studyInputs = function() {
var t, e, i = this.points();
return i.length < this.pointsCount() ? null : (t = i[0].index, e = this._model.mainSeries()
.bars().valueAt(t), null === e ? null : [this.properties().inputs.displayZoneLabels
.value(), 1e3 * e[TradingView.TIME_PLOT]
])
}, inherit(n, o), n.prototype._mtpStudyId = function() {
return "mtp_ew_main"
}, inherit(r, o), r.prototype._mtpStudyId = function() {
return "mtp_ew_major"
}, inherit(s, o), s.prototype._mtpStudyId = function() {
return "mtp_ew_minor"
}, e.LineStudyMtpElliotWaveMinor = s, e.LineStudyMtpElliotWaveMajor = r, e
.LineStudyMtpElliotWaveMain = n, e.LineStudyMtpElliotWave = o
}, function(t, e, i) {
"use strict";
(function(e) {
function o(t, i, n) {
var r, s;
this.m_timeScale = t, r = i.rightAxisProperties.state(), r.autoScale = !0, this
.m_rightPriceScale = new c(n.properties().scalesProperties, r), s = i.leftAxisProperties
.state(), s.autoScale = !0, this.m_leftPriceScale = new c(n.properties()
.scalesProperties, s), this.m_dataSources = [], this.m_height = 0, this.m_width = 0,
this.m_mainDataSource = null, this._properties = i, this._model = n, this._tagsChanged =
new e, this._leftPriceScaleRatioChanged = new e, this._rightPriceScaleRatioChanged =
new e, this._leftPriceScaleRatioChanged.subscribe(this, this
._mainSeriesPaneScaleRatioOnChange), this._rightPriceScaleRatioChanged.subscribe(
this, this._mainSeriesPaneScaleRatioOnChange), this.m_timeScale.barSpacingChanged()
.subscribe(this, this._recalculatePriceScaleByScaleRatio), this.m_leftPriceScale
.internalHeightChanged().subscribe(this, this._recalculatePriceScaleByScaleRatio), this
.m_rightPriceScale.internalHeightChanged().subscribe(this, this
._recalculatePriceScaleByScaleRatio), this.m_leftPriceScale.priceRangeChanged()
.subscribe(this, this._recalculateTimeScaleByLeftScaleRatio), this.m_rightPriceScale
.priceRangeChanged().subscribe(this, this._recalculateTimeScaleByRightScaleRatio), this
.m_leftPriceScale.priceRangeChanged().subscribe(this, this
._onLeftPriceScaleSetMinMaxPriceRange), this.m_rightPriceScale.priceRangeChanged()
.subscribe(this, this._onRightPriceScaleSetMinMaxPriceRange), this
._lastLeftPriceScaleRatio = h(this.m_timeScale, this.m_leftPriceScale), this
._lastRightPriceScaleRatio = h(this.m_timeScale, this.m_rightPriceScale), i.topMargin
.listeners().subscribe(this, o.prototype._updateMargins), i.bottomMargin.listeners()
.subscribe(this, o.prototype._updateMargins), this._updateMargins(), this
._stretchFactor = o.DEFAULT_STRETCH_FACTOR, this._isInInsertManyDataSourcesState = !1,
this._lastLineDataSourceZOrder = null,
this._maximized = !1, this._isMainPane = !1
}
var n = i(334).ExecutionsPositionController,
r = i(1).LineDataSource,
s = i(73),
a = i(46).PriceDataSource,
l = i(7).getLogger("Chart.Pane"),
c = i(229),
h = i(160).scaleRatio,
u = i(160).priceRangeByScaleRatio,
d = i(160).barSpacingByScaleRatio;
o.DEFAULT_STRETCH_FACTOR = 1e3, o.PANE_ANIMATION_DURATION = 500, o.sortSourcesPreOrdered = {
"Volume@tv-basicstudies": 0,
ChartEventsSource: 1,
"ESD$TV_DIVIDENDS@tv-scripting": 2,
"ESD$TV_SPLITS@tv-scripting": 3,
"ESD$TV_EARNINGS@tv-scripting": 4,
LineToolOrder: 5,
LineToolPosition: 6,
LineToolExecution: 7
}, o.prototype.destroy = function() {
var t, e;
for (this._leftPriceScaleRatioChanged.unsubscribe(this, this
._mainSeriesPaneScaleRatioOnChange), this._rightPriceScaleRatioChanged
.unsubscribe(this, this._mainSeriesPaneScaleRatioOnChange), this.m_rightPriceScale
.priceRangeChanged().unsubscribe(this, this._recalculateTimeScaleByRightScaleRatio),
this.m_leftPriceScale.priceRangeChanged().unsubscribe(this, this
._recalculateTimeScaleByLeftScaleRatio), this.m_timeScale.barSpacingChanged()
.unsubscribe(this, this._recalculatePriceScaleByScaleRatio), this.m_leftPriceScale
.internalHeightChanged().unsubscribe(this, this._recalculatePriceScaleByScaleRatio),
this.m_rightPriceScale.internalHeightChanged().unsubscribe(this, this
._recalculatePriceScaleByScaleRatio), this.m_leftPriceScale.priceRangeChanged()
.unsubscribe(this, this._onLeftPriceScaleSetMinMaxPriceRange), this
.m_rightPriceScale.priceRangeChanged().unsubscribe(this, this
._onRightPriceScaleSetMinMaxPriceRange), this._properties.topMargin.listeners()
.unsubscribe(this, o.prototype._updateMargins), this._properties.bottomMargin
.listeners().unsubscribe(this, o.prototype._updateMargins), t = 0; t < this
.m_dataSources.length; t++) e = this.m_dataSources[t], e.destroy && e.destroy()
}, o.prototype.setPaneSize = function(t) {
var e = {
large: 1,
medium: .6,
small: .3,
tiny: .15
};
if (!e[t]) throw Error("Unknown size enum value: " + t);
this._stretchFactor = e[t] * o.DEFAULT_STRETCH_FACTOR
}, o.sortSources = function(t) {
return t.map(function(t) {
var e, i, n = t._constructor;
return isFunction(t.metaInfo) && (n = t.metaInfo().id), i = o
.sortSourcesPreOrdered[n] || 0, e = i > 0 ? 1 / 0 : i < 0 ? -1 / 0 : t
.zorder(), [t, i, e]
}).sort(function(t, e) {
return t[1] - e[1] || t[2] - e[2]
}).map(function(t) {
return t[0]
})
}, o.prototype._updateMargins = function() {
var t, e, i = .01 * this._properties.topMargin.value(),
o = .01 * this._properties.bottomMargin.value();
for (this.m_leftPriceScale.setTopMargin(i), this.m_leftPriceScale.setBottomMargin(o),
this.m_rightPriceScale.setTopMargin(i), this.m_rightPriceScale.setBottomMargin(o),
t = 0; t < this.m_dataSources.length; t++)(e = this.m_dataSources[
t]) instanceof TradingView.Study && this.isOverlay(e) && "Volume" !== e
.metaInfo()
.shortId && e.priceScale() && e.priceScale() !== this.m_leftPriceScale && e
.priceScale() === this.m_rightPriceScale && (e.priceScale().setTopMargin(i), e
.priceScale().setBottomMargin(o), this.recalculatePriceScale(e.priceScale()));
this.recalculatePriceScale(this.m_leftPriceScale), this.recalculatePriceScale(this
.m_rightPriceScale), this.updateAllViews()
}, o.prototype.model = function() {
return this._model
}, o.prototype.width = function() {
return this.m_width
},
o.prototype.height = function() {
return this.m_height
}, o.prototype.setWidth = function(t) {
this.m_width = t, this.updateAllViews()
}, o.prototype.setHeight = function(t) {
var e, i;
for (this.m_height = t, this.m_leftPriceScale.setHeight(t), this.m_rightPriceScale
.setHeight(t), e = 0; e < this.m_dataSources.length; e++) i = this.m_dataSources[e],
this.isOverlay(i) && i.priceScale() && i.priceScale().setHeight(t);
this.updateAllViews()
}, o.prototype.leftPriceScale = function() {
return this.m_leftPriceScale
}, o.prototype.rightPriceScale = function() {
return this.m_rightPriceScale
}, o.prototype.timeScale = function() {
return this.m_timeScale
}, o.prototype.dataSources = function() {
return this.m_dataSources
}, o.prototype.isOverlay = function(t) {
return t._isOverlay
}, o.prototype._processMainSourceChange = function() {
var t, e, i, n, s, l, c;
if (null === this.m_mainDataSource)
for (e = 0; e < this.m_dataSources.length; e++)
if (i = this.m_dataSources[e], TradingView.isInherited(i.constructor, a) && !
this.isOverlay(i) && (!i.properties().linkedToSeries || !i.properties()
.linkedToSeries.value())) {
this.m_mainDataSource = i, t = !0;
break
} if (this.m_mainDataSource && t) {
for (n = [], e = 0; e < this.m_dataSources.length; e++) i = this.m_dataSources[e],
TradingView.isInherited(i.constructor, r) && n.push(i);
for (n = o.sortSources(n), e = 0; e < n.length; e++) this.move(n[e], this
.m_mainDataSource.priceScale(), !0)
} else if (!this.m_mainDataSource || this.isOverlay(this.m_mainDataSource) && 0 === this
.nonOverlayPricesSourcesCount())
for (e = 0; e < this.m_dataSources.length; e++)
if (i = this.m_dataSources[e], TradingView.isInherited(i.constructor, a) && this
.isOverlay(i) && i.showInObjectTree()) {
for (this.m_mainDataSource = i, this.m_rightPriceScale.addDataSource(i), i
.setPriceScale(this.m_rightPriceScale), s = this._model.children(i), c =
0; c < s.length; c++) l = s[c], this.m_rightPriceScale.addDataSource(l),
l.setPriceScale(this.m_rightPriceScale), l._isOverlay = !1;
this.recalculatePriceScale(this.m_rightPriceScale), i._isOverlay = !1;
break
}
}, o.prototype._newZOrderForLineTool = function() {
var t, e, i, o = null;
for (t = 0; t < this.m_dataSources.length; ++t)(e = this.m_dataSources[
t]) instanceof r && (i = e.zorder(), (null === o || i > o) && (o = i));
return null === o && (o = this.getZOrderMinMax().minZOrder - 1), this.m_dataSources
.forEach(function(t) {
t.zorder() > o && t.setZorder(t.zorder() + 1)
}), o + 1
}, o.prototype.beginInsertManyLineDataSources = function() {
this._isInInsertManyDataSourcesState = !0, this._lastLineDataSourceZOrder = null
}, o.prototype.endInsertManyLineDataSources = function() {
this._isInInsertManyDataSourcesState = !1, this._lastLineDataSourceZOrder = null
}, o.prototype.addDataSource = function(t, e, i) {
var o;
t instanceof r && !i ? (o = null !== this._lastLineDataSourceZOrder ? this
._lastLineDataSourceZOrder : this._newZOrderForLineTool(), this
._isInInsertManyDataSourcesState && (this._lastLineDataSourceZOrder = o)) : o =
this.getZOrderMinMax().minZOrder - 1, this.insertDataSource(t, e, o)
}, o.prototype.insertDataSource = function(t, e, i) {
var n, r, s;
this.m_dataSources.push(t), n = !1, t === this._model.mainSeries() ? (this
.m_mainDataSource = t, n = !0) : null === this.m_mainDataSource && (this
.m_mainDataSource = t, n = !0), t._isOverlay = !1,
null !== e || this.canHaveMoreNoScaleSources() || (e = this.rightPriceScale()),
null === e && (r = this.m_rightPriceScale.topMargin(), s = this.m_rightPriceScale
.bottomMargin(), t.metaInfo && "Volume@tv-basicstudies" === t.metaInfo().id && (
r = .75, s = 0), e = new c(this._model.properties().scalesProperties), e
.setHeight(this.m_height), e.setTopMargin(r), e.setBottomMargin(s), t
._isOverlay = !0), e.addDataSource(t, this._isInInsertManyDataSourcesState), t
.setPriceScale(e), t.onTagsChanged && t.onTagsChanged().subscribe(this, o.prototype
.onSourceTagsChanged), t.setZorder(i), n && this._processMainSourceChange(),
this._tagsChanged.fire(), TradingView.isInherited(t.constructor, a) && this
.recalculatePriceScale(e), this.invalidateSourcesCache()
}, o.prototype.removeDataSource = function(t, e) {
var i, n = this.m_dataSources.indexOf(t);
if (-1 === n) return void l.logDebug("removeDataSource: invalid data source");
t._isOverlay = !1, this.m_dataSources.splice(n, 1), t !== this.m_mainDataSource || e ||
(this.m_mainDataSource = null), i = null, -1 !== this.m_leftPriceScale.dataSources()
.indexOf(t) ? (this.m_leftPriceScale.removeDataSource(t), i = this
.m_leftPriceScale) : -1 !== this.m_rightPriceScale.dataSources().indexOf(t) && (
this
.m_rightPriceScale.removeDataSource(t), i = this.m_rightPriceScale), t
.onTagsChanged && t.onTagsChanged().unsubscribe(this, o.prototype
.onSourceTagsChanged), TradingView.isInherited(t.constructor, a) && this
._processMainSourceChange(), this._tagsChanged.fire(), i && TradingView.isInherited(
t.constructor, a) && this.recalculatePriceScale(i), this
.invalidateSourcesCache()
}, o.prototype.startScalePrice = function(t, e) {
t.startScale(e)
}, o.prototype.scalePriceTo = function(t, e) {
t.scaleTo(e), this.updateAllViews()
}, o.prototype.endScalePrice = function(t) {
t.endScale()
}, o.prototype.startScrollPrice = function(t, e) {
t.startScroll(e)
}, o.prototype.scrollPriceTo = function(t, e) {
t.scrollTo(e), this.updateAllViews()
}, o.prototype.endScrollPrice = function(t) {
t.endScroll()
}, o.prototype.setPriceAutoScale = function(t, e) {
if (t.setAutoScale(e), this.timeScale().isEmpty()) return void t.setPriceRange(null);
this.recalculatePriceScale(t)
}, o.prototype.restorePriceScaleState = function(t, e) {
t.restoreState(e), this.updateAllViews()
}, o.prototype.updateAllViews = function() {
for (var t = 0; t < this.m_dataSources.length; t++) this.m_dataSources[t]
.updateAllViews()
}, o.prototype.defaultPriceScale = function() {
var t = this.m_mainDataSource ? this.m_mainDataSource.priceScale() : this
.rightPriceScale();
return void 0 === t && (t = new c(this._model.properties().scalesProperties)), t
}, o.prototype._priceScaleIsPrice = function(t) {
var e = t.mainSource();
return !!e && (!!TradingView.isInherited(e.constructor, TradingView.Series) || !!
TradingView.isInherited(e.constructor, TradingView.Study) && e.metaInfo()
.is_price_study)
}, o.prototype.findSuitableScale = function(t) {
if (TradingView.isInherited(t.constructor, TradingView.Study) &&
"Volume@tv-basicstudies" === t.metaInfo().id) return this.m_rightPriceScale
.mainSource() || this.m_leftPriceScale.mainSource() ? null : this
.m_rightPriceScale;
var e = !1;
if (TradingView.isInherited(t.constructor, TradingView.Study) ? e = t.metaInfo()
.is_price_study : TradingView.isInherited(t.constructor, TradingView.Series) && (
e = !0), e) {
if (this._priceScaleIsPrice(this.m_rightPriceScale)) return this.m_rightPriceScale;
if (this._priceScaleIsPrice(this.m_leftPriceScale)) return this.m_leftPriceScale
}
return this.m_rightPriceScale.mainSource() ? this.m_leftPriceScale.mainSource() ? null :
this.m_leftPriceScale : this.m_rightPriceScale
}, o.prototype.mainDataSource = function() {
return this.m_mainDataSource
}, o.prototype.recalculatePriceScale = function(t) {
var e, i;
t && (e = t.sourcesForAutoscale(), t.isAutoScale() && e && e.length > 0 && !this
.timeScale().isEmpty() && (i = this.timeScale().visibleBars(), t
.recalculatePriceRange(i)), t.updatePaneViews())
}, o.prototype.resetPriceScale = function(t) {
var e = this.timeScale().visibleBars();
t.isLockScale() || t.setAutoScale(!0), t.recalculatePriceRange(e), this.updateAllViews()
}, o.prototype.recalculate = function() {
var t, e;
for (this.recalculatePriceScale(this.m_rightPriceScale), this.recalculatePriceScale(this
.m_leftPriceScale), t = 0; t < this.m_dataSources.length; t++) e = this
.m_dataSources[t], !this.isOverlay(e) || e instanceof r || this
.recalculatePriceScale(e.priceScale());
this.updateAllViews(), this._model.updatePane(this)
}, o.prototype.isEmpty = function() {
return null === this.m_mainDataSource
}, o.prototype.move = function(t, e, i) {
var o = this.m_dataSources.slice(),
n = null !== e;
this.removeDataSource(t, n), this.addDataSource(t, e, i), this.m_dataSources = o, this
.invalidateSourcesCache()
}, o.prototype.dataSourceForId = function(t) {
for (var e = 0; e < this.m_dataSources.length; e++)
if (this.m_dataSources[e].id() === t) return this.m_dataSources[e];
return null
}, o.prototype.priceScaleForSource = function(t) {
return -1 !== this.rightPriceScale().dataSources().indexOf(t) ? this.rightPriceScale() :
-1 !== this.leftPriceScale().dataSources().indexOf(t) ? this.leftPriceScale() : null
}, o.prototype.sourceById = function(t) {
for (var e = 0; e < this.m_dataSources.length; e++)
if (this.m_dataSources[e].id() === t) return this.m_dataSources[e];
return null
}, o.prototype.containsMainSeries = function() {
return -1 !== this.m_dataSources.indexOf(this._model.mainSeries())
}, o.prototype.priceScaleByName = function(t) {
return "left" === t ? this.m_leftPriceScale : "right" === t ? this.m_rightPriceScale :
null
}, o.prototype.priceScaleName = function(t) {
return t === this.m_leftPriceScale ? "left" : t === this.m_rightPriceScale ? "right" :
""
}, o.prototype.hitTestSources = function() {
var t, e, i, o, n;
if (this._cachedHitTestSources) return this._cachedHitTestSources;
for (t = this.orderedSources(), e = [], i = [this._model.crossHairSource()], o = 0; o <
t.length; o++) n = t[o], TradingView.isInherited(n.constructor, r) ? e.push(n) : i
.push(n);
return this._cachedHitTestSources = i.concat(e), this._cachedHitTestSources
}, o.prototype.orderedSources = function() {
var t, e, i, n;
if (this._cachedOrderedSoruces) return this._cachedOrderedSoruces;
for (t = [], e = 0, i = this.m_dataSources.length; e < i; e++) n = this.m_dataSources[
e], TradingView.isInherited(n.constructor, r) && !n.isActualSymbol() || t.push(
n);
return t = o.sortSources(t), this._cachedOrderedSoruces = t, t
}, o.prototype.createDrawingsCaches = function() {
n.recreateOrderedByBarsSourcesCache(this)
}, o.prototype.clearDrawingCaches = function() {
n.clearOrderedByBarsSourcesCache()
}, o.prototype.invalidateSourcesCache = function() {
this._cachedOrderedSoruces = null, this._cachedHitTestSources = null, this
.m_leftPriceScale.invalidateSourcesCache(), this.m_rightPriceScale
.invalidateSourcesCache()
}, o.prototype.getZOrderMinMax = function() {
var t, e, i, o, n = this.orderedSources();
if (0 === n.length) return {
minZOrder: 0,
maxZOrder: 0
};
for (t = n[0].zorder(), e = n[0].zorder(), i = 1; i < n.length; i++) o = n[i], o
.zorder() < t && (t = o.zorder()), o.zorder() > e && (e = o.zorder());
return {
minZOrder: t,
maxZOrder: e
}
}, o.prototype.isZOrderAvailable = function(t) {
var e, i;
for (e = 0; e < this.m_dataSources.length; e++)
if (i = this.m_dataSources[e], i.zorder() === t) return !1;
return !0
}, o.prototype.sendToBack = function(t) {
var e, i = this.getZOrderMinMax().minZOrder,
o = Math.abs(t.zorder() - i);
for (e = 0; e < o; e++) this.changeZOrder(t, -1)
}, o.prototype.bringToFront = function(t) {
var e, i = this.getZOrderMinMax().maxZOrder,
o = Math.abs(t.zorder() - i);
for (e = 0; e < o; e++) this.changeZOrder(t, 1)
}, o.prototype.changeZOrder = function(t, e) {
var i, o, n, r, s, a = this.orderedSources().filter(function(t) {
return t.showInObjectTree()
}),
l = 0;
for (i = 0, o = a.length; i < o; i++)
if (a[i] === t) {
l = i;
break
} l > 0 && e < 0 ? (n = a[l - 1].zorder(), r = t.zorder(), a[l - 1].setZorder(r), t
.setZorder(n)) : l < a.length - 1 && e > 0 && (s = a[l + 1].zorder(), r = t
.zorder(), a[l + 1].setZorder(r), t.setZorder(s)), this.invalidateSourcesCache()
}, o.prototype.onSourceTagsChanged = function() {
this._tagsChanged.fire()
}, o.prototype.onTagsChanged = function() {
return this._tagsChanged
}, o.prototype.dumpPriceScale = function(t) {
var e, i, o, n = t.dataSources(),
r = [];
for (e = 0; e < n.length; e++)
if (i = n[e].priceAxisViews(this, t))
for (o = 0; o < i.length; o++) r.push(i[o].dump());
return r
}, o.prototype.dumpViews = function() {
var t, e, i, o, n, r = {};
for (r.paneViews = {}, t = this.orderedSources(), e = 0; e < t.length; e++)
if (i = t[e], r.paneViews[e] = [], o = i.paneViews())
for (n = 0; n < o.size(); n++) r.paneViews[e].push(o.item(e).dump());
return r.leftAxis = this.dumpPriceScale(this.m_leftPriceScale), r.rightAxis = this
.dumpPriceScale(this.m_rightPriceScale), r
}, o.prototype.clearSeries = function() {
for (var t = this.m_dataSources.length - 1; t >= 0; t--) TradingView.isInherited(this
.m_dataSources[t].constructor, TradingView.Series) && this.m_dataSources.splice(
t, 1)
}, o.prototype.nonOverlayPricesSourcesCount = function() {
return this.m_dataSources.filter(function(t) {
return (!t.properties().linkedToSeries || !t.properties().linkedToSeries
.value()) && (TradingView.isInherited(t.constructor, a) && t
.showInObjectTree() && !t.isNoScale())
}).length
}, o.prototype.canHaveMoreNoScaleSources = function() {
return this.nonOverlayPricesSourcesCount() > 1
}, o.prototype.actionNoScaleIsEnabled = function(t) {
return !(!this.isOverlay(t) && TradingView.isInherited(t.constructor, a)) || this
.canHaveMoreNoScaleSources()
}, o.prototype.executionsPositionController = function() {
return this._executionsPositionController || (this._executionsPositionController =
new n(this, this._model.timeScale())), this._executionsPositionController
}, o.prototype.isLast = function() {
var t = this._model.panes();
return t[t.length - 1] === this
},
o.prototype.setMaximized = function(t) {
this._maximized = t
}, o.prototype.isMaximized = function() {
return this._maximized
}, o.prototype.isMainPane = function() {
var t = this._model.mainSeries(),
e = !1;
return this.m_dataSources.forEach(function(i) {
e || (e = i === t)
}), this._isMainPane = e, e
}, o.prototype.properties = function() {
return this._properties
}, o.prototype._mainSourceVisiblePriceRange = function(t) {
var e = this.m_timeScale.visibleBars();
return null !== e ? t.mainSource().priceRange(e.firstBar(), e.lastBar()) : new s(-.5,
.5)
}, o.prototype.applyLeftPriceScaleRatio = function(t) {
this._lastLeftPriceScaleRatio !== t && (this._setNewPriceRangeByScaleRatio(this
.m_leftPriceScale, t, this._mainSourceVisiblePriceRange(this
.m_leftPriceScale), !0, !0), this._tryToApplyNewLeftPriceScaleRatio(h(
this.m_timeScale, this.m_leftPriceScale)))
}, o.prototype.applyRightPriceScaleRatio = function(t) {
this._lastRightPriceScaleRatio !== t && (this._setNewPriceRangeByScaleRatio(this
.m_rightPriceScale, t, this._mainSourceVisiblePriceRange(this
.m_rightPriceScale), !0, !0), this._tryToApplyNewRightPriceScaleRatio(h(
this.m_timeScale, this.m_rightPriceScale)))
}, o.prototype.isLeftPriceScaleLocked = function() {
return !this.m_leftPriceScale.isLog() && this.m_leftPriceScale.isLockScale()
}, o.prototype.isRightPriceScaleLocked = function() {
return !this.m_rightPriceScale.isLog() && this.m_rightPriceScale.isLockScale()
}, o.prototype.leftPriceScaleRatio = function() {
return null === this._lastLeftPriceScaleRatio && (this._lastLeftPriceScaleRatio = h(this
.m_timeScale, this.m_leftPriceScale)), this._lastLeftPriceScaleRatio
}, o.prototype.rightPriceScaleRatio = function() {
return null === this._lastRightPriceScaleRatio && (this._lastRightPriceScaleRatio = h(
this.m_timeScale, this.m_rightPriceScale)), this._lastRightPriceScaleRatio
}, o.prototype._mainSeriesPaneScaleRatioOnChange = function() {
this.isMainPane() && (this._lastLeftPriceScaleRatio = null, this
._lastRightPriceScaleRatio = null, this._model
.mainSeriesScaleRatioPropertyOnChanged())
}, o.prototype._applyOldScaleRatioToPriceScale = function(t, e) {
if (this._isRecalculatingScales || null === e || void 0 === e) return !1;
this._isRecalculatingScales = !0, this._setNewPriceRangeByScaleRatio(t, e, this
._mainSourceVisiblePriceRange(t)), this._isRecalculatingScales = !1
}, o.prototype._applyOldScaleRatioToTimeScale = function(t, e) {
if (this._isRecalculatingScales || null === e || void 0 === e) return !1;
this._isRecalculatingScales = !0, this._setNewBarSpacingByScaleRatio(t, e), this
._isRecalculatingScales = !1
}, o.prototype._tryToApplyNewLeftPriceScaleRatio = function(t) {
if (this._lastLeftPriceScaleRatio === t) return !1;
this._leftPriceScaleRatioChanged.fire(this._lastLeftPriceScaleRatio, t), this
._lastLeftPriceScaleRatio = t
}, o.prototype._tryToApplyNewRightPriceScaleRatio = function(t) {
if (this._lastRightPriceScaleRatio === t) return !1;
this._rightPriceScaleRatioChanged.fire(this._lastRightPriceScaleRatio, t), this
._lastRightPriceScaleRatio = t
}, o.prototype._recalculatePriceScaleByScaleRatio = function() {
this.isMainPane() && (this.m_leftPriceScale.mainSource() && (this
.isLeftPriceScaleLocked() && null !== this._lastLeftPriceScaleRatio ? this
._applyOldScaleRatioToPriceScale(this.m_leftPriceScale, this
._lastLeftPriceScaleRatio) : this._tryToApplyNewLeftPriceScaleRatio(h(
this.m_timeScale, this.m_leftPriceScale))), this.m_rightPriceScale
.mainSource() && (this.isRightPriceScaleLocked() && null !== this
._lastRightPriceScaleRatio ? this._applyOldScaleRatioToPriceScale(this
.m_rightPriceScale, this._lastRightPriceScaleRatio) : this
._tryToApplyNewRightPriceScaleRatio(h(this.m_timeScale, this
.m_rightPriceScale))))
}, o.prototype._recalculateTimeScaleByLeftScaleRatio = function() {
this.isLeftPriceScaleLocked() && null !== this._lastLeftPriceScaleRatio ? this
._applyOldScaleRatioToTimeScale(this.m_leftPriceScale, this
._lastLeftPriceScaleRatio) : this._tryToApplyNewLeftPriceScaleRatio(h(this
.m_timeScale, this.m_leftPriceScale))
}, o.prototype._recalculateTimeScaleByRightScaleRatio = function() {
this.isRightPriceScaleLocked() && null !== this._lastRightPriceScaleRatio ? this
._applyOldScaleRatioToTimeScale(this.m_rightPriceScale, this
._lastRightPriceScaleRatio) : this._tryToApplyNewRightPriceScaleRatio(h(this
.m_timeScale, this.m_rightPriceScale))
}, o.prototype._setNewPriceRangeByScaleRatio = function(t, e, i, o, n) {
var r = u(t, this.m_timeScale.barSpacing(), e);
t.setPriceRange(null !== r ? r : i, o, n)
}, o.prototype._setMinMaxPriceRange = function(t, e) {
var i = u(t, this.m_timeScale.maxBarSpacing(), e),
o = u(t, this.m_timeScale.minBarSpacing(), e);
null !== i && t.setMaxPriceRange(i), null !== o && t.setMinPriceRange(o)
}, o.prototype._onLeftPriceScaleSetMinMaxPriceRange = function() {
this._setMinMaxPriceRange(this.m_leftPriceScale, this._lastLeftPriceScaleRatio)
}, o.prototype._onRightPriceScaleSetMinMaxPriceRange = function() {
this._setMinMaxPriceRange(this.m_rightPriceScale, this._lastRightPriceScaleRatio)
}, o.prototype._setNewBarSpacingByScaleRatio = function(t, e) {
var i = this.m_timeScale.getValidBarSpacing(d(t, e));
this.m_timeScale.isValidBarSpacing(i) && this.m_timeScale.setBarSpacing(i)
}, t.exports = o
}).call(e, i(10))
}, function(t, e, i) {
"use strict";
(function(e, o) {
function n(t, e) {
if (this.m_base = t, this.m_integralDividers = e, this.m_fractionalDividers = [], c
.isBaseDecimal(this.m_base)) this.m_fractionalDividers = [2, 2.5, 2];
else
for (var i = this.m_base; 1 !== i;) {
if (i % 2 == 0) this.m_fractionalDividers.push(2), i /= 2;
else {
if (i % 5 != 0) throw new RangeError("unexpected base");
this.m_fractionalDividers.push(2), this.m_fractionalDividers.push(2.5), i /= 5
}
if (this.m_fractionalDividers.length > 100) throw Error("something wrong with base")
}
}
function r(t, e, i) {
this.m_marks = [], this.m_base = e, this.m_priceScale = t, this._formatter = i, i && (this
._cache = new h(function(t) {
return i.format(t)
})), this._currentFormatBase = 0
}
function s(t) {
for (var e = 1; t * e !== Math.round(t * e);) e *= 10;
return e
}
function a(t, i) {
function n() {
var t, e, i = s.m_dataSources;
for (t = 0; t < i.length; t++) e = i[t], e.priceScaleChanged && e.priceScaleChanged
.fire(s)
}
this._properties = new e(i || l), this._scalesProperties = t, this.m_height = 0, this
._internalHeightCache = null, this._internalHeightChanged = new o, this.m_priceRange =
null,
this._priceRangeChanged = new o, this.m_dataSources = [], this.m_topMargin = 0, this
.m_bottomMargin = 0, this._studyTopMargin = 0, this._studyBottomMargin = 0, this
.m_scrollStartPoint = null, this.m_scaleStartPoint = null, this.m_maxPriceRange = null,
this.m_minPriceRange = null, this.m_priceRangeSnapshot = null, this
._invalidatedForRange = {
isValid: !0
}, this.onMarksChanged = new o, this.m_markBuilder = new r(this, 100, new f(100)), this
._properties.percentage.listeners().subscribe(this, a.prototype.updateFormatter);
var s = this;
this._properties.log.listeners().subscribe(null, function(t) {
var e, i, o, n;
s.m_priceRange && (e = s.m_priceRange, t.value() ? (i = new g(s._toLog(e
.minValue()), s._toLog(e.maxValue())), s.setPriceRange(i)) : (o = s
._fromLog(e.minValue()), n = s._fromLog(e.maxValue()), isFinite(
o) && isFinite(n) ? (i = new g(o, n), s.setPriceRange(i)) : s
.properties().autoScale.setValue(!0)))
}), this._properties.percentage.listeners().subscribe(null, function() {
s._properties.autoScale.setValue(!0)
}), this._properties.percentage.listeners().subscribe(null, function() {
var t, e, i;
s._properties.autoScaleDisabled.setValue(s._properties.percentage.value()), t =
s.priceRange(), s.mainSource() && !s.mainSource().model().timeScale()
.isEmpty() && !s.mainSource().data().isEmpty() && s.isLockScale() && t && (
e = s.mainSource().model().timeScale().visibleBars(), i = s.mainSource()
.data().search(e.firstBar(), _.NearestRight).value[TradingView
.CLOSE_PLOT], null != t && void 0 !== i && (s._properties.percentage
.value() ? s.setPriceRange(t.convertToPercents(i)) : s
.setPriceRange(t.convertFromPercents(i))))
}), this._properties.lockScale.listeners().subscribe(null, function(t) {
var e = t.value();
e && (s._properties.autoScale.setValue(!1), s._properties.percentage.setValue(!
1), s._properties.log.setValue(!1)), s._properties.percentageDisabled
.setValue(e), s._properties.logDisabled.setValue(e)
}), this._sourcesForAutoscale = null, this._sourcesToUpdateViews = null, this
._hasSeries = !1, this._properties.percentage.listeners().subscribe(null, n), this
._properties.log.listeners().subscribe(null, n), this._properties.listeners().subscribe(
null,
function() {
s.mainSource() && s.mainSource().model() && s.mainSource().model().fullUpdate()
})
}
var l, c = i(54),
h = i(226),
u = i(1).LineDataSource,
d = i(46).PriceDataSource,
p = i(77),
_ = i(19).PlotRowSearchMode,
f = i(28).PriceFormatter,
m = i(167).PercentageFormatter,
g = i(73);
n.prototype.TICK_SPAN_EPSILON = 1e-9, n.prototype.tickSpan = function(t, e, i) {
var o, n = 0 === this.m_base ? 0 : 1 / this.m_base,
r = this.TICK_SPAN_EPSILON,
s = Math.pow(10, Math.max(0, Math.ceil(c.log10(t - e)))),
a = 0;
for (a = 0, o = this.m_integralDividers[0]; s > n + r && c.greaterOrEqual(s, n, r) && c
.greaterOrEqual(s, i * o, r) && c.greaterOrEqual(s, 1, r); ++a, o = this
.m_integralDividers[a % this.m_integralDividers.length]) s /= o;
if (s <= n + r && (s = n), s = Math.max(1, s), this.m_fractionalDividers.length > 0 && c
.equal(s, 1, r))
for (a = 0, o = this.m_fractionalDividers[0]; s > n + r && c.greaterOrEqual(s, i *
o, r); ++a, o = this.m_fractionalDividers[a % this.m_fractionalDividers
.length]) s /= o;
return s
}, r.prototype.TICK_DENSITY = 2.5, r.prototype.base = function() {
return this.m_base
}, r.prototype.setBase = function(t) {
if (t < 0) throw new RangeError("base < 0");
this.m_base = t
},
r.prototype.fontHeight = function() {
return this.m_priceScale.fontSize()
}, r.prototype.tickSpan = function(t, e) {
var i, o, r, s, a, l, h;
if (t < e) throw new RangeError("high < low");
return i = this.m_priceScale.height(), o = this.tickMarkHeight(), r = (t - e) * o / i,
s = new n(this.m_base, [2, 2.5, 2]), a = new n(this.m_base, [2, 2, 2.5]), l = new n(
this.m_base, [2.5, 2, 2]), h = [], h.push(s.tickSpan(t, e, r)), h.push(a
.tickSpan(t, e, r)), h.push(l.tickSpan(t, e, r)), c.min(h)
}, r.prototype.tickMarkHeight = function() {
return Math.ceil(this.fontHeight() * this.TICK_DENSITY)
}, r.prototype.rebuildTickMarks = function() {
var t, e, i, o, n, r, a, l, c, u, d, p, _;
if (null === this.m_priceScale) throw new TypeError("scale is null");
if (this.m_priceScale.isEmpty()) return void(this.m_marks = []);
if (t = this.m_priceScale.height(), e = this.m_priceScale.coordinateToPrice(t - 1), i =
this.m_priceScale.coordinateToPrice(0), o = i >= e ? 1 : -1, n = Math.max(i, e), r =
Math.min(i, e), i = n, e = r, i !== e)
for (a = this.tickSpan(i, e), l = i % a, l += l < 0 ? a : 0, this.m_marks = [], this
._formatter || (c = s(a), this._cache && this._currentFormatBase === c || (u =
new f(c), this._cache = new h(function(t) {
return u.format(t)
}))), d = null, p = i - l; p > e; p -= a) _ = this.m_priceScale
.priceToCoordinate(p), null !== d && Math.abs(_ - d) < this.tickMarkHeight() ||
(this.m_marks.push({
coord: _,
label: this._cache.format(p)
}), d = _, this.m_priceScale.isLog() && (a = this.tickSpan(p * o, e)))
}, r.prototype.marks = function() {
return this.m_marks
}, l = {
autoScale: !0,
autoScaleDisabled: !1,
lockScale: !1,
percentage: !1,
percentageDisabled: !1,
log: !1,
logDisabled: !1,
alignLabels: !0
}, a.prototype.isLog = function() {
return this._properties.log.value()
}, a.prototype.isPercent = function() {
return this._properties.percentage.value()
}, a.prototype.isPercentage = function() {
return this._properties.percentage.value()
}, a.prototype.properties = function() {
return this._properties
}, a.prototype.fontSize = function() {
return this._scalesProperties.fontSize.value()
}, a.prototype.height = function() {
return this.m_height
}, a.prototype.setHeight = function(t) {
this.m_height !== t && (this.m_height = t, this._invalidateInternalHeightCache(), this
._marksCache = null)
}, a.prototype.topMargin = function() {
return Math.max(this.m_topMargin, this._studyTopMargin)
}, a.prototype.setTopMargin = function(t) {
if (!isNumber(t)) throw new TypeError("invalid margin");
if (t < 0 || t > 30) throw new RangeError("invalid margin");
this.m_topMargin !== t && (this.m_topMargin = t, this._invalidateInternalHeightCache(),
this._marksCache = null)
}, a.prototype.bottomMargin = function() {
return Math.max(this.m_bottomMargin, this._studyBottomMargin)
}, a.prototype.setBottomMargin = function(t) {
if (!isNumber(t)) throw new TypeError("invalid margin");
if (t < 0 || t > 30) throw new RangeError("invalid margin");
this.m_bottomMargin !== t && (this.m_bottomMargin = t, this
._invalidateInternalHeightCache(), this._marksCache = null)
}, a.prototype.internalHeight = function() {
if (this._internalHeightCache) return this._internalHeightCache;
var t = this.height() * (1 - this.topMargin() - this.bottomMargin());
return this._internalHeightCache = t, t
}, a.prototype._invalidateInternalHeightCache = function() {
this._internalHeightCache = null, this._internalHeightChanged.fire()
},
a.prototype.internalHeightChanged = function() {
return this._internalHeightChanged
}, a.prototype.priceRange = function() {
return this.makeSureItIsValid(), this.m_priceRange
}, a.prototype.priceRangeChanged = function() {
return this._priceRangeChanged
}, a.prototype.setPriceRange = function(t, e, i) {
var o, n, r;
if (!(t instanceof g)) throw new TypeError("incorrect price range");
return o = this.m_priceRange, !!(e || null === o && null !== t || null !== o && !o
.equals(t)) && (n = null !== this.m_maxPriceRange && this.m_maxPriceRange
.containsStrictly(t), r = null !== this.m_minPriceRange && t.containsStrictly(
this.m_minPriceRange), !(this.isLockScale() && !e && (n || r)) && (this
._marksCache = null, this.m_priceRange = t, void(i || this
._priceRangeChanged.fire(o, t))))
}, a.prototype.isEmpty = function() {
return this.makeSureItIsValid(), 0 === this.m_height || !this.m_priceRange || this
.m_priceRange.isEmpty()
}, a.prototype.invertedCoordinate = function(t) {
return this.height() - 1 - t
}, a._logicalOffset = 4, a._coordOffset = 1e-4, a.prototype.log10 = function(t) {
return Math.log(t) / Math.log(10)
}, a.prototype._toLog = function(t) {
var e, i = Math.abs(t);
return i < 1e-8 ? 0 : (e = this.log10(i + a._coordOffset) + a._logicalOffset, t < 0 ? -
e : e)
}, a.prototype.priceToLogical = function(t) {
return this.isLog() && t ? this._toLog(t) : t
}, a.prototype._fromLog = function(t) {
var e, i = Math.abs(t);
return i < 1e-8 ? 0 : (e = Math.pow(10, i - a._logicalOffset) - a._coordOffset, t < 0 ?
-e : e)
}, a.prototype.logicalToPrice = function(t) {
return this.isLog() ? this._fromLog(t) : t
}, a.prototype.priceToCoordinate = function(t, e) {
var i, o;
return this.makeSureItIsValid(), this.isEmpty() ? 0 : (t = this.priceToLogical(t), i =
this.bottomMargin() * this.height() + (this.internalHeight() - 1) * (t - this
.priceRange().minValue()) / (this.priceRange().maxValue() - this
.priceRange().minValue()), o = this.invertedCoordinate(i), e ? o : Math
.round(o)
)
}, a.prototype.pricesToCoordinates = function(t) {
this.pricesToCoordinatesEx(t, function(t) {
return t.y
}, function(t, e) {
t.y = e
})
}, a.prototype.pricesToCoordinatesEx = function(t, e, i) {
var o, n, r, s, a, l, c, h, u;
if (this.makeSureItIsValid(), o = this.bottomMargin() * this.height(), n = this
.priceRange().minValue(), r = this.priceRange().maxValue(), s = this
.internalHeight() - 1, a = s / (r - n), this.isLog())
for (l = 0; l < t.length; l++) c = e(t[l]), i(t[l], this.priceToLogical(c));
for (l = 0; l < t.length; l++) c = e(t[l]), TradingView.isNaN(c) || void 0 === c ||
null === c || (h = o + a * (c - n), u = this.m_height - 1 - h, i(t[l], Math.round(
u)))
}, a.prototype.pointsArrayToCoordinates = function(t) {
var e, i, o, n, r, s, a, l, c;
if (this.makeSureItIsValid(), e = this.bottomMargin() * this.height(), i = this
.priceRange().minValue(), o = this.priceRange().maxValue(), n = this
.internalHeight() - 1, r = n / (o - i), this.isLog())
for (s = 0; s < t.length; s++) t[s].y = this.priceToLogical(t[s].y);
for (s = 0; s < t.length; s++) a = t[s].y, TradingView.isNaN(a) || void 0 === a ||
null === a || (l = e + r * (a - i), c = this.m_height - 1 - l, t[s].y = Math.round(
c))
}, a.prototype.pricesArrayToCoordinates = function(t) {
var e, i, o, n, r, s, a, l, c;
if (this.makeSureItIsValid(), e = this.bottomMargin() * this.height(), i = this
.priceRange().minValue(), o = this.priceRange().maxValue(), n = this
.internalHeight() - 1, r = n / (o - i), this.isLog())
for (s = 0; s < t.length; s++) t[s] = this.priceToLogical(t[s]);
for (s = 0; s < t.length; s++) void 0 !== (a = t[s]) && null !== a && (l = e + r * (a -
i), c = this.m_height - 1 - l, t[s] = Math.round(c))
}, a.prototype.barPricesToCoordinates = function(t) {
var e, i, o, n, r, s, a, l, c, h, u;
if (this.makeSureItIsValid(), e = t, i = this.bottomMargin() * this.height(), o = this
.priceRange().minValue(), n = this.priceRange().maxValue(), r = this
.internalHeight() - 1, s = r / (n - o), this.isLog())
for (a = 0; a < e.length; a++) e[a] && (e[a].open = this.priceToLogical(e[a].open),
e[a].high = this.priceToLogical(e[a].high), e[a].low = this.priceToLogical(
e[a].low), e[a].close = this.priceToLogical(e[a].close), e[a]
.additionalPrice && (e[a].additionalPrice = this.priceToLogical(e[a]
.additionalPrice)));
for (a = 0; a < e.length; a++)(l = e[a]) && (c = l.open, h = i + s * (c - o), u = this
.m_height - 1 - h, l.open = Math.round(u), c = l.high, h = i + s * (c - o), u =
this.m_height - 1 - h, l.high = Math.round(u), c = l.low, h = i + s * (c - o),
u = this.m_height - 1 - h, l.low = Math.round(u), c = l.close, h = i + s * (c -
o), u = this.m_height - 1 - h, l.close = Math.round(u), l.additionalPrice &&
(c = l.additionalPrice, h = i + s * (c - o), u = this.m_height - 1 - h, l
.additionalPrice = Math.round(u)))
}, a.prototype.coordinateToPrice = function(t) {
var e, i;
return this.makeSureItIsValid(), this.isEmpty() ? 0 : (e = this.invertedCoordinate(t),
i = this.priceRange().minValue() + (this.priceRange().maxValue() - this
.priceRange().minValue()) * ((e - this.bottomMargin() * this.height()) / (
this.internalHeight() - 1)), this.logicalToPrice(i))
}, a.prototype.dataSources = function() {
return this.m_dataSources
}, a.prototype.orderedSources = function() {
var t, e, o, n;
if (this._cachedOrderedSoruces) return this._cachedOrderedSoruces;
for (t = [], e = 0; e < this.m_dataSources.length; e++) o = this.m_dataSources[e],
null == o.zorder() && o.setZorder(e + 1), t.push(o);
return n = i(228), t = n.sortSources(t), this._cachedOrderedSoruces = t, this
._cachedOrderedSoruces
}, a.prototype.invalidateSourcesCache = function() {
this._cachedOrderedSoruces = null
}, a.prototype.hasSeries = function() {
return this._hasSeries
}, a.prototype.addDataSource = function(t, e) {
var i, o;
(e || -1 === this.m_dataSources.indexOf(t)) && (TradingView.isInherited(t.constructor,
p) && (i = t.properties(), !0 !== this._hasSeries && (i.lockScale && (this
._properties.lockScale.setValue(i.lockScale.value()), i.removeProperty(
"lockScale")), i.pnfStyle.lockScale && i.pnfStyle.removeProperty(
"lockScale")), this._hasSeries = !0), o = this, t.properties().visible
.listeners().subscribe(null, function() {
o._sourcesForAutoscale = null
}), this.m_dataSources.push(t), this._mainSource = void 0, this
._sourcesForAutoscale = null, this._sourcesToUpdateViews = null, this
.updateFormatter(), this.initScaleProperties(), this.invalidateSourcesCache())
}, a.prototype.initScaleProperties = function() {
var t = this.isLockScale();
t && (this.properties().percentage.setValue(!1), this.properties().log.setValue(!1),
this.properties().autoScale.setValue(!1)), this.properties().percentageDisabled
.setValue(t), this.properties().logDisabled.setValue(t), this.properties()
.autoScaleDisabled.setValue(this.properties().percentage.value()), this.properties()
.percentage.value() && this.properties().log.setValue(!1)
}, a.prototype.removeDataSource = function(t) {
var e = this.m_dataSources.indexOf(t);
if (-1 === e) throw Error("source is not attached to scale");
this.m_dataSources.splice(e, 1), TradingView.isInherited(t.constructor, p) && (this
._hasSeries = !1), this.mainSource() || this.setAutoScale(!0), this
._mainSource = void 0, this._sourcesForAutoscale = null, this
._sourcesToUpdateViews = null, this.updateFormatter(), this.invalidateSourcesCache()
}, a.prototype.isAutoScale = function() {
return this._properties.autoScale.value() && !this.isLockScale()
}, a.prototype.isLockScale = function() {
return this._properties.lockScale.value()
}, a.prototype.setAutoScale = function(t) {
this._properties.autoScale.setValue(t)
}, a.prototype.isScaled = function() {
return "number" == typeof this.m_scaleStartPoint
}, a.prototype.startScale = function(t) {
this.isPercentage() || null === this.m_scaleStartPoint && null === this
.m_priceRangeSnapshot && (this.isEmpty() || (this.m_scaleStartPoint = this
.m_height - t, this.m_priceRangeSnapshot = this.priceRange().clone()))
}, a.prototype.marks = function() {
return this._marksCache ? this._marksCache : (this.m_markBuilder.rebuildTickMarks(),
this._marksCache = this.m_markBuilder.marks(), this.onMarksChanged.fire(), this
._marksCache)
}, a.prototype.setMaxPriceRange = function(t) {
this.m_maxPriceRange = t
}, a.prototype.setMinPriceRange = function(t) {
this.m_minPriceRange = t
}, a.prototype.scaleTo = function(t) {
var e, i;
this.isPercentage() || null !== this.m_scaleStartPoint && (this.setAutoScale(!1), t =
this.m_height - t, t < 0 && (t = 0), e = (this.m_scaleStartPoint + .2 * (this
.m_height - 1)) / (t + .2 * (this.m_height - 1)), i = this
.m_priceRangeSnapshot.clone(), e = Math.max(e, .1), i.scaleAroundCenter(e), this
.setPriceRange(i))
}, a.prototype.endScale = function() {
this.isPercentage() || null !== this.m_scaleStartPoint && (this.m_scaleStartPoint =
null, this.m_priceRangeSnapshot = null)
}, a.prototype.startScroll = function(t) {
this.isAutoScale() || null === this.m_scrollStartPoint && null === this
.m_priceRangeSnapshot && (this.isEmpty() || (this.m_scrollStartPoint = t, this
.m_priceRangeSnapshot = this.priceRange().clone()))
}, a.prototype.scrollTo = function(t) {
var e, i, o, n;
this.isAutoScale() || null !== this.m_scrollStartPoint && (e = this.priceRange()
.length() / (this.height() - 1), i = t - this.m_scrollStartPoint, o = i * e, n =
this.m_priceRangeSnapshot.clone(), n.shift(o), this.setPriceRange(n, !0), this
._marksCache = null)
}, a.prototype.endScroll = function() {
this.isAutoScale() || null !== this.m_scrollStartPoint && (this.m_scrollStartPoint =
null, this.m_priceRangeSnapshot = null)
}, a.prototype.state = function() {
var t = {};
return t.m_priceRange = this.priceRange() ? this.priceRange().serialize() : null, t
.m_isAutoScale = this.isAutoScale(), t.m_isPercentage = this._properties.percentage
.value(), t.m_isLog = this._properties.log.value(), t.m_isLockScale = this
.isLockScale(), t.m_height = this.m_height, t.m_topMargin = this.m_topMargin, t
.m_bottomMargin = this.m_bottomMargin, t
}, a.prototype.restoreState = function(t) {
var e = t.m_priceRange;
if (void 0 === e) throw new TypeError("invalid state");
if (void 0 === t.m_isAutoScale) throw new TypeError("invalid state");
void 0 !== t.m_isPercentage && this._properties.percentage.setValue(t.m_isPercentage),
void 0 !== t.m_isLog && this._properties.log.setValue(t.m_isLog),
void 0 !== t.m_isLockScale && this._properties.lockScale.setValue(t.m_isLockScale),
e ? this.setPriceRange(new g(e), !0) : this.m_priceRange = null, void 0 !== t
.m_height && (this.m_height = Math.max(0, t.m_height)), this.setAutoScale(t
.m_isAutoScale), void 0 !== t.m_topMargin && (this.m_topMargin = t.m_topMargin),
void 0 !== t.m_bottomMargin && (this.m_bottomMargin = t.m_bottomMargin), this
._mainSource = void 0, this._scaleSeriesOnly = !1
}, a.prototype.mainSource = function() {
var t, e;
if (void 0 !== this._mainSource) return this._mainSource;
for (t = void 0, e = 0; e < this.m_dataSources.length; e++) {
if (TradingView.isInherited(this.m_dataSources[e].constructor, p)) {
t = this.m_dataSources[e];
break
}!t && TradingView.isInherited(this.m_dataSources[e].constructor, d) && (t = this
.m_dataSources[e])
}
return this._mainSource = t, this._mainSource || null
}, a.prototype.formatter = function() {
return this._formatter || this.updateFormatter(), this._formatter
}, a.prototype.updateFormatter = function() {
var t, e;
this._marksCache = null, t = this.mainSource(), e = 100, t && (e = t.base()), this
._formatter = null, this.properties().percentage.value() ? this._formatter = new m :
this._formatter = t ? t.formatter() : new f(100, 1), this.m_markBuilder = new r(
this, e, this._formatter), this.m_markBuilder.rebuildTickMarks()
}, a.prototype._recalculateSourcesForAutoscale = function() {
var t, e;
this._mainSource && (this._scaleSeriesOnly = this._scalesProperties.scaleSeriesOnly
.value()), t = this._scaleSeriesOnly && this._hasSeries, e = function(e) {
return !!(e.properties().visible.value() || e instanceof p) && (t ? TradingView
.isInherited(e.constructor, p) : TradingView.isInherited(e.constructor,
d))
}, this._sourcesForAutoscale = this.m_dataSources.filter(e)
}, a.prototype.sourcesForAutoscale = function() {
return this._mainSource && this._scaleSeriesOnly !== this._scalesProperties
.scaleSeriesOnly.value() && (this._sourcesForAutoscale = null), this
._sourcesForAutoscale || this._recalculateSourcesForAutoscale(), this
._sourcesForAutoscale
}, a.prototype.recalculatePriceRange = function(t) {
this._invalidatedForRange = {
visibleBars: t,
isValid: !1
}
}, a.prototype.makeSureItIsValid = function() {
this._invalidatedForRange.isValid || (this._invalidatedForRange.isValid = !0, this
.recalculatePriceRangeImpl())
}, a.prototype.recalculatePriceRangeImpl = function() {
var t, e, i, o, n, r, s, a, l, c, h = this._invalidatedForRange.visibleBars;
if (null !== h) {
for (t = null, e = this.sourcesForAutoscale(), i = 0, o = 0, n = 0; n < e
.length; n++) r = e[n], r.properties().visible.value() && (s = h.firstBar(), a =
h.lastBar(), l = r.priceRange(s, a), null === t && l ? t = l : l && (t = t
.merge(l)), r.margins && (c = r.margins(), i = Math.max(c[0], i), o =
Math.max(c[1], o)));
(Math.abs(o - this._studyBottomMargin) > .01 || Math.abs(i - this._studyTopMargin) >
.01) && (this._studyBottomMargin = o, this._studyTopMargin = i, this
._marksCache = null, this._invalidateInternalHeightCache()), t ? (t
.minValue() === t.maxValue() && (t = new g(t.minValue() - .5, t.maxValue() +
.5)), this.setPriceRange(t)) : this.m_priceRange || this.setPriceRange(
new g(-.5, .5)), this._invalidatedForRange.isValid = !0
}
}, a.prototype.sourcesToUpdateViews = function() {
var t, e;
if (!this._sourcesToUpdateViews)
for (this._sourcesToUpdateViews = [], t = 0; t < this.m_dataSources.length; t++) e =
this.m_dataSources[t],
TradingView.isInherited(e.constructor, u) && !e.isActualSymbol() || this
._sourcesToUpdateViews.push(e);
return this._sourcesToUpdateViews
}, a.prototype.updatePaneViews = function() {
var t, e = this.sourcesToUpdateViews();
for (t = 0; t < e.length; t++) e[t].updateAllViews()
}, a.prototype.priceRangeInPrice = function() {
var t, e, i, o, n, r;
return this.isEmpty() ? null : this.isPercent() ? (t = this.mainSource().model()
.timeScale().visibleBars(), e = this.mainSource().data().search(t.firstBar(), _
.NearestRight).value[TradingView.CLOSE_PLOT], i = this.priceRange()
.convertFromPercents(e), {
from: i.minValue(),
to: i.maxValue()
}) : (o = this.height(), n = this.coordinateToPrice(o - 1), r = this
.coordinateToPrice(0), {
from: n,
to: r
})
}, t.exports = a
}).call(e, i(25), i(10))
}, function(t, e, i) {
"use strict";
function o(t, e, i) {
this.source = t, this.pane = e, this._rendererFactory = i
}
function n(t, e) {
this._barWidth = t.barWidth, this._plates = t.plates, this._tooltip = t.tooltip, this._model = e
}
function r() {
this._layout = [], this._currentId = void 0, this.tooltipHovered = !1
}
var s = i(8).Point,
a = i(60).pointInCircle,
l = i(11);
o.prototype.update = function() {}, o.prototype.renderer = function() {
return this._rendererFactory(this.source)
}, n.prototype.draw = function(t) {
t.save();
for (var e = 0; e < this._plates.length; e++)
if (this._plates[e].highlightByAuthor) {
this._highlightByAuthor = !0;
break
} this._plates.forEach(this._drawItem.bind(this, t)), this._tooltip.draw(this._plates.map(
function(t) {
return this._plateTransform(t)
}.bind(this)), t), this._tooltip.endDraw(), t.restore()
}, n.prototype._drawItem = function(t, e) {
t.save(), this._highlightByAuthor && !e.highlightByAuthor && (t.globalAlpha = .4);
var i = this._dotTransform(e);
i.mine ? this._drawTriangle(t, i) : this._drawDot(t, i), t.restore()
}, n.prototype._commonTransform = function(t) {
var e = Math.max(1.4 * t.minSize, this._barWidth + 4),
i = t.y + {
up: -1,
down: 1
} [t.direction] * (e * (t.order + .6) + .25 * e),
o = TradingView.clone(t.overridedTheme || this.themes[t.theme]);
return o.dotBorderWidth = t.hovered || t.highlightByAuthor ? 4 : 2, {
id: t.id,
theme: o,
themeName: t.theme,
x: Math.round(t.x + 1),
y: Math.round(i),
pinned: t.pinned,
hovered: t.hovered
}
}, n.prototype._dotTransform = function(t) {
var e = this._commonTransform(t);
return e.radius = Math.max(t.minSize / 2, .4 * this._barWidth), e.label = t.label, e
.labelFontColor = t.labelFontColor, e.labelFontSize = Math.ceil(Math.max(10, Math.min(e
.radius, 20))), this._model.updateDotData(t, e)
}, n.prototype._plateTransform = function(t) {
var e = this._commonTransform(t);
return this._model.updatePlateData(t, e)
}, n.THEMES = ["green", "red", "neutral", "yellow", "blue"], n.prototype.themes = {
green: {
border: "#78C143",
background: "#8DDD54"
},
red: {
border: "#CC4545",
background: "#ED5A5A"
},
neutral: {
border: "#EAC300",
background: "#FFD400"
},
yellow: {
border: "#EAC300",
background: "#FFD400"
},
blue: {
border: "#047ACE",
background: "#0496FF"
}
}, n.prototype._drawTriangle = function(t, e) {
var i, o, n, r;
t.strokeStyle = e.theme.border, t.fillStyle = e.theme.background, t.lineWidth = e.theme
.dotBorderWidth, i = e, o = e.radius, n = Math.cos(Math.PI / 6) * o, r = Math.sin(Math.PI /
6) * o, t.translate(i.x, i.y), "up" === e.direction && t.rotate(Math.PI), e.public || (t
.lineWidth /= 2), t.beginPath(), t.moveTo(0, -o), t.lineTo(n, r),
t.lineTo(-n, r), t.lineTo(0, -o), t.closePath(), t.stroke(), e.public && t.fill()
}, n.prototype._drawDot = function(t, e) {
t.strokeStyle = e.theme.border, t.fillStyle = e.theme.background, t.lineWidth = e.theme
.dotBorderWidth, t.beginPath(), t.arc(e.x, e.y, e.radius, 0, 2 * Math.PI, !0), t
.closePath(), t.stroke(), t.fill(), e.label && e.radius > 6 && (t.textAlign = "center", t
.textBaseline = "middle", t.font = "bold " + e.labelFontSize + "px Arial", t.fillStyle =
e.labelFontColor, t.fillText(e.label, e.x, e.y))
}, n.prototype.hitTest = function(t) {
var e, i;
for (i = this._plates.length - 1; i >= 0; --i)
if (e = this._hitTestDot(this._plates[i], t)) return e;
return null
}, n.prototype._hitTestDot = function(t, e) {
var i = this._dotTransform(t),
o = new s(i.x, i.y);
return a(e, o, Math.max(i.radius, 8)) ? new l(l.REGULAR, t) : null
}, r.prototype._createLayout = function() {
throw Error("Child class must override this member")
}, r.prototype._updatePlate = function(t) {
throw Error("Child class must override this member")
}, r.prototype._getContainer = function(t) {
return this._container && this._context === t || (this._context = t, this._container = $(t
.canvas).parent()), this._container
}, r.prototype._plateArrowSize = 14, r.prototype.showPlate = function(t, e) {
var i, o, n, r, s, a, l, c;
this._currentId === t.id && this._layout && 0 !== this._layout.length && null != this._layout[0]
.parentNode || (this._currentId = t.id, this._createLayout(), this._getContainer(e).append(
this._layout), i = this, this._layout.hover(function() {
i.tooltipHovered = !0, $(this).stop(!0).fadeTo(0, 1)
}, function() {
i.tooltipHovered = !1
})), o = Math.round(t.barWidth / 2), o > 15 && (o = 15), o < 10 && (o = 10), this
._updatePlate(t), n = e.canvas.getBoundingClientRect(), r = t.x - this._layout
.outerWidth() < this._plateArrowSize, s = n.width - t.x + Math.round(t.barWidth / 2 + o),
r && (
s -= this._layout.outerWidth() + 2 * this._plateArrowSize), a = n.height, l = 20, c =
10, this._layout.toggleClass("right", r), this._layout.css({
top: Math.min(Math.max(t.y, l), a - this._layout.outerHeight() - c),
right: s,
fontSize: o + "px",
display: "block"
})
}, r.prototype._removeLayout = function() {
this.tooltipHovered || (this._layout.stop(!0), this._layout.remove())
}, r.prototype._toggleLayout = function(t) {
this._layout.toggle(t)
}, r.prototype.hide = function(t) {
this.tooltipHovered ? this._layout.stop(!0).fadeTo(0, 1) : this._layout.fadeOut(400,
function() {
$(this).remove(), t()
})
}, r.prototype.setSource = function(t) {
this.source = t
}, e.BarsMarksContainerPaneView = o, e.BarsMarksContainerRenderer = n, e.BarMarkTooltip = r
}, function(t, e, i) {
"use strict";
var o = {};
o.renderAttributes = function(t) {
var e, i = "";
for (e in t) t[e] && (i += " " + e + '="' + t[e] + '"');
return i
}, o.create = function(t, e) {
var i = $(document.createElement(t));
return e && (e.html && (i.html(e.html), delete e.html), i.attr(e)), i
},
o.validAttributes = ["abbr", "accept-charset", "accept", "accesskey", "action", "align", "alink",
"alt", "archive", "axis", "background", "bgcolor", "border", "cellpadding", "cellspacing",
"char", "charoff", "charset", "checked", "cite", "class", "classid", "clear", "code",
"codebase", "codetype", "color", "cols", "colspan", "compact", "content", "coords", "data",
"datetime", "declare", "defer", "dir", "disabled", "enctype", "face", "for", "frame",
"frameborder", "headers", "height", "href", "hreflang", "hspace", "http-equiv", "id", "ismap",
"label", "lang", "language", "link", "longdesc", "marginheight", "marginwidth", "maxlength",
"media", "method", "multiple", "name", "nohref", "noresize", "noshade", "nowrap", "object",
"onblur", "onchange", "onclick", "ondblclick", "onfocus", "onkeydown", "onkeypress", "onkeyup",
"onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onreset",
"onselect", "onsubmit", "onunload", "profile", "prompt", "readonly", "rel", "rev", "rows",
"rowspan", "rules", "scheme", "scope", "scrolling", "selected", "shape", "size", "span", "src",
"standby", "start", "style", "summary", "tabindex", "target", "text", "title", "type", "usemap",
"valign", "value", "valuetype", "version", "vlink", "vspace", "width"
], o.validAttribute = function(t) {
return -1 !== jQuery.inArray(t, o.validAttributes)
}, o.cleanAttributes = function(t) {
return jQuery.each(t, function(e, i) {
o.validAttribute(e) || delete t[e]
}), t
}, t.exports = o
}, function(t, e, i) {
function o(t, e, i, s, a) {
if (!i) return void r.logDebug("Missed undo model");
n.call(this, t, e, !0, i, s), a ? t.callbacks().subscribe(this, a) : t.callbacks().subscribe(this, o
.prototype.onActionCallback)
}
var n = i(320).Binding,
r = i(7).getLogger("Chart.PropertyPage.ActionBinder");
inherit(o, n), o.prototype.onActionCallback = function(t) {
this._undoModel.setProperty(this._property, this.value(), this._undoText)
}, o.prototype.value = function() {
return this.control().checked
}, o.prototype.setValue = function(t) {
return this.control().checked = !!t
}, e.ActionBinder = o
}, function(t, e, i) {
"use strict";
var o = function() {
function t(t) {
switch (t) {
case "c67":
case "m67":
case "c45":
return "copy";
case "c86":
case "m86":
case "s45":
return "paste";
case "c88":
case "m88":
case "s46":
return "cut"
}
}
function e(t) {
var e = [];
return t.shiftKey && e.push("s"), t.ctrlKey && e.push("c"), t.metaKey && e.push("m"), t
.altKey && e.push("a"), e.push(t.keyCode), e.join("")
}
function i(t) {
var e = $.Event(u + ":" + t);
return $(window).trigger(e, {
AppClipboard: _
}), e
}
function o(o) {
var n, r, s;
if ((document.activeElement === document.body || document.activeElement === document
.documentElement) && (n = e(o), r = t(n))) {
if ("keydown" === o.type) d[n] = !0;
else if (d[n]) return;
if (document.getSelection) {
if (!document.getSelection().isCollapsed) return
} else if (document.selection && "None" !== document.selection.type) return;
o.isDefaultPrevented() || (s = i(r), s.isDefaultPrevented() && o.preventDefault())
}
}
function n(t) {
t = t.originalEvent || t, t.key === h && i("change")
}
function r() {
p || ($(document).on("keypress keydown", o), $(window).on("storage", n), p = !0)
}
function s() {
$(document).off("keypress keydown", o), $(window).off("storage", n), $(window).off(u +
":copy"), $(window).off(u + ":paste"), $(window).off(u + ":cut"), $(window).off(u +
":change"), p = !1
}
function a() {
try {
return JSON.parse(TVLocalStorage.getItem(h))
} catch (t) {
return null
}
}
function l(t) {
if (null == t) return c();
var e = JSON.stringify(t);
e !== TVLocalStorage.getItem(h) && (TVLocalStorage.setItem(h, e), i("change"))
}
function c() {
TVLocalStorage.getItem(h) && (TVLocalStorage.removeItem(h), i("change"))
}
var h = "application-clipboard",
u = "appclip",
d = {},
p = !1,
_ = {
init: r,
set: l,
get: a,
clear: c,
destroy: s
};
return _
}();
t.exports = o
}, function(t, e, i) {
"use strict";
var o = i(48);
JSServer.studyLibrary = [{
name: "Accumulation/Distribution",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#808000"
}
},
precision: 4,
inputs: {}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Accumulation/Distribution",
shortDescription: "Accum/Dist",
is_price_study: !1,
inputs: [],
id: "Accumulation/Distribution@tv-basicstudies-1",
scriptIdPart: "",
name: "Accumulation/Distribution"
},
constructor: function() {
this.f_0 = function(t, e, i, n) {
return o.Std.or(o.Std.and(o.Std.eq(t, e), o.Std.eq(t, i)), o.Std.eq(e, i)) ?
0 : (2 * t - i - e) / (e - i) * n
}, this.main = function(t, e) {
var i, n, r;
return this._context = t, this._input = e, i = this.f_0(o.Std.close(this
._context), o.Std.high(this._context), o.Std.low(this._context),
o.Std.volume(this._context)), n = o.Std.cum(i, this._context), r =
n, [r]
}
}
}, {
name: "Accumulative Swing Index",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#3C78D8"
}
},
precision: 4,
inputs: {
in_0: 10
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "ASI",
histogramBase: 0,
joinPoints: !1
}
},
description: "Accumulative Swing Index",
shortDescription: "ASI",
is_price_study: !1,
inputs: [{
id: "in_0",
name: "Limit Move Value",
defval: 10,
type: "float",
min: .1,
max: 1e5
}],
id: "Accumulative Swing Index@tv-basicstudies-1",
scriptIdPart: "",
name: "Accumulative Swing Index"
},
constructor: function() {
this.f_0 = function(t, e) {
var i = e.new_var(o.Std.open(e)),
n = e.new_var(o.Std.high(e)),
r = e.new_var(o.Std.low(e)),
s = e.new_var(o.Std.close(e)),
a = o.Std.abs(n - s.get(1)),
l = o.Std.abs(r - s.get(1)),
c = o.Std.abs(n - r),
h = o.Std.abs(s.get(1) - i.get(1)),
u = o.Std.max(a, l),
d = o.Std.iff(a >= o.Std.max(l, c), a - .5 * l + .25 * h, o.Std.iff(l >=
o.Std.max(a, c), l - .5 * a + .25 * h, c + .25 * h));
return o.Std.iff(0 === d, 0, (s - s.get(1) + .5 * (s - i) + .25 * (s.get(
1) - i.get(1))) / d * u / t * 50)
}, this.f_1 = function(t, e) {
var i = this.f_0(t, e);
return o.Std.cum(i, e)
}, this.main = function(t, e) {
var i, o;
return this._context = t, this._input = e, i = this._input(0), o = this.f_1(
i, this._context), [o]
}
}
}, {
name: "Advance/Decline",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#FF0000"
}
},
precision: 4,
inputs: {
in_0: 10
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Advance/Decline",
shortDescription: "AD",
is_price_study: !1,
inputs: [{
id: "in_0",
name: "length",
defval: 10,
type: "integer",
min: 1,
max: 2e3
}],
id: "Advance/Decline@tv-basicstudies-1",
scriptIdPart: "",
name: "Advance/Decline"
},
constructor: function() {
this.f_0 = function(t, e) {
return o.Std.gt(t, e)
}, this.f_1 = function(t, e) {
return o.Std.lt(t, e)
}, this.f_2 = function(t, e) {
return 0 === e ? t : t / e
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u;
return this._context = t, this._input = e, i = this._input(0), n = this.f_0(
o.Std.close(this._context), o.Std.open(this._context)), r = this
._context.new_var(n), s = o.Std.sum(r, i, this._context), a = this.f_1(o
.Std.close(this._context), o.Std.open(this._context)), l = this
._context.new_var(a), c = o.Std.sum(l, i, this._context), h = this.f_2(
s, c), u = h, [u]
}
}
}, {
name: "Arnaud Legoux Moving Average",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#000080"
}
},
precision: 4,
inputs: {
in_0: 9,
in_1: .85,
in_2: 6
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Arnaud Legoux Moving Average",
shortDescription: "ALMA",
is_price_study: !0,
inputs: [{
id: "in_0",
name: "Window Size",
defval: 9,
type: "integer",
min: 0,
max: 5e3
}, {
id: "in_1",
name: "Offset",
defval: .85,
type: "float",
min: -1e12,
max: 1e12
}, {
id: "in_2",
name: "Sigma",
defval: 6,
type: "float",
min: -1e12,
max: 1e12
}],
id: "Arnaud Legoux Moving Average@tv-basicstudies-1",
scriptIdPart: "",
name: "Arnaud Legoux Moving Average"
},
constructor: function() {
this.main = function(t, e) {
var i, n, r, s, a, l;
return this._context = t, this._input = e, i = o.Std.close(this._context),
n = this._input(0), r = this._input(1), s = this._input(2), a = this
._context.new_var(i), l = o.Std.alma(a, n, r, s), [l]
}
}
}, {
name: "Aroon",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#FF6A00"
},
plot_1: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0094FF"
}
},
precision: 4,
inputs: {
in_0: 14
}
},
plots: [{
id: "plot_0",
type: "line"
}, {
id: "plot_1",
type: "line"
}],
styles: {
plot_0: {
title: "Upper",
histogramBase: 0,
joinPoints: !1
},
plot_1: {
title: "Lower",
histogramBase: 0,
joinPoints: !1
}
},
description: "Aroon",
shortDescription: "Aroon",
is_price_study: !1,
inputs: [{
id: "in_0",
name: "length",
defval: 14,
type: "integer",
min: 1,
max: 2e3
}],
id: "Aroon@tv-basicstudies-1",
scriptIdPart: "",
name: "Aroon"
},
constructor: function() {
this.f_0 = function(t, e) {
return 100 * (t + e) / e
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d, p, _;
return this._context = t, this._input = e, i = this._input(0), n = o.Std
.high(this._context), r = i + 1, s = this._context.new_var(n), a = o.Std
.highestbars(s, r, this._context), l = this.f_0(a, i), c = o.Std.low(
this._context), h = this._context.new_var(c), u = o.Std.lowestbars(
h, r, this._context), d = this.f_0(u, i), p = l, _ = d, [p, _]
}
}
}, {
name: "Average Directional Index",
metainfo: {
_metainfoVersion: 41,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#FF0000"
}
},
precision: 4,
inputs: {
in_0: 14,
in_1: 14
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "ADX",
histogramBase: 0,
joinPoints: !1,
isHidden: !1
}
},
description: "Average Directional Index",
shortDescription: "ADX",
is_price_study: !1,
inputs: [{
id: "in_0",
name: "ADX Smoothing",
defval: 14,
type: "integer",
min: -1e12,
max: 1e12
}, {
id: "in_1",
name: "DI Length",
defval: 14,
type: "integer",
min: -1e12,
max: 1e12
}],
id: "average_directional_Index@tv-basicstudies-1",
scriptIdPart: "",
name: "Average Directional Index"
},
constructor: function() {
this.f_0 = function(t) {
var e = this._context.new_var(o.Std.high(this._context)),
i = o.Std.change(e),
n = this._context.new_var(o.Std.low(this._context)),
r = -o.Std.change(n),
s = this._context.new_var(o.Std.tr(void 0, this._context)),
a = o.Std.rma(s, t, this._context),
l = this._context.new_var(o.Std.and(o.Std.gt(i, r), o.Std.gt(i, 0)) ?
i : 0),
c = o.Std.fixnan(100 * o.Std.rma(l, t, this._context) / a, this
._context),
h = this._context.new_var(o.Std.and(o.Std.gt(r, i), o.Std.gt(r, 0)) ?
r : 0);
return [c, o.Std.fixnan(100 * o.Std.rma(h, t, this._context) / a, this
._context)]
}, this.f_1 = function(t, e) {
var i = this.f_0(t),
n = i[0],
r = i[1],
s = n + r,
a = this._context.new_var(o.Std.abs(n - r) / (o.Std.eq(s, 0) ? 1 : s));
return [100 * o.Std.rma(a, e, this._context)]
}, this.main = function(t, e) {
return this._context = t, this._input = e, this.f_1(this._input(0), this
._input(1))
}
}
}, {
name: "Average True Range",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#FF0000"
}
},
precision: 4,
inputs: {
in_0: 14
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Average True Range",
shortDescription: "ATR",
is_price_study: !1,
inputs: [{
id: "in_0",
name: "length",
defval: 14,
type: "integer",
min: 1,
max: 2e3
}],
id: "Average True Range@tv-basicstudies-1",
scriptIdPart: "",
name: "Average True Range"
},
constructor: function() {
this.main = function(t, e) {
var i, n, r, s;
return this._context = t, this._input = e, i = this._input(0), n = o.Std.tr(
this._context), r = this._context.new_var(n), s = o.Std.rma(r, i,
this._context), [s]
}
}
}, {
name: "Awesome Oscillator",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 1,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#000080"
}
},
precision: 4,
palettes: {
palette_0: {
colors: {
0: {
color: "#FF0000",
width: 1,
style: 0
},
1: {
color: "#008000",
width: 1,
style: 0
}
}
}
},
inputs: {}
},
plots: [{
id: "plot_0",
type: "line"
}, {
id: "plot_1",
palette: "palette_0",
target: "plot_0",
type: "colorer"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Awesome Oscillator",
shortDescription: "AO",
is_price_study: !1,
palettes: {
palette_0: {
colors: {
0: {
name: "Color 0"
},
1: {
name: "Color 1"
}
}
}
},
inputs: [],
id: "Awesome Oscillator@tv-basicstudies-1",
scriptIdPart: "",
name: "Awesome Oscillator"
},
constructor: function() {
this.f_0 = function(t, e) {
return t - e
}, this.f_1 = function(t) {
return o.Std.le(t, 0) ? 0 : 1
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d;
return this._context = t, this._input = e,
i = o.Std.hl2(this._context), n = this._context.new_var(i), r = o.Std
.sma(n, 5, this._context), s = this._context.new_var(i), a = o.Std.sma(
s, 34, this._context), l = this.f_0(r, a), c = l, h = this._context
.new_var(l), u = o.Std.change(h), d = this.f_1(u), [c, d]
}
}
}, {
name: "Balance of Power",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#FF0000"
}
},
precision: 4,
inputs: {}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Balance of Power",
shortDescription: "Balance of Power",
is_price_study: !1,
inputs: [],
id: "Balance of Power@tv-basicstudies-1",
scriptIdPart: "",
name: "Balance of Power"
},
constructor: function() {
this.f_0 = function(t, e, i, o) {
return (t - e) / (i - o)
}, this.main = function(t, e) {
return this._context = t, this._input = e, [this.f_0(o.Std.close(this
._context), o.Std.open(this._context), o.Std.high(this
._context), o.Std.low(this._context))]
}
}
}, {
name: "Bollinger Bands",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#FF0000"
},
plot_1: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0000FF"
},
plot_2: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0000FF"
}
},
precision: 4,
filledAreasStyle: {
fill_0: {
color: "#000080",
transparency: 90,
visible: !0
}
},
inputs: {
in_0: 20,
in_1: 2
}
},
plots: [{
id: "plot_0",
type: "line"
}, {
id: "plot_1",
type: "line"
}, {
id: "plot_2",
type: "line"
}],
styles: {
plot_0: {
title: "Median",
histogramBase: 0,
joinPoints: !1
},
plot_1: {
title: "Upper",
histogramBase: 0,
joinPoints: !1
},
plot_2: {
title: "Lower",
histogramBase: 0,
joinPoints: !1
}
},
description: "Bollinger Bands",
shortDescription: "BB",
is_price_study: !0,
filledAreas: [{
id: "fill_0",
objAId: "plot_1",
objBId: "plot_2",
type: "plot_plot",
title: "Plots Background"
}],
inputs: [{
id: "in_0",
name: "length",
defval: 20,
type: "integer",
min: 1,
max: 1e4
}, {
id: "in_1",
name: "mult",
defval: 2,
type: "float",
min: .001,
max: 50
}],
id: "Bollinger Bands@tv-basicstudies-1",
scriptIdPart: "",
name: "Bollinger Bands"
},
constructor: function() {
this.f_0 = function(t, e) {
return t * e
}, this.f_1 = function(t, e) {
return t + e
}, this.f_2 = function(t, e) {
return t - e
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d, p, _, f;
return this._context = t, this._input = e, i = o.Std.close(this._context),
n = this._input(0), r = this._input(1), s = this._context.new_var(i),
a = o.Std.sma(s, n, this._context), l = this._context.new_var(i), c = o
.Std.stdev(l, n, this._context), h = this.f_0(r, c), u = this.f_1(a, h),
d = this.f_2(a, h), p = a, _ = u, f = d, [p, _, f]
}
}
}, {
name: "Bollinger Bands %B",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#008080"
}
},
precision: 4,
bands: [{
color: "#808080",
linestyle: 2,
linewidth: 1,
visible: !0,
value: 1
}, {
color: "#808080",
linestyle: 2,
linewidth: 1,
visible: !0,
value: 0
}],
filledAreasStyle: {
fill_0: {
color: "#008080",
transparency: 90,
visible: !0
}
},
inputs: {
in_0: 20,
in_1: 2
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Bollinger Bands %B",
shortDescription: "BB %B",
is_price_study: !1,
bands: [{
id: "hline_0",
name: "UpperLimit"
}, {
id: "hline_1",
name: "LowerLimit"
}],
filledAreas: [{
id: "fill_0",
objAId: "hline_0",
objBId: "hline_1",
type: "hline_hline",
title: "Hlines Background"
}],
inputs: [{
id: "in_0",
name: "length",
defval: 20,
type: "integer",
min: 1,
max: 1e4
}, {
id: "in_1",
name: "mult",
defval: 2,
type: "float",
min: .001,
max: 50
}],
id: "Bollinger Bands %B@tv-basicstudies-1",
scriptIdPart: "",
name: "Bollinger Bands %B"
},
constructor: function() {
this.f_0 = function(t, e) {
return t * e
}, this.f_1 = function(t, e) {
return t + e
}, this.f_2 = function(t, e) {
return t - e
}, this.f_3 = function(t, e, i) {
return (t - e) / (i - e)
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d, p, _;
return this._context = t, this._input = e, i = o.Std.close(this._context),
n = this._input(0), r = this._input(1), s = this._context.new_var(i),
a = o.Std.sma(s, n, this._context), l = this._context.new_var(i), c = o
.Std.stdev(l, n, this._context), h = this.f_0(r, c), u = this.f_1(a, h),
d = this.f_2(a, h), p = this.f_3(i, d, u), _ = p, [_]
}
}
}, {
name: "Bollinger Bands Width",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0000FF"
}
},
precision: 4,
inputs: {
in_0: 20,
in_1: 2
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Bollinger Bands Width",
shortDescription: "BBW",
is_price_study: !1,
inputs: [{
id: "in_0",
name: "length",
defval: 20,
type: "integer",
min: 1,
max: 1e4
}, {
id: "in_1",
name: "mult",
defval: 2,
type: "float",
min: .001,
max: 50
}],
id: "Bollinger Bands Width@tv-basicstudies-1",
scriptIdPart: "",
name: "Bollinger Bands Width"
},
constructor: function() {
this.f_0 = function(t, e) {
return t * e
}, this.f_1 = function(t, e) {
return t + e
}, this.f_2 = function(t, e) {
return t - e
}, this.f_3 = function(t, e, i) {
return (t - e) / i
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d, p, _;
return this._context = t, this._input = e, i = o.Std.close(this._context),
n = this._input(0), r = this._input(1), s = this._context.new_var(i),
a = o.Std.sma(s, n, this._context), l = this._context.new_var(i), c = o
.Std.stdev(l, n, this._context), h = this.f_0(r, c), u = this.f_1(a, h),
d = this.f_2(a, h), p = this.f_3(u, d, a), _ = p, [_]
}
}
}, {
name: "Chaikin Money Flow",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#008000"
}
},
precision: 4,
bands: [{
color: "#808080",
linestyle: 2,
linewidth: 1,
visible: !0,
value: 0
}],
inputs: {
in_0: 20
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Chaikin Money Flow",
shortDescription: "CMF",
is_price_study: !1,
bands: [{
id: "hline_0",
name: "Zero"
}],
inputs: [{
id: "in_0",
name: "length",
defval: 20,
type: "integer",
min: 1,
max: 2e3
}],
id: "Chaikin Money Flow@tv-basicstudies-1",
scriptIdPart: "",
name: "Chaikin Money Flow"
},
constructor: function() {
this.f_0 = function(t, e, i, n) {
return o.Std.or(o.Std.and(o.Std.eq(t, e), o.Std.eq(t, i)), o.Std.eq(e, i)) ?
0 : (2 * t - i - e) / (e - i) * n
}, this.f_1 = function(t, e) {
return t / e
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u;
return this._context = t, this._input = e, i = this._input(0), n = this.f_0(
o.Std.close(this._context), o.Std.high(this._context), o.Std.low(
this._context), o.Std.volume(this._context)), r = this._context
.new_var(n), s = o.Std.sum(r, i, this._context), a = o.Std.volume(this
._context), l = this._context.new_var(a), c = o.Std.sum(l, i, this
._context), h = this.f_1(s, c), u = h, [u]
}
}
}, {
name: "Chaikin Oscillator",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#FF0000"
}
},
precision: 4,
bands: [{
color: "#808080",
linestyle: 2,
linewidth: 1,
visible: !0,
value: 0
}],
inputs: {
in_0: 3,
in_1: 10
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Chaikin Oscillator",
shortDescription: "Chaikin Osc",
is_price_study: !1,
bands: [{
id: "hline_0",
name: "Zero"
}],
inputs: [{
id: "in_0",
name: "short",
defval: 3,
type: "integer",
min: 1,
max: 2e3
}, {
id: "in_1",
name: "long",
defval: 10,
type: "integer",
min: 1,
max: 2e3
}],
id: "Chaikin Oscillator@tv-basicstudies-1",
scriptIdPart: "",
name: "Chaikin Oscillator"
},
constructor: function() {
this.f_0 = function(t, e) {
return t - e
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u;
return this._context = t, this._input = e, i = this._input(0), n = this
._input(1), r = o.Std.accdist(this._context), s = this._context.new_var(
r), a = o.Std.ema(s, i, this._context), l = this._context.new_var(
r), c = o.Std.ema(l, n, this._context), h = this.f_0(a, c), u = h, [
u
]
}
}
}, {
name: "Chande Kroll Stop",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#008000"
},
plot_1: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#FF0000"
}
},
precision: 4,
inputs: {
in_0: 10,
in_1: 1,
in_2: 9
}
},
plots: [{
id: "plot_0",
type: "line"
}, {
id: "plot_1",
type: "line"
}],
styles: {
plot_0: {
title: "Long",
histogramBase: 0,
joinPoints: !1
},
plot_1: {
title: "Short",
histogramBase: 0,
joinPoints: !1
}
},
description: "Chande Kroll Stop",
shortDescription: "Chande Kroll Stop",
is_price_study: !0,
inputs: [{
id: "in_0",
name: "p",
defval: 10,
type: "integer",
min: 1,
max: 4999
}, {
id: "in_1",
name: "x",
defval: 1,
type: "integer",
min: 1,
max: 1e12
}, {
id: "in_2",
name: "q",
defval: 9,
type: "integer",
min: 1,
max: 1e12
}],
id: "Chande Kroll Stop@tv-basicstudies-1",
scriptIdPart: "",
name: "Chande Kroll Stop"
},
constructor: function() {
this.f_0 = function(t, e, i) {
return t - e * i
}, this.f_1 = function(t, e, i) {
return t + e * i
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d, p, _, f, m, g, v, y;
return this._context = t, this._input = e, i = this._input(0), n = this
._input(1), r = this._input(2), s = o.Std.high(this._context), a = this
._context.new_var(s), l = o.Std.highest(a, i, this._context), c = o.Std
.atr(i, this._context), h = this.f_0(l, n, c), u = this._context
.new_var(s), d = o.Std.lowest(u, i, this._context), p = this.f_1(d, n,
c), _ = this._context.new_var(h), f = o.Std.highest(_, r, this
._context),
m = this._context.new_var(p), g = o.Std.lowest(m, r, this._context), v =
g, y = f, [v, y]
}
}
}, {
name: "Chande Momentum Oscillator",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#008080"
}
},
precision: 4,
inputs: {
in_0: 9
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Chande Momentum Oscillator",
shortDescription: "ChandeMO",
is_price_study: !1,
inputs: [{
id: "in_0",
name: "length",
defval: 9,
type: "integer",
min: 1,
max: 2e3
}],
id: "Chande Momentum Oscillator@tv-basicstudies-1",
scriptIdPart: "",
name: "Chande Momentum Oscillator"
},
constructor: function() {
this.f_0 = function(t) {
return o.Std.ge(t, 0) ? t : 0
}, this.f_1 = function(t) {
return o.Std.ge(t, 0) ? 0 : -t
}, this.f_2 = function(t, e) {
return 100 * t / e
}, this.f_3 = function(t, e) {
return this.f_2(t - e, t + e)
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d, p, _;
return this._context = t, this._input = e, i = this._input(0), n = o.Std
.close(this._context), r = this._context.new_var(n), s = o.Std.change(
r), a = this.f_0(s), l = this.f_1(s), c = this._context.new_var(a),
h =
o.Std.sum(c, i, this._context), u = this._context.new_var(l), d = o.Std
.sum(u, i, this._context), p = this.f_3(h, d), _ = p, [_]
}
}
}, {
name: "Chop Zone",
metainfo: {
_metainfoVersion: 41,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 5,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#000080"
}
},
precision: 4,
palettes: {
palette_0: {
colors: {
0: {
color: "#34dddd",
width: 1,
style: 0
},
1: {
color: "#006400",
width: 1,
style: 0
},
2: {
color: "#98fb98",
width: 1,
style: 0
},
3: {
color: "#00FF00",
width: 1,
style: 0
},
4: {
color: "#8B0000",
width: 1,
style: 0
},
5: {
color: "#FF0000",
width: 1,
style: 0
},
6: {
color: "#FF7F00",
width: 1,
style: 0
},
7: {
color: "#ffc04c",
width: 1,
style: 0
},
8: {
color: "#FFFF00",
width: 1,
style: 0
}
}
}
},
inputs: {}
},
plots: [{
id: "plot_0",
type: "line"
}, {
id: "plot_1",
palette: "palette_0",
target: "plot_0",
type: "colorer"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1,
isHidden: !1
}
},
description: "Chop Zone",
shortDescription: "Chop Zone",
is_price_study: !1,
palettes: {
palette_0: {
colors: {
0: {
name: "Color 0"
},
1: {
name: "Color 1"
},
2: {
name: "Color 2"
},
3: {
name: "Color 3"
},
4: {
name: "Color 4"
},
5: {
name: "Color 5"
},
6: {
name: "Color 6"
},
7: {
name: "Color 7"
},
8: {
name: "Color 8"
}
},
valToIndex: {
0: 0,
1: 1,
2: 2,
3: 3,
4: 4,
5: 5,
6: 6,
7: 7,
8: 8
}
}
},
inputs: [],
id: "chop_zone@tv-basicstudies-1",
scriptIdPart: "",
name: "Chop Zone"
},
constructor: function() {
this.f_0 = function() {
var t = o.Std.close(this._context),
e = o.Std.hlc3(this._context),
i = this._context.new_var(o.Std.high(this._context)),
n = o.Std.highest(i, 30, this._context),
r = o.Std.lowest(i, 30, this._context),
s = 25 / (n - r) * r,
a = this._context.new_var(t),
l = this._context.new_var(o.Std.ema(a, 34, this._context)),
c = (l.get(1) - l.get(0)) / e * s,
h = o.Std.sqrt(1 + c * c),
u = o.Std.round(180 * o.Std.acos(1 / h) / 3.141592653589793),
d = o.Std.iff(o.Std.gt(c, 0), -u, u),
p = o.Std.and(o.Std.gt(d, -2.14), o.Std.le(d, -.71)) ? 7 : 8,
_ = o.Std.and(o.Std.gt(d, -3.57), o.Std.le(d, -2.14)) ? 6 : p,
f = o.Std.and(o.Std.gt(d, -5), o.Std.le(d, -3.57)) ? 5 : _,
m = o.Std.le(d, -5) ? 4 : f,
g = o.Std.and(o.Std.lt(d, 2.14), o.Std.ge(d, .71)) ? 3 : m,
v = o.Std.and(o.Std.lt(d, 3.57), o.Std.ge(d, 2.14)) ? 2 : g,
y = o.Std.and(o.Std.lt(d, 5), o.Std.ge(d, 3.57)) ? 1 : v;
return [1, o.Std.ge(d, 5) ? 0 : y]
}, this.main = function(t, e) {
return this._context = t, this._input = e, this.f_0()
}
}
}, {
name: "Choppiness Index",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0000FF"
}
},
precision: 4,
bands: [{
color: "#808080",
linestyle: 2,
linewidth: 1,
visible: !0,
value: 61.8
}, {
color: "#808080",
linestyle: 2,
linewidth: 1,
visible: !0,
value: 38.2
}],
filledAreasStyle: {
fill_0: {
color: "#008000",
transparency: 90,
visible: !0
}
},
inputs: {
in_0: 14
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Choppiness Index",
shortDescription: "CHOP",
is_price_study: !1,
bands: [{
id: "hline_0",
name: "UpperLimit"
}, {
id: "hline_1",
name: "LowerLimit"
}],
filledAreas: [{
id: "fill_0",
objAId: "hline_0",
objBId: "hline_1",
type: "hline_hline",
title: "Hlines Background"
}],
inputs: [{
id: "in_0",
name: "length",
defval: 14,
type: "integer",
min: 1,
max: 2e3
}],
id: "Choppiness Index@tv-basicstudies-1",
scriptIdPart: "",
name: "Choppiness Index"
},
constructor: function() {
this.f_0 = function(t, e, i, n) {
return 100 * o.Std.log10(t / (e - i)) / n
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d, p, _, f;
return this._context = t, this._input = e, i = this._input(0), n = o.Std
.atr(1, this._context), r = this._context.new_var(n), s = o.Std.sum(r,
i, this._context), a = o.Std.high(this._context), l = this._context
.new_var(a), c = o.Std.highest(l, i, this._context), h = o.Std.low(this
._context), u = this._context.new_var(h), d = o.Std.lowest(u, i,
this._context), p = o.Std.log10(i), _ = this.f_0(s, c, d, p), f = _,
[f]
}
}
}, {
name: "Commodity Channel Index",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#808000"
}
},
precision: 4,
bands: [{
color: "#808080",
linestyle: 2,
linewidth: 1,
visible: !0,
value: 100
}, {
color: "#808080",
linestyle: 2,
linewidth: 1,
visible: !0,
value: -100
}],
filledAreasStyle: {
fill_0: {
color: "#808000",
transparency: 90,
visible: !0
}
},
inputs: {
in_0: 20
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Commodity Channel Index",
shortDescription: "CCI",
is_price_study: !1,
bands: [{
id: "hline_0",
name: "UpperLimit"
}, {
id: "hline_1",
name: "LowerLimit"
}],
filledAreas: [{
id: "fill_0",
objAId: "hline_0",
objBId: "hline_1",
type: "hline_hline",
title: "Hlines Background"
}],
inputs: [{
id: "in_0",
name: "length",
defval: 20,
type: "integer",
min: 1,
max: 2e3
}],
id: "Commodity Channel Index@tv-basicstudies-1",
scriptIdPart: "",
name: "Commodity Channel Index"
},
constructor: function() {
this.f_0 = function(t, e, i) {
return (t - e) / (.015 * i)
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h;
return this._context = t, this._input = e, i = o.Std.hlc3(this._context),
n = this._input(0), r = this._context.new_var(i), s = o.Std.sma(r, n,
this._context), a = this._context.new_var(i), l = o.Std.dev(a, n,
this._context), c = this.f_0(i, s, l), h = c, [h]
}
}
}, {
name: "Connors RSI",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#800080"
}
},
precision: 4,
bands: [{
color: "#808080",
linestyle: 2,
linewidth: 1,
visible: !0,
value: 70
}, {
color: "#808080",
linestyle: 2,
linewidth: 1,
visible: !0,
value: 30
}],
filledAreasStyle: {
fill_0: {
color: "#800080",
transparency: 90,
visible: !0
}
},
inputs: {
in_0: 3,
in_1: 2,
in_2: 100
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "CRSI",
histogramBase: 0,
joinPoints: !1
}
},
description: "Connors RSI",
shortDescription: "CRSI",
is_price_study: !1,
bands: [{
id: "hline_0",
name: "UpperLimit"
}, {
id: "hline_1",
name: "LowerLimit"
}],
filledAreas: [{
id: "fill_0",
objAId: "hline_0",
objBId: "hline_1",
type: "hline_hline",
title: "Hlines Background"
}],
inputs: [{
id: "in_0",
name: "RSI Length",
defval: 3,
type: "integer",
min: 1
}, {
id: "in_1",
name: "UpDown Length",
defval: 2,
type: "integer",
min: 1
}, {
id: "in_2",
name: "ROC Length",
defval: 100,
type: "integer",
min: 1
}],
id: "Connors RSI@tv-basicstudies-1",
scriptIdPart: "",
name: "Connors RSI"
},
constructor: function() {
this.f_1 = function(t, e, i) {
var n = i.new_var(o.Std.max(o.Std.change(t), 0));
return o.Std.rma(n, e, i)
}, this.f_2 = function(t, e, i) {
var n = i.new_var(-o.Std.min(o.Std.change(t), 0));
return o.Std.rma(n, e, i)
}, this.f_3 = function() {
var t = 0;
return function(e) {
var i = e.get(0),
n = e.get(1);
return t = i === n ? 0 : i > n ? o.Std.nz(t) <= 0 ? 1 : o.Std.nz(
t) + 1 : o.Std.nz(t) >= 0 ? -1 : o.Std.nz(t) - 1, this
._context
.new_var(t)
}
}(), this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d, p;
return this._context = t, this._input = e, i = o.Std.close(this._context),
n = this._context.new_var(i), r = this._input(0), s = this._input(1),
a = this._input(2), l = o.Std.rsi(this.f_1(n, r, this._context), this
.f_2(n, r, this._context)), c = this.f_3(n), h = o.Std.rsi(this.f_1(
c, s, this._context), this.f_2(c, s, this._context)), u = this
._context.new_var(o.Std.roc(n, 1)), d = o.Std.percentrank(u, a), p = o
.Std.avg(l, h, d), [p]
}
}
}, {
name: "Coppock Curve",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#000080"
}
},
precision: 4,
inputs: {
in_0: 10,
in_1: 14,
in_2: 11
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Coppock Curve",
shortDescription: "Coppock Curve",
is_price_study: !1,
inputs: [{
id: "in_0",
name: "WMA Length",
defval: 10,
type: "integer",
min: -1e12,
max: 5e3
}, {
id: "in_1",
name: "Long RoC Length",
defval: 14,
type: "integer",
min: 1,
max: 4999
}, {
id: "in_2",
name: "Short RoC Length",
defval: 11,
type: "integer",
min: 1,
max: 4999
}],
id: "Coppock Curve@tv-basicstudies-1",
scriptIdPart: "",
name: "Coppock Curve"
},
constructor: function() {
this.f_0 = function(t, e) {
return t + e
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d, p, _;
return this._context = t, this._input = e, i = this._input(0), n = this
._input(1), r = this._input(2), s = o.Std.close(this._context), a = this
._context.new_var(s), l = o.Std.roc(a, n), c = this._context.new_var(s),
h = o.Std.roc(c, r), u = this.f_0(l, h), d = this._context.new_var(u),
p = o.Std.wma(d, i, this._context), _ = p, [_]
}
}
}, {
name: "Correlation Coeff",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 4,
trackPrice: !1,
transparency: 40,
visible: !0,
color: "#800080"
}
},
precision: 4,
inputs: {
in_0: "AAPL",
in_1: 20
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Correlation Coefficient",
shortDescription: "CC",
is_price_study: !1,
inputs: [{
id: "in_0",
name: "sym",
defval: "AAPL",
type: "symbol"
}, {
id: "in_1",
name: "length",
defval: 20,
type: "integer",
min: 1,
max: 2e3
}],
id: "Correlation Coeff@tv-basicstudies-1",
scriptIdPart: "",
name: "Correlation Coeff"
},
constructor: function() {
this.init = function(t, e) {
this._context = t, this._input = e, this._context.new_sym(this._input(0), o
.Std.period(this._context), o.Std.period(this._context))
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d;
return this._context = t, this._input = e, i = this._context.new_var(this
._context.symbol.time), this._input(0), o.Std.period(this._context),
n = o.Std.close(this._context), r = this._input(1), this._context
.select_sym(1), s = this._context.new_var(this._context.symbol.time),
a = o.Std.close(this._context), l = this._context.new_var(a), this
._context.select_sym(0), c = l.adopt(s, i, 0), h = this._context
.new_var(n), u = this._context.new_var(c), d = o.Std.correlation(h, u,
r, this._context), [d]
}
}
}, {
name: "Detrended Price Oscillator",
metainfo: {
_metainfoVersion: 42,
isTVScript: !1,
isTVScriptStub: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#808000"
}
},
precision: 4,
bands: [{
color: "#808080",
linestyle: 2,
linewidth: 1,
visible: !0,
value: 0
}],
inputs: {
in_0: 21,
in_1: !1
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "DPO",
histogramBase: 0,
joinPoints: !1,
isHidden: !1
}
},
description: "Detrended Price Oscillator",
shortDescription: "DPO",
is_price_study: !1,
is_hidden_study: !1,
id: "detrended_price_oscillator@tv-basicstudies-1",
bands: [{
id: "hline_0",
name: "Zero",
isHidden: !1
}],
inputs: [{
id: "in_0",
name: "Period",
defval: 21,
type: "integer",
min: 1,
max: 1e12
}, {
id: "in_1",
name: "isCentered",
defval: !1,
type: "bool"
}],
scriptIdPart: "",
name: "Detrended Price Oscillator"
},
constructor: function() {
this.f_0 = function() {
var t = this._input(0),
e = this._input(1),
i = Math.floor(t / 2 + 1),
n = this._context.new_var(o.Std.close(this._context)),
r = this._context.new_var(o.Std.sma(n, t, this._context)),
s = this._context.new_var(o.Std.close(this._context)),
a = s.get(i) - r,
l = o.Std.close(this._context) - r.get(i),
c = e ? a : l,
h = -i;
return [c, e ? h : 0]
},
this.main = function(t, e) {
this._context = t, this._input = e;
var i = this.f_0();
return [{
value: i[0],
offset: i[1]
}]
}
}
}, {
name: "Directional Movement Index",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0000FF"
},
plot_1: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#FF7F00"
},
plot_2: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#FF0000"
}
},
precision: 4,
inputs: {
in_0: 14,
in_1: 14
}
},
plots: [{
id: "plot_0",
type: "line"
}, {
id: "plot_1",
type: "line"
}, {
id: "plot_2",
type: "line"
}],
styles: {
plot_0: {
title: "+DI",
histogramBase: 0,
joinPoints: !1
},
plot_1: {
title: "-DI",
histogramBase: 0,
joinPoints: !1
},
plot_2: {
title: "ADX",
histogramBase: 0,
joinPoints: !1
}
},
description: "Directional Movement",
shortDescription: "DMI",
is_price_study: !1,
inputs: [{
id: "in_0",
name: "DI Length",
defval: 14,
type: "integer",
min: 1,
max: 2e3
}, {
id: "in_1",
name: "ADX Smoothing",
defval: 14,
type: "integer",
min: 1,
max: 50
}],
id: "Directional Movement Index@tv-basicstudies-1",
scriptIdPart: "",
name: "Directional Movement Index"
},
constructor: function() {
this.f_0 = function(t) {
return -t
}, this.f_1 = function(t, e) {
return o.Std.and(o.Std.gt(t, e), o.Std.gt(t, 0)) ? t : 0
}, this.f_2 = function(t, e) {
return 100 * t / e
}, this.f_3 = function(t, e) {
return t + e
}, this.f_4 = function(t, e, i) {
return o.Std.abs(t - e) / (o.Std.eq(i, 0) ? 1 : i)
}, this.f_5 = function(t) {
return 100 * t
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d, p, _, f, m, g, v, y, b, S, w, T, C, x, P,
L, I, k, A, M, E;
return this._context = t, this._input = e, i = this._input(0), n = this
._input(1), r = o.Std.high(this._context), s = this._context.new_var(r),
a = o.Std.change(s), l = o.Std.low(this._context), c = this._context
.new_var(l), h = o.Std.change(c), u = this.f_0(h), d = o.Std.tr(this
._context), p = this._context.new_var(d), _ = o.Std.rma(p, i, this
._context), f = this.f_1(a, u), m = this._context.new_var(f), g = o
.Std.rma(m, i, this._context), v = this.f_2(g, _), y = o.Std.fixnan(v,
this._context), b = this.f_1(u, a), S = this._context.new_var(b),
w = o.Std.rma(S, i, this._context), T = this.f_2(w, _), C = o.Std
.fixnan(T, this._context), x = this.f_3(y, C), P = this.f_4(y, C, x),
L = this._context.new_var(P), I = o.Std.rma(L, n, this._context), k =
this.f_5(I), A = y, M = C, E = k, [A, M, E]
}
}
}, {
name: "Donchian Channels",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0000FF"
},
plot_1: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0000FF"
},
plot_2: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#FF7F00"
}
},
precision: 4,
filledAreasStyle: {
fill_0: {
color: "#0000FF",
transparency: 90,
visible: !0
}
},
inputs: {
in_0: 20
}
},
plots: [{
id: "plot_0",
type: "line"
}, {
id: "plot_1",
type: "line"
}, {
id: "plot_2",
type: "line"
}],
styles: {
plot_0: {
title: "Lower",
histogramBase: 0,
joinPoints: !1
},
plot_1: {
title: "Upper",
histogramBase: 0,
joinPoints: !1
},
plot_2: {
title: "Basis",
histogramBase: 0,
joinPoints: !1
}
},
description: "Donchian Channels",
shortDescription: "DC",
is_price_study: !0,
filledAreas: [{
id: "fill_0",
objAId: "plot_1",
objBId: "plot_0",
type: "plot_plot",
title: "Plots Background"
}],
inputs: [{
id: "in_0",
name: "length",
defval: 20,
type: "integer",
min: 1,
max: 2e3
}],
id: "Donchian Channels@tv-basicstudies-1",
scriptIdPart: "",
name: "Donchian Channels"
},
constructor: function() {
this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d, p;
return this._context = t, this._input = e, i = this._input(0), n = o.Std
.low(this._context), r = this._context.new_var(n), s = o.Std.lowest(r,
i, this._context), a = o.Std.high(this._context), l = this._context
.new_var(a), c = o.Std.highest(l, i, this._context), h = o.Std.avg(c,
s), u = s, d = c, p = h, [u, d, p]
}
}
}, {
name: "Double Exponential Moving Average",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#008000"
}
},
precision: 4,
inputs: {
in_0: 9
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Double EMA",
shortDescription: "DEMA",
is_price_study: !0,
inputs: [{
id: "in_0",
name: "length",
defval: 9,
type: "integer",
min: 1,
max: 1e4
}],
id: "Double Exponential Moving Average@tv-basicstudies-1",
scriptIdPart: "",
name: "Double Exponential Moving Average"
},
constructor: function() {
this.f_0 = function(t, e) {
return 2 * t - e
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h;
return this._context = t, this._input = e, i = this._input(0), n = o.Std
.close(this._context), r = this._context.new_var(n), s = o.Std.ema(r, i,
this._context), a = this._context.new_var(s), l = o.Std.ema(a, i,
this._context), c = this.f_0(s, l), h = c, [h]
}
}
}, {
name: "Ease of Movement",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#808000"
}
},
precision: 4,
inputs: {
in_0: 1e4,
in_1: 14
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Ease Of Movement",
shortDescription: "EOM",
is_price_study: !1,
inputs: [{
id: "in_0",
name: "Divisor",
defval: 1e4,
type: "integer",
min: 1,
max: 1e9
}, {
id: "in_1",
name: "length",
defval: 14,
type: "integer",
min: 1,
max: 2e3
}],
id: "Ease of Movement@tv-basicstudies-1",
scriptIdPart: "",
name: "Ease of Movement"
},
constructor: function() {
this.f_0 = function(t, e, i, o, n) {
return t * e * (i - o) / n
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u;
return this._context = t, this._input = e, i = this._input(0), n = this
._input(1), r = o.Std.hl2(this._context), s = this._context.new_var(r),
a = o.Std.change(s), l = this.f_0(i, a, o.Std.high(this._context), o.Std
.low(this._context), o.Std.volume(this._context)), c = this._context
.new_var(l), h = o.Std.sma(c, n, this._context), u = h, [u]
}
}
}, {
name: "Elders Force Index",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#800000"
}
},
precision: 4,
bands: [{
color: "#808080",
linestyle: 2,
linewidth: 1,
visible: !0,
value: 0
}],
inputs: {
in_0: 13
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Elder's Force Index",
shortDescription: "EFI",
is_price_study: !1,
bands: [{
id: "hline_0",
name: "Zero"
}],
inputs: [{
id: "in_0",
name: "length",
defval: 13,
type: "integer",
min: 1,
max: 2e3
}],
id: "Elders Force Index@tv-basicstudies-1",
scriptIdPart: "",
name: "Elders Force Index"
},
constructor: function() {
this.f_0 = function(t, e) {
return t * e
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h;
return this._context = t, this._input = e, i = this._input(0), n = o.Std
.close(this._context), r = this._context.new_var(n), s = o.Std.change(
r), a = this.f_0(s, o.Std.volume(this._context)), l = this._context
.new_var(a), c = o.Std.ema(l, i, this._context), h = c, [h]
}
}
}, {
name: "EMA Cross",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#FF0000"
},
plot_1: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#008000"
},
plot_2: {
linestyle: 0,
linewidth: 4,
plottype: 3,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#000080"
}
},
precision: 4,
inputs: {
in_0: 9,
in_1: 26
}
},
plots: [{
id: "plot_0",
type: "line"
}, {
id: "plot_1",
type: "line"
}, {
id: "plot_2",
type: "line"
}],
styles: {
plot_0: {
title: "Short",
histogramBase: 0,
joinPoints: !1
},
plot_1: {
title: "Long",
histogramBase: 0,
joinPoints: !1
},
plot_2: {
title: "Crosses",
histogramBase: 0,
joinPoints: !1
}
},
description: "EMA Cross",
shortDescription: "EMA Cross",
is_price_study: !0,
inputs: [{
id: "in_0",
name: "Short",
defval: 9,
type: "integer",
min: 1,
max: 2e3
}, {
id: "in_1",
name: "Long",
defval: 26,
type: "integer",
min: 1,
max: 2e3
}],
id: "EMA Cross@tv-basicstudies-1",
scriptIdPart: "",
name: "EMA Cross"
},
constructor: function() {
this.f_0 = function(t, e) {
return t ? e : o.Std.na()
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d, p;
return this._context = t, this._input = e, i = this._input(0), n = this
._input(1), r = o.Std.close(this._context), s = this._context.new_var(
r), a = o.Std.ema(s, i, this._context), l = this._context.new_var(
r),
c = o.Std.ema(l, n, this._context), h = a, u = c, d = o.Std.cross(a, c,
this._context), p = this.f_0(d, a), [h, u, p]
}
}
}, {
name: "Envelope",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#FF7F00"
},
plot_1: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0000FF"
},
plot_2: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0000FF"
}
},
precision: 4,
filledAreasStyle: {
fill_0: {
color: "#0000FF",
transparency: 90,
visible: !0
}
},
inputs: {
in_0: 20,
in_1: 10,
in_2: !1
}
},
plots: [{
id: "plot_0",
type: "line"
}, {
id: "plot_1",
type: "line"
}, {
id: "plot_2",
type: "line"
}],
styles: {
plot_0: {
title: "Median",
histogramBase: 0,
joinPoints: !1
},
plot_1: {
title: "Upper",
histogramBase: 0,
joinPoints: !1
},
plot_2: {
title: "Lower",
histogramBase: 0,
joinPoints: !1
}
},
description: "Envelope",
shortDescription: "Env",
is_price_study: !0,
filledAreas: [{
id: "fill_0",
objAId: "plot_1",
objBId: "plot_2",
type: "plot_plot",
title: "Plots Background"
}],
inputs: [{
id: "in_0",
name: "Length",
defval: 20,
type: "integer",
min: 1,
max: 2e3
}, {
id: "in_1",
name: "percent",
defval: 10,
type: "float",
min: -1e12,
max: 1e12
}, {
id: "in_2",
name: "exponential",
defval: !1,
type: "bool"
}],
id: "Envelope@tv-basicstudies-1",
scriptIdPart: "",
name: "Envelope"
},
constructor: function() {
this.f_0 = function(t, e, i) {
return t ? e : i
}, this.f_1 = function(t, e) {
return t * (1 + e)
}, this.f_2 = function(t, e) {
return t * (1 - e)
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d, p, _, f, m, g;
return this._context = t, this._input = e, i = o.Std.close(this._context),
n = this._input(0), r = this._input(1), s = this._input(2), a = this
._context.new_var(i), l = o.Std.ema(a, n, this._context), c = this
._context.new_var(i), h = o.Std.sma(c, n, this._context), u = this.f_0(
s, l, h), d = r / 100, p = this.f_1(u, d), _ = this.f_2(u, d), f =
u, m = p, g = _, [f, m, g]
}
}
}, {
name: "Fisher Transform",
metainfo: {
_metainfoVersion: 41,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0000FF"
},
plot_1: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#FF7F00"
}
},
precision: 4,
bands: [{
color: "#FF7F00",
linestyle: 2,
linewidth: 1,
visible: !0,
value: 1.5
}, {
color: "#808080",
linestyle: 2,
linewidth: 1,
visible: !0,
value: .75
}, {
color: "#FF7F00",
linestyle: 2,
linewidth: 1,
visible: !0,
value: 0
}, {
color: "#808080",
linestyle: 2,
linewidth: 1,
visible: !0,
value: -.75
}, {
color: "#FF7F00",
linestyle: 2,
linewidth: 1,
visible: !0,
value: -1.5
}],
inputs: {
in_0: 9
}
},
plots: [{
id: "plot_0",
type: "line"
}, {
id: "plot_1",
type: "line"
}],
styles: {
plot_0: {
title: "Fisher",
histogramBase: 0,
joinPoints: !1,
isHidden: !1
},
plot_1: {
title: "Trigger",
histogramBase: 0,
joinPoints: !1,
isHidden: !1
}
},
description: "Fisher Transform",
shortDescription: "Fisher",
is_price_study: !1,
bands: [{
id: "hline_0",
name: "Level",
isHidden: !1
}, {
id: "hline_1",
name: "Level",
isHidden: !1
}, {
id: "hline_2",
name: "Level",
isHidden: !1
}, {
id: "hline_3",
name: "Level",
isHidden: !1
}, {
id: "hline_4",
name: "Level",
isHidden: !1
}],
inputs: [{
id: "in_0",
name: "Length",
defval: 9,
type: "integer",
min: 1,
max: 1e12
}],
id: "fisher_transform@tv-basicstudies-1",
scriptIdPart: "",
name: "Fisher Transform"
},
constructor: function() {
this.f_0 = function(t) {
var e = o.Std.lt(t, -.99) ? -.999 : t;
return [o.Std.gt(t, .99) ? .999 : e]
}, this.f_1 = function() {
var t, e, i, n = this._input(0),
r = this._context.new_var(o.Std.hl2(this._context)),
s = o.Std.highest(r, n, this._context),
a = this._context.new_var(o.Std.hl2(this._context)),
l = o.Std.lowest(a, n, this._context),
c = this._context.new_var(),
h = this.f_0(.66 * ((o.Std.hl2(this._context) - l) / o.Std.max(s - l,
.001) - .5) + .67 * o.Std.nz(c.get(1)));
return c.set(h[0]), t = this._context.new_var(), t.set(.5 * o.Std.log((1 + c
.get(0)) / o.Std.max(1 - c.get(0), .001)) + .5 * o.Std.nz(t.get(
1))), e = t.get(1), i = t.get(0), [i, e]
}, this.main = function(t, e) {
return this._context = t, this._input = e, this.f_1()
}
}
}, {
name: "Historical Volatility",
metainfo: {
_metainfoVersion: 41,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0000FF"
}
},
precision: 4,
inputs: {
in_0: 10
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1,
isHidden: !1
}
},
description: "Historical Volatility",
shortDescription: "HV",
is_price_study: !1,
inputs: [{
id: "in_0",
name: "length",
defval: 10,
type: "integer",
min: 1,
max: 1e12
}],
id: "historical_volatility@tv-basicstudies-1",
scriptIdPart: "",
name: "Historical Volatility"
},
constructor: function() {
this.f_0 = function() {
var t = this._input(0),
e = o.Std.or(o.Std.isintraday(this._context), o.Std.and(o.Std.isdaily(
this._context), o.Std.eq(o.Std.interval(this._context), 1))) ? 1 :
7,
i = this._context.new_var(o.Std.close(this._context)),
n = this._context.new_var(o.Std.log(o.Std.close(this._context) / i.get(
1)));
return [100 * o.Std.stdev(n, t, this._context) * o.Std.sqrt(365 / e)]
}, this.main = function(t, e) {
return this._context = t, this._input = e, this.f_0()
}
}
}, {
name: "Hull MA",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#000080"
}
},
precision: 4,
inputs: {
in_0: 9
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Hull Moving Average",
shortDescription: "HMA",
is_price_study: !0,
inputs: [{
id: "in_0",
name: "length",
defval: 9,
type: "integer",
min: 1,
max: 1e4
}],
id: "Hull MA@tv-basicstudies-1",
scriptIdPart: "",
name: "Hull MA"
},
constructor: function() {
this.f_0 = function(t, e) {
return 2 * t - e
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d, p, _, f;
return this._context = t, this._input = e, i = o.Std.close(this._context),
n = this._input(0), r = n / 2, s = this._context.new_var(i), a = o.Std
.wma(s, r, this._context), l = this._context.new_var(i), c = o.Std.wma(
l, n, this._context), h = this.f_0(a, c), u = o.Std.sqrt(n), d = o
.Std.round(u), p = this._context.new_var(h), _ = o.Std.wma(p, d, this
._context), f = _, [f]
}
}
}, {
name: "Ichimoku Cloud",
metainfo: {
_metainfoVersion: 42,
isTVScript: !1,
isTVScriptStub: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0496ff"
},
plot_1: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#991515"
},
plot_2: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#459915"
},
plot_3: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#008000"
},
plot_4: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#FF0000"
}
},
precision: 4,
palettes: {
palette_0: {
colors: {
0: {
color: "#008000",
width: 1,
style: 0
},
1: {
color: "#FF0000",
width: 1,
style: 0
}
}
}
},
filledAreasStyle: {
fill_0: {
color: "#000080",
transparency: 90,
visible: !0
}
},
inputs: {
in_0: 9,
in_1: 26,
in_2: 52,
in_3: 26
}
},
plots: [{
id: "plot_0",
type: "line"
}, {
id: "plot_1",
type: "line"
}, {
id: "plot_2",
type: "line"
}, {
id: "plot_3",
type: "line"
}, {
id: "plot_4",
type: "line"
}, {
id: "plot_5",
palette: "palette_0",
target: "fill_0",
type: "colorer"
}],
styles: {
plot_0: {
title: "Conversion Line",
histogramBase: 0,
joinPoints: !1,
isHidden: !1
},
plot_1: {
title: "Base Line",
histogramBase: 0,
joinPoints: !1,
isHidden: !1
},
plot_2: {
title: "Lagging Span",
histogramBase: 0,
joinPoints: !1,
isHidden: !1
},
plot_3: {
title: "Lead 1",
histogramBase: 0,
joinPoints: !1,
isHidden: !1
},
plot_4: {
title: "Lead 2",
histogramBase: 0,
joinPoints: !1,
isHidden: !1
}
},
description: "Ichimoku Cloud",
shortDescription: "Ichimoku",
is_price_study: !0,
is_hidden_study: !1,
id: "Ichimoku Cloud@tv-basicstudies-1",
palettes: {
palette_0: {
colors: {
0: {
name: "Color 0"
},
1: {
name: "Color 1"
}
},
valToIndex: {
0: 0,
1: 1
}
}
},
filledAreas: [{
id: "fill_0",
objAId: "plot_3",
objBId: "plot_4",
type: "plot_plot",
title: "Plots Background",
isHidden: !1,
palette: "palette_0"
}],
inputs: [{
id: "in_0",
name: "Conversion Line Periods",
defval: 9,
type: "integer",
min: 1,
max: 1e12
}, {
id: "in_1",
name: "Base Line Periods",
defval: 26,
type: "integer",
min: 1,
max: 1e12
}, {
id: "in_2",
name: "Lagging Span 2 Periods",
defval: 52,
type: "integer",
min: 1,
max: 1e12
}, {
id: "in_3",
name: "Displacement",
defval: 26,
type: "integer",
min: 1,
max: 1e12
}],
scriptIdPart: "",
name: "Ichimoku Cloud"
},
constructor: function() {
this.donchian = function(t) {
var e = this._context.new_var(o.Std.low(this._context)),
i = this._context.new_var(o.Std.high(this._context));
return o.Std.avg(o.Std.lowest(e, t, this._context), o.Std.highest(i, t, this
._context))
}, this.f_1 = function() {
var t = this._input(0),
e = this._input(1),
i = this._input(2),
n = this._input(3),
r = this.donchian(t),
s = this.donchian(e),
a = o.Std.avg(r, s),
l = this.donchian(i);
return [r, s, o.Std.close(this._context), a, l, -n, n, n, o.Std.gt(a, l) ?
0 : 1
]
}, this.main = function(t, e) {
this._context = t, this._input = e;
var i = this.f_1();
return [i[0], i[1], {
value: i[2],
offset: i[5]
}, {
value: i[3],
offset: i[6]
}, {
value: i[4],
offset: i[7]
}, i[8]]
}
}
}, {
name: "Keltner Channels",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0000FF"
},
plot_1: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0000FF"
},
plot_2: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0000FF"
}
},
precision: 4,
filledAreasStyle: {
fill_0: {
color: "#0000FF",
transparency: 90,
visible: !0
}
},
inputs: {
in_0: !0,
in_1: 20,
in_2: 1
}
},
plots: [{
id: "plot_0",
type: "line"
}, {
id: "plot_1",
type: "line"
}, {
id: "plot_2",
type: "line"
}],
styles: {
plot_0: {
title: "Upper",
histogramBase: 0,
joinPoints: !1
},
plot_1: {
title: "Middle",
histogramBase: 0,
joinPoints: !1
},
plot_2: {
title: "Lower",
histogramBase: 0,
joinPoints: !1
}
},
description: "Keltner Channels",
shortDescription: "KC",
is_price_study: !0,
filledAreas: [{
id: "fill_0",
objAId: "plot_0",
objBId: "plot_2",
type: "plot_plot",
title: "Plots Background"
}],
inputs: [{
id: "in_0",
name: "useTrueRange",
defval: !0,
type: "bool"
}, {
id: "in_1",
name: "length",
defval: 20,
type: "integer",
min: 1,
max: 2e3
}, {
id: "in_2",
name: "mult",
defval: 1,
type: "float",
min: -1e12,
max: 1e12
}],
id: "Keltner Channels@tv-basicstudies-1",
scriptIdPart: "",
name: "Keltner Channels"
},
constructor: function() {
this.f_0 = function(t, e, i, o) {
return t ? e : i - o
}, this.f_1 = function(t, e, i) {
return t + e * i
}, this.f_2 = function(t, e, i) {
return t - e * i
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d, p, _, f, m;
return this._context = t, this._input = e, i = o.Std.close(this._context),
n = this._input(0), r = this._input(1), s = this._input(2), a = this
._context.new_var(i), l = o.Std.ema(a, r, this._context),
c = this.f_0(n, o.Std.tr(this._context), o.Std.high(this._context), o
.Std.low(this._context)), h = this._context.new_var(c), u = o.Std
.ema(h, r, this._context), d = this.f_1(l, u, s), p = this.f_2(l, u, s),
_ = d, f = l, m = p, [_, f, m]
}
}
}, {
name: "Klinger Oscillator",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#000080"
},
plot_1: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#008000"
}
},
precision: 4,
inputs: {}
},
plots: [{
id: "plot_0",
type: "line"
}, {
id: "plot_1",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
},
plot_1: {
title: "Signal",
histogramBase: 0,
joinPoints: !1
}
},
description: "Klinger Oscillator",
shortDescription: "Klinger Oscillator",
is_price_study: !1,
inputs: [],
id: "Klinger Oscillator@tv-basicstudies-1",
scriptIdPart: "",
name: "Klinger Oscillator"
},
constructor: function() {
this.f_0 = function(t, e) {
return o.Std.ge(t, 0) ? e : -e
}, this.f_1 = function(t, e) {
return t - e
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d, p, _, f;
return this._context = t, this._input = e, i = o.Std.hlc3(this._context),
n = this._context.new_var(i), r = o.Std.change(n), s = this.f_0(r, o.Std
.volume(this._context)), a = this._context.new_var(s), l = o.Std
.ema(a, 34, this._context), c = this._context.new_var(s), h = o.Std.ema(
c, 55, this._context), u = this.f_1(l, h), d = this._context
.new_var(u), p = o.Std.ema(d, 13, this._context), _ = u, f = p, [_, f]
}
}
}, {
name: "Know Sure Thing",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#008000"
},
plot_1: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#FF0000"
}
},
precision: 4,
bands: [{
color: "#808080",
linestyle: 2,
linewidth: 1,
visible: !0,
value: 0
}],
inputs: {
in_0: 10,
in_1: 15,
in_2: 20,
in_3: 30,
in_4: 10,
in_5: 10,
in_6: 10,
in_7: 15,
in_8: 9
}
},
plots: [{
id: "plot_0",
type: "line"
}, {
id: "plot_1",
type: "line"
}],
styles: {
plot_0: {
title: "KST",
histogramBase: 0,
joinPoints: !1
},
plot_1: {
title: "Signal",
histogramBase: 0,
joinPoints: !1
}
},
description: "Know Sure Thing",
shortDescription: "KST",
is_price_study: !1,
bands: [{
id: "hline_0",
name: "Zero"
}],
inputs: [{
id: "in_0",
name: "roclen1",
defval: 10,
type: "integer",
min: 1,
max: 2e3
}, {
id: "in_1",
name: "roclen2",
defval: 15,
type: "integer",
min: 1,
max: 2e3
}, {
id: "in_2",
name: "roclen3",
defval: 20,
type: "integer",
min: 1,
max: 2e3
}, {
id: "in_3",
name: "roclen4",
defval: 30,
type: "integer",
min: 1,
max: 2e3
}, {
id: "in_4",
name: "smalen1",
defval: 10,
type: "integer",
min: 1,
max: 2e3
}, {
id: "in_5",
name: "smalen2",
defval: 10,
type: "integer",
min: 1,
max: 2e3
}, {
id: "in_6",
name: "smalen3",
defval: 10,
type: "integer",
min: 1,
max: 2e3
}, {
id: "in_7",
name: "smalen4",
defval: 15,
type: "integer",
min: 1,
max: 2e3
}, {
id: "in_8",
name: "siglen",
defval: 9,
type: "integer",
min: 1,
max: 2e3
}],
id: "Know Sure Thing@tv-basicstudies-1",
scriptIdPart: "",
name: "Know Sure Thing"
},
constructor: function() {
this.f_0 = function(t, e, i, o) {
return t + 2 * e + 3 * i + 4 * o
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d, p, _, f, m, g, v, y, b, S, w, T, C, x, P,
L, I, k, A, M, E, D, V, O, R, B, z, F, N, W;
return this._context = t, this._input = e, i = this._input(0), n = this
._input(1), r = this._input(2), s = this._input(3), a = this._input(4),
l = this._input(5), c = this._input(6), h = this._input(7), u = this
._input(8), d = o.Std.close(this._context), p = i, _ = this._context
.new_var(d), f = o.Std.roc(_, p), m = a, g = this._context.new_var(f),
v = o.Std.sma(g, m, this._context), y = n, b = this._context.new_var(d),
S = o.Std.roc(b, y), w = l, T = this._context.new_var(S), C = o.Std.sma(
T, w, this._context), x = r, P = this._context.new_var(d), L = o.Std
.roc(P, x), I = c, k = this._context.new_var(L), A = o.Std.sma(k, I,
this._context), M = s, E = this._context.new_var(d), D = o.Std.roc(
E, M), V = h, O = this._context.new_var(D), R = o.Std.sma(O, V, this
._context), B = this.f_0(v, C, A, R), z = this._context.new_var(B),
F = o.Std.sma(z, u, this._context), N = B, W = F, [N, W]
}
}
}, {
name: "Least Squares Moving Average",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#000080"
}
},
precision: 4,
inputs: {
in_0: 25,
in_1: 0
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Least Squares Moving Average",
shortDescription: "LSMA",
is_price_study: !0,
inputs: [{
id: "in_0",
name: "Length",
defval: 25,
type: "integer",
min: 1,
max: 1e12
}, {
id: "in_1",
name: "Offset",
defval: 0,
type: "integer",
min: -1e12,
max: 1e12
}],
id: "Least Squares Moving Average@tv-basicstudies-1",
scriptIdPart: "",
name: "Least Squares Moving Average"
},
constructor: function() {
this.main = function(t, e) {
var i, n, r, s, a, l;
return this._context = t, this._input = e, i = this._input(0), n = this
._input(1), r = o.Std.close(this._context), s = this._context.new_var(
r), a = o.Std.linreg(s, i, n), l = a, [l]
}
}
}, {
name: "Linear Regression Curve",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#000080"
}
},
precision: 4,
inputs: {
in_0: 9
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Linear Regression Curve",
shortDescription: "LRC",
is_price_study: !0,
inputs: [{
id: "in_0",
name: "Length",
defval: 9,
type: "integer",
min: 1,
max: 2e3
}],
id: "Linear Regression Curve@tv-basicstudies-1",
scriptIdPart: "",
name: "Linear Regression Curve"
},
constructor: function() {
this.main = function(t, e) {
var i, n, r, s, a;
return this._context = t, this._input = e, i = o.Std.close(this._context),
n = this._input(0), r = this._context.new_var(i), s = o.Std.linreg(r, n,
0), a = s, [a]
}
}
}, {
name: "MA Cross",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#FF0000"
},
plot_1: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#008000"
},
plot_2: {
linestyle: 0,
linewidth: 4,
plottype: 3,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#000080"
}
},
precision: 4,
inputs: {
in_0: 9,
in_1: 26
}
},
plots: [{
id: "plot_0",
type: "line"
}, {
id: "plot_1",
type: "line"
}, {
id: "plot_2",
type: "line"
}],
styles: {
plot_0: {
title: "Short",
histogramBase: 0,
joinPoints: !1
},
plot_1: {
title: "Long",
histogramBase: 0,
joinPoints: !1
},
plot_2: {
title: "Crosses",
histogramBase: 0,
joinPoints: !1
}
},
description: "MA Cross",
shortDescription: "MA Cross",
is_price_study: !0,
inputs: [{
id: "in_0",
name: "Short",
defval: 9,
type: "integer",
min: 1,
max: 2e3
}, {
id: "in_1",
name: "Long",
defval: 26,
type: "integer",
min: 1,
max: 2e3
}],
id: "MA Cross@tv-basicstudies-1",
scriptIdPart: "",
name: "MA Cross"
},
constructor: function() {
this.f_0 = function(t, e) {
return t ? e : o.Std.na()
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d, p;
return this._context = t, this._input = e, i = this._input(0), n = this
._input(1), r = o.Std.close(this._context), s = this._context.new_var(
r), a = o.Std.sma(s, i, this._context), l = this._context.new_var(
r),
c = o.Std.sma(l, n, this._context), h = a, u = c, d = o.Std.cross(a, c,
this._context), p = this.f_0(d, a), [h, u, p]
}
}
}, {
name: "MA with EMA Cross",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#FF0000"
},
plot_1: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#008000"
},
plot_2: {
linestyle: 0,
linewidth: 4,
plottype: 3,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#000080"
}
},
precision: 4,
inputs: {
in_0: 10,
in_1: 10
}
},
plots: [{
id: "plot_0",
type: "line"
}, {
id: "plot_1",
type: "line"
}, {
id: "plot_2",
type: "line"
}],
styles: {
plot_0: {
title: "MA",
histogramBase: 0,
joinPoints: !1
},
plot_1: {
title: "EMA",
histogramBase: 0,
joinPoints: !1
},
plot_2: {
title: "Crosses",
histogramBase: 0,
joinPoints: !1
}
},
description: "MA with EMA Cross",
shortDescription: "MA/EMA Cross",
is_price_study: !0,
inputs: [{
id: "in_0",
name: "Length MA",
defval: 10,
type: "integer",
min: 1,
max: 2e3
}, {
id: "in_1",
name: "Length EMA",
defval: 10,
type: "integer",
min: 1,
max: 2e3
}],
id: "MA with EMA Cross@tv-basicstudies-1",
scriptIdPart: "",
name: "MA with EMA Cross"
},
constructor: function() {
this.f_0 = function(t, e) {
return t ? e : o.Std.na()
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d, p;
return this._context = t, this._input = e, i = this._input(0), n = this
._input(1), r = o.Std.close(this._context), s = this._context.new_var(
r), a = o.Std.sma(s, i, this._context), l = this._context.new_var(
r),
c = o.Std.ema(l, n, this._context), h = a, u = c, d = o.Std.cross(a, c,
this._context), p = this.f_0(d, a), [h, u, p]
}
}
}, {
name: "Mass Index",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#000080"
}
},
precision: 4,
inputs: {
in_0: 10
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Mass Index",
shortDescription: "Mass Index",
is_price_study: !1,
inputs: [{
id: "in_0",
name: "length",
defval: 10,
type: "integer",
min: 1,
max: 2e3
}],
id: "Mass Index@tv-basicstudies-1",
scriptIdPart: "",
name: "Mass Index"
},
constructor: function() {
this.f_0 = function(t, e) {
return t - e
}, this.f_1 = function(t, e) {
return t / e
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d;
return this._context = t, this._input = e, i = this._input(0), n = this.f_0(
o.Std.high(this._context), o.Std.low(this._context)),
r = this._context.new_var(n), s = o.Std.ema(r, 9, this._context), a =
this._context.new_var(s), l = o.Std.ema(a, 9, this._context), c = this
.f_1(s, l), h = this._context.new_var(c), u = o.Std.sum(h, i, this
._context), d = u, [d]
}
}
}, {
name: "McGinley Dynamic",
metainfo: {
_metainfoVersion: 42,
isTVScript: !1,
isTVScriptStub: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#000080"
}
},
precision: 4,
inputs: {
in_0: 14
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1,
isHidden: !1
}
},
description: "McGinley Dynamic",
shortDescription: "McGinley Dynamic",
is_price_study: !0,
is_hidden_study: !1,
id: "mcginley_dynamic@tv-basicstudies-1",
inputs: [{
id: "in_0",
name: "length",
defval: 14,
type: "integer",
min: 1,
max: 1e12
}],
scriptIdPart: "",
name: "McGinley Dynamic"
},
constructor: function() {
this.f_0 = function() {
var t, e = this._input(0),
i = o.Std.close(this._context),
n = this._context.new_var(i),
r = o.Std.ema(n, e, this._context),
s = this._context.new_var(),
a = s.get(1) + (i - s.get(1)) / (e * o.Std.pow(i / s.get(1), 4));
return s.set(o.Std.na(s.get(1)) ? r : a), t = s.get(0), [t]
}, this.main = function(t, e) {
return this._context = t, this._input = e, this.f_0()
}
}
}, {
name: "Momentum",
metainfo: {
_metainfoVersion: 30,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#808000"
}
},
precision: 4,
inputs: {
in_0: 10,
in_1: "close"
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Mom",
histogramBase: 0,
joinPoints: !1,
isHidden: !1
}
},
description: "Momentum",
shortDescription: "Mom",
is_price_study: !1,
inputs: [{
id: "in_0",
name: "Length",
defval: 10,
type: "integer",
min: 1,
max: 2e3
}, {
id: "in_1",
name: "Source",
defval: "close",
type: "source",
options: ["open", "high", "low", "close", "hl2", "hlc3", "ohlc4"]
}],
id: "Momentum@tv-basicstudies-1",
scriptIdPart: "",
name: "Momentum"
},
constructor: function() {
this.main = function(t, e) {
var i, n, r, s, a;
return this._context = t, this._input = e, i = this._input(0), n = o.Std[
this._input(1)](this._context), r = this._context.new_var(n), s = r
.get(i), a = s ? n - s : null, [a]
}
}
}, {
name: "Money Flow",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#459915"
}
},
precision: 4,
bands: [{
color: "#c0c0c0",
linestyle: 2,
linewidth: 1,
visible: !0,
value: 80
}, {
color: "#c0c0c0",
linestyle: 2,
linewidth: 1,
visible: !0,
value: 20
}],
filledAreasStyle: {
fill_0: {
color: "#9915ff",
transparency: 90,
visible: !0
}
},
inputs: {
in_0: 14
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Money Flow",
shortDescription: "MFI",
is_price_study: !1,
bands: [{
id: "hline_0",
name: "UpperLimit"
}, {
id: "hline_1",
name: "LowerLimit"
}],
filledAreas: [{
id: "fill_0",
objAId: "hline_0",
objBId: "hline_1",
type: "hline_hline",
title: "Hlines Background"
}],
inputs: [{
id: "in_0",
name: "Length",
defval: 14,
type: "integer",
min: 1,
max: 2e3
}],
id: "Money Flow@tv-basicstudies-1",
scriptIdPart: "",
name: "Money Flow"
},
constructor: function() {
this.f_0 = function(t, e, i) {
return t * (o.Std.le(e, 0) ? 0 : i)
}, this.f_1 = function(t, e, i) {
return t * (o.Std.ge(e, 0) ? 0 : i)
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d, p, _;
return this._context = t, this._input = e, i = this._input(0), n = o.Std
.hlc3(this._context), r = this._context.new_var(n), s = o.Std.change(r),
a = this.f_0(o.Std.volume(this._context), s, n), l = this._context
.new_var(a), c = o.Std.sum(l, i, this._context), h = this.f_1(o.Std
.volume(this._context), s, n), u = this._context.new_var(h), d = o
.Std.sum(u, i, this._context), p = o.Std.rsi(c, d), _ = p, [_]
}
}
}, {
name: "Moving Average",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0000FF"
}
},
precision: 4,
inputs: {
in_0: 9,
in_1: "close",
in_2: 0
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Moving Average",
shortDescription: "MA",
is_price_study: !0,
inputs: [{
id: "in_0",
name: "Length",
defval: 9,
type: "integer",
min: 1,
max: 1e4
}, {
id: "in_1",
name: "Source",
defval: "close",
type: "source",
options: ["open", "high", "low", "close", "hl2", "hlc3", "ohlc4"]
}, {
id: "in_2",
name: "Offset",
defval: 0,
type: "integer",
min: -1e4,
max: 1e4
}],
id: "Moving Average@tv-basicstudies-1",
scriptIdPart: "",
name: "Moving Average"
},
constructor: function() {
this.main = function(t, e) {
var i, n, r, s, a, l;
return this._context = t, this._input = e, i = o.Std[this._input(1)](this
._context), n = this._input(0), r = this._input(2), s = this
._context.new_var(i), a = o.Std.sma(s, n, this._context), l = a, [{
value: l,
offset: r
}]
}
}
}, {
name: "Moving Average Channel",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0000FF"
},
plot_1: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#CC0000"
}
},
precision: 4,
filledAreasStyle: {
fill_0: {
color: "#A2C4C9",
transparency: 90,
visible: !0
}
},
inputs: {
in_0: 20,
in_1: 20,
in_2: 0,
in_3: 0
}
},
plots: [{
id: "plot_0",
type: "line"
}, {
id: "plot_1",
type: "line"
}],
styles: {
plot_0: {
title: "Upper",
histogramBase: 0,
joinPoints: !1
},
plot_1: {
title: "Lower",
histogramBase: 0,
joinPoints: !1
}
},
filledAreas: [{
id: "fill_0",
objAId: "plot_0",
objBId: "plot_1",
type: "plot_plot",
title: "Plots Background"
}],
description: "Moving Average Channel",
shortDescription: "MAC",
is_price_study: !0,
inputs: [{
id: "in_0",
name: "Upper Length",
defval: 20,
type: "integer",
min: 1,
max: 1e4
}, {
id: "in_1",
name: "Lower Length",
defval: 20,
type: "integer",
min: 1,
max: 1e4
}, {
id: "in_2",
name: "Upper Offset",
defval: 0,
type: "integer",
min: -1e4,
max: 1e4
}, {
id: "in_3",
name: "Lower Offset",
defval: 0,
type: "integer",
min: -1e4,
max: 1e4
}],
id: "Moving Average Channel@tv-basicstudies-1",
scriptIdPart: "",
name: "Moving Average Channel"
},
constructor: function() {
this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d;
return this._context = t, this._input = e, i = o.Std.high(this._context),
n = o.Std.low(this._context), r = this._input(0), s = this._input(1),
a = this._input(2), l = this._input(3), c = this._context.new_var(i),
h = this._context.new_var(n), u = o.Std.sma(c, r, this._context), d = o
.Std.sma(h, s, this._context),
[{
value: u,
offset: a
}, {
value: d,
offset: l
}]
}
}
}, {
name: "Moving Average Convergence/Divergence",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 1,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#FF0000"
},
plot_1: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0000FF"
},
plot_2: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#FF0000"
}
},
precision: 4,
inputs: {
in_0: 12,
in_1: 26,
in_3: "close",
in_2: 9
}
},
plots: [{
id: "plot_0",
type: "line"
}, {
id: "plot_1",
type: "line"
}, {
id: "plot_2",
type: "line"
}],
styles: {
plot_0: {
title: "Histogram",
histogramBase: 0,
joinPoints: !1
},
plot_1: {
title: "MACD",
histogramBase: 0,
joinPoints: !1
},
plot_2: {
title: "Signal",
histogramBase: 0,
joinPoints: !1
}
},
description: "MACD",
shortDescription: "MACD",
is_price_study: !1,
inputs: [{
id: "in_0",
name: "fastLength",
defval: 12,
type: "integer",
min: 1,
max: 2e3
}, {
id: "in_1",
name: "slowLength",
defval: 26,
type: "integer",
min: 1,
max: 2e3
}, {
id: "in_3",
name: "Source",
defval: "close",
type: "source",
options: ["open", "high", "low", "close", "hl2", "hlc3", "ohlc4"]
}, {
id: "in_2",
name: "signalLength",
defval: 9,
type: "integer",
min: 1,
max: 50
}],
id: "Moving Average Convergence/Divergence@tv-basicstudies-1",
scriptIdPart: "",
name: "MACD"
},
constructor: function() {
this.f_0 = function(t, e) {
return t - e
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d, p, _, f, m, g;
return this._context = t, this._input = e, i = o.Std[this._input(2)](this
._context), n = this._input(0), r = this._input(1), s = this._input(
3), a = this._context.new_var(i), l = o.Std.ema(a, n, this
._context), c = this._context.new_var(i), h = o.Std.ema(c, r, this
._context), u = this.f_0(l, h), d = this._context.new_var(u), p = o
.Std.ema(d, s, this._context), _ = this.f_0(u, p), f = _, m = u, g = p,
[f, m, g]
}
}
}, {
name: "Moving Average Exponential",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0000FF"
}
},
precision: 4,
inputs: {
in_0: 9,
in_1: "close",
in_2: 0
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Moving Average Exponential",
shortDescription: "EMA",
is_price_study: !0,
inputs: [{
id: "in_0",
name: "Length",
defval: 9,
type: "integer",
min: 1,
max: 1e4
}, {
id: "in_1",
name: "Source",
defval: "close",
type: "source",
options: ["open", "high", "low", "close", "hl2", "hlc3", "ohlc4"]
}, {
id: "in_2",
name: "Offset",
defval: 0,
type: "integer",
min: -1e4,
max: 1e4
}],
id: "Moving Average Exponential@tv-basicstudies-1",
scriptIdPart: "",
name: "Moving Average Exponential"
},
constructor: function() {
this.main = function(t, e) {
var i, n, r, s, a, l;
return this._context = t, this._input = e, i = o.Std[this._input(1)](this
._context), n = this._input(0), r = this._input(2), s = this
._context.new_var(i), a = o.Std.ema(s, n, this._context), l = a, [{
value: l,
offset: r
}]
}
}
}, {
name: "Moving Average Weighted",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0000FF"
}
},
precision: 4,
inputs: {
in_0: 9,
in_1: "close",
in_2: 0
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Moving Average Weighted",
shortDescription: "WMA",
is_price_study: !0,
inputs: [{
id: "in_0",
name: "Length",
defval: 9,
type: "integer",
min: 1,
max: 2e3
}, {
id: "in_1",
name: "Source",
defval: "close",
type: "source",
options: ["open", "high", "low", "close", "hl2", "hlc3", "ohlc4"]
}, {
id: "in_2",
name: "Offset",
defval: 0,
type: "integer",
min: -1e4,
max: 1e4
}],
id: "Moving Average Weighted@tv-basicstudies-1",
scriptIdPart: "",
name: "Moving Average Weighted"
},
constructor: function() {
this.main = function(t, e) {
var i, n, r, s, a, l;
return this._context = t, this._input = e, i = o.Std[this._input(1)](this
._context), n = this._input(0), r = this._input(2), s = this
._context.new_var(i), a = o.Std.wma(s, n, this._context), l = a, [{
value: l,
offset: r
}]
}
}
}, {
name: "Net Volume",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0000FF"
}
},
precision: 4,
inputs: {}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Net Volume",
shortDescription: "Net Volume",
is_price_study: !1,
inputs: [],
id: "Net Volume@tv-basicstudies-1",
scriptIdPart: "",
name: "Net Volume"
},
constructor: function() {
this.f_0 = function(t, e, i) {
return o.Std.gt(t, 0) ? e : o.Std.lt(i, 0) ? -e : 0 * e
}, this.main = function(t, e) {
var i, n, r, s, a;
return this._context = t, this._input = e, i = o.Std.close(this._context),
n = this._context.new_var(i), r = o.Std.change(n), s = this.f_0(r, o.Std
.volume(this._context), r), a = s, [a]
}
}
}, {
name: "On Balance Volume",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0000FF"
}
},
precision: 4,
inputs: {}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "On Balance Volume",
shortDescription: "OBV",
is_price_study: !1,
inputs: [],
id: "On Balance Volume@tv-basicstudies-1",
scriptIdPart: "",
name: "On Balance Volume"
},
constructor: function() {
this.f_0 = function(t, e, i) {
return o.Std.gt(t, 0) ? e : o.Std.lt(i, 0) ? -e : 0 * e
}, this.main = function(t, e) {
var i, n, r, s, a, l;
return this._context = t, this._input = e, i = o.Std.close(this._context),
n = this._context.new_var(i), r = o.Std.change(n), s = this.f_0(r, o.Std
.volume(this._context), r), a = o.Std.cum(s, this._context), l = a,
[l]
}
}
}, {
name: "Parabolic SAR",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 3,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0000FF"
}
},
precision: 4,
inputs: {
in_0: .02,
in_1: .02,
in_2: .2
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Parabolic SAR",
shortDescription: "SAR",
is_price_study: !0,
inputs: [{
id: "in_0",
name: "start",
defval: .02,
type: "float",
min: -1e12,
max: 1e12
}, {
id: "in_1",
name: "increment",
defval: .02,
type: "float",
min: -1e12,
max: 1e12
}, {
id: "in_2",
name: "maximum",
defval: .2,
type: "float",
min: -1e12,
max: 1e12
}],
id: "Parabolic SAR@tv-basicstudies-1",
scriptIdPart: "",
name: "Parabolic SAR"
},
constructor: function() {
this.main = function(t, e) {
var i, n, r, s, a;
return this._context = t, this._input = e, i = this._input(0), n = this
._input(1), r = this._input(2), s = o.Std.sar(i, n, r, this._context),
a = s, [a]
}
}
}, {
name: "Price Channel",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#FF0080"
},
plot_1: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#FF0080"
},
plot_2: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0496FF"
}
},
precision: 4,
inputs: {
in_0: 20,
in_1: 0
}
},
plots: [{
id: "plot_0",
type: "line"
}, {
id: "plot_1",
type: "line"
}, {
id: "plot_2",
type: "line"
}],
styles: {
plot_0: {
title: "Highprice Line",
histogramBase: 0,
joinPoints: !1
},
plot_1: {
title: "Lowprice Line",
histogramBase: 0,
joinPoints: !1
},
plot_2: {
title: "Centerprice Line",
histogramBase: 0,
joinPoints: !1
}
},
description: "Price Channel",
shortDescription: "PC",
is_price_study: !1,
inputs: [{
id: "in_0",
name: "Length",
defval: 20,
type: "integer",
min: 1,
max: 2e3
}, {
id: "in_1",
name: "Offset Length",
defval: 0,
type: "integer",
min: 1,
max: 2e3
}],
id: "Price Channel@tv-basicstudies-1",
scriptIdPart: "",
name: "Price Channel"
},
constructor: function() {
this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u;
return this._context = t, this._input = e, i = o.Std.high(this._context),
n = this._context.new_var(i), r = o.Std.low(this._context), s = this
._context.new_var(r), a = this._input(0), l = this._input(1), c = o.Std
.highest(n, a, this._context), h = o.Std.lowest(s, a, this._context),
u = o.Std.avg(c, h), [{
value: c,
offset: l
}, {
value: h,
offset: l
}, {
value: u,
offset: l
}]
}
}
}, {
name: "Price Oscillator",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0000FF"
}
},
precision: 4,
inputs: {
in_0: 10,
in_1: 21
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Price Oscillator",
shortDescription: "PPO",
is_price_study: !1,
inputs: [{
id: "in_0",
name: "shortlen",
defval: 10,
type: "integer",
min: 1,
max: 2e3
}, {
id: "in_1",
name: "longlen",
defval: 21,
type: "integer",
min: 1,
max: 2e3
}],
id: "Price Oscillator@tv-basicstudies-1",
scriptIdPart: "",
name: "Price Oscillator"
},
constructor: function() {
this.f_0 = function(t, e) {
return (t - e) / e * 100
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u;
return this._context = t, this._input = e, i = o.Std.close(this._context),
n = this._input(0), r = this._input(1), s = this._context.new_var(i),
a = o.Std.sma(s, n, this._context), l = this._context.new_var(i), c = o
.Std.sma(l, r, this._context), h = this.f_0(a, c), u = h, [u]
}
}
}, {
name: "Price Volume Trend",
metainfo: {
_metainfoVersion: 42,
isTVScript: !1,
isTVScriptStub: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0000FF"
}
},
precision: 4,
inputs: {}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "PVT",
histogramBase: 0,
joinPoints: !1,
isHidden: !1
}
},
description: "Price Volume Trend",
shortDescription: "PVT",
is_price_study: !1,
is_hidden_study: !1,
id: "price_volume_trend@tv-basicstudies-1",
inputs: [],
scriptIdPart: "",
name: "Price Volume Trend"
},
constructor: function() {
this.f_0 = function() {
var t = this._context.new_var(o.Std.close(this._context));
return [o.Std.cum(o.Std.change(t) / t.get(1) * o.Std.volume(this._context),
this._context)]
}, this.main = function(t, e) {
return this._context = t, this._input = e, [this.f_0()[0]]
}
}
}, {
name: "Rate Of Change",
metainfo: {
_metainfoVersion: 41,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0000FF"
}
},
precision: 4,
bands: [{
color: "#808080",
linestyle: 2,
linewidth: 1,
visible: !0,
value: 0
}],
inputs: {
in_0: 9
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "ROC",
histogramBase: 0,
joinPoints: !1,
isHidden: !1
}
},
description: "Rate Of Change",
shortDescription: "ROC",
is_price_study: !1,
bands: [{
id: "hline_0",
name: "Zero Line",
isHidden: !1
}],
inputs: [{
id: "in_0",
name: "length",
defval: 9,
type: "integer",
min: 1,
max: 1e12
}],
id: "rate_of_change@tv-basicstudies-1",
scriptIdPart: "",
name: "Rate Of Change"
},
constructor: function() {
this.main = function(t, e) {
var i, n, r;
return this._context = t, this._input = e, i = this._context.new_var(o.Std
.close(this._context)), n = this._input(0), r = 100 * (i.get(0) - i
.get(n)) / i.get(n), [r]
}
}
}, {
name: "Relative Strength Index",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#800080"
}
},
precision: 4,
bands: [{
color: "#808080",
linestyle: 2,
linewidth: 1,
visible: !0,
value: 70
}, {
color: "#808080",
linestyle: 2,
linewidth: 1,
visible: !0,
value: 30
}],
filledAreasStyle: {
fill_0: {
color: "#800080",
transparency: 90,
visible: !0
}
},
inputs: {
in_0: 14
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Relative Strength Index",
shortDescription: "RSI",
is_price_study: !1,
bands: [{
id: "hline_0",
name: "UpperLimit"
}, {
id: "hline_1",
name: "LowerLimit"
}],
filledAreas: [{
id: "fill_0",
objAId: "hline_0",
objBId: "hline_1",
type: "hline_hline",
title: "Hlines Background"
}],
inputs: [{
id: "in_0",
name: "Length",
defval: 14,
type: "integer",
min: 1,
max: 2e3
}],
id: "Relative Strength Index@tv-basicstudies-1",
scriptIdPart: "",
name: "Relative Strength Index"
},
constructor: function() {
this.f_0 = function(t) {
return o.Std.max(t, 0)
}, this.f_1 = function(t) {
return -o.Std.min(t, 0)
}, this.f_2 = function(t, e) {
return o.Std.eq(t, 0) ? 100 : o.Std.eq(e, 0) ? 0 : 100 - 100 / (1 + e / t)
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d, p, _;
return this._context = t, this._input = e, i = o.Std.close(this._context),
n = this._input(0), r = this._context.new_var(i), s = o.Std.change(r),
a = this.f_0(s), l = this._context.new_var(a), c = o.Std.rma(l, n, this
._context), h = this.f_1(s), u = this._context.new_var(h), d = o.Std
.rma(u, n, this._context), p = this.f_2(d, c), _ = p, [_]
}
}
}, {
name: "Relative Vigor Index",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#008000"
},
plot_1: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#FF0000"
}
},
precision: 4,
inputs: {
in_0: 10
}
},
plots: [{
id: "plot_0",
type: "line"
}, {
id: "plot_1",
type: "line"
}],
styles: {
plot_0: {
title: "RVGI",
histogramBase: 0,
joinPoints: !1
},
plot_1: {
title: "Signal",
histogramBase: 0,
joinPoints: !1
}
},
description: "Relative Vigor Index",
shortDescription: "RVGI",
is_price_study: !1,
inputs: [{
id: "in_0",
name: "Length",
defval: 10,
type: "integer",
min: 1,
max: 2e3
}],
id: "Relative Vigor Index@tv-basicstudies-1",
scriptIdPart: "",
name: "Relative Vigor Index"
},
constructor: function() {
this.f_0 = function(t, e) {
return t - e
}, this.f_1 = function(t, e) {
return t / e
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d, p, _, f, m, g, v;
return this._context = t, this._input = e, i = this._input(0), n = this.f_0(
o.Std.close(this._context), o.Std.open(this._context)), r = this
._context.new_var(n), s = o.Std.swma(r, this._context), a = this
._context.new_var(s), l = o.Std.sum(a, i, this._context), c = this.f_0(o
.Std.high(this._context), o.Std.low(this._context)), h = this
._context.new_var(c), u = o.Std.swma(h, this._context), d = this
._context.new_var(u), p = o.Std.sum(d, i, this._context), _ = this.f_1(
l, p), f = this._context.new_var(_), m = o.Std.swma(f, this
._context), g = _, v = m, [g, v]
}
}
}, {
name: "Relative Volatility Index",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#000080"
}
},
precision: 4,
bands: [{
color: "#808080",
linestyle: 2,
linewidth: 1,
visible: !0,
value: 80
}, {
color: "#808080",
linestyle: 2,
linewidth: 1,
visible: !0,
value: 20
}],
filledAreasStyle: {
fill_0: {
color: "#808000",
transparency: 90,
visible: !0
}
},
inputs: {
in_0: 10
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Relative Volatility Index",
shortDescription: "RVI",
is_price_study: !1,
bands: [{
id: "hline_0",
name: "UpperLimit"
}, {
id: "hline_1",
name: "LowerLimit"
}],
filledAreas: [{
id: "fill_0",
objAId: "hline_0",
objBId: "hline_1",
type: "hline_hline",
title: "Hlines Background"
}],
inputs: [{
id: "in_0",
name: "length",
defval: 10,
type: "integer",
min: 1,
max: 2e3
}],
id: "Relative Volatility Index@tv-basicstudies-1",
scriptIdPart: "",
name: "Relative Volatility Index"
},
constructor: function() {
this.f_0 = function(t, e) {
return o.Std.le(t, 0) ? 0 : e
}, this.f_1 = function(t, e) {
return o.Std.gt(t, 0) ? 0 : e
}, this.f_2 = function(t, e) {
return t / (t + e) * 100
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d, p, _, f, m;
return this._context = t, this._input = e, i = this._input(0), n = o.Std
.close(this._context), r = this._context.new_var(n), s = o.Std.stdev(r,
i, this._context), a = this._context.new_var(n), l = o.Std.change(
a), c = this.f_0(l, s), h = this._context.new_var(c), u = o.Std.ema(
h,
14, this._context), d = this.f_1(l, s), p = this._context.new_var(
d), _ = o.Std.ema(p, 14, this._context), f = this.f_2(u, _), m = f,
[m]
}
}
}, {
name: "SMI Ergodic Indicator/Oscillator",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0000FF"
},
plot_1: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#FF7F00"
},
plot_2: {
linestyle: 0,
linewidth: 1,
plottype: 1,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#FF0000"
}
},
precision: 4,
inputs: {
in_0: 5,
in_1: 20,
in_2: 5
}
},
plots: [{
id: "plot_0",
type: "line"
}, {
id: "plot_1",
type: "line"
}, {
id: "plot_2",
type: "line"
}],
styles: {
plot_0: {
title: "Indicator",
histogramBase: 0,
joinPoints: !1
},
plot_1: {
title: "Signal",
histogramBase: 0,
joinPoints: !1
},
plot_2: {
title: "Oscillator",
histogramBase: 0,
joinPoints: !1
}
},
description: "SMI Ergodic Indicator/Oscillator",
shortDescription: "SMIIO",
is_price_study: !1,
inputs: [{
id: "in_0",
name: "shortlen",
defval: 5,
type: "integer",
min: 1,
max: 2e3
}, {
id: "in_1",
name: "longlen",
defval: 20,
type: "integer",
min: 1,
max: 2e3
}, {
id: "in_2",
name: "siglen",
defval: 5,
type: "integer",
min: 1,
max: 2e3
}],
id: "SMI Ergodic Indicator/Oscillator@tv-basicstudies-1",
scriptIdPart: "",
name: "SMI Ergodic Indicator/Oscillator"
},
constructor: function() {
this.f_0 = function(t, e) {
return t - e
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d, p, _;
return this._context = t, this._input = e, i = this._input(0), n = this
._input(1), r = this._input(2), s = o.Std.close(this._context), a = this
._context.new_var(s), l = o.Std.tsi(a, i, n, this._context), c = this
._context.new_var(l), h = o.Std.ema(c, r, this._context), u = this.f_0(
l, h), d = l, p = h, _ = u, [d, p, _]
}
}
}, {
name: "Smoothed Moving Average",
metainfo: {
_metainfoVersion: 41,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#FF0000"
}
},
precision: 4,
inputs: {
in_0: 7,
in_1: "close"
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1,
isHidden: !1
}
},
description: "Smoothed Moving Average",
shortDescription: "SMMA",
is_price_study: !0,
inputs: [{
id: "in_0",
name: "Length",
defval: 7,
type: "integer",
min: 1,
max: 1e12
}, {
id: "in_1",
name: "Source",
defval: "close",
type: "source",
options: ["open", "high", "low", "close", "hl2", "hlc3", "ohlc4"]
}],
id: "smoothed_moving_average@tv-basicstudies-1",
scriptIdPart: "",
name: "Smoothed Moving Average"
},
constructor: function() {
this.f_0 = function() {
var t, e = this._input(0),
i = o.Std[this._input(1)](this._context),
n = this._context.new_var(i),
r = o.Std.sma(n, e, this._context),
s = this._context.new_var(),
a = (s.get(1) * (e - 1) + i) / e;
return s.set(o.Std.na(s.get(1)) ? r : a), t = s.get(0), [t]
}, this.main = function(t, e) {
return this._context = t, this._input = e, this.f_0()
}
}
}, {
name: "Stochastic",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0000FF"
},
plot_1: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#FF0000"
}
},
precision: 4,
bands: [{
color: "#808080",
linestyle: 2,
linewidth: 1,
visible: !0,
value: 80
}, {
color: "#808080",
linestyle: 2,
linewidth: 1,
visible: !0,
value: 20
}],
filledAreasStyle: {
fill_0: {
color: "#800080",
transparency: 75,
visible: !0
}
},
inputs: {
in_0: 14,
in_1: 1,
in_2: 3
}
},
plots: [{
id: "plot_0",
type: "line"
}, {
id: "plot_1",
type: "line"
}],
styles: {
plot_0: {
title: "%K",
histogramBase: 0,
joinPoints: !1
},
plot_1: {
title: "%D",
histogramBase: 0,
joinPoints: !1
}
},
description: "Stochastic",
shortDescription: "Stoch",
is_price_study: !1,
bands: [{
id: "hline_0",
name: "UpperLimit"
}, {
id: "hline_1",
name: "LowerLimit"
}],
filledAreas: [{
id: "fill_0",
objAId: "hline_0",
objBId: "hline_1",
type: "hline_hline",
title: "Hlines Background"
}],
inputs: [{
id: "in_0",
name: "length",
defval: 14,
type: "integer",
min: 1,
max: 1e4
}, {
id: "in_1",
name: "smoothK",
defval: 1,
type: "integer",
min: 1,
max: 1e4
}, {
id: "in_2",
name: "smoothD",
defval: 3,
type: "integer",
min: 1,
max: 1e4
}],
id: "Stochastic@tv-basicstudies-1",
scriptIdPart: "",
name: "Stochastic"
},
constructor: function() {
this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d, p, _, f, m, g, v;
return this._context = t, this._input = e, i = this._input(0), n = this
._input(1), r = this._input(2), s = o.Std.close(this._context), a = o
.Std.high(this._context), l = o.Std.low(this._context), c = this
._context.new_var(s), h = this._context.new_var(a), u = this._context
.new_var(l), d = o.Std.stoch(c, h, u, i, this._context), p = this
._context.new_var(d), _ = o.Std.sma(p, n, this._context), f = this
._context.new_var(_), m = o.Std.sma(f, r, this._context), g = _, v = m,
[g, v]
}
}
}, {
name: "Stochastic RSI",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0000FF"
},
plot_1: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#FF0000"
}
},
precision: 4,
bands: [{
color: "#808080",
linestyle: 2,
linewidth: 1,
visible: !0,
value: 80
}, {
color: "#808080",
linestyle: 2,
linewidth: 1,
visible: !0,
value: 20
}],
filledAreasStyle: {
fill_0: {
color: "#800080",
transparency: 80,
visible: !0
}
},
inputs: {
in_0: 14,
in_1: 14,
in_2: 3,
in_3: 3
}
},
plots: [{
id: "plot_0",
type: "line"
}, {
id: "plot_1",
type: "line"
}],
styles: {
plot_0: {
title: "%K",
histogramBase: 0,
joinPoints: !1
},
plot_1: {
title: "%D",
histogramBase: 0,
joinPoints: !1
}
},
description: "Stochastic RSI",
shortDescription: "Stoch RSI",
is_price_study: !1,
bands: [{
id: "hline_0",
name: "UpperLimit"
}, {
id: "hline_1",
name: "LowerLimit"
}],
filledAreas: [{
id: "fill_0",
objAId: "hline_0",
objBId: "hline_1",
type: "hline_hline",
title: "Hlines Background"
}],
inputs: [{
id: "in_0",
name: "lengthRSI",
defval: 14,
type: "integer",
min: 1,
max: 1e4
}, {
id: "in_1",
name: "lengthStoch",
defval: 14,
type: "integer",
min: 1,
max: 1e4
}, {
id: "in_2",
name: "smoothK",
defval: 3,
type: "integer",
min: 1,
max: 1e4
}, {
id: "in_3",
name: "smoothD",
defval: 3,
type: "integer",
min: 1,
max: 1e4
}],
id: "Stochastic RSI@tv-basicstudies-1",
scriptIdPart: "",
name: "Stochastic RSI"
},
constructor: function() {
this.f_1 = function(t, e, i) {
var n = i.new_var(o.Std.max(o.Std.change(t), 0));
return o.Std.rma(n, e, i)
}, this.f_2 = function(t, e, i) {
var n = i.new_var(-o.Std.min(o.Std.change(t), 0));
return o.Std.rma(n, e, i)
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d, p, _, f, m, g, v, y;
return this._context = t, this._input = e, i = o.Std.close(this._context),
n = this._input(0), r = this._input(1), s = this._input(2), a = this
._input(3), l = this._context.new_var(i), c = o.Std.rsi(this.f_1(l, n,
this._context), this.f_2(l, n, this._context)), h = this._context
.new_var(c), u = this._context.new_var(c),
d = this._context.new_var(c), p = o.Std.stoch(h, u, d, r, this
._context), _ = this._context.new_var(p), f = o.Std.sma(_, s, this
._context), m = this._context.new_var(f), g = o.Std.sma(m, a, this
._context), v = f, y = g, [v, y]
}
}
}, {
name: "TRIX",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#800000"
}
},
precision: 4,
bands: [{
color: "#808080",
linestyle: 2,
linewidth: 1,
visible: !0,
value: 0
}],
inputs: {
in_0: 18
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "TRIX",
histogramBase: 0,
joinPoints: !1
}
},
description: "TRIX",
shortDescription: "TRIX",
is_price_study: !1,
bands: [{
id: "hline_0",
name: "Zero"
}],
inputs: [{
id: "in_0",
name: "length",
defval: 18,
type: "integer",
min: 1,
max: 2e3
}],
id: "TRIX@tv-basicstudies-1",
scriptIdPart: "",
name: "TRIX"
},
constructor: function() {
this.f_0 = function(t) {
return o.Std.log(t)
}, this.f_1 = function(t) {
return 1e4 * t
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d, p, _;
return this._context = t, this._input = e, i = this._input(0), n = this.f_0(
o.Std.close(this._context)), r = this._context.new_var(n), s = o.Std
.ema(r, i, this._context), a = this._context.new_var(s), l = o.Std.ema(
a, i, this._context), c = this._context.new_var(l), h = o.Std.ema(c,
i, this._context), u = this._context.new_var(h), d = o.Std.change(
u), p = this.f_1(d), _ = p, [_]
}
}
}, {
name: "Triple EMA",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#008000"
}
},
precision: 4,
inputs: {
in_0: 9
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Triple EMA",
shortDescription: "TEMA",
is_price_study: !0,
inputs: [{
id: "in_0",
name: "length",
defval: 9,
type: "integer",
min: 1,
max: 1e4
}],
id: "Triple EMA@tv-basicstudies-1",
scriptIdPart: "",
name: "Triple EMA"
},
constructor: function() {
this.f_0 = function(t, e, i) {
return 3 * (t - e) + i
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d;
return this._context = t, this._input = e, i = this._input(0), n = o.Std
.close(this._context), r = this._context.new_var(n), s = o.Std.ema(r, i,
this._context), a = this._context.new_var(s), l = o.Std.ema(a, i,
this._context), c = this._context.new_var(l), h = o.Std.ema(c, i,
this._context), u = this.f_0(s, l, h), d = u, [d]
}
}
}, {
name: "True Strength Indicator",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#000080"
},
plot_1: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#FF0000"
}
},
precision: 4,
bands: [{
color: "#808080",
linestyle: 2,
linewidth: 1,
visible: !0,
value: 0
}],
inputs: {
in_0: 25,
in_1: 13,
in_2: 13
}
},
plots: [{
id: "plot_0",
type: "line"
}, {
id: "plot_1",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
},
plot_1: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "True Strength Indicator",
shortDescription: "True Strength Indicator",
is_price_study: !1,
bands: [{
id: "hline_0",
name: "Zero"
}],
inputs: [{
id: "in_0",
name: "long",
defval: 25,
type: "integer",
min: 1,
max: 4999
}, {
id: "in_1",
name: "short",
defval: 13,
type: "integer",
min: 1,
max: 4999
}, {
id: "in_2",
name: "siglen",
defval: 13,
type: "integer",
min: 1,
max: 4999
}],
id: "True Strength Indicator@tv-basicstudies-1",
scriptIdPart: "",
name: "True Strength Indicator"
},
constructor: function() {
this.main = function(t, e) {
var i, n, r, s, a, l, c, h;
return this._context = t, this._input = e, i = this._input(0), n = this
._input(1), r = this._input(2), s = o.Std.close(this._context), a = this
._context.new_var(s), l = o.Std.tsi(a, n, i, this._context), c = l, h =
this._context.new_var(c), [c, o.Std.ema(h, r, this._context)]
}
}
}, {
name: "Ultimate Oscillator",
metainfo: {
_metainfoVersion: 41,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#FF0000"
}
},
precision: 4,
inputs: {
in_0: 7,
in_1: 14,
in_2: 28
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "UO",
histogramBase: 0,
joinPoints: !1,
isHidden: !1
}
},
description: "Ultimate Oscillator",
shortDescription: "UO",
is_price_study: !1,
inputs: [{
id: "in_0",
name: "length7",
defval: 7,
type: "integer",
min: 1,
max: 1e12
}, {
id: "in_1",
name: "length14",
defval: 14,
type: "integer",
min: 1,
max: 1e12
}, {
id: "in_2",
name: "length28",
defval: 28,
type: "integer",
min: 1,
max: 1e12
}],
id: "ultimate_oscillator@tv-basicstudies-1",
scriptIdPart: "",
name: "Ultimate Oscillator"
},
constructor: function() {
this.f_0 = function(t, e, i) {
var n = this._context.new_var(t),
r = this._context.new_var(e);
return [o.Std.sum(n, i, this._context) / o.Std.sum(r, i, this._context)]
}, this.f_1 = function() {
var t = this._input(0),
e = this._input(1),
i = this._input(2),
n = this._context.new_var(o.Std.close(this._context)),
r = o.Std.max(o.Std.high(this._context), n.get(1)),
s = this._context.new_var(o.Std.close(this._context)),
a = o.Std.min(o.Std.low(this._context), s.get(1)),
l = o.Std.close(this._context) - a,
c = r - a,
h = this.f_0(l, c, t),
u = this.f_0(l, c, e),
d = this.f_0(l, c, i);
return [100 * (4 * h[0] + 2 * u[0] + d[0]) / 7]
}, this.main = function(t, e) {
return this._context = t, this._input = e, this.f_1()
}
}
}, {
name: "VWAP",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: 0,
transparency: 0,
visible: !0,
color: "#3A6CA8"
}
},
precision: 4
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "VWAP",
histogramBase: 0,
joinPoints: !1,
isHidden: !1
}
},
description: "VWAP",
shortDescription: "VWAP",
is_price_study: !0,
inputs: [],
id: "VWAP@tv-basicstudies-1",
scriptIdPart: "",
name: "VWAP"
},
constructor: function() {
this.f_1 = function(t) {
t.hist = null, t.add_hist()
}, this.init = function(t, e) {
this._isNewSession = o.Std.createNewSessionCheck(t)
}, this.main = function(t, e) {
var i, n, r, s;
return this._context = t, this._input = e, i = t.new_var(), n = t.new_var(),
this._context.symbol.time && (r = this._context.symbol.time, this
._isNewSession(r) && (this.f_1(i), this.f_1(n))), i.set(o.Std.nz(i
.get(1)) + o.Std.hlc3(this._context) * o.Std.volume(this
._context)), n.set(o.Std.nz(n.get(1)) + o.Std.volume(this
._context)), s = i.get(0) / n.get(0), [s]
}
}
}, {
name: "VWMA",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0000FF"
}
},
precision: 4,
inputs: {
in_0: 20
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "VWMA",
shortDescription: "VWMA",
is_price_study: !0,
inputs: [{
id: "in_0",
name: "len",
defval: 20,
type: "integer",
min: 1,
max: 1e4
}],
id: "VWMA@tv-basicstudies-1",
scriptIdPart: "",
name: "VWMA"
},
constructor: function() {
this.main = function(t, e) {
var i, n, r, s, a;
return this._context = t, this._input = e, i = o.Std.close(this._context),
n = this._input(0), r = this._context.new_var(i), s = o.Std.vwma(r, n,
this._context), a = s, [a]
}
}
}, {
name: "Volume Oscillator",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#000080"
}
},
precision: 4,
bands: [{
color: "#808080",
linestyle: 2,
linewidth: 1,
visible: !0,
value: 0
}],
inputs: {
in_0: 5,
in_1: 10
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Volume Oscillator",
shortDescription: "Volume Osc",
is_price_study: !1,
bands: [{
id: "hline_0",
name: "Zero"
}],
inputs: [{
id: "in_0",
name: "shortlen",
defval: 5,
type: "integer",
min: 1,
max: 4999
}, {
id: "in_1",
name: "longlen",
defval: 10,
type: "integer",
min: 1,
max: 4999
}],
id: "Volume Oscillator@tv-basicstudies-1",
scriptIdPart: "",
name: "Volume Oscillator"
},
constructor: function() {
this.f_0 = function(t, e) {
return 100 * (t - e) / e
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u;
return this._context = t, this._input = e, i = this._input(0), n = this
._input(1), r = o.Std.volume(this._context), s = this._context.new_var(
r), a = o.Std.ema(s, i, this._context), l = this._context.new_var(
r), c = o.Std.ema(l, n, this._context), h = this.f_0(a, c), u = h, [
u
]
}
}
}, {
name: "Vortex Indicator",
metainfo: {
_metainfoVersion: 42,
isTVScript: !1,
isTVScriptStub: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0000FF"
},
plot_1: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#FF0000"
}
},
precision: 4,
inputs: {
in_0: 14
}
},
plots: [{
id: "plot_0",
type: "line"
}, {
id: "plot_1",
type: "line"
}],
styles: {
plot_0: {
title: "VI +",
histogramBase: 0,
joinPoints: !1,
isHidden: !1
},
plot_1: {
title: "VI -",
histogramBase: 0,
joinPoints: !1,
isHidden: !1
}
},
description: "Vortex Indicator",
shortDescription: "VI",
is_price_study: !1,
is_hidden_study: !1,
id: "vortex_indicator@tv-basicstudies-1",
inputs: [{
id: "in_0",
name: "Period",
defval: 14,
type: "integer",
min: 2,
max: 1e12
}],
scriptIdPart: "",
name: "Vortex Indicator"
},
constructor: function() {
this.f_0 = function() {
var t = this._input(0),
e = this._context.new_var(o.Std.low(this._context)),
i = this._context.new_var(o.Std.abs(o.Std.high(this._context) - e.get(
1))),
n = o.Std.sum(i, t, this._context),
r = this._context.new_var(o.Std.high(this._context)),
s = this._context.new_var(o.Std.abs(o.Std.low(this._context) - r.get(
1))),
a = o.Std.sum(s, t, this._context),
l = this._context.new_var(o.Std.atr(1, this._context)),
c = o.Std.sum(l, t, this._context);
return [n / c, a / c]
}, this.main = function(t, e) {
return this._context = t, this._input = e, this.f_0()
}
}
}, {
name: "Willams %R",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#000080"
}
},
precision: 4,
bands: [{
color: "#808080",
linestyle: 2,
linewidth: 1,
visible: !0,
value: -20
}, {
color: "#808080",
linestyle: 2,
linewidth: 1,
visible: !0,
value: -80
}],
filledAreasStyle: {
fill_0: {
color: "#000080",
transparency: 90,
visible: !0
}
},
inputs: {
in_0: 14
}
},
plots: [{
id: "plot_0",
type: "line"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Williams %R",
shortDescription: "%R",
is_price_study: !1,
bands: [{
id: "hline_0",
name: "UpperLimit"
}, {
id: "hline_1",
name: "LowerLimit"
}],
filledAreas: [{
id: "fill_0",
objAId: "hline_0",
objBId: "hline_1",
type: "hline_hline",
title: "Hlines Background"
}],
inputs: [{
id: "in_0",
name: "length",
defval: 14,
type: "integer",
min: 1,
max: 2e3
}],
id: "Willams %R@tv-basicstudies-1",
scriptIdPart: "",
name: "Willams %R"
},
constructor: function() {
this.f_0 = function(t, e, i) {
return 100 * (t - e) / (e - i)
}, this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u;
return this._context = t, this._input = e, i = this._input(0), n = o.Std
.high(this._context), r = this._context.new_var(n), s = o.Std.highest(r,
i, this._context), a = o.Std.low(this._context), l = this._context
.new_var(a), c = o.Std.lowest(l, i, this._context), h = this.f_0(o.Std
.close(this._context), s, c), u = h, [u]
}
}
}, {
name: "Williams Alligator",
metainfo: {
_metainfoVersion: 27,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#0000FF"
},
plot_1: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#FF0000"
},
plot_2: {
linestyle: 0,
linewidth: 1,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#008000"
}
},
precision: 4,
inputs: {
in_0: 21,
in_1: 13,
in_2: 8
}
},
plots: [{
id: "plot_0",
type: "line"
}, {
id: "plot_1",
type: "line"
}, {
id: "plot_2",
type: "line"
}],
styles: {
plot_0: {
title: "Jaw",
histogramBase: 0,
joinPoints: !1
},
plot_1: {
title: "Teeth",
histogramBase: 0,
joinPoints: !1
},
plot_2: {
title: "Lips",
histogramBase: 0,
joinPoints: !1
}
},
description: "Williams Alligator",
shortDescription: "Alligator",
is_price_study: !0,
inputs: [{
id: "in_0",
name: "jawLength",
defval: 21,
type: "integer",
min: 1,
max: 2e3
}, {
id: "in_1",
name: "teethLength",
defval: 13,
type: "integer",
min: 1,
max: 2e3
}, {
id: "in_2",
name: "lipsLength",
defval: 8,
type: "integer",
min: 1,
max: 2e3
}],
id: "Williams Alligator@tv-basicstudies-1",
scriptIdPart: "",
name: "Williams Alligator"
},
constructor: function() {
this.main = function(t, e) {
var i, n, r, s, a, l, c, h, u, d, p, _, f;
return this._context = t, this._input = e, i = this._input(0), n = this
._input(1), r = this._input(2), s = o.Std.hl2(this._context), a = this
._context.new_var(s), l = o.Std.ema(a, i, this._context), c = this
._context.new_var(s), h = o.Std.ema(c, n, this._context), u = this
._context.new_var(s), d = o.Std.ema(u, r, this._context), p = l, _ = h,
f = d, [{
value: p,
offset: 8
}, {
value: _,
offset: 5
}, {
value: f,
offset: 3
}]
}
}
}, {
name: "Williams Fractals",
metainfo: {
_metainfoVersion: 42,
isTVScript: !1,
isTVScriptStub: !1,
defaults: {
styles: {
plot_0: {
plottype: "shape_triangle_down",
visible: !0,
location: "BelowBar",
transparency: 0,
color: "#800000"
},
plot_1: {
plottype: "shape_triangle_up",
visible: !0,
location: "AboveBar",
transparency: 0,
color: "#808000"
}
},
precision: 4,
inputs: {
in_0: 2
}
},
plots: [{
id: "plot_0",
type: "shapes"
}, {
id: "plot_1",
type: "shapes"
}],
styles: {
plot_0: {
title: "Down fractals",
isHidden: !1
},
plot_1: {
title: "Up fractals",
isHidden: !1
}
},
description: "Williams Fractal",
shortDescription: "Fractals",
is_price_study: !0,
is_hidden_study: !1,
id: "Williams Fractals@tv-basicstudies-1",
inputs: [{
id: "in_0",
name: "Periods",
defval: 2,
type: "integer",
min: 2,
max: 1e12
}],
scriptIdPart: "",
name: "Williams Fractals",
isCustomIndicator: !0
},
constructor: function() {
this.f_0 = function() {
var t = this._input(0),
e = this._context.new_var(o.Std.high(this._context)),
i = o.Std.or(o.Std.and(o.Std.and(o.Std.lt(e.get(t + 2), e.get(t)), o.Std
.lt(e.get(t + 1), e.get(t))), o.Std.and(o.Std.lt(e.get(t -
1), e.get(t)), o.Std.lt(e.get(t - 2), e.get(t)))), o.Std.or(o
.Std.or(o.Std.and(o.Std.lt(e.get(t + 3), e.get(t)), o.Std.and(o
.Std.and(o.Std.lt(e.get(t + 2), e.get(t)), o.Std.eq(
e.get(t + 1), e.get(t))), o.Std.and(o.Std.lt(e
.get(t - 1), e.get(t)), o.Std.lt(e.get(t -
2), e.get(t))))), o.Std.and(o.Std.and(o.Std.lt(e
.get(t + 4), e.get(t)), o.Std.lt(e.get(t + 3), e
.get(t))), o.Std.and(o.Std.and(o.Std.eq(e.get(t +
2), e.get(t)), o.Std.le(e.get(t + 1), e.get(
t))), o.Std.and(o.Std.lt(e.get(t - 1), e.get(
t)), o.Std.lt(e.get(t - 2), e.get(t)))))), o.Std.or(o.Std
.and(o.Std.and(o.Std.lt(e.get(t + 5), e.get(t)), o.Std.and(o
.Std.lt(e.get(t + 4), e.get(t)), o.Std.eq(e.get(
t + 3), e.get(t)))), o.Std.and(o.Std.and(o.Std
.eq(e.get(t + 2), e.get(t)), o.Std.le(e.get(t +
1), e.get(t))), o.Std.and(o.Std.lt(e.get(t -
1), e.get(t)), o.Std.lt(e.get(t - 2), e.get(
t))))), o.Std.and(o.Std.and(o.Std.and(o.Std.lt(e.get(t +
6), e.get(t)), o.Std.lt(e.get(t + 5), e.get(
t))), o.Std.and(o.Std.eq(e.get(t + 4), e.get(
t)), o.Std.le(e.get(t + 3), e.get(t)))), o.Std.and(o
.Std.and(o.Std.eq(e.get(t + 2), e.get(t)), o.Std.le(
e.get(t + 1), e.get(t))), o.Std.and(o.Std.lt(e
.get(t - 1), e.get(t)), o.Std.lt(e.get(t -
2), e.get(t)))))))),
n = this._context.new_var(o.Std.low(this._context));
return [o.Std.or(o.Std.and(o.Std.and(o.Std.gt(n.get(t + 2), n.get(t)), o.Std
.gt(n.get(t + 1), n.get(t))), o.Std.and(o.Std.gt(n.get(
t - 1), n.get(t)), o.Std.gt(n.get(t - 2), n.get(t)))), o.Std
.or(o.Std.or(o.Std.and(o.Std.gt(n.get(t + 3), n.get(t)), o.Std
.and(o.Std.and(o.Std.gt(n.get(t + 2), n.get(t)), o
.Std.eq(n.get(t + 1), n.get(t))), o.Std.and(
o.Std.gt(n.get(t - 1), n.get(t)), o.Std.gt(n
.get(t - 2), n.get(t))))), o.Std.and(o.Std
.and(o.Std.gt(n.get(t + 4), n.get(t)), o.Std.gt(n
.get(t + 3), n.get(t))), o.Std.and(o.Std.and(o
.Std.eq(n.get(t + 2), n.get(t)), o.Std.ge(n
.get(t + 1), n.get(t))), o.Std.and(o.Std
.gt(n.get(t - 1), n.get(t)), o.Std.gt(n.get(
t - 2), n.get(t)))))), o.Std.or(o.Std.and(o.Std
.and(o.Std.gt(n.get(t + 5), n.get(t)), o.Std.and(o
.Std.gt(n.get(t + 4), n.get(t)), o.Std.eq(n
.get(t + 3), n.get(t)))), o.Std.and(o.Std
.and(o.Std.eq(n.get(t + 2), n.get(t)), o.Std.ge(
n.get(t + 1), n.get(t))), o.Std.and(o.Std
.gt(n.get(t - 1), n.get(t)), o.Std.gt(n.get(
t - 2), n.get(t))))), o.Std.and(o.Std
.and(o.Std.and(o.Std.gt(n.get(t + 6), n.get(t)), o
.Std.gt(n.get(t + 5), n.get(t))), o.Std.and(
o.Std.eq(n.get(t + 4), n.get(t)), o.Std.ge(n
.get(t + 3), n.get(t)))), o.Std.and(o.Std
.and(o.Std.eq(n.get(t + 2), n.get(t)), o.Std.ge(
n.get(t + 1), n.get(t))), o.Std.and(o.Std
.gt(n.get(t - 1), n.get(t)), o.Std.gt(n.get(
t - 2), n.get(t)))))))), i]
}, this.main = function(t, e) {
this._context = t, this._input = e;
var i = this.f_0();
return [{
value: i[0],
offset: -2
}, {
value: i[1],
offset: -2
}]
}
}
}]
}, function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c, h;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(2), r = i(39), s = i(14), a = i(85), l = i(368), c = i(1025), h = function(t) {
function e(e) {
var i = t.call(this, e) || this;
return i._handleClick = function() {
i._handleToggleDropdown()
}, i._handleToggleDropdown = function(t) {
var e = i.state.isOpened,
o = "boolean" == typeof t ? t : !e;
i.setState({
isOpened: o
})
}, i._handleClose = function() {
i._handleToggleDropdown(!1)
}, i._getDropdownPosition = function() {
var t = r.findDOMNode(i).getBoundingClientRect();
return {
x: t.left + (i.props.directionHorz === a.DirectionHorz.ToLeft ? t.width : 0),
y: t.bottom + 2
}
}, i.state = {
isOpened: !1
}, i
}
return o.__extends(e, t), e.prototype.render = function() {
var t, e = this.props,
i = e.id,
o = e.arrow,
r = e.children,
h = e.content,
u = e.directionHorz,
d = e.isDisabled,
p = e.minWidth,
_ = e.title,
f = e.className,
m = this.state.isOpened,
g = s(f, c.button, "apply-common-tooltip", (t = {}, t[c.isDisabled] = d, t[c
.isOpened] = m, t));
return n.createElement("div", {
id: i,
className: g,
onClick: d ? void 0 : this._handleClick,
title: _
}, h, o && n.createElement("div", {
className: c.arrow
}, n.createElement("div", {
className: c.arrowWrap
}, n.createElement(l.ToolWidgetCaret, {
dropped: m
}))), n.createElement(a.PopupMenu, {
closeOnClickOutside: this.props.closeOnClickOutside,
directionHorz: u,
doNotCloseOn: this,
isOpened: m,
minWidth: p,
onClose: this._handleClose,
position: this._getDropdownPosition
}, r))
}, e.defaultProps = {
arrow: !0,
closeOnClickOutside: !0
}, e
}(n.PureComponent), e.ToolWidgetMenu = h
}, function(t, e, i) {
"use strict";
function o(t) {
var e = t.className,
i = n.__rest(t, ["className"]);
return r.createElement(a.ToolWidgetButton, n.__assign({}, i, {
className: s(e, l.button)
}))
}
var n, r, s, a, l;
Object.defineProperty(e, "__esModule", {
value: !0
}), n = i(0), r = i(2), s = i(14), a = i(103),
l = i(1033), e.ToolWidgetIconButton = o
}, function(t, e, i) {
"use strict";
function o(t, e, i) {
var o, n, r, s, a;
for (void 0 === i && (i = {}), o = Object.assign({}, e), n = 0, r = Object.keys(e); n < r
.length; n++) s = r[n], (a = i[s] || s) in t && (o[s] = [t[a], e[s]].join(" "));
return o
}
Object.defineProperty(e, "__esModule", {
value: !0
}), e.weakComposeClasses = o
}, function(t, e, i) {
"use strict";
(function(t) {
function o(t, e) {
this._model = e, this._bindings = [], this._property = t, this.supportThemeSwitcher = !1
}
function n(t) {
return t.toUpperCase()
}
function r(t) {
return function(e) {
return e < t ? t : e
}
}
function s(t) {
return function(e) {
return e > t ? t : e
}
}
function a(t) {
return function(e) {
var i = parseInt(e, 10);
return M(i) ? t : i
}
}
function l(t) {
var e = new B;
return function(i) {
var o = e.parse(i);
return M(o) ? t : o
}
}
function c(t) {
var e = new B;
return function(i) {
var o = e.parse(i);
return M(o) ? t() : o
}
}
function h(t, e) {
var i = new z(e);
return function(e) {
var o = i.format(e);
return M(o) ? t : o
}
}
function u() {
return function(t) {
for (var e = t, i = t.replace(/[^\u0000-\u007F]/, ""); i.length !== e.length;) e =
i, i = e.replace(/[^\u0000-\u007F]/, "");
return i
}
}
function d(t) {
return function(e) {
return 0 === e.length ? t : e
}
}
function p(t, e, i, o, n, r, s) {
W.call(this, t, e, o, n, r), this._transformFunction = i, this._setter = s, this
._attachToControl(t, o)
}
function _(t, e, i, o, n) {
p.call(this, t, e, l(e.value()), i, o, n), this.addFormatter(function(t) {
return (new B).format(t)
})
}
function f(t, e, i, o, n, r) {
this._subControlIds = e, W.call(this, t, i, o, n, r), this._forEachSubControl(function(t) {
this._attachToControl(t, o)
})
}
function m(t, e, i, o, n, r, s) {
this._model = o, this._mainSeries = r, this._toIntTransformer = a(s), this._disabled = !1, W
.call(this, t, e, i, o, n);
var l = this;
i && t.change(function() {
l.setValueToProperty(l.value())
}), this._mainSeries.onBarReceived().subscribe(this, function() {
l.setValue(this.property().value())
})
}
function g(t, e, i, o, n) {
W.call(this, t, e, i, o, n), i && t.on("accept-symbol", function(t, e) {
this.setValueToProperty(e)
}.bind(this))
}
function v(t, e, i, o, n, r, s, a) {
W.call(this, t, e, o, n, r), this._transformFunction = i, this._propertyChangedHook = a,
this._setter = s;
var l = this;
o && t.change(function() {
l._setter ? l._setter.call(l, l.value()) : l.setValueToProperty(l.value())
})
}
function y(t, e) {
W.call(this, t, e)
}
function b(t, e, i, o, n, r) {
if (!t.is(":checkbox, :radio")) return new w(t, e, i, o, n);
W.call(this, t, e, i, o, n), this._setter = r;
var s = this;
i && t.change(function() {
s._setter ? s._setter.call(s, s.value()) : s.setValueToProperty(s.value())
})
}
function S(t, e, i, o, n, r) {
W.call(this, t, e, i, o, n), this._inverted = !0 === r
}
function w(t, e, i, o, n) {
W.call(this, t, e, i, o, n);
var r = this;
i && t.click(function() {
var t = $(this).toggleClass("active").hasClass("active");
r.setValueToProperty(t)
})
}
function T(t, e, i, o, n, r) {
var s, a;
s = t.is("input") ? t : t.find("input"), W.call(this, s, e, i, o, n), this
._transparencyProperty = r, this.applyOldTransparency(), a = this, i && s.change(
function() {
a.setValueToProperty(a.value())
})
}
function C(e, i, o, n, r, s) {
function a(t, e) {
var i = c.control().slider("option", "min"),
o = c.control().slider("option", "max"),
n = c._property.value();
(i <= n && n <= o || i < e.value && e.value < o) && c.setValueToProperty(e.value)
}
function l(t, e) {
c.setValueToProperty(e.value)
}
isNumber(i.value()) || (H.logWarn(
"Property cannot be binded to control, bad value (expect number): " + i.value()
), i = new t), W.call(this, e, i, o, n, r);
var c = this;
o && (s ? (e.bind("slidechange", a), e.bind("slide", a)) : (e.bind("slidechange", l), e
.bind("slide", l))), e.bind("slidestart", function(t, e) {
n.beginUndoMacro(r)
}), e.bind("slidestop", function(t, e) {
n.endUndoMacro()
})
}
function x(t, e, i, o, n, r) {
b.call(this, t, e, o, n, r), this._intervalProperty = i, this._intervalProperty.listeners()
.subscribe(this, this.onIntervalChanged), this.onIntervalChanged()
}
function P(t, e, i, o, n) {
this._control = t, this._wv = e, this._transformFunction = i, this._undoModel = o, this
._undoText = n, this._attachToControl(this._control), this._setValueBinded = this
.setValue.bind(this)
}
function L(t, e, i, o, n, r) {
this._not = !!r, P.apply(this, arguments)
}
function I(t, e, i, o, n, r, s, a) {
this._propFrom = e[0], this._propTo = e[1], this._control = t, this._applyOnFly = o, this
._undoModel = n, this._undoText = s, this._properties = e, this._inputsText = r, this
._transformers = i;
var l = this;
t.slider({
range: !0,
min: i[0],
max: i[1],
values: [l._propFrom.value(), l._propTo.value()]
}), this.$rangeHandleFrom = $(t.find(".ui-slider-handle")[0]).addClass("from"), this
.$rangeHandleTo = $(t.find(".ui-slider-handle")[1]).addClass("to"), this.setValue(this
._propFrom, 0), this.setValue(this._propTo, 1), a && ($(a).on("change", function(
t) {
$(this).is(":checked") ? (l._control.slider("enable"), $(l._inputsText[0])
.prop("disabled", !1), $(l._inputsText[1]).prop("disabled", !1)) : (
l._control.slider("disable"), $(l._inputsText[0]).prop("disabled", !
0), $(l._inputsText[1]).prop("disabled", !0))
}), $(a).is(":checked") ? (l._control.slider("enable"), $(l._inputsText[0]).prop(
"disabled", !1), $(l._inputsText[1]).prop("disabled", !1)) : (l._control.slider(
"disable"), $(l._inputsText[0]).prop("disabled", !0), $(l._inputsText[1])
.prop("disabled", !0))), r && ($(r[0]).val(this._control.slider("values", 0)), $(r[
1]).val(this._control.slider("values", 1)), t.slider({
slide: function(t, e) {
$(r[0]).val(e.values[0]), $(r[1]).val(e.values[1])
}
}), $(r).each(function() {
$(this).on("keydown", function(t) {
parseInt($(r[0]).val()) < l._transformers[0] ? $(r[0]).val(l
._transformers[0]) : parseInt($(r[1]).val()) > l
._transformers[1] && $(r[1]).val(l._transformers[1]), -1 !==
$.inArray(t.keyCode, [46, 8, 9, 27, 13, 110, 190]) || 65 ===
t.keyCode && !0 === t.ctrlKey || 67 === t.keyCode && !0 ===
t.ctrlKey || 88 === t.keyCode && !0 === t.ctrlKey || t
.keyCode >= 35 && t.keyCode <= 39 || (t.shiftKey || t
.keyCode < 48 || t.keyCode > 57) && (t.keyCode < 96 || t
.keyCode > 105) && t.preventDefault()
})
}), $(r[0]).on("keyup", function(t) {
parseInt($(this).val()) < l._transformers[0] ? $(this).val(l._transformers[
0]) : parseInt($(this).val()) > l._transformers[1] && $(this).val(l
._transformers[1]), parseInt($(this).val()) > parseInt($(r[1])
.val()) && $(this).val(r[1].val()), l._control.slider("values", 0,
$(
this).val()), I.prototype.setValueToProperty.call(l, l._control
.slider("values"), "from")
}), $(r[1]).on("keyup", function(t) {
parseInt($(this).val()) < l._transformers[0] ? $(this).val(l._transformers[
0]) : parseInt($(this).val()) > l._transformers[1] && $(this).val(l
._transformers[1]),
parseInt($(this).val()) < $(r[0]).val() && $(this).val(r[0].val()), l
._control.slider("values", 1, $(this).val()), I.prototype
.setValueToProperty.call(l, l._control.slider("values"), "to")
})), this._propFrom.listeners().subscribe(this, I.prototype.propertyChanged), this
._propTo.listeners().subscribe(this, I.prototype.propertyChanged), o && t.on("slide",
function(t, e) {
l.setValueToProperty(l._control.slider("values"), e.handle)
}), t.slider({
stop: function(t, e) {
r && ($(r[0]).val(l._control.slider("values", 0)), $(r[1]).val(l
._control.slider("values", 1))), l.setValueToProperty(l._control
.slider("values"), e.handle)
},
start: function(t, e) {
r && ($(r[0]).val(l._control.slider("values", 0)), $(r[1]).val(l
._control.slider("values", 1))), l.setValueToProperty(l._control
.slider("values"), e.handle)
}
})
}
function k(t, e, i, o, n, r) {
W.call(this, t, e, i, o, n), this._separator = r || " ";
var s = this;
i && t.change(function() {
s.setValueToProperty(s.value())
})
}
var A, M, E, D, V, O, R, B, z, F, N, W, H;
i(384), A = i(9).ensureNotNull, M = i(198).isNaN, E = i(32), D = E.rgba, V = E.rgbaToString, O =
E.parseRgb, R = i(212).TimePointIndexSearchMode, B = i(89).NumericFormatter, z = i(213)
.LimitedPrecisionNumericFormatter, F = i(30), N = i(372).addColorPicker, W = i(320).Binding,
H = i(7).getLogger("Chart.PropertyPage"), o.prototype.model = function() {
return this._model
}, o.prototype.bindControl = function(t) {
return this._bindings.push(t), t
}, o.prototype.unbindControl = function(t) {
var e = this._bindings.indexOf(t); - 1 !== e && this._bindings.splice(e, 1)
}, o.prototype.loadData = function() {
var t, e, i;
for (t = 0; t < this._bindings.length; t++) e = this._bindings[t], e.properties ? (i = e
.properties(), e.setValue(i[0], 0), e.setValue(i[1], 1)) : e.property && (e
.transparencyProperty && e.transparencyProperty() ? e.applyOldTransparency() : e
.setValue(e.property().value()))
}, o.prototype.saveData = function() {
var t, e;
for (this._model.beginUndoMacro(), t = 0; t < this._bindings.length; t++) e = this
._bindings[t], e.changed() && this._model.setProperty(e.property(), e.value());
this._model.endUndoMacro()
}, o.prototype.createColorPicker = function(t) {
return N(null, t)
}, o.prototype.createTextEditor = function(t, e) {
var i = {};
return t && (i.width = t), e && (i.height = e), $(document.createElement("textarea"))
.css(i).addClass("tv-control-input")
}, o.prototype.createCombo = function(t) {
var e = $(document.createElement("select")),
i = t.reduce(function(t, e) {
return t.add($(document.createElement("option")).prop({
value: e,
text: e
}))
}, $());
return e.append(i)
}, o.prototype.createKeyCombo = function(t) {
var e = $(document.createElement("select"));
return $.each(t || [], function(t, i) {
$(document.createElement("option")).prop({
value: t,
text: i
}).appendTo(e)
}), e
}, o.prototype.createFontEditor = function(t) {
var e = t || TradingView.factoryDefaults("chartproperties.editorFontsList");
return this.createCombo(e)
}, o.prototype.createFontSizeEditor = function(t) {
var e = t || [10, 11, 12, 14, 16, 20, 24, 28, 32, 40];
return this.createCombo(e).addClass("tv-select-container-fontsize")
}, o.prototype.createSeriesMinTickEditor = function() {
var t, e, i, o, n = "<select><option value='default'>" + $.t("Default") + "</option>",
r = [{
priceScale: 1,
minMove: 1,
frac: !1
}, {
priceScale: 10,
minMove: 1,
frac: !1
}, {
priceScale: 100,
minMove: 1,
frac: !1
}, {
priceScale: 1e3,
minMove: 1,
frac: !1
}, {
priceScale: 1e4,
minMove: 1,
frac: !1
}, {
priceScale: 1e5,
minMove: 1,
frac: !1
}, {
priceScale: 1e6,
minMove: 1,
frac: !1
}, {
priceScale: 1e7,
minMove: 1,
frac: !1
}, {
priceScale: 1e8,
minMove: 1,
frac: !1
}, {
priceScale: 2,
minMove: 1,
frac: !0
}, {
priceScale: 4,
minMove: 1,
frac: !0
}, {
priceScale: 8,
minMove: 1,
frac: !0
}, {
priceScale: 16,
minMove: 1,
frac: !0
}, {
priceScale: 32,
minMove: 1,
frac: !0
}, {
priceScale: 64,
minMove: 1,
frac: !0
}, {
priceScale: 128,
minMove: 1,
frac: !0
}, {
priceScale: 320,
minMove: 1,
frac: !0
}];
for (t in r) e = r[t], i = e.priceScale + "," + e.minMove + "," + e.frac, o = e
.minMove + "/" + e.priceScale, n += "<option value='" + i + "'>" + o + "</option>";
return n += "</select>", $(n)
}, o.prototype.createPrecisionEditor = function() {
var t, e = "<select><option value='default'>" + $.t("Default") + "</option>";
for (t = 0; t <= 8; t++) e += "<option value='" + t + "'>" + t + "</option>";
return e += "</select>", $(e)
}, o.prototype.createLabeledCell = function(t, e, i) {
var o, n, r, s, a = null;
return "number" == typeof t.valueOf() ? (a = t, o = e, n = i) : (o = t, n = e), o += "",
r = this._labelToId(o), s = $("<td>"), $("<label>").html(o.length > 0 ? $.t(o) : "")
.attr("for", r).appendTo(s), a && s.attr("colspan", a), n && n.attr("id", r), s
}, o.prototype.createTableInTable = function(t) {
var e = $("<tr>").appendTo(t),
i = $("<td>").appendTo(e);
return $('<table cellpadding="0" cellspacing="0">').appendTo(i)
}, o.prototype._labelToId = function(t) {
return "control" + t.replace(/(^| )\w/g, function(t) {
return "-" + t.trim().toLowerCase()
}) + Math.floor(1e3 * Math.random())
}, o.prototype.addRow = function(t) {
return $(document.createElement("tr")).appendTo(t)
}, o.prototype.addLabeledRow = function(t, e, i, o) {
var n, r = e && e.length > 0 ? $.t(e) : "",
s = $(document.createElement("tr")),
a = $(document.createElement("td")).html(r);
return o && a.attr("colspan", 2), i && (n = this._labelToId(e), i.attr("id", n), a.html(
'<label for="' + n + '">' + r + "</label>")), s.append(a).appendTo(t)
}, o.prototype.addEditorRow = function(t, e, i, o) {
var n = $(document.createElement("td"));
return i.row = this.addLabeledRow(t, e, i, o), i.appendTo(n.appendTo(i.row)), i
}, o.prototype.addColorPickerRow = function(t, e) {
return this.addEditorRow(t, e, this.createColorPicker())
}, o.prototype.addOffsetEditorRow = function(t, e) {
var i = $("<input/>");
return i.attr("type", "text"), i.css("width", "100px"), i.addClass("ticker"), this
.addEditorRow(t, e, i)
}, o.prototype.addFontEditorRow = function(t, e) {
return this.addEditorRow(t, e, this.createFontEditor())
}, o.prototype.refreshStateControls = function(t, e, i) {
var o, n, r;
for (o = 0; o < e.length; o++) {
n = e[o], r = t[n.id];
try {
r.toggle(this.parseRule(n.visible, e, i))
} catch (t) {
continue
}
r.attr("disabled", !this.parseRule(n.visible, e, i))
}
}, o.prototype.parseRule = function(t, e, i) {
if (!t) return !0;
var o = t.split("==");
return !(o.length < 2) && i[o[0]].value() === o[1]
}, o.prototype.destroy = function() {
for (var t = this._bindings.length; t--;) this._bindings[t].destroy();
this._bindings.length = 0
}, o.prototype.bindInteger = function(t, e, i, o, n) {
var l = [a(e.value())];
void 0 !== o && l.push(r(1)), void 0 !== n && l.push(s(1e3)), this.bindControl(new p(t,
e, l, !1, this.model(), i))
}, o.prototype.bindColor = function(t, e, i) {
this.bindControl(new T(t, e, !0, this.model(), i))
},
o.prototype.bindBoolean = function(t, e, i) {
this.bindControl(new b(t, e, !0, this.model(), i))
}, inherit(p, W), p.prototype.value = function() {
var t, e = this._control.val();
if (this._transformFunction)
if (Array.isArray(this._transformFunction))
for (t = 0; t < this._transformFunction.length; t++) e = this
._transformFunction[t](e);
else e = this._transformFunction(e);
return e
}, p.prototype.setValue = function(t) {
var e = this._control.val(),
i = this._formatValue(t);
e !== i && this._control.val(i)
}, p.prototype.setValueToProperty = function(t) {
this._setter ? this._setter.call(this, this.value()) : this._undoModel.setProperty(this
._property, t, this._undoText), this._changed = !1
}, inherit(_, p), inherit(f, W), f.prototype._forEachSubControl = function(t) {
this._subControlIds.forEach(function(e) {
var i = "#" + e,
o = this.control().find(i);
t.call(this, o)
}, this)
}, f.prototype._parseSessions = function(t) {
var e, i, o = t.split("-", 2);
return 2 !== o.length && (o = ["0", "0"]), e = parseInt(o[0]), i = parseInt(o[1]), [Math
.floor(e / 100), e % 100, Math.floor(i / 100), i % 100
]
}, f.prototype.value = function() {
var t, e, i, o = [];
return this._forEachSubControl(function(t) {
o.push(t.val())
}), t = function(t, e) {
return e.forEach(function(e) {
t = e(t)
}), ("0" + t).slice(-2)
}, e = [a(0), r(0), s(23)], i = [a(0), r(0), s(59)], t(o[0], e) + t(o[1], i) + "-" +
t(o[2], e) + t(o[3], i)
}, f.prototype.setValue = function(t) {
var e = this._parseSessions(t);
this._forEachSubControl(function(t) {
var i = t.val(),
o = ("0" + e[0]).slice(-2);
e.shift(), i !== o && t.val(o)
})
}, inherit(m, W), m.prototype.value = function() {
var t, e, i;
return this._disabled ? (this._control.attr("disabled", !0), null) : (t = this._control
.val(), e = this._toIntTransformer(t), e < 0 && (e = 0), i = this._mainSeries
.bars().size(), i <= e && (e = i - 1), 1e3 * A(this._mainSeries.bars().valueAt(
A(this._mainSeries.bars().lastIndex()) - e))[TradingView.TIME_PLOT])
}, m.prototype.setValue = function(t) {
var e, i, o;
return this._disabled || null == t ? void this._control.attr("disabled", !0) : t < 0 ? (
this._control.val(-t), void this._property.setValue(this.value())) : null === (
e = this._mainSeries.data().plotValueToTimePointIndex(t / 1e3, TradingView
.TIME_PLOT, R.FromRight)) ? void(this._disabled = !0) : (i = A(this
._mainSeries.bars().lastIndex()), o = i - e, void(this._control.val() !==
"" + o && this._control.val(o)))
}, inherit(g, W), g.prototype.value = function() {
return this._control.val()
}, g.prototype.setValue = function(t) {
var e = this.value();
t && e !== t && this._control.val(t)
}, inherit(v, W), v.prototype.value = function() {
var t = this._control.val();
return this._transformFunction && (t = this._transformFunction(t)), t
}, v.prototype.setValue = function(t) {
var e, i;
if (this._control.val(t), this._control.selectbox) try {
e = this._control.find("[value='" + t + "']"), e.length > 0 && (i = e[0], this
._control.selectbox("change", i.value, i.text))
} catch (t) {}
}, v.prototype.propertyChanged = function(t) {
var e = t.value();
"function" == typeof this._propertyChangedHook && (e = this._propertyChangedHook(e)),
this.setValue(e)
}, inherit(y, W), y.prototype.value = function() {
return this._property.value()
}, y.prototype.setValue = function(t) {
return this._control.html(t)
}, inherit(b, W), b.prototype.value = function() {
return this.control().is(":checked")
}, b.prototype.setValue = function(t) {
var e, i, o, n;
return this.control().is(".visibility-checker") && (t ? (this.control().closest("tr")
.find(".slider-range").slider("enable"), this.control().closest("tr").find(
'input[type="text"]').each(function() {
$(this).prop("disabled", !1)
})) : (this.control().closest("tr").find(".slider-range").slider("disable"),
this.control().closest("tr").find('input[type="text"]').each(function() {
$(this).prop("disabled", !0)
}))), this.control().is(".visibility-switch") && (e = {
opacity: t ? 1 : .5
}, i = t ? "enable" : "disable", o = this.control().data("hides"), o ? o
.closest("td").css(e) : (n = this.control(), n.parent().parent().data("visible",
t).find("td").filter(function() {
var t = $(this);
return !t.find("label").length && t.find(":checkbox").attr("id") !==
n.attr("id")
}).each(function() {
var o = $(this);
o.children().each(function() {
var n = $(this);
n.is(".ui-slider") ? n.slider(i) : n.is("select") ? (n
.selectbox(i), o.css(e)) : n.is(
".custom-select") ? (n.data(i)(), o.css(e)) : n
.is(".tvcolorpicker-container") ? (n.find("input")
.prop("disabled", !t), o.css(e)) : (n.prop(
"disabled", !t), o.css(e))
})
}))), this.control().attr("checked", !!t)
}, inherit(S, W), S.prototype.value = function() {
return this.control().is(":disabled")
}, S.prototype.setValue = function(t) {
return t = !!t, this._inverted && (t = !t), this.control().parents("label").toggleClass(
"disabled", t), this.control().attr("disabled", t)
}, inherit(w, W), w.prototype.value = function() {
return this.control().hasClass("active")
}, w.prototype.setValue = function(t) {
return this.control().toggleClass("active", !!t)
}, inherit(T, W), T.prototype.applyOldTransparency = function() {
var t, e, i;
this.transparencyProperty() && (F.isHexColor(this.property().value()) ? (t = this
.transparencyProperty().value ? this.transparencyProperty().value() : this
.transparencyProperty(), e = O(this.property().value()), i = (100 - t) /
100, this.control().val(V(D(e, i)))) : this.control().val(this.property()
.value()), this.control().change())
}, T.prototype.transparencyProperty = function() {
return this._transparencyProperty
}, T.prototype.value = function() {
return this._control.val()
}, T.prototype.setValue = function(t) {
this._control.val(t), this._control.change(), this._control.color && this._control.color
.fromString(t)
}, inherit(C, W), C.prototype.value = function() {
return this._control.slider("option", "value")
}, C.prototype.setValue = function(t) {
this._control.slider("option", "value", t)
}, inherit(x, b), x.prototype.onIntervalChanged = function() {
+this._intervalProperty.value() < 1440 ? this._control.attr({
disabled: !1,
checked: !!this._property.value()
}) : this._control.attr({
disabled: !0,
checked: !1
})
}, x.prototype.value = function() {
return this._control.is(":disabled") ? this._property.value() : b.prototype.value.call(
this)
}, x.prototype.setValue = function(t) {
if (!this._control.is(":disabled")) return b.prototype.setValue.call(this, t)
}, x.prototype.destroy = function() {
this._intervalProperty.listeners().unsubscribe(this, this.onIntervalChanged),
delete this._intervalProperty, b.prototype.destroy.call(this, arguments)
}, P.prototype._attachToControl = function(t) {
var e = this;
this._wv.subscribe(this._setValueBinded, {
callWithLast: !0
}), $(this._control).on("change", function() {
e.setValueToProperty(e.value())
})
}, P.prototype.control = function() {
return this._control
}, P.prototype.value = function() {
var t = $(this._control).val();
return this._transformFunction && (t = this._transformFunction(t)), t
}, P.prototype.setValue = function(t) {
$(this._control).val(t)
}, P.prototype.setValueToProperty = function(t) {
this._undoModel.undoHistory.setWatchedValue(this._wv, t, this._undoText)
}, P.prototype.watchedValue = function() {
return this._wv
}, P.prototype.destroy = function() {
this._wv.unsubscribe(this._setValueBinded)
}, inherit(L, P), L.prototype._attachToControl = function(t) {
var e = this;
this._wv.subscribe(this.setValue.bind(this), {
callWithLast: !0
}), $(this._control).on("click", function() {
e.setValueToProperty(e.value())
})
}, L.prototype.value = function() {
var t = $(this._control).attr("checked");
return this._not && (t = !t), this._transformFunction && (t = this._transformFunction(
t)), t
}, L.prototype.setValue = function(t) {
this._not && (t = !t), $(this._control).attr("checked", !!t)
}, I.prototype.properties = function() {
return this._properties
}, I.prototype.value = function(t) {
return this._control.slider("values", t)
}, I.prototype.setValue = function(t, e) {
this._control.slider("values", e, t.value()), this._inputsText && $(this._inputsText[e])
.val(t.value())
}, I.prototype.propertyChanged = function(t) {
this.setValue(t)
}, I.prototype.setValueToProperty = function(t, e) {
($(e).hasClass("from") || "from" === e) && (this._undoModel.beginUndoMacro(this
._undoText[0]), this._undoModel.setProperty(this._propFrom, t[0], this
._undoText[0]), this._propFrom.setValue(t[0], 0), this._undoModel
.endUndoMacro()), ($(e).hasClass("to") || "to" === e) && (this._undoModel
.beginUndoMacro(this._undoText[1]), this._undoModel.setProperty(this._propTo, t[1],
this._undoText[1]), this._propTo.setValue(t[1], 1), this._undoModel
.endUndoMacro())
}, I.prototype.destroy = function() {
this._propFrom && this._propTo && (this._propFrom.listeners().unsubscribe(this, W
.prototype.propertyChanged), this._propTo.listeners().unsubscribe(this, W
.prototype.propertyChanged))
}, inherit(k, W), k.prototype.value = function() {
var t = [];
return this._control.each(function() {
var e = $(this);
e.is(":checked") && t.push(e.attr("value"))
}), t.join(this._separator)
}, k.prototype.setValue = function(t) {
var e = t.split(this._separator).filter(Boolean);
this._control.each(function() {
var t = $(this),
i = -1 !== e.indexOf(t.attr("value"));
t.attr("checked", i), t.parents("label").toggleClass("active", i)
})
}, e.PropertyPage = o, e.UppercaseTransformer = n, e.GreateTransformer = r, e
.LessTransformer = s, e.ToIntTransformer = a, e.ToFloatTransformer = l, e
.ToFloatTransformerWithDynamicDefaultValue = c, e.ToFloatLimitedPrecisionTransformer = h, e
.ToAsciiTransformer = u, e.ReplaceEmptyTransformer = d, e.SimpleStringBinder = p, e
.FloatBinder = _, e.SessionBinder = f, e.BarTimeBinder = m, e.SymbolBinder = g, e
.SimpleComboBinder = v, e.StaticContentBinder = y, e.BooleanBinder = b, e.DisabledBinder =
S, e.ColorBinding = T, e.SliderBinder = C, e.CheckboxWVBinding = L, e.RangeBinder = I
}).call(e, i(25))
}, , function(t, e, i) {
(function(t) {
var e = {};
e.LINESTYLE_SOLID = 0, e.LINESTYLE_DOTTED = 1, e.LINESTYLE_DASHED = 2, e
.LINESTYLE_LARGE_DASHED = 3, e.LINESTYLE_SPARSE_DOTTED = 4, e.TEXTPOS_TOPLEFT = 0,
e.TEXTPOS_TOPCENTER = 1, e.TEXTPOS_TOPRIGHT = 2, e.TEXTPOS_MIDDLELEFT = 3, e
.TEXTPOS_MIDDLECENTER = 4, e.TEXTPOS_MIDDLERIGHT = 5, e.TEXTPOS_BOTTOMLEFT = 6, e
.TEXTPOS_BOTTOMCENTER = 7, e.TEXTPOS_BOTTOMRIGHT = 8, e.SIZE_AUTO = "auto", e.SIZE_TINY =
"tiny", e.SIZE_SMALL = "small", e.SIZE_NORMAL = "normal", e.SIZE_LARGE = "large", e
.SIZE_HUGE = "huge", e.MARKLOC_ABOVEBAR = "AboveBar", e.MARKLOC_BELOWBAR = "BelowBar", e
.MARKLOC_TOP = "Top", e.MARKLOC_BOTTOM = "Bottom", e.MARKLOC_RIGHT = "Right", e
.MARKLOC_LEFT = "Left", e.MARKLOC_ABSOLUTE = "Absolute", e.MARKLOC_ABSOLUTEUP =
"AbsoluteUp", e.MARKLOC_ABSOLUTEDOWN = "AbsoluteDown", e.HHISTLOC_RELATIVE = "relative", e
.HHISTLOC_ABSOLUTE = "absolute", e.HHISTDIR_LEFTTORIGHT = "left_to_right", e
.HHISTDIR_RIGHTTOLEFT = "right_to_left", void 0 !== t && t && t.exports && (t.exports = e)
}).call(e, i(42)(t))
}, function(t, e, i) {
"use strict";
function o(t) {
var e, i, o = (t + "").match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);
return null === o ? 0 : (e = o[1] ? o[1].length : 0, i = o[2] ? parseInt(o[2], 0) : 0, Math.max(0,
e - i))
}
function n(t) {
return t = Math.abs(t), !l.isInteger(t) && t > 1 && (t = parseFloat(("" + t).replace(/^.+\./,
"0."))), 0 < t && t < 1 ? Math.pow(10, o(t)) : 1
}
function r(t, e) {
var i, o, r, s, a, c;
t.trigger("tvticker-beforechange"), i = t.data("TVTicker"), o = i && i.step, r = 0, r = i.parser ? i
.parser(t.val()) : l.isInteger(o) ? parseInt(t.val(), 10) : parseFloat(t.val()), isNaN(r) && (
r = 0), s = n(o), a = Math.max(s, n(r)), c = e(r, a), i.formatter && (c = i.formatter(c)), t
.val(c), t.change()
}
function s(t) {
var e = t.data("TVTicker"),
i = e && e.step,
o = e && e.max;
r(t, function(t, e) {
var n = (Math.round(t * e) + Math.round(i * e)) / e;
return void 0 !== o && null !== o && o < n && (n = t), n
})
}
function a(t) {
var e = t.data("TVTicker"),
i = e && e.step,
o = e && e.min;
r(t, function(t, e) {
var n = (Math.round(t * e) - Math.round(i * e)) / e;
return void 0 !== o && null !== o && n < o && (n = t), n
})
}
var l, c;
Object.defineProperty(e, "__esModule", {
value: !0
}), i(13), i(283), l = i(15), c = i(297), $.fn.TVTicker = function(t) {
return void 0 === t && (t = {}), this.each(function() {
var e, i, o, n = !1,
r = $(this),
l = r.data("TVTicker");
l ? n = !0 : l = {
step: +r.data("step") || 1
}, "step" in t && (l.step = +t.step || l.step), "min" in t && (l.min = t.min),
"max" in t && (l.max = t.max), "formatter" in t && (l.formatter = t.formatter),
"parser" in t && (l.parser = t.parser), r.data("TVTicker", l), n || (e = $(
'<div class="tv-ticker">').appendTo(r.parent()), i = $(
'<div class="tv-ticker__btn tv-ticker__btn--up">').html(c).appendTo(e),
o = $('<div class="tv-ticker__btn tv-ticker__btn--down">').html(c).appendTo(
e), e.on("mousedown", function(t) {
t.preventDefault(), r.focus()
}), i.click(function() {
r.is(":disabled") || s(r)
}), o.click(function() {
r.is(":disabled") || a(r)
}), r.keydown(function(t) {
r.is(":disabled") || (38 === t.keyCode ? i.addClass("i-active") :
40 === t.keyCode && o.addClass("i-active"))
}), r.keyup(function(t) {
r.is(":disabled") || (38 === t.keyCode ? (s(r), i.removeClass(
"i-active")) : 40 === t.keyCode && (a(r), o.removeClass(
"i-active")))
}), r.mousewheel(function(t, e) {
e > 0 ? i.click() : o.click()
}))
})
}
}, , , function(t, e, i) {
var o, n;
! function(r, s) {
"object" == typeof t && t.exports ? t.exports = s() : (o = s, void 0 !== (n = "function" ==
typeof o ? o.call(e, i, e, t) : o) && (t.exports = n))
}(0, function() {
"use strict";
function t(t, e) {
var i, o = document.createElement(t || "div");
for (i in e) o[i] = e[i];
return o
}
function e(t) {
for (var e = 1, i = arguments.length; e < i; e++) t.appendChild(arguments[e]);
return t
}
function i(t, e, i, o) {
var n = ["opacity", e, ~~(100 * t), i, o].join("-"),
r = .01 + i / o * 100,
s = Math.max(1 - (1 - t) / e * (100 - r), t),
a = c.substring(0, c.indexOf("Animation")).toLowerCase(),
l = a && "-" + a + "-" || "";
return p[n] || (h.insertRule("@" + l + "keyframes " + n + "{0%{opacity:" + s + "}" + r +
"%{opacity:" + t + "}" + (r + .01) + "%{opacity:1}" + (r + e) % 100 +
"%{opacity:" + t + "}100%{opacity:" + s + "}}", h.cssRules.length), p[n] = 1), n
}
function o(t, e) {
var i, o, n = t.style;
if (e = e.charAt(0).toUpperCase() + e.slice(1), void 0 !== n[e]) return e;
for (o = 0; o < d.length; o++)
if (i = d[o] + e, void 0 !== n[i]) return i
}
function n(t, e) {
for (var i in e) t.style[o(t, i) || i] = e[i];
return t
}
function r(t) {
var e, i, o;
for (e = 1; e < arguments.length; e++) {
i = arguments[e];
for (o in i) void 0 === t[o] && (t[o] = i[o])
}
return t
}
function s(t, e) {
return "string" == typeof t ? t : t[e % t.length]
}
function a(t) {
this.opts = r(t || {}, a.defaults, _)
}
function l() {
function i(e, i) {
return t("<" + e + ' xmlns="urn:schemas-microsoft.com:vml" class="spin-vml">', i)
}
h.addRule(".spin-vml", "behavior:url(#default#VML)"), a.prototype.lines = function(t, o) {
function r() {
return n(i("group", {
coordsize: h + " " + h,
coordorigin: -c + " " + -c
}), {
width: h,
height: h
})
}
function a(t, a, l) {
e(d, e(n(r(), {
rotation: 360 / o.lines * t + "deg",
left: ~~a
}), e(n(i("roundrect", {
arcsize: o.corners
}), {
width: c,
height: o.scale * o.width,
left: o.scale * o.radius,
top: -o.scale * o.width >> 1,
filter: l
}), i("fill", {
color: s(o.color, t),
opacity: o.opacity
}), i("stroke", {
opacity: 0
}))))
}
var l, c = o.scale * (o.length + o.width),
h = 2 * o.scale * c,
u = -(o.width + o.length) * o.scale * 2 + "px",
d = n(r(), {
position: "absolute",
top: u,
left: u
});
if (o.shadow)
for (l = 1; l <= o.lines; l++) a(l, -2,
"progid:DXImageTransform.Microsoft.Blur(pixelradius=2,makeshadow=1,shadowopacity=.3)"
);
for (l = 1; l <= o.lines; l++) a(l);
return e(t, d)
}, a.prototype.opacity = function(t, e, i, o) {
var n = t.firstChild;
o = o.shadow && o.lines || 0, n && e + o < n.childNodes.length && (n = n.childNodes[
e + o], n = n && n.firstChild, (n = n && n.firstChild) && (n.opacity =
i))
}
}
var c, h, u, d = ["webkit", "Moz", "ms", "O"],
p = {},
_ = {
lines: 12,
length: 7,
width: 5,
radius: 10,
scale: 1,
corners: 1,
color: "#000",
opacity: .25,
rotate: 0,
direction: 1,
speed: 1,
trail: 100,
fps: 20,
zIndex: 2e9,
className: "spinner",
top: "50%",
left: "50%",
shadow: !1,
hwaccel: !1,
position: "absolute"
};
return a.defaults = {}, r(a.prototype, {
spin: function(e) {
var i, o, r, s, a, l, h, u, d, p;
return this.stop(), i = this, o = i.opts, r = i.el = t(null, {
className: o.className
}), n(r, {
position: o.position,
width: 0,
zIndex: o.zIndex,
left: o.left,
top: o.top
}), e && e.insertBefore(r, e.firstChild || null), r.setAttribute("role",
"progressbar"), i.lines(r, i.opts), c || (s = 0, a = (o.lines - 1) *
(1 - o.direction) / 2, h = o.fps, u = h / o.speed, d = (1 - o
.opacity) / (u * o.trail / 100), p = u / o.lines,
function t() {
s++;
for (var e = 0; e < o.lines; e++) l = Math.max(1 - (s + (o
.lines - e) * p) % u * d, o.opacity), i.opacity(r, e * o
.direction + a, l, o);
i.timeout = i.el && setTimeout(t, ~~(1e3 / h))
}()), i
},
stop: function() {
var t = this.el;
return t && (clearTimeout(this.timeout), t.parentNode && t.parentNode
.removeChild(t), this.el = void 0), this
},
lines: function(o, r) {
function a(e, i) {
return n(t(), {
position: "absolute",
width: r.scale * (r.length + r.width) + "px",
height: r.scale * r.width + "px",
background: e,
boxShadow: i,
transformOrigin: "left",
transform: "rotate(" + ~~(360 / r.lines * h + r.rotate) +
"deg) translate(" + r.scale * r.radius + "px,0)",
borderRadius: (r.corners * r.scale * r.width >> 1) + "px"
})
}
for (var l, h = 0, u = (r.lines - 1) * (1 - r.direction) / 2; h < r
.lines; h++) l = n(t(), {
position: "absolute",
top: 1 + ~(r.scale * r.width / 2) + "px",
transform: r.hwaccel ? "translate3d(0,0,0)" : "",
opacity: r.opacity,
animation: c && i(r.opacity, r.trail, u + h * r.direction, r
.lines) + " " + 1 / r.speed + "s linear infinite"
}), r.shadow && e(l, n(a("#000", "0 0 4px #000"), {
top: "2px"
})), e(o, e(l, a(s(r.color, h), "0 0 1px rgba(0,0,0,.1)")));
return o
},
opacity: function(t, e, i) {
e < t.childNodes.length && (t.childNodes[e].style.opacity = i)
}
}), "undefined" != typeof document && (h = function() {
var i = t("style", {
type: "text/css"
});
return e(document.getElementsByTagName("head")[0], i), i.sheet || i.styleSheet
}(), u = n(t("group"), {
behavior: "url(#default#VML)"
}), !o(u, "transform") && u.adj ? l() : c = o(u, "animation")), a
})
}, function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
});
! function(t) {
t[t.Bars = 0] = "Bars", t[t.Line = 1] = "Line", t[t.OpenClose = 2] = "OpenClose", t[t.LineOpen =
3] = "LineOpen", t[t.LineHigh = 4] = "LineHigh", t[t.LineLow = 5] = "LineLow", t[t.LineHL2 =
6] = "LineHL2"
}(e.LineToolBarsPatternMode || (e.LineToolBarsPatternMode = {}))
}, function(t, e, i) {
(function(t) {
function o(t, e, i, o, n) {
c.call(this, t, e), this._study = i, this._showOnlyConfirmInputs = o, this
._symbolSearchZindex = n, this.prepareLayout(), this._$symbolSearchPopup = null
}
var n = i(238),
r = n.UppercaseTransformer,
s = n.SymbolBinder,
a = n.BarTimeBinder,
l = n.SessionBinder,
c = n.PropertyPage,
h = n.GreateTransformer,
u = n.LessTransformer,
d = n.ToIntTransformer,
p = n.ToFloatTransformer,
_ = n.SimpleComboBinder,
f = n.BooleanBinder,
m = n.SimpleStringBinder,
g = i(71),
v = i(89).NumericFormatter,
y = i(33),
b = i(7).getLogger("Chart.Study.PropertyPage.Inputs");
inherit(o, c), o.prototype._addSessionEditor = function(t, e, i, o) {
var n, r, s, a, c, h;
if ("session" !== i.type) return void b.logError(
"Session editor adding FAILED: wrong input type.");
n = function(t, e) {
var i, o = $("<td/>");
o.appendTo(t), o.css("padding-left", "0px"), o.css("padding-right", "0px"), i =
$("<input>"), i.attr("type", "text"), i.addClass("ticker"), i.css("width",
"40px"), i.attr("id", e), i.appendTo(o)
}, r = function(t, e, i) {
var o, n = $("<td/>");
n.css("padding-left", i), n.css("padding-right", i), n.appendTo(t), o = $(
"<div/>"), o.appendTo(n), o.append(e), o.css("font-size", "150%")
}, s = $("<table/>"), s.appendTo(t), a = $("<tr/>"), a.appendTo(s), c = [
"start_hours", "start_minutes", "end_hours", "end_minutes"
], n.call(this, a, c[0]), r.call(this, a, ":", 0), n.call(this, a, c[1]), r.call(
this, a, "-", 4), n.call(this, a, c[2]), r.call(this, a, ":", 0), n.call(this,
a, c[3]), h = !1, this.bindControl(new l(a, c, e, h, this.model(), o))
}, o.prototype.prepareLayoutImpl = function(e, i) {
function o(t) {
return (new v).format(t)
}
function n(t) {
return function(e) {
var i, o, n, r = this,
s = null;
if (0 === e.indexOf("#")) {
if (i = e.slice(1, e.indexOf("$")), null === (o = it._model.model()
.getStudyById(i))) return void b.logError(
"Can not get Study by id " + i);
if (o.isStarted() || o.start(null, !0),
!(n = o.sourceId())) return void b.logError(
"Can not get source id for " + o.metaInfo().id);
s = e.replace(/^[^\$]+/, n)
}!~e.indexOf("$") && !~e.indexOf("#") || it._study.isStarted() || it._study
.start(null, !0), it._study.testInputValue(t, e) ? r.setValueToProperty(
s || r.value()) : r.setValue(it._property.inputs[t.id].value())
}
}
function l(t) {
return function(e) {
var i, o, n, r;
if (t.hasOwnProperty(e) || 0 === e.indexOf("#") || !~e.indexOf("$"))
return e;
for (i = e.slice(0, e.indexOf("$")), o = it._model.model().allStudies(), n =
0; n < o.length; ++n)
if (r = o[n], r.sourceId() === i) {
e = e.replace(/^[^\$]+/, "#" + r.id());
break
} return e
}
}
var c, S, w, T, C, x, P, L, I, k, A, M, E, D, V, O, R, B, z, F, N, W, H, U, j, q, G, Y,
K, Z, X, J, Q, tt, et, it = this;
for (c = 0; c < e.inputs.length; c++)
if (S = e.inputs[c], "first_visible_bar_time" !== (w = S.id) &&
"last_visible_bar_time" !== w && "time" !== S.type && !S.isHidden && (!this
._showOnlyConfirmInputs || S.confirm) && void 0 === S.groupId) {
if (T = S.name || w.toLowerCase().replace(/\b\w/g, function(t) {
return t.toUpperCase()
}), C = "Change " + T, x = $("<tr/>"), x.appendTo(i), P = $("<td/>"), P
.appendTo(x), P.addClass("propertypage-name-label"), P.text($.t(T, {
context: "input"
})), L = $("<td/>"), L.appendTo(x), I = null, k = null, A = null,
"resolution" === S.type) I = $(
'<select><option value="1">1</option><option value="3">3</option><option value="5">5</option><option value="15">15</option><option value="30">30</option><option value="45">45</option><option value="60">1' +
$.t("h", {
context: "interval_short"
}) + '</option><option value="120">2' + $.t("h", {
context: "interval_short"
}) + '</option><option value="180">3' + $.t("h", {
context: "interval_short"
}) + '</option><option value="D">1' + $.t("D", {
context: "interval_short"
}) + '</option><option value="W">1' + $.t("W", {
context: "interval_short"
}) + "</option></select>");
else if ("symbol" === S.type) I = $('<input class="symbol-edit single">'), g
.bindToInput(I, {
onPopupOpen: function(t) {
this._$symbolSearchPopup = t, this._symbolSearchZindex && t
.css("z-index", this._symbolSearchZindex)
}.bind(this),
onPopupClose: function() {
this._$symbolSearchPopup = null
}.bind(this)
});
else if ("session" === S.type) this._addSessionEditor(L, this._property.inputs[
w], S, C);
else if ("source" === S.type) {
for (M = {}, E = {
open: window.t("open"),
high: window.t("high"),
low: window.t("low"),
close: window.t("close"),
hl2: window.t("hl2"),
hlc3: window.t("hlc3"),
ohlc4: window.t("ohlc4")
}, D = Object.keys(E), V = 0; V < D.length; ++V) M[D[V]] || (M[D[V]] =
D[V]);
if (O = this._study && this._study.isChildStudy()) {
R = this._study.source(), B = R.title(!0, null, !0), z = y
.getChildSourceInputTitles(S, this._study.source().metaInfo(), B);
for (F in M) z[F] && (M[F] = 1 === Object.keys(z).length ? B : z[F])
}
if (t.enabled("study_on_study") && this._study && y.isSourceInput(S) && (
O || y.canBeChild(this._study.metaInfo()))) {
for (N = [this._study], N = N.concat(this._study.getAllChildren()), W =
this._model.model().allStudies(), H = 0; H < W.length; ++H)
if (U = W[H], -1 === N.indexOf(U) && U.canHaveChildren())
if (j = U.title(!0, null, !0), q = U.sourceId() || "#" + U.id(),
G = U.metaInfo(), Y = G.styles, K = G.plots || [], 1 === K
.length) M[q + "$0"] = j;
else
for (V = 0; V < K.length; ++V) Z = K[V], ~y
.CHILD_STUDY_ALLOWED_PLOT_TYPES.indexOf(Z.type) && (M[
q + "$" + V] = j + ": " + (Y && Y[Z.id] && Y[Z
.id].title || Z.id));
k = n(S), A = l(M)
}
I = $(document.createElement("select"));
for (X in M) J = E[X] || M[X], $("<option>").attr("value", X).text(J)
.appendTo(I);
L.addClass("js-value-cell")
} else if (S.options)
for (I = $("<select/>"), H = 0; H < S.options.length; H++) X = S.options[H],
$("<option value='" + X + "'>" + X + "</option>").appendTo(I);
else I = $("<input/>"), "bool" === S.type ? I.attr("type", "checkbox") : I.attr(
"type", "text");
I && (I.appendTo(L), I.is(":checkbox") || I.css("width", "100px")), S.options ?
this.bindControl(new _(I, this._property.inputs[w], null, !0, this.model(),
C, k, A)) : "bar_time" === S.type ? (Q = 10, this.bindControl(new a(I,
this._property.inputs[w], !0, this.model(), C, this.model()
.mainSeries(), Q)), I.addClass("ticker")) : "integer" === S.type ? (
tt = [d(S.defval)], (0 === S.min || S.min) && tt.push(h(S.min)), (0 ===
S.max || S.max) && tt.push(u(S.max)), this.bindControl(new m(I, this
._property.inputs[w], tt, !1, this.model(), C)), I.addClass(
"ticker"), isFinite(S.step) && S.step > 0 && I.attr("data-step", S
.step)) : "float" === S.type ? (tt = [p(S.defval)], (0 === S.min ||
S.min) && tt.push(h(S.min)), (0 === S.max || S.max) && tt.push(u(S
.max)), et = new m(I, this._property.inputs[w], tt, !1, this
.model(), C), et.addFormatter(o), this.bindControl(et), I.addClass(
"ticker"), isFinite(S.step) && S.step > 0 && I.attr("data-step", S
.step)) : "text" === S.type ? this.bindControl(new m(I, this._property
.inputs[w], null, !1, this.model(), C)) : "bool" === S.type ? this
.bindControl(new f(I, this._property.inputs[w], !0, this.model(), C)) :
"resolution" === S.type ? this.bindControl(new _(I, this._property.inputs[
w], r, !0, this.model(), "Change Interval")) : "symbol" === S.type &&
this.bindControl(new s(I, this._property.inputs[w], !0, this.model(),
"Change Symbol"))
} this._property.offset && (T = this._property.offset.title ? this._property.offset
.title.value() : $.t("Offset"), I = this.addOffsetEditorRow(i, T), tt = [d(this
._property.offset.val)], tt.push(h(this._property.offset.min)), tt.push(u(
this._property.offset.max)), this.bindControl(new m(I, this._property.offset
.val, tt, !1, this.model(), "Undo " + T))), this._property.offsets && $
.each(e.plots, function(t, e) {
var o, n, r, s;
this._property.offsets[e.id] && (o = this._property.offsets[e.id],
void 0 !== o.isHidden && o.isHidden.value() || (n = o.title.value(),
r = this.addOffsetEditorRow(i, n), s = [d(o.val)], s.push(h(o
.min)), s.push(u(o.max)), this.bindControl(new m(r, o.val,
s, !1, this.model(), "Undo " + n))))
}.bind(this))
}, o.prototype.prepareLayout = function() {
this._table = $("<table/>"), this._table.addClass("property-page"), this._table.attr(
"cellspacing", "0"), this._table.attr("cellpadding", "2");
var t = this._study.metaInfo();
this.prepareLayoutImpl(t, this._table), this.loadData()
}, o.prototype.symbolSearchPopup = function() {
return this._$symbolSearchPopup
}, o.prototype.widget = function() {
return this._table
}, e.StudyInputsPropertyPage = o
}).call(e, i(5))
}, function(t, e, i) {
"use strict";
function o(t) {
this._data = t, this.bars = t.bars, this._barWidth = n.optimalBarWidth(t.barSpacing), this
._barBorderWidth = 1
}
var n = i(45),
r = i(11);
o.prototype.draw = function(t) {
var e, i, o, n, r, s, a, l, c, h, u, d, p, _, f = this.bars,
m = this._data.barSpacing,
g = this._data.drawWick,
v = this._data.drawBorder,
y = this._data.wickColor,
b = this._barBorderWidth,
S = this._barWidth;
if (t.lineCap = "square", t.lineStyle = this._data.lineStyle, m < 1) {
if (g) {
for (t.strokeStyle = y, t.lineWidth = 1, t.beginPath(), h = f.length; h-- > 0;) u = f[
h], t.moveTo(u.time, u.low), t.lineTo(u.time, u.high);
t.stroke()
}
for (t.lineWidth = 1, d = "", p = !1, t.beginPath(), h = f.length; h-- > 0;) u = f[h], c = u
.time, d !== u.color && (p && (t.stroke(), t.beginPath(), p = !1), t.strokeStyle = u
.color, d = u.color), t.moveTo(u.time, u.open), t.lineTo(u.time, u.close), p = !0;
p && t.stroke()
} else {
if (f = f.slice().sort(function(t, e) {
return t.color > e.color ? -1 : t.color < e.color ? 1 : 0
}), t.translate(-.5, -.5), t.lineWidth = b, g)
for (_ = y, t.fillStyle = y, h = f.length; h--;) u = f[h], c = u.time, e = u.open, i = u
.high, o = u.low, n = u.close, u.wickColor && u.wickColor !== _ && (t.fillStyle = u
.wickColor, _ = u.wickColor), a = Math.min(e, n), l = Math.max(e, n), u.hollow ?
(t.fillRect(c, i, 1, a - i), t.fillRect(c, l, 1, o - l)) : t.fillRect(c, i, 1, o -
i);
if (v)
for (h = f.length; h--;) u = f[h], f[h + 1] && u.borderColor === f[h + 1].borderColor ||
(t.fillStyle = u.borderColor), u.hollow || (c = u.time, e = u.open, n = u.close, r =
Math.round(c - S), s = Math.round(c + S), a = Math.min(e, n), l = Math.max(e,
n), t.fillRect(r, a, s - r + 1, l - a + 1));
for (h = f.length; h--;) u = f[h], c = u.time, e = u.open, i = u.high, o = u.low, n = u
.close, r = Math.round(c - S), s = Math.round(c + S), a = Math.min(e, n), l = Math.max(
e, n), f[h + 1] && u.color === f[h + 1].color || (t.strokeStyle = u.color), t
.fillStyle = u.color, Math.abs(a - l) <= 1 && (t.fillStyle = u.borderColor), u.hollow ?
(t.translate(-.5, -.5), t.strokeRect(r + 1, a + 1, s - r, l - a), t.translate(.5, .5)) :
(v && (r += 1, a += 1, s -= 1, l -= 1), t.fillRect(r, a, s - r + 1, l - a + 1))
}
}, o.prototype.hitTest = function(t) {
var e, i, o, s, a = this.bars,
l = .5 * this._data.barSpacing;
if (0 === a.length) return null;
if (t.x < a[0].time - l) return null;
if (t.x > a[a.length - 1].time + l) return null;
for (e = null, i = 0; i < a.length; ++i)
if (o = a[i], t.x <= o.time + l) {
e = o;
break
} return s = n.selectionTolerance(this._barBorderWidth), e && e.high - s <= t.y && t.y <= e
.low + s ? this._data.hittest || new r(r.REGULAR) : null
}, e.PaneRendererCandles = TradingView.PaneRendererCandles = o
}, function(t, e, i) {
"use strict";
function o(t) {
return "alwaysOn" === t || "alwaysOff" === t ? t : "visibleOnMouseOver"
}
function n() {
if (!c) {
var t = "NavigationButtons.visibility";
c = new a, c.setValue(o(l.getValue(t))), c.subscribe(c, function(e) {
l.setValue(t, o(e.value()))
})
}
return c
}
function r() {
return [{
value: "visibleOnMouseOver",
title: window.t("Visible on Mouse Over")
}, {
value: "alwaysOn",
title: window.t("Always Visible")
}, {
value: "alwaysOff",
title: window.t("Always Invisible")
}]
}
function s() {
var t, e;
return h || (h = new a, t = n(), e = function() {
var e = t.value();
"alwaysOn" !== e && "alwaysOff" !== e && (e = Modernizr.touch ? "alwaysOn" :
"visibleOnMouseOver"), h && h.setValue(e)
}, t.subscribe(h, e), e()), h
}
var a, l, c, h;
Object.defineProperty(e, "__esModule", {
value: !0
}), i(12), i(43), a = i(25), l = i(24), e.property = n, e.availableValues = r, e.actualBehavior = s
}, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , function(t, e,
i) {
"use strict";
function o(t) {
window.t = t
}
function n(t) {
r.$ || (r.$ = {}), r.$.t = t
}
var r, s;
Object.defineProperty(e, "__esModule", {
value: !0
}), r = window,
e.addTranslationFunctionToWindow = o, e.addTranslationFunctionToJQuery = n, s = function(t, e) {
return t
}, e.translationFunction = s
}, function(t, e, i) {
"use strict";
! function(t) {
if (document.createElement("canvas") && document.createElement("canvas").getContext) {
var e = function(e) {
var i = e.backingStorePixelRatio || e.webkitBackingStorePixelRatio || e
.mozBackingStorePixelRatio || e.msBackingStorePixelRatio || e
.oBackingStorePixelRatio || e.backingStorePixelRatio || 1;
return (t.devicePixelRatio || 1) / i
}(document.createElement("canvas").getContext("2d"));
e <= 1 || (t.hidpiCanvasRatio = e, function(t) {
var i, o = function(t, e) {
for (var i in t) t.hasOwnProperty(i) && e(t[i], i)
},
n = {
fillRect: "all",
clearRect: "all",
strokeRect: "all",
moveTo: "all",
lineTo: "all",
arc: [0, 1, 2],
arcTo: "all",
bezierCurveTo: "all",
isPointinPath: "all",
isPointinStroke: "all",
quadraticCurveTo: "all",
rect: "all",
translate: "all",
createRadialGradient: "all",
createLinearGradient: "all",
drawImagePatchedSource: [1, 2, 3, 4]
};
t.drawImagePatchedSource = t.drawImage, i = t.drawImage, t
.drawImagePatchedSourceAndDest = function(t) {
var o, n = Array.prototype.slice.call(arguments);
for (o = 1; o < n.length; ++o) n[o] && (n[o] *= e);
return n.length > 5 && ("width" in t && (n[3] = Math.min(t.width, Math.max(
1, n[3]))), "height" in t && (n[4] = Math.min(t.height, Math
.max(1, n[4])))), i.apply(this, n)
}, o(n, function(i, o) {
var n = t[o];
t[o] = function() {
var t, o;
if ("all" === i)
for (o = [], t = arguments.length; 0 < t--;) o[t] =
arguments[t] * e;
else
for (o = Array.prototype.slice.call(arguments), t = i
.length; 0 < t--;) o[i[t]] && (o[i[t]] = o[i[t]] * e);
return n.apply(this, o)
}
}), t.drawImage = function(t) {
return function() {
return arguments[0] instanceof HTMLCanvasElement ? t
.drawImagePatchedSourceAndDest.apply(this, arguments) : t
.drawImagePatchedSource.apply(this, arguments)
}
}(t), t.fillText = function(t) {
return function() {
var i = Array.prototype.slice.call(arguments);
i[1] *= e, i[2] *= e, this.font = this.font.replace(
/(\d+)(px|em|rem|pt)/g,
function(t, i, o) {
return i * e + o
}), t.apply(this, i), this.font = this.font.replace(
/(\d+)(px|em|rem|pt)/g,
function(t, i, o) {
return i / e + o
})
}
}(t.fillText), t.strokeText = function(t) {
return function() {
var i = Array.prototype.slice.call(arguments);
i[1] *= e, i[2] *= e, this.font = this.font.replace(
/(\d+)(px|em|rem|pt)/g,
function(t, i, o) {
return i * e + o
}), t.apply(this, i), this.font = this.font.replace(
/(\d+)(px|em|rem|pt)/g,
function(t, i, o) {
return i / e + o
})
}
}(t.strokeText)
}(CanvasRenderingContext2D.prototype), function(t) {
t.getContext = function(t) {
return function(i) {
var o = t.call(this, i);
return "2d" === i && this.width !== Math.floor(parseInt(this.style
.width) * e) && (this.style.height = this.height + "px",
this.style.width = this.width + "px", this.width *= e, this
.height *= e), o
}
}(t.getContext)
}(HTMLCanvasElement.prototype))
}
}(window)
}, function(t, e, i) {
(function(t) {
TradingView.cleanButAmpersand = function(t, e) {
var i = e ? ["&amp;"] : ["&"];
return TradingView.clean(t, e, i)
}, TradingView.strip_tags = function(t) {
return t && t.replace ? t.replace(/(<([^>]+)>)/gi, "") : t
}, TradingView.encodeSpread = function(t) {
return encodeURIComponent(t)
}, TradingView.clean = function(t, e, i) {
var o, n, r, s = [
["&", "&amp;"],
["<", "&lt;"],
[">", "&gt;"],
['"', "&quot;"],
["'", "&#039;"],
["'", "&#39;"]
],
a = t;
if (!t || !t.replace) return a;
for (o = 0; o < s.length; o++) n = s[o][0], r = s[o][1], i && i.indexOf && -1 !== i
.indexOf(e ? r : n) || (a = e ? a.replace(RegExp(r, "g"), n) : a.replace(RegExp(n,
"g"), r));
return a
}, void 0 !== t && t && t.exports && (t.exports = {
clean: TradingView.clean,
cleanButAmpersand: TradingView.cleanButAmpersand,
stripTags: TradingView.strip_tags
})
}).call(e, i(42)(t))
}, function(t, e) {}, function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 8" width="16" height="8"><path d="M0 1.475l7.396 6.04.596.485.593-.49L16 1.39 14.807 0 7.393 6.122 8.58 6.12 1.186.08z"/></svg>'
}, function(t, e, i) {
"use strict";
function o(t, e, i, o, n) {
function r(t) {
return e && e[t] ? e[t] : t
}
function s(t, e, i, o) {
var n = r(e[0]);
return !!t.hasOwnProperty(n) && (e.length > 1 ? s(t[n], e.slice(1), i) : (t[n] && t[n]
.setValue ? t[n].setValue(i) : t[n] = i, !0))
}
function a(t) {
i || f.logWarn("Path `" + t + "` does not exist.")
}
var l, c, h, u;
if (o)
for (l in o) c = l.split("."), h = r(c[0]), u = void 0 !== n && n === c[0], 0 !== c.length &&
u && (c = c.slice(1), h = r(c[0])), 0 !== c.length && t.hasOwnProperty(h) ? s(t, c, o[l]) ||
a(l) : u && a(l)
}
function n(t, e, i, n) {
window.__defaultsOverrides && o(t, e, i, window.__defaultsOverrides, n)
}
function r() {
var t = /^linetool.+/;
Object.keys(TradingView.defaultProperties).forEach(function(e) {
t.test(e) && n(TradingView.defaultProperties[e], null, !1, e)
})
}
function s(t, e) {
return e ? l(t, e) : a(t)
}
function a(t) {
var e, i = m(t);
return window._UNIT_TESTS || (e = TradingView.clone(TVSettings.getJSON(t, null))) && TradingView
.merge(i, e), i
}
function l(t, e) {
var i, o, n = m(t);
return window._UNIT_TESTS || (i = TradingView.clone(TVSettings.getJSON(t, null)), t.startsWith(
"study_") && i && d.isVersionHead(i.version) && (o = e.updateStudyState(i, i), i = o),
TradingView.merge(n, i)), n
}
var c = i(49),
h = i(299).LineToolPitchforkStyle,
u = i(245).LineToolBarsPatternMode,
d = i(84),
p = i(111).PlotType,
_ = i(74).LineEnd,
f = i(7).getLogger("Chart.Defaults"),
m = function(t) {
var e, i, o, s, a, l, d, f, m = {
a: function(t, e) {
return {
color: t,
visible: e
}
},
b: function(t, e, i) {
return {
coeff: t,
color: e,
visible: i
}
},
c: function(t, e, i, o, n) {
return {
coeff: t,
color: e,
visible: i,
linestyle: void 0 === o ? CanvasEx.LINESTYLE_SOLID : o,
linewidth: void 0 === n ? 1 : n
}
},
d: function(t, e, i) {
return {
color: t,
width: i,
visible: e
}
},
e: function(t, e, i, o, n) {
return {
color: t,
visible: e,
width: i,
x: o,
y: n
}
},
f: function(t, e, i, o, n, r) {
return {
coeff1: t,
coeff2: e,
color: i,
visible: o,
linestyle: void 0 === n ? CanvasEx.LINESTYLE_SOLID : n,
linewidth: void 0 === r ? 1 : r
}
}
};
if (void 0 === TradingView.defaultProperties) {
switch (window.locale) {
case "ar_AE":
e = "Asia/Dubai";
break;
case "au":
e = "Australia/Sydney";
break;
case "br":
e = "America/Sao_Paulo";
break;
case "ca":
e = "America/Toronto";
break;
case "de_DE":
case "it":
e = "Europe/Berlin";
break;
case "es":
e = "Europe/Madrid";
break;
case "fa_IR":
e = "Asia/Tehran";
break;
case "fr":
case "sv_SE":
e = "Europe/Paris";
break;
case "he_IL":
case "tr":
e = "Europe/Athens";
break;
case "hu_HU":
case "pl":
e = "Europe/Warsaw";
break;
case "id":
case "th_TH":
case "vi_VN":
e = "Asia/Bangkok";
break;
case "in":
e = "Asia/Kolkata";
break;
case "ja":
case "kr":
e = "Asia/Tokyo";
break;
case "ms_MY":
e = "Asia/Singapore";
break;
case "ru":
e = "Europe/Moscow";
break;
case "uk":
e = "Europe/London";
break;
case "zh_CN":
case "zh_TW":
e = "Asia/Shanghai";
break;
default:
e = "Etc/UTC"
}
TradingView.defaultProperties = {
chartproperties: {
timezone: e,
dataWindowProperties: {
background: "rgba( 255, 254, 206, 0.2)",
border: "rgba( 96, 96, 144, 1)",
font: "Verdana",
fontBold: !1,
fontItalic: !1,
fontSize: 10,
transparency: 80,
visible: !0
},
paneProperties: {
background: "#ffffff",
gridProperties: {
color: "#e1ecf2",
style: CanvasEx.LINESTYLE_SOLID
},
vertGridProperties: {
color: "#e1ecf2",
style: CanvasEx.LINESTYLE_SOLID
},
horzGridProperties: {
color: "#e1ecf2",
style: CanvasEx.LINESTYLE_SOLID
},
crossHairProperties: {
color: "rgba( 152, 152, 152, 1)",
style: CanvasEx.LINESTYLE_DASHED,
transparency: 0,
width: 1
},
topMargin: 5,
bottomMargin: 5,
leftAxisProperties: {
autoScale: !0,
autoScaleDisabled: !1,
lockScale: !1,
percentage: !1,
percentageDisabled: !1,
log: !1,
logDisabled: !1,
alignLabels: !0
},
rightAxisProperties: {
autoScale: !0,
autoScaleDisabled: !1,
lockScale: !1,
percentage: !1,
percentageDisabled: !1,
log: !1,
logDisabled: !1,
alignLabels: !0
},
legendProperties: {
showStudyArguments: !0,
showStudyTitles: !0,
showStudyValues: !0,
showSeriesTitle: !0,
showSeriesOHLC: !0,
showLegend: !0
}
},
scalesProperties: {
showLeftScale: !1,
showRightScale: !0,
backgroundColor: "#ffffff",
lineColor: "#555",
textColor: "#555",
fontSize: 11,
scaleSeriesOnly: !1,
showSeriesLastValue: !0,
showSeriesPrevCloseValue: !1,
showStudyLastValue: !1,
showSymbolLabels: !1,
showStudyPlotLabels: !1
},
mainSeriesProperties: {
style: c.STYLE_CANDLES,
esdShowDividends: !0,
esdShowSplits: !0,
esdShowEarnings: !0,
esdShowBreaks: !1,
esdBreaksStyle: {
color: "rgba( 235, 77, 92, 1)",
style: CanvasEx.LINESTYLE_DASHED,
width: 1
},
esdFlagSize: 2,
showCountdown: !0,
showInDataWindow: !0,
visible: !0,
silentIntervalChange: !1,
showPriceLine: !0,
priceLineWidth: 1,
priceLineColor: "",
showPrevClosePriceLine: !1,
prevClosePriceLineWidth: 1,
prevClosePriceLineColor: "rgba( 85, 85, 85, 1)",
minTick: "default",
extendedHours: !1,
sessVis: !1,
statusViewStyle: {
fontSize: 17,
showExchange: !0,
showInterval: !0,
showSymbolAsDescription: !1
},
candleStyle: {
upColor: "#53b987",
downColor: "#eb4d5c",
drawWick: !0,
drawBorder: !0,
borderColor: "#378658",
borderUpColor: "#53b987",
borderDownColor: "#eb4d5c",
wickColor: "#737375",
wickUpColor: "#a9cdd3",
wickDownColor: "#f5a6ae",
barColorsOnPrevClose: !1
},
hollowCandleStyle: {
upColor: "rgba( 83, 185, 135, 1)",
downColor: "rgba( 255, 77, 92, 1)",
drawWick: !0,
drawBorder: !0,
borderColor: "rgba( 55, 134, 88, 1)",
borderUpColor: "rgba( 83, 185, 135, 1)",
borderDownColor: "rgba( 255, 77, 92, 1)",
wickColor: "rgba( 115, 115, 117, 1)",
wickUpColor: "rgba( 169, 220, 195, 1)",
wickDownColor: "rgba( 245, 166, 174, 1)"
},
haStyle: {
upColor: "rgba( 83, 185, 135, 1)",
downColor: "rgba( 255, 77, 92, 1)",
drawWick: !0,
drawBorder: !0,
borderColor: "rgba( 55, 134, 88, 1)",
borderUpColor: "rgba( 83, 185, 135, 1)",
borderDownColor: "rgba( 255, 77, 92, 1)",
wickColor: "rgba( 115, 115, 117, 1)",
wickUpColor: "rgba( 83, 185, 135, 1)",
wickDownColor: "rgba( 255, 77, 92, 1)",
showRealLastPrice: !1,
barColorsOnPrevClose: !1,
inputs: {},
inputInfo: {}
},
barStyle: {
upColor: "rgba( 83, 185, 135, 1)",
downColor: "rgba( 255, 77, 92, 1)",
barColorsOnPrevClose: !1,
dontDrawOpen: !1
},
lineStyle: {
color: "rgba( 60, 120, 216, 1)",
linestyle: CanvasEx.LINESTYLE_SOLID,
linewidth: 1,
priceSource: "close",
styleType: c.STYLE_LINE_TYPE_SIMPLE
},
areaStyle: {
color1: "rgba( 96, 96, 144, 0.5)",
color2: "rgba( 1, 246, 245, 0.5)",
linecolor: "rgba( 0, 148, 255, 1)",
linestyle: CanvasEx.LINESTYLE_SOLID,
linewidth: 1,
priceSource: "close",
transparency: 50
},
priceAxisProperties: {
autoScale: !0,
autoScaleDisabled: !1,
lockScale: !1,
percentage: !1,
percentageDisabled: !1,
log: !1,
logDisabled: !1
},
renkoStyle: {
upColor: "rgba( 83, 185, 135, 1)",
downColor: "rgba( 255, 77, 92, 1)",
borderUpColor: "rgba( 83, 185, 135, 1)",
borderDownColor: "rgba( 255, 77, 92, 1)",
upColorProjection: "rgba( 169, 220, 195, 1)",
downColorProjection: "rgba( 245, 166, 174, 1)",
borderUpColorProjection: "rgba( 169, 220, 195, 1)",
borderDownColorProjection: "rgba( 245, 166, 174, 1)",
wickUpColor: "rgba( 83, 185, 135, 1)",
wickDownColor: "rgba( 255, 77, 92, 1)",
inputs: {
source: "close",
boxSize: 3,
style: "ATR",
atrLength: 14,
wicks: !0
},
inputInfo: {
source: {
name: "Source"
},
boxSize: {
name: "Box size"
},
style: {
name: "Style"
},
atrLength: {
name: "ATR Length"
},
wicks: {
name: "Wicks"
}
}
},
pbStyle: {
upColor: "rgba( 83, 185, 135, 1)",
downColor: "rgba( 255, 77, 92, 1)",
borderUpColor: "rgba( 83, 185, 135, 1)",
borderDownColor: "rgba( 255, 77, 92, 1)",
upColorProjection: "rgba( 169, 220, 195, 1)",
downColorProjection: "rgba( 245, 166, 174, 1)",
borderUpColorProjection: "rgba( 169, 220, 195, 1)",
borderDownColorProjection: "rgba( 245, 166, 174, 1)",
inputs: {
source: "close",
lb: 3
},
inputInfo: {
source: {
name: "Source"
},
lb: {
name: "Number of line"
}
}
},
kagiStyle: {
upColor: "rgba( 83, 185, 135, 1)",
downColor: "rgba( 255, 77, 92, 1)",
upColorProjection: "rgba( 169, 220, 195, 1)",
downColorProjection: "rgba( 245, 166, 174, 1)",
inputs: {
source: "close",
style: "ATR",
atrLength: 14,
reversalAmount: 1
},
inputInfo: {
source: {
name: "Source"
},
style: {
name: "Style"
},
atrLength: {
name: "ATR Length"
},
reversalAmount: {
name: "Reversal amount"
}
}
},
pnfStyle: {
upColor: "rgba( 83, 185, 135, 1)",
downColor: "rgba( 255, 77, 92, 1)",
upColorProjection: "rgba( 169, 220, 195, 1)",
downColorProjection: "rgba( 245, 166, 174, 1)",
inputs: {
sources: "Close",
reversalAmount: 3,
boxSize: 1,
style: "ATR",
atrLength: 14
},
inputInfo: {
sources: {
name: "Source"
},
boxSize: {
name: "Box size"
},
reversalAmount: {
name: "Reversal amount"
},
style: {
name: "Style"
},
atrLength: {
name: "ATR Length"
}
}
},
baselineStyle: {
baselineColor: "rgba( 117, 134, 150, 1)",
topFillColor1: "rgba( 83, 185, 135, 0.1)",
topFillColor2: "rgba( 83, 185, 135, 0.1)",
bottomFillColor1: "rgba( 235, 77, 92, 0.1)",
bottomFillColor2: "rgba( 235, 77, 92, 0.1)",
topLineColor: "rgba( 83, 185, 135, 1)",
bottomLineColor: "rgba( 235, 77, 92, 1)",
topLineWidth: 1,
bottomLineWidth: 1,
priceSource: "close",
transparency: 50,
baseLevelPercentage: 50
}
},
symbolWatermarkProperties: {
color: "rgba( 85, 85, 85, 0)",
transparency: 100
},
chartEventsSourceProperties: {
visible: !0,
futureOnly: !0,
breaks: {
color: "rgba(85, 85, 85, 1)",
visible: !1,
style: CanvasEx.LINESTYLE_DASHED,
width: 1
}
},
tradingProperties: {
showPositions: !0,
showOrders: !0,
showExecutions: !0,
extendLeft: !0,
lineLength: 5,
lineWidth: 1,
lineStyle: CanvasEx.LINESTYLE_DASHED
},
alertsProperties: {
labels: {
visible: !0,
color: "rgba( 215, 84, 66, 1)",
highlightColor: "rgba( 255, 255, 51, 1)",
hoverColor: "rgba( 245, 227, 135, 1)",
line: {
visible: !0,
style: CanvasEx.LINESTYLE_DASHED,
width: 1
}
},
fakeLabels: {
visible: !0,
color: "rgba( 119, 119, 119, 1)",
line: {
visible: !0,
style: CanvasEx.LINESTYLE_DASHED,
width: 1
}
},
drawingIcon: {
color: "rgba( 170, 170, 170, 1)"
}
},
editorFontsList: ["Verdana", "Courier New", "Times New Roman", "Arial"],
volumePaneSize: "large"
},
drawings: {
magnet: !1,
stayInDrawingMode: !1,
drawOnAllCharts: !0,
crossHairColor: "rgba( 183, 183, 183, 1)",
crossHairStyle: CanvasEx.LINESTYLE_DASHED,
crossHairWidth: 1
},
linetoolorder: {
singleChartOnly: !0,
extendLeft: "inherit",
lineLength: "inherit",
lineColor: "rgba( 255, 0, 0, 1)",
lineTransparency: 0,
lineStyle: "inherit",
lineWidth: "inherit",
bodyBorderColor: "rgba( 255, 0, 0, 0)",
bodyBorderTransparency: 0,
bodyBackgroundColor: "rgba( 255, 255, 255, 0.75)",
bodyBackgroundTransparency: 25,
bodyTextColor: "rgba( 255, 0, 0, 0)",
bodyTextTransparency: 0,
bodyFontFamily: "Verdana",
bodyFontSize: 7,
bodyFontBold: !0,
bodyFontItalic: !1,
quantityBorderColor: "rgba( 255, 0, 0, 0)",
quantityBorderTransparency: 0,
quantityBackgroundColor: "rgba( 255, 0, 0, 0.75)",
quantityBackgroundTransparency: 25,
quantityTextColor: "rgba( 255, 255, 255, 1)",
quantityTextTransparency: 0,
quantityFontFamily: "Verdana",
quantityFontSize: 7,
quantityFontBold: !0,
quantityFontItalic: !1,
cancelButtonBorderColor: "rgba( 255, 0, 0, 1)",
cancelButtonBorderTransparency: 0,
cancelButtonBackgroundColor: "rgba( 255, 255, 255, 0.75)",
cancelButtonBackgroundTransparency: 25,
cancelButtonIconColor: "rgba( 255, 0, 0, 1)",
cancelButtonIconTransparency: 0,
tooltip: ""
},
linetoolposition: {
singleChartOnly: !0,
extendLeft: "inherit",
lineLength: "inherit",
lineColor: "rgba( 0, 113, 224, 1)",
lineTransparency: 0,
lineStyle: "inherit",
lineWidth: "inherit",
bodyBorderColor: "rgba( 0, 113, 224, 1)",
bodyBorderTransparency: 0,
bodyBackgroundColor: "rgba( 255, 255, 255, 0.75)",
bodyBackgroundTransparency: 25,
bodyTextColor: "rgba( 0, 113, 224, 1)",
bodyTextTransparency: 0,
bodyFontFamily: "Verdana",
bodyFontSize: 7,
bodyFontBold: !0,
bodyFontItalic: !1,
quantityBorderColor: "rgba( 0, 113, 224, 1)",
quantityBorderTransparency: 0,
quantityBackgroundColor: "rgba( 0, 113, 224, 0.75)",
quantityBackgroundTransparency: 25,
quantityTextColor: "rgba( 255, 255, 255, 1)",
quantityTextTransparency: 0,
quantityFontFamily: "Verdana",
quantityFontSize: 7,
quantityFontBold: !0,
quantityFontItalic: !1,
reverseButtonBorderColor: "rgba( 0, 113, 224, 1)",
reverseButtonBorderTransparency: 0,
reverseButtonBackgroundColor: "rgba( 255, 255, 255, 0.75)",
reverseButtonBackgroundTransparency: 25,
reverseButtonIconColor: "rgba( 0, 113, 224, 1)",
reverseButtonIconTransparency: 0,
closeButtonBorderColor: "rgba( 0, 113, 224, 1)",
closeButtonBorderTransparency: 0,
closeButtonBackgroundColor: "rgba( 255, 255, 255, 0.75)",
closeButtonBackgroundTransparency: 25,
closeButtonIconColor: "rgba( 0, 113, 224, 1)",
closeButtonIconTransparency: 0,
tooltip: ""
},
linetoolexecution: {
singleChartOnly: !0,
direction: "buy",
arrowHeight: 8,
arrowSpacing: 1,
arrowColor: "rgba( 0, 0, 255, 1)",
arrowTransparency: 0,
text: "",
textColor: "rgba( 0, 0, 0, 1)",
textTransparency: 0,
fontFamily: "Verdana",
fontSize: 8,
fontBold: !1,
fontItalic: !1,
tooltip: ""
},
linetoolicon: {
singleChartOnly: !0,
clonable: !0,
color: "rgba( 61, 133, 198, 1)",
size: 40,
icon: 61536,
angle: .5 * Math.PI,
scale: 1
},
linetoolbezierquadro: {
clonable: !0,
linecolor: "rgba( 21, 153, 128, 1)",
linewidth: 1,
fillBackground: !1,
backgroundColor: "rgba( 21, 56, 153, 0.5)",
transparency: 50,
linestyle: CanvasEx.LINESTYLE_SOLID,
extendLeft: !1,
extendRight: !1,
leftEnd: _.Normal,
rightEnd: _.Normal
},
linetoolbeziercubic: {
clonable: !0,
linecolor: "rgba( 21, 153, 128, 1)",
linewidth: 1,
fillBackground: !1,
backgroundColor: "rgba( 21, 56, 153, 0.5)",
transparency: 50,
linestyle: CanvasEx.LINESTYLE_SOLID,
extendLeft: !1,
extendRight: !1,
leftEnd: _.Normal,
rightEnd: _.Normal
},
linetooltrendline: {
clonable: !0,
linecolor: "rgba( 21, 153, 128, 1)",
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_SOLID,
extendLeft: !1,
extendRight: !1,
leftEnd: _.Normal,
rightEnd: _.Normal,
font: "Verdana",
textcolor: "rgba( 21, 119, 96, 1)",
fontsize: 12,
bold: !1,
italic: !1,
snapTo45Degrees: !0,
alwaysShowStats: !1,
showMiddlePoint: !1,
showPriceRange: !1,
showBarsRange: !1,
showDateTimeRange: !1,
showDistance: !1,
showAngle: !1
},
linetooltimecycles: {
clonable: !0,
linecolor: "rgba(21, 153, 128, 1)",
linewidth: 1,
fillBackground: !0,
backgroundColor: "rgba(106, 168, 79, 0.5)",
transparency: 50,
linestyle: CanvasEx.LINESTYLE_SOLID
},
linetoolsineline: {
clonable: !0,
linecolor: "rgba( 21, 153, 128, 1)",
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_SOLID
},
linetooltrendangle: {
singleChartOnly: !0,
clonable: !0,
linecolor: "rgba( 21, 153, 128, 1)",
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_SOLID,
snapTo45Degrees: !0,
font: "Verdana",
textcolor: "rgba( 21, 119, 96, 1)",
fontsize: 12,
bold: !0,
italic: !1,
alwaysShowStats: !1,
showMiddlePoint: !1,
showPriceRange: !1,
showBarsRange: !1,
extendRight: !1,
extendLeft: !1
},
linetooldisjointangle: {
clonable: !0,
linecolor: "rgba( 18, 159, 92, 1)",
linewidth: 2,
linestyle: CanvasEx.LINESTYLE_SOLID,
fillBackground: !0,
backgroundColor: "rgba( 106, 168, 79, 0.5)",
transparency: 50,
extendLeft: !1,
extendRight: !1,
leftEnd: _.Normal,
rightEnd: _.Normal,
font: "Verdana",
textcolor: "rgba( 18, 159, 92, 1)",
fontsize: 12,
bold: !1,
italic: !1,
showPrices: !1,
showPriceRange: !1,
showDateTimeRange: !1,
showBarsRange: !1
},
linetoolflatbottom: {
clonable: !0,
linecolor: "rgba( 73, 133, 231, 1)",
linewidth: 2,
linestyle: CanvasEx.LINESTYLE_SOLID,
fillBackground: !0,
backgroundColor: "rgba( 21, 56, 153, 0.5)",
transparency: 50,
extendLeft: !1,
extendRight: !1,
leftEnd: _.Normal,
rightEnd: _.Normal,
font: "Verdana",
textcolor: "rgba( 73, 133, 231, 1)",
fontsize: 12,
bold: !1,
italic: !1,
showPrices: !1,
showPriceRange: !1,
showDateTimeRange: !1,
showBarsRange: !1
},
linetoolfibspiral: {
clonable: !0,
linecolor: "rgba( 21, 153, 128, 1)",
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_SOLID
},
linetooldaterange: {
clonable: !0,
linecolor: "rgba( 88, 88, 88, 1)",
linewidth: 1,
font: "Verdana",
textcolor: "rgba( 255, 255, 255, 1)",
fontsize: 12,
fillLabelBackground: !0,
labelBackgroundColor: "rgba( 91, 133, 191, 0.9)",
labelBackgroundTransparency: 30,
fillBackground: !0,
backgroundColor: "rgba( 186, 218, 255, 0.4)",
backgroundTransparency: 60,
drawBorder: !1,
borderColor: "rgba( 102, 123, 139, 1)",
extendTop: !1,
extendBottom: !1
},
linetoolpricerange: {
clonable: !0,
linecolor: "rgba( 88, 88, 88, 1)",
linewidth: 1,
font: "Verdana",
textcolor: "rgba( 255, 255, 255, 1)",
fontsize: 12,
fillLabelBackground: !0,
labelBackgroundColor: "rgba( 91, 133, 191, 0.9)",
labelBackgroundTransparency: 30,
fillBackground: !0,
backgroundColor: "rgba( 186, 218, 255, 0.4)",
backgroundTransparency: 60,
drawBorder: !1,
borderColor: "rgba( 102, 123, 139, 1)",
extendLeft: !1,
extendRight: !1
},
linetooldateandpricerange: {
clonable: !0,
linecolor: "rgba( 88, 88, 88, 1)",
linewidth: 1,
font: "Verdana",
textcolor: "rgba( 255, 255, 255, 1)",
fontsize: 12,
fillLabelBackground: !0,
labelBackgroundColor: "rgba( 91, 133, 191, 0.9)",
labelBackgroundTransparency: 30,
fillBackground: !0,
backgroundColor: "rgba( 186, 218, 255, 0.4)",
backgroundTransparency: 60,
drawBorder: !1,
borderColor: "rgba( 102, 123, 139, 1)"
},
linetoolriskrewardshort: {
isShort: !0,
clonable: !0,
linecolor: "rgba( 88, 88, 88, 1)",
linewidth: 1,
font: "Verdana",
textcolor: "rgba(255, 255, 255, 1)",
fontsize: 12,
fillLabelBackground: !0,
labelBackgroundColor: "rgba( 88, 88, 88, 1)",
labelBackgroundTransparency: 0,
fillBackground: !0,
stopBackground: "rgba( 255, 0, 0, 0.2)",
profitBackground: "rgba( 0, 160, 0, 0.2)",
stopBackgroundTransparency: 80,
profitBackgroundTransparency: 80,
drawBorder: !1,
borderColor: "rgba( 102, 123, 139, 1)",
compact: !1,
riskDisplayMode: "percents",
accountSize: 1e3,
risk: 25
},
linetoolriskrewardlong: {
isShort: !1,
clonable: !0,
linecolor: "rgba( 88, 88, 88, 1)",
linewidth: 1,
font: "Verdana",
textcolor: "rgba(255, 255, 255, 1)",
fontsize: 12,
fillLabelBackground: !0,
labelBackgroundColor: "rgba( 88, 88, 88, 1)",
labelBackgroundTransparency: 0,
fillBackground: !0,
stopBackground: "rgba( 255, 0, 0, 0.2)",
profitBackground: "rgba( 0, 160, 0, 0.2)",
stopBackgroundTransparency: 80,
profitBackgroundTransparency: 80,
drawBorder: !1,
borderColor: "rgba( 102, 123, 139, 1)",
compact: !1,
riskDisplayMode: "percents",
accountSize: 1e3,
risk: 25
},
linetoolarrow: {
clonable: !0,
linecolor: "rgba( 111, 136, 198, 1)",
linewidth: 2,
linestyle: CanvasEx.LINESTYLE_SOLID,
extendLeft: !1,
extendRight: !1,
leftEnd: _.Normal,
rightEnd: _.Arrow,
font: "Verdana",
textcolor: "rgba( 21, 119, 96, 1)",
fontsize: 12,
bold: !1,
italic: !1,
alwaysShowStats: !1,
showMiddlePoint: !1,
showPriceRange: !1,
showBarsRange: !1,
showDateTimeRange: !1,
showDistance: !1,
showAngle: !1
},
linetoolray: {
clonable: !0,
linecolor: "rgba( 21, 153, 128, 1)",
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_SOLID,
extendLeft: !1,
extendRight: !0,
leftEnd: _.Normal,
rightEnd: _.Normal,
font: "Verdana",
textcolor: "rgba( 21, 119, 96, 1)",
fontsize: 12,
bold: !1,
italic: !1,
alwaysShowStats: !1,
showMiddlePoint: !1,
showPriceRange: !1,
showBarsRange: !1,
showDateTimeRange: !1,
showDistance: !1,
showAngle: !1
},
linetoolextended: {
clonable: !0,
linecolor: "rgba( 21, 153, 128, 1)",
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_SOLID,
extendLeft: !0,
extendRight: !0,
leftEnd: _.Normal,
rightEnd: _.Normal,
font: "Verdana",
textcolor: "rgba( 21, 119, 96, 1)",
fontsize: 12,
bold: !1,
italic: !1,
alwaysShowStats: !1,
showMiddlePoint: !1,
showPriceRange: !1,
showBarsRange: !1,
showDateTimeRange: !1,
showDistance: !1,
showAngle: !1
},
linetoolhorzline: {
clonable: !0,
linecolor: "rgba( 128, 204, 219, 1)",
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_SOLID,
showPrice: !0,
showLabel: !1,
text: "",
font: "Verdana",
textcolor: "rgba( 21, 119, 96, 1)",
fontsize: 12,
bold: !1,
italic: !1,
horzLabelsAlign: "center",
vertLabelsAlign: "top"
},
linetoolhorzray: {
clonable: !0,
linecolor: "rgba( 128, 204, 219, 1)",
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_SOLID,
showPrice: !0,
showLabel: !1,
text: "",
font: "Verdana",
textcolor: "rgba( 21, 119, 96, 1)",
fontsize: 12,
bold: !1,
italic: !1,
horzLabelsAlign: "center",
vertLabelsAlign: "top"
},
linetoolvertline: {
clonable: !0,
linecolor: "rgba( 128, 204, 219, 1)",
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_SOLID,
showTime: !0
},
linetoolcirclelines: {
clonable: !0,
trendline: {
visible: !0,
color: "rgba( 128, 128, 128, 1)",
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_DASHED
},
linecolor: "rgba( 128, 204, 219, 1)",
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_SOLID
},
linetoolfibtimezone: {
horzLabelsAlign: "right",
vertLabelsAlign: "bottom",
clonable: !0,
baselinecolor: "rgba( 128, 128, 128, 1)",
linecolor: "rgba( 0, 85, 219, 1)",
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_SOLID,
showLabels: !0,
font: "Verdana",
fillBackground: !1,
transparency: 80,
trendline: {
visible: !0,
color: "rgba( 128, 128, 128, 1)",
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_DASHED
},
level1: m.c(0, "rgba( 128, 128, 128, 1)", !0),
level2: m.c(1, "rgba( 0, 85, 219, 1)", !0),
level3: m.c(2, "rgba( 0, 85, 219, 1)", !0),
level4: m.c(3, "rgba( 0, 85, 219, 1)", !0),
level5: m.c(5, "rgba( 0, 85, 219, 1)", !0),
level6: m.c(8, "rgba( 0, 85, 219, 1)", !0),
level7: m.c(13, "rgba( 0, 85, 219, 1)", !0),
level8: m.c(21, "rgba( 0, 85, 219, 1)", !0),
level9: m.c(34, "rgba( 0, 85, 219, 1)", !0),
level10: m.c(55, "rgba( 0, 85, 219, 1)", !0),
level11: m.c(89, "rgba( 0, 85, 219, 1)", !0),
__collectibleLines: ["trendline", "level1", "level2", "level3", "level4",
"level5", "level6", "level7", "level8", "level9", "level10", "level11"
]
},
linetooltext: {
clonable: !0,
color: "rgba( 102, 123, 139, 1)",
text: $.t("Text"),
font: "Verdana",
fontsize: 20,
fillBackground: !1,
backgroundColor: "rgba( 91, 133, 191, 0.9)",
backgroundTransparency: 70,
drawBorder: !1,
borderColor: "rgba( 102, 123, 139, 1)",
bold: !1,
italic: !1,
locked: !1,
fixedSize: !0,
wordWrap: !1,
wordWrapWidth: 400
},
linetooltextabsolute: {
singleChartOnly: !0,
clonable: !0,
color: "rgba( 102, 123, 139, 1)",
text: $.t("Text"),
font: "Verdana",
fontsize: 20,
fillBackground: !1,
backgroundColor: "rgba( 155, 190, 213, 0.3)",
backgroundTransparency: 70,
drawBorder: !1,
borderColor: "rgba( 102, 123, 139, 1)",
bold: !1,
italic: !1,
locked: !0,
wordWrap: !1,
wordWrapWidth: 400
},
linetoolballoon: {
clonable: !0,
color: "rgba( 102, 123, 139, 1)",
backgroundColor: "rgba( 255, 254, 206, 0.7)",
borderColor: "rgba( 140, 140, 140, 1)",
fontWeight: "bold",
fontsize: 12,
font: "Arial",
transparency: 30,
text: $.t("Comment")
},
linetoolbrush: {
clonable: !0,
linecolor: "rgba( 53, 53, 53, 1)",
linewidth: 2,
linestyle: CanvasEx.LINESTYLE_SOLID,
smooth: 5,
fillBackground: !1,
backgroundColor: "rgba( 21, 56, 153, 0.5)",
transparency: 50,
leftEnd: _.Normal,
rightEnd: _.Normal
},
linetoolpolyline: {
clonable: !0,
linecolor: "rgba( 53, 53, 53, 1)",
linewidth: 2,
linestyle: CanvasEx.LINESTYLE_SOLID,
fillBackground: !0,
backgroundColor: "rgba( 21, 56, 153, 0.5)",
transparency: 50,
filled: !1
},
linetoolarrowmark: {
clonable: !0,
color: "rgba( 120, 120, 120, 1)",
text: "",
fontsize: 20,
font: "Verdana"
},
linetoolarrowmarkleft: {
clonable: !0,
color: "rgba( 120, 120, 120, 1)",
text: "",
fontsize: 20,
font: "Verdana"
},
linetoolarrowmarkup: {
clonable: !0,
color: "rgba( 120, 120, 120, 1)",
text: "",
fontsize: 20,
font: "Verdana"
},
linetoolarrowmarkright: {
clonable: !0,
color: "rgba( 120, 120, 120, 1)",
text: "",
fontsize: 20,
font: "Verdana"
},
linetoolarrowmarkdown: {
clonable: !0,
color: "rgba( 120, 120, 120, 1)",
text: "",
fontsize: 20,
font: "Verdana"
},
linetoolflagmark: {
clonable: !0,
color: "rgba( 255, 0, 0, 1)"
},
linetoolnote: {
clonable: !0,
markerColor: "rgba( 46, 102, 255, 1)",
textColor: "rgba( 0, 0, 0, 1)",
backgroundColor: "rgba( 255, 255, 255, 1)",
backgroundTransparency: 0,
text: $.t("Text"),
font: "Arial",
fontSize: 12,
bold: !1,
italic: !1,
locked: !1,
fixedSize: !0
},
linetoolnoteabsolute: {
singleChartOnly: !0,
clonable: !0,
markerColor: "rgba( 46, 102, 255, 1)",
textColor: "rgba( 0, 0, 0, 1)",
backgroundColor: "rgba( 255, 255, 255, 1)",
backgroundTransparency: 0,
text: $.t("Text"),
font: "Arial",
fontSize: 12,
bold: !1,
italic: !1,
locked: !0,
fixedSize: !0
},
linetoolthumbup: {
clonable: !0,
color: "rgba( 0, 128, 0, 1)"
},
linetoolthumbdown: {
clonable: !0,
color: "rgba( 255, 0, 0, 1)"
},
linetoolpricelabel: {
clonable: !0,
color: "rgba( 102, 123, 139, 1)",
backgroundColor: "rgba( 255, 255, 255, 0.7)",
borderColor: "rgba( 140, 140, 140, 1)",
fontWeight: "bold",
fontsize: 11,
font: "Arial",
transparency: 30
},
linetoolrectangle: {
clonable: !0,
color: "rgba( 21, 56, 153, 1)",
fillBackground: !0,
backgroundColor: "rgba( 21, 56, 153, 0.5)",
linewidth: 1,
snapTo45Degrees: !0,
transparency: 50
},
linetoolrotatedrectangle: {
clonable: !0,
color: "rgba( 152, 0, 255, 1)",
fillBackground: !0,
backgroundColor: "rgba( 142, 124, 195, 0.5)",
transparency: 50,
linewidth: 1,
snapTo45Degrees: !0
},
linetoolellipse: {
clonable: !0,
color: "rgba( 153, 153, 21, 1)",
fillBackground: !0,
backgroundColor: "rgba( 153, 153, 21, 0.5)",
transparency: 50,
linewidth: 1
},
linetoolarc: {
clonable: !0,
color: "rgba( 153, 153, 21, 1)",
fillBackground: !0,
backgroundColor: "rgba( 153, 153, 21, 0.5)",
transparency: 50,
linewidth: 1
},
linetoolprediction: {
singleChartOnly: !0,
linecolor: "rgba( 28, 115, 219, 1)",
linewidth: 2,
sourceBackColor: "rgba( 241, 241, 241, 1)",
sourceTextColor: "rgba( 110, 110, 110, 1)",
sourceStrokeColor: "rgba( 110, 110, 110, 1)",
targetStrokeColor: "rgba( 47, 168, 255, 1)",
targetBackColor: "rgba( 11, 111, 222, 1)",
targetTextColor: "rgba( 255, 255, 255, 1)",
successBackground: "rgba( 54, 160, 42, 0.9)",
successTextColor: "rgba( 255, 255, 255, 1)",
failureBackground: "rgba( 231, 69, 69, 0.5)",
failureTextColor: "rgba( 255, 255, 255, 1)",
intermediateBackColor: "rgba( 234, 210, 137, 1)",
intermediateTextColor: "rgba( 109, 77, 34, 1)",
transparency: 10,
centersColor: "rgba( 32, 32, 32, 1)"
},
linetooltriangle: {
clonable: !0,
color: "rgba( 153, 21, 21, 1)",
fillBackground: !0,
backgroundColor: "rgba( 153, 21, 21, 0.5)",
transparency: 50,
linewidth: 1
},
linetoolcallout: {
clonable: !0,
color: "rgba( 255, 255, 255, 1)",
backgroundColor: "rgba( 153, 21, 21, 0.5)",
transparency: 50,
linewidth: 2,
fontsize: 12,
font: "Verdana",
text: $.t("Text"),
bordercolor: "rgba( 153, 21, 21, 1)",
bold: !1,
italic: !1,
wordWrap: !1,
wordWrapWidth: 400
},
linetoolparallelchannel: {
clonable: !0,
linecolor: "rgba( 119, 52, 153, 1)",
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_SOLID,
extendLeft: !1,
extendRight: !1,
fillBackground: !0,
backgroundColor: "rgba( 180, 167, 214, 0.5)",
transparency: 50,
showMidline: !1,
midlinecolor: "rgba( 119, 52, 153, 1)",
midlinewidth: 1,
midlinestyle: CanvasEx.LINESTYLE_DASHED
},
linetoolelliottimpulse: {
degree: 7,
clonable: !0,
showWave: !0,
color: "rgba( 61, 133, 198, 1)",
linewidth: 1
},
linetoolelliotttriangle: {
degree: 7,
clonable: !0,
showWave: !0,
color: "rgba( 255, 152, 0, 1)",
linewidth: 1
},
linetoolelliotttriplecombo: {
degree: 7,
clonable: !0,
showWave: !0,
color: "rgba( 106, 168, 79, 1)",
linewidth: 1
},
linetoolelliottcorrection: {
degree: 7,
clonable: !0,
showWave: !0,
color: "rgba( 61, 133, 198, 1)",
linewidth: 1
},
linetoolelliottdoublecombo: {
degree: 7,
clonable: !0,
showWave: !0,
color: "rgba( 106, 168, 79, 1)",
linewidth: 1
},
linetoolbarspattern: {
singleChartOnly: !0,
color: "rgba( 80, 145, 204, 1)",
clonable: !0,
mode: u.Bars,
mirrored: !1,
flipped: !1
},
linetoolghostfeed: {
singleChartOnly: !0,
clonable: !0,
averageHL: 20,
variance: 50,
candleStyle: {
upColor: "#6ba583",
downColor: "#d75442",
drawWick: !0,
drawBorder: !0,
borderColor: "#378658",
borderUpColor: "#225437",
borderDownColor: "#5b1a13",
wickColor: "#737375"
},
transparency: 50
},
study: {
inputs: {},
styles: {},
palettes: {},
bands: {},
area: {},
graphics: {},
showInDataWindow: !0,
visible: !0,
showStudyArguments: !0,
precision: "default"
},
linetoolpitchfork: {
clonable: !0,
fillBackground: !0,
transparency: 80,
style: h.Original,
median: {
visible: !0,
color: "rgba( 165, 0, 0, 1)",
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_SOLID
},
level0: m.c(.25, "rgba( 160, 107, 0, 1)", !1),
level1: m.c(.382, "rgba( 105, 158, 0, 1)", !1),
level2: m.c(.5, "rgba( 0, 155, 0, 1)", !0),
level3: m.c(.618, "rgba( 0, 153, 101, 1)", !1),
level4: m.c(.75, "rgba( 0, 101, 153, 1)", !1),
level5: m.c(1, "rgba( 0, 0, 153, 1)", !0),
level6: m.c(1.5, "rgba( 102, 0, 153, 1)", !1),
level7: m.c(1.75, "rgba( 153, 0, 102, 1)", !1),
level8: m.c(2, "rgba( 165, 0, 0, 1)", !1),
__collectibleLines: ["median", "level0", "level1", "level2", "level3", "level4",
"level5", "level6", "level7", "level8"
]
},
linetoolpitchfan: {
clonable: !0,
fillBackground: !0,
transparency: 80,
median: {
visible: !0,
color: "rgba( 165, 0, 0, 1)",
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_SOLID
},
level0: m.c(.25, "rgba( 160, 107, 0, 1)", !1),
level1: m.c(.382, "rgba( 105, 158, 0, 1)", !1),
level2: m.c(.5, "rgba( 0, 155, 0, 1)", !0),
level3: m.c(.618, "rgba( 0, 153, 101, 1)", !1),
level4: m.c(.75, "rgba( 0, 101, 153, 1)", !1),
level5: m.c(1, "rgba( 0, 0, 153, 1)", !0),
level6: m.c(1.5, "rgba( 102, 0, 153, 1)", !1),
level7: m.c(1.75, "rgba( 153, 0, 102, 1)", !1),
level8: m.c(2, "rgba( 165, 0, 0, 1)", !1),
__collectibleLines: ["median", "level0", "level1", "level2", "level3", "level4",
"level5", "level6", "level7", "level8"
]
},
linetoolgannfan: {
clonable: !0,
showLabels: !0,
font: "Verdana",
fillBackground: !0,
transparency: 80,
level1: m.f(1, 8, "rgba( 160, 107, 0, 1)", !0),
level2: m.f(1, 4, "rgba( 105, 158, 0, 1)", !0),
level3: m.f(1, 3, "rgba( 0, 155, 0, 1)", !0),
level4: m.f(1, 2, "rgba( 0, 153, 101, 1)", !0),
level5: m.f(1, 1, "rgba( 128, 128, 128, 1)", !0),
level6: m.f(2, 1, "rgba( 0, 101, 153, 1)", !0),
level7: m.f(3, 1, "rgba( 0, 0, 153, 1)", !0),
level8: m.f(4, 1, "rgba( 102, 0, 153, 1)", !0),
level9: m.f(8, 1, "rgba( 165, 0, 0, 1)", !0),
__collectibleLines: ["level1", "level2", "level3", "level4", "level5", "level6",
"level7", "level8", "level9", "level10", "level11"
]
},
linetoolganncomplex: {
clonable: !0,
fillBackground: !1,
arcsBackground: {
fillBackground: !0,
transparency: 80
},
reverse: !1,
scaleRatio: "",
showLabels: !0,
labelsStyle: {
font: "Verdana",
fontSize: 12,
bold: !1,
italic: !1
},
levels: [m.d("rgba( 128, 128, 128, 1)", !0, 1), m.d("rgba( 160, 107, 0, 1)", !0,
1), m.d("rgba( 105, 158, 0, 1)", !0, 1), m.d("rgba( 0, 155, 0, 1)",
!0, 1), m.d("rgba( 0, 153, 101, 1)", !0, 1), m.d(
"rgba( 128, 128, 128, 1)", !0, 1)],
fanlines: [m.e("rgba( 165, 0, 255, 1)", !1, 1, 8, 1), m.e("rgba( 165, 0, 0, 1)",
!1, 1, 5, 1), m.e("rgba( 128, 128, 128, 1)", !1, 1, 4, 1), m.e(
"rgba( 160, 107, 0, 1)", !1, 1, 3, 1), m.e("rgba( 105, 158, 0, 1)",
!0, 1, 2, 1), m.e("rgba( 0, 155, 0, 1)", !0, 1, 1, 1), m.e(
"rgba( 0, 153, 101, 1)", !0, 1, 1, 2), m.e("rgba( 0, 153, 101, 1)",
!1, 1, 1, 3), m.e("rgba( 0, 0, 153, 1)", !1, 1, 1, 4), m.e(
"rgba( 102, 0, 153, 1)", !1, 1, 1, 5), m.e("rgba( 165, 0, 255, 1)",
!1, 1, 1, 8)],
arcs: [m.e("rgba( 160, 107, 0, 1)", !0, 1, 1, 0), m.e("rgba( 160, 107, 0, 1)", !
0, 1, 1, 1), m.e("rgba( 160, 107, 0, 1)", !0, 1, 1.5, 0), m.e(
"rgba( 105, 158, 0, 1)", !0, 1, 2, 0), m.e("rgba( 105, 158, 0, 1)",
!0, 1, 2, 1), m.e("rgba( 0, 155, 0, 1)", !0, 1, 3, 0), m.e(
"rgba( 0, 155, 0, 1)", !0, 1, 3, 1), m.e("rgba( 0, 153, 101, 1)", !
0, 1, 4, 0), m.e("rgba( 0, 153, 101, 1)", !0, 1, 4, 1), m.e(
"rgba( 0, 0, 153, 1)", !0, 1, 5, 0), m.e("rgba( 0, 0, 153, 1)", !0,
1, 5, 1)],
__collectibleLines: ["trendline", "levels.0", "levels.1", "levels.2",
"levels.3", "levels.4", "levels.5", "fanlines.0", "fanlines.1",
"fanlines.2", "fanlines.3", "fanlines.4", "fanlines.5", "fanlines.6",
"fanlines.7", "fanlines.8", "fanlines.9", "fanlines.10", "arcs.0",
"arcs.1", "arcs.2", "arcs.3", "arcs.4", "arcs.5", "arcs.6", "arcs.7",
"arcs.8", "arcs.9", "arcs.10"
]
},
linetoolgannfixed: {
clonable: !0,
fillBackground: !1,
arcsBackground: {
fillBackground: !0,
transparency: 80
},
reverse: !1,
levels: [m.d("rgba( 128, 128, 128, 1)", !0, 1), m.d("rgba( 160, 107, 0, 1)", !0,
1), m.d("rgba( 105, 158, 0, 1)", !0, 1), m.d("rgba( 0, 155, 0, 1)",
!0, 1), m.d("rgba( 0, 153, 101, 1)", !0, 1), m.d(
"rgba( 128, 128, 128, 1)", !0, 1)],
fanlines: [m.e("rgba( 165, 0, 255, 1)", !1, 1, 8, 1), m.e("rgba( 165, 0, 0, 1)",
!1, 1, 5, 1), m.e("rgba( 128, 128, 128, 1)", !1, 1, 4, 1), m.e(
"rgba( 160, 107, 0, 1)", !1, 1, 3, 1), m.e("rgba( 105, 158, 0, 1)",
!0, 1, 2, 1), m.e("rgba( 0, 155, 0, 1)", !0, 1, 1, 1), m.e(
"rgba( 0, 153, 101, 1)", !0, 1, 1, 2), m.e("rgba( 0, 153, 101, 1)",
!1, 1, 1, 3), m.e("rgba( 0, 0, 153, 1)", !1, 1, 1, 4), m.e(
"rgba( 102, 0, 153, 1)", !1, 1, 1, 5), m.e("rgba( 165, 0, 255, 1)",
!1, 1, 1, 8)],
arcs: [m.e("rgba( 160, 107, 0, 1)", !0, 1, 1, 0), m.e("rgba( 160, 107, 0, 1)", !
0, 1, 1, 1), m.e("rgba( 160, 107, 0, 1)", !0, 1, 1.5, 0), m.e(
"rgba( 105, 158, 0, 1)", !0, 1, 2, 0), m.e("rgba( 105, 158, 0, 1)",
!0, 1, 2, 1), m.e("rgba( 0, 155, 0, 1)", !0, 1, 3, 0), m.e(
"rgba( 0, 155, 0, 1)", !0, 1, 3, 1), m.e("rgba( 0, 153, 101, 1)", !
0, 1, 4, 0), m.e("rgba( 0, 153, 101, 1)", !0, 1, 4, 1), m.e(
"rgba( 0, 0, 153, 1)", !0, 1, 5, 0), m.e("rgba( 0, 0, 153, 1)", !0,
1, 5, 1)],
__collectibleLines: ["trendline", "levels.0", "levels.1", "levels.2",
"levels.3", "levels.4", "levels.5", "fanlines.0", "fanlines.1",
"fanlines.2", "fanlines.3", "fanlines.4", "fanlines.5", "fanlines.6",
"fanlines.7", "fanlines.8", "fanlines.9", "fanlines.10", "arcs.0",
"arcs.1", "arcs.2", "arcs.3", "arcs.4", "arcs.5", "arcs.6", "arcs.7",
"arcs.8", "arcs.9", "arcs.10"
]
},
linetoolgannsquare: {
clonable: !0,
color: "rgba( 21, 56, 153, 0.8)",
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_SOLID,
font: "Verdana",
showTopLabels: !0,
showBottomLabels: !0,
showLeftLabels: !0,
showRightLabels: !0,
fillHorzBackground: !0,
horzTransparency: 80,
fillVertBackground: !0,
vertTransparency: 80,
reverse: !1,
fans: m.a("rgba( 128, 128, 128, 1)", !1),
hlevel1: m.b(0, "rgba( 128, 128, 128, 1)", !0),
hlevel2: m.b(.25, "rgba( 160, 107, 0, 1)", !0),
hlevel3: m.b(.382, "rgba( 105, 158, 0, 1)", !0),
hlevel4: m.b(.5, "rgba( 0, 155, 0, 1)", !0),
hlevel5: m.b(.618, "rgba( 0, 153, 101, 1)", !0),
hlevel6: m.b(.75, "rgba( 0, 101, 153, 1)", !0),
hlevel7: m.b(1, "rgba( 128, 128, 128, 1)", !0),
vlevel1: m.b(0, "rgba( 128, 128, 128, 1)", !0),
vlevel2: m.b(.25, "rgba( 160, 107, 0, 1)", !0),
vlevel3: m.b(.382, "rgba( 105, 158, 0, 1)", !0),
vlevel4: m.b(.5, "rgba( 0, 155, 0, 1)", !0),
vlevel5: m.b(.618, "rgba( 0, 153, 101, 1)", !0),
vlevel6: m.b(.75, "rgba( 0, 101, 153, 1)", !0),
vlevel7: m.b(1, "rgba( 128, 128, 128, 1)", !0),
__collectibleLines: ["fans", "hlevel1", "hlevel2", "hlevel3", "hlevel4",
"hlevel5", "hlevel6", "hlevel7", "vlevel1", "vlevel2", "vlevel3",
"vlevel4", "vlevel5", "vlevel6", "vlevel7"
]
},
linetoolfibspeedresistancefan: {
clonable: !0,
fillBackground: !0,
transparency: 80,
grid: {
color: "rgba( 128, 128, 128, 1)",
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_SOLID,
visible: !0
},
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_SOLID,
font: "Verdana",
showTopLabels: !0,
showBottomLabels: !0,
showLeftLabels: !0,
showRightLabels: !0,
snapTo45Degrees: !0,
hlevel1: m.b(0, "rgba( 128, 128, 128, 1)", !0),
hlevel2: m.b(.25, "rgba( 160, 107, 0, 1)", !0),
hlevel3: m.b(.382, "rgba( 105, 158, 0, 1)", !0),
hlevel4: m.b(.5, "rgba( 0, 155, 0, 1)", !0),
hlevel5: m.b(.618, "rgba( 0, 153, 101, 1)", !0),
hlevel6: m.b(.75, "rgba( 0, 101, 153, 1)", !0),
hlevel7: m.b(1, "rgba( 128, 128, 128, 1)", !0),
vlevel1: m.b(0, "rgba( 128, 128, 128, 1)", !0),
vlevel2: m.b(.25, "rgba( 160, 107, 0, 1)", !0),
vlevel3: m.b(.382, "rgba( 105, 158, 0, 1)", !0),
vlevel4: m.b(.5, "rgba( 0, 155, 0, 1)", !0),
vlevel5: m.b(.618, "rgba( 0, 153, 101, 1)", !0),
vlevel6: m.b(.75, "rgba( 0, 101, 153, 1)", !0),
vlevel7: m.b(1, "rgba( 128, 128, 128, 1)", !0),
__collectibleLines: ["trendline", "hlevel1", "hlevel2", "hlevel3", "hlevel4",
"hlevel5", "hlevel6", "hlevel7", "vlevel1", "vlevel2", "vlevel3",
"vlevel4", "vlevel5", "vlevel6", "vlevel7"
]
},
linetoolfibretracement: {
clonable: !0,
showCoeffs: !0,
showPrices: !0,
font: "Verdana",
fillBackground: !0,
transparency: 80,
extendLines: !1,
horzLabelsAlign: "left",
vertLabelsAlign: "middle",
reverse: !1,
coeffsAsPercents: !1,
trendline: {
visible: !0,
color: "rgba( 128, 128, 128, 1)",
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_DASHED
},
levelsStyle: {
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_SOLID
},
level1: m.b(0, "rgba( 128, 128, 128, 1)", !0),
level2: m.b(.236, "rgba( 204, 40, 40, 1)", !0),
level3: m.b(.382, "rgba( 149, 204, 40, 1)", !0),
level4: m.b(.5, "rgba( 40, 204, 40, 1)", !0),
level5: m.b(.618, "rgba( 40, 204, 149, 1)", !0),
level6: m.b(.786, "rgba( 40, 149, 204, 1)", !0),
level7: m.b(1, "rgba( 128, 128, 128, 1)", !0),
level8: m.b(1.618, "rgba( 40, 40, 204, 1)", !0),
level9: m.b(2.618, "rgba( 204, 40, 40, 1)", !0),
level10: m.b(3.618, "rgba( 149, 40, 204, 1)", !0),
level11: m.b(4.236, "rgba( 204, 40, 149, 1)", !0),
level12: m.b(1.272, "rgba( 149, 204, 40, 1)", !1),
level13: m.b(1.414, "rgba( 204, 40, 40, 1)", !1),
level16: m.b(2, "rgba( 40, 204, 149, 1)", !1),
level14: m.b(2.272, "rgba( 149, 204, 40, 1)", !1),
level15: m.b(2.414, "rgba( 40, 204, 40, 1)", !1),
level17: m.b(3, "rgba( 40, 149, 204, 1)", !1),
level18: m.b(3.272, "rgba( 128, 128, 128, 1)", !1),
level19: m.b(3.414, "rgba( 40, 40, 204, 1)", !1),
level20: m.b(4, "rgba( 204, 40, 40, 1)", !1),
level21: m.b(4.272, "rgba( 149, 40, 204, 1)", !1),
level22: m.b(4.414, "rgba( 204, 40, 149, 1)", !1),
level23: m.b(4.618, "rgba( 149, 204, 40, 1)", !1),
level24: m.b(4.764, "rgba( 40, 204, 149, 1)", !1),
__collectibleLines: ["trendline", "level1", "level2", "level3", "level4",
"level5", "level6", "level7", "level8", "level9", "level10", "level11",
"level12", "level13", "level14", "level15", "level16", "level17",
"level18", "level19", "level20", "level21", "level22", "level23",
"level24"
]
},
linetoolfibchannel: {
clonable: !0,
showCoeffs: !0,
showPrices: !0,
font: "Verdana",
fillBackground: !0,
transparency: 80,
extendLeft: !1,
extendRight: !1,
horzLabelsAlign: "left",
vertLabelsAlign: "middle",
coeffsAsPercents: !1,
levelsStyle: {
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_SOLID
},
level1: m.b(0, "rgba( 128, 128, 128, 1)", !0),
level2: m.b(.236, "rgba( 204, 40, 40, 1)", !0),
level3: m.b(.382, "rgba( 149, 204, 40, 1)", !0),
level4: m.b(.5, "rgba( 40, 204, 40, 1)", !0),
level5: m.b(.618, "rgba( 40, 204, 149, 1)", !0),
level6: m.b(.786, "rgba( 40, 149, 204, 1)", !0),
level7: m.b(1, "rgba( 128, 128, 128, 1)", !0),
level8: m.b(1.618, "rgba( 40, 40, 204, 1)", !0),
level9: m.b(2.618, "rgba( 204, 40, 40, 1)", !0),
level10: m.b(3.618, "rgba( 149, 40, 204, 1)", !0),
level11: m.b(4.236, "rgba( 204, 40, 149, 1)", !0),
level12: m.b(1.272, "rgba( 149, 204, 40, 1)", !1),
level13: m.b(1.414, "rgba( 204, 40, 40, 1)", !1),
level16: m.b(2, "rgba( 40, 204, 149, 1)", !1),
level14: m.b(2.272, "rgba( 149, 204, 40, 1)", !1),
level15: m.b(2.414, "rgba( 40, 204, 40, 1)", !1),
level17: m.b(3, "rgba( 40, 149, 204, 1)", !1),
level18: m.b(3.272, "rgba( 128, 128, 128, 1)", !1),
level19: m.b(3.414, "rgba( 40, 40, 204, 1)", !1),
level20: m.b(4, "rgba( 204, 40, 40, 1)", !1),
level21: m.b(4.272, "rgba( 149, 40, 204, 1)", !1),
level22: m.b(4.414, "rgba( 204, 40, 149, 1)", !1),
level23: m.b(4.618, "rgba( 149, 204, 40, 1)", !1),
level24: m.b(4.764, "rgba( 40, 204, 149, 1)", !1),
__collectibleLines: ["level1", "level2", "level3", "level4", "level5", "level6",
"level7", "level8", "level9", "level10", "level11", "level12",
"level13", "level14", "level15", "level16", "level17", "level18",
"level19", "level20", "level21", "level22", "level23", "level24"
]
},
linetoolprojection: {
clonable: !0,
showCoeffs: !0,
font: "Verdana",
fillBackground: !0,
transparency: 80,
color1: "rgba( 0, 128, 0, 0.2)",
color2: "rgba( 255, 0, 0, 0.2)",
linewidth: 1,
trendline: {
visible: !0,
color: "rgba( 128, 128, 128, 1)",
linestyle: CanvasEx.LINESTYLE_SOLID
},
level1: m.c(1, "rgba( 128, 128, 128, 1)", !0)
},
linetool5pointspattern: {
clonable: !0,
color: "rgba( 204, 40, 149, 1)",
textcolor: "rgba( 255, 255, 255, 1)",
fillBackground: !0,
backgroundColor: "rgba( 204, 40, 149, 0.5)",
font: "Verdana",
fontsize: 12,
bold: !1,
italic: !1,
transparency: 50,
linewidth: 1
},
linetoolcypherpattern: {
clonable: !0,
color: "#CC2895",
textcolor: "#FFFFFF",
fillBackground: !0,
backgroundColor: "#CC2895",
font: "Verdana",
fontsize: 12,
bold: !1,
italic: !1,
transparency: 50,
linewidth: 1
},
linetooltrianglepattern: {
clonable: !0,
color: "rgba( 149, 40, 255, 1)",
textcolor: "rgba( 255, 255, 255, 1)",
fillBackground: !0,
backgroundColor: "rgba( 149, 40, 204, 0.5)",
font: "Verdana",
fontsize: 12,
bold: !1,
italic: !1,
transparency: 50,
linewidth: 1
},
linetoolabcd: {
clonable: !0,
color: "rgba( 0, 155, 0, 1)",
textcolor: "rgba( 255, 255, 255, 1)",
font: "Verdana",
fontsize: 12,
bold: !1,
italic: !1,
linewidth: 2
},
linetoolthreedrivers: {
clonable: !0,
color: "rgba( 149, 40, 255, 1)",
textcolor: "rgba( 255, 255, 255, 1)",
fillBackground: !0,
backgroundColor: "rgba( 149, 40, 204, 0.5)",
font: "Verdana",
fontsize: 12,
bold: !1,
italic: !1,
transparency: 50,
linewidth: 2
},
linetoolheadandshoulders: {
clonable: !0,
color: "rgba( 69, 104, 47, 1)",
textcolor: "rgba( 255, 255, 255, 1)",
fillBackground: !0,
backgroundColor: "rgba( 69, 168, 47, 0.5)",
font: "Verdana",
fontsize: 12,
bold: !1,
italic: !1,
transparency: 50,
linewidth: 2
},
linetoolfibwedge: {
singleChartOnly: !0,
clonable: !0,
showCoeffs: !0,
font: "Verdana",
fillBackground: !0,
transparency: 80,
trendline: {
visible: !0,
color: "rgba( 128, 128, 128, 1)",
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_SOLID
},
level1: m.c(.236, "rgba( 204, 40, 40, 1)", !0),
level2: m.c(.382, "rgba( 149, 204, 40, 1)", !0),
level3: m.c(.5, "rgba( 40, 204, 40, 1)", !0),
level4: m.c(.618, "rgba( 40, 204, 149, 1)", !0),
level5: m.c(.786, "rgba( 40, 149, 204, 1)", !0),
level6: m.c(1, "rgba( 128, 128, 128, 1)", !0),
level7: m.c(1.618, "rgba( 40, 40, 204, 1)", !1),
level8: m.c(2.618, "rgba( 204, 40, 40, 1)", !1),
level9: m.c(3.618, "rgba( 149, 40, 204, 1)", !1),
level10: m.c(4.236, "rgba( 204, 40, 149, 1)", !1),
level11: m.c(4.618, "rgba( 204, 40, 149, 1)", !1),
__collectibleLines: ["trendline", "level1", "level2", "level3", "level4",
"level5", "level6", "level7", "level8", "level9", "level10", "level11"
]
},
linetoolfibcircles: {
clonable: !0,
showCoeffs: !0,
font: "Verdana",
fillBackground: !0,
transparency: 80,
snapTo45Degrees: !0,
coeffsAsPercents: !1,
trendline: {
visible: !0,
color: "rgba( 128, 128, 128, 1)",
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_DASHED
},
level1: m.c(.236, "rgba( 204, 40, 40, 1)", !0),
level2: m.c(.382, "rgba( 149, 204, 40, 1)", !0),
level3: m.c(.5, "rgba( 40, 204, 40, 1)", !0),
level4: m.c(.618, "rgba( 40, 204, 149, 1)", !0),
level5: m.c(.786, "rgba( 40, 149, 204, 1)", !0),
level6: m.c(1, "rgba( 128, 128, 128, 1)", !0),
level7: m.c(1.618, "rgba( 40, 40, 204, 1)", !0),
level8: m.c(2.618, "rgba( 204, 40, 40, 1)", !0),
level9: m.c(3.618, "rgba( 149, 40, 204, 1)", !0),
level10: m.c(4.236, "rgba( 204, 40, 149, 1)", !0),
level11: m.c(4.618, "rgba( 204, 40, 149, 1)", !0),
__collectibleLines: ["trendline", "level1", "level2", "level3", "level4",
"level5", "level6", "level7", "level8", "level9", "level10", "level11"
]
},
linetoolfibspeedresistancearcs: {
clonable: !0,
showCoeffs: !0,
font: "Verdana",
fillBackground: !0,
transparency: 80,
fullCircles: !1,
trendline: {
visible: !0,
color: "rgba( 128, 128, 128, 1)",
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_DASHED
},
level1: m.c(.236, "rgba( 204, 40, 40, 1)", !0),
level2: m.c(.382, "rgba( 149, 204, 40, 1)", !0),
level3: m.c(.5, "rgba( 40, 204, 40, 1)", !0),
level4: m.c(.618, "rgba( 40, 204, 149, 1)", !0),
level5: m.c(.786, "rgba( 40, 149, 204, 1)", !0),
level6: m.c(1, "rgba( 128, 128, 128, 1)", !0),
level7: m.c(1.618, "rgba( 40, 40, 204, 1)", !0),
level8: m.c(2.618, "rgba( 204, 40, 40, 1)", !0),
level9: m.c(3.618, "rgba( 149, 40, 204, 1)", !0),
level10: m.c(4.236, "rgba( 204, 40, 149, 1)", !0),
level11: m.c(4.618, "rgba( 204, 40, 149, 1)", !0),
__collectibleLines: ["trendline", "level1", "level2", "level3", "level4",
"level5", "level6", "level7", "level8", "level9", "level10", "level11"
]
},
linetooltrendbasedfibextension: {
clonable: !0,
showCoeffs: !0,
showPrices: !0,
font: "Verdana",
fillBackground: !0,
transparency: 80,
extendLines: !1,
horzLabelsAlign: "left",
vertLabelsAlign: "middle",
reverse: !1,
coeffsAsPercents: !1,
trendline: {
visible: !0,
color: "rgba( 128, 128, 128, 1)",
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_DASHED
},
levelsStyle: {
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_SOLID
},
level1: m.b(0, "rgba( 128, 128, 128, 1)", !0),
level2: m.b(.236, "rgba( 204, 40, 40, 1)", !0),
level3: m.b(.382, "rgba( 149, 204, 40, 1)", !0),
level4: m.b(.5, "rgba( 40, 204, 40, 1)", !0),
level5: m.b(.618, "rgba( 40, 204, 149, 1)", !0),
level6: m.b(.786, "rgba( 40, 149, 204, 1)", !0),
level7: m.b(1, "rgba( 128, 128, 128, 1)", !0),
level8: m.b(1.618, "rgba( 40, 40, 204, 1)", !0),
level9: m.b(2.618, "rgba( 204, 40, 40, 1)", !0),
level10: m.b(3.618, "rgba( 149, 40, 204, 1)", !0),
level11: m.b(4.236, "rgba( 204, 40, 149, 1)", !0),
level12: m.b(1.272, "rgba( 149, 204, 40, 1)", !1),
level13: m.b(1.414, "rgba( 204, 40, 40, 1)", !1),
level16: m.b(2, "rgba( 40, 204, 149, 1)", !1),
level14: m.b(2.272, "rgba( 149, 204, 40, 1)", !1),
level15: m.b(2.414, "rgba( 40, 204, 40, 1)", !1),
level17: m.b(3, "rgba( 40, 149, 204, 1)", !1),
level18: m.b(3.272, "rgba( 128, 128, 128, 1)", !1),
level19: m.b(3.414, "rgba( 40, 40, 204, 1)", !1),
level20: m.b(4, "rgba( 204, 40, 40, 1)", !1),
level21: m.b(4.272, "rgba( 149, 40, 204, 1)", !1),
level22: m.b(4.414, "rgba( 204, 40, 149, 1)", !1),
level23: m.b(4.618, "rgba( 149, 204, 40, 1)", !1),
level24: m.b(4.764, "rgba( 40, 204, 149, 1)", !1),
__collectibleLines: ["trendline", "level1", "level2", "level3", "level4",
"level5", "level6", "level7", "level8", "level9", "level10", "level11",
"level12", "level13", "level14", "level15", "level16", "level17",
"level18", "level19", "level20", "level21", "level22", "level23",
"level24"
]
},
linetooltrendbasedfibtime: {
clonable: !0,
showCoeffs: !0,
font: "Verdana",
fillBackground: !0,
transparency: 80,
horzLabelsAlign: "right",
vertLabelsAlign: "bottom",
trendline: {
visible: !0,
color: "rgba( 128, 128, 128, 1)",
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_DASHED
},
level1: m.c(0, "rgba( 128, 128, 128, 1)", !0),
level2: m.c(.382, "rgba( 204, 40, 40, 1)", !0),
level3: m.c(.5, "rgba( 149, 204, 40, 1)", !1),
level4: m.c(.618, "rgba( 40, 204, 40, 1)", !0),
level5: m.c(1, "rgba( 40, 204, 149, 1)", !0),
level6: m.c(1.382, "rgba( 40, 149, 204, 1)", !0),
level7: m.c(1.618, "rgba( 128, 128, 128, 1)", !0),
level8: m.c(2, "rgba( 40, 40, 204, 1)", !0),
level9: m.c(2.382, "rgba( 204, 40, 40, 1)", !0),
level10: m.c(2.618, "rgba( 149, 40, 204, 1)", !0),
level11: m.c(3, "rgba( 204, 40, 149, 1)", !0),
__collectibleLines: ["trendline", "level1", "level2", "level3", "level4",
"level5", "level6", "level7", "level8", "level9", "level10", "level11"
]
},
linetoolschiffpitchfork: {
clonable: !0,
fillBackground: !0,
transparency: 80,
style: h.Schiff,
median: {
visible: !0,
color: "rgba( 165, 0, 0, 1)",
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_SOLID
},
level0: m.c(.25, "rgba( 160, 107, 0, 1)", !1),
level1: m.c(.382, "rgba( 105, 158, 0, 1)", !1),
level2: m.c(.5, "rgba( 0, 155, 0, 1)", !0),
level3: m.c(.618, "rgba( 0, 153, 101, 1)", !1),
level4: m.c(.75, "rgba( 0, 101, 153, 1)", !1),
level5: m.c(1, "rgba( 0, 0, 153, 1)", !0),
level6: m.c(1.5, "rgba( 102, 0, 153, 1)", !1),
level7: m.c(1.75, "rgba( 153, 0, 102, 1)", !1),
level8: m.c(2, "rgba( 165, 0, 0, 1)", !1),
__collectibleLines: ["median", "level0", "level1", "level2", "level3", "level4",
"level5", "level6", "level7", "level8"
]
},
linetoolschiffpitchfork2: {
clonable: !0,
fillBackground: !0,
transparency: 80,
style: h.Schiff2,
median: {
visible: !0,
color: "rgba( 165, 0, 0, 1)",
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_SOLID
},
level0: m.c(.25, "rgba( 160, 107, 0, 1)", !1),
level1: m.c(.382, "rgba( 105, 158, 0, 1)", !1),
level2: m.c(.5, "rgba( 0, 155, 0, 1)", !0),
level3: m.c(.618, "rgba( 0, 153, 101, 1)", !1),
level4: m.c(.75, "rgba( 0, 101, 153, 1)", !1),
level5: m.c(1, "rgba( 0, 0, 153, 1)", !0),
level6: m.c(1.5, "rgba( 102, 0, 153, 1)", !1),
level7: m.c(1.75, "rgba( 153, 0, 102, 1)", !1),
level8: m.c(2, "rgba( 165, 0, 0, 1)", !1),
__collectibleLines: ["median", "level0", "level1", "level2", "level3", "level4",
"level5", "level6", "level7", "level8"
]
},
linetoolinsidepitchfork: {
clonable: !0,
fillBackground: !0,
transparency: 80,
style: h.Inside,
median: {
visible: !0,
color: "rgba( 165, 0, 0, 1)",
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_SOLID
},
level0: m.c(.25, "rgba( 160, 107, 0, 1)", !1),
level1: m.c(.382, "rgba( 105, 158, 0, 1)", !1),
level2: m.c(.5, "rgba( 0, 155, 0, 1)", !0),
level3: m.c(.618, "rgba( 0, 153, 101, 1)", !1),
level4: m.c(.75, "rgba( 0, 101, 153, 1)", !1),
level5: m.c(1, "rgba( 0, 0, 153, 1)", !0),
level6: m.c(1.5, "rgba( 102, 0, 153, 1)", !1),
level7: m.c(1.75, "rgba( 153, 0, 102, 1)", !1),
level8: m.c(2, "rgba( 165, 0, 0, 1)", !1),
__collectibleLines: ["median", "level0", "level1", "level2", "level3", "level4",
"level5", "level6", "level7", "level8"
]
},
linetool: {
frozen: !1,
visible: !0
},
linetoolvisibilities: {
intervalsVisibilities: {
seconds: !0,
secondsFrom: 1,
secondsTo: 59,
minutes: !0,
minutesFrom: 1,
minutesTo: 59,
hours: !0,
hoursFrom: 1,
hoursTo: 24,
days: !0,
daysFrom: 1,
daysTo: 366,
weeks: !0,
months: !0
}
}
}, n(TradingView.defaultProperties.chartproperties), r()
}
for (void 0 === TradingView.defaultProperties["study_MA@tv-basicstudies"] && (TradingView
.defaultProperties["study_MA@tv-basicstudies"] = {
description: "Moving Average",
shortDescription: "MA",
inputs: {
length: 9,
source: "close"
},
styles: {
MovAvg: {
visible: !0,
color: "rgba( 4, 150, 255, 1)",
linestyle: CanvasEx.LINESTYLE_SOLID,
linewidth: 1,
plottype: p.Line,
histogramBase: 0,
title: "MA"
}
}
}), void 0 === TradingView.defaultProperties["study_ErrorOnUpdate@tv-basicstudies"] && (
TradingView.defaultProperties["study_ErrorOnUpdate@tv-basicstudies"] = {
description: "Error On Update",
styles: {
ErrorOnUpdate: {
visible: !0,
color: "rgba( 255, 0, 0, 1)",
linestyle: CanvasEx.LINESTYLE_SOLID,
linewidth: 1,
plottype: p.Line,
histogramBase: 0
}
}
}), void 0 === TradingView.defaultProperties["study_ErrorOnCreate@tv-basicstudies"] && (
TradingView.defaultProperties["study_ErrorOnCreate@tv-basicstudies"] = {
description: "Error On Create",
styles: {
ErrorOnUpdate: {
visible: !0,
color: "rgba( 0, 255, 0, 1)",
linestyle: CanvasEx.LINESTYLE_SOLID,
linewidth: 1,
plottype: p.Line,
histogramBase: 0
}
}
}), void 0 === TradingView.defaultProperties["study_ErrorOnNewBar@tv-basicstudies"] && (
TradingView.defaultProperties["study_ErrorOnNewBar@tv-basicstudies"] = {
description: "Error On New Bar",
styles: {
ErrorOnUpdate: {
visible: !0,
color: "rgba( 0, 0, 255, 1)",
linestyle: CanvasEx.LINESTYLE_SOLID,
linewidth: 1,
plottype: p.Line,
histogramBase: 0
}
}
}), void 0 === TradingView.defaultProperties[
"study_PivotPointsHighLow@tv-basicstudies"] && (TradingView.defaultProperties[
"study_PivotPointsHighLow@tv-basicstudies"] = {
font: "Arial",
fontsize: 10,
borderColor: "rgba( 83, 143, 31, 1)",
backColor: "rgba( 240, 255, 204, 1)",
textColor: "rgba( 0, 0, 0, 1)"
}), void 0 === TradingView.defaultProperties["study_PivotPointsStandard@tv-basicstudies"] &&
(i = "rgba( 212, 121, 40, 1)", o = !0, s = 1, TradingView.defaultProperties[
"study_PivotPointsStandard@tv-basicstudies"] = {
_hardCodedDefaultsVersion: 1,
font: "Arial",
fontsize: 11,
levelsStyle: {
showLabels: !0,
visibility: {
P: o,
"S1/R1": o,
"S2/R2": o,
"S3/R3": o,
"S4/R4": o,
"S5/R5": o
},
colors: {
P: i,
"S1/R1": i,
"S2/R2": i,
"S3/R3": i,
"S4/R4": i,
"S5/R5": i
},
widths: {
P: s,
"S1/R1": s,
"S2/R2": s,
"S3/R3": s,
"S4/R4": s,
"S5/R5": s
}
}
}), void 0 === TradingView.defaultProperties["study_ZigZag@tv-basicstudies"] && (TradingView
.defaultProperties["study_ZigZag@tv-basicstudies"] = {
color: "rgba( 86, 135, 29, 1)",
linewidth: 2
}), void 0 === TradingView.defaultProperties["study_ElliottWave@tv-basicstudies"] && (
TradingView.defaultProperties["study_ElliottWave@tv-basicstudies"] = {
inputs: {},
level0: m.a("rgba( 255, 0, 0, 1)", !1),
level1: m.a("rgba( 0, 128, 0, 1)", !1),
level2: m.a("rgba( 0, 0, 255, 1)", !1),
level3: m.a("rgba( 255, 0, 255, 1)", !1),
level4: m.a("rgba( 0, 128, 255, 1)", !0),
level5: m.a("rgba( 255, 0, 0, 1)", !0),
level6: m.a("rgba( 0, 128, 0, 1)", !0),
level7: m.a("rgba( 0, 0, 255, 1)", !0),
level8: m.a("rgba( 255, 0, 255, 1)", !0)
}), void 0 === TradingView.defaultProperties[
"study_LinearRegression@tv-basicstudies"] && (TradingView.defaultProperties[
"study_LinearRegression@tv-basicstudies"] = {
styles: {
upLine: {
visible: !0,
color: "rgba( 0, 0, 255, 0.3)",
linestyle: CanvasEx.LINESTYLE_SOLID,
linewidth: 1
},
downLine: {
visible: !0,
color: "rgba( 0, 0, 255, 0.3)",
linestyle: CanvasEx.LINESTYLE_SOLID,
linewidth: 1
},
baseLine: {
visible: !0,
color: "rgba( 255, 0, 0, 0.3)",
linestyle: CanvasEx.LINESTYLE_SOLID,
linewidth: 1
},
extendLines: !0,
showPearsons: !0,
backgroundColor: "rgba( 153, 21, 21, 0.3)",
transparency: 70
}
}), void 0 === TradingView.defaultProperties["study_RegressionTrend@tv-basicstudies"] && (
TradingView.defaultProperties["study_RegressionTrend@tv-basicstudies"] = {
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_SOLID,
styles: {
upLine: {
visible: !0,
color: "rgba( 0, 0, 255, 0.3)",
linestyle: CanvasEx.LINESTYLE_SOLID,
linewidth: 1
},
downLine: {
visible: !0,
color: "rgba( 0, 0, 255, 0.3)",
linestyle: CanvasEx.LINESTYLE_SOLID,
linewidth: 1
},
baseLine: {
visible: !0,
color: "rgba( 255, 0, 0, 0.3)",
linestyle: CanvasEx.LINESTYLE_SOLID,
linewidth: 1
},
extendLines: !1,
showPearsons: !0,
transparency: 70
}
}), void 0 === TradingView.defaultProperties["study_Compare@tv-basicstudies"] && (
TradingView.defaultProperties["study_Compare@tv-basicstudies"] = {
minTick: "default"
}), void 0 === TradingView.defaultProperties["study_Overlay@tv-basicstudies"] && (a =
"study_Overlay@tv-basicstudies", TradingView.defaultProperties[a] = {
style: c.STYLE_BARS,
showPriceLine: !1,
minTick: "default",
candleStyle: {
upColor: "rgba( 107, 165, 131, 1)",
downColor: "rgba( 215, 84, 66, 1)",
drawWick: !0,
drawBorder: !0,
borderColor: "rgba( 55, 134, 88, 1)",
borderUpColor: "rgba( 34, 84, 55, 1)",
borderDownColor: "rgba( 91, 26, 19, 1)",
wickColor: "rgba( 115, 115, 117, 1)",
wickUpColor: "rgba( 115, 115, 117, 1)",
wickDownColor: "rgba( 115, 115, 117, 1)",
barColorsOnPrevClose: !1
},
hollowCandleStyle: {
upColor: "rgba( 107, 165, 131, 1)",
downColor: "rgba( 215, 84, 66, 1)",
drawWick: !0,
drawBorder: !0,
borderColor: "rgba( 55, 134, 88, 1)",
borderUpColor: "rgba( 34, 84, 55, 1)",
borderDownColor: "rgba( 91, 26, 19, 1)",
wickColor: "rgba( 115, 115, 117, 1)",
wickUpColor: "rgba( 115, 115, 117, 1)",
wickDownColor: "rgba( 115, 115, 117, 1)",
barColorsOnPrevClose: !1
},
barStyle: {
upColor: "rgba( 107, 165, 131, 1)",
downColor: "rgba( 215, 84, 66, 1)",
barColorsOnPrevClose: !1,
dontDrawOpen: !1
},
lineStyle: {
color: "rgba( 3, 3, 247, 1)",
linestyle: CanvasEx.LINESTYLE_SOLID,
linewidth: 1,
priceSource: "close",
styleType: c.STYLE_LINE_TYPE_SIMPLE
},
areaStyle: {
color1: "rgba( 96, 96, 144, 0.5)",
color2: "rgba( 1, 246, 245, 0.5)",
linecolor: "rgba( 0, 148, 255, 1)",
linestyle: CanvasEx.LINESTYLE_SOLID,
linewidth: 1,
priceSource: "close",
transparency: 50
},
baselineStyle: {
baselineColor: "rgba( 117, 134, 150, 1)",
topFillColor1: "rgba( 83, 185, 135, 0.1)",
topFillColor2: "rgba( 83, 185, 135, 0.1)",
bottomFillColor1: "rgba( 235, 77, 92, 0.1)",
bottomFillColor2: "rgba( 235, 77, 92, 0.1)",
topLineColor: "rgba( 83, 185, 135, 1)",
bottomLineColor: "rgba( 235, 77, 92, 1)",
topLineWidth: 1,
bottomLineWidth: 1,
priceSource: "close",
transparency: 50,
baseLevelPercentage: 50
},
styles: {
open: {
visible: !0,
color: "rgba( 255, 0, 0, 1)",
linestyle: CanvasEx.LINESTYLE_SOLID,
linewidth: 1,
plottype: p.Line,
histogramBase: 0
},
high: {
visible: !0,
color: "rgba( 255, 0, 0, 1)",
linestyle: CanvasEx.LINESTYLE_SOLID,
linewidth: 1,
plottype: p.Line,
histogramBase: 0
},
low: {
visible: !0,
color: "rgba( 255, 0, 0, 1)",
linestyle: CanvasEx.LINESTYLE_SOLID,
linewidth: 1,
plottype: p.Line,
histogramBase: 0
},
close: {
visible: !0,
color: "rgba( 255, 0, 0, 1)",
linestyle: CanvasEx.LINESTYLE_SOLID,
linewidth: 1,
plottype: p.Line,
histogramBase: 0
}
}
}), l = t.split("."),
d = TradingView.defaultProperties, f = 0; f < l.length; f++) d && (d = d[l[f]]);
return d ? TradingView.clone(d) : {}
};
s.create = function(t, e) {
if (e) {
var i = m(t);
TradingView.defaultProperties[t] = $.extend(e, i)
}
}, s.remove = function(t) {
TradingView.defaultProperties[t] = void 0
}, TradingView.saveDefaults = function(t, e) {
TVSettings.setJSON(t, e)
}, TradingView.factoryDefaults = m, window.applyDefaultOverridesToLinetools = r, window
.applyDefaultsOverrides = n, window.applyPropertiesOverrides = o, window.defaults = s, e
.applyDefaultOverridesToLinetools = r, e.applyDefaultsOverrides = n, e.applyPropertiesOverrides = o,
e.defaults = s, e.factoryDefaults = m, e.saveDefaults = TradingView.saveDefaults
}, function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
});
! function(t) {
t[t.Original = 0] = "Original", t[t.Schiff = 1] = "Schiff", t[t.Inside = 2] = "Inside", t[t
.Schiff2 = 3] = "Schiff2"
}(e.LineToolPitchforkStyle || (e.LineToolPitchforkStyle = {}))
}, function(t, e, i) {
"use strict";
var o, n;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(9), n = function() {
function t(t, e) {
this._major = t, this._minor = e
}
return t.prototype.major = function() {
return this._major
}, t.prototype.minor = function() {
return this._minor
}, t.prototype.isZero = function() {
return 0 === this._major && 0 === this._minor
}, t.prototype.toString = function() {
return this._major + "." + this._minor
}, t.prototype.compareTo = function(t) {
return this._major < t._major ? -1 : this._major > t._major ? 1 : this._minor < t
._minor ? -1 : this._minor > t._minor ? 1 : 0
}, t.prototype.isLess = function(t) {
return this.compareTo(t) < 0
}, t.prototype.isLessOrEqual = function(t) {
return this.compareTo(t) <= 0
}, t.prototype.isEqual = function(t) {
return 0 === this.compareTo(t)
}, t.prototype.isGreater = function(t) {
return this.compareTo(t) > 0
}, t.prototype.isGreaterOrEqual = function(t) {
return this.compareTo(t) >= 0
}, t.parse = function(e) {
var i, n, r;
if (e instanceof t) return new t(e.major(), e.minor());
if ("number" == typeof e) return o.assert(Math.floor(e) === e,
"Version should not be a float number"), new t(e, 0);
if ("string" == typeof e) {
if (i = e.split("."), 1 === i.length) return n = parseInt(i[0], 10), o.assert(!
isNaN(n), "Bad version string: " + e), new t(n, 0);
if (2 === i.length) return n = parseInt(i[0], 10), o.assert(!isNaN(n),
"Bad version string: " + e), r = parseInt(i[1], 10), o.assert(!isNaN(r),
"Bad version string: " + e), new t(n, r);
throw Error("Bad version string (one dot expected): " + e)
}
throw Error("Bad version: " + e)
}, t.ZERO = new t(0, 0), t
}(), e.Version = n
}, function(t, e, i) {
"use strict";
function o(t) {
this._studyId = t, this._maxToVers = n.ZERO, this._maxFromVers = n.ZERO, this._migrs = []
}
var n = i(300).Version,
r = i(7).getLogger("Chart.StudyMigration");
o.prototype.addMigration = function(t, e, i) {
var o = n.parse(t),
r = n.parse(e);
o.isGreater(this._maxFromVers) && (this._maxFromVers = o), r.isGreater(this._maxToVers) && (this
._maxToVers = r), this._migrs.push({
fromVers: o,
toVers: r,
rules: i
})
}, o.prototype.updateInputs = function(t, e, i) {
var o, n, s;
if (!i) return i;
for (o = TradingView.clone(i), n = t; n.isLess(e) && null != (s = this._findMigration(n));) {
if (r.logNormal("Migrating study inputs from " + s.fromVers + " to " + s.toVers +
" version, studyId: " + this._studyId + ", migration: " + JSON.stringify(s) +
", inputs: " + JSON.stringify(i)), o = this._applyMigration(o, s), !n.isLess(s
.toVers)) throw Error(
"Problems in study migration process... Possible infinite cycle has been detected and stopped."
);
n = s.toVers
}
return n > t && r.logNormal("Study inputs migration is done, studyId: " + this._studyId +
", inputs: " + JSON.stringify(o)), o
}, o.prototype._findMigration = function(t) {
var e, i, o = -1,
n = this._maxFromVers;
for (e = 0; e < this._migrs.length; e++) i = this._migrs[e], i.fromVers.isLess(t) || i.fromVers
.isLessOrEqual(n) && (n = i.fromVers, o = e);
return o < 0 ? null : this._migrs[o]
}, o.prototype._applyMigration = function(t, e) {
var i, o, n, r = t;
for (i = 0; i < e.rules.length; i++) o = e.rules[i], n = this._getApplyRuleFun(o.type), r = n(r,
o);
return r
}, o.prototype._getApplyRuleFun = function(t) {
if ("inputRemoved" === t) return o._applyInputRemovedRule;
if ("inputChangedType" === t) return o._applyInputChangedTypeRule;
if ("inputChangedMinMax" === t) return o._applyInputChangedMinMaxRule;
if ("inputChangedOptions" === t) return o._applyInputChangedOptionsRule;
throw Error("Unknown migration rule type: " + t)
}, o._applyInputRemovedRule = function(t, e) {
if (!(e.inputId in t)) return t;
if ("removeVal" !== e.action) throw Error("Unexpected rule.action=" + e.action +
" in rule.type=" + e.type);
var i = t[e.inputId];
return delete t[e.inputId], r.logNormal("Input " + e.inputId + "=" + i + " removed"), t
}, o._applyInputChangedTypeRule = function(t, e) {
var i = t[e.inputId];
if ("resetToDefVal" === e.action) return t[e.inputId] = e.defVal, r.logNormal("Input " + e
.inputId + "=" + i + " reset to default value " + e.defVal), t;
if ("convertVal" === e.action) {
if (null == i) return t;
if ("float" === e.inputTypeFrom && "integer" === e.inputType) return t[e.inputId] = Math
.round(t[e.inputId]), r.logNormal("Input " + e.inputId + "=" + i +
" converted to value " + t[e.inputId]), t;
if ("integer" === e.inputTypeFrom && "float" === e.inputType) return t;
if ("text" === e.inputTypeFrom && "source" === e.inputType) return o._isValidSource(i, e
.options) ? t : (t[e.inputId] = e.defVal, t);
throw Error("Cannot convertVal from " + e.inputTypeFrom + " to " + e.inputType)
}
throw Error("Unknown action " + e.action + " for rule with type " + e.type)
}, o._isValidSource = function(t, e) {
return t.indexOf("$") >= 0 || e.indexOf(t) >= 0
}, o._applyInputChangedMinMaxRule = function(t, e) {
if ("adjustValIfNeeded" !== e.action) throw Error("Unknown action " + e.action +
" for rule with type " + e.type);
var i = t[e.inputId];
return i < e.minVal ? t[e.inputId] = e.minVal : i > e.maxVal && (t[e.inputId] = e.maxVal), r
.logNormal("Input " + e.inputId + "=" + i + " adjusted to value " + t[e.inputId]), t
}, o._applyInputChangedOptionsRule = function(t, e) {
if (!(["text"].indexOf(e.inputType) >= 0 && "resetToDefValIfNeeded" === e.action)) throw Error(
"Unexpected rule.inputType=" + e.inputType + " in rule.action=" + e.action);
var i = t[e.inputId];
return e.options.indexOf(i) < 0 && (t[e.inputId] = e.defVal, r.logNormal("Input " + e.inputId +
"=" + i + " reset to default value " + e.defVal)), t
}, t.exports = o
}, function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g><path fill-rule="nonzero" d="M4.034 14.18l-.07-.18.07-.18c1.535-3.975 5.645-6.82 9.966-6.82 4.32 0 8.431 2.845 9.966 6.82l.07.18-.07.18c-1.535 3.975-5.646 6.82-9.966 6.82-4.321 0-8.431-2.845-9.966-6.82zm9.966 5.82c3.84 0 7.521-2.503 8.962-6-1.441-3.497-5.122-6-8.962-6-3.841 0-7.521 2.503-8.962 6 1.441 3.497 5.121 6 8.962 6z"/><path d="M11 14.001c0 1.66 1.341 2.999 3.001 2.999s2.999-1.339 2.999-2.999c0-1.66-1.339-3.001-2.999-3.001-1.66 0-3.001 1.341-3.001 3.001z"/></g></svg>'
}, function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 10" width="20" height="10"><path fill="none" stroke="currentColor" stroke-width="1.5" d="M2 1l8 8 8-8"/></svg>'
}, function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
}), e.default = function(t) {
return t.reduce(function(t, e, i) {
return ~t.indexOf(e) || t.push(e), t
}, [])
}, t.exports = e.default
}, function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M22.5 4v-1h-19.5v19.5h1v-18.5z"/><path d="M5.493 24v1h19.507v-19.5h-1v18.5z"/><path d="M5.275 23.432l18.213-18.213-.707-.707-18.213 18.213z"/><path d="M5.568 24.383l19.079-5.906-.296-.955-19.079 5.906z" id="Line-Copy-18"/><path d="M4.587 22.68l5.891-19.032-.955-.296-5.891 19.032z"/><path d="M3.5 11h21v-1h-21z"/><path d="M3.5 18h21v-1h-21z"/><path d="M10 3.5v21h1v-21z"/><path d="M17 3.5v21h1v-21z"/><path d="M23.975 23.475l1.025 1.025c0-11.874-9.626-21.5-21.5-21.5l1.025 1.025c10.506.517 18.932 8.944 19.45 19.45z"/><path d="M3.5 26c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM24.5 5c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
}, function(t, e, i) {
"use strict";
var o, n, r, s, a;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(24), n = i(5), r = i(17), s = !n.enabled("hide_left_toolbar_by_default"), a = o.getBool(
"ChartDrawingToolbarWidget.visible", s), e.isDrawingToolbarVisible = new r(a)
}, function(t, e, i) {
"use strict";
function o(t) {
var e = t.action,
i = t.isActive,
o = t.isBgFull,
a = t.isHidden,
l = t.isTransparent,
c = t.toolName;
return n.createElement(s.ToolButton, {
icon: r.lineToolsInfo[c].icon,
isActive: i,
isBgFull: o,
isHidden: a,
isTransparent: l,
onClick: e,
title: r.lineToolsInfo[c].localizedName
})
}
var n, r, s;
Object.defineProperty(e, "__esModule", {
value: !0
}), n = i(2), r = i(66), s = i(151), e.ToolButtonAction = o
}, function(t, e, i) {
"use strict";
function o() {
var t, e, i = [];
for (i = i.concat([61536, 61537, 61538, 61539]), i = i.concat([61725, 61726]), i = i.concat([61575,
61576, 61796, 61797
]), i = i.concat([61779, 61780, 61781, 61782, 61783, 61784, 61785, 61786]), t = i.slice(0), e =
61440; e <= 61846; e++) - 1 === i.indexOf(e) && (e % 16 == 15 && 61487 !== e || e >= 61620 &&
e <= 61630 || 61718 !== e && 61719 !== e && 61472 !== e && 61619 !== e && t.push(e));
return t
}
Object.defineProperty(e, "__esModule", {
value: !0
}),
e.availableIcons = o()
}, function(t, e, i) {
"use strict";
var o, n, r;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(10), n = i(24),
function(t) {
function e(e) {
return t.favorites.indexOf(e)
}
function i() {
t.favorites = [], n.getJSON("chart.favoriteDrawings", []).forEach(function(e) {
t.favorites.push(e.tool || e)
}), t.favoritesSynced.fire()
}
function r() {
n.setJSON("chart.favoriteDrawings", t.favorites)
}
t.favorites = [], t.favoritesSynced = new o, t.favoriteIndex = e, t.saveFavorites = r, i(), n
.onSync.subscribe(null, i)
}(r || (r = {})),
function(t) {
function e() {
return r.favorites.slice()
}
function i() {
return r.favorites.length
}
function n(t) {
return t < 0 || t >= i() ? "" : r.favorites[t]
}
function s(e) {
return !l(e) && (r.favorites.push(e), r.saveFavorites(), t.favoriteAdded.fire(e), !0)
}
function a(e) {
var i = r.favoriteIndex(e);
return -1 !== i && (r.favorites.splice(i, 1), r.saveFavorites(), t.favoriteRemoved.fire(e),
!0)
}
function l(t) {
return -1 !== r.favoriteIndex(t)
}
function c(e, o) {
if (o < 0 || o >= i()) return !1;
var n = r.favoriteIndex(e);
return -1 !== n && o !== n && (r.favorites.splice(n, 1), r.favorites.splice(o, 0, e), r
.saveFavorites(), t.favoriteMoved.fire(e, n, o), !0)
}
t.favoriteAdded = new o, t.favoriteRemoved = new o, t.favoriteMoved = new o, t.favoritesSynced =
r.favoritesSynced, t.favorites = e, t.favoritesCount = i, t.favorite = n, t.addFavorite = s,
t.removeFavorite = a, t.isFavorite = l, t.moveFavorite = c
}(e.LinetoolsFavoritesStore || (e.LinetoolsFavoritesStore = {}))
}, function(t, e, i) {
"use strict";
function o(t, e) {
var i = P.colorsPalette[t];
if (!i) throw Error("No such color " + t);
return i
}
function n(t) {
return !t.isPrivate
}
function r() {
return e.themes[e.watchedTheme.value()] || e.themes[e.DEFAULT_THEME]
}
function s(t) {
return r().getThemedColor(t)
}
function a(t) {
e.watchedTheme.setValue(t)
}
function l() {
a(w.getValue(L) || e.DEFAULT_THEME)
}
function c() {
w.setValue(L, r().name, {
forceFlush: !0
})
}
function h(t) {
return T.loadTheme(t)
}
function u() {
return T.loadThemes()
}
function d() {
return C.getStdThemeNames()
}
function p(t) {
return C.getStdChartTheme(t).then(function(t) {
return t || {
content: void 0
}
})
}
function _() {
return C.getStdThemes()
}
function f(t, e) {
return T.saveTheme(t, e)
}
function m(t) {
return T.removeTheme(t)
}
function g(t) {
return T.isThemeExist(t)
}
function v(t) {
return C.translateThemeName(t)
}
function y(t) {
return C.isStdTheme(t)
}
function b(t) {
return {
content: {
chartProperties: {
paneProperties: t.m_model.properties().paneProperties.state(),
scalesProperties: t.m_model.properties().scalesProperties.state()
},
mainSourceProperties: t.m_model.m_mainSeries.properties().state()
}
}
}
var S, w, T, C, x, P, L, I;
Object.defineProperty(e, "__esModule", {
value: !0
}), i(737), i(12), S = i(17), w = i(24), T = i(738), C = i(740), x = i(741), P = i(742), e.themes =
(I = {}, I[C.StdTheme.Light] = {
name: C.StdTheme.Light,
label: window.t("Light", {
context: "colorThemeName"
}),
className: "theme-light",
order: 2,
getThemedColor: function(t) {
return o(t)
}
}, I[C.StdTheme.Dark] = {
name: C.StdTheme.Dark,
label: window.t("Dark", {
context: "colorThemeName"
}),
className: "theme-dark",
order: 1,
getThemedColor: function(t) {
return o(x[t])
}
}, I), e.DEFAULT_THEME = "light", e.watchedTheme = new S, e.watchedTheme.subscribe(function(t) {
var i = document.getElementsByTagName("html")[0];
Object.keys(e.themes).forEach(function(t) {
i.classList.remove(e.themes[t].className)
}), i.classList.add(e.themes[t].className)
}), e.isPublicTheme = n, e.getCurrentTheme = r, e.setThemedColor = s, e.setTheme = a, L =
"current_theme.name", e.restoreTheme = l, e.syncTheme = c, e.getTheme = h, e.getThemeNames = u, e
.getStdThemeNames = d, e.getStdTheme = p, e.getStdThemes = _, e.saveTheme = f, e.removeTheme = m, e
.isThemeExist = g, e.translateStdThemeName = v, e.isStdTheme = y, e.extractThemeFromModel = b
}, function(t, e, i) {
"use strict";
var o = i(23),
n = i(15).parseJSONorNot,
r = i(7).getLogger("Chart.SaveloadAdapter.Library"),
s = function() {
var t, e, i, s, a = {},
l = null;
return a.setCustomAdapter = function(t) {
l = t, r.logNormal("Use custom save-load adapter")
}, a.initialize = function(o, n, r, a) {
t = o, e = n, i = r, s = a
}, a.updateUser = function(t) {
e = t
}, a.getCharts = function(o, a) {
function c(t) {
t = t.map(function(t) {
return {
id: t.id,
name: t.name,
image_url: t.id,
modified_iso: t.timestamp,
short_symbol: t.symbol,
interval: t.resolution
}
}), o(t)
}
return l ? void l.getAllCharts().then(c).catch(a) : $.ajax({
url: "{0}/{1}/charts?client={2}&user={3}".format(i, encodeURIComponent(s),
encodeURIComponent(t), encodeURIComponent(e)),
type: "GET",
crossDomain: !0
}).done(function(t) {
var e = n(t);
if ("ok" !== e.status) return r.logWarn("Charts list request failed: " + e
.message), void a();
c(e.data)
}).fail(a)
}, a.removeChart = function(o, a) {
if (l) return void l.removeChart(o).then(a);
$.ajax({
url: "{0}/{1}/charts?client={2}&user={3}&chart={4}".format(i,
encodeURIComponent(s), encodeURIComponent(t), encodeURIComponent(e),
encodeURIComponent(o)),
type: "DELETE",
crossDomain: !0
}).done(function(t) {
var e = n(t);
"ok" !== e.status && r.logWarn("Chart delete request failed: " + e.message),
a()
})
}, a.saveChart = function(o, a, c, h, u, d, p) {
var _, f = u.id.value(),
m = {
name: o,
content: JSON.stringify(h),
symbol: a,
resolution: c
};
if (l) return m.id = f, void l.saveChart(m).then(d).catch(p);
_ = "{0}/{1}/charts?client={2}&user={3}".format(i, encodeURIComponent(s),
encodeURIComponent(t), encodeURIComponent(e)), void 0 !== f && (_ += "&chart=" +
encodeURIComponent(f)), $.ajax({
url: _,
data: m,
type: "POST",
crossDomain: !0
}).done(function(t) {
var e = n(t);
if ("ok" !== e.status) return r.logWarn("Chart save request failed: " + e
.message), void p();
d(e.id)
}).fail(function() {
p()
})
}, a.getChartContent = function(o, a, c) {
function h(t) {
var e = JSON.parse(t);
return e.uid = o.id, e
}
if (l) return void l.getChartContent(o.id).then(function(t) {
var e = h(t);
a(e)
}).catch(c);
$.ajax({
url: "{0}/{1}/charts?client={2}&user={3}&chart={4}".format(i,
encodeURIComponent(s), encodeURIComponent(t), encodeURIComponent(e),
encodeURIComponent(o.id)),
type: "GET",
crossDomain: !0
}).done(function(t) {
var e, i = n(t);
if ("ok" !== i.status) return void r.logWarn("Chart load request failed: " +
i.message);
e = h(i.data.content), a(e)
}).fail(function() {
c && c()
})
}, a.loadChart = function(t) {
a.getChartContent(t, function(t) {
o.emit("chart_load_requested", t)
}, function() {
r.logWarn("Error loading chart")
})
}, a.removeStudyTemplate = function(o, a) {
if (l) return void l.removeStudyTemplate({
name: o
}).then(a);
$.ajax({
url: "{0}/{1}/study_templates?client={2}&user={3}&template={4}".format(i,
encodeURIComponent(s), encodeURIComponent(t), encodeURIComponent(e),
encodeURIComponent(o)),
type: "DELETE",
crossDomain: !0
}).done(function(t) {
var e = n(t);
"ok" !== e.status && r.logWarn("Chart delete request failed: " + e.message),
a()
})
}, a.getStudyTemplateContent = function(o, r) {
if (l) return void l.getStudyTemplateContent({
name: o
}).then(function(t) {
r({
content: t
})
});
$.ajax({
url: "{0}/{1}/study_templates?client={2}&user={3}&template={4}".format(i,
encodeURIComponent(s), encodeURIComponent(t), encodeURIComponent(e),
encodeURIComponent(o)),
type: "GET",
crossDomain: !0
}).done(function(t) {
r(n(t).data)
})
}, a.saveStudyTemplate = function(o, a) {
var c = {
name: o.name,
content: o.content
};
if (l) return void l.saveStudyTemplate(c).then(a.bind(null, {
error: ""
})).catch(function(t) {
a({
error: null != t ? "" + t : "error"
})
});
$.ajax({
url: "{0}/{1}/study_templates?client={2}&user={3}".format(i,
encodeURIComponent(s), encodeURIComponent(t), encodeURIComponent(e)
),
type: "POST",
crossDomain: !0,
data: c
}).done(function(t) {
var e = n(t);
"ok" !== e.status && r.logWarn("Template save request failed: " + e
.message), a({
error: "ok" === e.status ? "" : e.status
})
})
}, a._templatesCache = null, a.getStudyTemplatesList = function(o) {
function c(t) {
t = t.map(function(t) {
return {
is_default: !1,
name: t.name
}
}), a._templatesCache = t, o(t)
}
return a._templatesCache ? void o(a._templatesCache) : (a._templatesCache = [], l ?
void l.getAllStudyTemplates().then(c) : void $.ajax({
url: "{0}/{1}/study_templates?client={2}&user={3}".format(i,
encodeURIComponent(s), encodeURIComponent(t),
encodeURIComponent(e)),
type: "GET",
crossDomain: !0
}).done(function(t) {
if (null !== a._templatesCache) {
var e = n(t);
if ("ok" !== e.status) return void r.logWarn(
"Templates list request failed: " + e.message);
c(e.data)
}
}))
}, a.invalidateStudyTemplatesList = function() {
a._templatesCache = null
}, a
}();
t.exports = s
}, function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
});
var o = {
SELECT: "select"
};
e.events = o
}, function(t, e, i) {
"use strict";
function o(t) {
return t.replace(r, s)
}
function n(t) {
return void 0 === t && (t = ""), t.replace(/(<([^>]+)>)/gi, "")
}
var r, s;
Object.defineProperty(e, "__esModule", {
value: !0
}), r = /[<"'&>]/g, s = function(t) {
return "&#" + t.charCodeAt(0) + ";"
}, e.htmlEscape = o, e.removeTags = n
}, function(t, e, i) {
"use strict";
function o(t, e) {
if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
}
var n;
Object.defineProperty(e, "__esModule", {
value: !0
}), n = function() {
function t(t, e) {
var i, o;
for (i = 0; i < e.length; i++) o = e[i], o.enumerable = o.enumerable || !1, o
.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key,
o)
}
return function(e, i, o) {
return i && t(e.prototype, i), o && t(e, o), e
}
}(), e.KeyboardListener = function() {
function t() {
var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "keydown";
o(this, t), this._event = e
}
return n(t, [{
key: "regHandlers",
value: function(t) {
this._handlers = t
}
}, {
key: "watchOn",
value: function(t) {
this._listener = this._regListener(), this._watchingEl = t, t
.addEventListener(this._event, this._listener)
}
}, {
key: "stopWatching",
value: function() {
this._watchingEl.removeEventListener(this._event, this._listener)
}
}, {
key: "_regListener",
value: function() {
var t = this;
return function(e) {
var i = e.which,
o = t._getHandler(i);
e.stopPropagation(), o(e)
}
}
}, {
key: "_getHandler",
value: function(t) {
var e = this._handlers[t],
i = function() {},
o = function(t) {
t.preventDefault(), e(t)
};
return e ? o : i
}
}]), t
}()
}, function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
});
var o = {
SELECT: "select",
SELECT_CUSTOM: "selectCustom",
AFTER_CLOSE_MENU: "afterCloseMenu",
BEFORE_OPEN_MENU: "beforeOpenMenu"
};
e.events = o
}, function(t, e, i) {
"use strict";
function o(t, e, i) {
e.toggleClass("i-hidden", "" === t.val()), i.fire(t.val())
}
function n(t) {
var e, i, n, s = $(l);
return t.addClass && s.addClass(t.addClass), t.withoutControls && s.addClass(
"tv-search-row--without-controls"), e = s.find(".js-input-control"), i = s.find(
".js-reset-button"), t.placeholder && e.attr("placeholder", t.placeholder), i[0]
.addEventListener("click", function() {
e.val("").trigger("input").focus()
}), n = new r, e.on("input propertychange", o.bind(null, e, i, n)), o(e, i, n), {
$control: s,
$input: e,
inputChangedDelegate: n
}
}
var r, s, a, l;
Object.defineProperty(e, "__esModule", {
value: !0
}), r = i(10), s = i(383), a = i(762), i(763), l =
'<div class="tv-search-row"><input class="tv-search-row__input js-input-control" type="text" name="q" value="" autocomplete="off"><span class="tv-search-row__input-reset i-hidden js-reset-button">' +
s + '</span><span class="tv-search-row__search-icon">' + a + "</span></div>", e
.createSearchControl = n
}, function(t, e, i) {
"use strict";
function o(t) {
this._options = t || {}, this._setInput(), this._caption = $('<i class="interval-caption">').html(
"&nbsp;"), this._helpTooltipTrigger = $(
'<i class="help-tooltip-trigger apply-common-tooltip common-tooltip-below">').text("?")
.attr("title", $.t(
"Type the interval number for minute charts (i.e. 5 if it is going to be a five minute chart). Or number plus letter for H (Hourly), D (Daily), W (Weekly), M (Monthly) intervals (i.e. D or 2H)"
)), this._dialogTitle = $.t("Change Interval")
}
var n = i(76),
r = i(71);
o.prototype._setInput = function() {
this._input = $(
'<input type="text" class="change-interval-input" autocomplete="off" maxlength="4">'),
this._input.on("keypress", this._handleInput.bind(this)).on("input", function() {
this._validate(), this._updateCaption()
}.bind(this)).on("blur", function() {
setTimeout(this._submit.bind(this), 0)
}.bind(this))
}, o.prototype._validate = function() {
var t = this._input.val();
this._parsed = r.parseIntervalValue(t), this._valid = !this._parsed.error, this._supported = !
this._parsed.error && r.intervalIsSupported(t), !this._supported || this._parsed.unit &&
"H" !== this._parsed.unit || this._parsed.qty * ("H" === this._parsed.unit ? 60 : 1) >
1440 && (this._supported = !1)
}, o.prototype._updateCaption = function() {
var t, e, i;
this._valid && this._supported ? (e = this._parsed.qty || 1, i = this._parsed.unit ? {
H: "hour",
D: "day",
W: "week",
M: "month",
S: "second"
} [this._parsed.unit] : "minute", t = e + " " + $.t(i, {
count: e
}), this._input.add(this._caption).removeClass("error")) : (t = this._parsed.error ?
"&nbsp;" : $.t("Not applicable"), this._input.add(this._caption).addClass("error")),
this._caption.html(t)
},
o.prototype._handleInput = function(t) {
if (13 === t.which) return void this._submit();
t.ctrlKey || t.metaKey || !t.charCode || !t.which || t.which <= 32 || r.isIntervalChar(String
.fromCharCode(t.charCode)) || t.preventDefault()
}, o.prototype._submit = function() {
var t, e;
TVDialogs.isOpen(this._dialogTitle) && (this._valid && this._supported && (t = r
.sanitizeIntervalValue(this._input.val()), e = n.interval.value(), t && e !== t &&
"function" == typeof this._options.callback && this._options.callback(t)), TVDialogs
.destroy(this._dialogTitle))
}, o.prototype._setInitialValue = function(t) {
var e, i;
t = t || this._options.initialValue, e = "", i = !1, t && "," !== t ? e = r
.sanitizeIntervalValue(t) || "" : (t = n.interval.value(), e = t, i = !0), this._input.val(
e), i && this._input.select()
}, o.prototype.isValid = function() {
return !!this._valid
}, o.prototype.show = function(t) {
var e = TVDialogs.createDialog(this._dialogTitle, {
hideCloseCross: !0,
addClass: "change-interval-dialog"
}),
i = e.find("._tv-dialog-content");
return e.css("min-width", 0), i.css("min-width", 0).mousedown(function(t) {
this._input.is(t.target) || t.preventDefault()
}.bind(this)).append(this._input.add(this._caption).add(this._helpTooltipTrigger)),
TVDialogs.applyHandlers(e), TVDialogs.positionDialog(e), this._setInitialValue(t), this
._validate(), this._updateCaption(), e
}, t.exports = o
}, function(t, e, i) {
"use strict";
function o(t) {
return t && t.__esModule ? t : {
default: t
}
}
function n(t, e) {
if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
}
function r(t, e) {
if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
return !e || "object" != typeof e && "function" != typeof e ? t : e
}
function s(t, e) {
if ("function" != typeof e && null !== e) throw new TypeError(
"Super expression must either be null or a function, not " + typeof e);
t.prototype = Object.create(e && e.prototype, {
constructor: {
value: t,
enumerable: !1,
writable: !0,
configurable: !0
}
}), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
}
var a, l;
Object.defineProperty(e, "__esModule", {
value: !0
}), e.AddSymbolCheckbox = void 0, a = i(204), l = o(a), e.AddSymbolCheckbox = function(t) {
function e(t) {
n(this, e), t.checked = TVSettings.getBool("showAddSymbolDialog.checkboxState", !0);
var i = r(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, t));
return i.$checkbox.change(function() {
setTimeout(function() {
TVSettings.setValue("showAddSymbolDialog.checkboxState", i.checked)
})
}), i
}
return s(e, t), e
}(l.default)
}, function(t, e, i) {
"use strict";
function o(t) {
return t && t.__esModule ? t : {
default: t
}
}
function n(t, e) {
var i, o, n, r, c, p, _, f, m, g, v, y = arguments.length > 2 && void 0 !== arguments[2] ?
arguments[2] : {};
for (y = $.extend({}, {
title: $.t("Confirm Inputs"),
callback: function(t) {}
}, y), i = null, o = (0, s.createDialog)({
title: y.title,
contentWrapTemplate: '<div class="tv-dialog__section tv-dialog__section--no-border"></div>',
width: u,
closeOnClickAtOtherDialogs: !0,
destroyOnClose: !0,
actionsWrapTemplate: '<div class="tv-dialog__section tv-dialog__section--actions tv-dialog__section--actions-adaptive tv-dialog__section--no-border">',
isClickOutFn: function(t) {
var e = i.symbolSearchPopup();
if (e) return e[0] !== t.target && !e[0].contains(t.target) && void 0
},
actions: [{
name: "apply",
type: "primary",
text: $.t("Apply"),
key: 13
}]
}), d = o, n = (0, l.merge)({}, e.defaults.inputs), r = 0; r < e.inputs.length; ++r) c = e
.inputs[r], c.confirm || delete n[c.id];
p = new h.default({
inputs: n
}), _ = {
metaInfo: function() {
return e
}
}, f = o.$content, o.open(), i = new a.StudyInputsPropertyPage(p, t.model(), _, !0, o.zIndex),
m = i.widget(), f.append(m), Array.prototype.forEach.call(f.find("select"), function(t) {
var e = $(t),
i = "tv-select-container dialog";
e.hasClass("tv-select-container-fontsize") && (i += " tv-select-container-fontsize"), e
.selectbox({
speed: 100,
classHolder: i
})
}), $('input[type="text"]', f).addClass("tv-text-input inset dialog"), $("input.ticker", f)
.TVTicker(), o.on("action:apply", function() {
(0, y.callback)(p.state()), o.close()
}), g = o.$content.innerWidth() - o.$content.width(), v = m.width() + g, v > u && o.$el.css(
"max-width", v), f.find("input,select").first().focus()
}
function r() {
return d
}
var s, a, l, c, h, u, d;
Object.defineProperty(e, "__esModule", {
value: !0
}), e.show = n, e.instance = r, s = i(65), a = i(246), l = i(15), c = i(25), h = o(c), i(241), u =
450, d = null
}, function(t, e, i) {
function o(t, e, i, o, r, s) {
if (!t) return void n.logDebug("Missing control");
this._control = t, this._property = e, this._applyOnFly = i, this._undoModel = o, this._undoText =
r, e && (this._formatters = [], this._changed = !1, this.setValue(e.value()), e.listeners()
.subscribe(this, this.propertyChanged))
}
var n = i(7).getLogger("Chart.PropertyPage.Binding");
o.prototype.addFormatter = function(t) {
this._formatters.push(t), this.setValue(this._property.value())
}, o.prototype._formatValue = function(t) {
return this._formatters.reduce(function(t, e) {
return e(t)
}, t)
}, o.prototype._setValueToProperty = function(t) {
this._setter ? this._setter.call(this, t) : this.setValueToProperty(t)
}, o.prototype._attachToControl = function(t, e) {
var i = this;
e ? t.on("keyup change input", function(t) {
var e = i.value();
i._setValueToProperty(e), i.setValue(e)
}) : (t.keypress(function(t) {
if (this._changed = !0, 13 === t.which) {
var e = i.value();
i._setValueToProperty(e), i.setValue(e)
}
}), t.focusout(function(t) {
var e = i.value();
i.changed() && (i._setValueToProperty(e), i.setValue(e))
}), t.change(function(t) {
var e = i.value();
$(t.target).is(".ticker") ? (void 0 !== i._changeTimerId && clearTimeout(i
._changeTimerId), i._changeTimerId = setTimeout(function() {
i._setValueToProperty(e)
}, 250)) : i._setValueToProperty(e), i.setValue(e)
}))
}, o.prototype.control = function() {
return this._control
}, o.prototype.changed = function() {
return this._changed
}, o.prototype.setValueToProperty = function(t) {
this._undoModel.setProperty(this._property, t, this._undoText), this._changed = !1
}, o.prototype.property = function() {
return this._property
}, o.prototype.propertyChanged = function(t) {
this.setValue(t.value())
}, o.prototype.destroy = function() {
this._property && this._property.listeners().unsubscribe(this, this.propertyChanged)
}, e.Binding = o
}, function(t, e, i) {
"use strict";
function o(t, e) {
var i;
return function() {
clearTimeout(i), i = setTimeout(t.bind.apply(t, [this].concat(Array.prototype.slice.call(
arguments))), e)
}
}
Object.defineProperty(e, "__esModule", {
value: !0
}), e.default = o, t.exports = e.default
}, function(t, e, i) {
"use strict";
var o, n, r, s, a;
Object.defineProperty(e, "__esModule", {
value: !0
}), i(13), i(12), o = i(17), n = i(215), r = i(776), s = i(777), a = function() {
function t(t) {
this._window = t, this._fullscreenApi = new r.FullscreenApi(t.document), this
._initFullscreen()
}
return t.prototype.allocate = function() {
var t, e, i, r = this;
return this.free(), t = this._window.document, e = $("<div>", t).addClass(
"js-rootresizer__contents").css({
position: "relative",
width: "100%",
height: "100%"
}).prependTo(t.body), this._visibilityApi = new s.VisibilityApi(this._window
.document), i = {
alive: new o(!0),
body: new o(e),
width: new o,
height: new o,
availWidth: new o,
availHeight: new o,
visible: this._visibilityApi.isVisible,
fullscreen: this._fullscreenApi.isFullscreen,
remove: function() {
i.alive.setValue(!1)
},
attach: function() {
i.alive.setValue(!1), r._window.close()
},
requestFullscreen: function() {
r._requestFullscreen()
},
exitFullscreen: function() {
r._exitFullscreen()
}
}, i.alive.subscribe(function(t) {
t || i !== r._area || r.free()
}), this._area = i, this._resizeHandler = function() {
var t = i.body.value()[0],
e = t.clientWidth,
o = t.clientHeight;
i.availHeight.setValue(o), i.availWidth.setValue(e), i.height.setValue(o), i
.width.setValue(e)
}, this._resizeHandler(), $(this._window).on("resize", this._resizeHandler), new n
.ResizerDetacherState(i).bridge()
}, t.prototype.free = function() {
if (this._resizeHandler && ($(this._window).off("resize", this._resizeHandler), this
._resizeHandler = void 0), this._visibilityApi && (this._visibilityApi
.destroy(), this._visibilityApi = void 0), this._area) {
var t = this._area;
this._area = void 0, t.alive.setValue(!1), t.body.value().remove()
}
}, t.prototype._requestFullscreen = function() {
this._fullscreenApi.enter()
}, t.prototype._exitFullscreen = function() {
this._fullscreenApi.exit()
}, t.prototype._initFullscreen = function() {
var t = this,
e = this._window.document;
this._fullscreenApi.isFullscreen.subscribe(function(i) {
i ? (t._$exitFullscreenButton = $("<div>", e).addClass(
"tv-exit-fullscreen-button").text($.t("Exit Full Screen (ESC)"))
.on("click", function(e) {
e.preventDefault(), t._exitFullscreen()
}).appendTo(e.body), t._onExitFullscreenEsc = function(e) {
27 === e.keyCode && (e.preventDefault(), t._exitFullscreen())
}, $(e).on("keyup", t._onExitFullscreenEsc)) : (t
._$exitFullscreenButton && (t._$exitFullscreenButton.remove(), t
._$exitFullscreenButton = void 0), t._onExitFullscreenEsc && ($(
e).off("keyup", t._onExitFullscreenEsc), t
._onExitFullscreenEsc = void 0)), t._resizeHandler && t
._resizeHandler()
})
}, t
}(), e.Root = a
}, function(t, e, i) {
"use strict";
var o, n, r;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(72), r = function(t) {
function e(e) {
var i = t.call(this, e, !1) || this;
return i._subcommands = [], i
}
return o.__extends(e, t), e.prototype.addCommand = function(t) {
this._subcommands.push(t)
}, e.prototype.isEmpty = function() {
return 0 === this._subcommands.length
}, e.prototype.redo = function() {
for (var t = 0; t < this._subcommands.length; t++) this._subcommands[t].redo()
}, e.prototype.undo = function() {
for (var t = this._subcommands.length - 1; t >= 0; t--) this._subcommands[t].undo()
}, e
}(n.UndoCommand), e.UndoMacroCommand = r
}, function(t, e, i) {
"use strict";
var o, n, r;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(67), r = function(t) {
function e(e, i) {
var o = t.call(this) || this;
return o._source = e, o._data = i, o
}
return o.__extends(e, t), e.prototype._updateRendererData = function(t) {
t.visible = !1;
var e = this._source.lastValueData(this._data.plotIndex, !1);
e.noData || (t.background = e.color, t.color = this.generateTextColor(e.color), t
.coordinate = e.coordinate, t.floatCoordinate = e.floatCoordinate, t.text = e
.text, t.visible = !0)
}, e
}(n.PriceAxisView), e.StudyPriceAxisView = r
}, function(t, e, i) {
"use strict";
function o(t) {
this.bars = t.bars, this.barSpacing = t.barSpacing, this.barWidth = n.optimalBarWidth(t.barSpacing),
this.barLineWidth = Math.max(1, Math.round(this.barWidth)), this.dontDrawOpen = t.dontDrawOpen
}
var n = i(45),
r = i(11);
o.prototype.draw = function(t) {
var e, i, o;
for (t.save(), t.translate(.5, .5), i = 0; i < this.bars.length; ++i) o = this.bars[i], e !== o
.color && (t.fillStyle = o.color, e = o.color), t.fillRect(Math.round(o.time - this
.barLineWidth / 2), Math.round(o.high - this.barWidth / 2), Math.round(this
.barLineWidth), Math.round(o.low - o.high + this.barWidth)), this.barLineWidth < this
.barSpacing - 1 && (this.dontDrawOpen || t.fillRect(Math.round(o.time - 1.5 * this
.barWidth), Math.round(o.open - this.barWidth / 2), Math.round(1.5 * this
.barWidth),
Math.round(this.barWidth)), t.fillRect(Math.round(o.time), Math.round(o.close - this
.barWidth / 2), Math.round(1.5 * this.barWidth), Math.round(this.barWidth)));
t.restore()
}, o.prototype.hitTest = function(t) {
var e, i, o, s, a = this.bars,
l = .5 * this.barSpacing;
if (0 === a.length) return null;
if (t.x < a[0].time - l) return null;
if (t.x > a[a.length - 1].time + l) return null;
for (e = null, i = 0; i < a.length; ++i)
if (o = a[i], t.x <= o.time + l) {
e = o;
break
} return s = n.selectionTolerance(this.barLineWidth), e && e.high - s <= t.y && t.y <= e
.low + s ? new r(r.REGULAR) : null
}, e.PaneRendererBars = TradingView.PaneRendererBars = o
}, function(t, e, i) {
"use strict";
function o(t) {
t.forceLineColor = !1, r.call(this, t), this.color1 = t.color1, this.color2 = t.color2, this
.bottom = t.bottom, this.isSeries = !!t.isSeries, this._simpleMode = t.simpleMode
}
var n = i(45).coordinateIsValid,
r = i(176).PaneRendererLine;
inherit(o, r), o.prototype.draw = function(t) {
var e, i, o, s, a, l, c, h, u, d, p, _;
if (0 !== this.items.length) {
for (t.lineCap = "square", t.strokeStyle = this.lineColor, t.lineWidth = this.lineWidth, t
.lineStyle = this.lineStyle, t.lineWidth = 1, e = 0; e < this.items.length && !n(this
.items[e].y);) e++;
for (i = this.items.length - 1; i >= 0 && !n(this.items[i].y);) i--;
if (!(e >= i)) {
for (t.translate(.5, .5), o = {}, s = this.items, a = e; a <= i; a++) l = s[a], c = l
.style ? l.style.color : this.lineColor, a < i && s[a + 1].style && (h = s[a + 1]
.style.color, c !== h && (u = o[h] || [], u.push(l), o[h] = u)), d = o[c] || [],
d.push(l), o[c] = d;
for (c in o) {
for (d = o[c], t.beginPath(), p = 0, a = 0; a < d.length; a++) d[a].style && d[a]
.style.color !== c && (t.moveTo(d[p].x, this.bottom), this.walkLine(t, d.slice(
p, a), !0, this.bottom), p = a);
t.moveTo(d[p].x, this.bottom), this.walkLine(t, d.slice(p, d.length), !0, this
.bottom), t.closePath(), this.isSeries ? (_ = t.createLinearGradient(0, 0,
0, this.bottom), _.addColorStop(0, this.color1), _.addColorStop(1, this
.color2), t.fillStyle = _, this._simpleMode = !0) : t.fillStyle = c, t
.fill()
}
t.lineWidth = this.lineWidth,
r.prototype.draw.call(this, t)
}
}
}, e.PaneRendererArea = TradingView.PaneRendererArea = o
}, function(t, e, i) {
"use strict";
function o(t, e, i, o, n) {
var r, s, a, l, c;
for (this._canvasesMap = {}, this._lines = t.split(/[^\S\r\n]*(?:\r\n|\r|\n)/), this._font = this
._fontStyle(e, i, o, n), this._fontSize = n, r = $("<canvas>"), s = r.get(0).getContext("2d"), s
.font = this._font, a = 0, l = 0; l < this._lines.length; l++) c = s.measureText(this._lines[l])
.width, a = Math.max(a, c);
this.textImageWidth = a + 1, this.textImageHeight = this._lines.length * n
}
o.prototype.paintTo = function(t, e, i, o, n, r) {
var s = this._getTextImage(e),
a = this._x(i, n, this.textImageWidth),
l = this._y(o, r, this.textImageHeight);
t.drawImage(s, a - .5, l - .5)
}, o.prototype._getTextImage = function(t) {
var e, i, o, n, r;
if (this._canvasesMap[t]) return this._canvasesMap[t].get(0);
for (e = $("<canvas>").attr("width", this.textImageWidth).attr("height", this.textImageHeight),
i = e.get(0).getContext("2d"), i.textBaseline = "top", i.font = this._font, i.textAlign =
"center", i.fillStyle = t, o = Math.round(this.textImageWidth / 2), n = 0, r = 0; r < this
._lines.length; r++) i.fillText(this._lines[r], o, n), n += this._fontSize;
return this._canvasesMap[t] = e, e.get(0)
}, o.prototype._x = function(t, e, i) {
var o = t;
switch (e) {
case "left":
break;
case "right":
o -= i;
break;
case "center":
o -= i / 2
}
return Math.round(o)
}, o.prototype._y = function(t, e, i) {
var o = t;
switch (e) {
case "top":
break;
case "bottom":
o -= i;
break;
case "middle":
o -= i / 2
}
return Math.round(o)
}, o.prototype._fontStyle = function(t, e, i, o) {
return (t ? "bold " : "") + (e ? "italic " : "") + o + "px " + i
}, t.exports = o
}, function(t, e, i) {
"use strict";
t.exports = function(t, e) {
var i, o = 10,
n = t % o;
for (n && (t = t - n + o), i = []; t <= e; t += o) i.push(t);
return i
}
}, function(t, e, i) {
"use strict";
function o(t) {
this._props = t, this._text = "", this._size = "12px", this._bold = !1
}
o.prototype.text = function() {
return this._text
}, o.prototype.setText = function(t) {
this._text = t
}, o.prototype.color = function() {
return this._props ? this._props.scalesProperties.textColor.value() : "#4a4a4a"
}, o.prototype.bold = function() {
return this._bold
}, o.prototype.size = function() {
return this._size
}, t.exports = o
}, function(t, e, i) {
"use strict";
function o(t, e) {
this.handler = t, this.customId = e
}
function n() {}
var r = i(15).declareClassAsPureInterface;
TradingView.WEB_SOCKET_WAS_CONNECTED = !1, n.REBIND_STUDY_STANDALONE_TO_CHILD = 1, n
.REBIND_STUDY_CHILD_TO_STANDALONE = 2, n.prototype.defaultWatchlistSymbols = function() {}, n
.prototype.availableTimeFrames = function(t, e) {}, n.prototype.defaultResolutions = function() {},
n.prototype.supportedSymbolsTypes = function() {}, n.prototype.supportedExchangesList =
function() {}, n.prototype.futuresRegex = function() {}, n.prototype.quoteCreateSession = function(
t) {}, n.prototype.quoteDeleteSession = function(t) {}, n.prototype.quoteSetFields = function(t,
e) {}, n.prototype.quoteAddSymbols = function(t, e) {}, n.prototype.quoteRemoveSymbols =
function(t,
e) {}, n.prototype.quoteFastSymbols = function(t, e) {}, n.prototype.depthCreateSession =
function(t, e, i) {}, n.prototype.depthDeleteSession = function(t) {}, n.prototype.depthSetSymbol =
function(t, e) {}, n.prototype.depthClearSymbol = function(t) {}, n.prototype.depthSetScale =
function(t, e) {}, n.prototype.chartCreateSession = function(t, e) {},
n.prototype.chartDeleteSession = function(t) {}, n.prototype.createSession = function(t, e) {}, n
.prototype.removeSession = function(t) {}, n.prototype.connected = function() {}, n.prototype
.connect = function() {}, n.prototype.disconnect = function() {}, n.prototype.switchTimezone =
function(t, e) {}, n.prototype.resolveSymbol = function(t, e, i, o, n) {}, n.prototype
.createSeries = function(t, e, i, o, n, r, s) {}, n.prototype.removeSeries = function(t, e, i) {}, n
.prototype.modifySeries = function(t, e, i, o, n, r) {}, n.prototype.requestMoreData = function(t,
e, i, o) {}, n.prototype.requestMetadata = function(t, e, i) {}, n.prototype.isCanCreateStudy =
function(t, e) {}, n.prototype.createStudy = function(t, e, i, o, n, r, s) {}, n.prototype
.rebindStudy = function(t, e, i, o, n, r, s, a) {}, n.prototype.removeStudy = function(t, e, i) {},
n.prototype.modifyStudy = function(t, e, i, o, n) {}, n.prototype.createPointset = function(t, e, i,
o, n, r, s) {}, n.prototype.modifyPointset = function(t, e, i, o, n) {}, n.prototype
.removePointset = function(t, e, i) {}, n.prototype.requestMoreTickmarks = function(t, e, i, o) {},
n.prototype.requestFirstBarTime = function(t, e, i, o) {}, n.prototype._invokeHandler = function(t,
e) {}, n.prototype._sendRequest = function(t, e) {}, n.prototype._onMessage = function(t) {}, n
.prototype._convertTimescaleResponse = function(t) {}, n.prototype._dispathNotification = function(
t) {}, n.prototype._invokeNotificationHandler = function(t, e, i) {}, n.prototype
._notifySessions = function(t) {}, n.prototype.unpack = function(t) {}, n.prototype.searchSymbols =
function(t, e, i, o, n, r, s, a, l) {}, n.prototype.serverTimeOffset = function() {}, n.prototype
.getMarks = function(t, e, i, o, n) {}, n.prototype.getTimescaleMarks = function(t, e, i, o, n) {},
r(n, "ChartApiInterface"), t.exports.HandlerInfo = o, t.exports.ChartApiInterface = n
}, function(t, e, i) {
"use strict";
var o, n, r, s;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(89), n = i(15), r = i(198), i(12), e.PLACE_HOLDER = "---", s = function() {
function t(t) {
this.type = "volume", this._numericFormatter = new o.NumericFormatter, this
._fractionalValues = void 0 !== t && t > 0, this._precision = t
}
return t.prototype.state = function() {
return {
precision: this._precision
}
}, t.prototype.format = function(t) {
if (!n.isNumber(t)) return e.PLACE_HOLDER;
var i = "";
return t < 0 && (i = "-", t = -t), t >= 1e100 ? window.t("N/A") : (!this
._fractionalValues || t >= 995 ? t = Math.round(t) : this._fractionalValues && (
t = +t.toFixed(this._precision)), t < 995 ? i + this._formatNumber(t) : t <
999995 ? i + this._formatNumber(t / 1e3) + "K" : t < 999999995 ? (t = 1e3 * Math
.round(t / 1e3), i + this._formatNumber(t / 1e6) + "M") : (t = 1e6 * Math
.round(t / 1e6), i + this._formatNumber(t / 1e9) + "B"))
}, t.prototype.parse = function(t) {
var e, i, o;
return "---" === t ? {
error: "not a number",
res: !1,
value: NaN
} : (e = {
K: 1e3,
M: 1e6,
B: 1e9
}, i = t.slice(-1), e.hasOwnProperty(i) ? (o = this._numericFormatter.parse(t
.slice(0, -1)), n.isNumber(o) ? {
res: !0,
value: o * e[i]
} : {
error: "not a number",
res: !1,
value: NaN
}) : (o = this._numericFormatter.parse(t), n.isNumber(o) ? {
res: !0,
value: o
} : {
error: "not a number",
res: !1,
value: NaN
}))
}, t.serialize = function(t) {
return t.state()
}, t.deserialize = function(e) {
return new t(e.precision)
}, t.prototype._formatNumber = function(t) {
return this._fractionalValues && (t = r.fixComputationError(t)),
this._numericFormatter.format(t).replace(/(\.[1-9]*)0+$/, function(t, e) {
return e
})
}, t
}(), e.VolumeFormatter = s
}, function(t, e, i) {
"use strict";
function o(t) {
var e, i = n.get_timezone(t).offset_utc(Date.now()),
o = "",
r = i / 1e3 / 60 / 60;
return r % 1 && (o = ":" + r % 1 * 60), e = "", e = r > 0 ? "+" + (r - r % 1) + o : 0 === r ? "" :
r - r % 1 + o + "", {
offset: i,
string: "UTC" + e
}
}
Object.defineProperty(e, "__esModule", {
value: !0
});
var n = i(50);
e.parseTzOffset = o
}, function(t, e, i) {
"use strict";
function o() {
a.call(this)
}
function n(t, e) {
this._constructor = "LineToolFibSpeedResistanceArcs";
var n = e || this.createPropertiesObject("linetoolfibwedge");
r.call(this, t, n), t._fibWedgeLabelsCache || (t._fibWedgeLabelsCache = new o), i.e(1).then(
function(t) {
var e = i(1079).FibWedgePaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var r = i(1).LineDataSource,
s = i(21),
a = i(88),
l = i(3).propertyPages;
inherit(o, a), o.prototype.levelsCount = function() {
return n.LevelsCount
}, inherit(n, r), n.LevelsCount = 11, n.prototype.getCache = function() {
return this._model._fibWedgeLabelsCache || (this._model._fibWedgeLabelsCache = new o), this
._model._fibWedgeLabelsCache
}, n.prototype.pointsCount = function() {
return 3
}, n.prototype.title = function() {
return "Fib Wedge"
}, n.prototype.setPoint = function(t, e) {
var i, o, n, s, a, l, c;
r.prototype.setPoint.call(this, t, e), this._recursiveGuard || (this._recursiveGuard = !0, 2 ===
t ? (i = this.pointToScreenPoint(this._points[0])[0], o = this.pointToScreenPoint(this
._points[1])[0], n = this.pointToScreenPoint(this._points[2])[0], s = n
.subtract(i).length(), a = o.subtract(i).normalized(), o = i.add(a.scaled(s)), l =
this.screenPointToPoint(o), this._properties.points[1].price.setValue(l.price), this
._properties.points[1].bar.setValue(l.index)) : (i = this.pointToScreenPoint(this
._points[0])[0], o = this.pointToScreenPoint(this._points[1])[0], n = this
.pointToScreenPoint(this._points[2])[0], c = o.subtract(i).length(), a = n.subtract(
i).normalized(), n = i.add(a.scaled(c)), l = this.screenPointToPoint(n), this
._properties.points[2].price.setValue(l.price), this._properties.points[2].bar
.setValue(l.index)), this._recursiveGuard = !1)
}, n.prototype.addPoint = function(t) {
var e, i, o, n, s, a, l, c;
return 2 === this._points.length && (e = this.pointToScreenPoint(this._points[0])[0], i = this
.pointToScreenPoint(this._points[1])[0], this.priceScale().isPercent() && (o = this
.ownerSource().firstValue(), t.price = this.priceScale().priceRange()
.convertFromPercent(t.price, o)), n = this.pointToScreenPoint(t)[0], s = i.subtract(
e).length(), a = n.subtract(e).normalized(), n = e.add(a.scaled(s)), l = this
.priceScale().coordinateToPrice(n.y), c = Math.round(this._model.timeScale()
.coordinateToIndex(n.x)), t = {
index: c,
price: l
}), r.prototype.addPoint.call(this, t)
}, n.prototype.processErase = function(t, e) {
var i = "level" + e,
o = this.properties()[i].visible;
t.setProperty(o, !1, "Erase level line")
}, n.prototype.createPropertiesObject = function(t, e, i) {
return new s(t, e, i, {
range: [1, 11]
})
}, n.prototype.getInputsPropertyPage = function() {
return null
}, n.prototype.getStylesPropertyPage = function() {
return l.LineToolFibWedgeStylesPropertyPage
}, e.LineToolFibWedge = n
}, function(t, e, i) {
"use strict";
(function(t) {
function o(t, e) {
this._pane = t, this._timeScale = e
}
function n(t) {
this._line = t
}
function r(t, e) {
this._adapter = new n(this), this._constructor = "LineToolExecution";
var o = e || new l("linetoolexecution");
this.customization = {
forcePriceAxisLabel: !1,
disableSelection: !0,
disableErasing: !0
}, s.call(this, t, o), i.e(1).then(function(t) {
var e = i(1152).ExecutionPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var s = i(1).LineDataSource,
a = i(170),
l = i(6).DefaultProperty,
c = i(19).PlotRowSearchMode;
o.prototype._cachedByBarIndexOrderedExecutions = {}, o.recreateOrderedByBarsSourcesCache =
function(t) {
var e, i, n, r, s;
for (o.clearOrderedByBarsSourcesCache(), e = o.prototype, i = t.orderedSources(), n =
0; n < i.length; ++n) r = i[n], r._adapter && void 0 !== r._adapter._index && (s = e
._cachedByBarIndexOrderedExecutions[r._adapter._index], e
._cachedByBarIndexOrderedExecutions[r._adapter._index] = s || [], e
._cachedByBarIndexOrderedExecutions[r._adapter._index].push(r))
}, o.clearOrderedByBarsSourcesCache = function() {
o.prototype._cachedByBarIndexOrderedExecutions = {}
}, o.prototype.getXYCoordinate = function(t, e, i) {
var o, n, s, a, l, h, u, d, p, _, f = 0,
m = t.getDirection(),
g = "buy" === m,
v = this._pane.model().mainSeries();
if (v.bars && (o = g ? 10 : -10, null !== (n = v.bars().search(i, c.NearestLeft)) && (
i = n.index, s = g ? n.value[TradingView.LOW_PLOT] : n.value[TradingView
.HIGH_PLOT], a = v.priceScale(), a.isPercent() && (l = v.firstValue(),
s = a.priceRange().convertToPercent(s, l)), f = a.priceToCoordinate(s) +
o)), t._index = i, h = e.visibleBars(), !isFinite(i) || null === h || i > h
.lastBar() || i < h.firstBar()) return {
x: -1,
y: -1
};
for (u = this._cachedByBarIndexOrderedExecutions[i] || this._pane.orderedSources(), d =
u.length - 1; d >= 0; --d)
if ((p = u[d]) instanceof r && p._adapter._index === i && p._adapter
.getDirection() === m) {
if (p === t._line) break;
_ = p._adapter._height(), f = g ? f + _ : f - _
} return {
x: e.indexToCoordinate(i),
y: f
}
}, n.prototype._height = function() {
var t, e = this.getArrowHeight(),
i = this.getArrowSpacing();
return this.getText() && a.fontHeight(this.getFont()), t = 10, e + i + 0 + t
}, n.prototype.getIndex = function() {
return this._line._model.timeScale().baseIndex() - this._line.points()[0].index
}, n.prototype.setIndex = function(t) {
var e, i = this._line._model.timeScale(),
o = i.baseIndex(),
n = o - Math.abs(t);
return this._line.startMoving(this._line.points()[0]), e = TradingView.merge({}, this
._line.points()[0]), e.index = n, this._line.move(e), this._line.endMoving(),
this
}, n.prototype.getTime = function() {
return this._unixtime
}, n.prototype.setTime = function(t) {
var e = this._line._model.mainSeries();
return this._unixtime = ChartApiInstance.alignTimePoint ? ChartApiInstance
.alignTimePoint(t, e.interval(), e.symbolInfo()) : t, this._line.restorePoints([{
offset: 0,
price: this.getPrice(),
time_t: this._unixtime
}], []), this._line.createServerPoints(), this
}, n.prototype.getPrice = function() {
return this._line.points().length > 0 ? this._line.points()[0].price : this._line
._timePoint.length > 0 ? this._line._timePoint[0].price : void 0
}, n.prototype.setPrice = function(t) {
return this._line.points().length > 0 && (this._line.points()[0].price = t), this._line
._timePoint.length > 0 && (this._line._timePoint[0].price = t), this
}, n.prototype.getText = function() {
return this._line.properties().text.value()
}, n.prototype.setText = function(t) {
return this._line.properties().text.setValue(t || ""), this._line
.updateAllViewsAndRedraw(), this
}, n.prototype.getArrowHeight = function() {
return this._line.properties().arrowHeight.value()
}, n.prototype.setArrowHeight = function(t) {
return this._line.properties().arrowHeight.setValue(t || 5), this
}, n.prototype.getArrowSpacing = function() {
return this._line.properties().arrowSpacing.value()
}, n.prototype.setArrowSpacing = function(t) {
return this._line.properties().arrowSpacing.setValue(t || 1), this
}, n.prototype.getDirection = function() {
return this._line.properties().direction.value()
}, n.prototype.setDirection = function(t) {
return this._line.properties().direction.setValue(t || "buy"), this
}, n.prototype.getArrowColor = function() {
return a.getColorFromProperties(this._line.properties().arrowColor, this._line
.properties().arrowTransparency)
}, n.prototype.setArrowColor = function(t) {
return a.setColorToProperties(t, this._line.properties().arrowColor, this._line
.properties().arrowTransparency), this
}, n.prototype.getTextColor = function() {
return a.getColorFromProperties(this._line.properties().textColor, this._line
.properties().textTransparency)
}, n.prototype.setTextColor = function(t) {
return a.setColorToProperties(t, this._line.properties().textColor, this._line
.properties().textTransparency), this
}, n.prototype.getFont = function() {
return a.getFontFromProperties(this._line.properties().fontFamily, this._line
.properties().fontSize, this._line.properties().fontBold, this._line
.properties().fontItalic)
}, n.prototype.setFont = function(t) {
return a.setFontToProperties(t, this._line.properties().fontFamily, this._line
.properties().fontSize, this._line.properties().fontBold, this._line
.properties().fontItalic), this
}, n.prototype.setTooltip = function(t) {
return null == t ? t = "" : t += "", this._line.properties().tooltip.setValue(t), this
}, n.prototype.getTooltip = function() {
return this._line.properties().tooltip.value()
}, n.prototype.remove = function() {
this._line._model.removeSource(this._line), delete this._line
}, inherit(r, s), r.POINTS_COUNT = 1, r.skipMagnetting = !0, r.prototype.pointsCount =
function() {
return r.POINTS_COUNT
}, r.prototype.title = function() {
return "Execution"
}, r.prototype.hasContextMenu = function() {
return !1
}, r.prototype.state = function() {
return null
}, r.prototype.updateAllViews = function() {
return this._isVisible() ? s.prototype.updateAllViews.call(this) : null
}, r.prototype.priceAxisViews = function(t, e) {
return this._isVisible() ? s.prototype.priceAxisViews.call(this, t, e) : null
}, r.prototype._isVisible = function() {
return this._model.properties().tradingProperties.showExecutions.value()
}, r.prototype.paneViews = function(e) {
return TradingView.printing && !t.enabled("snapshot_trading_drawings") ? null : this
._model.properties().tradingProperties.showExecutions.value() ? s.prototype
.paneViews.call(this, e) : null
}, r.prototype.userEditEnabled = function() {
return !1
}, r.prototype.showInObjectTree = function() {
return !1
}, r.prototype.getInputsPropertyPage = function() {
return null
}, e.ExecutionsPositionController = o, e.LineToolExecution = r
}).call(e, i(5))
}, function(t, e, i) {
"use strict";
function o(t, e, i) {
return new a(t, e, i)
}
var n, r, s, a;
Object.defineProperty(e, "__esModule", {
value: !0
}), n = i(0), r = i(15), s = i(21), a = function(t) {
function e(e, i, o) {
return t.call(this, e, i, o, {
names: ["width", "color", "visible"]
}) || this
}
return n.__extends(e, t), e.prototype._iterateLevels = function(t, e) {
var i, o, n;
for (i in t.levels)
if (t.levels[i] && r.isSameType(t.levels[i], e.typecheck())) {
o = e.tpl();
for (n in this._map.names) this._map.names.hasOwnProperty(n) && (o = e.fill(n,
this._map.names[n], t.levels[i], o));
t.levels[i] = o
} return t
}, e
}(s), e.LineToolGannComplexProperty = a, e.createPropertiesObject = o
}, function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineTool5PointsPattern";
var o = e || new r("linetool5pointspattern");
n.call(this, t, o), i.e(1).then(function(t) {
var e = i(1080).Pattern5PaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(6).DefaultProperty,
s = i(127).DateTimeFormatter,
a = i(3).propertyPages;
inherit(o, n), o.prototype.pointsCount = function() {
return 5
}, o.prototype.title = function() {
return "XABCD Pattern"
}, o.prototype._tooltipFieldsHash = {
time0: {
title: "Date 1",
value: null
},
price0: {
title: "Price 1",
value: null
},
time1: {
title: "Date 2",
value: null
},
price1: {
title: "Price 2",
value: null
},
time2: {
title: "Date 3",
value: null
},
price2: {
title: "Price 3",
value: null
},
time3: {
title: "Date 4",
value: null
},
price3: {
title: "Price 4",
value: null
},
time4: {
title: "Date 5",
value: null
},
price4: {
title: "Price 5",
value: null
}
}, o.prototype._updateTooltip = function() {
var t, e, i, o, n, r = this._tooltipFieldsHash,
a = this.points().m_values;
a[0] && (e = this._model.timeScale().indexToUserTime(a[0].index), r.time0.value = e ? new s(this
._model.mainSeries().isDWM()).format(e) : 0, r.price0.value = this._model
.mainSeries()._formatter.format(a[0].price)), a[1] && (t = this._model.timeScale()
.indexToUserTime(a[1].index), r.time1.value = t ? new s(this._model.mainSeries()
.isDWM()).format(t) : 0, r.price1.value = this._model.mainSeries()._formatter
.format(a[
1].price)), a[2] && (i = this._model.timeScale().indexToUserTime(a[2].index), r
.time2.value = i ? new s(this._model.mainSeries().isDWM()).format(i) : 0, r.price2
.value = this._model.mainSeries()._formatter.format(a[2].price)), a[3] && (o = this
._model.timeScale().indexToUserTime(a[3].index), r.time3.value = o ? new s(this._model
.mainSeries().isDWM()).format(o) : 0, r.price3.value = this._model.mainSeries()
._formatter.format(a[3].price)), a[4] && (n = this._model.timeScale().indexToUserTime(a[
4].index), r.time4.value = t ? new s(this._model.mainSeries().isDWM()).format(n) :
0, r.price4.value = this._model.mainSeries()._formatter.format(a[4].price))
}, o.prototype.tooltip = function() {
return this._updateTooltip(), this._formatTooltip()
}, o.prototype.getStylesPropertyPage = function() {
return a.LineToolLineTool5PointsPatternStylesPropertyPage
}, e.LineTool5PointsPattern = o
}, function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolNote";
var n = e || new s("linetoolnote");
r.call(this, t, n), this.version = o.version, i.e(1).then(function(t) {
var e = i(1174).NotePaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
function n(t, e) {
var i = e || new s("linetoolnoteabsolute");
i.locked.value() || i.locked.setValue(!0), o.call(this, t, i)
}
var r = i(1).LineDataSource,
s = i(6).DefaultProperty,
a = i(3).propertyPages;
inherit(o, r), o.TOOLTIP_WIDTH = 300, o.TOOLTIP_PADDING = 10, o.TOOLTIP_LINESPACING = 5, o.version = 1,
o.prototype.pointsCount = function() {
return 1
}, o.prototype.title = function() {
return $.t("Note")
}, o.prototype.applyTemplate = function(t) {
delete t.locked, delete t.text, r.prototype.applyTemplate.call(this, t)
}, o.prototype.getTooltipWidth = function() {
return o.TOOLTIP_WIDTH
}, o.prototype.getTooltipPadding = function() {
return o.TOOLTIP_PADDING
}, o.prototype.getTooltipLineSpacing = function() {
return o.TOOLTIP_LINESPACING
}, inherit(n, o), n.prototype.title = function() {
return $.t("Anchored Note")
}, o.prototype.state = function(t) {
var e = r.prototype.state.call(this, t);
return t && (e.state.fixedSize = !1), e
}, o.prototype.getStylesPropertyPage = function() {
return a.LineToolNotePropertyPage
}, e.LineToolNote = o, e.LineToolNoteAbsolute = n
}, function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolText";
var o = e || new a("linetooltext");
r.call(this, t, o), this._timeScale = t.timeScale(), this._barSpacing = t.timeScale().barSpacing(),
i.e(1).then(function(t) {
var e = i(406).TextPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
function n(t, e) {
var i = e || new a("linetooltextabsolute");
i.locked.value() || i.locked.setValue(!0), o.call(this, t, i)
}
var r = i(1).LineDataSource,
s = i(46).DataSource,
a = i(6).DefaultProperty,
l = i(3).propertyPages;
inherit(o, r), o.MIN_WIDTH = 100, o.prototype.setPoint = function(t, e) {
var i, n, r = this.properties();
if (0 === t && r.wordWrapWidth && r.wordWrapWidth.value()) {
if (i = r.locked && r.locked.value() ? this.fixedPoints()[0].x : this._timeScale
.indexToCoordinate(this.points()[0].index), n = this._timeScale.indexToCoordinate(e
.index) - i - ~~(r.fontsize.value() / 6), !isFinite(n)) return;
r.wordWrapWidth.setValue(Math.max(o.MIN_WIDTH, n))
}
}, o.prototype.pointsCount = function() {
return 1
}, o.prototype.title = function() {
return $.t("Text")
}, o.prototype.setPriceScale = function(t) {
s.prototype.setPriceScale.call(this, t), t && t.priceRange() && (this._priceDencity = t
.height() / t.priceRange().length(), this._isPriceDencityLog = t.isLog())
}, o.prototype.restoreSize = function() {
this._barSpacing = this._model.timeScale().barSpacing(), this._priceDencity = this.priceScale()
.height() / this.priceScale().priceRange().length(), this.updateAllViews(), this._model
.updateSource(this)
}, o.prototype.applyTemplate = function(t) {
delete t.locked, delete t.text, r.prototype.applyTemplate.call(this, t)
}, inherit(n, o), n.prototype.title = function() {
return $.t("Anchored Text")
}, o.prototype.state = function(t) {
var e = r.prototype.state.call(this, t);
return t && (e.state.fixedSize = !1), e
}, o.prototype.getInputsPropertyPage = function() {
return null
}, o.prototype.getStylesPropertyPage = function() {
return l.LineToolTextStylesPropertyPage
}, e.LineToolText = o, e.LineToolTextAbsolute = n
}, function(t, e, i) {
"use strict";
var o, n, r, s, a;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(9), r = i(67), s = i(15), a = function(t) {
function e(e) {
var i = t.call(this) || this;
return i._source = e, i
}
return o.__extends(e, t), e.prototype._updateRendererData = function(t) {
var e, i, o, r, a, l;
if (t.visible = !1, e = this._source.points(), i = this._source.priceScale(), 0 !== e
.length && null !== i && !i.isEmpty() && (o = e[0], isFinite(o.price))) {
if (i.isPercent()) {
if (!(r = this._source.ownerSource())) return;
if (a = r.firstValue(), !s.isNumber(a)) return;
o.price = n.ensureNotNull(i.priceRange()).convertToPercent(o.price, a)
}
l = this._source.properties().linecolor.value(), t.background = l, t.color = this
.generateTextColor(l), t.coordinate = i.priceToCoordinate(o.price), t.text = i
.formatter().format(o.price), t.visible = !0
}
}, e
}(r.PriceAxisView), e.LineToolHorzLinePriceAxisView = a
}, function(t, e, i) {
"use strict";
function o(t, e, i) {
this._study = t, this._series = e, this._model = i, this._invalidated = !0, this._orderArrow = {
vMargin: o.DEFAULT_ORDER_ARROW_VMARGIN,
width: o.DEFAULT_ORDER_ARROW_WIDTH,
height: o.DEFAULT_ORDER_ARROW_HEIGHT
}, this._exitLineWidth = o.DEFAULT_ORDER_ARROW_EXIT_LINE_WIDTH, this._priceArrow = {
width: o.DEFAULT_PRICE_ARROW_WIDTH,
height: o.DEFAULT_PRICE_ARROW_HEIGHT
}, this._text = {
vMargin: o.DEFAULT_TEXT_VMARGIN,
font: o.DEFAULT_FONT,
fontSize: o.DEFAULT_FONT_SIZE
}, this._checkHideTextIfBarSpacingLT = o.DEFAULT_CHECK_HIDE_TEXT_IF_BARSPACING_LT, this
._textIsVisible = !0, this._colors = {
entryBuy: o.DEFAULT_ENTRY_BUY_COLOR,
entrySell: o.DEFAULT_ENTRY_SELL_COLOR,
exit: o.DEFAULT_EXIT_COLOR
}, this._items = {
entryBuy: [],
entrySell: [],
exit: []
}, this._textWidths = {}, this._study.properties().strategy.orders.subscribe(this, this.update)
}
var n = i(8).Point,
r = i(872).PaneRendererStudyStrategyOrders,
s = i(53).CompositeRenderer,
a = i(19).PlotRowSearchMode;
o.DEFAULT_ORDER_ARROW_VMARGIN = 7, o.DEFAULT_ORDER_ARROW_WIDTH = 9, o.DEFAULT_ORDER_ARROW_HEIGHT = 11, o
.DEFAULT_ORDER_ARROW_EXIT_LINE_WIDTH = 2, o.DEFAULT_PRICE_ARROW_WIDTH = 5, o
.DEFAULT_PRICE_ARROW_HEIGHT = 9, o.DEFAULT_TEXT_VMARGIN = 2, o.DEFAULT_FONT = "Arial", o
.DEFAULT_FONT_SIZE = 10, o.DEFAULT_CHECK_HIDE_TEXT_IF_BARSPACING_LT = 10, o
.DEFAULT_ENTRY_BUY_COLOR = "#008fff", o.DEFAULT_ENTRY_SELL_COLOR = "#f00", o.DEFAULT_EXIT_COLOR =
"#cc47ed", o.prototype._updateImpl = function() {
var t, e, i, o, r, s, l, c, h, u, d, p, _, f, m, g, v, y, b, S, w, T, C, x, P, L;
if (this.clearItems(), (t = this._study.ordersData()) && t.length && (e = this._model
.timeScale(), i = this._series.priceScale(), !(!e || !i || e && e.isEmpty() || i && i
.isEmpty()) && null !== (o = e.visibleBars()))) {
for (r = this._study.barsIndexes(), s = this._series.nearestIndex(o.firstBar(), a
.NearestRight), l = this._series.nearestIndex(o.lastBar(), a.NearestLeft), c = s,
h = [], u = []; c <= l; c++)
for (d = -1; - 1 !== (d = r.indexOf(c, d + 1));)(p = t[d]) && (h.push(p), u.push(c));
for (_ = this._study.properties(), f = _.strategy.orders.showLabels.value(), m = _.strategy
.orders.showQty.value(), g = f || m, g && e.barSpacing() < this
._checkHideTextIfBarSpacingLT && this._orderArrow.width * h.length * 2 > e.width() && (
g = !1), v = g && this._text.fontSize + this._text.vMargin || 0, y = v && v * (f +
m), b = 0, S = {
upper: [],
lower: []
}; b < h.length; b++) p = h[b], d = u[b], w = e.indexToCoordinate(d, !0), T = i
.priceToCoordinate(this._series[p.b ? "low" : "high"](d), !0), C = p.b ? "lower" :
"upper", x = "number" == typeof S[C][d] && S[C][d] || 0, T += p.b ? x : -x,
"number" != typeof S[C][d] && (S[C][d] = 0), S[C][d] += (p.e ? 0 : this
._exitLineWidth) + this._orderArrow.vMargin + this._orderArrow.height + y, P = i
.priceToCoordinate(p.p, !0), L = p.e ? !p.b && p.e ? "entrySell" : "entryBuy" : "exit",
this._items[L].push({
orderPoint: new n(w, T),
pricePoint: new n(w, P),
label: f && (p.c || p.id || "Untitled") || null,
qty: m && (p.b ? "+" : "-") + ~~p.q || null,
pos: C
});
this._textLabelIsVisible = f, this._textQtyIsVisible = m, this._textIsVisible = g
}
}, o.prototype.update = function() {
this._invalidated = !0
}, o.prototype.clearItems = function() {
this._items.entryBuy.length = this._items.entrySell.length = this._items.exit.length = 0
}, o.prototype.renderer = function() {
var t, e, i, o = this._study.properties();
if (o.visible.value() && o.strategy.orders.visible.value() && (t = this._series.priceScale(), (
this._invalidated || t && t.isScaled()) && (this._updateImpl(), this
._invalidated = !1), this._items.entryBuy.length || this._items.entrySell.length ||
this._items.exit.length)) {
e = new s;
for (i in this._items) this._items[i].length && e.append(new r({
items: this._items[i],
color: this._colors[i],
orderArrow: this._orderArrow,
exitLineWidth: "exit" === i && this._exitLineWidth || 0,
priceArrow: this._priceArrow,
text: this._textIsVisible && this._text || null
}, this._textWidths));
return e
}
}, t.exports = o
}, function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c, h, u, d;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(9), r = i(34), s = i(67), a = i(5), l = i(49), c = a.enabled("countdown"), h = a
.enabled("price_scale_always_last_bar_value"), u = [l.STYLE_BARS, l.STYLE_CANDLES, l.STYLE_LINE, l
.STYLE_AREA, l.STYLE_HOLLOW_CANDLES, l.STYLE_HEIKEN_ASHI
], d = function(t) {
function e(e, i) {
var o = t.call(this) || this;
return o._source = e, o._data = i, o
}
return o.__extends(e, t), e.prototype._getSource = function() {
return this._source
}, e.prototype._getData = function() {
return this._data
}, e.prototype._isCountdownEnabled = function() {
return c
}, e.prototype._countdownText = function() {
var t, e, i, o, s, a, l, c, h, u, d;
return this._source.isDWM() ? "" : (t = 1e3 * n.ensure(n.ensureNotNull(this._source
.data().bars().last()).value[0]), e = 1e3 * this._source.serverTimeOffset(),
i = r.Interval.parse(this._source.interval()), o = i.multiplier() || 0, s = i
.kind() === r.Interval.SECONDS ? o : 60 * o, a = t.valueOf() + 1e3 * s, l = (
new Date).valueOf() + e, (c = Math.round((a - l) / 1e3)) <= 0 ? "" : (c =
Math.min(c, s), h = null, c >= 3600 && (h = this._addLeadingZero(Math.floor(
c / 3600))), c %= 3600, u = this._addLeadingZero(Math.floor(c / 60)),
c %= 60, d = this._addLeadingZero(Math.floor(c)), null !== h ? h + ":" + u +
":" + d : u + ":" + d))
}, e.prototype._updateRendererData = function(t) {
var e, i, o, n, r;
t.visible = !1, this._data.model.properties().scalesProperties.showSeriesLastValue
.value() && (e = this._source.lastValueData(void 0, h), e.noData || (i = this
._source.properties(), i.style.value() === l.STYLE_HEIKEN_ASHI && i.haStyle
.showRealLastPrice.value() && (o = this._source.lastValueData(void 0, !1),
n = this._source.lastValueData(void 0, !0), !o.noData && !n.noData && o
.index === n.index) || (r = "", c && i.showCountdown.value() && -1 !== u
.indexOf(i.style.value()) && (r = this._countdownText()), t.secondLine =
r, t.background = this._source.priceLineColor(e.color), t.color = this
.generateTextColor(t.background), t.coordinate = e.coordinate,
t.floatCoordinate = e.floatCoordinate, t.text = e.text, t.visible = !0)
))
}, e.prototype._addLeadingZero = function(t) {
return ("0" + t).slice(-2)
}, e
}(s.PriceAxisView), e.SeriesPriceAxisView = d
}, function(t, e, i) {
"use strict";
function o(t, e) {
this.m_series = t, this.m_model = e, this.m_bars = [], this._invalidated = !0, this
._isMarkersEnabled = P.enabled("source_selection_markers")
}
function n(t, e) {
o.call(this, t, e)
}
function r(t, e) {
o.call(this, t, e)
}
function s(t, e) {
o.call(this, t, e)
}
function a(t, e) {
o.call(this, t, e)
}
function l(t, e) {
this.m_series = t, this.m_model = e, this.m_items = []
}
function c(t, e) {
l.call(this, t, e), this._invaidated = !0
}
function h(t, e) {
l.call(this, t, e), this._invaidated = !0
}
function u(t, e) {
l.call(this, t, e), this._invaidated = !0, this._renderer = new b
}
function d(t, e) {
this._source = t, this._model = e, this._points = [new p(0, 0)], this._invalidated = !0, this
._renderer = new S;
var i = {
cursorType: L.VerticalResize,
pressedMouseMoveHandler: function(t) {
var e, i, o, n, r = this._source.priceScale();
null !== r && (e = this._source.properties().baselineStyle, i = r.height(), o =
100 - t.y / i * 100, n = o < 0 ? 0 : Math.round(10 * o) / 10, e
.baseLevelPercentage.setValue(Math.max(Math.min(n, 100), 0)))
}.bind(this)
};
this._renderer.setHitTest(new f(f.CUSTOM_MOVE, i))
}
var p = i(8).Point,
_ = i(131).SelectionRenderer,
f = i(11),
m = i(325).PaneRendererBars,
g = i(176).PaneRendererLine,
v = i(326).PaneRendererArea,
y = i(247).PaneRendererCandles,
b = i(882).PaneRendererBaseline,
S = i(94).HorizontalLineRenderer,
w = i(53).CompositeRenderer,
T = i(328),
C = i(30),
x = i(19).PlotRowSearchMode,
P = i(5),
L = i(343).PaneCursorType;
o.prototype.update = function() {
this._invalidated = !0
}, o.prototype._updateImpl = function() {
var t, e, i, o, n, r, s, a, l, c, h, u, d, _, m, g = this;
if (this.m_bars = [], !this.m_model.timeScale().isEmpty() && !this.m_series.priceScale()
.isEmpty() && null !== (t = this.m_model.timeScale().visibleBars()) && 0 !== this.m_series
.bars().size()) {
for (e = this.m_series.nearestIndex(t.firstBar(), x.NearestRight), i = this.m_series
.nearestIndex(t.lastBar(), x.NearestLeft); e <= i && null === this.m_series.bars()
.valueAt(e); e++);
if (!(e > i) && (t = this.m_series.bars().range(e, i), n = this.m_series.priceScale(), r = n
.properties().percentage.value(), s = this.m_series.barColorer(), a = {}, t.each(
function(t, e) {
var i, n;
void 0 !== e[TradingView.OPEN_PLOT] && void 0 !== e[TradingView
.HIGH_PLOT] && void 0 !== e[TradingView.LOW_PLOT] && void 0 !== e[
TradingView.CLOSE_PLOT] && (void 0 === o && (o = e[TradingView
.CLOSE_PLOT]), i = {}, i.time = Math.round(t), r ? (i.open =
100 * (e[TradingView.OPEN_PLOT] - o) / o, i.high = 100 * (e[
TradingView.HIGH_PLOT] - o) / o, i.low = 100 * (e[
TradingView.LOW_PLOT] - o) / o, i.close = 100 * (e[
TradingView.CLOSE_PLOT] - o) / o) : (i.open = e[TradingView
.OPEN_PLOT], i.high = e[TradingView.HIGH_PLOT], i.low = e[
TradingView.LOW_PLOT], i.close = e[TradingView.CLOSE_PLOT]), a
.value = e, n = e[TradingView.STYLE_PLOT] ? e[TradingView
.STYLE_PLOT] : s.barStyle(t, !1, a), e[TradingView.STYLE_PLOT] =
n, a.previousValue = e, i.color = n.barColor, i.borderColor = n
.barBorderColor, i.wickColor = n.barWickColor, i.hollow = n
.isBarHollow, g.m_bars.push(i))
}, this), n.barPricesToCoordinates(this.m_bars), this.m_model.timeScale()
.barIndexesToCoordinates(this.m_bars),
this.m_series === this.m_model.selectedSource()))
for (l = T(e, i), this._selectionData = {
points: []
}, this._selectionData.hittestResult = f.REGULAR, c = 0; c < l.length; c++) h = l[
c], null !== (u = this.m_series.bars().valueAt(h)) && (d = .5 * (u[TradingView
.OPEN_PLOT] + u[TradingView.CLOSE_PLOT]), n.isPercentage() && (d = 100 * (
d - o) / o), _ = this.m_model.timeScale().indexToCoordinate(h), m = this
.m_series.priceScale().priceToCoordinate(d), this._selectionData.points.push(
new p(_, m)))
}
}, o.prototype.items = function() {
return this.m_bars
}, o.prototype.dump = function() {
var t = {};
return t.bars = this.m_bars, t
}, inherit(n, o), n.prototype.renderer = function() {
var t, e;
return this._invalidated && (this._updateImpl(), this._invalidated = !1), t = {}, t.bars = this
.m_bars, t.barSpacing = this.m_model.timeScale().barSpacing(), t.dontDrawOpen = this
.m_series.properties().barStyle.dontDrawOpen.value(), e = new w, e.append(new m(t)), this
.m_series === this.m_model.selectedSource() && this._isMarkersEnabled && e.append(new _(this
._selectionData)), e
}, inherit(r, o), r.prototype.renderer = function() {
var t, e;
return this._invalidated && (this._updateImpl(), this._invalidated = !1), t = {}, t.bars = this
.m_bars, t.barSpacing = this.m_model.timeScale().barSpacing(), t.drawWick = this.m_series
.properties().candleStyle.drawWick.value(), t.drawBorder = this.m_series.properties()
.candleStyle.drawBorder.value(), t.borderColor = this.m_series.properties().candleStyle
.borderColor.value(), t.wickColor = this.m_series.properties().candleStyle.wickColor
.value(), e = new w, e.append(new y(t)), this.m_series === this.m_model.selectedSource() &&
this
._isMarkersEnabled && e.append(new _(this._selectionData)), e
}, inherit(s, o), s.prototype.renderer = function() {
var t, e;
return this._invalidated && (this._updateImpl(), this._invalidated = !1), t = {}, t.bars = this
.m_bars, t.barSpacing = this.m_model.timeScale().barSpacing(), t.drawWick = this.m_series
.properties().haStyle.drawWick.value(), t.drawBorder = this.m_series.properties().haStyle
.drawBorder.value(), t.borderColor = this.m_series.properties().haStyle.borderColor.value(),
t.wickColor = this.m_series.properties().haStyle.wickColor.value(), e = new w, e.append(
new y(t)), this.m_series === this.m_model.selectedSource() && this._isMarkersEnabled &&
e.append(new _(this._selectionData)), e
}, inherit(a, o), a.prototype.renderer = function() {
var t, e;
return this._invalidated && (this._updateImpl(), this._invalidated = !1), t = {}, t.bars = this
.m_bars, t.barSpacing = this.m_model.timeScale().barSpacing(), t.drawWick = this.m_series
.properties().hollowCandleStyle.drawWick.value(), t.drawBorder = this.m_series.properties()
.hollowCandleStyle.drawBorder.value(), t.borderColor = this.m_series.properties()
.hollowCandleStyle.borderColor.value(), t.wickColor = this.m_series.properties()
.hollowCandleStyle.wickColor.value(), e = new w, e.append(new y(t)), this.m_series === this
.m_model.selectedSource() && this._isMarkersEnabled && e.append(new _(this._selectionData)),
e
}, l.prototype.update = function() {
var t, e, i, o, n, r, s, a, l, c, h, u, d, _, m;
if (this.m_items = [],
!this.m_model.timeScale().isEmpty() && this.m_series.priceScale() && !this.m_series
.priceScale().isEmpty() && null !== (t = this.m_model.timeScale().visibleBars()) && 0 !==
this.m_series.bars().size() && (e = this.m_series.nearestIndex(t.firstBar(), x
.NearestRight), i = this.m_series.nearestIndex(t.lastBar(), x.NearestLeft), t = this
.m_series.bars().range(e, i), n = this.m_series.priceScale(), r = {
color: this.m_series.properties().lineStyle.color.value()
}, s = this.m_series.barFunction(), a = n.properties().percentage.value(), t.each(
function(t, e) {
var i, n = s(e);
return void 0 !== n && null !== n && (void 0 === o && (o = n), a && (n = 100 * (
n - o) / o), i = new p(t, n), i.style = r, this.m_items.push(i), !1)
}.bind(this)), n.pointsArrayToCoordinates(this.m_items), this.m_model.timeScale()
.indexesToCoordinates(this.m_items), this.m_series === this.m_model.selectedSource()))
for (l = T(e, i), this._selectionData = {
points: []
}, this._selectionData.hittestResult = f.REGULAR, c = 0; c < l.length; c++) h = l[c],
u = this.m_series.data().valueAt(h), d = s(u), n.isPercentage() && (d = 100 * (d - o) /
o), _ = this.m_model.timeScale().indexToCoordinate(h), m = this.m_series
.priceScale().priceToCoordinate(d), this._selectionData.points.push(new p(_, m))
}, inherit(c, l), c.prototype.update = function() {
this._invalidated = !0
}, c.prototype.renderer = function() {
var t, e, i, o;
return this._invalidated && (l.prototype.update.call(this), this._invalidated = !1), t = this
.m_series.properties().lineStyle, e = {
barSpacing: this.m_model.timeScale().barSpacing(),
items: this.m_items,
lineColor: t.color.value(),
lineStyle: t.linestyle.value(),
withMarkers: t.styleType.value() === TradingView.Series.STYLE_LINE_TYPE_MARKERS,
withSteps: t.styleType.value() === TradingView.Series.STYLE_LINE_TYPE_STEP,
lineWidth: t.linewidth.value(),
simpleMode: !0
}, i = new g(e), this.m_series === this.m_model.selectedSource() ? (o = new w, o.append(i),
this._isMarkersEnabled && o.append(new _(this._selectionData))) : o = i, o
}, inherit(h, l), h.prototype.update = function() {
this._invalidated = !0
}, h.prototype.renderer = function() {
var t, e, i;
return this._invalidated && (l.prototype.update.call(this), this._invalidated = !1), t = {}, t
.simpleMode = !1, t.barSpacing = this.m_model.timeScale().barSpacing(), t.items = this
.m_items, t.lineColor = this.m_series.properties().areaStyle.linecolor.value(), t
.lineStyle = this.m_series.properties().areaStyle.linestyle.value(), t.lineWidth = this
.m_series.properties().areaStyle.linewidth.value(), e = this.m_series.properties().areaStyle
.transparency.value(), t.isSeries = !0, t.color1 = C.generateColor(this.m_series
.properties().areaStyle.color1.value(), e), t.color2 = C.generateColor(this.m_series
.properties().areaStyle.color2.value(), e), t.bottom = this.m_series.priceScale()
.height(), i = new w, i.append(new v(t)), this.m_series === this.m_model.selectedSource() &&
this._isMarkersEnabled && i.append(new _(this._selectionData)), i
}, inherit(u, l), u.prototype.update = function() {
this._invalidated = !0
}, u.prototype._updateImpl = function() {
var t, e;
l.prototype.update.call(this), t = this.m_series.properties().baselineStyle, e = t.transparency
.value(), this._topFillColor1 = C.generateColor(t.topFillColor1.value(), e), this
._topFillColor2 = C.generateColor(t.topFillColor2.value(), e),
this._bottomFillColor1 = C.generateColor(t.bottomFillColor1.value(), e), this
._bottomFillColor2 = C.generateColor(t.bottomFillColor2.value(), e), this._topLineColor = t
.topLineColor.value(), this._bottomLineColor = t.bottomLineColor.value(), this
._topLineWidth = t.topLineWidth.value(), this._bottomLineWidth = t.bottomLineWidth.value(),
this._barSpacing = this.m_model.timeScale().barSpacing(), this._bottom = this.m_series
.priceScale().height(), this._baseLevelCoordinate = Math.round(this._bottom * (Math.abs(
100 - t.baseLevelPercentage.value()) / 100))
}, u.prototype.renderer = function() {
this._invalidated && (this._updateImpl(), this._invalidated = !1), this._renderer.setData({
items: this.m_items,
topFillColor1: this._topFillColor1,
topFillColor2: this._topFillColor2,
bottomFillColor1: this._bottomFillColor1,
bottomFillColor2: this._bottomFillColor2,
topLineColor: this._topLineColor,
bottomLineColor: this._bottomLineColor,
topLineWidth: this._topLineWidth,
bottomLineWidth: this._bottomLineWidth,
lineStyle: CanvasEx.LINESTYLE_SOLID,
barSpacing: this._barSpacing,
baseLevelCoordinate: this._baseLevelCoordinate,
bottom: this._bottom
});
var t = new w;
return t.append(this._renderer), this.m_series === this.m_model.selectedSource() && t.append(
new _(this._selectionData)), t
}, d.prototype.update = function() {
this._invalidated = !0
}, d.prototype._updateImpl = function(t) {
var e = this._source.properties().baselineStyle,
i = Math.abs(100 - e.baseLevelPercentage.value());
this._visible = !0, this._points = [new p(0, Math.round(t * (i / 100)))], this._color = e
.baselineColor.value()
}, d.prototype.renderer = function(t) {
return this._invalidated && (this._updateImpl(t), this._invalidated = !1), this._renderer
.setData({
visible: this._visible,
width: this._model.timeScale().width(),
height: t,
points: this._points,
color: this._color,
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_SPARSE_DOTTED
}), this._renderer
}, e.SeriesBarsPaneView = n, e.SeriesCandlesPaneView = r, e.SeriesHollowCandlesPaneView = a, e
.SeriesLinePaneView = c, e.SeriesAreaPaneView = h, e.SeriesHeikenAshiPaneView = s, e
.SeriesBaselinePaneView = u, e.SeriesBaselineLinePaneView = d
}, function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
});
! function(t) {
t[t.Default = 0] = "Default", t[t.Pointer = 1] = "Pointer", t[t.Eraser = 2] = "Eraser", t[t.Dot =
3] = "Dot", t[t.Grabbing = 4] = "Grabbing", t[t.ZoomIn = 5] = "ZoomIn", t[t.VerticalResize =
6] = "VerticalResize"
}(e.PaneCursorType || (e.PaneCursorType = {}))
}, function(t, e, i) {
"use strict";
var o, n;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(9), n = function() {
function t(t, e) {
o.assert(t <= e,
"The last bar in the bars range should be greater than or equal to the first bar"),
this._firstBar = t, this._lastBar = e
}
return t.prototype.firstBar = function() {
return this._firstBar
}, t.prototype.lastBar = function() {
return this._lastBar
}, t.prototype.count = function() {
return this._lastBar - this._firstBar + 1
}, t.prototype.contains = function(t) {
return this._firstBar <= t && t <= this._lastBar
}, t.prototype.equals = function(t) {
return this._firstBar === t.firstBar() && this._lastBar === t.lastBar()
}, t
}(), e.BarsRange = n
}, function(t, e, i) {
"use strict";
var o, n, r, s;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(10), r = i(885),
s = function(t) {
function e(e, i) {
void 0 === i && (i = !1);
var o = t.call(this, e, "cs", !1) || this;
return o._sessionDisabled = !1, o._handler = null, o._criticalError = new n, o
._disableStatistics = i, o
}
return o.__extends(e, t), e.prototype.destroy = function() {
this._criticalError.destroy(), this._handler = null, t.prototype.destroy.call(this)
}, e.prototype.serverTimeOffset = function() {
return this._getChartApi().serverTimeOffset()
}, e.prototype.switchTimezone = function(t) {
return this._getChartApi().switchTimezone(this.sessionId(), t)
}, e.prototype.resolveSymbol = function(t, e, i) {
return this._getChartApi().resolveSymbol(this.sessionId(), t, e, i)
}, e.prototype.requestFirstBarTime = function(t, e, i) {
return this._getChartApi().requestFirstBarTime(this.sessionId(), t, e, i)
}, e.prototype.createSeries = function(t, e, i, o, n, r) {
return this._getChartApi().createSeries(this.sessionId(), t, e, i, o, n, r)
}, e.prototype.modifySeries = function(t, e, i, o, n) {
return this._getChartApi().modifySeries(this.sessionId(), t, e, i, o, n)
}, e.prototype.removeSeries = function(t, e) {
return !!this.isConnected().value() && this._getChartApi().removeSeries(this
.sessionId(), t, e)
}, e.prototype.requestMoreData = function(t, e, i) {
return this._getChartApi().requestMoreData(this.sessionId(), t, e, i)
}, e.prototype.requestMoreTickmarks = function(t, e, i) {
return this._getChartApi().requestMoreTickmarks(this.sessionId(), t, e, i)
}, e.prototype.requestMetadata = function(t, e) {
this._getChartApi().requestMetadata(this.sessionId(), t, e)
}, e.prototype.isCanCreateStudy = function(t) {
return this._getChartApi().isCanCreateStudy(t)
}, e.prototype.createStudy = function(t, e, i, o, n, r, s) {
return this._getChartApi().createStudy(this.sessionId(), t, e, i, o, n, r, s)
}, e.prototype.rebindStudy = function(t, e, i, o, n, r, s) {
return this._getChartApi().rebindStudy(this.sessionId(), t, e, i, o, n, r, s)
}, e.prototype.modifyStudy = function(t, e, i, o) {
return this._getChartApi().modifyStudy(this.sessionId(), t, e, i, o)
}, e.prototype.removeStudy = function(t, e, i) {
return this._getChartApi().removeStudy(this.sessionId(), t, e, i)
}, e.prototype.createPointset = function(t, e, i, o, n, r) {
return this._getChartApi().createPointset(this.sessionId(), t, e, i, o, n, r)
}, e.prototype.modifyPointset = function(t, e, i, o) {
return this._getChartApi().modifyPointset(this.sessionId(), t, e, i, o)
}, e.prototype.removePointset = function(t) {
return this._getChartApi().removePointset(this.sessionId(), t)
}, e.prototype.setVisibleTimeRange = function(t, e, i, o) {
this._getChartApi().setVisibleTimeRange(t, this.sessionId(), e, i, o)
}, e.prototype.criticalError = function() {
return this._criticalError
}, e.prototype.connect = function(e) {
void 0 === e && (e = null), null !== e && (this._handler = e), t.prototype.connect.call(
this)
}, e.prototype.setHandler = function(t) {
this._handler = t
}, e.prototype.connected = function() {
return this.isConnected().value() && !this._sessionDisabled
}, e.prototype.disable = function() {
this._sessionDisabled = !0
}, e.prototype.chartApi = function() {
return this._getChartApi()
}, e.prototype._sendCreateSession = function() {
var t = this;
Object.keys(this).forEach(function(e) {
/^(s|st|symbol_)\d+$/.test(e) && delete t[e]
}),
this._getChartApi().chartCreateSession(this.sessionId(), this._disableStatistics)
}, e.prototype._sendRemoveSession = function() {
this._getChartApi().chartDeleteSession(this.sessionId())
}, e.prototype._onMessage = function(t) {
this._handler && this._handler(t)
}, e.prototype._onCriticalError = function(e, i) {
this._criticalError.fire(e, i), t.prototype._onCriticalError.call(this, e, i)
}, e
}(r.Session), e.ChartSession = s
}, function(t, e, i) {
"use strict";
(function(e) {
var o = i(171).futuresRoots,
n = function() {
function t(t, e) {
var i = function() {};
return i.prototype = e.prototype, t.prototype = new i, t
}
function i(t) {
return t.replace(/[\^\$\(\)\[\]\{\}\*\+\?\|\\]/g, "\\$&")
}
function n() {}
function r(t) {
this.value = t
}
function s() {}
function a() {}
function l() {}
function c() {}
function h() {}
function u() {}
function d() {}
function p() {}
function _(t) {
this.value = t
}
function f(t) {
this.value = t
}
function m(t) {
this.value = t
}
function g() {
_.apply(this, arguments)
}
function v() {
f.apply(this, arguments)
}
function y(t, e) {
var i, o, n, s, a, l, c, h, u = [];
t: for (; i = W.exec(t);) {
for (o = $.length; o--;)
if (i[o + 1]) {
$[o].ctor && (n = new $[o].ctor(i[o + 1]), n._offset = i.index, u
.push(n));
continue t
} s = new m(i[0]), s._offset = i.index, u.push(s)
}
if (e && e.recover)
for (o = u.length; o--;) l = u[o], l instanceof f || l instanceof _ ? (
void 0 !== a && (c = new _(""), h = u.splice(o, a - o + 1, c), c.value =
h.map(function(t) {
return t.value
}).join("")), a = o) : l instanceof r || (a = void 0);
return u
}
function b(t) {
var i, o, n, c, h, u, d, p, g, v;
if (e.enabled("charting_library_base")) return {
currentState: "var"
};
for (i = "init", o = "var", n = "operator", c = i, h = {
warnings: [],
errors: [],
isEmpty: !0
}, u = [], d = 0; d < t.length; d++)
if (!((p = t[d]) instanceof r))
if (delete h.isEmpty, p.isIncomplete && (g = {
status: "incomplete",
reason: "incomplete_token",
offset: p._offset,
token: p
}, p.incompleteSuggest && (g.recover = {
append: p.incompleteSuggest()
}), h.warnings.push(g), d !== t.length - 1)) g.status = "error";
else if (p instanceof _ || p instanceof f) {
if (c === o) {
h.errors.push({
status: "error",
reason: "unexpected_token",
offset: p._offset,
token: p
});
continue
}
c = o
} else if (p instanceof l) {
if (c !== o) {
h.errors.push({
status: "error",
reason: "unexpected_token",
offset: p._offset,
token: p
});
continue
}
c = n
} else if (p instanceof s) {
if (c === o) {
h.errors.push({
status: "error",
reason: "unexpected_token",
offset: p._offset,
token: p
});
continue
}
u.push(p), c = i
} else if (p instanceof a) {
if (c !== o) {
h.errors.push({
status: "error",
reason: "unexpected_token",
offset: p._offset,
token: p
});
continue
}
v = u.pop(), v || h.errors.push({
status: "error",
reason: "unbalanced_brace",
offset: p._offset,
token: p,
recover: {
prepend: new s
}
}), c = o
} else p instanceof m && h.errors.push({
status: "error",
reason: "unparsed_entity",
offset: p._offset,
token: p
});
for (h.braceBalance = u.length, c !== o && h.warnings.push({
status: "incomplete"
}), v = null; u.length;) p = u.pop(), g = {
status: "incomplete",
reason: "unbalanced_brace",
offset: p._offset,
token: p
}, c === o && (g.recover = {
append: new a
}), h.warnings.push(g);
return h.currentState = c, 0 === h.warnings.length && delete h.warnings, 0 === h
.errors.length && delete h.errors, h
}
function S(t) {
var e, i = [];
for (e = 0; e < t.length; e++) t[e] instanceof r || i.push(t[e]);
return i
}
function w(t) {
var e, i, o, n, r, c, h;
for (t = S(t), e = [],
i = [], n = 0; n < t.length; n++) r = t[n], r instanceof l ? i.length && i[i
.length - 1].minPrecedence > r.precedence && (i[i.length - 1]
.minPrecedence = r.precedence) : r instanceof s ? i.push(o = {
minPrecedence: 1 / 0,
openBraceIndex: n
}) : r instanceof a && (o = i.pop(), c = t[o.openBraceIndex - 1], (h = t[n +
1]) instanceof l && !(h.precedence <= o.minPrecedence) || !(!(
c instanceof l) || c.precedence < o.minPrecedence || c
.precedence === o.minPrecedence && c.commutative) || (e.unshift(o
.openBraceIndex), e.push(n), i.length && i[i.length - 1]
.minPrecedence > o.minPrecedence && (i[i.length - 1].minPrecedence = o
.minPrecedence)));
for (n = e.length; n--;) t.splice(e[n], 1);
return t
}
function T(t) {
for (var e = 0; e < t.length; e++) t[e].parse && t[e].parse();
return t
}
function C(t) {
var e = x(t);
return w(e ? e : [new f("1"), new d, new s].concat(t).concat(new a))
}
function x(t) {
var e, i, o, n = 0,
c = 1,
h = 2,
u = 3,
p = n,
_ = 0;
for (i = 0; i < t.length; i++)
if (!((o = t[i]) instanceof r)) switch (p) {
case n:
if (!(o instanceof f && 1 == +o.value)) return !1;
p = c;
break;
case c:
if (!(p === c && o instanceof d)) return !1;
p = h, e = i + 1;
break;
case h:
if (o instanceof s) p = u, _ = 1;
else if (o instanceof l) return !1;
break;
case u:
o instanceof s ? _++ : o instanceof a && --_ <= 0 && (p = h)
}
return t.slice(e)
}
function P(t) {
return new _(t).ticker()
}
function L(t) {
if ("string" != typeof t) throw new TypeError("expression must be a string");
return t = y(t), t.filter(function(t) {
return t instanceof _
}).map(function(t) {
return t.exchange()
}).filter(function(t) {
return t
})
}
function I(t) {
return t = L(t), 1 !== t.length ? null : t[0]
}
function k(t, e) {
return t = L(t), t.some(function(t) {
return !!~e.indexOf((t || "").toUpperCase())
})
}
function A(t) {
return k(t, ["BATS"])
}
function M(t) {
return (t = I(t)) && -1 !== t.toUpperCase().indexOf("_EOD")
}
function E(t) {
return k(t, ["CHXEUR"])
}
function D(t) {
return k(t, ["CHXJPY"])
}
function V(t) {
return k(t, pro.getProductsByType(pro.PRODUCT_TYPES.exchange).map(function(t) {
return t.exchange.toUpperCase() + "_DLY"
}))
}
function O(t, e) {
return !!(t = I(t)) && t.substr(0, e.length) === e
}
function R(t) {
if ("string" != typeof t) throw new TypeError("expression must be a string");
var e = w(S(y(t)));
return e.forEach(function(t) {
t instanceof _ && t.exchange(null)
}), z(e)
}
function B(t) {
if ("string" != typeof t) throw new TypeError("expression must be a string");
return z(w(S(y(t))))
}
function z(t) {
return t.join("")
}
var F, N, W, $ = [{
pattern: "(",
ctor: s
}, {
pattern: ")",
ctor: a
}, {
pattern: "+",
ctor: c
}, {
pattern: "-",
ctor: h
}, {
pattern: "*",
ctor: u
}, {
pattern: "/",
ctor: d
}, {
pattern: "^",
ctor: p
}, {
pattern: /\d+(?:\.\d*|(?![a-zA-Z0-9_!:\.&]))|\.\d+/,
ctor: f
}, {
pattern: /\./,
ctor: v
}, {
pattern: e.enabled("charting_library_base") ?
/[a-zA-Z0-9_\u0370-\u1FFF_\u2E80-\uFFFF^][a-zA-Z0-9_\u0020\u0370-\u1FFF_\u2E80-\uFFFF_!:\.&]*|'.+?'/ :
/[a-zA-Z0-9_\u0370-\u1FFF_\u2E80-\uFFFF][a-zA-Z0-9_\u0020\u0370-\u1FFF_\u2E80-\uFFFF_!|:\.&]*|'.+?'/,
ctor: _
}, {
pattern: /'[^']*/,
ctor: g
}, {
pattern: /[\0-\x20\s]+/,
ctor: r
}];
return n.prototype.toString = function() {
return this.value
}, t(r, n), t(s, n), s.prototype.value = "(", t(a, n), a.prototype.value = ")", t(l,
n), t(c, l), c.prototype.value = "+", c.prototype.precedence = 0, c.prototype
.commutative = !0, t(h, l), h.prototype.value = "-", h.prototype.precedence = 0, h
.prototype.commutative = !1, t(u, l),
u.prototype.value = "*", u.prototype.precedence = 1, u.prototype.commutative = !0,
t(d, l), d.prototype.value = "/", d.prototype.precedence = 1, d.prototype
.commutative = !1, t(p, l), p.prototype.value = "^", p.prototype.precedence = 2, p
.prototype.commutative = !1, F = /^'?(?:([A-Z0-9_]+):)?(.*?)'?$/i, N = /[\+\-\/\*]/,
t(_, n), _.prototype.toString = function() {
if (this.hasOwnProperty("_ticker")) {
var t = N.test(this._ticker) ? "'" : "";
return t + (this._exchange ? this._exchange + ":" : "") + this._ticker + t
}
return this.value
}, _.prototype.parse = function() {
var t = F.exec(this.value);
t[1] && (this._exchange = t[1]), this._ticker = t[2]
}, _.prototype.parseAsFutures = function() {
var t, e, i;
if (o)
for (this.hasOwnProperty("_ticker") || this.parse(), t = function(t) {
return o.some(function(e) {
return e.t === t
})
}, e = 2; e >= 1; --e)
if (i = this._ticker.slice(0, e), t(i)) {
this._root = i, this._contract = this._ticker.slice(e);
break
}
}, _.prototype.exchange = function(t) {
if (this.hasOwnProperty("_ticker") || this.parse(), !(arguments.length > 0))
return this._exchange;
null === t || void 0 === t ? delete this._exchange : this._exchange = t + ""
}, _.prototype.ticker = function(t) {
if (this.hasOwnProperty("_ticker") || this.parse(), !(arguments.length > 0))
return this._ticker;
null === t || void 0 === t ? delete this._ticker : this._ticker = t + "",
delete this._root, delete this._contract
}, _.prototype.root = function(t) {
if (this.hasOwnProperty("_root") || this.parseAsFutures(), !(arguments.length >
0)) return this._root;
null === t || void 0 === t ? delete this._root : (this._root = t + "", this
._root && (this._ticker = this._root + (this._contract || "")))
}, _.prototype.contract = function(t) {
if (this.hasOwnProperty("_contract") || this.parseAsFutures(), !(arguments
.length > 0)) return this._root;
null === t || void 0 === t ? delete this._contract : (this._contract = t + "",
this._root && (this._ticker = this._root + this._contract))
}, t(f, n), f.prototype.toString = function() {
return this.hasOwnProperty("_normalizedValue") ? this._normalizedValue : this
.value
}, f.prototype.parse = function() {
this._normalizedValue = this.value.replace(/^0+|\.0*$/g, "").replace(
/(\.\d*?)0+$/, "$1").replace(/^(\.|$)/, "0$1")
}, m.prototype.toString = function() {
return this.value
}, t(g, _), g.prototype.isIncomplete = !0, g.prototype.incompleteSuggest =
function() {
if ("'" !== this.value) return "'"
}, t(v, f), v.prototype.isIncomplete = !0, W = RegExp($.map(function(t) {
return "(" + ("string" == typeof t.pattern ? i(t.pattern) : t.pattern
.source) + ")"
}).concat(".").join("|"), "g"), {
tokenize: y,
validate: b,
factorOutBraces: w,
normalizeTokens: T,
flip: C,
hasBatsSymbols: A,
hasEodSymbols: M,
hasChxeurSymbols: E,
hasChxjpySymbols: D,
hasFreeDelaySymbols: V,
getExchange: I,
isExchange: O,
SymbolToken: _,
IncompleteSymbolToken: g,
NumberToken: f,
BinaryOperatorToken: l,
OpenBraceToken: s,
CloseBraceToken: a,
ticker: P,
shortName: R,
normalize: B
}
}();
t.exports = n
}).call(e, i(5))
}, function(t, e, i) {
"use strict";
function o(t) {
return t + "(" + new Date(1e3 * t).toUTCString() + ")"
}
function n(t) {
var e, i, o, n;
return t += "", e = t.slice(0), i = !1, o = e[e.length - 1], -1 === "DWM".indexOf(o) && "S" !== o &&
(i = !0, o = ""), n = parseInt(i ? e : e.length > 1 ? e.slice(0, e.length - 1) : 1), {
resolution: o,
interval: n
}
}
var r, s = i(58),
a = i(50),
l = i(34).Interval,
c = !1,
h = null,
u = 0,
d = function(t, e) {
this._session = new s.Session,
this._session.init(t.timezone, t.session), this._symbolInfo = t, this._resolution = e, this
._extrapolatedData = [], this._modelId = u++, this._valid = !!t.timezone && !!t.session,
c && console.log('Created model "{0}", interval "{1}", session "{2}", tz "{3}"'.format(this
._modelId, this._resolution, t.session, t.timezone))
};
d.prototype.uniqueId = function() {
return this._modelId
}, d.prototype.isValid = function() {
return this._valid
}, d.prototype._barBuilder = function() {
if (!this._builderCache) {
var t = n(this._resolution);
this._builderCache = s.newBarBuilder(t.resolution, t.interval, this._session, this._session)
}
return this._builderCache
}, d.prototype.distance = function(t, e) {
var i, n, r, a, l;
return isNumber(t) && isNumber(e) && this.isValid() ? (i = this._extrapolatedData.length > 0 ?
this._extrapolatedData[0] : null, n = i && this._extrapolatedData[this._extrapolatedData
.length - 1], 1e3 * t !== i && (this._extrapolatedData = [1e3 * t], i = null, n =
null), (null === i || 1e3 * e > n) && (r = 500, a = s.extrapolateBarsFrontToTime(
this._barBuilder(), n || 1e3 * t, 1e3 * e, r), this._extrapolatedData = this
._extrapolatedData.concat(a)), (n = this._extrapolatedData[this._extrapolatedData
.length - 1]) < 1e3 * e ? {
success: !1
} : (l = this._extrapolatedData.indexOf(1e3 * e), -1 !== l ? (c && console.log(
'Model "{0}" "{1}", distance between "{2}" and "{3}" is "{4}"'.format(this
._modelId, this._resolution, o(t), o(e), l)), {
success: !0,
result: l
}) : {
success: !1
})) : {
success: !1
}
}, d.prototype.projectTime = function(t, e) {
var i, n, r, a;
return isNumber(t) && isNumber(e) && this.isValid() ? (i = this._extrapolatedData.length > 0 ?
this._extrapolatedData[0] : null, n = i && this._extrapolatedData[this._extrapolatedData
.length - 1], 1e3 * t !== i && (this._extrapolatedData = [1e3 * t], i = null, n =
null), (null === i || e >= this._extrapolatedData.length) && (r = s
.extrapolateBarsFrontByCount(this._barBuilder(), n || 1e3 * t, e - this
._extrapolatedData.length + 1), this._extrapolatedData = this._extrapolatedData
.concat(r)), e < this._extrapolatedData.length ? (a = this._extrapolatedData[e] /
1e3, c && console.log(
'Model "{0}" "{1}", proj.time from "{2}" offset "{3}" is "{4}"'.format(this
._modelId, this._resolution, o(t), e, o(a))), a) : t) : t
}, r = function(t, e) {
this._source = t, this._target = e, this._isSessionTheSame = t._symbolInfo.timezone === e
._symbolInfo.timezone && t._symbolInfo.session === e._symbolInfo.session, this
._isResolutionTheSame = t._resolution === e._resolution, this._shouldCorrectTradingDay = l
.isDWM(t._resolution) && !this._isSessionTheSame, this._cache = {}, null === h && (h = new s
.Session, h.init("Etc/UTC", "24x7"))
}, r.prototype._sourceTargetBuilder = function() {
var t, e;
return this._sourceTargetBuilderCache || (t = n(this._target._resolution), e = this
._isSessionTheSame ? this._target._session : h, this._sourceTargetBuilderCache = s
.newBarBuilder(t.resolution, t.interval, this._target._session, e)), this
._sourceTargetBuilderCache
}, r.prototype.sourceTimeToTargetTime = function(t) {
var e, i, n, r, s, l;
return this._isSessionTheSame && this._isResolutionTheSame ? t : isNumber(t) && this._source
.isValid() && this._target.isValid() ? (e = this._cache[t], e || (i = 1e3 * t, this
._shouldCorrectTradingDay && (n = a.utc_to_cal(this._source._session.timezone, i),
n = this._source._session.spec.correctTradingDay(n, this._source._session
.timezone), r = new Date(n), a.set_hms(r, 0, 0, 0, 0), i = r.valueOf()), s =
this._sourceTargetBuilder(), s.moveTo(i), l = s.indexOfBar(i), e = s.startOfBar(Math
.max(0, l)) / 1e3, this._cache[t] = e), c && console.log(
'Model "{0}" "{1}" sourceTime "{2}" => model "{3}" "{4}" targetTime "{5}"'.format(
this._source.uniqueId(), this._source._resolution, o(t), this._target
.uniqueId(), this._target._resolution, o(e))), e) : t
}, t.exports.SyncPoint = r, t.exports.SyncModel = d
}, function(t, e, i) {
"use strict";
var o, n = i(49),
r = i(886),
s = i(887),
a = i(888),
l = i(889),
c = i(890),
h = i(891),
u = i(892),
d = (o = {}, o[n.STYLE_AREA] = r, o[n.STYLE_BARS] = s, o[n.STYLE_CANDLES] = a, o[n
.STYLE_HEIKEN_ASHI] = l, o[n.STYLE_HOLLOW_CANDLES] = c, o[n.STYLE_LINE] = h, o[n
.STYLE_BASELINE] = u, o);
t.exports = d
}, function(t, e, i) {
"use strict";
function o(t) {
return -1 !== a.indexOf(t)
}
function n(t) {
return -1 !== l.indexOf(t)
}
function r(t) {
return c[t]
}
var s, a, l, c;
Object.defineProperty(e, "__esModule", {
value: !0
}), s = i(49), a = [s.STYLE_RENKO, s.STYLE_KAGI, s.STYLE_PNF, s.STYLE_PB, s.STYLE_HEIKEN_ASHI], e
.isJapaneseStyle = o, l = [s.STYLE_RENKO, s.STYLE_PB, s.STYLE_KAGI, s.STYLE_PNF], e.hasProjection =
n, c = {
open: function(t) {
return t[1]
},
high: function(t) {
return t[2]
},
low: function(t) {
return t[3]
},
close: function(t) {
return t[4]
},
hl2: function(t) {
return (t[2] + t[3]) / 2
},
hlc3: function(t) {
return (t[2] + t[3] + t[4]) / 3
},
ohlc4: function(t) {
return (t[1] + t[2] + t[3] + t[4]) / 4
}
}, e.barFunction = r
}, function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
}), e.MINUTE_SPAN = 20, e.HOUR_SPAN = 30, e.DAY_SPAN = 40, e.WEEK_SPAN = 50, e.MONTH_SPAN = 60, e
.YEAR_SPAN = 70
}, function(t, e, i) {
var o;
! function(n, r, s, a) {
"use strict";
function l(t, e, i) {
return setTimeout(p(t, i), e)
}
function c(t, e, i) {
return !!Array.isArray(t) && (h(t, i[e], i), !0)
}
function h(t, e, i) {
var o;
if (t)
if (t.forEach) t.forEach(e, i);
else if (t.length !== a)
for (o = 0; o < t.length;) e.call(i, t[o], o, t), o++;
else
for (o in t) t.hasOwnProperty(o) && e.call(i, t[o], o, t)
}
function u(t, e, i) {
var o = "DEPRECATED METHOD: " + e + "\n" + i + " AT \n";
return function() {
var e = Error("get-stack-trace"),
i = e && e.stack ? e.stack.replace(/^[^\(]+?[\n$]/gm, "").replace(/^\s+at\s+/gm, "")
.replace(/^Object.<anonymous>\s*\(/gm, "{anonymous}()@") : "Unknown Stack Trace",
r = n.console && (n.console.warn || n.console.log);
return r && r.call(n.console, o, i), t.apply(this, arguments)
}
}
function d(t, e, i) {
var o, n = e.prototype;
o = t.prototype = Object.create(n), o.constructor = t, o._super = n, i && ft(o, i)
}
function p(t, e) {
return function() {
return t.apply(e, arguments)
}
}
function _(t, e) {
return typeof t == Te ? t.apply(e ? e[0] || a : a, e) : t
}
function f(t, e) {
return t === a ? e : t
}
function m(t, e, i) {
h(b(e), function(e) {
t.addEventListener(e, i, !1)
})
}
function g(t, e, i) {
h(b(e), function(e) {
t.removeEventListener(e, i, !1)
})
}
function v(t, e) {
for (; t;) {
if (t == e) return !0;
t = t.parentNode
}
return !1
}
function y(t, e) {
return t.indexOf(e) > -1
}
function b(t) {
return t.trim().split(/\s+/g)
}
function S(t, e, i) {
if (t.indexOf && !i) return t.indexOf(e);
for (var o = 0; o < t.length;) {
if (i && t[o][i] == e || !i && t[o] === e) return o;
o++
}
return -1
}
function w(t) {
return Array.prototype.slice.call(t, 0)
}
function T(t, e, i) {
for (var o, n = [], r = [], s = 0; s < t.length;) o = e ? t[s][e] : t[s], S(r, o) < 0 && n.push(
t[s]), r[s] = o, s++;
return i && (n = e ? n.sort(function(t, i) {
return t[e] > i[e]
}) : n.sort()), n
}
function C(t, e) {
for (var i, o, n = e[0].toUpperCase() + e.slice(1), r = 0; r < Se.length;) {
if (i = Se[r], (o = i ? i + n : e) in t) return o;
r++
}
return a
}
function x() {
return vt++
}
function P(t) {
var e = t.ownerDocument || t;
return e.defaultView || e.parentWindow || n
}
function L(t, e) {
var i = this;
this.manager = t, this.callback = e, this.element = t.element, this.target = t.options
.inputTarget, this.domHandler = function(e) {
_(t.options.enable, [t]) && i.handler(e)
}, this.init()
}
function I(t) {
var e = t.options.inputClass;
return new(e || (St ? $ : wt ? j : bt ? G : W))(t, k)
}
function k(t, e, i) {
var o = i.pointers.length,
n = i.changedPointers.length,
r = e & It && o - n == 0,
s = e & (At | Mt) && o - n == 0;
i.isFirst = !!r, i.isFinal = !!s, r && (t.session = {}), i.eventType = e, A(t, i), t.emit(
"hammer.input", i), t.recognize(i), t.session.prevInput = i
}
function A(t, e) {
var i, o, n, r, s, a, l = t.session,
c = e.pointers,
h = c.length;
l.firstInput || (l.firstInput = D(e)), h > 1 && !l.firstMultiple ? l.firstMultiple = D(e) :
1 === h && (l.firstMultiple = !1), i = l.firstInput, o = l.firstMultiple, n = o ? o.center :
i.center, r = e.center = V(c), e.timeStamp = Pe(), e.deltaTime = e.timeStamp - i.timeStamp,
e.angle = z(n, r), e.distance = B(n, r), M(l, e), e.offsetDirection = R(e.deltaX, e.deltaY),
s = O(e.deltaTime, e.deltaX, e.deltaY), e.overallVelocityX = s.x, e.overallVelocityY = s.y,
e.overallVelocity = xe(s.x) > xe(s.y) ? s.x : s.y, e.scale = o ? N(o.pointers, c) : 1, e
.rotation = o ? F(o.pointers, c) : 0, e.maxPointers = l.prevInput ? e.pointers.length > l
.prevInput.maxPointers ? e.pointers.length : l.prevInput.maxPointers : e.pointers.length, E(
l, e), a = t.element, v(e.srcEvent.target, a) && (a = e.srcEvent.target), e.target = a
}
function M(t, e) {
var i = e.center,
o = t.offsetDelta || {},
n = t.prevDelta || {},
r = t.prevInput || {};
e.eventType !== It && r.eventType !== At || (n = t.prevDelta = {
x: r.deltaX || 0,
y: r.deltaY || 0
}, o = t.offsetDelta = {
x: i.x,
y: i.y
}), e.deltaX = n.x + (i.x - o.x), e.deltaY = n.y + (i.y - o.y)
}
function E(t, e) {
var i, o, n, r, s, l, c, h = t.lastInterval || e,
u = e.timeStamp - h.timeStamp;
e.eventType != Mt && (u > Lt || h.velocity === a) ? (s = e.deltaX - h.deltaX, l = e.deltaY - h
.deltaY, c = O(u, s, l), o = c.x, n = c.y, i = xe(c.x) > xe(c.y) ? c.x : c.y, r = R(s,
l), t.lastInterval = e) : (i = h.velocity, o = h.velocityX, n = h.velocityY, r = h
.direction), e.velocity = i, e.velocityX = o, e.velocityY = n, e.direction = r
}
function D(t) {
for (var e = [], i = 0; i < t.pointers.length;) e[i] = {
clientX: Ce(t.pointers[i].clientX),
clientY: Ce(t.pointers[i].clientY)
}, i++;
return {
timeStamp: Pe(),
pointers: e,
center: V(e),
deltaX: t.deltaX,
deltaY: t.deltaY
}
}
function V(t) {
var e, i, o, n = t.length;
if (1 === n) return {
x: Ce(t[0].clientX),
y: Ce(t[0].clientY)
};
for (e = 0, i = 0, o = 0; o < n;) e += t[o].clientX, i += t[o].clientY, o++;
return {
x: Ce(e / n),
y: Ce(i / n)
}
}
function O(t, e, i) {
return {
x: e / t || 0,
y: i / t || 0
}
}
function R(t, e) {
return t === e ? Et : xe(t) >= xe(e) ? t < 0 ? Dt : Vt : e < 0 ? Ot : Rt
}
function B(t, e, i) {
i || (i = Nt);
var o = e[i[0]] - t[i[0]],
n = e[i[1]] - t[i[1]];
return Math.sqrt(o * o + n * n)
}
function z(t, e, i) {
i || (i = Nt);
var o = e[i[0]] - t[i[0]],
n = e[i[1]] - t[i[1]];
return 180 * Math.atan2(n, o) / Math.PI
}
function F(t, e) {
return z(e[1], e[0], Wt) + z(t[1], t[0], Wt)
}
function N(t, e) {
return B(e[0], e[1], Wt) / B(t[0], t[1], Wt)
}
function W() {
this.evEl = Ht, this.evWin = Ut, this.pressed = !1, L.apply(this, arguments)
}
function $() {
this.evEl = Gt, this.evWin = Yt, L.apply(this, arguments), this.store = this.manager.session
.pointerEvents = []
}
function H() {
this.evTarget = Zt, this.evWin = Xt, this.started = !1, L.apply(this, arguments)
}
function U(t, e) {
var i = w(t.touches),
o = w(t.changedTouches);
return e & (At | Mt) && (i = T(i.concat(o), "identifier", !0)), [i, o]
}
function j() {
this.evTarget = Qt, this.targetIds = {}, L.apply(this, arguments)
}
function q(t, e) {
var i, o, n, r, s, l = w(t.touches),
c = this.targetIds;
if (e & (It | kt) && 1 === l.length) return c[l[0].identifier] = !0, [l, l];
if (n = w(t.changedTouches), r = [], s = this.target, o = l.filter(function(t) {
return v(t.target, s)
}), e === It)
for (i = 0; i < o.length;) c[o[i].identifier] = !0, i++;
for (i = 0; i < n.length;) c[n[i].identifier] && r.push(n[i]), e & (At | Mt) && delete c[n[i]
.identifier], i++;
return r.length ? [T(o.concat(r), "identifier", !0), r] : a
}
function G() {
L.apply(this, arguments);
var t = p(this.handler, this);
this.touch = new j(this.manager, t), this.mouse = new W(this.manager, t), this.primaryTouch =
null, this.lastTouches = []
}
function Y(t, e) {
t & It ? (this.primaryTouch = e.changedPointers[0].identifier, K.call(this, e)) : t & (At |
Mt) && K.call(this, e)
}
function K(t) {
var e, i, o, n = t.changedPointers[0];
n.identifier === this.primaryTouch && (e = {
x: n.clientX,
y: n.clientY
}, this.lastTouches.push(e), i = this.lastTouches, o = function() {
var t = i.indexOf(e);
t > -1 && i.splice(t, 1)
}, setTimeout(o, te))
}
function Z(t) {
var e, i, o, n, r = t.srcEvent.clientX,
s = t.srcEvent.clientY;
for (e = 0; e < this.lastTouches.length; e++)
if (i = this.lastTouches[e], o = Math.abs(r - i.x), n = Math.abs(s - i.y), o <= ee && n <=
ee) return !0;
return !1
}
function X(t, e) {
this.manager = t, this.set(e)
}
function J(t) {
var e, i;
return y(t, ae) ? ae : (e = y(t, le), i = y(t, ce), e && i ? ae : e || i ? e ? le : ce : y(t,
se) ? se : re)
}
function Q() {
var t, e;
return !!oe && (t = {}, e = n.CSS && n.CSS.supports, ["auto", "manipulation", "pan-y", "pan-x",
"pan-x pan-y", "none"
].forEach(function(i) {
t[i] = !e || n.CSS.supports("touch-action", i)
}), t)
}
function tt(t) {
this.options = ft({}, this.defaults, t || {}), this.id = x(), this.manager = null, this.options
.enable = f(this.options.enable, !0), this.state = ue, this.simultaneous = {}, this
.requireFail = []
}
function et(t) {
return t & me ? "cancel" : t & _e ? "end" : t & pe ? "move" : t & de ? "start" : ""
}
function it(t) {
return t == Rt ? "down" : t == Ot ? "up" : t == Dt ? "left" : t == Vt ? "right" : ""
}
function ot(t, e) {
var i = e.manager;
return i ? i.get(t) : t
}
function nt() {
tt.apply(this, arguments)
}
function rt() {
nt.apply(this, arguments), this.pX = null, this.pY = null
}
function st() {
nt.apply(this, arguments)
}
function at() {
tt.apply(this, arguments), this._timer = null, this._input = null
}
function lt() {
nt.apply(this, arguments)
}
function ct() {
nt.apply(this, arguments)
}
function ht() {
tt.apply(this, arguments), this.pTime = !1, this.pCenter = !1, this._timer = null, this._input =
null, this.count = 0
}
function ut(t, e) {
return e = e || {}, e.recognizers = f(e.recognizers, ut.defaults.preset), new dt(t, e)
}
function dt(t, e) {
this.options = ft({}, ut.defaults, e || {}), this.options.inputTarget = this.options
.inputTarget || t, this.handlers = {}, this.session = {}, this.recognizers = [], this
.oldCssProps = {}, this.element = t, this.input = I(this), this.touchAction = new X(this,
this.options.touchAction),
pt(this, !0), h(this.options.recognizers, function(t) {
var e = this.add(new t[0](t[1]));
t[2] && e.recognizeWith(t[2]), t[3] && e.requireFailure(t[3])
}, this)
}
function pt(t, e) {
var i, o = t.element;
o.style && (h(t.options.cssProps, function(n, r) {
i = C(o.style, r), e ? (t.oldCssProps[i] = o.style[i], o.style[i] = n) : o
.style[i] = t.oldCssProps[i] || ""
}), e || (t.oldCssProps = {}))
}
function _t(t, e) {
var i = r.createEvent("Event");
i.initEvent(t, !0, !0), i.gesture = e, e.target.dispatchEvent(i)
}
var ft, mt, gt, vt, yt, bt, St, wt, Tt, Ct, xt, Pt, Lt, It, kt, At, Mt, Et, Dt, Vt, Ot, Rt, Bt, zt,
Ft, Nt, Wt, $t, Ht, Ut, jt, qt, Gt, Yt, Kt, Zt, Xt, Jt, Qt, te, ee, ie, oe, ne, re, se, ae, le,
ce, he, ue, de, pe, _e, fe, me, ge, ve, ye, be, Se = ["", "webkit", "Moz", "MS", "ms", "o"],
we = r.createElement("div"),
Te = "function",
Ce = Math.round,
xe = Math.abs,
Pe = Date.now;
ft = "function" != typeof Object.assign ? function(t) {
var e, i, o, n;
if (t === a || null === t) throw new TypeError(
"Cannot convert undefined or null to object");
for (e = Object(t), i = 1; i < arguments.length; i++)
if ((o = arguments[i]) !== a && null !== o)
for (n in o) o.hasOwnProperty(n) && (e[n] = o[n]);
return e
} : Object.assign, mt = u(function(t, e, i) {
for (var o = Object.keys(e), n = 0; n < o.length;)(!i || i && t[o[n]] === a) && (t[o[
n]] = e[o[n]]), n++;
return t
}, "extend", "Use `assign`."), gt = u(function(t, e) {
return mt(t, e, !0)
}, "merge", "Use `assign`."), vt = 1, yt = /mobile|tablet|ip(ad|hone|od)|android/i, bt =
"ontouchstart" in n, St = C(n, "PointerEvent") !== a, wt = bt && yt.test(navigator.userAgent),
Tt = "touch", Ct = "pen", xt = "mouse", Pt = "kinect", Lt = 25, It = 1, kt = 2, At = 4, Mt = 8,
Et = 1, Dt = 2, Vt = 4, Ot = 8, Rt = 16, Bt = Dt | Vt, zt = Ot | Rt, Ft = Bt | zt, Nt = ["x",
"y"
], Wt = ["clientX", "clientY"], L.prototype = {
handler: function() {},
init: function() {
this.evEl && m(this.element, this.evEl, this.domHandler), this.evTarget && m(this
.target, this.evTarget, this.domHandler), this.evWin && m(P(this.element),
this.evWin, this.domHandler)
},
destroy: function() {
this.evEl && g(this.element, this.evEl, this.domHandler), this.evTarget && g(this
.target, this.evTarget, this.domHandler), this.evWin && g(P(this.element),
this.evWin, this.domHandler)
}
}, $t = {
mousedown: It,
mousemove: kt,
mouseup: At
}, Ht = "mousedown", Ut = "mousemove mouseup", d(W, L, {
handler: function(t) {
var e = $t[t.type];
e & It && 0 === t.button && (this.pressed = !0), e & kt && 1 !== t.which && (e =
At), this.pressed && (e & At && (this.pressed = !1), this.callback(this
.manager, e, {
pointers: [t],
changedPointers: [t],
pointerType: xt,
srcEvent: t
}))
}
}), jt = {
pointerdown: It,
pointermove: kt,
pointerup: At,
pointercancel: Mt,
pointerout: Mt
}, qt = {
2: Tt,
3: Ct,
4: xt,
5: Pt
}, Gt = "pointerdown", Yt = "pointermove pointerup pointercancel", n.MSPointerEvent && !n
.PointerEvent && (Gt = "MSPointerDown", Yt = "MSPointerMove MSPointerUp MSPointerCancel"), d($,
L, {
handler: function(t) {
var e = this.store,
i = !1,
o = t.type.toLowerCase().replace("ms", ""),
n = jt[o],
r = qt[t.pointerType] || t.pointerType,
s = r == Tt,
a = S(e, t.pointerId, "pointerId");
n & It && (0 === t.button || s) ? a < 0 && (e.push(t), a = e.length - 1) : n & (
At | Mt) && (i = !0), a < 0 || (e[a] = t, this.callback(this.manager,
n, {
pointers: e,
changedPointers: [t],
pointerType: r,
srcEvent: t
}), i && e.splice(a, 1))
}
}), Kt = {
touchstart: It,
touchmove: kt,
touchend: At,
touchcancel: Mt
}, Zt = "touchstart", Xt = "touchstart touchmove touchend touchcancel", d(H, L, {
handler: function(t) {
var e, i = Kt[t.type];
i === It && (this.started = !0), this.started && (e = U.call(this, t, i), i & (
At | Mt) && e[0].length - e[1].length == 0 && (this.started = !1),
this.callback(this.manager, i, {
pointers: e[0],
changedPointers: e[1],
pointerType: Tt,
srcEvent: t
}))
}
}), Jt = {
touchstart: It,
touchmove: kt,
touchend: At,
touchcancel: Mt
}, Qt = "touchstart touchmove touchend touchcancel", d(j, L, {
handler: function(t) {
var e = Jt[t.type],
i = q.call(this, t, e);
i && this.callback(this.manager, e, {
pointers: i[0],
changedPointers: i[1],
pointerType: Tt,
srcEvent: t
})
}
}), te = 2500, ee = 25, d(G, L, {
handler: function(t, e, i) {
var o = i.pointerType == Tt,
n = i.pointerType == xt;
if (!(n && i.sourceCapabilities && i.sourceCapabilities.firesTouchEvents)) {
if (o) Y.call(this, e, i);
else if (n && Z.call(this, i)) return;
this.callback(t, e, i)
}
},
destroy: function() {
this.touch.destroy(), this.mouse.destroy()
}
}), ie = C(we.style, "touchAction"), oe = ie !== a, ne = "compute", re = "auto", se =
"manipulation", ae = "none", le = "pan-x", ce = "pan-y", he = Q(), X.prototype = {
set: function(t) {
t == ne && (t = this.compute()), oe && this.manager.element.style && he[t] && (this
.manager.element.style[ie] = t), this.actions = t.toLowerCase().trim()
},
update: function() {
this.set(this.manager.options.touchAction)
},
compute: function() {
var t = [];
return h(this.manager.recognizers, function(e) {
_(e.options.enable, [e]) && (t = t.concat(e.getTouchAction()))
}), J(t.join(" "))
},
preventDefaults: function(t) {
var e, i, o, n, r, s, l, c = t.srcEvent,
h = t.offsetDirection;
return this.manager.session.prevented ? void c.preventDefault() : (e = this.actions,
i = y(e, ae) && !he[ae], o = y(e, ce) && !he[ce], n = y(e, le) && !he[le],
i && (r = 1 === t.pointers.length, s = t.distance < 2, l = t.deltaTime <
250, r && s && l) || n && o ? a : i || o && h & Bt || n && h & zt ? this
.preventSrc(c) : a)
},
preventSrc: function(t) {
this.manager.session.prevented = !0, t.preventDefault()
}
}, ue = 1, de = 2, pe = 4, _e = 8, fe = _e, me = 16, ge = 32, tt.prototype = {
defaults: {},
set: function(t) {
return ft(this.options, t), this.manager && this.manager.touchAction.update(), this
},
recognizeWith: function(t) {
if (c(t, "recognizeWith", this)) return this;
var e = this.simultaneous;
return t = ot(t, this), e[t.id] || (e[t.id] = t, t.recognizeWith(this)), this
},
dropRecognizeWith: function(t) {
return c(t, "dropRecognizeWith", this) ? this : (t = ot(t, this), delete this
.simultaneous[t.id], this)
},
requireFailure: function(t) {
if (c(t, "requireFailure", this)) return this;
var e = this.requireFail;
return t = ot(t, this), -1 === S(e, t) && (e.push(t), t.requireFailure(this)), this
},
dropRequireFailure: function(t) {
if (c(t, "dropRequireFailure", this)) return this;
t = ot(t, this);
var e = S(this.requireFail, t);
return e > -1 && this.requireFail.splice(e, 1), this
},
hasRequireFailures: function() {
return this.requireFail.length > 0
},
canRecognizeWith: function(t) {
return !!this.simultaneous[t.id]
},
emit: function(t) {
function e(e) {
i.manager.emit(e, t)
}
var i = this,
o = this.state;
o < _e && e(i.options.event + et(o)), e(i.options.event), t.additionalEvent && e(t
.additionalEvent), o >= _e && e(i.options.event + et(o))
},
tryEmit: function(t) {
if (this.canEmit()) return this.emit(t);
this.state = ge
},
canEmit: function() {
for (var t = 0; t < this.requireFail.length;) {
if (!(this.requireFail[t].state & (ge | ue))) return !1;
t++
}
return !0
},
recognize: function(t) {
var e = ft({}, t);
if (!_(this.options.enable, [this, e])) return this.reset(), void(this.state = ge);
this.state & (fe | me | ge) && (this.state = ue), this.state = this.process(e), this
.state & (de | pe | _e | me) && this.tryEmit(e)
},
process: function(t) {},
getTouchAction: function() {},
reset: function() {}
}, d(nt, tt, {
defaults: {
pointers: 1
},
attrTest: function(t) {
var e = this.options.pointers;
return 0 === e || t.pointers.length === e
},
process: function(t) {
var e = this.state,
i = t.eventType,
o = e & (de | pe),
n = this.attrTest(t);
return o && (i & Mt || !n) ? e | me : o || n ? i & At ? e | _e : e & de ? e |
pe : de : ge
}
}), d(rt, nt, {
defaults: {
event: "pan",
threshold: 10,
pointers: 1,
direction: Ft
},
getTouchAction: function() {
var t = this.options.direction,
e = [];
return t & Bt && e.push(ce), t & zt && e.push(le), e
},
directionTest: function(t) {
var e = this.options,
i = !0,
o = t.distance,
n = t.direction,
r = t.deltaX,
s = t.deltaY;
return n & e.direction || (e.direction & Bt ? (n = 0 === r ? Et : r < 0 ? Dt :
Vt, i = r != this.pX, o = Math.abs(t.deltaX)) : (n = 0 === s ? Et :
s < 0 ? Ot : Rt, i = s != this.pY, o = Math.abs(t.deltaY))), t
.direction = n, i && o > e.threshold && n & e.direction
},
attrTest: function(t) {
return nt.prototype.attrTest.call(this, t) && (this.state & de || !(this.state &
de) && this.directionTest(t))
},
emit: function(t) {
this.pX = t.deltaX, this.pY = t.deltaY;
var e = it(t.direction);
e && (t.additionalEvent = this.options.event + e), this._super.emit.call(this,
t)
}
}), d(st, nt, {
defaults: {
event: "pinch",
threshold: 0,
pointers: 2
},
getTouchAction: function() {
return [ae]
},
attrTest: function(t) {
return this._super.attrTest.call(this, t) && (Math.abs(t.scale - 1) > this
.options.threshold || this.state & de)
},
emit: function(t) {
if (1 !== t.scale) {
var e = t.scale < 1 ? "in" : "out";
t.additionalEvent = this.options.event + e
}
this._super.emit.call(this, t)
}
}), d(at, tt, {
defaults: {
event: "press",
pointers: 1,
time: 251,
threshold: 9
},
getTouchAction: function() {
return [re]
},
process: function(t) {
var e = this.options,
i = t.pointers.length === e.pointers,
o = t.distance < e.threshold,
n = t.deltaTime > e.time;
if (this._input = t, !o || !i || t.eventType & (At | Mt) && !n) this.reset();
else if (t.eventType & It) this.reset(), this._timer = l(function() {
this.state = fe, this.tryEmit()
}, e.time, this);
else if (t.eventType & At) return fe;
return ge
},
reset: function() {
clearTimeout(this._timer)
},
emit: function(t) {
this.state === fe && (t && t.eventType & At ? this.manager.emit(this.options
.event + "up", t) : (this._input.timeStamp = Pe(), this.manager
.emit(this.options.event, this._input)))
}
}), d(lt, nt, {
defaults: {
event: "rotate",
threshold: 0,
pointers: 2
},
getTouchAction: function() {
return [ae]
},
attrTest: function(t) {
return this._super.attrTest.call(this, t) && (Math.abs(t.rotation) > this
.options.threshold || this.state & de)
}
}), d(ct, nt, {
defaults: {
event: "swipe",
threshold: 10,
velocity: .3,
direction: Bt | zt,
pointers: 1
},
getTouchAction: function() {
return rt.prototype.getTouchAction.call(this)
},
attrTest: function(t) {
var e, i = this.options.direction;
return i & (Bt | zt) ? e = t.overallVelocity : i & Bt ? e = t.overallVelocityX :
i & zt && (e = t.overallVelocityY), this._super.attrTest.call(this, t) &&
i & t.offsetDirection && t.distance > this.options.threshold && t
.maxPointers == this.options.pointers && xe(e) > this.options.velocity && t
.eventType & At
},
emit: function(t) {
var e = it(t.offsetDirection);
e && this.manager.emit(this.options.event + e, t),
this.manager.emit(this.options.event, t)
}
}), d(ht, tt, {
defaults: {
event: "tap",
pointers: 1,
taps: 1,
interval: 300,
time: 250,
threshold: 9,
posThreshold: 10
},
getTouchAction: function() {
return [se]
},
process: function(t) {
var e, i, o = this.options,
n = t.pointers.length === o.pointers,
r = t.distance < o.threshold,
s = t.deltaTime < o.time;
if (this.reset(), t.eventType & It && 0 === this.count) return this
.failTimeout();
if (r && s && n) {
if (t.eventType != At) return this.failTimeout();
if (e = !this.pTime || t.timeStamp - this.pTime < o.interval, i = !this
.pCenter || B(this.pCenter, t.center) < o.posThreshold, this.pTime = t
.timeStamp, this.pCenter = t.center, i && e ? this.count += 1 : this
.count = 1, this._input = t, 0 === this.count % o.taps) return this
.hasRequireFailures() ? (this._timer = l(function() {
this.state = fe, this.tryEmit()
}, o.interval, this), de) : fe
}
return ge
},
failTimeout: function() {
return this._timer = l(function() {
this.state = ge
}, this.options.interval, this), ge
},
reset: function() {
clearTimeout(this._timer)
},
emit: function() {
this.state == fe && (this._input.tapCount = this.count, this.manager.emit(this
.options.event, this._input))
}
}), ut.VERSION = "2.0.7", ut.defaults = {
domEvents: !1,
touchAction: ne,
enable: !0,
inputTarget: null,
inputClass: null,
preset: [
[lt, {
enable: !1
}],
[st, {
enable: !1
},
["rotate"]
],
[ct, {
direction: Bt
}],
[rt, {
direction: Bt
},
["swipe"]
],
[ht],
[ht, {
event: "doubletap",
taps: 2
},
["tap"]
],
[at]
],
cssProps: {
userSelect: "none",
touchSelect: "none",
touchCallout: "none",
contentZooming: "none",
userDrag: "none",
tapHighlightColor: "rgba(0,0,0,0)"
}
}, ve = 1, ye = 2, dt.prototype = {
set: function(t) {
return ft(this.options, t), t.touchAction && this.touchAction.update(), t
.inputTarget && (this.input.destroy(), this.input.target = t.inputTarget, this
.input.init()), this
},
stop: function(t) {
this.session.stopped = t ? ye : ve
},
recognize: function(t) {
var e, i, o, n, r = this.session;
if (!r.stopped)
for (this.touchAction.preventDefaults(t), i = this.recognizers, o = r
.curRecognizer, (!o || o && o.state & fe) && (o = r.curRecognizer = null),
n = 0; n < i.length;) e = i[n], r.stopped === ye || o && e != o && !e
.canRecognizeWith(o) ? e.reset() : e.recognize(t), !o && e.state & (de |
pe | _e) && (o = r.curRecognizer = e), n++
},
get: function(t) {
var e, i;
if (t instanceof tt) return t;
for (e = this.recognizers, i = 0; i < e.length; i++)
if (e[i].options.event == t) return e[i];
return null
},
add: function(t) {
if (c(t, "add", this)) return this;
var e = this.get(t.options.event);
return e && this.remove(e), this.recognizers.push(t), t.manager = this, this
.touchAction.update(), t
},
remove: function(t) {
var e, i;
return c(t, "remove", this) ? this : (t = this.get(t), t && (e = this.recognizers, -
1 !== (i = S(e, t)) && (e.splice(i, 1), this.touchAction.update())),
this)
},
on: function(t, e) {
if (t !== a && e !== a) {
var i = this.handlers;
return h(b(t), function(t) {
i[t] = i[t] || [], i[t].push(e)
}), this
}
},
off: function(t, e) {
if (t !== a) {
var i = this.handlers;
return h(b(t), function(t) {
e ? i[t] && i[t].splice(S(i[t], e), 1) : delete i[t]
}), this
}
},
emit: function(t, e) {
var i, o;
if (this.options.domEvents && _t(t, e), (i = this.handlers[t] && this.handlers[t]
.slice()) && i.length)
for (e.type = t, e.preventDefault = function() {
e.srcEvent.preventDefault()
}, o = 0; o < i.length;) i[o](e), o++
},
destroy: function() {
this.element && pt(this, !1), this.handlers = {}, this.session = {}, this.input
.destroy(),
this.element = null
}
}, ft(ut, {
INPUT_START: It,
INPUT_MOVE: kt,
INPUT_END: At,
INPUT_CANCEL: Mt,
STATE_POSSIBLE: ue,
STATE_BEGAN: de,
STATE_CHANGED: pe,
STATE_ENDED: _e,
STATE_RECOGNIZED: fe,
STATE_CANCELLED: me,
STATE_FAILED: ge,
DIRECTION_NONE: Et,
DIRECTION_LEFT: Dt,
DIRECTION_RIGHT: Vt,
DIRECTION_UP: Ot,
DIRECTION_DOWN: Rt,
DIRECTION_HORIZONTAL: Bt,
DIRECTION_VERTICAL: zt,
DIRECTION_ALL: Ft,
Manager: dt,
Input: L,
TouchAction: X,
TouchInput: j,
MouseInput: W,
PointerEventInput: $,
TouchMouseInput: G,
SingleTouchInput: H,
Recognizer: tt,
AttrRecognizer: nt,
Tap: ht,
Pan: rt,
Swipe: ct,
Pinch: st,
Rotate: lt,
Press: at,
on: m,
off: g,
each: h,
merge: gt,
extend: mt,
assign: ft,
inherit: d,
bindFn: p,
prefixed: C
}), be = a !== n ? n : "undefined" != typeof self ? self : {}, be.Hammer = ut, (o = function() {
return ut
}.call(e, i, e, t)) !== a && (t.exports = o)
}(window, document)
}, function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="-2.4 120.9 14 14" width="14" height="14" enable-background="new -2.4 120.9 600 600"><path d="M-2.4 120.9v14h14v-14zm3.34 2.123l3.66 3.66 3.66-3.66 1.217 1.22-3.66 3.658 3.66 3.66-1.22 1.22-3.658-3.66-3.66 3.66-1.22-1.22 3.66-3.66-3.66-3.66z"/></svg>'
}, function(t, e, i) {
"use strict";
function o(t) {
var e, i = [],
n = t.m_items;
for (e = 0; e < n.length; e++) n[e]._menu && (i.push(n[e]._menu), i = i.concat(o(n[e]._menu)));
return i
}
function n(t, e, i) {
var o, n;
this.options = {}, this._parentMenuItem = i, $.extend(this.options, e), this.options.class && (this
.options.attributes.class = this.options.class), this.jqMenu = null, this.m_wrapper = null,
this.m_items = [];
for (o in t) n = t[o], this.addItem(n)
}
var r = i(354),
s = i(52).ActionPlaceholder,
a = i(928),
l = a.Item,
c = a.ItemPlaceholder,
h = i(929),
u = i(231);
n.prototype.addItem = function(t) {
var e;
return e = t instanceof s ? new c(t, this) : new l(t, this), this.m_items.push(e), e
}, n.renderItem = function(t, e) {
t.append(e.render(t))
}, n.prototype.closeOtherSubmenus = function(t) {
for (var e = 0; e < this.m_items.length; ++e) this.m_items[e].highlight(!1), this.m_items[e]
._menu && (this.m_items[e]._menu.destroy(), this.m_items[e]._menu = null)
}, n.prototype.isShown = function() {
return null !== this.jqMenu
}, n.prototype.render = function() {
var t, e, i, o = this.getAttributes();
if (this._parentMenuItem) {
t = $("<table>"), this.jqMenu = t, t.attr("cellspacing", "0"), t.attr("cellpadding", "0"), t
.addClass("context-menu"), t.addClass("submenu");
for (e in this.m_items) i = this.m_items[e], n.renderItem(t, i)
} else {
t = u.create(r.MENU_TAG, o), this.jqMenu = t;
for (e in this.m_items) i = this.m_items[e], n.renderItem(t, i)
}
return this.jqMenu
}, n.prototype.getAttributes = function() {
var t = {},
e = ["context-menu"];
return this.options.attributes && this.options.attributes.class && e.push(this.options
.attributes.class), t.cellspacing = 0, t.cellpadding = 0, t.class = e.join(), t
}, n.prototype.deploy = function(t, e) {
var i = this.wrapper();
return this.jqMenu = i.append(this.render()), e ? ($(e).data("submenu", this.jqMenu), $(document
.body).append(this.jqMenu), this.jqMenu.data("parent-menu", e), this.jqMenu.data(
"parent-item", t.currentTarget)) : $(document.body).append(this.jqMenu), h
.unbindContextMenu(this.jqMenu), this._setCoords(t), this.jqMenu
}, n.prototype.show = function(t, e) {
this.deploy(t, e).show()
}, n.prototype.hide = function() {
this.isShown() && this.destroy()
}, n.prototype.destroy = function() {
$.each(this.m_items, function(t, e) {
e._menu && e._menu.destroy()
}), this.jqMenu && (this.jqMenu.remove(), this.jqMenu = null), this.m_wrapper.empty()
}, n.prototype._setCoords = function(t) {
var e, i, o, n, r, s, a, l = 5,
c = this.jqMenu,
h = $(this.jqMenu.data("parent-item")),
u = {
width: $(window).width(),
height: Math.min($(window).height(), $("body").height())
},
d = {
top: $(document).scrollTop(),
left: $(document).scrollLeft()
};
for (this.jqMenu.css({
maxWidth: u.width - 2 * l,
maxHeight: u.height - 2 * l
}), e = {
width: c.outerWidth(),
height: c.outerHeight()
}, h.size() ? (o = h.offset(), i = {
top: o.top - 1,
left: o.left + h.outerWidth()
}) : i = {
top: t.pageY,
left: t.pageX
}, this.jqMenu.offset(i), n = !1, r = {}, r.top = Math.min(i.top, u.height + d.top - e
.height - l), i.left + e.width + l > u.width + d.left || this.options.reverse ? (n = !0,
r.left = i.left - e.width) : r.left = i.left, s = t.target; s && s !== document; s = s
.parentNode)
if ("fixed" === $(s).css("position")) {
this.jqMenu.css("position", "fixed");
break
} this.jqMenu.offset(r), n && (a = e.width - this.jqMenu.outerWidth()) && (r.left += a, this
.jqMenu.offset(r))
}, n.prototype._wrapper = function() {
var t = this,
e = r.WRAPPER_ATTRIBUTES;
return this._parentMenuItem ? this.m_wrapper = u.create(r.WRAPPER_TAG, e) : (this.m_wrapper = h
.createPopup(e, void 0, {
mouseDownOutsideEvent: function(e) {
var i = $();
$.each(o(t), function() {
i = i.add(this.m_wrapper)
}), $(e.target).parents().andSelf().is(i) || t.hide()
}
}), this.m_wrapper.addClass("topmenu")), this.m_wrapper
}, n.prototype.wrapper = function(t) {
return this.m_wrapper || this._wrapper()
}, t.exports = n
}, function(t, e, i) {
"use strict";
t.exports = {
INSERT_AT_END: 0,
INSERT_AT_START: 1,
INSERT_AT_POS: 2,
WRAPPER_TAG: "div",
WRAPPER_ATTRIBUTES: {
class: "context-menu-wrapper"
},
MENU_TAG: "table",
ITEM_ROW_TAG: "tr",
ICON_CELL_TAG: "td",
TEXT_CELL_TAG: "td",
RIGHT_CELL_TAG: "td",
SUBMENU_CELL_TAG: "td"
}
}, function(t, e, i) {
"use strict";
function o(t) {
return "number" != typeof t && (t = TradingView.STUDY_COUNT_LIMIT), (0, n.createNoticeDialog)({
title: $.t("Warning"),
content: $.t(
"Studies limit exceeded: {0} studies per layout.<br>\nPlease, remove some studies."
).format(t)
})
}
Object.defineProperty(e, "__esModule", {
value: !0
}), e.createTooManyStudiesNotice = o;
var n = i(145)
}, function(t, e, i) {
"use strict";
var o, n, r, s, a;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(72), n = i(10), r = i(7), s = r.getLogger("Common.UndoStack"), a = function() {
function t() {
this._commands = [], this._onChange = new n
}
return t.prototype.onChange = function() {
return this._onChange
}, t.prototype.isEmpty = function() {
return 0 === this._commands.length
}, t.prototype.clear = function() {
this._commands.length = 0, this._onChange.fire()
}, t.prototype.push = function(t) {
if (!(t instanceof o.UndoCommand)) throw new TypeError(
"argument must be an instance of UndoCommand");
this._commands.push(t), this._onChange.fire()
}, t.prototype.pop = function() {
if (this.isEmpty()) return void s.logDebug("pop: undo stack is empty");
var t = this._commands.pop();
return this._onChange.fire(), t
}, t.prototype.head = function() {
if (!this.isEmpty()) return this._commands[this._commands.length - 1]
}, t
}(), e.UndoStack = a
}, function(t, e, i) {
"use strict";
var o, n, r, s, a;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(72), r = function(t) {
function e(e, i, o) {
var n = t.call(this, o) || this;
return n._chartModel = e, n._defaultProperty = i, n._state = i.state(), n
}
return o.__extends(e, t), e.prototype.undo = function() {
this._defaultProperty.merge(this._state), this._defaultProperty.listeners().fire(this
._defaultProperty), this._chartModel.mainSeries().onChartStyleChanged()
}, e
}(n.UndoCommand), e.RestoreDefaultsUndoCommand = r, s = function(t) {
function e(e, i, o) {
return void 0 === o && (o = "Restore User Defaults"), t.call(this, e, i, o) || this
}
return o.__extends(e, t), e.prototype.redo = function() {
this._chartModel.restoreDefaults(this._defaultProperty)
}, e
}(r), e.RestoreUserDefaultsUndoCommand = s, a = function(t) {
function e(e, i, o) {
return void 0 === o && (o = "Restore Defaults"), t.call(this, e, i, o) || this
}
return o.__extends(e, t), e.prototype.redo = function() {
this._chartModel.restoreFactoryDefaults(this._defaultProperty)
}, e
}(r), e.RestoreFactoryDefaultsUndoCommand = a
}, function(t, e, i) {
"use strict";
function o(t) {
i.e(4).then(function(e) {
i(413).showGoToDateDialog(t)
}.bind(null, i)).catch(i.oe)
}
Object.defineProperty(e, "__esModule", {
value: !0
}), e.showGoToDateDialog = o
}, function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="-90 -55 140 140" width="16" height="16"><path d="M10 12l-40.3-42.5-10 10.6 29.7 31.2L-41 43.4l10.7 11.3L10 12.2l-.1-.1z"/></svg>'
}, function(t, e, i) {
"use strict";
function o(t, e) {
if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
}
var n, r, s, a, l;
Object.defineProperty(e, "__esModule", {
value: !0
}), e.AddCompareDialog = void 0, n = function() {
function t(t, e) {
var i, o;
for (i = 0; i < e.length; i++) o = e[i], o.enumerable = o.enumerable || !1, o
.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key,
o)
}
return function(e, i, o) {
return i && t(e.prototype, i), o && t(e, o), e
}
}(), r = i(951), s = i(953), a = i(415), i(959), l = null, e.AddCompareDialog = function() {
function t(e) {
o(this, t), this._chartWidgetCollection = e, this._$symbolSearchPopup = null, this._dialog =
null, this._compareTab = new r.CompareTab(this._chartWidgetCollection, this), this
._addSymbolTab = new s.AddSymbolTab(this._chartWidgetCollection, this)
}
return n(t, [{
key: "show",
value: function() {
var t, e = this,
i = [];
return i.push({
name: $.t("Compare"),
page: this._compareTab.$tab.addClass(
"tv-compare-dialog__tab-page")
}), i.push({
name: $.t("Add Symbol", {
context: "compare_or_add_symbol_dialog"
}),
page: this._addSymbolTab.$tab.addClass(
"tv-compare-dialog__tab-page")
}), t = (0, a.createTabbedDialog)({
tabs: i,
width: 400,
tabStateSaveKey: "CompareAddDialog.tab",
destroyOnClose: !0,
withScroll: !1,
addClass: "tv-compare-dialog",
tabsScrollBoxAddClass: "tv-compare-dialog__scroll-box",
tabAddClass: "tv-compare-dialog__tab",
isClickOutFn: function(t) {
if (e._compareTab.isClickOnTab(t) || e._addSymbolTab
.isClickOnTab(t)) return !1
}
}), l && l.close(), this._dialog = t.dialog, this._dialog.open(),
l = this._dialog, this._dialog
}
}, {
key: "getZIndex",
value: function() {
return this._dialog.zIndex
}
}]), t
}()
}, function(t, e) {}, function(t, e, i) {
"use strict";
var o, n, r, s;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(7), n = i(61),
r = o.getLogger("GUI.Blocks.AbstractIndicator"), i(144), s = function() {
function t() {
this._classSuffix = "", this._quoteSessionPrefix = "abstract-indicator", this._shortMode = !
1, this._showTooltip = !0, this._subscribed = !1
}
return t.prototype.getValue = function() {
return this._value
}, t.prototype.getTooltipText = function() {
return this.getLabel()
}, t.prototype.getLabel = function() {
return this._labelMap[this._value] || ""
}, t.prototype.getElement = function() {
return this._el
}, t.prototype.update = function(t, e) {
this._updateValue(t, e), this._render()
}, t.prototype.setTooltipEnabled = function(t) {
void 0 === t && (t = !1), this._showTooltip !== t && (this._showTooltip = t, this
._renderTooltip())
}, t.prototype.enableShortMode = function() {
!0 !== this._shortMode && (this._shortMode = !0, this._render())
}, t.prototype.disableShortMode = function() {
!1 !== this._shortMode && (this._shortMode = !1, this._render())
}, t.prototype.isShortModeEnabled = function() {
return this._shortMode
}, t.prototype.start = function() {
!this._subscribed && t._quoteSession && this._symbolName && (t._quoteSession.subscribe(
this._getQuoteSessionId(), this._symbolName, this.update.bind(this)), this
._subscribed = !0)
}, t.prototype.stop = function() {
this._subscribed && t._quoteSession && this._symbolName && (t._quoteSession.unsubscribe(
this._getQuoteSessionId(), this._symbolName), this._subscribed = !1)
}, t.assignQuoteSession = function(e) {
t._quoteSession = e
}, t.prototype._init = function(e) {
this._el = e.el ? e.el : document.createElement("span"), this._el.innerHTML = "", this
._classMap = e.classMap, this._labelMap = e.labelMap, this._showTooltip = e
.showTooltip, this._classSuffix = e.classSuffix, this._symbolName = e.symbol, this
._quoteSessionGUID = n.guid(), !0 === e.short && this.enableShortMode(), e.data &&
this._updateValue(e.data), e.quoteSession && t.assignQuoteSession(e.quoteSession)
}, t.prototype._clearClasses = function() {
var t = this;
Object.values(this._classMap).map(function(e) {
t._el.classList.remove("" + e), t._el.classList.remove("" + e + t
._classSuffix)
})
}, t.prototype._render = function() {
this._renderClasses(), this._renderTooltip(), this._renderLabel()
}, t.prototype._renderLabel = function() {
this._el.textContent = this.getLabel()
}, t.prototype._updateValue = function(t, e) {
var i = this._getValueFromData(t);
(e || i !== this._value) && (this._value = i)
}, t.prototype._renderClasses = function() {
var t, e, i, o = this._el.classList;
o.add(this._componentClass, this._componentClass + this._classSuffix), t = this
._classMap[this._value];
for (e in this._classMap)(i = this._classMap[e]) && (i === t ? o.add(i, i + this
._classSuffix) : o.remove(i, i + this._classSuffix));
!t && this._value && r.logWarn("no className for status " + this._value)
}, t.prototype._renderTooltip = function() {
this._el.setAttribute("title", this._showTooltip ? this.getTooltipText() : ""), this._el
.classList.toggle("apply-common-tooltip", this._showTooltip)
}, t.prototype._getQuoteSessionId = function() {
return this._quoteSessionPrefix + "." + this._quoteSessionGUID
}, t
}(), e.AbstractIndicator = s, window.AbstractIndicator = s
}, function(t, e, i) {
"use strict";
function o(t, e) {
if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
}
function n(t, e) {
var i = new Date(t + e),
o = Math.round(Math.abs(e) / 6e4),
n = "UTC";
return 0 !== o && (n += e > 0 ? "+" : "-", n += Math.floor(o / 60), o % 60 && (n += ":" + o % 60)),
i.getUTCFullYear() + "-" + ("0" + (i.getUTCMonth() + 1)).slice(-2) + "-" + ("0" + i
.getUTCDate()).slice(-2) + " " + ("0" + i.getUTCHours()).slice(-2) + ":" + ("0" + i
.getUTCMinutes()).slice(-2) + " (" + n + ")"
}
function r(t) {
return "string" == typeof t && 0 !== t.trim().length
}
function s(t) {
var e, i, o, n, s;
if (!t || 0 === t.length) return !0;
for (e = 0; e < t.length; e++) {
if (r(t[e]) || t[e].id || r(t[e].title)) return !1;
if (t[e].lines)
for (i = t[e].lines, o = i.length, n = 0; n < o; n++)
if (s = i[n], r(s) || r(s.line)) return !1
}
return !0
}
function a(t, e) {
var i = arguments.length > 2 && void 0 !== arguments[2] && arguments[2];
return t.hasOwnProperty("text") ? t.hasOwnProperty("color") && i ? e.append($("<span>", {
style: "color: " + t.color
}).text(t.text)) : e.text(t.text) : e.text(t)
}
function l(t, e) {
if (Array.isArray(t) && 2 === t.length) $("<dl>").append(a(t[0], $("<dt>")), a(t[1], $("<dd>"), !0))
.appendTo(e);
else if (t.hasOwnProperty("br") && t.br) $("<br>").appendTo(e);
else {
var i = $("<dl>").append(a(t, $("<dt>"))).appendTo(e);
t.hasOwnProperty("listItem") && i.addClass("list-item")
}
}
function c(t, e) {
$("<a>").attr("href", t.href).text(t.text).addClass(t.class).appendTo(e)
}
function h(t, e) {
var i, o = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : "";
if ("string" == typeof t) $("<h2>").text(t).appendTo(e);
else if (t.hasOwnProperty("lines"))
for (i = 0; i < t.lines.length; i++) t.lines[i].hasOwnProperty("line") ? 0 === i ? t.lines[i]
.line.isEmpty || $("<h2>").text(t.lines[i].line).appendTo(e) : l(t.lines[i].line, e) : t
.lines[i].hasOwnProperty("link") && c(t.lines[i].link, e);
else t.hasOwnProperty("title") && $("<h2>").text(t.title).appendTo(e), t.hasOwnProperty("actual") &&
$("<dl>").append($("<dt>").text($.t("Actual") + ": "), $("<dd>").text(t.actual || "—"))
.appendTo(e), t.hasOwnProperty("forecast") && $("<dl>").append($("<dt>").text($.t("Forecast") +
": "), $("<dd>").text(t.forecast || "—")).appendTo(e), t.hasOwnProperty("previous") && $(
"<dl>").append($("<dt>").text($.t("Previous") + ": "), $("<dd>").text(t.previous || "—"))
.appendTo(e), t.hasOwnProperty("timestamp") && $("<dl>").append($("<dt>").text($.t("Date") +
": "), $("<dd>").text(n(t.timestamp, o) || "—")).appendTo(e)
}
var u;
Object.defineProperty(e, "__esModule", {
value: !0
}), e.Tooltip = void 0, u = function() {
function t(t, e) {
var i, o;
for (i = 0; i < e.length; i++) o = e[i], o.enumerable = o.enumerable || !1, o
.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key,
o)
}
return function(e, i, o) {
return i && t(e.prototype, i), o && t(e, o), e
}
}(), i(972), e.Tooltip = function() {
function t() {
var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
i = e.direction,
n = void 0 === i ? "top" : i,
r = e.clickable,
s = void 0 !== r && r,
a = e.wide,
l = void 0 !== a && a;
o(this, t), this._direction = n, this._tooltipShown = !1, this._tooltipX = void 0, this
._tooltipY = void 0, this._tooltipItems = null, this._width = l ? 250 : 200, this
._$tooltip = $("<div>").addClass("tv-chart-events-source__tooltip").css({
position: "absolute",
width: this._width + "px"
}), this._$tooltipContent = $("<div>").addClass(
"tv-chart-events-source__tooltip__content").appendTo(this._$tooltip),
s && this._$tooltip.addClass("tv-chart-events-source__tooltip--clickable")
}
return u(t, [{
key: "show",
value: function() {
var t, e, i, o, n, r, a, l, c, u, d, p, _, f, m, g, v, y, b, S =
arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
w = S.items,
T = void 0 === w ? [] : w,
C = S.x,
x = void 0 === C ? 0 : C,
P = S.y,
L = void 0 === P ? 0 : P,
I = S.wrapElement,
k = void 0 === I ? null : I,
A = S.timeOffset,
M = void 0 === A ? "" : A,
E = S.leftBorderColor,
D = void 0 === E ? null : E;
if (k && !s(T)) {
if (t = $(k).width(), e = $(k).height(), i = !1, o = !1, this
._tooltipShown || (this._$tooltip.appendTo(k), this
._tooltipShown = !0, i = !0, o = !0), x === this
._tooltipX && L === this._tooltipY || (i = !0), i && (n = Math
.max(Math.min(x - this._width / 2, t - this._width - 10),
0), this._$tooltip.css({
left: Math.round(n),
bottom: Math.round(e - L + 10)
})), this._tooltipItems || (o = !0), !o)
for (r = T.length; r--;)
if (this._tooltipItems[r] !== T[r]) {
o = !0;
break
} if (o) {
if (a = void 0, T.length <= 1) a = T;
else {
for (l = {}, c = T.length; c--;) u = T[c].importance,
null == u && (u = -1), l[u] || (l[u] = []), l[u].push(T[
c]);
if (d = Object.keys(l).sort(function(t, e) {
return t - e
}), d.length <= 1) a = l[d[0]];
else
for (a = [], p = d.length; p--;)
for (_ = l[d[p]], f = _.length; f--;) a.push(_[f])
}
for (this._$tooltipContent.empty(), m = a.length; m--;) g = a[
m], v = "", g.hasOwnProperty("importance") ? (
"string" ==
typeof g.importance && ("earnings" === g.importance ?
v = "--importance-earnings" : "splits" === g
.importance ? v = "--importance-splits" :
"dividends" === g.importance ? v =
"--importance-dividends" : "list" === g
.importance && (v = "--importance-list")), 0 === g
.importance ? v = "--importance-normal" : g.importance >
0 && (v = "--importance-high")) : D || (v =
"--importance-none"), y =
"tv-chart-events-source__tooltip__item", v && (y += " " +
y + v), b = $("<div>").attr("class", y), D && b.css(
"border-left-color", D), h(g, b, M), b.appendTo(this
._$tooltipContent);
this._tooltipItems = T
}
"bottom" === this._direction && this._$tooltip.css({
bottom: Math.round(e - L - this._$tooltipContent
.height() + 10)
})
}
}
}, {
key: "hide",
value: function() {
this._tooltipShown && (this._$tooltip.detach(), this._tooltipShown = !1)
}
}, {
key: "isOpened",
value: function() {
return this._tooltipShown
}
}]), t
}()
}, function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c, h, u, d;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(13), i(43), n = i(351), r = i(31), s = i(24), a = i(10), l = i(17), c = i(134), h = i(
416), u = '<div class="tv-floating-toolbar i-closed i-hidden">' + (Modernizr.touch ?
'<div class="tv-floating-toolbar__drag-ext js-drag"></div>' : "") +
'<div class="tv-floating-toolbar__widget-wrapper"><div class="tv-floating-toolbar__drag js-drag">' +
h + '</div><div class="tv-floating-toolbar__content js-content"></div></div></div>', i(974), d =
function() {
function t(e) {
this._widget = document.createElement("div"), this._isVertical = !1, this
._hiddingTimeoutId = null, this._visibility = new l(!1), this._windowResizeListener =
this._onWindowResize.bind(this), this._reorderedDelegate = new a, t._toolbars.push(
this), this._options = e, this._widget = o(u).get(0), this._content = this._widget
.getElementsByClassName("js-content").item(0), this._setZIndex(t._startZIndex + t
._toolbars.length - 1), this._options.addClass && (this._widget.className += " " +
this._options.addClass),
this._options.layout && "auto" !== this._options.layout && (this._isVertical =
"vertical" === this._options.layout, this._updateLayoutType())
}
return t.prototype.destroy = function() {
this.hide(!0), t._toolbars.splice(t._toolbars.indexOf(this), 1), document.body.contains(
this._widget) && document.body.removeChild(this._widget), this._widget
.innerHTML = ""
}, t.prototype.isVisible = function() {
return this._visibility.value()
}, t.prototype.visibility = function() {
return this._visibility.readonly()
}, t.prototype.isVertical = function() {
return this._isVertical
}, t.prototype.show = function() {
var t = this;
this.isVisible() || (document.body.contains(this._widget) || (this._init(), document
.body.appendChild(this._widget)), this._setHiddingTimeout(null), window
.addEventListener("resize", this._windowResizeListener), this.raise(), this
._visibility.setValue(!0), this._widget.classList.contains("i-hidden") ? (this
._widget.classList.remove("i-hidden"), setTimeout(function() {
t.isVisible() && t._widget.classList.remove("i-closed")
})) : this._widget.classList.remove("i-closed"), this._onWindowResize())
}, t.prototype.hide = function(t) {
var e, i, o = this;
void 0 === t && (t = !1), this.isVisible() && (e = this._widget.classList.contains(
"i-closed"), this._widget.classList.add("i-closed"), this._visibility
.setValue(!1), t || e ? (this._setHiddingTimeout(null), this._widget.classList
.add("i-hidden")) : (i = setTimeout(function() {
o._setHiddingTimeout(null), o._widget.classList.add("i-hidden")
}, this.hideDuration()), this._setHiddingTimeout(i)), window
.removeEventListener("resize", this._windowResizeListener))
}, t.prototype.raise = function() {
t._toolbars.length + t._startZIndex !== this._zIndex() && (t._toolbars.splice(t
._toolbars.indexOf(this), 1), t._toolbars.push(this), t
._updateAllZIndexes())
}, t.prototype.hideDuration = function() {
return .75 * r.dur
}, t.prototype.addWidget = function(t, e) {
var i, o, n;
if (void 0 === e && (e = {}), i = this.widgetsCount(), void 0 === e.index && (e.index =
i), e.index < 0 || e.index > i) throw Error("Index must be in [0, " + i + "]");
o = document.createElement("div"), o.className =
"tv-floating-toolbar__widget js-widget", o.appendChild(t), n = e.index === i ?
null : this._content.childNodes.item(e.index), this._content.insertBefore(o, n),
this._onWindowResize()
}, t.prototype.removeWidget = function(t) {
var e = this._findWrapperForWidget(t);
e && (this._content.removeChild(e), this._onWindowResize())
}, t.prototype.widgetsCount = function() {
return this._content.childNodes.length
}, t.prototype.showWidget = function(t) {
var e = this._findWrapperForWidget(t);
e && e.classList.remove("i-hidden")
}, t.prototype.hideWidget = function(t) {
var e = this._findWrapperForWidget(t);
e && e.classList.add("i-hidden")
}, t.prototype.removeWidgets = function() {
for (; this._content.firstChild;) this._content.removeChild(this._content.firstChild);
this._onWindowResize()
}, t.prototype.onWidgetsReordered = function() {
return this._reorderedDelegate
}, t.prototype.onContextMenu = function(t) {
var e, i = this;
Modernizr.touch ? (e = new n(this._widget), e.get("press").set({
time: 500
}), e.on("press", function(e) {
i._preventWidgetTouchEndEvent(), t(e.srcEvent)
})) : this._widget.addEventListener("contextmenu", t)
},
t.prototype._determineCurrentLayoutVertical = function(t) {
var e = this._isVertical ? t.height : t.width;
return window.innerWidth < e
}, t.prototype._getWidget = function() {
return this._widget
}, t.prototype._findWrapperForWidget = function(t) {
var e, i, o = this._content.getElementsByClassName("js-widget");
for (e = 0; e < o.length; ++e)
if (i = o.item(e), i.contains(t)) return i;
return null
}, t.prototype._onVerticalChanged = function(t, e) {}, t.prototype._setHiddingTimeout =
function(t) {
null !== this._hiddingTimeoutId && clearTimeout(this._hiddingTimeoutId), this
._hiddingTimeoutId = t
}, t.prototype._preventWidgetTouchEndEvent = function() {
var t = this,
e = function(i) {
i.preventDefault(), t._widget.removeEventListener("touchend", e)
};
this._widget.addEventListener("touchend", e)
}, t.prototype._updateLayoutType = function() {
this._widget.classList.toggle("i-vertical", this._isVertical)
}, t.prototype._onWindowResize = function() {
var t, e;
"auto" === (this._options.layout || "auto") && (t = this._isVertical, e = this
._getCorrectedWidgetRect(), this._isVertical = this._determineCurrentLayoutVertical(
e), this._updateLayoutType(), t !== this._isVertical && this._onVerticalChanged(
this._isVertical, t)), this._checkPosition()
}, t.prototype._checkPosition = function() {
var t = this._getCorrectedWidgetRect(),
e = {
left: t.left,
top: t.top
};
this._correctPosition(e), t.left === e.left && t.top === e.top || (this._widget.style
.left = e.left + "px", this._widget.style.top = e.top + "px")
}, t.prototype._correctPosition = function(t) {
var e = this._getCorrectedWidgetRect();
t.left + e.width > window.innerWidth && (t.left = Math.max(0, window.innerWidth - e
.width)), t.top + e.height > window.innerHeight && (t.top = Math.max(0, window
.innerHeight - e.height)), t.left = Math.max(0, t.left), t.top = Math.max(0, t
.top)
}, t.prototype._setZIndex = function(t) {
this._widget.style.zIndex = t + ""
}, t.prototype._zIndex = function() {
return +this._widget.style.zIndex
}, t.prototype._loadPosition = function() {
var t = s.getJSON(this._options.positionSettingsKey, this._options.defaultPosition);
this._widget.style.left = Math.round(t.left) + "px", this._widget.style.top = Math
.round(t.top) + "px", this._onWindowResize()
}, t.prototype._savePosition = function() {
var t = this._widget.getBoundingClientRect();
s.setJSON(this._options.positionSettingsKey, {
left: t.left,
top: t.top
})
}, t.prototype._init = function() {
this._loadPosition(), c.lazyJqueryUI(o(this._widget)).draggable({
containment: "window",
drag: this._onDragEvent.bind(this),
handle: ".js-drag",
stop: this._savePosition.bind(this)
}), this._options.allowSortable && this._initSortable(), this._widget
.addEventListener(Modernizr.touch ? "touchstart" : "mousedown", this.raise.bind(
this))
}, t.prototype._onDragEvent = function(t, e) {
this._correctPosition(e.position)
}, t.prototype._initSortable = function() {
var t = this,
e = -1;
c.lazyJqueryUI(o(this._content)).sortable({
start: function(t, i) {
e = i.item.index()
},
stop: function(i, o) {
var n = o.item.index();
e !== n && t._reorderedDelegate.fire(e, n)
},
tolerance: "point"
})
}, t.prototype._getCorrectedWidgetRect = function() {
var t, e, i, o, n = this._widget.getBoundingClientRect();
return this._widget.classList.contains("i-closed") ? (t = .925, e = 1 / t - 1, i = n
.width * e, o = n.height * e, {
bottom: n.bottom + o / 2,
height: n.height + o,
left: n.left - i / 2,
right: n.right + i / 2,
top: n.top - o / 2,
width: n.width + i
}) : n
}, t._updateAllZIndexes = function() {
t._toolbars.forEach(function(e, i) {
e._setZIndex(t._startZIndex + i)
})
}, t._startZIndex = 20, t._toolbars = [], t
}(), e.FloatingToolbar = d
}, function(t, e, i) {
"use strict";
(function(e) {
var o = i(58),
n = i(34).Interval,
r = i(10),
s = i(5),
a = function(t, e) {
this._server = t, this._session = e, this._timezone = null, this._timezoneId = "", this
._isDWM = !1, this._resolution = null, this.seriesCompleted = new r, this
._lastBarTimes = {}
};
a.prototype.lastBarTime = function(t) {
return this._lastBarTimes[t]
}, a.prototype._userTimezone = function() {
return this._timezone
}, a.prototype.setTimezone = function(t) {
this._timezone = "exchange" === t ? "exchange" : e.get_timezone(t), this._timezoneId = t
}, a.prototype.timezone = function() {
return this._timezoneId
}, a.prototype.setResolution = function(t) {
this._isDWM = n.isDWM(t), this._resolution = t
}, a.prototype.onRequestMetadata = function(t, e) {
this._server.receiveLocalResponse({
method: "studies_metadata",
params: [this._session, t, e]
})
}, a.prototype.onSymbolResolved = function(t, e) {
this._server.receiveLocalResponse({
method: "symbol_resolved",
params: [this._session, t, e]
})
}, a.prototype.onSymbolError = function(t, e) {
this._server.receiveLocalResponse({
method: "symbol_error",
params: [this._session, t, e]
})
}, a.prototype.onStudyError = function(t, e) {
this._server.receiveLocalResponse({
method: "study_error",
params: [this._session, t, e]
})
}, a.prototype.onSeriesLoading = function(t, e) {
this._server.receiveLocalResponse({
method: "series_loading",
params: [this._session, t, e]
})
}, a.prototype.onSeriesCompleted = function(t, e, i) {
this._server.receiveLocalResponse({
method: "series_completed",
params: [this._session, t, i, e]
}), this.seriesCompleted.fire(t)
}, a.prototype.onSeriesError = function(t, e) {
this._server.receiveLocalResponse({
method: "series_error",
params: [this._session, t, e]
})
}, a.prototype.onSeriesClearData = function(t, e) {
var i = {};
i[t] = {
series: [],
turnaround: e
}, this._server.receiveLocalResponse({
method: "timescale_update",
params: [this._session, i, {
index: 0,
zoffset: 0,
changes: [],
marks: [],
index_diff: []
}]
})
}, a.prototype.onStudyCompleted = function(t, e) {
this._server.receiveLocalResponse({
method: "study_completed",
params: [this._session, t, e]
})
}, a.prototype.onStudyLoading = function(t, e) {
this._server.receiveLocalResponse({
method: "study_loading",
params: [this._session, t, e]
})
}, a.prototype._calcMarksTime = function(t, i, n, r, a) {
var l, c, h, u, d, p = e.get_timezone(i),
_ = this;
if (this._isDWM && !s.enabled("disable_resolution_rebuild"))
for (d = new o.Session, d.init(p, n), u = 0; u < t.length; u++) h = t[u], l = r(h),
c = e.utc_to_cal(p, 1e3 * l), c = d.spec.correctTradingDay(c, p), e.set_hms(c,
0, 0, 0, 0), t[u] = a(h, parseInt(c.valueOf() / 1e3));
else
for (u = 0; u < t.length; u++) t[u] = a(t[u], _.timeInTimezone(r(t[u]), p))
}, a.prototype.onTickmarksUpdated = function(t, e, i, o) {
var r, s, a, l, c, h, u;
if (n.isEqual(o, this._resolution)) {
for (r = e.slice(0), this._calcMarksTime(r, i.timezone, i.session, function(t) {
return t
}, function(t, e) {
return e
}), s = [], a = [], c = 0; c < r.length; ++c) h = r[c], s.push([this
._spanByTime(h, l), h, t + c
]), a.push(h), l = h;
u = {
method: "tickmark_update",
params: [this._session, {
index: t,
zoffset: 0,
changes: a,
marks: s,
index_diff: []
}]
}, this._server.receiveLocalResponse(u)
}
}, a.prototype.onTimescaleUpdate = function(t, e, i, o, n, r) {
var s, a, l, c, h, u, d, p, _ = r && r.slice(0);
for (this._lastBarTimes[t] = _ ? _ && _[_.length - 1] : i && i[i.length - 1].value[0],
this._calcMarksTime(i, o.timezone, o.session, function(t) {
return t.value[0]
}, function(t, e) {
return t.exTime = e, t
}), _ && this._calcMarksTime(_, o.timezone, o.session, function(t) {
return t
}, function(t, e) {
return {
markTime: e,
time: t
}
}), s = {}, s[t] = {
series: i,
turnaround: e
}, a = [], l = [], h = i.map(function(t) {
return {
markTime: t.exTime,
time: t.value[0]
}
}), _ && (h = h.concat(_)), u = 0; u < h.length; ++u) d = h[u].markTime, a.push([
this._spanByTime(d, c), d, n + u
]), l.push(h[u].time), c = d;
p = {
method: "timescale_update",
params: [this._session, s, {
index: n,
zoffset: 0,
changes: l,
marks: a,
index_diff: []
}]
}, this._server.receiveLocalResponse(p)
}, a.prototype.onSeriesTimeframeUpdate = function(t, e, i, o, n) {
var r = {
method: "series_timeframe",
params: [this._session, t, e, i, o, n]
};
this._server.receiveLocalResponse(r)
}, a.prototype.onPointsetDataUpdate = function(t, e, i, o) {
this._onDataUpdate(t, e, i, null, o, 1)
}, a.prototype.onDataUpdate = function(t, e, i, o, n) {
this._onDataUpdate(t, e, i, o, n, 0)
}, a.prototype._onDataUpdate = function(t, e, i, o, n, r) {
var s, a = {},
l = "",
c = [];
null !== o && (l = JSON.stringify(o.data), c = o.indexes || []), a[t] = {
s: i,
ns: {
d: l,
indexes: c
},
turnaround: e
}, s = {
method: "data_update",
params: [this._session, a]
}, this._server.receiveLocalResponse(s)
}, a.prototype.onQuotesData = function(t) {
this._server.receiveLocalResponse({
method: "quote_symbol_data",
params: t
})
}, a.prototype.onDepthData = function(t) {
this._server.receiveLocalResponse({
method: "dd",
params: t
})
}, a.prototype.onDepthUpdate = function(t) {
this._server.receiveLocalResponse({
method: "dpu",
params: t
})
}, a.prototype.onProjectionUpdate = function(t, e, i, o) {
var n, r = i.data,
s = r[r.length - 1],
a = {
data: {
reversalAmount: i.reversalAmount,
boxSize: i.boxSize,
price: s ? s[4] : i.price,
bars: r.map(function(t, e) {
return {
time: e,
open: t[1],
high: t[2],
low: t[3],
close: t[4],
volume: t[5],
factor: t[6],
additionalPrice: t[6]
}
})
}
},
l = {};
l[t] = {
s: o || [],
ns: {
d: JSON.stringify(a),
indexes: r.map(function(t, e) {
return i.barsetSize + (t[0] || 0)
})
},
turnaround: e
}, n = {
method: "data_update",
params: [this._session, l]
}, this._server.receiveLocalResponse(n)
}, a.prototype.timeInTimezone = function(t, i) {
return "exchange" === this._userTimezone() ? parseInt(e.utc_to_cal(i, 1e3 * t)
.valueOf() / 1e3) : parseInt(e.utc_to_cal(this._userTimezone(), 1e3 * t)
.valueOf() /
1e3)
}, a.prototype._spanByTime = function(t, e) {
function i(t) {
return 60 * t * 60 * 1e3
}
function o(t) {
return 60 * t * 1e3
}
function n(t) {
return 1e3 * t
}
var r, s, a, l = [{
divisor: 1,
span: 20
}, {
divisor: n(1),
span: 19
}, {
divisor: o(5),
span: 21
}, {
divisor: o(30),
span: 22
}, {
divisor: i(1),
span: 30
}, {
divisor: i(3),
span: 31
}, {
divisor: i(6),
span: 32
}, {
divisor: i(12),
span: 33
}];
if (!e) return 20;
if (r = new Date(1e3 * e), s = new Date(1e3 * t), s.getYear() !== r.getYear())
return 70;
if (s.getUTCMonth() !== r.getUTCMonth()) return 60;
if (s.getUTCDate() !== r.getUTCDate()) return 50;
for (a = l.length - 1; a >= 0; --a)
if (Math.floor(r / l[a].divisor) !== Math.floor(s / l[a].divisor)) return l[a].span
}, TradingView.ChartapiMessagerInstances = [], t.exports = a
}).call(e, i(50))
}, function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
}), e.supportedLineTools = {
cursor: {
name: "cursor",
onlySelectable: !0
},
dot: {
name: "dot",
onlySelectable: !0
},
arrow_cursor: {
name: "arrow",
onlySelectable: !0
},
eraser: {
name: "eraser",
onlySelectable: !0
},
measure: {
name: "measure",
onlySelectable: !0
},
zoom: {
name: "zoom",
onlySelectable: !0
},
brush: {
name: "LineToolBrush",
onlySelectable: !0
},
text: {
name: "LineToolText",
supportsText: !0
},
anchored_text: {
name: "LineToolTextAbsolute",
supportsText: !0
},
note: {
name: "LineToolNote",
supportsText: !0
},
anchored_note: {
name: "LineToolNoteAbsolute",
supportsText: !0
},
callout: {
name: "LineToolCallout",
supportsText: !0
},
balloon: {
name: "LineToolBalloon",
supportsText: !0
},
arrow_up: {
name: "LineToolArrowMarkUp",
supportsText: !0
},
arrow_down: {
name: "LineToolArrowMarkDown",
supportsText: !0
},
arrow_left: {
name: "LineToolArrowMarkLeft",
supportsText: !0
},
arrow_right: {
name: "LineToolArrowMarkRight",
supportsText: !0
},
price_label: {
name: "LineToolPriceLabel"
},
flag: {
name: "LineToolFlagMark"
},
vertical_line: {
name: "LineToolVertLine"
},
horizontal_line: {
name: "LineToolHorzLine"
},
horizontal_ray: {
name: "LineToolHorzRay"
},
trend_line: {
name: "LineToolTrendLine"
},
trend_angle: {
name: "LineToolTrendAngle"
},
arrow: {
name: "LineToolArrow"
},
ray: {
name: "LineToolRay"
},
extended: {
name: "LineToolExtended"
},
parallel_channel: {
name: "LineToolParallelChannel"
},
disjoint_angle: {
name: "LineToolDisjointAngle"
},
flat_bottom: {
name: "LineToolFlatBottom"
},
pitchfork: {
name: "LineToolPitchfork"
},
schiff_pitchfork_modified: {
name: "LineToolSchiffPitchfork"
},
schiff_pitchfork: {
name: "LineToolSchiffPitchfork2"
},
inside_pitchfork: {
name: "LineToolInsidePitchfork"
},
pitchfan: {
name: "LineToolPitchfan"
},
gannbox: {
name: "LineToolGannSquare"
},
gannbox_square: {
name: "LineToolGannComplex"
},
gannbox_fixed: {
name: "LineToolGannFixed"
},
gannbox_fan: {
name: "LineToolGannFan"
},
fib_retracement: {
name: "LineToolFibRetracement"
},
fib_trend_ext: {
name: "LineToolTrendBasedFibExtension"
},
fib_speed_resist_fan: {
name: "LineToolFibSpeedResistanceFan"
},
fib_timezone: {
name: "LineToolFibTimeZone"
},
fib_trend_time: {
name: "LineToolTrendBasedFibTime"
},
fib_circles: {
name: "LineToolFibCircles"
},
fib_spiral: {
name: "LineToolFibSpiral"
},
fib_speed_resist_arcs: {
name: "LineToolFibSpeedResistanceArcs"
},
fib_wedge: {
name: "LineToolFibWedge"
},
fib_channel: {
name: "LineToolFibChannel"
},
xabcd_pattern: {
name: "LineTool5PointsPattern"
},
cypher_pattern: {
name: "LineToolCypherPattern"
},
abcd_pattern: {
name: "LineToolABCD"
},
triangle_pattern: {
name: "LineToolTrianglePattern"
},
"3divers_pattern": {
name: "LineToolThreeDrivers"
},
head_and_shoulders: {
name: "LineToolHeadAndShoulders"
},
elliott_impulse_wave: {
name: "LineToolElliottImpulse"
},
elliott_triangle_wave: {
name: "LineToolElliottTriangle"
},
elliott_triple_combo: {
name: "LineToolElliottTripleCombo"
},
elliott_correction: {
name: "LineToolElliottCorrection"
},
elliott_double_combo: {
name: "LineToolElliottDoubleCombo"
},
cyclic_lines: {
name: "LineToolCircleLines"
},
time_cycles: {
name: "LineToolTimeCycles"
},
sine_line: {
name: "LineToolSineLine"
},
long_position: {
name: "LineToolRiskRewardLong"
},
short_position: {
name: "LineToolRiskRewardShort"
},
forecast: {
name: "LineToolPrediction"
},
date_range: {
name: "LineToolDateRange"
},
price_range: {
name: "LineToolPriceRange"
},
date_and_price_range: {
name: "LineToolDateAndPriceRange"
},
bars_pattern: {
name: "LineToolBarsPattern"
},
ghost_feed: {
name: "LineToolGhostFeed"
},
projection: {
name: "LineToolProjection"
},
rectangle: {
name: "LineToolRectangle"
},
rotated_rectangle: {
name: "LineToolRotatedRectangle"
},
ellipse: {
name: "LineToolEllipse"
},
triangle: {
name: "LineToolTriangle"
},
polyline: {
name: "LineToolPolyline"
},
curve: {
name: "LineToolBezierQuadro"
},
double_curve: {
name: "LineToolBezierCubic"
},
arc: {
name: "LineToolArc"
},
icon: {
name: "LineToolIcon"
}
}
}, function(t, e, i) {
"use strict";
var o, n;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(48), n = function() {
function t() {}
return t.prototype.init = function(t, e) {
t.new_sym(e(1), o.Std.period(t), o.Std.period(t)), this._source = e(0), this
._scaleFactor1 = 1, this._scaleFactor2 = 1
}, t.prototype.main = function(t, e) {
var i, n, r, s, a, l, c = t.symbol.time,
h = o.Std[this._source](t);
return t.select_sym(1), i = o.Std[this._source](t), n = t.new_var(i), r = t.new_var(t
.symbol.time), isNaN(t.symbol.time) && (n.indexOf(0), r.indexOf(0)), t
.select_sym(0), isNaN(c) ? null : (s = r.indexOf(c), -1 !== s && r.get(s) !== c && (
s = -1), a = s < 0 ? NaN : n.get(s), l = this._doCalculation(this
._scaleFactor1, h, this._scaleFactor2, a), [l])
}, t
}(), e.SpreadRatioBase = n, e.spreadRatioDefaults = {
styles: {
plot1: {
linestyle: 0,
linewidth: 2,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#800080"
}
},
precision: 2,
inputs: {
source: "close",
symbol2: ""
}
}, e.spreadRatioInputs = [{
defval: "close",
id: "source",
name: "Source",
options: ["open", "high", "low", "close", "hl2", "hlc3", "ohlc4"],
type: "text"
}, {
id: "symbol2",
name: "Symbol",
type: "symbol",
confirm: !0
}], e.spreadRatioPlots = [{
id: "plot1",
type: "line"
}], e.spreadRatioStyles = {
plot1: {
title: "Plot",
histogramBase: 0
}
}
}, function(t, e, i) {
"use strict";
function o(t) {
var e, i = t.dropped,
o = t.className;
return n.createElement(s.Icon, {
className: r(o, a.icon, (e = {}, e[a.dropped] = i, e)),
icon: l
})
}
var n, r, s, a, l;
Object.defineProperty(e, "__esModule", {
value: !0
}), n = i(2), r = i(14), s = i(59), a = i(1024), l = i(297), e.ToolWidgetCaret = o
}, function(t, e, i) {
"use strict";
var o, n, r, s, a, l;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(2), r = i(14), s = i(103), a = i(1027), l = function(t) {
function e() {
var e = null !== t && t.apply(this, arguments) || this;
return e._handleClick = function() {
var t = e.props,
i = t.onClick,
o = t.onClickArg;
i && i(o)
}, e
}
return o.__extends(e, t), e.prototype.render = function() {
var t, e = this.props,
i = e.isFirst,
o = e.isLast,
l = e.hint,
c = e.text,
h = e.icon,
u = e.isActive,
d = e.isDisabled,
p = e.className;
return n.createElement(s.ToolWidgetButton, {
icon: h,
text: c,
title: l,
isDisabled: d,
isActive: u,
onClick: this._handleClick,
className: r(p, a.button, (t = {}, t[a.first] = i, t[a.last] = o, t))
})
}, e
}(n.PureComponent), e.ToolWidgetQuickButton = l
}, function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), i(12), n = i(2), r = i(14), s = i(1043), a = i(1044), l = {
remove: window.t("Remove")
}, c = function(t) {
function e() {
var e = null !== t && t.apply(this, arguments) || this;
return e._handleClick = function(t) {
var i = e.props,
o = i.onClick,
n = i.onClickArg;
o && o(n, t)
}, e
}
return o.__extends(e, t), e.prototype.render = function() {
return n.createElement("span", {
className: r(s.button, "apply-common-tooltip", this.props.hidden && s
.hidden),
dangerouslySetInnerHTML: {
__html: a
},
onClick: this._handleClick,
title: l.remove
})
}, e
}(n.PureComponent), e.RemoveButton = c
}, function(t, e, i) {
"use strict";
var o, n, r, s, a, l;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(8), r = i(64), s = i(11), a = i(131), l = function() {
function t(t, e) {
this._invalidated = !0, this._middlePoint = null, this._points = [], this._floatPoints = [],
this._source = t, this._model = e
}
return t.prototype.priceToCoordinate = function(t) {
var e, i, o, n = this._source.priceScale();
return null === n ? null : null === (e = n.priceRange()) ? null : (n.isPercent() &&
null !== (i = this._source.ownerSource()) && null !== (o = i.firstValue()) &&
void 0 !== o && (t = e.convertToPercent(t, o)), n.priceToCoordinate(t))
}, t.prototype.currentPoint = function() {
var t = this._model.crossHairSource();
return new n.Point(t.x, t.y)
}, t.prototype.anchorColor = function() {
return this._source.isBeingEdited() ? "#D61AD3" : this._model.isDark() ? "#FFFFFF" :
"#606060"
}, t.prototype.isHoveredSource = function() {
return this._source === this._model.hoveredSource()
}, t.prototype.isSelectedSource = function() {
return this._source === this._model.selectedSource()
}, t.prototype.isAnchorsRequired = function() {
return (this.isHoveredSource() || this.isSelectedSource()) && !this._model.isSnapshot()
}, t.prototype.update = function() {
this._invalidated = !0
}, t.prototype.addAnchors = function(t) {
if (this.isAnchorsRequired()) {
var e = this._points;
this._model.lineBeingCreated() === this._source && (e = e.slice(0, -1)), t.append(
this.createLineAnchor({
points: e
}))
}
}, t.prototype.createLineAnchor = function(t) {
var e = r.CheckMobile.any();
return new a.LineAnchor(o.__assign({}, t, {
color: this.anchorColor(),
backgroundColor: this._model.backgroundColor(),
currentPoint: this.currentPoint(),
linePointBeingEdited: this._model.linePointBeingEdited(),
hittestResult: s.CHANGEPOINT,
radius: (e ? 15 : 7) + (this.isSelectedSource() ? 1 : 0),
strokeWidth: (e ? 3 : 1) + (this.isSelectedSource() ? 1 : 0)
}))
}, t.prototype._updateImpl = function() {
var t, e, i, o, n, r, s, a;
if (this._points = [], this._floatPoints = [], t = this._source.priceScale(), e = this
._model.timeScale(), t && !t.isEmpty() && !e.isEmpty()) {
for (i = this._source.points(), o = 0; o < i.length; o++) {
if (n = i[o], !(r = this._source.pointToScreenPoint(n))) return;
s = r[0], s.data = o, a = r[1], a.data = o, this._floatPoints.push(s), this
._points.push(a)
}
2 === this._points.length && (this._middlePoint = this._source.calcMiddlePoint(this
._points[0], this._points[1]))
}
}, t.prototype._getSource = function() {
return this._source
}, t.prototype._getPoints = function() {
return this._points
}, t.prototype._getModel = function() {
return this._model
}, t
}(), e.LineSourcePaneView = l
}, function(t, e, i) {
"use strict";
function o(t) {
var e = s.parseRgb(t),
i = e.map(function(t) {
return t > 50 ? t - 50 : 0
});
return s.rgbToString(i)
}
function n(t) {
var e, i, o, n = [];
for (e = 0, i = t; e < i.length; e++) o = i[e], null !== s.tryParseRgb(o) && n.push(o);
return n
}
function r(t, e) {
void 0 === e && (e = {});
var i = $('<span class="tvcolorpicker-container">');
return null !== t && i.appendTo(t), void 0 !== e.addClass && i.addClass(e.addClass),
$('<div class="tvcolorpicker-transparency">').appendTo(i), $(
'<input class="colorpicker-widget">').tvcolorpicker({
customColors: n(a.getJSON("pickerCustomColors", [])),
direction: e.direction,
hideTransparency: !!e.hideTransparency
}).on("change", function() {
$(this).css("border-color", o($(this).val() || l))
}).bind("customcolorchange", function(t, e) {
a.setJSON("pickerCustomColors", e)
}).appendTo(i), i
}
var s, a, l;
Object.defineProperty(e, "__esModule", {
value: !0
}), i(13), i(284), s = i(32), a = i(24), l = "#727272", e.addColorPicker = r
}, function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c, h;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(11), n = i(44), r = i(60), s = i(8), a = i(30), l = i(9), c = i(90), h = function() {
function t(t, e, i) {
this._data = null, this._hitTestResult = t || new o(o.MOVEPOINT), this._backHitTestResult =
e || new o(o.MOVEPOINT_BACKGROUND), this._forceOverrideTransparency = !!i
}
return t.prototype.setData = function(t) {
this._data = t
}, t.prototype.draw = function(t) {
var e, i, o, n;
null === this._data || this._data.points.length < 2 || (t.lineCap = "butt", t
.strokeStyle = this._data.color, t.lineWidth = this._data.linewidth, void 0 !==
this._data.linestyle && c.setLineStyle(t, this._data.linestyle), e = this._data
.points, i = e[0], o = e[1], n = o.subtract(i), t.beginPath(), t.rect(i.x, i.y,
n.x, n.y), this._data.linewidth > 0 && t.stroke(), this._data
.fillBackground && (t.fillStyle = this.getColor(), t.fill()))
}, t.prototype.hitTest = function(t) {
var e, i, o, a, l, c, h, u, d, p;
return null === this._data || this._data.points.length < 2 || this._data.nohittest ?
null : (e = this._data.points, i = e[0], o = e[1], a = new s.Point(o.x, i.y), l =
new s.Point(i.x, o.y), c = n.distanceToSegment(i, a, t), c.distance <= 3 ? this
._hitTestResult : (c = n.distanceToSegment(a, o, t), c.distance <= 3 ? this
._hitTestResult : (c = n.distanceToSegment(o, l, t), c.distance <= 3 ? this
._hitTestResult : (c = n.distanceToSegment(l, i, t), c.distance <= 3 ?
this._hitTestResult : this._data.fillBackground && (h = Math.min(i
.x, o.x), u = Math.max(i.x, o.x), d = Math.min(i.y, o.y),
p = Math.max(i.y, o.y), i = new s.Point(h, d), o = new s.Point(
u, p), r.pointInRectangle(t, i, o)) ? this
._backHitTestResult : null))))
}, t.prototype.getColor = function() {
var t = l.ensure(this._data);
return a.generateColor(t.backcolor, t.transparency, this._forceOverrideTransparency)
}, t
}(), e.RectangleRenderer = h
}, function(t, e, i) {
"use strict";
var o, n, r, s;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(2), r = i(39), s = function(t) {
function e() {
var e = null !== t && t.apply(this, arguments) || this;
return e._handleOutsideEvent = function(t) {
e.props.handler && !r.findDOMNode(e).contains(t.target) && e.props.handler(t)
}, e
}
return o.__extends(e, t), e.prototype.componentDidMount = function() {
this.props.click && document.addEventListener("click", this._handleOutsideEvent, !1),
this.props.mouseDown && document.addEventListener("mousedown", this
._handleOutsideEvent, !1), this.props.touchEnd && document.addEventListener(
"touchend", this._handleOutsideEvent, !1), this.props.touchStart && document
.addEventListener("touchstart", this._handleOutsideEvent, !1)
}, e.prototype.componentWillUnmount = function() {
this.props.click && document.removeEventListener("click", this._handleOutsideEvent, !1),
this.props.mouseDown && document.removeEventListener("mousedown", this
._handleOutsideEvent, !1), this.props.touchEnd && document.removeEventListener(
"touchend", this._handleOutsideEvent, !1), this.props.touchStart && document
.removeEventListener("touchstart", this._handleOutsideEvent, !1)
}, e.prototype.render = function() {
var t = this.props,
e = (t.click, t.handler, t.mouseDown, t.touchEnd, t.touchStart, t.ctor),
i = void 0 === e ? "span" : e,
r = o.__rest(t, ["click", "handler", "mouseDown", "touchEnd", "touchStart",
"ctor"
]);
return n.createElement(i, o.__assign({}, r))
}, e
}(n.Component), e.OutsideEvent = s
}, function(t, e, i) {
"use strict";
function o(t, e, i) {
this._cache = t, this._cacheRect = e, this._targetRect = i
}
var n = i(8).Point,
r = i(60).pointInRectangle,
s = i(11);
o.prototype.draw = function(t) {
t.translate(.5, .5), t.drawImage(this._cache, this._cacheRect.left, this._cacheRect.top, this
._cacheRect.width, this._cacheRect.height, this._targetRect.left, this._targetRect.top,
this._targetRect.width, this._targetRect.height), t.translate(-.5, -.5)
}, o.prototype.hitTest = function(t) {
var e = new n(this._targetRect.left, this._targetRect.top),
i = e.add(new n(this._targetRect.width, this._targetRect.height));
return r(t, e, i) ? new s(s.REGULAR) : null
}, t.exports = o
}, function(t, e, i) {
"use strict";
var o, n, r;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(11), n = i(90), r = function() {
function t() {
this._data = null, this._hitTest = null
}
return t.prototype.setData = function(t) {
this._data = t
}, t.prototype.setHitTest = function(t) {
this._hitTest = t
}, t.prototype.draw = function(t) {
if (null !== this._data && 0 !== this._data.points.length && !(this._data.linewidth <=
0)) {
var e = this._data.points[0].x;
e < 0 || e > this._data.width || (t.translate(1, 0), t.lineCap = "square", t
.strokeStyle = this._data.color, t.lineWidth = this._data.linewidth,
void 0 !== this._data.linestyle && n.setLineStyle(t, this._data.linestyle),
n.drawLine(t, e, 0, e, this._data.height))
}
}, t.prototype.hitTest = function(t) {
if (null === this._data || 0 === this._data.points.length) return null;
var e = this._hitTest || new o(o.MOVEPOINT);
return Math.abs(t.x - this._data.points[0].x) <= 3 ? e : null
}, t
}(), e.VerticalLineRenderer = r
}, function(t, e, i) {
"use strict";
var o, n, r;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(28), r = function(t) {
function e(e, i, o, n) {
var r = this;
return i || (i = 1), "forex" !== o && "cfd" !== o || !n ? (r = t.call(this, 1) || this, r
._isForex = !1) : (r = t.call(this, n) || this, r._isForex = !0), r._pipPriceScale =
e, r._pipMinMove = i, r._pipMinMove2 = n, r
}
return o.__extends(e, t), e.prototype.format = function(e, i, o) {
var n = this._isForex ? this._pipMinMove2 : this._pipMinMove;
return void 0 === n && (n = NaN), t.prototype.format.call(this, e * this
._pipPriceScale / n, i, o)
}, e
}(n.PriceFormatter), e.PipFormatter = r
}, , function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
}), i(12);
var o = function() {
function t() {}
return t.prototype.format = function(t) {
var e, i, o, n, r = t < 0;
return t = Math.abs(t), e = Math.floor(t / 86400), t -= 86400 * e, i = Math.floor(t /
3600), t -= 3600 * i, o = Math.floor(t / 60), t -= 60 * o, n = "", e && (n +=
e + $.t("d", {
context: "dates"
}) + " "), i && (n += i + $.t("h", {
context: "dates"
}) + " "), o && (n += o + $.t("m", {
context: "dates"
}) + " "), t && (n += t + $.t("s", {
context: "dates"
}) + " "),
r && (n = "-" + n), n.trim()
}, t
}();
e.TimeSpanFormatter = o
}, function(t, e, i) {
"use strict";
function o(t) {
this._data = null, this._hittest = t || new a(a.MOVEPOINT), this._backHittest = new a(a
.MOVEPOINT_BACKGROUND), this._points = []
}
var n = i(60).pointInPolygon,
r = i(44).distanceToSegment,
s = i(110).TrendLineRenderer,
a = i(11),
l = i(30),
c = i(74).LineEnd;
o.prototype.setData = function(t) {
this._data = t, this._points = t.points
}, o.prototype.draw = function(t) {
var e, i, o;
if (null !== this._data && 0 !== this._points.length) {
for (t.beginPath(), t.lineCap = "butt", t.strokeStyle = this._data.color, t.lineWidth = this
._data.linewidth, t.lineStyle = this._data.linestyle, e = this._points[0], t.moveTo(e.x,
e.y), i = 0; i < this._points.length; i++) o = this._points[i], t.lineTo(o.x, o.y);
this._data.filled && this._data.fillBackground && (t.fillStyle = l.generateColor(this._data
.backcolor, this._data.transparency), t.fill()), this._data.filled && !this._data
.skipClosePath && t.closePath(), this._data.linewidth > 0 && t.stroke(), this._points
.length > 1 && (this._data.leftend === c.Arrow && s.prototype.drawArrow(this._points[1],
this._points[0], t, t.lineWidth), this._data.rightend === c.Arrow && s.prototype
.drawArrow(this._points[this._points.length - 2], this._points[this._points.length -
1], t, t.lineWidth))
}
}, o.prototype.hitTest = function(t) {
var e, i, o, s, a;
if (null === this._data || void 0 !== this._data.mouseTouchable && !this._data.mouseTouchable)
return null;
for (e = TradingView.isMobile.any() ? 24 : 3, i = 1; i < this._points.length; i++)
if (o = this._points[i - 1], s = this._points[i], a = r(o, s, t), a.distance <= e)
return this._hittest;
return this._data.filled && this._data.fillBackground && this._points.length > 0 && (o = this
._points[0], s = this._points[this._points.length - 1], a = r(o, s, t), a.distance <= e
) ? this._hittest : this._data.filled && this._data.fillBackground && n(t, this._data
.points) ? this._backHittest : null
}, t.exports = o
}, function(t, e, i) {
"use strict";
var o, n, r;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(2), r = function(t) {
function e() {
var e = null !== t && t.apply(this, arguments) || this;
return e._handleKeyDown = function(t) {
t.keyCode === e.props.keyCode && e.props.handler(t)
}, e
}
return o.__extends(e, t), e.prototype.componentDidMount = function() {
document.addEventListener("keydown", this._handleKeyDown, !1)
}, e.prototype.componentWillUnmount = function() {
document.removeEventListener("keydown", this._handleKeyDown, !1)
}, e.prototype.render = function() {
return null
}, e
}(n.PureComponent), e.KeyboardDocumentListener = r
}, function(t, e, i) {
"use strict";
function o() {
return [
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
]
}
function n(t, e) {
var i, o, n, r = [
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]
];
for (i = 0; i < 3; i++)
for (o = 0; o < 3; o++)
for (n = 0; n < 3; n++) r[i][o] += t[i][n] * e[n][o];
return r
}
function r(t) {
var e = Math.cos(t),
i = Math.sin(t);
return [
[e, -i, 0],
[i, e, 0],
[0, 0, 1]
]
}
function s(t, e) {
return [
[t, 0, 0],
[0, e, 0],
[0, 0, 1]
]
}
function a(t, e) {
return [
[1, 0, t],
[0, 1, e],
[0, 0, 1]
]
}
function l(t, e) {
var i, o, n = [e.x, e.y, 1],
r = [0, 0, 0];
for (i = 0; i < 3; i++)
for (o = 0; o < 3; o++) r[i] += n[o] * t[i][o];
return new c.Point(r[0], r[1])
}
Object.defineProperty(e, "__esModule", {
value: !0
});
var c = i(8);
e.identityMatrix = o, e.multiplyMatrices = n, e.rotationMatrix = r, e.scalingMatrix = s, e
.translationMatrix = a, e.transformPoint = l
}, function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 95.939 95.939" width="95.939" height="95.939"><path d="M62.82 47.97l32.53-32.534a2 2 0 0 0 0-2.828L83.332.586a2 2 0 0 0-2.827 0L47.97 33.12 15.435.587c-.75-.75-2.078-.75-2.828 0L.587 12.607a2 2 0 0 0 0 2.83L33.12 47.97.588 80.504a2 2 0 0 0 0 2.828l12.02 12.02a1.997 1.997 0 0 0 2.83 0L47.97 62.818l32.535 32.535a2 2 0 0 0 2.827 0l12.02-12.02c.78-.783.78-2.05 0-2.83L62.82 47.97z"/></svg>'
}, function(t, e, i) {
var o, n, r;
! function(s) {
n = [i(13), i(242), i(391), i(75), i(168)], o = s, void 0 !== (r = "function" == typeof o ? o.apply(
e, n) : o) && (t.exports = r)
}(function(t) {
return t.widget("ui.slider", t.ui.mouse, {
version: "1.12.1",
widgetEventPrefix: "slide",
options: {
animate: !1,
classes: {
"ui-slider": "ui-corner-all",
"ui-slider-handle": "ui-corner-all",
"ui-slider-range": "ui-corner-all ui-widget-header"
},
distance: 0,
max: 100,
min: 0,
orientation: "horizontal",
range: !1,
step: 1,
value: 0,
values: null,
change: null,
slide: null,
start: null,
stop: null
},
numPages: 5,
_create: function() {
this._keySliding = !1, this._mouseSliding = !1, this._animateOff = !0, this
._handleIndex = null, this._detectOrientation(), this._mouseInit(), this
._calculateNewMax(), this._addClass("ui-slider ui-slider-" + this
.orientation, "ui-widget ui-widget-content"), this._refresh(), this
._animateOff = !1
},
_refresh: function() {
this._createRange(), this._createHandles(), this._setupEvents(), this
._refreshValue()
},
_createHandles: function() {
var e, i, o = this.options,
n = this.element.find(".ui-slider-handle"),
r = [];
for (i = o.values && o.values.length || 1, n.length > i && (n.slice(i)
.remove(), n = n.slice(0, i)), e = n.length; e < i; e++) r.push(
"<span tabindex='0'></span>");
this.handles = n.add(t(r.join("")).appendTo(this.element)), this._addClass(
this.handles, "ui-slider-handle", "ui-state-default"), this.handle =
this.handles.eq(0), this.handles.each(function(e) {
t(this).data("ui-slider-handle-index", e).attr("tabIndex", 0)
})
},
_createRange: function() {
var e = this.options;
e.range ? (!0 === e.range && (e.values ? e.values.length && 2 !== e.values
.length ? e.values = [e.values[0], e.values[0]] : t.isArray(e
.values) && (e.values = e.values.slice(0)) : e.values = [
this._valueMin(), this._valueMin()
]), this.range && this.range.length ? (this._removeClass(this
.range, "ui-slider-range-min ui-slider-range-max"), this
.range.css({
left: "",
bottom: ""
})) : (this.range = t("<div>").appendTo(this.element), this
._addClass(this.range, "ui-slider-range")), "min" !== e.range &&
"max" !== e.range || this._addClass(this.range, "ui-slider-range-" +
e.range)) : (this.range && this.range.remove(), this.range =
null)
},
_setupEvents: function() {
this._off(this.handles), this._on(this.handles, this._handleEvents), this
._hoverable(this.handles), this._focusable(this.handles)
},
_destroy: function() {
this.handles.remove(), this.range && this.range.remove(), this
._mouseDestroy()
},
_mouseCapture: function(e) {
var i, o, n, r, s, a, l, c = this,
h = this.options;
return !h.disabled && (this.elementSize = {
width: this.element.outerWidth(),
height: this.element.outerHeight()
}, this.elementOffset = this.element.offset(), i = {
x: e.pageX,
y: e.pageY
}, o = this._normValueFromMouse(i), n = this._valueMax() - this
._valueMin() + 1,
this.handles.each(function(e) {
var i = Math.abs(o - c.values(e));
(n > i || n === i && (e === c._lastChangedValue || c.values(
e) === h.min)) && (n = i, r = t(this), s = e)
}), !1 !== this._start(e, s) && (this._mouseSliding = !0, this
._handleIndex = s, this._addClass(r, null, "ui-state-active"), r
.trigger("focus"), a = r.offset(), l = !t(e.target).parents()
.addBack().is(".ui-slider-handle"), this._clickOffset = l ? {
left: 0,
top: 0
} : {
left: e.pageX - a.left - r.width() / 2,
top: e.pageY - a.top - r.height() / 2 - (parseInt(r.css(
"borderTopWidth"), 10) || 0) - (parseInt(r.css(
"borderBottomWidth"), 10) || 0) + (parseInt(r.css(
"marginTop"), 10) || 0)
}, this.handles.hasClass("ui-state-hover") || this._slide(e, s,
o), this._animateOff = !0, !0))
},
_mouseStart: function() {
return !0
},
_mouseDrag: function(t) {
var e = {
x: t.pageX,
y: t.pageY
},
i = this._normValueFromMouse(e);
return this._slide(t, this._handleIndex, i), !1
},
_mouseStop: function(t) {
return this._removeClass(this.handles, null, "ui-state-active"), this
._mouseSliding = !1, this._stop(t, this._handleIndex), this._change(t,
this._handleIndex), this._handleIndex = null, this._clickOffset =
null, this._animateOff = !1, !1
},
_detectOrientation: function() {
this.orientation = "vertical" === this.options.orientation ? "vertical" :
"horizontal"
},
_normValueFromMouse: function(t) {
var e, i, o, n, r;
return "horizontal" === this.orientation ? (e = this.elementSize.width, i =
t.x - this.elementOffset.left - (this._clickOffset ? this
._clickOffset.left : 0)) : (e = this.elementSize.height, i = t
.y - this.elementOffset.top - (this._clickOffset ? this._clickOffset
.top : 0)), o = i / e, o > 1 && (o = 1), o < 0 && (o = 0),
"vertical" === this.orientation && (o = 1 - o), n = this._valueMax() -
this._valueMin(), r = this._valueMin() + o * n, this._trimAlignValue(r)
},
_uiHash: function(t, e, i) {
var o = {
handle: this.handles[t],
handleIndex: t,
value: void 0 !== e ? e : this.value()
};
return this._hasMultipleValues() && (o.value = void 0 !== e ? e : this
.values(t), o.values = i || this.values()), o
},
_hasMultipleValues: function() {
return this.options.values && this.options.values.length
},
_start: function(t, e) {
return this._trigger("start", t, this._uiHash(e))
},
_slide: function(t, e, i) {
var o, n = this.value(),
r = this.values();
this._hasMultipleValues() && (o = this.values(e ? 0 : 1), n = this.values(
e), 2 === this.options.values.length && !0 === this.options
.range &&
(i = 0 === e ? Math.min(o, i) : Math.max(o, i)), r[e] = i), i !==
n && !1 !== this._trigger("slide", t, this._uiHash(e, i, r)) && (this
._hasMultipleValues() ? this.values(e, i) : this.value(i))
},
_stop: function(t, e) {
this._trigger("stop", t, this._uiHash(e))
},
_change: function(t, e) {
this._keySliding || this._mouseSliding || (this._lastChangedValue = e, this
._trigger("change", t, this._uiHash(e)))
},
value: function(t) {
return arguments.length ? (this.options.value = this._trimAlignValue(t),
this._refreshValue(), void this._change(null, 0)) : this._value()
},
values: function(e, i) {
var o, n, r;
if (arguments.length > 1) return this.options.values[e] = this
._trimAlignValue(i), this._refreshValue(), void this._change(null,
e);
if (!arguments.length) return this._values();
if (!t.isArray(arguments[0])) return this._hasMultipleValues() ? this
._values(e) : this.value();
for (o = this.options.values, n = arguments[0], r = 0; r < o.length; r += 1)
o[r] = this._trimAlignValue(n[r]), this._change(null, r);
this._refreshValue()
},
_setOption: function(e, i) {
var o, n = 0;
switch ("range" === e && !0 === this.options.range && ("min" === i ? (this
.options.value = this._values(0), this.options.values = null) :
"max" === i && (this.options.value = this._values(this.options
.values.length - 1), this.options.values = null)), t.isArray(
this.options.values) && (n = this.options.values.length), this
._super(e, i), e) {
case "orientation":
this._detectOrientation(), this._removeClass(
"ui-slider-horizontal ui-slider-vertical")._addClass(
"ui-slider-" + this.orientation), this._refreshValue(), this
.options.range && this._refreshRange(i), this.handles.css(
"horizontal" === i ? "bottom" : "left", "");
break;
case "value":
this._animateOff = !0, this._refreshValue(), this._change(null, 0),
this._animateOff = !1;
break;
case "values":
for (this._animateOff = !0, this._refreshValue(), o = n - 1; o >=
0; o--) this._change(null, o);
this._animateOff = !1;
break;
case "step":
case "min":
case "max":
this._animateOff = !0, this._calculateNewMax(), this
._refreshValue(), this._animateOff = !1;
break;
case "range":
this._animateOff = !0, this._refresh(), this._animateOff = !1
}
},
_setOptionDisabled: function(t) {
this._super(t), this._toggleClass(null, "ui-state-disabled", !!t)
},
_value: function() {
var t = this.options.value;
return t = this._trimAlignValue(t)
},
_values: function(t) {
var e, i, o;
if (arguments.length) return e = this.options.values[t], e = this
._trimAlignValue(e);
if (this._hasMultipleValues()) {
for (i = this.options.values.slice(), o = 0; o < i.length; o += 1) i[
o] = this._trimAlignValue(i[o]);
return i
}
return []
},
_trimAlignValue: function(t) {
if (t <= this._valueMin()) return this._valueMin();
if (t >= this._valueMax()) return this._valueMax();
var e = this.options.step > 0 ? this.options.step : 1,
i = (t - this._valueMin()) % e,
o = t - i;
return 2 * Math.abs(i) >= e && (o += i > 0 ? e : -e), parseFloat(o.toFixed(
5))
},
_calculateNewMax: function() {
var t = this.options.max,
e = this._valueMin(),
i = this.options.step;
t = Math.round((t - e) / i) * i + e, t > this.options.max && (t -= i), this
.max = parseFloat(t.toFixed(this._precision()))
},
_precision: function() {
var t = this._precisionOf(this.options.step);
return null !== this.options.min && (t = Math.max(t, this._precisionOf(this
.options.min))), t
},
_precisionOf: function(t) {
var e = "" + t,
i = e.indexOf(".");
return -1 === i ? 0 : e.length - i - 1
},
_valueMin: function() {
return this.options.min
},
_valueMax: function() {
return this.max
},
_refreshRange: function(t) {
"vertical" === t && this.range.css({
width: "",
left: ""
}), "horizontal" === t && this.range.css({
height: "",
bottom: ""
})
},
_refreshValue: function() {
var e, i, o, n, r, s = this.options.range,
a = this.options,
l = this,
c = !this._animateOff && a.animate,
h = {};
this._hasMultipleValues() ? this.handles.each(function(o) {
i = (l.values(o) - l._valueMin()) / (l._valueMax() - l
._valueMin()) * 100, h["horizontal" === l.orientation ?
"left" : "bottom"] = i + "%", t(this).stop(1, 1)[c ?
"animate" : "css"](h, a.animate), !0 === l.options
.range && ("horizontal" === l.orientation ? (0 === o && l
.range.stop(1, 1)[c ? "animate" : "css"]({
left: i + "%"
}, a.animate), 1 === o && l.range[c ? "animate" :
"css"]({
width: i - e + "%"
}, {
queue: !1,
duration: a.animate
})) : (0 === o && l.range.stop(1, 1)[c ? "animate" :
"css"]({
bottom: i + "%"
}, a.animate), 1 === o && l.range[c ? "animate" :
"css"]({
height: i - e + "%"
}, {
queue: !1,
duration: a.animate
}))), e = i
}) : (o = this.value(),
n = this._valueMin(), r = this._valueMax(), i = r !== n ? (o - n) /
(r - n) * 100 : 0, h["horizontal" === this.orientation ? "left" :
"bottom"] = i + "%", this.handle.stop(1, 1)[c ? "animate" :
"css"](h, a.animate), "min" === s && "horizontal" === this
.orientation && this.range.stop(1, 1)[c ? "animate" : "css"]({
width: i + "%"
}, a.animate), "max" === s && "horizontal" === this.orientation &&
this.range.stop(1, 1)[c ? "animate" : "css"]({
width: 100 - i + "%"
}, a.animate), "min" === s && "vertical" === this.orientation &&
this.range.stop(1, 1)[c ? "animate" : "css"]({
height: i + "%"
}, a.animate), "max" === s && "vertical" === this.orientation &&
this.range.stop(1, 1)[c ? "animate" : "css"]({
height: 100 - i + "%"
}, a.animate))
},
_handleEvents: {
keydown: function(e) {
var i, o, n, r = t(e.target).data("ui-slider-handle-index");
switch (e.keyCode) {
case t.ui.keyCode.HOME:
case t.ui.keyCode.END:
case t.ui.keyCode.PAGE_UP:
case t.ui.keyCode.PAGE_DOWN:
case t.ui.keyCode.UP:
case t.ui.keyCode.RIGHT:
case t.ui.keyCode.DOWN:
case t.ui.keyCode.LEFT:
if (e.preventDefault(), !this._keySliding && (this
._keySliding = !0, this._addClass(t(e.target), null,
"ui-state-active"), !1 === this._start(e, r)))
return
}
switch (n = this.options.step, i = o = this._hasMultipleValues() ? this
.values(r) : this.value(), e.keyCode) {
case t.ui.keyCode.HOME:
o = this._valueMin();
break;
case t.ui.keyCode.END:
o = this._valueMax();
break;
case t.ui.keyCode.PAGE_UP:
o = this._trimAlignValue(i + (this._valueMax() - this
._valueMin()) / this.numPages);
break;
case t.ui.keyCode.PAGE_DOWN:
o = this._trimAlignValue(i - (this._valueMax() - this
._valueMin()) / this.numPages);
break;
case t.ui.keyCode.UP:
case t.ui.keyCode.RIGHT:
if (i === this._valueMax()) return;
o = this._trimAlignValue(i + n);
break;
case t.ui.keyCode.DOWN:
case t.ui.keyCode.LEFT:
if (i === this._valueMin()) return;
o = this._trimAlignValue(i - n)
}
this._slide(e, r, o)
},
keyup: function(e) {
var i = t(e.target).data("ui-slider-handle-index");
this._keySliding && (this._keySliding = !1, this._stop(e, i), this
._change(e, i), this._removeClass(t(e.target), null,
"ui-state-active"))
}
}
})
})
}, function(t, e, i) {
"use strict";
(function(e) {
function o(t, i, o) {
var n = {
saveAsText: $.t("Save As..."),
applyDefaultText: $.t("Apply Defaults")
};
this._toolName = t, this._applyTemplate = i, this._options = $.extend(n, o || {}), this
._list = [], e.enabled("charting_library_base") || (this.templatesDeferred = this
.loadData())
}
var n = i(133).bindPopupMenu,
r = i(154),
s = r.SaveRenameDialog,
a = r.InputField,
l = i(112).createConfirmDialog,
c = i(7).getLogger("Chart.LineToolTemplatesList");
o._cache = {}, o.prototype.getData = function() {
return this._list
}, o.prototype.loadData = function() {
var t = this;
return this._toolName in o._cache ? (this._list = o._cache[this._toolName], $.Deferred()
.resolve()) : $.get("/drawing-templates/" + this._toolName + "/", function(e) {
t._list = e, o._cache[t._toolName] = e
}).error(function() {
c.logWarn("Failed to load drawing template: " + t._toolName)
})
}, o.prototype.templatesLoaded = function() {
return this.templatesDeferred
}, o.prototype.invalidateToolCache = function() {
delete o._cache[this._toolName]
}, o.prototype.createButton = function(t) {
var e, i = this;
return t = $.extend({}, t, i._options),
e = $("<a></span></a>").addClass(t.buttonClass ? t.buttonClass : "_tv-button").html(
t.buttonInner ? t.buttonInner : $.t("Template") + '<span class="icon-dropdown">'
), n(e, null, {
event: "button-popup",
zIndex: t.popupZIndex,
activeClass: t.popupActiveClass,
direction: t.popupDirection
}), e.bind("click", function(e) {
var o, n, r;
e.stopPropagation(), $(this).is("active") || (o = [], "function" == typeof t
.getDataForSaveAs && (n = function(e) {
var o = JSON.stringify(t.getDataForSaveAs());
i.saveTemplate(e, o)
}, o.push({
title: t.saveAsText,
action: i.showSaveDialog.bind(i, n),
addClass: "special"
})), "function" == typeof t.defaultsCallback && o.push({
title: t.applyDefaultText,
action: t.defaultsCallback,
addClass: "special"
}), r = [], $.each(i._list, function(e, o) {
r.push({
title: o,
action: function() {
i.loadTemplate.call(i, o, t
.loadTemplateCallback)
},
deleteAction: function() {
runOrSignIn(function() {
var t = $.t(
"Do you really want to delete Drawing Template '{0}' ?"
).format(o),
e = l({
type: "modal",
content: t
});
e.on("action:yes", function(
t) {
i.removeTemplate
.call(i, o),
t.close()
}), e.open()
}, {
source: "Delete line tool template"
})
}
})
}), r.length && (r.sort(function(t, e) {
return t = t.title.toUpperCase(), e = e.title
.toUpperCase(), t === e ? 0 : t > e ? 1 : -1
}), o.push({
separator: !0
}), o = o.concat(r)), $(this).trigger("button-popup", [o]))
}), e
}, o.prototype.loadTemplate = function(t, e) {
var i = this;
return $.get("/drawing-template/" + this._toolName + "/?templateName=" +
encodeURIComponent(t),
function(t) {
i._applyTemplate(JSON.parse(t.content)), e && e()
}).error(function(t) {
c.logWarn(t.responseText)
})
}, o.prototype.removeTemplate = function(t) {
if (t) {
var e = this;
$.post("/remove-drawing-template/", {
name: t,
tool: e._toolName
}).error(function(t) {
c.logWarn(t.responseText)
}), e.invalidateToolCache(), e._list = $.grep(e._list, function(e) {
return e !== t
})
}
}, o.prototype.saveTemplate = function(t, e) {
var i, o, n, r, s = this;
t && e && (t = TradingView.clean(t), i = -1 !== $.inArray(t, s._list), o = function() {
var o = {
name: t,
tool: s._toolName,
content: e
},
n = function() {
i || s._list.push(t)
};
$.post("/save-drawing-template/", o, n).error(function(t) {
c.logWarn(t.responseText)
}), s.invalidateToolCache()
}, i ? (n = $.t(
"Drawing Template '{0}' already exists. Do you really want to replace it?"
).format(t), r = l({
type: "modal",
content: n
}), r.on("action:yes", function(t) {
o(), t.close()
}), r.open()) : o())
}, o.prototype.deleteAction = function(t) {
var e = t,
i = this;
runOrSignIn(function() {
var t = $.t(" Do you really want to delete Drawing Template '{0}' ?")
.format(e),
o = l({
type: "modal",
content: t
});
o.on("action:yes", function(t) {
i.removeTemplate.call(i, e), t.close()
}), o.open()
}, {
source: "Delete line tool template"
})
}, o.prototype.showSaveDialog = function(t) {
var e = "text",
i = new s({
fields: [new a({
name: e,
label: $.t("Template name") + ":",
maxLength: 64,
error: $.t("Please enter template name")
})],
title: $.t("Save Drawing Template As")
});
runOrSignIn(function() {
i.show().then(function(i) {
t(i[e])
})
}, {
source: "Save line tool template",
sourceMeta: "Chart"
})
}, t.exports = o
}).call(e, i(5))
}, function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
});
! function(t) {
t.offset = 8, t.font = "Arial", t.fontSize = 12, t.lineSpacing = 10,
t.bgColor = "rgba(255,255,255,.8)", t.borderColor = "#e3e3e3", t.padding = 8
}(e.LabelSettings || (e.LabelSettings = {}))
}, , , function(t, e, i) {
"use strict";
! function(t) {
t.fn.selectable = function(e) {
return this.each(function() {
var i = t(this);
i.css("user-select", e ? "text" : "none"), i.css("-moz-user-select", e ?
"text" : "-moz-none"), i.css("-webkit-user-select", e ? "auto" :
"none"), (t.browser.msie || t.browser.opera) && i.attr("unselectable",
e ?
"off" : "on")
})
}
}(jQuery)
}, , function(t, e, i) {
var o, n, r;
! function(s) {
n = [i(13), i(75)], o = s, void 0 !== (r = "function" == typeof o ? o.apply(e, n) : o) && (t
.exports = r)
}(function(t) {
return t.ui.keyCode = {
BACKSPACE: 8,
COMMA: 188,
DELETE: 46,
DOWN: 40,
END: 35,
ENTER: 13,
ESCAPE: 27,
HOME: 36,
LEFT: 37,
PAGE_DOWN: 34,
PAGE_UP: 33,
PERIOD: 190,
RIGHT: 39,
SPACE: 32,
TAB: 9,
UP: 38
}
})
}, function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 16" width="10" height="16"><path d="M.6 1.4l1.4-1.4 8 8-8 8-1.4-1.4 6.389-6.532-6.389-6.668z"/></svg>'
}, function(t, e, i) {
"use strict";
(function(t, o, n) {
function r(e) {
this._chartWidgetCollection = e, this._chartAboutToBeSavedDelegate = new t, this
._chartSavedDelegate = new t, this._chartSizeLimitExceededDelegate = new t
}
function s(t, e, i, o) {
var r, s, a;
o = o || {}, r = {
wl: o.wl,
images: JSON.stringify(t.images()),
previews: o.previews,
onWidget: o.onWidget
}, s = t.activeChartWidget.value().widgetCustomer(), s && (r.customer = s), r.timezone =
t.activeChartWidget.value()._properties.timezone.value(), window.urlParams && window
.urlParams.locale && (r.language = urlParams.locale), a = n.enabled(
"charting_library_base") ? o.snapshotUrl ||
"https://www.tradingview.com/snapshot/" : "/snapshot/", $.post(a, r, function(t) {
t ? e(t) : i()
}).fail(function() {
i()
})
}
var a = i(92);
r.prototype.chartAboutToBeSaved = function() {
return this._chartAboutToBeSavedDelegate
}, r.prototype.chartSaved = function() {
return this._chartSavedDelegate
}, r.prototype.chartSizeLimitExceeded = function() {
return this._chartSizeLimitExceededDelegate
}, r.prototype.whenReadyToSave = function(t) {
var e, i, o = this._chartWidgetCollection,
n = o.activeChartWidget.value(),
r = n.model().mainSeries();
r.symbolInfo() && !r.hasDelayedSymbolIntervalChange() ? t() : (e = null, i = null, e =
function() {
r.onSymbolError().unsubscribe(null, i, !0), t()
}, i = function() {
r.onSymbolResolved().unsubscribe(null, e, !0)
}, r.onSymbolResolved().subscribe(null, e, !0), r.onSymbolError().subscribe(
null, i, !0))
}, r.prototype.saveToJSON = function() {
return this._fillSavingInfo(!1, !0)
}, r.prototype._fillAsyncInfo = function(t, e, i) {
function o(e) {
t.content = JSON.stringify($.extend(!0, r, e)), n.resolve(t)
}
var n, r = JSON.parse(t.content),
s = this._chartWidgetCollection;
return e || (i = !0), n = $.Deferred(), i ? s.asyncState(!!e).then(o) : s
.activeChartWidget.value().asyncState(!!e).then(o), n.promise()
}, r.prototype._fillSavingInfo = function(t, e, i) {
var o, n, r, s, a, l, c, h, u, d, p, _;
if (t || (e = !0), o = {
publish_request_id: Math.random().toString(36).substring(2)
}, n = this._chartWidgetCollection, r = n.activeChartWidget.value(), s = n.metaInfo,
a = r.model().mainSeries(), l = a.properties(), c = a.symbolInfo(), s.id.value() &&
(o.id = s.id.value()), o.name = s.name.value() || "", o.description = s.description
.value() || "",
o.resolution = a.properties().interval.value(), o.symbol_type = null !== c && c
.type || "", o.exchange = null !== c && c.exchange || "", o.listed_exchange =
null !== c && c.listed_exchange || "", null !== c && a.isSpread() ? (h = c.legs[0],
u = c.base_name[0], u = u.split(":")[1], o.symbol = h, o.short_name = u, o
.expression = c.full_name) : (o.symbol = null !== c && c.ticker || l.symbol
.value(), o.short_name = l.shortName.value()), null !== c) {
for (d = [], p = 0, _ = c.legs.length; p < _; p++) d.push({
symbol: c.legs[p],
pro_symbol: c.base_name[p]
});
o.legs = JSON.stringify(d)
} else o.legs = JSON.stringify([]);
return o.content = e ? JSON.stringify(n.state(!!t, i)) : JSON.stringify(r.state(!!t,
i)), t && (o.image = JSON.stringify(n.images({
onlyActiveChart: !e
}))), o.is_realtime = t ? "0" : "1", o
}, r.prototype.publishChart = function(t) {}, r.prototype.publishScript = function(t, e,
i) {
var o, n, r, s, a = this;
a._scriptPublisher ? a._scriptPublisher.openPublication(t, e) : (o = i.ScriptPublisher,
n = i.ScriptsProvider, r = i.CategoriesProvider, s = new n({
publish: function(t) {
return new Promise(function(e, i) {
var o = {
closeForm: function() {
if (t && t.scriptPublication && t
.scriptPublication
.updateScriptIdPart) {
var i = t.scriptPublication
.updateScriptIdPart;
publishedScripts
.invalidateCache([i]),
window.studyMarket && (
window.studyMarket
.resetAllPages(), window
.studyMarket
.updateFavorites())
}
e()
},
showError: function(t) {
i(t)
}
};
a.onPublish(t, o)
})
}
}), a._scriptPublisher = new o({
scriptsProvider: s,
categoriesProvider: new r
}), a._scriptPublisher.openPublication(t, e))
}, r.prototype.onPublish = function(t, e) {
function i(i) {
var n, r, s, l, c, h;
a.publishInProgress = !1, n = i.responseText || i, "ok:" === n.substr(0, 3) ? (r = !
1, e.savePrivacySetting && (r = !t.is_public, TVSettings.setValue(
"publishchart.private", r)), kmRecord("Chart", "{0} Published".format(
void 0 === t.script_type ? "Chart" : "Script"), {
is_private: r
}), s = n.substr(3), l = JSON.parse(s), a._chartWidgetCollection.metaInfo.id
.value() || a._chartWidgetCollection.metaInfo.id.setValue(l.id), e
.closeForm && e.closeForm(), a._lastPublishUrl = l.publishUrl, a.hWnd && (
c = l.publishUrl, e.ideaUrl && (c = o.render(e.ideaUrl, {
idea: l.idea
})), a.hWnd.location = c)) : (e.showError && ((413 === i.status ||
/^[\d\s]*request.+large/i.test(n.trim())) && (n = window.t(
"This chart layout has a lot of objects and can't be published! Please remove some drawings and/or studies from this chart layout and try to publish it again."
)), h = {
html: !0
}, e.showError(n || $.t("Error occured while publishing"), h)), a.hWnd && (a
.hWnd.close(), a.hWnd = null))
}
var n, r, s, a = this;
a.publishInProgress || (n = a._fillSavingInfo(!0, e && e.publishAllLayout, !0), a
._fillAsyncInfo(n, !0, e && e.publishAllLayout).then(function(e) {
var o = t.scriptPublication,
n = !(!o || !o.updateScriptIdPart),
r = new Promise(function(t, e) {
if (o) {
var i;
i = n ? ScriptLib.publishNext(o.scriptSource, o
.updateScriptIdPart) : ScriptLib.publishNew(o
.scriptSource, o.scriptProtection), i.done(
function(e) {
n || o.scriptProtection !== TVScript.Access
.ACCESS_CLOSED_NEEDS_AUTH || PinePerm
.add(window.user.username, e.pineId), t(
e.publishedstudyscript_id)
}).fail(e)
} else t()
});
n ? r.then(function(o) {
var n = {
publishedstudyscript_id: o,
description: t.description,
tags: t.tags
};
$.ajax({
url: "/script-update/",
type: "post",
dataType: "text",
data: $.extend({}, e, n),
complete: i
})
}, i) : r.then(function(o) {
o && (t.publishedstudyscript_id = o), $.ajax({
url: "/publishchart/",
type: "post",
dataType: "text",
data: $.extend({}, e, t),
complete: i
})
}, i)
}), a.publishInProgress = !0, e.onWidget && !e.ideaUrl || "" !== t.name &&
"" !== t.description && t.description.length <= 4e3 && t.name.length <= 64 && ($
.cookie("publish_request_id", n.publish_request_id, {
path: "/"
}), r = "/loading/", e.ideaUrl && (s = urlParams.createUrlParams({
ideaUrl: e.ideaUrl
}), r = "/loading?" + s), a.hWnd = window.open(r, "_blank")))
}, r.prototype._saveChart = function(t, e, i, o, n) {
var r = i,
s = o;
return r = function(t) {
e.id.value() || (e.id.setValue(t), e.uid.setValue(t)), "function" == typeof i &&
i()
}, a.saveChart(t.name, t.short_name, t.resolution, t, e, r, s.bind(this))
}, r.prototype.saveChartSilently = function(t, e, i, o) {
var n = this._chartWidgetCollection.metaInfo,
r = this._fillSavingInfo(e);
if (o = o || {}, o.chartName && (r.name = o.chartName), r.name && 0 !== r.name.length ||
!o.defaultChartName || (r.name = o.defaultChartName), !r.name) return void console
.warn("Saving chart with empty name is not allowed");
$(window).on("beforeunload.savechart", function() {
return $.t(
"Your chart is being saved, please wait a moment before you leave this page."
)
}), this._chartAboutToBeSavedDelegate.fire(), this._saveChart(r, n, function() {
this._chartWidgetCollection.metaInfo.name.setValue(r.name), this
._chartSavedDelegate.fire(!0), t && t(n)
}.bind(this), function() {
this._chartSavedDelegate.fire(!1), i && i.apply(null, arguments)
}.bind(this), o), $(window).off("beforeunload.savechart")
}, e.ChartSaver = r, e.takeSnapshot = s
}).call(e, i(10), i(41), i(5))
}, function(t, e, i) {
"use strict";
function o(t) {
var e, i;
if (t && t.__esModule) return t;
if (e = {}, null != t)
for (i in t) Object.prototype.hasOwnProperty.call(t, i) && (e[i] = t[i]);
return e.default = t, e
}
function n(t, e) {
if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
}
var r, s, a, l, c, h, u, d;
Object.defineProperty(e, "__esModule", {
value: !0
}), e.DropdownView = void 0, r = function() {
function t(t, e) {
var i, o;
for (i = 0; i < e.length; i++) o = e[i], o.enumerable = o.enumerable || !1, o
.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key,
o)
}
return function(e, i, o) {
return i && t(e.prototype, i), o && t(e, o), e
}
}(), i(750), s = i(203), a = i(31), l = o(a), c = i(173), h = i(123), u = o(h), d = e.DropdownView =
function() {
function t(e) {
var i = this,
o = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
n(this, t), this.$el = e, this.$wrap = o.$wrap || e.find(".tv-dropdown-behavior__button"),
this.$body = o.$body || e.find(".tv-dropdown-behavior__body"), this.notCloseWithCtrl = !
!o.notCloseWithCtrl && o.notCloseWithCtrl, this.closeWithEsc = void 0 === o
.closeWithEsc || o.closeWithEsc, this.animationDisabled = !0 === o.noAnimation, this
.closeWithEsc && this.$el.attr("tabIndex", 0), this.animationDisabled || this.$body
.addClass("tv-dropdown-behavior__body--animated"), (e.data("scroll") || o.scroll) && (
this.$scroll = this.$body.find(".tv-dropdown-behavior__scroll"), this.$inScroll =
this.$scroll.find(".tv-dropdown-behavior__inscroll"), this.scroll = new c
.SidebarCustomScroll(this.$scroll, this.$inScroll, {
showTopShadow: !1,
showBottomShadow: !1
}),
this.$scrollBar = this.scroll.getScrollBar(), this.$scrollBar && this.$scrollBar.on(
"mousedown.tv-dropdown-view-scroll",
function() {
i.offClickOutside(), $(document).on("mouseup.tv-dropdown-view-scroll",
function() {
i.onClickOutside(), $(document).off(
"mouseup.tv-dropdown-view-scroll")
})
})), (e.data("adaptBody") || o.adaptBody) && (this._adaptBody = !0), this
._fitScreen = e.data("fitScreen") || o.fitScreen, this.$wrap.add(e.find(
".js-dropdown-toggle")).on("click", function(t) {
$(t.currentTarget).hasClass("js-prevent-dropdown") || i.toggle()
})
}
return r(t, [{
key: "toggle",
value: function() {
this.opened ? this.close(!0) : this.open()
}
}, {
key: "open",
value: function() {
var t = this;
this.animating || this.opened || this.disabled || (this.$el.trigger(
"beforeOpenMenu"), this.$body.removeClass("i-hidden"), this
.$wrap.addClass("i-dropped"), this.$el.addClass("i-opened"),
"horz" === this._fitScreen && this.fitHorizontally(), this
._adaptBody && this.adaptBody(), this.updateDelays(), this
.onClickOutside(), this._doOpenAnimation().then(function() {
t.$body.addClass("i-opened"), t.$el.trigger(
"updateScroll"), t.$el.trigger("afterOpenMenu"),
t.opened = !0
}), this.closeWithEsc && this.$el.on("keypress keyup", function(
e) {
e.keyCode === u.ESC && t.close(!0)
}))
}
}, {
key: "onClickOutside",
value: function() {
var t = this;
setTimeout(function() {
t.$body.on("clickoutside", function() {
t.close(!0)
})
}, 0)
}
}, {
key: "offClickOutside",
value: function() {
this.$body.off("clickoutside")
}
}, {
key: "close",
value: function() {
var t = this,
e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0];
this.animating || !this.opened || this.disabled || !e && this
.notCloseWithCtrl && (window.event.ctrlKey || window.event
.metaKey) || (this.offClickOutside(), this.$wrap.removeClass(
"i-dropped"), this.$el.trigger("beforeCloseMenu"), this
._doCloseAnimation().then(function() {
t.$body.removeClass("i-opened").addClass("i-hidden"), t
.$el.removeClass("i-opened").trigger(
"afterCloseMenu"), t.opened = !1
}), this.closeWithEsc && this.$el.off("keypress keyup"))
}
}, {
key: "isOpened",
value: function() {
return this.opened
}
}, {
key: "updateScroll",
value: function() {
this.scroll && (this.scroll.updateScrollBar(), this.scroll
.scrollToStart())
}
}, {
key: "updateDelays",
value: function() {
var t, e, i, o, n;
this.animationDisabled || (t = this.$scroll || this.$body, e = t
.offset().top, i = t.outerHeight(), o = this.$body.find(
".tv-dropdown-behavior__item").filter(function(t, o) {
var n = $(o),
r = n.offset().top;
return r + n.outerHeight() >= e && r < e + i
}), n = this.$el.data("item-coeff") ? parseFloat(this.$el.data(
"item-coeff")) : 1, o.each(function(t, e) {
var i = l.easingFunc.easeInQuad(t / o.length) * (.045 *
l.dur * n * o.length) + .375 * l.dur + "ms";
$(e).css({
"transition-delay": i,
"-o-transition-delay": i,
"-ms-transition-delay": i,
"-moz-transition-delay": i,
"-webkit-transition-delay": i
})
}))
}
}, {
key: "enable",
value: function() {
this.$wrap.removeClass("i-disabled"), this.disabled = !1
}
}, {
key: "disable",
value: function() {
this.$wrap.addClass("i-disabled"), this.disabled = !0
}
}, {
key: "adaptBody",
value: function() {
function t() {
a.height("auto")
}
function e(t) {
var e = "tv-dropdown-behavior__body--from_top",
i = "tv-dropdown-behavior__body--from_top-right",
o = "tv-dropdown-behavior__body--from_bottom",
n = "tv-dropdown-behavior__body--from_bottom-right",
r = void 0,
s = void 0;
a.hasClass(e) && "bottom" === t ? (r = e, s = o) : a.hasClass(i) &&
"bottom" === t ? (r = i, s = n) : a.hasClass(o) && "top" === t ?
(r = o, s = e) : a.hasClass(n) && "top" === t && (r = n, s = i),
r !== s && a.removeClass(r).addClass(s)
}
var i, o, n, r, s = 15,
a = this.$body,
l = this.$wrap.get(0).getBoundingClientRect(),
c = window.innerHeight,
h = this.$inScroll.outerHeight(!0),
u = parseFloat(a.css("padding-top"));
h += u, i = parseFloat(a.css("padding-bottom")), h += i, o = l.top + h +
s <= c, n = h + s <= l.bottom, r = void 0, o ? (r = 0 - u, t(), e(
"top")) : n ? (r = -h + i, t(), e("bottom")) : (r = -l.top + s,
c <= h && a.height(c - 2 * s)), a.css("top", r)
}
}, {
key: "_doOpenAnimation",
value: function() {
var t = this;
return new Promise(function(e) {
t.animationDisabled ? e() : (t.animating = !0, setTimeout(
function() {
t.animating = !1, e()
}, 20))
})
}
}, {
key: "_doCloseAnimation",
value: function() {
var t = this;
return new Promise(function(e) {
t.animationDisabled ? e() : (t.animating = !0, t.$body
.addClass("i-closing"), t.$el.addClass("i-closing"),
setTimeout(function() {
t.$body.removeClass("i-closing"), t.$el
.removeClass("i-closing"), t
.animating = !1, e()
}, l.dur))
})
}
}, {
key: "fitHorizontally",
value: function() {
var t, e, i, o;
this.$body.css("marginLeft", 0), t = document.body
.getBoundingClientRect(), e = parseFloat($(document.body).css(
"paddingRight")), i = this.$body.offset(), i.right = i.left +
this.$body.outerWidth(), (o = Math.max(Math.min(0, t.right - e - i
.right), t.left - i.left)) && this.$body.css("marginLeft", o)
}
}, {
key: "destroy",
value: function() {
this.scroll && this.scroll.destroy(), this.offClickOutside(), this.$el
.find(".js-dropdown-toggle").off("click"), this.$wrap.off("click")
}
}]), t
}(), $.fn.tvDropdown = (0, s.createTvBlockWithInstance)("tv-dropdown", function(t) {
var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
return new d(t, e)
})
}, function(t, e, i) {
"use strict";
function o(t, e) {
if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
}
var n;
Object.defineProperty(e, "__esModule", {
value: !0
}), n = function() {
function t(t, e) {
var i, o;
for (i = 0; i < e.length; i++) o = e[i], o.enumerable = o.enumerable || !1, o
.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key,
o)
}
return function(e, i, o) {
return i && t(e.prototype, i), o && t(e, o), e
}
}(), e.InputField = function() {
function t(e) {
var i = e.label,
n = e.name,
r = e.maxLength,
s = e.error,
a = void 0 === s ? "" : s;
o(this, t), this._name = n, this._$field = $(
'<label class="tv-rename-chart-dialog__field">\n\t\t\t\t<span class="tv-rename-chart-dialog__label">' +
i + '</span>\n\t\t\t\t<input class="tv-control-input" type="text" name="' + n +
'" maxlength="' + r + '"/>\n\t\t\t</label>'), this._$input = this._$field.find(
"input"), this._error = a
}
return n(t, [{
key: "appendTo",
value: function(t) {
t.append(this._$field)
}
}, {
key: "focus",
value: function() {
return this._$input.focus()
}
}, {
key: "select",
value: function() {
return this.focus().select()
}
}, {
key: "value",
set: function(t) {
this._$input.val(t)
},
get: function() {
return this._$input.val()
}
}, {
key: "name",
get: function() {
return this._name
}
}, {
key: "valid",
get: function() {
return !!this._$input.val().trim()
}
}, {
key: "error",
set: function(t) {
this._error = t
},
get: function() {
return this._error
}
}]), t
}()
}, function(t, e, i) {
"use strict";
function o(t, e) {
if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
}
var n, r;
Object.defineProperty(e, "__esModule", {
value: !0
}), e.SaveRenameDialog = void 0, n = function() {
function t(t, e) {
var i, o;
for (i = 0; i < e.length; i++) o = e[i], o.enumerable = o.enumerable || !1, o
.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key,
o)
}
return function(e, i, o) {
return i && t(e.prototype, i), o && t(e, o), e
}
}(), i(758), r = i(65), e.SaveRenameDialog = function() {
function t() {
var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
i = e.fields,
n = e.title,
r = void 0 === n ? "" : n,
s = e.destroyOnClose,
a = void 0 === s || s,
l = e.modal,
c = void 0 !== l && l;
o(this, t), this._$form = $("<div></div>"), this._fields = i, this._appendFieldsToForm(),
this._title = r, this._destroyOnClose = a, this._modal = c
}
return n(t, [{
key: "setField",
value: function(t, e) {
this._fields.find(function(e) {
return e.name === t
}).value = e
}
}, {
key: "show",
value: function() {
var t = this,
e = this._createDialog(),
i = new Promise(function(i) {
e.on("action:submit", function(e) {
return t._onSubmit(e, i)
})
});
return e.open(), this._fields[0].select(), i
}
}, {
key: "_appendFieldsToForm",
value: function() {
var t = this;
this._fields.forEach(function(e) {
e.appendTo(t._$form)
})
}
}, {
key: "_createDialog",
value: function() {
return (0, r.createDialog)({
type: this._modal ? "modal" : "popup",
title: this._title,
content: this._$form,
actionsWrapTemplate: '<div class="tv-dialog__section tv-dialog__section--actions i-align_right tv-dialog__section--no-border">',
width: 470,
destroyOnClose: this._destroyOnClose,
actions: [{
name: "submit",
type: "primary",
text: $.t("Save"),
key: 13,
addClass: "js-submit-button"
}, {
name: "cancel",
type: "default",
text: $.t("Cancel"),
method: "close",
addClass: "js-cancel-button"
}]
})
}
}, {
key: "_onSubmit",
value: function(t, e) {
var i = this._validate();
i ? (t.error(i.error), i.focus()) : (e(this._collectValues(), t), t
.close())
}
}, {
key: "_validate",
value: function() {
return this._fields.find(function(t) {
return !t.valid
})
}
}, {
key: "_collectValues",
value: function() {
return this._fields.reduce(function(t, e) {
return t[e.name] = e.value, t
}, {})
}
}]), t
}()
}, function(t, e, i) {
"use strict";
(function(e, o, n) {
function r() {
this.title = $.t("Load Chart Layout"), this._removeDialogShown = !1, this.options = {}, this
.matchedItems = [], this.itemsData = [], this.qs = new r.QuickSearch(this
.fieldsExtractor, this.searchResult.bind(this)), this.sortObj = new r.SortObject(
this.modifiedCompare), this.nameSort = new r.SortObject(this.nameCompare), this
.symbolSort = new r.SortObject(this.symbolCompare), this.toolsSort = new r.SortObject(
this.toolsCompare), this.offset = 0, h.on("chart_loaded", r.onChartLoaded, this)
}
function s(t) {
return t.getAttribute("data-id")
}
var a, l, c, h = i(23),
u = i(65).createDialog,
d = i(316).createSearchControl,
p = i(200).regExpEscape;
a = '<div class="js-table-row tv-load-chart-dialog-table__row tv-load-chart-dialog-table__row--item {{^withFavs}}tv-load-chart-dialog-table__row--item-without-favs{{/withFavs}} {{#isActive}}i-active{{/isActive}}" data-id="{{id}}">{{#withFavs}}<div class="tv-load-chart-dialog-table__favorite-icon-container {{#starred}}i-starred{{/starred}}" ><span data-id="{{id}}" class="js-empty-star tv-load-chart-dialog-table__star-icon tv-load-chart-dialog-table__star-icon--empty" title="' +
$.t("Add to favorites") + '">' + i(210) +
'</span><span data-id="{{id}}" class="js-filled-star tv-load-chart-dialog-table__star-icon tv-load-chart-dialog-table__star-icon--filled" title="' +
$.t("Remove from favorites") + '">' + i(209) +
'</span></div>{{/withFavs}}<div class="js-column-name tv-load-chart-dialog-table__column tv-load-chart-dialog-table__column--item tv-load-chart-dialog-table__column-name">{{title}}</div><div class="js-column-modified tv-load-chart-dialog-table__column tv-load-chart-dialog-table__column--item tv-load-chart-dialog-table__column-modified">{{modifiedDate}}</div><div class="js-column-symbol tv-load-chart-dialog-table__column tv-load-chart-dialog-table__column--item tv-load-chart-dialog-table__column-symbol">{{chartSymbol}}</div><div data-id="{{id}}" class="js-remove-button tv-load-chart-dialog-table__column-name-action tv-load-chart-dialog-table__remove-icon" title="' +
$.t("Delete chart layout") + '">' + i(169) + "</div></div>", l =
'<div class="tv-load-chart-dialog-table__row tv-load-chart-dialog-table__row--header"><div class="js-column-name tv-load-chart-dialog-table__column tv-load-chart-dialog-table__column--header tv-load-chart-dialog-table__column-name">' +
$.t("Chart Layout Name") +
'<span class="tv-caret tv-load-chart-dialog-table__caret"></span></div><div class="js-column-modified tv-load-chart-dialog-table__column tv-load-chart-dialog-table__column--header tv-load-chart-dialog-table__column-modified">' +
$.t("Last Modified") +
'<span class="tv-caret tv-load-chart-dialog-table__caret"></span></div><div class="js-column-symbol tv-load-chart-dialog-table__column tv-load-chart-dialog-table__column--header tv-load-chart-dialog-table__column-symbol">' +
$.t("Active Symbol") +
'<span class="tv-caret tv-load-chart-dialog-table__caret"></span></div></div>', c = 50, r
.onChartLoaded = function() {
this.itemsData && this.itemsData.length > 0 && this._refreshChartsList()
}, r.QuickSearch = function(t, e) {
this.fieldsExtractor = t, this.callback = e, this.regExps = []
}, r.QuickSearch.prototype.onInput = function(t) {
this.query = t, this.createRegexps(t), this.search()
}, r.QuickSearch.prototype.createRegexps = function(t) {
this.regExps = [], t && this.regExps.push(RegExp("(" + t.split("").map(function(t) {
return p(t)
}).join(")(.*?)(") + ")", "i"))
}, r.QuickSearch.prototype.match = function(t) {
var e, i, o, n;
for (e = 0; e < this.regExps.length; e++)
for (i = this.regExps[e], i.lastIndex = 0, o = this.fieldsExtractor(t), n = 0; n < o
.length; n++)
if (i.test(o[n])) return !0;
return 0 === this.regExps.length
}, r.QuickSearch.prototype.search = function() {
var t, e, i = [];
for (t = 0; t < this.items.length; t++) e = this.items[t], this.match(e) && i.push(e);
this.callback(i, this.regExps)
}, r.QuickSearch.prototype.setItems = function(t) {
this.items = t
}, r.SortObject = function(t, e) {
this.isAscending = !1, this.sortingFunc = t, this.getPredicate = function() {
return function(t, e) {
var i = this.sortingFunc(t, e);
return this.isAscending && (i *= -1), i
}.bind(this)
}, this.inverse = function() {
this.isAscending = !this.isAscending
}, this.setIsAscending = function(t) {
return "boolean" == typeof t && (this.isAscending = t), this.isAscending
}, this.reset = function() {
this.isAscending = !1
}
}, r.prototype.fieldsExtractor = function(t) {
var e = r.symbolWrap(t);
return [t.title, e]
}, r.prototype.saveFavorite = function(t, e) {
e ? this.favorites[t] = e : delete this.favorites[t]
}, r.prototype.filterFavorites = function() {
var t = {};
this.itemsData.map(function(e) {
this.favorites.hasOwnProperty(e.id) && (t[e.id] = !0)
}.bind(this)), this.favorites = t
}, r.prototype.getFavorite = function(t) {
return this.favorites.hasOwnProperty(t)
}, r.prototype._onFavoriteClicked = function(t, e, i) {
this.saveFavorite(t.id, e), this.filterFavorites(), this.fillList(), t.favoriteAction(
this.favorites), i.preventDefault()
}, r.prototype._onItemClicked = function(t, e) {
e.defaultPrevented || (e.preventDefault(), t.openAction())
}, r.prototype._onRemoveButtonClicked = function(t, e) {
var i = this,
o = $.Deferred();
this._removeDialogShown = !0, o.done(function() {
i.removeItem(t)
}).always(function() {
setTimeout(function() {
i._removeDialogShown = !1
})
}), t.deleteAction(o, t.title), e.preventDefault()
}, r.prototype._createListItem = function(t) {
return e.render(a, {
id: t.id,
isActive: t.active(),
title: t.title,
url: t.url,
withFavs: o.enabled("items_favoriting"),
starred: this.getFavorite(t.id),
modifiedDate: n.unix(t.modified).format("L LT"),
chartSymbol: "" === t.symbol ? "multiple charts" : t.symbol + ", " + t
.interval
})
}, r.prototype.removeItem = function(t) {
var e = this.itemsData.indexOf(t);
e > -1 && this.itemsData.splice(e, 1), this.setChartsData(this.itemsData)
}, r.prototype.modifiedCompare = function(t, e) {
var i = t.modified,
o = e.modified;
return n(o).diff(n(i))
}, r.prototype.nameCompare = function(t, e) {
return t.title.localeCompare(e.title)
}, r.symbolWrap = function(t) {
return "" === t.symbol ? "multiple charts" : t.symbol + " " + t.interval
}, r.prototype.symbolCompare = function(t, e) {
return r.symbolWrap(t).localeCompare(r.symbolWrap(e))
}, r.prototype.toolsCompare = function(t, e) {
var i = t.toolsCount,
o = e.toolsCount;
return i < o ? -1 : i === o ? 0 : 1
}, r.prototype.sortClick = function(t) {
this.setSort($(t.target).data("sort"), !0), this.fillList()
}, r.prototype.setSort = function(t, e) {
var i, o, n = {
field: TVSettings.getValue("loadChartDialog.sort.field") || "modified",
isAscending: TVSettings.getValue("loadChartDialog.sort.asc") || "0"
},
r = t || n.field,
s = e ? "0" === n.isAscending ? "1" : "0" : n.isAscending;
this.currentSortObj && !(i = r !== n.field) || (this.currentSortObj = "name" === r ?
this.nameSort : "symbol" === r ? this.symbolSort : "tools" === r ? this
.toolsSort : this.sortObj, i && TVSettings.setValue(
"loadChartDialog.sort.field", r)), this.currentSortObj.setIsAscending(
"1" === s), s !== n.isAscending && TVSettings.setValue(
"loadChartDialog.sort.asc", s), o = this, $.each(this.header.children(
".tv-load-chart-dialog-table__column--header"), function() {
var t = $(this),
e = t.data("sort") === r;
t.removeClass("i-active i-dropped"), e && t.addClass("i-active " + (o
.currentSortObj.isAscending ? "" : "i-dropped"))
})
}, r.prototype.sortList = function() {
var t, e = [],
i = [];
this.matchedItems.map(function(t) {
this.favorites.hasOwnProperty(t.id) ? e.push(t) : i.push(t)
}.bind(this)), void 0 !== this.currentSortObj && (t = this.currentSortObj
.getPredicate(), i.sort(t), e.sort(t)), this.matchedItems = e.concat(i)
}, r.prototype.showMoreData = function() {
var t, e, i;
if (!(this.offset >= this.matchedItems.length)) {
for (t = Math.min(this.offset + c, this.matchedItems.length), e = "", i = this
.offset; i < t; ++i) e += this._createListItem(this.matchedItems[i]);
this.itemsList[0].insertAdjacentHTML("beforeend", e), this.offset += c
}
}, r.prototype.fillList = function() {
this.sortList(), this.offset = 0, this.itemsList[0].innerHTML = "", this.showMoreData(),
this.itemsListContainer.toggleClass("i-empty", 0 === this.itemsData.length), this
.highlightOccurrences(this.qs.regExps), this._dialog && (this.itemsListContainer[0]
.scrollTop = 0)
}, r.prototype.searchResult = function(t, e) {
this.matchedItems = t, this.fillList()
}, r.prototype.updateChartsData = function(t) {
this.setChartsData(t)
}, r.prototype.updateFavoritesData = function(t) {
this.favorites = t, this.itemsList && this.qs.search()
}, r.prototype.updateChartsAndFavoritesData = function(t, e) {
this.favorites = e, this.itemsList && (this.itemsData = t, this.qs.setItems(t), this.qs
.search())
}, r.prototype._refreshChartsList = function() {
this.qs.setItems(this.itemsData), this.qs.search()
}, r.prototype.setChartsData = function(t) {
this.itemsList && (this.itemsData = t, this.qs.setItems(t), this.qs.search())
}, r.prototype.layoutHeader = function() {
var t = $(l);
return t.find(".js-column-name").data("sort", "name"), t.find(".js-column-modified")
.data("sort", "modified"), t.find(".js-column-symbol").data("sort", "symbol"), t
.appendTo(this.content), t
}, r.prototype.resetSort = function() {
this.sortObj.reset(), this.nameSort.reset(), this.symbolSort.reset(), this.toolsSort
.reset(), this.currentSortObj = this.sortObj
}, r.prototype._findItemById = function(t) {
var e = +t;
return this.itemsData.find(function(i) {
return i.id === e || i.id === t
})
}, r.prototype.show = function(t, e) {
var i = this,
n = d({
placeholder: $.t("Search")
}),
r = $("<div>");
r.append(n.$control), r.append('<div class="tv-load-chart-dialog-table">'), this
.content = $("<div>").appendTo(r.find(".tv-load-chart-dialog-table")), this.header =
this.layoutHeader(), this.setSort(), this.itemsListContainer = $(
'<div class="tv-load-chart-dialog-table__items-list-container">').data({
localScroll: !0
}).appendTo(this.content), this.itemsList = $(
'<div class="tv-load-chart-dialog-table__items-list">').appendTo(this
.itemsListContainer), $(
'<div class="tv-load-chart-dialog-table__empty-list-placeholder">').text($.t(
"There are no saved charts")).appendTo(this.itemsListContainer), this
.itemsListContainer.on("click", ".js-remove-button", function(t) {
var e = i._findItemById(s(t.currentTarget));
i._onRemoveButtonClicked(e, t), t.stopPropagation()
}).on("click", ".js-table-row", function(t) {
var e = i._findItemById(s(t.currentTarget));
i._onItemClicked(e, t), t.preventDefault()
}).on("scrolltoend", function() {
i.showMoreData()
}), o.enabled("items_favoriting") && this.itemsListContainer.on("click",
".js-empty-star",
function(t) {
var e = i._findItemById(s(t.currentTarget));
i._onFavoriteClicked(e, !0, t), t.stopPropagation()
}).on("click", ".js-filled-star", function(t) {
var e = i._findItemById(s(t.currentTarget));
i._onFavoriteClicked(e, !1, t), t.stopPropagation()
}), this.header.children(".tv-load-chart-dialog-table__column--header").click($
.proxy(this, "sortClick")), n.inputChangedDelegate.subscribe(this.qs, this.qs
.onInput), this.favorites = e, this.setChartsData(t), this.qs.onInput(""), this
._dialog && this._dialog.close(), this._dialog = u({
title: this.title,
width: 600,
height: 550,
content: r,
contentWrapTemplate: "<div>",
destroyOnClose: !0,
withScroll: !1,
isClickOutFn: function() {
return !this._removeDialogShown && void 0
}.bind(this)
}), this._dialog.open()
}, r.prototype.highlightOccurrences = function(t) {
0 !== t.length && this.itemsList.children(".js-table-row").each(function() {
var e, i = $(this).find(".js-column-name"),
o = i.text();
o = r.highlightText(o, t), i.html(o), e = $(this).find(".js-column-symbol"),
o = e.text(), o = r.highlightText(o, t), e.html(o)
})
}, r.highlightText = function(t, e) {
var i, o, n, r, s, a;
if (t = $("<div>").text(t).html(), 0 === e.length) return t;
for (i = 0; i < e.length; i++) {
if (o = e[i], o.lastIndex = 0, n = "", r = "", (s = o.exec(t)) && s.length)
for (a = 1; a < s.length; a++) n += a % 2 ? '<span class="i-match">$' + a +
"</span>" : "$" + a;
if ((r = t.replace(o, n)) && r !== t) return r
}
}, t.exports = r
}).call(e, i(41), i(5), i(38))
}, function(t, e, i) {
"use strict";
function o(t, e, i, o) {
var s = (0, n.createConfirmDialog)({
type: "modal",
content: document.createTextNode($.t(
"Do you really want to delete Chart Layout '{0}' ?").format(t)),
addClass: "delete-chart-dialog"
}),
a = function() {
var t = o;
o = null, t && t()
};
s.on("action:yes", function() {
o = null, r.removeChart(e, i), s.close()
}), s.on("action:no", a), s.on("afterClose", a), s.open()
}
var n, r;
Object.defineProperty(e, "__esModule", {
value: !0
}), e.deleteChart = o, n = i(112), r = i(92)
}, function(t, e, i) {
"use strict";
function o(t) {
l.call(this, t), this.ch = t.char[0] || " ", this.fontFamily = t.fontFamily || "Arial", this
._charCache = new a(this.ch, !1, !1, this.fontFamily, this.height)
}
var n = i(8).Point,
r = i(45).selectionTolerance,
s = i(11),
a = i(327),
l = i(56).PaneRendererAbstractShape;
inherit(o, l), o.prototype.drawShape = function(t) {
var e, i, o, n, r, s, a = this._vertOffset > 0 ? 1 : -1;
for (e = 0, i = this.items.length; e < i; e++) o = this.items[e], n = o.x, r = o.y + this
._vertOffset - a * Math.round(this.height / 2), s = o.style && null != o.style.color ? o
.style.color : this._color, this._charCache.paintTo(t, s, n, r, "center", this._vertOffset >
0 ? "middle" : "bottom")
}, o.prototype.hitTest = function(t) {
var e, i, o, a = this._vertOffset,
l = r(this.height);
for (e = 0; e < this.items.length; ++e)
if ((i = this.items[e]) && (o = new n(i.x, i.y + a), o.subtract(t).length() <= l))
return new s(s.REGULAR);
return null
}, e.PaneRendererUnicodeChar = TradingView.PaneRendererUnicodeChar = o
}, , , , , , function(t, e, i) {
"use strict";
function o(t, e, i) {
this._textSizeCache = e, this._data = t, this._fontSize = t.fontsize ? t.fontsize : t.fontSize ? t
.fontSize : 12, this._lineSpacing = "number" == typeof this._data.lineSpacing && this._data
.lineSpacing ? this._data.lineSpacing : 0,
t.lines = this._lines = l.prototype.wordWrap.call(this, t.text, t.wordWrapWidth), this
._hittest = i || new c(c.MOVEPOINT)
}
function n() {
var t = document.createElement("canvas");
t.width = 0, t.height = 0, r = t.getContext("2d"), t = null
}
var r, s = i(8).Point,
a = i(60).pointInRectangle,
l = i(166).TextRenderer,
c = i(11),
h = {
priceRange: {
width: 15,
height: 14,
data: [134, 134, 138, 255, 134, 134, 138, 255, 134, 134, 138, 255, 134, 134, 138, 255, 134,
134, 138, 255, 134, 134, 138, 255, 134, 134, 138, 255, 134, 134, 138, 255, 134, 134,
138, 255, 134, 134, 138, 255, 134, 134, 138, 255, 134, 134, 138, 255, 134, 134, 138,
255, 134, 134, 138, 255, 134, 134, 138, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, 138, 255, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, 138,
255, 134, 134, 138, 255, 134, 134, 138, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 134, 134, 138, 255, 134, 134, 138, 255, 134, 134, 138, 255, 134, 134, 138,
255, 134, 134, 138, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
134, 134, 138, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 134, 134, 138, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, 138, 255, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, 138, 255,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, 138, 255, 134,
134, 138, 255, 134, 134, 138, 255, 134, 134, 138, 255, 134, 134, 138, 255, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, 138, 255, 134, 134, 138, 255, 134,
134, 138, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 134, 134, 138, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, 138, 255, 134, 134, 138, 255, 134,
134, 138, 255, 134, 134, 138, 255, 134, 134, 138, 255, 134, 134, 138, 255, 134, 134,
138, 255, 134, 134, 138, 255, 134, 134, 138, 255, 134, 134, 138, 255, 134, 134, 138,
255, 134, 134, 138, 255, 134, 134, 138, 255, 134, 134, 138, 255, 134, 134, 138, 255
]
},
barsRange: {
width: 16,
height: 15,
data: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
134, 134, 138, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, 138, 255, 0, 0, 0, 0, 0, 0, 0, 0, 134,
134, 138, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134,
138, 255, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, 138, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 134, 134, 138, 255, 134, 134, 138, 255, 134, 134, 138, 255, 0, 0,
0, 0, 134, 134, 138, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134,
138, 255, 136, 136, 136, 56, 134, 134, 138, 255, 134, 134, 138, 255, 134, 134, 138,
255, 134, 134, 138, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, 138, 255, 0,
0, 0, 0, 0, 0, 0, 0, 134, 134, 138, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134,
134, 138, 255, 136, 136, 136, 56, 134, 134, 138, 255, 134, 134, 138, 255, 136, 136,
136, 56, 134, 134, 138, 255, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, 138, 255, 134, 134,
138, 255, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, 138, 255, 134, 134, 138, 255, 0, 0, 0,
0, 0, 0, 0, 0, 134, 134, 138, 255, 136, 136, 136, 56, 134, 134, 138, 255, 134, 134,
138, 255, 136, 136, 136, 56, 134, 134, 138, 255, 0, 0, 0, 0, 134, 134, 138, 255,
134, 134, 138, 255, 134, 134, 138, 255, 134, 134, 138, 255, 134, 134, 138, 255, 134,
134, 138, 255, 134, 134, 138, 255, 134, 134, 138, 255, 0, 0, 0, 0, 134, 134, 138,
255, 136, 136, 136, 56, 134, 134, 138, 255, 134, 134, 138, 255, 136, 136, 136, 56,
134, 134, 138, 255, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, 138, 255, 134, 134, 138, 255,
0, 0, 0, 0, 0, 0, 0, 0, 134, 134, 138, 255, 134, 134, 138, 255, 0, 0, 0, 0, 0, 0, 0,
0, 134, 134, 138, 255, 136, 136, 136, 56, 134, 134, 138, 255, 134, 134, 138, 255,
137, 137, 137, 74, 134, 134, 138, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134,
138, 255, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, 138, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 134, 134, 138, 255, 134, 134, 138, 255, 134, 134, 138, 255, 134, 134, 138,
255, 137, 137, 137, 74, 134, 134, 138, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 134, 134, 138, 255, 0, 0, 0, 0, 134, 134, 138, 255, 134, 134, 138, 255,
134, 134, 138, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, 138,
255, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, 138, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 134, 134, 138, 255, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, 138,
255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 134, 134, 138, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
]
},
angle: {
width: 14,
height: 12,
data: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, 138, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, 138, 255, 130, 130, 134, 76, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, 138, 255, 130, 130, 134, 76, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, 138, 255, 130, 130, 134, 76, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, 138, 255, 130, 130, 134, 76, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, 138, 255, 130, 130, 134, 76,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, 138, 255, 130, 130, 134,
76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, 138, 255, 130, 130,
134, 76, 134, 134, 138, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, 138,
255, 130, 130, 134, 76, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, 138, 255, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
134, 134, 138, 255, 130, 130, 134, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 134, 134, 138, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 134, 134, 138, 255, 130, 130, 134, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, 138, 255, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 134, 138, 255, 134, 134, 138, 255, 134,
134, 138, 255, 134, 134, 138, 255, 134, 134, 138, 255, 134, 134, 138, 255, 134, 134,
138, 255, 134, 134, 138, 255, 134, 134, 138, 255, 134, 134, 138, 255, 134, 134, 138,
255, 134, 134, 138, 255, 134, 134, 138, 255, 134, 134, 138, 255
]
}
};
o.prototype._preRender = function() {
var t, e, i, o, a, l, c, h, u, d, p, _, f, m, g, v, y, b, S, w, T, C, x;
if (!this._preRendered) {
if (r || n(), t = this._data.points[0].x + (this._data.offsetX || 0), e = t, i = this._data
.points[0].y + (this._data.offsetY || 0), o = i, a = this._fontSize, l = this
._lineSpacing, c = a + l, h = c * this._lines.length - l, r.textBaseline = "top", r
.font = this.fontStyle(), u = [], this._data.wordWrapWidth)
for (d = this._data.wordWrapWidth, p = 0; p < this._lines.length; p++) u.push(this._data
.wordWrapWidth);
else
for (d = 0, p = 0; p < this._lines.length; p++) _ = r.measureText(this._lines[p]).width,
u.push(_), d = Math.max(d, _);
if (this._data.backgroundColor || this._data.borderColor || this._data.highlightBorder &&
this._data.wordWrapWidth) {
f = {
top: this._data.paddingTop || 0,
right: this._data.paddingRight || 0,
bottom: this._data.paddingBottom || 0,
left: this._data.paddingLeft || 0
}, m = {
x: 0,
y: 0
}, this._data.backgroundHorzInflate && (g = this._data.backgroundHorzInflate / 2, f
.left += g, f.right += g, m.x = -g), this._data.backgroundVertInflate && (v =
this._data.backgroundVertInflate / 2, f.top += v, f.bottom += v, m.y = -v), y =
"number" == typeof this._data.padding ? this._data.padding : ~~(a / 6);
for (p in f) f[p] || (f[p] = y);
b = {
x: Math.floor(t + m.x),
y: Math.floor(i + m.y),
w: Math.ceil(d + f.left + f.right),
h: Math.ceil(h + f.top + f.bottom)
}, e += f.left + m.x, o += f.top + m.y, "bottom" !== this._data.vertAlign &&
"middle" !== this._data.vertAlign || (S = "middle" === this._data.vertAlign ? i - b
.h / 2 : i - b.h - (b.y - i), w = S - b.y, o += w, b.y = S),
"right" !== this._data.horzAlign && "center" !== this._data.horzAlign || (T =
"center" === this._data.horzAlign ? t - b.w / 2 : t - b.w - (b.x - t), C = T - b
.x, e += C, b.x = T, !0 !== this._data.doNotAlignText && ("right" === this._data
.horzAlign ? (r.textAlign = "end", e += d) : (r.textAlign = "center", e +=
d / 2))), b.w % 2 != 0 && b.w++, b.x += .5, b.y += .5, this
._boundingRect = [new s(b.x, b.y), new s(b.x + b.w, b.y + b.h)], this._rect = b,
this._padding = f, this._defaultPadding = y
} else "bottom" !== this._data.vertAlign && "middle" !== this._data.vertAlign || (o -= Math
.round(h * ("middle" === this._data.vertAlign ? .5 : 1))), x = e, "right" !== this
._data.horzAlign && "center" !== this._data.horzAlign || (x -= Math.round(d * (
"center" === this._data.horzAlign ? .5 : 1))), this._boundingRect = [new s(x, o),
new s(x + d, o + h)
];
this._textPoint = {
x: e,
y: o
}, this._textSizeCache && (this._textSizeCache.widths = u), this._preRendered = !0, this
._maxWidth = d
}
}, o.prototype._drawIcon = function(t, e, i, o) {
var n, r, s, a;
if (h.hasOwnProperty(o)) {
if (n = h[o], !n.src) {
for (n.src = document.createElement("canvas"), n.src.width = n.width, n.src.height = n
.height, r = n.src.getContext("2d"), s = r.createImageData(n.width, n.height), a =
0; a < n.data.length; a++) s.data[a] = n.data[a];
r.putImageData(s, 0, 0)
}
t.drawImage(n.src, e, i)
}
}, o.prototype.fontStyle = function() {
return (this._data.bold ? "bold " : "") + (this._data.italic ? "italic " : "") + this
._fontSize + "px " + this._data.font
}, o.prototype.draw = function(t) {
var e, i, o, n, r, s, a, l, c, h, u;
if (0 !== this._data.points.length) {
for (this._preRender(), e = this._fontSize, i = this._lineSpacing, o = e + i, t
.textBaseline = "top", t.font = this.fontStyle(), n = this._rect, (this._data
.backgroundColor || this._data.borderColor || this._data.highlightBorder && this
._data.wordWrapWidth) && this._rect ? ("right" !== this._data.horzAlign &&
"center" !== this._data.horzAlign || !0 !== this._data.doNotAlignText && (t
.textAlign = "right" === this._data.horzAlign ? "end" : "center"), this._data
.backgroundRoundRect ? (t.roundRect(n.x, n.y, n.w, n.h, this._data
.backgroundRoundRect), this._data.backgroundColor && (t.fillStyle = this
._data.backgroundColor, t.globalAlpha = this._data.backgroundTransparency, t
.fill(), t.globalAlpha = 1), this._data.borderColor && (r = "number" ==
typeof this._data.borderWidth ? this._data.borderWidth : ~~Math.max(e / 12,
1), t.strokeStyle = this._data.borderColor, t.lineWidth = r, t.stroke()
)) : (this._data.backgroundColor && (t.fillStyle = this._data
.backgroundColor, t.globalAlpha = this._data.backgroundTransparency, t
.fillRect(n.x, n.y, n.w, n.h), t.globalAlpha = 1), this._data.borderColor ?
(r = "number" == typeof this._data.borderWidth ? this._data.borderWidth : ~~Math
.max(e / 12, 1), t.strokeStyle = this._data.borderColor, t.lineWidth = r, t
.strokeRect(n.x - r / 2, n.y - r / 2, n.w + r, n.h + r)) : this._data
.highlightBorder && (t.strokeStyle = this._data.color, t.lineWidth = 1, t
.beginPath(), l = [3, 1], t.dashedLineTo(n.x - .5, a = n.y - .5, s = n.x + n
.w + .5, a, l), t.dashedLineTo(s, a, s, a = n.y + n.h + .5, l), t
.dashedLineTo(s = n.x - .5, a, n.x + n.w + .5, a, l), t.dashedLineTo(s, n
.y - .5, s, a, l), t.globalAlpha = .5, t.stroke(), t.globalAlpha = 1)),
this._data.icons && this._data.icons.forEach(function(e, i) {
var r = n.x + this._defaultPadding,
s = n.y + this._padding.top + o * i;
this._drawIcon(t, r, s, e)
}, this)) : "right" === this._data.horzAlign ? t.textAlign = "end" : "center" ===
this._data.horzAlign && (t.textAlign = "center"), c = this._textPoint.x, h = this
._textPoint.y, t.fillStyle = this._data.color, u = 0; u < this._lines.length; u++) t
.fillText(this._lines[u], c, h), h += o;
return {
width: n.w + 2
}
}
}, o.prototype.hitTest = function(t) {
return 0 === this._data.points.length ? null : (this._preRender(), this._boundingRect && a(t,
this._boundingRect[0], this._boundingRect[1]) ? this._hittest : null)
}, e.TrendLineStatsRenderer = o
}, , , function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
});
! function(t) {
t[t.Entry = 0] = "Entry", t[t.Close = 1] = "Close", t[t.ActualEntry = 2] = "ActualEntry", t[t
.ActualClose = 3] = "ActualClose"
}(e.RiskRewardPointIndex || (e.RiskRewardPointIndex = {}))
}, function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
}),
function(t) {
t[t.Waiting = 0] = "Waiting", t[t.Success = 1] = "Success", t[t.Failure = 2] = "Failure"
}(e.AlertStatus || (e.AlertStatus = {})),
function(t) {
t[t.Up = 1] = "Up", t[t.Down = 2] = "Down"
}(e.Direction || (e.Direction = {}))
}, function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
});
! function(t) {
t[t.RoundRadius = 8] = "RoundRadius", t[t.TextMargins = 2] = "TextMargins", t[t.MinWidth = 100] =
"MinWidth"
}(e.CalloutConsts || (e.CalloutConsts = {}))
}, function(t, e, i) {
"use strict";
function o(t, e) {
return t.compareTo(e)
}
function n(t) {
return Array.from(t).reduce(function(t, e) {
var i = +e;
return -1 === t.indexOf(i) && t.push(i), t
}, [])
}
function r(t, e, i) {
var o = 6e4,
n = new Date(e.valueOf() + t * o);
return t + (i.offset_loc(e) / o - i.offset_loc(n) / o)
}
var s, a, l, c, h, u, d, p;
Object.defineProperty(e, "__esModule", {
value: !0
}), s = i(50), a = i(86), l = i(7), c = l.getLogger("Chart.Model.ExchangeSession"), h = [s.MONDAY, s
.TUESDAY, s.WEDNESDAY, s.THURSDAY, s.FRIDAY
], u = [s.SUNDAY, s.MONDAY, s.TUESDAY, s.WEDNESDAY, s.THURSDAY, s.FRIDAY, s.SATURDAY], d =
function() {
function t(t, e, i) {
this._dayOfWeek = t, this._start = e, this._length = i
}
return t.prototype.start = function() {
return this._start
}, t.prototype.alignedStart = function() {
return this._start < 0 ? this._start + s.minutesPerDay : this._start
}, t.prototype.isOvernight = function() {
return this._start < 0
}, t.prototype.dayOfWeek = function() {
return this._dayOfWeek
}, t.prototype.length = function() {
return this._length
}, t.prototype.weight = function() {
return this._dayOfWeek * s.minutesPerDay + this._start
}, t.prototype.compareTo = function(t) {
var e = this.weight(),
i = e + this._length,
o = t.weight();
return e <= o && o < i ? 0 : e > o ? 1 : -1
}, t
}(), e.SessionEntry = d, p = function() {
function t(t) {
void 0 === t && (t = "0000-0000");
var e = this;
this._entries = [], this._firstDayOfWeek = s.MONDAY, this._weekEndsCount = null, "24x7" ===
t.toLowerCase() ? u.forEach(function(t) {
e.addSessionEntry(t, 0, 0)
}) : this._parseSpec(t), this._entries.sort(o)
}
return t.prototype.entries = function() {
return this._entries
}, t.prototype.firstDayOfWeek = function() {
return this._firstDayOfWeek
}, t.prototype.addSessionEntry = function(t, e, i) {
i <= e && 0 !== e && (e -= s.minutesPerDay);
var o = i === e ? s.minutesPerDay : i - e;
this._entries.push(new d(t, e, o))
}, t.prototype.isWeekEnd = function(t) {
var e = a.lowerbound(this._entries, new d(t, 0, 0), function(t, e) {
return t.dayOfWeek() < e.dayOfWeek()
});
return e > this._entries.length - 1 || this._entries[e].dayOfWeek() !== t
}, t.prototype.weekEndsCount = function() {
if (null === this._weekEndsCount) {
var t = {};
this._entries.forEach(function(e) {
t[e.dayOfWeek()] = 1
}), this._weekEndsCount = 7 - Object.keys(t).reduce(function(e, i) {
return e + (t[+i] || 0)
}, 0)
}
return this._weekEndsCount
}, t.prototype.hasWeekEnds = function() {
return this.weekEndsCount() > 0
}, t.prototype.indexOfSessionEntry = function(t, e) {
var i = a.lowerbound(this._entries, new d(t, e, 0), function(t, e) {
return t.compareTo(e) < 0
});
return i > this._entries.length - 1 ? 0 : i
}, t.prototype.findSessionEntry = function(t, e) {
return this._entries[this.indexOfSessionEntry(t, e)]
}, t.prototype.correctTradingDay = function(t, e) {
var i = s.get_day_of_week(t),
o = 60 * s.get_hours(t) + s.get_minutes(t),
n = this.findSessionEntry(i, o),
r = n.dayOfWeek(),
a = (r - i + 7) % 7;
return 0 !== a ? s.add_days_considering_dst(e, t, a) : t
}, t.prototype.alignToSessionStart = function(t, e) {
var i = s.get_day_of_week(t),
o = s.get_minutes_from_midnight(t),
n = this.findSessionEntry(i, o),
a = n.alignedStart(),
l = n.dayOfWeek(),
c = n.isOvernight(),
h = (l - i + 7) % 7 - (c ? 1 : 0);
return 0 !== h && s.add_date(t, h), s.set_hms(t, a / 60 | 0, a % 60, 0, 0), r(n
.length(), t, e)
}, t.prototype._parseSpec = function(t) {
var e = this,
i = {},
o = !1;
t = this._parseFirstDayOfWeek(t), t.split("|").forEach(function(t) {
var e, r, s = t.split(":");
if (1 !== s.length && 2 !== s.length) return void c.logError(
"Bad session section: " + t);
if (e = 1 === s.length) {
if (o) return void c.logError("Duplicated default section: " + t);
o = !0
}
r = e ? h : n(s[1]), r.forEach(function(t) {
e && i[t] || (i[t] = s[0])
})
}), u.forEach(function(o) {
var n = i[o];
void 0 !== n && n.split(",").forEach(function(i) {
var n, r, a = i.split("-");
2 !== a.length && (c.logError("Bad sessions spec: " + t), a = [
"0000", "0000"
]), n = a[0], r = a[1], e.addSessionEntry(o, s
.get_minutes_from_hhmm(n), s.get_minutes_from_hhmm(r))
})
})
}, t.prototype._parseFirstDayOfWeek = function(t) {
var e, i, o, n = t.split(";");
return n.length > 2 ? (c.logError(
"Only one `first day` specification expected @ session " + t), t) : 1 === n
.length ? t : (e = n[0].indexOf("-") >= 0, i = e ? NaN : parseInt(n[0]), o = 1,
isNaN(i) && (o = 0, i = parseInt(n[1])), i < s.SUNDAY || i > s.SATURDAY ? (c
.logError("Unexpected day index @ session: " + t + "; day index " + i), t) :
(this._firstDayOfWeek = i, n[o]))
}, t
}(), e.ExchangeSession = p
}, , , , function(t, e, i) {
"use strict";
(function(t) {
function o(e) {
var i, o, c, h, u, d, p, _, f, m, g;
if (e = $.extend({}, l, e), i = $(t.render(s, {
tabs: e.tabs,
customControls: e.customControls,
customControlsAddClass: e.customControlsContainerAddClass
}, {
additionalHeaderContent: e.additionalHeaderContent
})), o = $(a), c = o, e.contentAddClass && o.addClass(e.contentAddClass), !1 !== e
.withScroll && (o = $('<div class="js-dialog__scroll-wrap tv-dialog__scroll-wrap">')
.append(c.addClass("tv-dialog__scroll-wrap-inner"))), h = $(
'<div class="tv-tabbed-dialog">').append(i).append(o), e.customControls && i.find(
".js-custom-controls").append(e.customControls), !0 !== e.doNotCreatePages)
for (u = 0; u < e.tabs.length; ++u) c.append($(
'<div class="tv-tabbed-dialog__tab-page">').append(e.tabs[u].page));
return d = e.tabStateSaveKey, p = e.activeTab, _ = e.tabsScrollBoxAddClass, f = e
.tabAddClass, delete e.tabs, delete e.activeTab, delete e.customControls,
delete e.tabStateSaveKey, delete e.customControlsContainerAddClass, delete e
.tabsScrollBoxAddClass, delete e.tabAddClass, e.closeButtonAddClass =
"tv-tabbed-dialog__close", e.contentWrapTemplate = h, m = (0, r.createDialog)(e), g =
new n.Tabs(i.find(".tv-tabs").get(0), c.get(0), {
addLeftArrowsClass: "tv-tabbed-dialog__tabs-arrow-left",
addRightArrowsClass: "tv-tabbed-dialog__tabs-arrow-right",
addScrollBoxClass: _,
tabClass: f,
saveTab: d,
activeTab: p
}), m.on("afterOpen", function() {
g.setActivePage(g.index(), !0, !0)
}), {
dialog: m,
tabs: g
}
}
var n, r, s, a, l;
Object.defineProperty(e, "__esModule", {
value: !0
}), e.createTabbedDialog = o, n = i(955), r = i(65), i(958), s =
'<div class="tv-dialog__section tv-dialog__section--title tv-tabbed-dialog__header js-dialog__drag js-close-button-place"><div class="tv-tabs tv-tabbed-dialog__tabs js-dialog__drag">{{#tabs}}<div class="tv-tabs__tab">{{name}}</div>{{/tabs}}</div>{{#customControls}}<div class="js-custom-controls tv-tabbed-dialog__custom-controls {{#customControlsAddClass}}{{customControlsAddClass}}{{/customControlsAddClass}}"></div>{{/customControls}}<div class="tv-tabbed-dialog__bottom-border"></div></div>{{>additionalHeaderContent}}',
a = '<div class="tv-tabbed-dialog__pages-container"></div>', l = {
tabs: []
}
}).call(e, i(41))
}, function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 6 12"><path fill-rule="evenodd" d="M0 0h2v2H0V0zm4 0h2v2H4V0zM0 5h2v2H0V5zm4 0h2v2H4V5zm-4 5h2v2H0v-2zm4 0h2v2H4v-2z"/></svg>'
}, function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 16"><path fill-rule="evenodd" d="M10.5 5.333h-.75V3.81C9.75 1.707 8.07 0 6 0 3.93 0 2.25 1.707 2.25 3.81v1.523H1.5c-.825 0-1.5.686-1.5 1.524v7.62C0 15.313.675 16 1.5 16h9c.825 0 1.5-.686 1.5-1.524V6.857c0-.838-.675-1.524-1.5-1.524zM6 12c-.825 0-1.5-.675-1.5-1.5S5.175 9 6 9s1.5.675 1.5 1.5S6.825 12 6 12zm2.325-6.75h-4.65v-1.5A2.326 2.326 0 0 1 6 1.425 2.326 2.326 0 0 1 8.325 3.75v1.5z"/></svg>'
}, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
function(t, e, i) {
"use strict";
(function(t) {
function e() {
var t, e, i = $.Deferred();
return urlParams.theme ? (t = urlParams.theme.toLowerCase(), e = d.themes[t], e ? (d
.setTheme(e.name), d.getStdTheme(e.name).then(function(t) {
i.resolve(t.content)
}).catch(function(t) {
console.warn("Cannot load theme {0}, reason: {1}".format(e.name, t)), i
.resolve()
})) : i.resolve()) : i.resolve(), i.promise()
}
function o() {
JSON.parse(urlParams.disabledFeatures).forEach(function(e) {
t.setEnabled(e, !1)
}), JSON.parse(urlParams.enabledFeatures).forEach(function(e) {
t.setEnabled(e, !0)
})
}
function n() {
t.enabled("saveload_storage_customization") && (window.parent[urlParams.uid]
.saveLoadAdapter ? p.setCustomAdapter(window.parent[urlParams.uid]
.saveLoadAdapter) : void 0 !== urlParams.chartsStorageUrl && urlParams
.chartsStorageUrl && void 0 !== urlParams.clientId && urlParams.clientId ? p
.initialize(urlParams.clientId, urlParams.userId, urlParams.chartsStorageUrl,
urlParams.chartsStorageVer || "1.0") : (t.setEnabled(
"saveload_storage_customization", !1),
t.setEnabled("header_saveload", !1)))
}
function r() {
j.resolve()
}
var s, a, l, c, h, u, d, p, _, f, m, g, v, y, b, S, w, T, C, x, P, L, I, k, A, M, E, D, V, O, R,
B, z, F, N, W, H, U, j, q;
i(570), i(12), s = i(573), i(574), i(298), i(601), o(), a = i(2), l = i(39), c = i(602)
.HeaderToolbar, h = i(621).DrawingToolbar, u = i(306).isDrawingToolbarVisible, d = i(310),
p = i(311), _ = i(52).Action, f = i(393).ChartSaver, m = i(744).StudyTemplates, g = i(759)
.FavoriteStudyTemplateService, v = i(76), y = i(23), b = i(28), S = b.formatterOptions, w =
b.customFormatters, T = i(760), C = i(761), x = i(769).SaveLoadWidget, P = i(93)
.TVXWindowEvents, L = i(774), I = i(207), k = i(322).Root, A = i(779).ChartPage, M = new k(
window), E = new A(M.allocate()), i(782), D = i(783), V = i(973).FavoriteDrawingToolbar,
O = i(976), R = i(1001), B = i(33), z = i(1010), i(234), i(1018), F = i(71), N = window
.parent[urlParams.uid].customIndicatorsUrl, W = $.Deferred(), H = $.Deferred(), $.when(W, H)
.done(function() {
ChartApiInstance.start()
}), N ? $.getScript(N).done(function() {
void 0 !== window.__customIndicators && window.isArray(window.__customIndicators) &&
(window.PineJS = i(48), JSServer.studyLibrary = JSServer.studyLibrary.concat(
window.__customIndicators), console.log("{0} custom indicators loaded."
.format(window.__customIndicators.length)), W.resolve())
}).fail(function(t) {
console.warn("Error loading custom indicators @ `{0}`: {1} ({2}) ".format(N, t
.statusText, t.status)), W.resolve()
}) : W.resolve(), window.widgetReady = function(t) {
y.subscribe("onChartReady", t)
}, window.customizeUI = function(t) {
null != t.studiesOverrides && B.setDefaultsOverrides(t.studiesOverrides), window
.__defaultsOverrides = t.defaultsOverrides
}, window.applyStudiesOverrides = function(t) {
t && window.chartWidgetCollection.applyStudiesOverrides(t)
}, window.applyOverrides = function(t) {
$.extend(!0, window.__defaultsOverrides, t), window.applyDefaultsOverrides(TradingView
.defaultProperties.chartproperties), window.applyDefaultOverridesToLinetools(),
window.chartWidgetCollection.applyOverrides(t)
}, window.changeTheme = function(t) {
var e = d.themes[t.toLowerCase()];
e && window.tradingViewApi.themes().setStdTheme(e.name).then(function() {
window.applyOverrides(window.__defaultsOverrides)
})
}, window.is_authenticated = !1, window.parent[urlParams.uid].brokerFactory, window.t(
"charts by TradingView"), window.t("powered by TradingView"), U = function(e) {
var o, n, r, s, d, p, _, b, k, A, M, B, N, W, U;
if (!Modernizr.canvas || !Modernizr.canvastext) throw Error(
"Charting library cannot be running under this browser");
t.setEnabled("charting_library_debug_mode", "true" === urlParams.debug), t.setEnabled(
"chart_property_page_trading", !1), t.setEnabled(
"chart_property_page_template_button", !1), o = window.headerChartPanel = $(
".header-chart-panel"), n = $("#library-container"), t.enabled(
"remove_library_container_border") && (n.css("border", "0px"), n.css("padding",
"1px")), window.customizeUI({
studiesOverrides: urlParams.studiesOverrides ? JSON.parse(urlParams
.studiesOverrides) : void 0,
defaultsOverrides: JSON.parse(urlParams.overrides)
}), urlParams.numeric_formatting = urlParams.numeric_formatting && JSON.parse(
urlParams.numeric_formatting),
urlParams.numeric_formatting && "string" == typeof urlParams.numeric_formatting
.decimal_sign && (S.decimalSign = urlParams.numeric_formatting.decimal_sign[0]),
window.ChartApiInstance = new R(window.parent[urlParams.uid].datafeed), window
.parent[urlParams.uid].customFormatters && (window.parent[urlParams.uid]
.customFormatters.timeFormatter && (w.timeFormatter = window.parent[urlParams
.uid].customFormatters.timeFormatter), window.parent[urlParams.uid]
.customFormatters.dateFormatter && (w.dateFormatter = window.parent[urlParams
.uid].customFormatters.dateFormatter)), ChartApiInstance.setTimeFramesList(
JSON.parse(urlParams.timeFrames)), ChartApiInstance.setStudiesAccessController(
ChartApiInstance.createStudiesAccessController(urlParams.studiesAccess)), r =
window.parent[window.urlParams.uid].settingsAdapter, null != r ? (TVSettings
.setSettingsAdapter(r), TVSettings.sync()) : t.enabled(
"use_localstorage_for_settings") && TVSettings.sync(), s = urlParams
.chartContent ? JSON.parse(urlParams.chartContent).json : void 0, d = urlParams
.interval || "D", p = {
resizerBridge: E.allocate({
areaName: "center"
}),
padding: t.enabled("border_around_the_chart") ? 5 : 0,
edge: t.enabled("border_around_the_chart") ? 6 : 0,
content: s,
widgetOptions: {
hideIdeas: !0,
addVolume: !0,
handleSessionErrors: !0,
muteSessionErrors: !0,
timezone: urlParams.timezone,
defSymbol: urlParams.symbol,
defInterval: d,
defTimeframe: urlParams.timeframe && urlParams.timeframe.toLowerCase()
},
globalEvents: !0,
snapshotUrl: urlParams.snapshotUrl
}, _ = t.enabled("left_toolbar"), _ && (b = new V({
left: window.innerWidth / 2,
top: window.headerChartPanel.outerHeight() + 61
}), p.widgetOptions.favoriteDrawingToolbar = b, p.widgetOptions
.isDrawingToolbarVisible = u), s && void 0 !== s.extendedData && (k = s
.extendedData, p.metaInfo = {
id: k.uid,
name: k.name,
description: k.description,
uid: k.uid,
username: "",
tags: ""
}), A = window.chartWidgetCollection = new D(p), window.studyMarket = new C(A,
window.user), "undefined" != typeof serviceLocator && serviceLocator
.registerService(CHART_WIDGET_COLLECTION_SERVICE, A), A.activeChartWidget.subscribe(
function(t) {
y.emit("activeChartChanged", A.getAll().indexOf(t))
}), window.saver = new f(A), window.chartWidget = A.activeChartWidget.value(),
window.pro = new TradingView.Pro, M = JSON.parse(urlParams.favorites), M.intervals =
M.intervals.map(function(t) {
var e = "" + t;
return e.match(/1[DWMYdwmy]/) && (e = e.slice(1)), e
}), t.enabled("study_templates") && (B = new g(P, TVSettings), window
.studyTemplates = new m({
chartWidgetCollection: A,
favoriteStudyTemplatesService: B
})), t.enabled("header_widget") && (N = E.allocate({
areaName: "top"
}), window.headerWidget = l.render(a.createElement(c, {
tools: i(1022).getRestrictedToolSet(),
chartSaver: window.saver,
chartApiInstance: ChartApiInstance,
chartWidgetCollection: A,
defaultIntervals: Object.keys(ChartApiInstance
.defaultResolutions()),
defaultFavoriteStyles: M.chartTypes,
defaultFavoriteIntervals: M.intervals,
headerChartPanel: o,
hideStudyTemplates: !0,
resizerBridge: N,
studyMarket: window.studyMarket,
studyTemplates: window.studyTemplates,
favoriteStudyTemplatesService: B,
allowedModes: t.enabled("caption_buttons_text_if_possible") ?
void 0 : ["medium"]
}), N.body.value()[0])),
window.tradingViewApi = new z(A, window.saver, ChartApiInstance, t.enabled(
"header_saveload") ? new x(null, A) : null), v.bindToChartWidgetCollection(A),
W = urlParams.toolbarbg && /^[0-9a-f]+$/i.test(urlParams.toolbarbg) ? urlParams
.toolbarbg + "" : void 0, W && $("<style>").text(
"body,.chart-controls-bar,#footer-chart-panel{background-color:#" + W +
" !important}").appendTo($("head")), TradingView.isNaN(urlParams
.studyCountLimit) || (TradingView.STUDY_COUNT_LIMIT = Math.max(2, +urlParams
.studyCountLimit)), TradingView.isNaN(urlParams.ssreqdelay) || F
.setSearchRequestDelay(Math.max(0, +urlParams.ssreqdelay)), _ && (U = E.allocate({
areaName: "left"
}), l.render(a.createElement(h, {
bgColor: W,
chartWidgetCollection: A,
drawingsAccess: urlParams.drawingsAccess ? JSON.parse(urlParams
.drawingsAccess) : void 0,
resizerBridge: U
}), U.body.value()[0])), window.quoteSessionMultiplexerInstance = {}, window
.quoteSessionMultiplexerInstance.simple = new L("simple"), window
.quoteSessionMultiplexerInstance.full = new L, window.lineToolPropertiesToolbar =
new O(A), chartWidget.onDisconnected().subscribe(null, function(t) {
t && T.showCriticalErrorMessage(function() {
ChartApiInstance.disconnect(), setTimeout(function() {
ChartApiInstance.connect(), chartWidget.reconnect()
}, 500)
})
}), $(".tv-content").bind("contextmenu", function(t) {
var e = $(t.originalEvent.target);
if (!e.is("input") && !e.is("textarea")) return !1
}), H.resolve(), A.undoHistory.undoStack().onChange().subscribe(null, I(function() {
y.emit("onAutoSaveNeeded")
}, 1e3 * (urlParams.autoSaveDelay || 5), {
leading: !0,
trailing: !0
})), chartWidget.withModel(null, function() {
ChartApiInstance.on("realtime_tick", function(t) {
y.emit("onTick", t)
}), e && (A.applyTheme(e), window.applyOverrides(window
.__defaultsOverrides)), t.enabled("charting_library_debug_mode") &&
y.subscribeToAll(function() {
var t = Array.prototype.slice.call(arguments);
console.log('Event "{0}", arguments: {1}'.format(t[0], JSON
.stringify(t.slice(1))))
})
}), y.subscribe("chart_load_requested", function(t) {
window.tradingViewApi.loadChart({
json: JSON.parse(t.content),
extendedData: t
})
})
}, window.destroyChart = function() {
window.chartWidgetCollection && (window.chartWidgetCollection.destroy(), window
.chartWidgetCollection = null), window.quoteSessionMultiplexerInstance && (
window.quoteSessionMultiplexerInstance.simple && window
.quoteSessionMultiplexerInstance.simple.destroy(), window
.quoteSessionMultiplexerInstance.full && window.quoteSessionMultiplexerInstance
.full.destroy(), window.quoteSessionMultiplexerInstance = null),
ChartApiInstance && (ChartApiInstance.destroy(), ChartApiInstance = null)
}, n(), j = $.Deferred(), window.parent[urlParams.uid].loadLastChart && t.enabled(
"saveload_storage_customization") ? p.getCharts(function(t) {
if (0 === t.length) return void r();
var e = t.sort(function(t, e) {
return e.modified_iso - t.modified_iso
})[0];
p.getChartContent(e, function(t) {
var e = JSON.parse(t.content);
e.extendedData = t, urlParams.chartContent = JSON.stringify({
json: e
}), r()
}, r)
}, r) : r(), q = $.Deferred(), $.when(e(), s, q, j).done(function(e) {
if ($(window).resize(), $(".loading-indicator").hide(), setTimeout(U.bind(null, e),
0),
t.enabled("14851") && (Math.random() <= .02 || t.enabled("cqg_terminal") || t
.enabled("amp_terminal"))) {
! function(t, e, i, o, n, r, s) {
t.GoogleAnalyticsObject = n, t[n] = t[n] || function() {
(t[n].q = t[n].q || []).push(arguments)
}, t[n].l = 1 * new Date, r = e.createElement(i), s = e
.getElementsByTagName(i)[0], r.async = 1, r.src = o, s.parentNode
.insertBefore(r, s)
}(window, document, "script", "//www.google-analytics.com/analytics.js", "ga");
var i = document.URL.match(RegExp("(:?.*://)([^/]+)/.*"))[2];
ga("create", "UA-112911840-1", "auto"), ga("set", "anonymizeIp", !0), ga(
"set", {
hostname: i,
page: i,
referrer: i
}), ga("send", "pageview")
}
}),
function() {
var t = !0;
window.parent[urlParams.uid].datafeed.onReady(function(e) {
t && console.warn(
"`onReady` should return result asynchronously. Use `setTimeout` with 0 interval to execute the callback function."
), window.configurationData = e, q.resolve()
}), t = !1
}(), window.getFunctionFromArguments = function(t) {
return window.parent[urlParams.uid][t]
}, window.createShortcutAction = function() {
var t = {};
return function(e, i) {
void 0 === t[e] && (t[e] = new _({
shortcut: e
})), t[e].callbacks().subscribe(null, i)
}
}(), window.initializationFinished = function() {
window.chartWidgetCollection.undoHistory.clearStack()
}, window.resizeWindow = function() {
$(window).resize()
}, window.createButton = function(t) {
t = t || {};
var e = t.align || "left";
return window.headerWidget.addButton(e)
}
}).call(e, i(5))
},
function(t, e) {
t.exports = {
14851: {},
custom_items_in_context_menu: {},
websocket_connection: {},
countdown: {},
symbol_search_parser_mixin: {},
show_pro_features: {},
daily_timeframe_suffix: {},
symbollist_context_menu: {},
pay_attention_to_ticker_not_symbol: {},
graying_disabled_tools_enabled: {},
update_study_formatter_on_symbol_resolve: {},
constraint_dialogs_movement: {},
same_data_requery: {},
phone_verification: {},
show_trading_notifications_history: {},
show_interval_dialog_on_key_press: {},
header_interval_dialog_button: {
subsets: ["show_interval_dialog_on_key_press"]
},
header_fullscreen_button: {},
header_symbol_search: {},
symbol_search_hot_key: {},
header_resolutions: {
subsets: ["header_interval_dialog_button"]
},
header_chart_type: {},
header_settings: {},
header_indicators: {},
header_compare: {},
header_undo_redo: {},
header_screenshot: {},
header_saveload: {},
study_on_study: {},
header_widget: {
subsets: ["header_widget_dom_node", "header_symbol_search", "header_resolutions",
"header_chart_type", "header_settings", "header_indicators", "header_compare",
"header_undo_redo", "header_fullscreen_button", "compare_symbol"
]
},
compare_symbol: {
subsets: ["header_compare"]
},
property_pages: {
subsets: ["show_chart_property_page", "chart_property_page"]
},
show_chart_property_page: {},
chart_property_page: {
subsets: ["chart_property_page_style", "chart_property_page_scales",
"chart_property_page_background", "chart_property_page_timezone_sessions",
"chart_property_page_events_alerts", "chart_property_page_trading",
"chart_property_page_template_button"
]
},
disable_userlink_popup: {},
left_toolbar: {},
keep_left_toolbar_visible_on_small_screens: {},
hide_left_toolbar_by_default: {},
control_bar: {},
widget_logo: {},
timeframes_toolbar: {},
edit_buttons_in_legend: {
subsets: ["show_hide_button_in_legend", "format_button_in_legend",
"study_buttons_in_legend", "delete_button_in_legend"
]
},
hide_legend_by_default: {},
show_hide_button_in_legend: {},
format_button_in_legend: {},
study_buttons_in_legend: {},
delete_button_in_legend: {},
pane_context_menu: {},
scales_context_menu: {},
legend_context_menu: {},
context_menus: {
subsets: ["pane_context_menu", "scales_context_menu", "legend_context_menu",
"objects_tree_context_menu"
]
},
items_favoriting: {},
save_chart_properties_to_local_storage: {},
use_localstorage_for_settings: {
subsets: ["items_favoriting", "save_chart_properties_to_local_storage"]
},
plain_studymarket: {},
trading_watch_positions: {},
disable_resolution_rebuild: {},
border_around_the_chart: {},
charting_library_debug_mode: {},
cl_feed_return_all_data: {},
log_data_request_time: {},
saveload_requires_authentication: {},
saveload_storage_customization: {},
new_chart_creation_available: {},
volume_force_overlay: {},
create_volume_indicator_by_default: {},
create_volume_indicator_by_default_once: {},
saved_charts_count_restriction: {},
lean_chart_load: {},
stop_study_on_restart: {},
star_some_intervals_by_default: {},
predefined_items_only_may_be_starred: {},
move_logo_to_main_pane: {},
show_logo_on_all_charts: {},
link_to_tradingview: {},
logo_without_link: {},
right_bar_stays_on_scroll: {},
chart_content_overrides_by_defaults: {},
show_dialog_on_snapshot_ready: {},
snapshot_trading_drawings: {},
allow_supported_resolutions_set_only: {},
study_market_minimized: {},
widgetbar_tabs: {},
collapsible_header: {},
show_extension_popup: {},
study_templates: {},
side_toolbar_in_fullscreen_mode: {},
remove_library_container_border: {},
whotrades_auth_only: {},
support_multicharts: {},
display_market_status: {},
display_data_mode: {},
show_chart_warn_message: {},
datasource_copypaste: {},
line_tool_templates: {},
expand_symbolsearch_items: {},
symbol_search_three_columns_exchanges: {},
symbol_search_flags: {},
symbol_search_limited_exchanges: {},
footer_share_buttons: {},
footer_bugreport_button: {},
footer_publish_idea_button: {},
footer_screenshot: {},
footer_showdom_button: {},
text_notes: {},
symbol_info: {},
no_bars_status: {},
clear_bars_on_series_error: {},
hide_loading_screen_on_series_error: {},
seconds_resolution: {},
dont_show_boolean_study_arguments: {},
hide_last_na_study_output: {},
price_scale_always_last_bar_value: {},
study_dialog_search_control: {},
study_dialog_fundamentals_economy_addons: {},
uppercase_instrument_names: {},
cqg_trading_confirm_risks: {},
trading_notifications: {},
chart_crosshair_menu: {},
japanese_chart_styles: {},
hide_series_legend_item: {},
hide_study_overlay_legend_item: {},
hide_study_compare_legend_item: {},
linetoolpropertieswidget_template_button: {},
use_overrides_for_overlay: {},
timezone_menu: {},
main_series_scale_menu: {},
show_login_dialog: {},
remove_img_from_rss: {},
bars_marks: {},
chart_scroll: {},
chart_zoom: {},
source_selection_markers: {},
high_density_bars: {},
open_account_manager: {},
multiple_watchlists: {},
onchart_messages: {},
custom_resolutions_box: {},
referral_program_for_widget_owners: {},
referral_program_policy_aggressive: {
subsets: ["referral_program_policy_passive", "referral_program_policy_normal"]
},
referral_program_policy_normal: {
subsets: ["referral_program_policy_passive", "header_fake_features_buttons",
"custom_resolutions_box"
]
},
tv_production: {
subsets: ["show_pro_features", "countdown", "symbol_search_parser_mixin",
"symbollist_context_menu", "websocket_connection", "header_fullscreen_button",
"header_widget", "dont_show_boolean_study_arguments", "left_toolbar", "control_bar",
"timeframes_toolbar", "symbol_search_hot_key", "context_menus",
"edit_buttons_in_legend", "uppercase_instrument_names",
"use_localstorage_for_settings", "saveload_requires_authentication",
"volume_force_overlay", "new_chart_creation_available",
"saved_charts_count_restriction", "create_volume_indicator_by_default",
"create_volume_indicator_by_default_once", "charts_auto_save",
"right_bar_stays_on_scroll", "save_old_chart_before_save_as",
"chart_content_overrides_by_defaults", "alerts", "show_dialog_on_snapshot_ready",
"show_extension_popup", "header_saveload", "header_layouttoggle",
"datasource_copypaste", "show_saved_watchlists", "watchlists_from_to_file",
"add_to_watchlist", "property_pages", "support_multicharts",
"display_market_status", "display_data_mode", "show_chart_warn_message",
"support_manage_drawings", "widgetbar_tabs", "study_templates",
"collapsible_header", "line_tool_templates", "caption_buttons_text_if_possible",
"footer_share_buttons", "footer_screenshot", "footer_publish_idea_button",
"text_notes", "trading_watch_positions", "symbol_info",
"linetoolpropertieswidget_template_button", "cqg_trading_confirm_risks",
"trading_notifications", "symbol_search_three_columns_exchanges",
"symbol_search_flags", "symbol_search_limited_exchanges", "phone_verification",
"chart_events", "onchart_messages", "custom_resolutions_box", "compare_symbol",
"timezone_menu", "main_series_scale_menu", "chart_crosshair_menu", "study_on_study",
"japanese_chart_styles", "show_login_dialog", "dome_widget", "bars_marks",
"chart_scroll", "chart_zoom", "screener_alerts",
"show_trading_notifications_history", "source_selection_markers", "go_to_date",
"study_dialog_fundamentals_economy_addons", "multiple_watchlists"
]
},
browser_extension: {
subsets: ["disable_userlink_popup", "show_pro_features", "show_saved_watchlists",
"display_market_status", "display_data_mode", "show_chart_warn_message",
"widgetbar_tabs", "show_login_dialog"
]
},
widget: {
subsets: ["show_pro_features", "countdown", "symbol_search_parser_mixin",
"symbollist_context_menu", "websocket_connection", "uppercase_instrument_names",
"left_toolbar", "control_bar", "timeframes_toolbar", "symbol_search_hot_key",
"context_menus", "edit_buttons_in_legend", "use_localstorage_for_settings",
"saveload_requires_authentication", "volume_force_overlay",
"create_volume_indicator_by_default", "create_volume_indicator_by_default_once",
"right_bar_stays_on_scroll", "show_dialog_on_snapshot_ready",
"dont_show_boolean_study_arguments", "header_widget_dom_node",
"header_symbol_search", "header_resolutions", "header_chart_type", "header_compare",
"header_indicators", "star_some_intervals_by_default", "display_market_status",
"display_data_mode", "show_chart_warn_message", "symbol_info",
"linetoolpropertieswidget_template_button", "symbol_search_three_columns_exchanges",
"symbol_search_flags", "symbol_search_limited_exchanges", "widgetbar_tabs",
"compare_symbol", "timezone_menu", "main_series_scale_menu", "show_login_dialog",
"plain_studymarket", "japanese_chart_styles", "bars_marks", "chart_scroll",
"chart_zoom", "source_selection_markers", "property_pages"
]
},
bovespa_widget: {
subsets: ["widget", "header_settings", "chart_property_page_timezone_sessions",
"linetoolpropertieswidget_template_button"
]
},
charting_library_base: {
subsets: ["14851", "allow_supported_resolutions_set_only", "border_around_the_chart",
"collapsible_header", "constraint_dialogs_movement", "context_menus", "control_bar",
"create_volume_indicator_by_default", "custom_items_in_context_menu",
"datasource_copypaste", "daily_timeframe_suffix", "uppercase_instrument_names",
"display_market_status", "edit_buttons_in_legend", "graying_disabled_tools_enabled",
"header_widget", "header_saveload", "dont_show_boolean_study_arguments",
"lean_chart_load", "left_toolbar", "trading_watch_positions", "link_to_tradingview",
"pay_attention_to_ticker_not_symbol", "plain_studymarket",
"predefined_items_only_may_be_starred", "refresh_saved_charts_list_on_dialog_show",
"right_bar_stays_on_scroll", "saveload_storage_customization",
"show_dialog_on_snapshot_ready", "stop_study_on_restart", "study_market_minimized",
"timeframes_toolbar", "symbol_search_hot_key",
"update_study_formatter_on_symbol_resolve",
"update_timeframes_set_on_symbol_resolve", "use_localstorage_for_settings",
"volume_force_overlay", "widget_logo", "countdown", "use_overrides_for_overlay",
"trading_notifications", "compare_symbol", "symbol_info", "timezone_menu",
"main_series_scale_menu", "study_dialog_search_control", "chart_crosshair_menu",
"create_volume_indicator_by_default_once", "bars_marks", "chart_scroll",
"chart_zoom", "source_selection_markers", "property_pages", "go_to_date",
"adaptive_logo", "caption_buttons_text_if_possible"
]
},
charting_library: {
subsets: ["charting_library_base", "header_screenshot"]
},
static_charts_service: {
subsets: ["charting_library", "disable_resolution_rebuild", "log_data_request_time",
"same_data_requery"
]
},
trading_terminal: {
subsets: ["charting_library_base", "footer_showdom_button", "support_multicharts",
"header_layouttoggle", "japanese_chart_styles", "chart_property_page_trading",
"footer_screenshot", "add_to_watchlist", "open_account_manager",
"show_dom_first_time", "multiple_watchlists", "show_trading_notifications_history"
]
},
cqg_terminal: {
subsets: ["charting_library_base", "chart_property_page_trading",
"expand_symbolsearch_items", "clear_bars_on_series_error", "no_bars_status",
"hide_loading_screen_on_series_error", "support_multicharts", "header_layouttoggle",
"same_data_requery", "footer_bugreport_button", "footer_showdom_button",
"dome_widget", "show_dom_first_time", "japanese_chart_styles",
"remove_img_from_rss", "footer_screenshot", "add_to_watchlist",
"show_trading_notifications_history"
]
},
amp_terminal: {
subsets: ["cqg_terminal"]
}
}
},
function(t, e) {},
function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
});
var o = i(293);
o.addTranslationFunctionToWindow(o.translationFunction), o.addTranslationFunctionToJQuery(o
.translationFunction)
},
function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
});
e.CustomEvent = function(t) {
var e, i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
o = i.bubbles,
n = void 0 !== o && o,
r = i.cancelable,
s = void 0 !== r && r,
a = i.detail,
l = void 0 === a ? null : a;
try {
return new window.CustomEvent(t, {
bubbles: n,
cancelable: s,
detail: l
})
} catch (i) {
return e = document.createEvent("CustomEvent"), e.initCustomEvent(t, n, s, l), e
}
}
},
function(t, e, i) {
"use strict";
var o, n;
i(13), o = $.Deferred(), n = function() {
o.resolve(), document.body.removeEventListener("tradingview-i18next-initialized", n)
}, window.__tradingviewI18nextInited ? n() : document.body.addEventListener(
"tradingview-i18next-initialized", n), t.exports = o
},
function(t, e, i) {
"use strict";
function o(t) {
return t.keys().map(t)
}
window.TradingView = window.TradingView || {}, window.requireAll = o, i(575), i(576), i(389), i(64), i(
577), i(15), i(90), i(102), i(578), i(199), i(295), i(580), i(24), i(583), i(148), i(294), i(
244)
},
function(t, e, i) {
"use strict";
var o = i(38);
window.language && (o.locale(window.language, {
months: [$.t("January"), $.t("February"), $.t("March"), $.t("April"), $.t("May"), $.t(
"June"), $.t("July"), $.t("August"), $.t("September"), $.t("October"), $.t(
"November"), $.t("December")],
monthsShort: [$.t("Jan"), $.t("Feb"), $.t("Mar"), $.t("Apr"), $.t("May"), $.t("Jun"), $
.t("Jul"), $.t("Aug"), $.t("Sep"), $.t("Oct"), $.t("Nov"), $.t("Dec")
],
weekdays: [$.t("Sunday"), $.t("Monday"), $.t("Tuesday"), $.t("Wednesday"), $.t(
"Thursday"), $.t("Friday"), $.t("Saturday")],
weekdaysShort: [$.t("Sun"), $.t("Mon"), $.t("Tue"), $.t("Wed"), $.t("Thu"), $.t("Fri"),
$.t("Sat")
],
weekdaysMin: [$.t("Su", {
context: "day_of_week"
}), $.t("Mo", {
context: "day_of_week"
}), $.t("Tu", {
context: "day_of_week"
}), $.t("We", {
context: "day_of_week"
}), $.t("Th", {
context: "day_of_week"
}), $.t("Fr", {
context: "day_of_week"
}), $.t("Sa", {
context: "day_of_week"
})],
longDateFormat: {
LT: "HH:mm",
LTS: "HH:mm:ss",
L: "MMM D",
l: "M/D/YYYY",
LL: "MMM D, YYYY",
ll: "MMM D LT",
LLL: "LT - LL",
lll: "MMM D, YYYY LT",
LLLL: "ddd D MMMM YYYY LT",
llll: "ddd D MMM YYYY LT"
},
calendar: {
sameDay: $.t("__specialSymbolOpen__Today at__specialSymbolClose__ __dayTime__", {
specialSymbolOpen: "[",
specialSymbolClose: "]",
dayTime: "LT"
}),
nextDay: $.t("__specialSymbolOpen__Tomorrow at__specialSymbolClose__ __dayTime__", {
specialSymbolOpen: "[",
specialSymbolClose: "]",
dayTime: "LT"
}),
nextWeek: $.t(
"__dayName__ __specialSymbolOpen__at__specialSymbolClose__ __dayTime__", {
specialSymbolOpen: "[",
specialSymbolClose: "]",
dayTime: "LT",
dayName: "dddd"
}),
lastDay: $.t(
"__specialSymbolOpen__Yesterday at__specialSymbolClose__ __dayTime__", {
specialSymbolOpen: "[",
specialSymbolClose: "]",
dayTime: "LT"
}),
lastWeek: $.t(
"__specialSymbolOpen__Last__specialSymbolClose__ __dayName__ __specialSymbolOpen__at__specialSymbolClose__ __dayTime__", {
specialSymbolOpen: "[",
specialSymbolClose: "]",
dayTime: "LT",
dayName: "dddd"
}),
sameElse: "L"
},
relativeTime: {
future: function(t) {
return t === $.t("just now") ? t : $.t("in %s", {
context: "time_range"
}).replace("%s", t)
},
past: function(t) {
return t === $.t("just now") ? t : $.t("%s ago", {
context: "time_range"
}).replace("%s", t)
},
s: $.t("just now"),
m: function(t) {
return $.t("%d minute", {
plural: "%d minutes",
count: t
}).replace("%d", t)
},
mm: function(t) {
return $.t("%d minute", {
plural: "%d minutes",
count: t
}).replace("%d", t)
},
h: $.t("an hour"),
hh: function(t) {
return $.t("%d hour", {
plural: "%d hours",
count: t
}).replace("%d", t)
},
d: $.t("a day"),
dd: function(t) {
return $.t("%d day", {
plural: "%d days",
count: t
}).replace("%d", t)
},
M: $.t("a month"),
MM: function(t) {
return $.t("%d month", {
plural: "%d months",
count: t
}).replace("%d", t)
},
y: $.t("a year"),
yy: function(t) {
return $.t("%d year", {
plural: "%d years",
count: t
}).replace("%d", t)
}
},
week: {
dow: 1,
doy: 4
}
}), o.locale(window.language))
},
function(t, e, i) {
"use strict";
! function(t) {
t.fn.contextMenu = function(e) {
t(this).bind("contextmenu", function(t) {
return e(t), !1
})
}
}(jQuery)
},
function(t, e, i) {
"use strict";
! function(t, e, i) {
"$:nomunge";
function o(o, n) {
function r(e) {
t(s).each(function() {
var i = t(this);
this === e.target || i.has(e.target).length || i.triggerHandler(n, [e.target])
})
}
n = n || o + i;
var s = t(),
a = o + "." + n + "-special-event";
t.event.special[n] = {
setup: function() {
s = s.add(this), delete s.prevObject, 1 === s.length && t(e).bind(a, r)
},
teardown: function() {
s = s.not(this), delete s.prevObject, 0 === s.length && t(e).unbind(a)
},
add: function(t) {
var e = t.handler;
t.handler = function(t, i) {
t.target = i, e.apply(this, arguments)
}
}
}
}
t.map("click dblclick mousemove mousedown mouseup mouseover mouseout change select submit keydown keypress keyup"
.split(" "),
function(t) {
o(t)
}), o("focusin", "focus" + i), o("focusout", "blur" + i), Modernizr.touch && (o(
"touchstart", "mousedown" + i), o("touchmove", "mousemove" + i), o("touchend",
"mouseup" + i)), t.addOutsideEvent = o
}(jQuery, document, "outside")
},
function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
});
var o = i(579);
$.fn.lastCharSup = function() {
for (var t = 0; t < this.size(); t++) o.lastCharSup(this.get(t));
return this
}
},
function(t, e, i) {
"use strict";
function o(t) {
var e, i;
if (3 === t.nodeType && t.data.trim()) return t;
if (t.childNodes)
for (e = t.childNodes.length; e--;)
if (i = o(t.childNodes[e])) return i;
return null
}
function n(t, e) {
var i, o = e.parentNode;
o && (i = e.nextSibling, i ? o.insertBefore(t, i) : o.appendChild(t))
}
function r(t) {
var e, i, r, s = o(t);
if (s) {
if (e = s.data, s.parentNode && s.parentNode.tagName && "sup" === s.parentNode.tagName
.toLowerCase()) return;
i = /^([^]*)(\S)(\s*)$/.exec(e), i && (s.data = i[1], r = document.createElement("sup"), r
.textContent = i[2], n(r, s), i[3] && n(document.createTextNode(i[3]), r))
}
}
Object.defineProperty(e, "__esModule", {
value: !0
}), e.lastCharSup = r
},
function(module, exports, __webpack_require__) {
"use strict";
(function(Delegate, _, Featuresets) {
function loginUser(t, e) {
window.TVDialogs && window.TVDialogs.signModal && window.TVDialogs.signModal.close(), user =
$.extend(!0, {}, t), TradingView.changeLoginState(!0), "function" == typeof e && window
.TVDialogs && window.TVDialogs.signModal ? window.TVDialogs.signModal.on(
"signinSuccess",
function() {
e()
}) : "function" == typeof e && e()
}
function onLoginStateChange(is_initial) {
window.iframeAuthWidget && user.is_first_login && (window.iframeAuthWidget.preventClose = !
0);
var available_offers = user.available_offers;
$("html").toggleClass("is-authenticated", is_authenticated).toggleClass(
"is-not-authenticated", !is_authenticated).toggleClass("is-pro", is_authenticated &&
user && !!user.is_pro).toggleClass("is-not-pro", !(is_authenticated && user && user
.is_pro)).toggleClass("is-trial", is_authenticated && user && !!user.is_trial)
.toggleClass("is-not-trial", !(is_authenticated && user && user.is_trial)).toggleClass(
"is-not-trial-available", void 0 === available_offers[OFFERS.trial]).toggleClass(
"is-trial-available", void 0 !== available_offers[OFFERS.trial]).toggleClass(
"is-upsale-available", is_authenticated && void 0 !== available_offers[OFFERS
.upsale]), TVSettings.sync(user.settings), $(".js-header__gopro-button").attr(
"href", is_authenticated ? "/gopro/" : ""), is_authenticated ? ($(
".saved_charts_count").html(user.saved_charts), $(".treated_charts_count").html(
user.treated_charts_count), $(".js-trial-days-left").html(user
.trial_days_left_text || ""), $(".js-header-gopro-button").attr("href",
"/gopro/"), user.fastpass_script && eval(user.fastpass_script), user
.is_first_login && ($(function() {}), trackEvent("Conversion", "First login"), user
.prort_trial_started && delete user.prort_trial_started, delete user
.is_first_login), TradingView.setTrialAvailiable(void 0 !== user
.available_offers[OFFERS.trial])) : (Object.keys(available_offers).forEach(
function(t) {
available_offers[t].available_for_anons || delete available_offers[t]
}), user = {
username: "Guest",
following: "0",
followers: "0",
ignore_list: {},
available_offers: available_offers
}, $(".user-info-username").html(user.username), TVLocalStorage.removeItem(
"trial_availiable"))
}
var loginStateChange, djangoLogoutFinished, TVXWindowEvents = __webpack_require__(93)
.TVXWindowEvents,
trackEvent = __webpack_require__(40).trackEvent,
OFFERS = {};
__webpack_require__(581), $(document).ajaxSend(function(t, e, i) {
"POST" !== i.type || i.crossDomain || e.setRequestHeader("X-CSRFToken", $.cookie(
"csrftoken")), i.crossDomain && !i.forceLanguageHeader || (window.locale ? e
.setRequestHeader("X-Language", window.locale) : console.warn(
"window.locale is not defined"))
}),
loginStateChange = window.loginStateChange ? window.loginStateChange : window
.loginStateChange = new Delegate, djangoLogoutFinished = window.djangoLogoutFinished ?
window.djangoLogoutFinished : window.djangoLogoutFinished = new Delegate, loginStateChange
.subscribe(null, onLoginStateChange), TVXWindowEvents.on("loginStateChange", function() {
var t = JSON.parse(this);
window.user = t.user, window.is_authenticated = !!t.is_authenticated,
loginStateChange.fire()
}),
function() {
var t = "user-obj-changed",
e = {};
window.crossTabSyncUserAttr = function(e) {
var i = {};
e instanceof Array ? e.forEach(function(t) {
i[t] = window.user[t]
}) : i[e] = window.user[e], TVXWindowEvents.emit(t, JSON.stringify(i))
}, window.onChangeUserAttrInAnotherTab = function(t) {
var i = new Delegate;
return e[t] || (e[t] = []), e[t].push(i), i
}, TVXWindowEvents.on(t, function(t) {
var i, o;
t = JSON.parse(t);
for (i in t)
if (window.user[i] = t[i], e[i])
for (o = 0; o < e[i].length; o++) e[i][o].fire(t[i])
})
}(), TradingView.changeLoginState = function(t) {
window.is_authenticated = !!t, TVXWindowEvents.emit("loginStateChange", JSON.stringify({
is_authenticated: is_authenticated,
user: user
})), loginStateChange.fire()
}, window.loginUser = loginUser, TradingView.signOut = function() {
var t = _.clone(window.user);
TradingView.changeLoginState(!1), $.ajax({
type: "POST",
url: "/accounts/logout/",
dataType: "html"
}).done(function() {
TVXWindowEvents.emit("djangoLogoutFinished"), djangoLogoutFinished.fire()
}).fail(function() {
window.user = t, TradingView.changeLoginState(!0)
})
}, window.loginRequiredDelegate = new Delegate, window.runOrSignIn = function(t, e) {
e || (e = {}), e.verifiedPhoneRequired, (is_authenticated || Featuresets.enabled(
"charting_library_base")) && t()
}, TradingView.runOrGoPro = function(t, e, i) {
Featuresets.enabled(e) && t()
}, window.onLoginStateChange = onLoginStateChange, TradingView.isPro = function() {
return is_authenticated && user.is_pro
}, TradingView.setTrialAvailiable = function(t) {
TVLocalStorage.setItem("trial_availiable", t ? 1 : 0)
}, $.fn.reverse = [].reverse, $(window).load(function() {
window.loaded = !0
}), TradingView.notificationsChanged = new Delegate
}).call(exports, __webpack_require__(10), __webpack_require__(118), __webpack_require__(5))
},
function(t, e, i) {
"use strict";
function o(t) {
$(t).attr("title") || t.offsetWidth + r >= t.scrollWidth || $(t).attr("title", $(t).text())
}
var n, r;
Object.defineProperty(e, "__esModule", {
value: !0
}), i(13), n = i(144), r = $.browser.msie || /\btrident\b/i.test(navigator.userAgent) ? 1 : 0, $(
function() {
$(document).on("mouseenter", ".apply-overflow-title", function() {
o(this)
}), $(document).on("mouseenter", ".apply-overflow-tooltip", function() {
function t() {
n.hide(), i.off("mouseleave mousedown", t)
}
var e, i = $(this);
i[0].offsetWidth + r >= i[0].scrollWidth || (e = "", e = i.is(
".apply-overflow-tooltip--allow-text") ? i.text() : i.clone()
.children().remove().end().text().trim(), n.showOnElement(i[0], {
text: e
}), i.on("mouseleave mousedown", t))
})
})
},
function(t, e) {},
function(t, e, i) {
"use strict";
(function(t, e, o) {
var n, r, s, a = i(54).max,
l = i(145).createNoticeDialog,
c = i(134).lazyJqueryUI;
i(241), n = null, r = function(t) {
n || (n = l({
type: "modal",
title: t.title,
content: t.content
}).open(), n.on("beforeClose", function() {
n = null
}))
},
s = window.TVDialogs = {
modalDialog: null,
dialogs: [],
messageInterval: null,
messageDelay: 4e3,
NOTIFICATION_ANIMATION_START_OFFSET: "-33px",
_constrainDraggableOptionsIfNeeded: function(e) {
return t.enabled("constraint_dialogs_movement") && (e.containment =
".chart-page"), e
},
validateHelpers: {
isErrorListening: function(t) {
t.on("keyup.error-checker", s.validateHelpers.isError(t.val(), t))
},
isError: function(t, e) {
return function() {
e.val() !== t && (e.removeClass("error"), e.off(
"keyup.error-checker"))
}
},
makeValidator: function(t, e, i, o, n) {
return function(r) {
var a, l, c;
if (t.removeClass("error"), $("._tv-dialog-field-error").hide(),
"" !== r.errors)
if ("object" == typeof r.errors) {
for (a in r.errors) l = t.filter("input[name^=" + a + "]"),
l.addClass("error").data("error", r.errors[a][0]), s
.validateHelpers.isErrorListening(l);
c = t.filter(".error").first().focus(), s.showError(c.data(
"error"), n)
} else s.showError($.t("Error:") + r.errors, n);
else "function" == typeof o && o(r, i);
e.removeClass("process")
}
}
},
applyMQMatcher: function(t) {
var e, i;
t || (t = s.modalDialog), e = function() {
s.positionDialog()
}, window.matchMedia && (i = ["(max-height: 645px)", "(max-width: 460px)"]
.map(function(t) {
var i = matchMedia(t);
return i.addListener(e), i
}), t.on("destroy", function() {
i.forEach(function(t) {
t.removeListener(e)
})
}))
},
showBrowserExtensionDialog: function(t) {
var o, n;
if (t) return o = {
chrome: {
logo: "/static/images/svg/google-chrome-logo.svg",
name: "Google Chrome",
href: "https://chrome.google.com/webstore/detail/tradingview-free-quotes-a/ommjfbdmijjlbhlhnnnfkmbnkpnjpipj"
}
}, n = i(205), s.createModalDialog("Browser Extension", {
noHeader: !0,
width: "730px",
content: e.render(n.dialogs.browserExtension, {
browser: o[t]
})
}), s.modalDialog.find(".install-extension, ._tv-dialog-title-close")
.click(function(t) {
s.destroy()
}), s.positionDialog(), s.modalDialog
},
showIntervalMismatchDialog: function(t) {
var e, i, o, n, r = $.t("Interval is not applicable"),
s = $("<div></div>"),
a = $.t(
"<p>Only <b>D, W, M</b> intervals are supported for this symbol/exchange. You will be automatically switched to a D interval. Intraday intervals are not available because of exchange policies.</p>"
);
s.append(a), t && (e = $.t("Do not show this message again"), i =
'<label class="dialog-trail-checkbox"><input type="checkbox" style="margin: 0; vertical-align: middle;"/> ' +
e + "</label>", s.append(i), o = s.find("input"), o.attr("checked", t
.silentIntervalChange.value()), o.bind("click", function() {
t.silentIntervalChange.setValue(this.checked)
})), n = l({
title: r,
content: s
}), n.open()
},
showGoProDialog: function() {},
showSignInDialog: function(t, e) {},
goRegistrate: function(t) {},
showAlertTextNotesDialog: function() {
r({
title: $.t("Oops!"),
content: '<div class="tv-text">' + $.t(
'Text Notes are available only on chart page. Please <a href="/chart/">open a chart</a> and then try again.'
) + "</div>"
})
},
showNotice: function(t, i, o) {
var n, r, a, l, c, h;
return "object" == typeof i && (o = i, i = ""), o = o || {}, n = o
.doNotCloseOnBgClick || !1, r = o.html || "", a = o.width || "400px",
l = {}, l.noClose = o.noClose || null, l.addClass = o.modalDialogClass ||
null, s.createModalDialog(t, l), c = o.centerCaption ?
"caption-big-center" : "caption-big",
s.modalDialog.find("._tv-dialog").css("width", a), h = o
.customButtonCaption ? o.customButtonCaption : $.t("OK"), s.modalDialog
.find("._tv-dialog-content").html(e.render(
'<div class="main"><div class="{{captionClassName}} {{classSuffix}}">{{text}}' +
r +
'</div>{{^removeOkButton}}<div class="buttons"><input type="button" class="_tv-button ok" value="' +
h + '"/></div>{{/removeOkButton}}</div>', {
captionClassName: c,
classSuffix: o.classSuffix || "",
text: i,
removeOkButton: o && o.removeOkButton
})), s.modalDialog.find("._tv-button.ok").on("click", function() {
s.destroy(), o.onOkButtonClick && o.onOkButtonClick()
}), s.positionDialog(), s.applyHandlers(!1, {
doNotCloseOnBgClickIfShadowbox: n,
beforeDestroy: o.onClose
}), s.modalDialog
},
showConfirm: function(t, i, o, n, r) {
var a, l;
return r = r || {}, r.dontAskSetting && TVSettings.getBool(r.dontAskSetting) ?
void o() : (a = s.createModalDialog(t, r), s.modalDialog.find("._tv-dialog")
.css("width", r.customWidth ? r.customWidth : "400px"), s.modalDialog
.find("._tv-dialog-content").html(e.render(
'<div class="main"><div class="caption-big">{{{text}}}</div>{{#dontAskSetting}}<input type="checkbox" id="confirm-dialog-checkbox" style="margin: 0; vertical-align: middle;"> <label for="confirm-dialog-checkbox" style="font-size: 11px;">' +
$.t("Do not ask again") +
'</label>{{/dontAskSetting}}</div><div class="_tv-dialogs-bottom _tv-dialog-center"><input class="_tv-button wide ok" type="button" value="' +
$.t("YES") +
'" style="margin-right: 10px;"/><input class="_tv-button wide cancel" type="button" value="' +
$.t("NO") + '"/></div>', {
text: i,
dontAskSetting: !!r.dontAskSetting
})), r.okButtonText && s.modalDialog.find(".ok").val(r
.okButtonText), r.cancelButtonText && s.modalDialog.find(".cancel")
.val(
r.cancelButtonText), l = s.modalDialog.find(".ok"), l.click(
function() {
r.dontAskSetting && $("#confirm-dialog-checkbox").is(
":checked") && TVSettings.setValue(r.dontAskSetting, !
0),
o(), r.manualClose || s.destroy()
}), s.modalDialog.find(".cancel").click(function() {
n && n(), r.manualCloseOnCancel || s.destroy()
}), s.positionDialog(), s.applyHandlers(a, {
processEnterButton: l
}), a)
},
showPrompt: function(t, i, o, n, r) {
function a() {
var t, e = h.val();
if (c && (t = c(e))) return !0 === t && (t = $.t("Wrong value")), void s
.showError(t, s.modalDialog);
s.destroy(), o && o(e)
}
var l, c, h;
r = r || {}, l = r && r.defaultValue, c = r && r.validate, s.createModalDialog(
t, r), s.modalDialog.find("._tv-dialog").css("width", "400px"), s
.modalDialog.find("._tv-dialog-content").html(e.render(
'<div class="main"><form><div class="caption-big-center slim">{{text}}: <input type="text" name="prompt-value" class="prompt-value"/></div></form></div><div class="_tv-dialogs-bottom _tv-dialog-{{bottomAlign}}"><input class="_tv-button wide ok" type="button" value="' +
$.t("OK") +
'" style="margin-right: 10px;"/><input class="_tv-button wide cancel" type="button" value="' +
$.t("Cancel") + '"/></div>', {
text: i,
bottomAlign: r.bottomAlign ? r.bottomAlign : "center"
})), h = s.modalDialog.find('[name="prompt-value"]'), l && h.val(l), s
.modalDialog.find("form").submit(function(t) {
a(), t.preventDefault()
}), s.modalDialog.find(".ok").click(function(t) {
a(), t.preventDefault()
}),
s.modalDialog.find(".cancel").click(function() {
s.destroy(), n && n()
}), s.positionDialog(), s.applyHandlers(), setTimeout(function() {
h.focus().select()
}, 0)
},
showCustomDialog: function(t) {
function e(e) {
var i = t.action(s.modalDialog),
o = i && !i.error,
n = void 0 === i,
r = i && i.notClose;
!o && !n || r ? i.error && s.showError(i.error) : s.destroy(), e
.preventDefault()
}
function i(e) {
"function" == typeof t.onCancel ? t.onCancel() : s.destroy()
}
return s.createModalDialog(t.title || $.t("Dialog"), {
addClass: t.addClass || ""
}), s.modalDialog.find("._tv-dialog").css("width", t.width || "400px"), s
.modalDialog.find("._tv-dialog-content").html('<div class="main">' + (t
.html || $.t("Content")) + "</div>" + (t.noButtons ? "" :
'<div class="_tv-dialogs-bottom _tv-dialog-center">' + (t
.noButtonOk ? "" :
'<input class="_tv-button wide ok" type="button" value="' + $.t(
"OK") + '" style="margin-right: 10px;"/>') + (t
.noButtonCancel ? "" :
'<input class="_tv-button wide cancel" type="button" value="' +
$.t("Cancel") + '"/>') + "</div>")), t.okButtonText && s.modalDialog
.find(".ok").val(t.okButtonText), t.cancelButtonText && s.modalDialog.find(
".cancel").val(t.cancelButtonText), s.modalDialog.find(".ok").click(e),
s.modalDialog.find("form").submit(e), s.modalDialog.find(".cancel").click(
i), s.modalDialog.find("._tv-dialog-title-close").click(i), s
.positionDialog(), s.applyHandlers(), s.modalDialog
},
createModalDialog: function(t, e) {
var i, o;
return e = e || {}, null !== s.modalDialog && s.destroy(), s.modalDialog = $(
'<div class="_tv-dialog-shadowbox"><div class="_tv-dialog _tv-dialog-modal' +
(e.addClass ? " " + e.addClass : "") + '">' + (e.noHeader ? "" :
'<div class="_tv-dialog-title">' + (e.noClose ? "" :
'<a class="_tv-dialog-title-close"></a>') +
'<span class="_tv-dialog-title-text">' + t + "</span></div>") +
'<div class="_tv-dialog-error"><span class="message"></span></div><div class="_tv-dialog-message"><span class="message"></span></div><div class="_tv-dialog-content"></div></div></div>'
).appendTo($("body")).data("title", t), s._addMessageCloseButton(s
.modalDialog.find("._tv-dialog-error")), s._addMessageCloseButton(s
.modalDialog.find("._tv-dialog-message")), e.noShadowBox && s
.modalDialog.addClass("transparent"), e.addClass && s.modalDialog.addClass(e
.addClass), e.width && s.modalDialog.find("._tv-dialog").css({
width: e.width
}), e.content && s.modalDialog.find("._tv-dialog-content").html(e.content),
i = $(".fancybox-overlay"), i.length && (o = i.css("z-index"), $(
"._tv-dialog-shadowbox").css("z-index", o + 1)), e.draggable && c(s
.modalDialog).draggable(s._constrainDraggableOptionsIfNeeded({
handle: s.modalDialog.find("._tv-dialog-title")
})), e.zIndex && s.modalDialog.css("z-index", e.zIndex), s.modalDialog
},
_addMessageCloseButton: function(t) {
var e = $(i(599)).attr({
class: "close",
title: $.t("Close message")
});
t.append(e), $(e).on("click", function() {
t.animate({
marginTop: s.NOTIFICATION_ANIMATION_START_OFFSET,
opacity: 0
}, "fast", function() {
t.hide()
})
})
},
createDialog: function(t, i) {
var o, n, r;
return s.isOpen(t) ? (o = s.get(t), o.find("._tv-dialog-content").html(""), o
.data("new", !1), o) : (i = i || {},
o = $(e.render(
'<div class="_tv-dialog _tv-dialog-nonmodal {{&addClass}}"><div class="_tv-dialog-title{{#hideTitle}} _tv-dialog-title-hidden{{/hideTitle}}{{#hideCloseCross}} _tv-dialog-title-no-close{{/hideCloseCross}}">{{^hideTitle}} {{&title}}{{/hideTitle}}{{^hideCloseCross}}<a class="_tv-dialog-title-close"></a>{{/hideCloseCross}}</div><div class="_tv-dialog-error"><span class="message"></span></div><div class="_tv-dialog-message"><span class="message"></span></div><div class="_tv-dialog-content"></div></div>', {
addClass: i.addClass || "",
hideTitle: i.hideTitle,
hideCloseCross: i.hideCloseCross,
title: t
})).appendTo($("body")), s._addMessageCloseButton(o.find(
"._tv-dialog-error")), s._addMessageCloseButton(o.find(
"._tv-dialog-message")), i.width && o.css({
width: i.width
}), i.content && o.find("._tv-dialog-content").html(i.content), n = 0,
n = i.zIndex ? i.zIndex : s.dialogs && s.dialogs.length ? a($.map(s
.dialogs,
function(t) {
return parseInt((t.dialog || t).css("z-index"), 10)
})) + 1 : 110, o.css("z-index", n), o.data("new", !0), o.data(
"title", t), o.data("id", s.dialogs.length + 1), s.dialogs.push({
title: t,
dialog: o,
id: s.dialogs.length + 1
}), r = {
start: function(t, e) {
var i, o, n = e.helper.css("z-index"),
r = 0,
a = null;
for (i = 0; i < s.dialogs.length; i++)(o = s.dialogs[i]
.dialog.css("z-index")) > r && (r = o, a = s
.dialogs[i].dialog);
e.helper.css("z-index", r), a.css("z-index", n)
}
}, i.dragHandle ? r.handle = i.dragHandle : i.hideTitle || (r.handle =
"._tv-dialog-title"), i.dragOptions && $.extend(r, i.dragOptions),
c(o).draggable(s._constrainDraggableOptionsIfNeeded(r)), o)
},
positionDialog: function(t, e, i) {
function o() {
n.css("margin-left", -Math.round(n.outerWidth() / 2) + "px"), n.css(
"margin-top", -Math.round(n.outerHeight() / 2) + "px")
}
var n, r, a, l, c, h, u, d;
i = i || {}, e = e || i.position, t ? (r = t.width(), a = t.height(), l = $(
window).width(), c = $(window).height(), e && e.top && e.left ? (u =
i.forcePosition ? e.left : Math.max(2, Math.min(l - r - 4, e
.left)) + "px", h = i.forcePosition ? e.top : Math.max(2, Math
.min(
c - a - 4, e.top)) + "px") : e && e.considerScroll ? (d = $(
document), u = Math.round((l - r) / 2 + d.scrollLeft()) + "px",
h = Math.round((c - a) / 2 + d.scrollTop()) + "px") : (u = Math
.round((l - r) / 2) + "px", h = Math.round((c - a) / 2) + "px"), i
.fadeIn ? t.css({
left: u,
top: h
}).hide().fadeIn("fast") : i.smooth ? t.animate({
left: u,
top: h
}) : t.css({
left: u,
top: h
})) : (t = s.modalDialog, n = t.find("._tv-dialog"), o(), n.resize(o))
},
applyHandlers: function(t, e) {
var i, o, n = !t || t === this.modalDialog;
e = e || {}, i = n ? function() {
s.destroy()
} : function() {
s.destroy(t.data("title"))
}, t = t || s.modalDialog.find("._tv-dialog"), e.beforeDestroy && t.on(
"destroy", e.beforeDestroy), t.find(
"._tv-dialog-title ._tv-dialog-title-close, .js-dialog-close").on(
"click",
function(t) {
e.closeHandler && "function" == typeof e.closeHandler ? e
.closeHandler(t) : i()
}), e.doNotCloseOnBgClick || setTimeout(function() {
t.on("mousedownoutside", function(o) {
var n = $(o.target).parents().andSelf();
e.doNotCloseOnBgClickIfShadowbox && n.is(
"._tv-dialog-shadowbox, .tv-dialog__modal-wrap"
) || n.is(
".colorpicker, .charts-popup-list, ._tv-dialog, .tvcolorpicker-popup, .symbol-edit-popup, .ui-datepicker, .clockpicker-popover, .pac-container"
) || (t.unbind("mousedownoutside"), i())
})
}, 0),
t.find('input[type="checkbox"]').change(function() {
var t = $(this);
t.next("._tv-dialog-checkbox-mask").toggleClass("disabled", t.prop(
"disabled")).toggleClass("_tv-dialog-checkbox-mask-active",
t.is(":checked"))
}), o = t.find('input[type="text"]').focus(function() {
$(this).addClass("_tv-dialog-content-textactive")
}).blur(function() {
$(this).removeClass("_tv-dialog-content-textactive")
}).first(), Modernizr.touch || e.notFocusFirst || o.focus(), t.find(
'input[type="password"]').focus(function() {
$(this).addClass("_tv-dialog-content-textactive")
}).blur(function() {
$(this).removeClass("_tv-dialog-content-textactive")
}), t.find("textarea").focus(function() {
$(this).addClass("_tv-dialog-content-textareaactive")
}).blur(function() {
$(this).removeClass("_tv-dialog-content-textareaactive")
}), t.find("._tv-dialog-checkbox-mask").click(function() {
var t = $(this).prev();
t.prop("disabled") || (t.prop("checked", !t[0].checked), t.change())
}), e.doNotCloseOnEsc || $(window).bind("keyup.hideDialog", function(e) {
if (27 === e.keyCode) return t ? s.destroy(t.data("title")) : s
.destroy(), !1
}), e.processEnterButton && $(window).bind("keyup.confirmAndCloseDialog",
function(t) {
13 === t.keyCode && "textarea" !== t.target.tagName.toLowerCase() &&
(e.processEnterButton.click(), $(window).unbind(
"keyup.confirmAndCloseDialog"))
})
},
showError: function(t, e, i) {
s.showMessage(t, e, $.extend(i || {}, {
isError: !0
}))
},
showMessage: function(t, e, i) {
var o, n, r;
e || (e = $("._tv-dialog")), i = i || {}, o = i.isError && "_tv-dialog-error" ||
"_tv-dialog-message", n = e.find("." + o), r = n.find(".message"), i.html ?
r.html("string" == typeof i.html ? i.html : t) : r.text(t), r.css("width", e
.width()).toggleClass("selectable", !!i.selectable), n.toggleClass(
"with-close", !!i.withClose).css({
marginTop: s.NOTIFICATION_ANIMATION_START_OFFSET,
opacity: "0"
}).show().animate({
marginTop: 0,
opacity: 1
}, "fast"), i.withClose || (i.hideWithoutAnimation ? n.on(
"touchstartoutside mousedownoutside keydownoutside",
function t() {
n.hide(), n.off(
"touchstartoutside mousedownoutside keydownoutside", t)
}) : n.on("touchstartoutside mousedownoutside keydownoutside",
function t() {
n.animate({
marginTop: s.NOTIFICATION_ANIMATION_START_OFFSET,
opacity: 0
}, "fast", function() {
n.hide()
}), n.off(
"touchstartoutside mousedownoutside keydownoutside", t)
}))
},
isOpen: function(t) {
for (var e = 0; e < s.dialogs.length; e++)
if (s.dialogs[e].title === t) return !0;
return !1
},
get: function(t) {
for (var e = 0; e < s.dialogs.length; e++)
if (s.dialogs[e].title === t) return s.dialogs[e].dialog
},
submit: function(t, e) {
var i = e ? $(e) : $("._tv-dialog form").first(),
o = i.serialize(),
n = i.attr("action");
$.post(n, o, function(e) {
void 0 !== t && t(e)
}, "json")
},
destroy: function(t, e) {
if (void 0 !== s.chart && (s.chart.destroy(), delete s.chart), $(window).unbind(
"keyup.hideDialog"), $(window).unbind("keyup.confirmAndCloseDialog"),
t && "string" == typeof t)
for (var i = 0; i < s.dialogs.length; i++) s.dialogs[i].title === t && (s
.dialogs[i].dialog.find(".apply-common-tooltip").mouseout(), s
.dialogs[i].dialog.trigger("destroy", e), $(document).unbind(
"mouseup.hideDialog" + s.dialogs[i].id), $("input", s.dialogs[i]
.dialog).blur(), s.dialogs[i].dialog.remove(),
s.dialogs.splice(i, 1));
else s.modalDialog && (s.modalDialog.find(".apply-common-tooltip").mouseout(), s
.modalDialog.find("._tv-dialog").trigger("destroy"), s.modalDialog
.remove(), s.modalDialog = null)
},
changeTitle: function(t, e) {
t && s.dialogs.forEach(function(i) {
var o, n;
if (i.title === t) return o = i.dialog, n = o.find(
"._tv-dialog-title"), i.title = e, o.data("title", e), n
.html(n.html().replace(t, e)), n.find("a").on("click",
function() {
s.destroy(e)
}), !0
})
},
toggleTitleEl: function(t, e) {
s.dialogs.filter(function(e) {
return e.title === t
}).map(function(t) {
return t.dialog
}).forEach(function(t) {
var i = t.find("._tv-dialog-title");
"boolean" != typeof e && (e = i.hasClass(
"_tv-dialog-title-hidden")), i.toggleClass(
"_tv-dialog-title-hidden", !e)
})
},
calcHeight: function(t, e, i) {
null == i && (i = 20), t += i;
var o = parseInt($("body").height(), 10);
return t > o && (e -= t - o, e = Math.max(0, e)), e
},
resizeContent: function(t, e, i) {
var o, n;
null == i && (i = 20), t += i, o = parseInt($("body").height(), 10), n = e
.height(), t > o && (n -= t - o, n = Math.max(0, n), e.height(n))
},
resizeContentWidth: function(t, e, i) {
var o, n;
null == i && (i = 20), t += i, o = parseInt($(window).width(), 10), n = e
.width(), t > o && (n -= t - o, n = Math.max(0, n), e.width(n))
}
}, s.ideaDialogs = {
dialogs: [],
add: function(t) {
s.ideaDialogs.dialogs.push(t)
},
remove: function(t) {
s.ideaDialogs.dialogs = $.grep(s.ideaDialogs.dialogs, function(e) {
return "" + e != "" + t
})
},
clear: function() {
s.ideaDialogs.dialogs.forEach(function(t) {
s.destroy(t)
})
},
getDraggableEmptyTitle: function() {
return $(document.createElement("div")).css({
height: "30px",
"margin-bottom": "-10px",
position: "relative"
})
}
}, void 0 !== o && o && o.exports && (o.exports = s)
}).call(e, i(5), i(41), i(42)(t))
},
function(t, e, i) {
"use strict";
function o(t) {
var e = t.type || "popup";
return delete t.type, "modal" === e ? new n.TVModal(t) : new r.TVPopup(t)
}
var n, r;
Object.defineProperty(e, "__esModule", {
value: !0
}), n = i(585), r = i(592), e.createDialog = o
},
function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
});
var o = i(586);
e.TVModal = o.TVModal, e.isOpenedModals = o.isOpenedModals
},
function(t, e, i) {
"use strict";
(function(t) {
function o(t) {
return t && t.__esModule ? t : {
default: t
}
}
function n(t) {
var e, i;
if (t && t.__esModule) return t;
if (e = {}, null != t)
for (i in t) Object.prototype.hasOwnProperty.call(t, i) && (e[i] = t[i]);
return e.default = t, e
}
function r(t, e) {
if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
}
function s(t, e) {
if (!t) throw new ReferenceError(
"this hasn't been initialised - super() hasn't been called");
return !e || "object" != typeof e && "function" != typeof e ? t : e
}
function a(t, e) {
if ("function" != typeof e && null !== e) throw new TypeError(
"Super expression must either be null or a function, not " + typeof e);
t.prototype = Object.create(e && e.prototype, {
constructor: {
value: t,
enumerable: !1,
writable: !0,
configurable: !0
}
}), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
}
function l() {
return 0 !== S.length
}
var c, h, u, d, p, _, f, m, g, v, y, b, S, w;
Object.defineProperty(e, "__esModule", {
value: !0
}), e.TVModal = void 0, c = Object.assign || function(t) {
var e, i, o;
for (e = 1; e < arguments.length; e++) {
i = arguments[e];
for (o in i) Object.prototype.hasOwnProperty.call(i, o) && (t[o] = i[o])
}
return t
}, h = function() {
function t(t, e) {
var i, o;
for (i = 0; i < e.length; i++) o = e[i], o.enumerable = o.enumerable || !1, o
.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t,
o.key, o)
}
return function(e, i, o) {
return i && t(e.prototype, i), o && t(e, o), e
}
}(), e.isOpenedModals = l, u = i(31), d = n(u), p = i(201), _ = o(p), f = i(202), m = i(
172), g = i(147), v = n(g), y = i(121), b = n(y), S = [], w = {
ajax: {},
closingDuration: d.dur / 2,
overlayTemplate: '<div class="tv-dialog__overlay"></div>',
containerTemplate: '<div class="tv-dialog__modal-wrap"><div class="tv-dialog__modal-container"><div class="tv-dialog__modal-body"></div></div></div>',
ajaxErrorTemplate: '<div class="tv-dialog__error js-dialog__close">' + $.t("Error") +
"</div>"
}, e.TVModal = function(e) {
function i() {
var t, e, o, n, a = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] :
{};
return r(this, i), t = s(this, (i.__proto__ || Object.getPrototypeOf(i)).call(this,
c({}, w, a))), t.$overlay = $(t.options.overlayTemplate), t.$modalWrap = $(t
.options.containerTemplate), t.$body = t.$modalWrap.find(
".tv-dialog__modal-body").append(t.$el), t.options.closeOnOutsideClick && t
.$overlay.add(t.$modalWrap).click(function(e) {
t.isEventOut(e) && t.close()
}), t.on("change:zIndex", function() {
t.$overlay.css("z-index", t.zIndex), t.$modalWrap.css("z-index", t
.zIndex)
}), t.on("destroy", function() {
var e = function() {
t.$overlay.remove(), t.$modalWrap.remove()
};
t.opened ? (t.close(), setTimeout(e, t.options.closingDuration)) : e()
}), t.on("beforeOpen", function() {
S.push(t)
}), t.options.ajax.url && (e = t.options.ajax.beforeSend || $.noop, o = t
.options.ajax.success || !1, n = t.options.ajax.error || $.noop, $.extend(t
.options.ajax, {
beforeSend: function() {
t.trigger("beforeLoading", [t]), t.startSpinner(), e(t)
},
success: function(e) {
t.trigger("afterLoading", [t]), t.renderContent(o ? o(t,
e) : e).showContent(), t.trigger("afterLoadingShow",
[t])
},
error: function() {
t.renderContent(t.options.ajaxErrorTemplate), n(t), t
.trigger("errorLoading", [t])
}
})), t.on("error", function(e, i) {
t.$modalWrap[0].getBoundingClientRect().height < t.$content[0]
.getBoundingClientRect().height && i.addClass("i-fixed").css({
width: t.$el.width()
})
}), t
}
return a(i, e), h(i, [{
key: "open",
value: function() {
var t, e = this;
if (!this.opened) return this.opened = !0, v.disable(), b
.disable(), _.default.setFixedBodyState(!0), t =
function() {
e.focus(), e.toTop(), $("body").append(e.$overlay
.addClass("i-hidden i-closed").css(
"z-index", e.zIndex)).append(e
.$modalWrap.addClass("i-hidden i-closed")
.css("z-index", e.zIndex)), e.trigger(
"beforeOpen", [e]), e.$overlay.removeClass(
"i-hidden"), setTimeout(function() {
e.$overlay.removeClass("i-closed")
}, 20), e.options.ajax.url ? e.ajaxRequest = $
.ajax(e.options.ajax) : e.showContent()
}, _.default.isMobileSafari ? setTimeout(function() {
return t()
}, 50) : t(), this
}
}, {
key: "close",
value: function() {
var e = this;
if (this.opened) return this.opened = !1, v.enable(), b
.enable(), this.trigger("beforeClose", [this]), this
.ajaxRequest && (this.ajaxRequest.abort(), delete this
.ajaxRequest), this.hideContent(), this.$overlay
.addClass("i-closed"), setTimeout(function() {
e.$modalWrap.addClass("i-hidden").detach(),
e.$overlay.addClass("i-hidden").detach(),
S = t.without(S, e), _.default
.setFixedBodyState(!1), e.trigger(
"afterClose", [e]), e.unfocus(), S
.length > 0 && S[S.length - 1].focus(), e
.options.destroyOnClose && e.destroy()
}, this.options.closingDuration), this
}
}, {
key: "showContent",
value: function() {
var t = this;
return this.$modalWrap.removeClass("i-hidden"), setTimeout(
function() {
t.$modalWrap.removeClass("i-closed")
}, 20), setTimeout(function() {
t.trigger("afterOpen", [t]), t.spinner && t
.stopSpinner()
}, .75 * d.dur + 20), this
}
}, {
key: "hideContent",
value: function() {
if (this.$el) return this.$modalWrap.addClass("i-closed"), this
.unfocus(), this
}
}, {
key: "startSpinner",
value: function() {
return this.spinner = (0, m.unifiedSpinner)("xlarge", {
color: d.color.black255,
zIndex: !1
}), this.spinner.spin(this.$overlay[0]), this
}
}, {
key: "stopSpinner",
value: function() {
if (this.spinner) return this.spinner.stop(), delete this
.spinner, this
}
}]), i
}(f.TVDialogAbstract)
}).call(e, i(118))
},
function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
}), e.breakpoints = {
desktop: 1 / 0,
desktopHd: 1919,
phone: 767,
"phone-vertical": 479,
tablet: 1019
}
},
function(t, e, i) {
"use strict";
(function(t, o) {
function n(t) {
return t && t.__esModule ? t : {
default: t
}
}
function r(t) {
var e, i;
if (t && t.__esModule) return t;
if (e = {}, null != t)
for (i in t) Object.prototype.hasOwnProperty.call(t, i) && (e[i] = t[i]);
return e.default = t, e
}
function s(t, e) {
if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
}
function a(t, e) {
if (!t) throw new ReferenceError(
"this hasn't been initialised - super() hasn't been called");
return !e || "object" != typeof e && "function" != typeof e ? t : e
}
function l(t, e) {
if ("function" != typeof e && null !== e) throw new TypeError(
"Super expression must either be null or a function, not " + typeof e);
t.prototype = Object.create(e && e.prototype, {
constructor: {
value: t,
enumerable: !1,
writable: !0,
configurable: !0
}
}), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
}
function c() {
y.forEach(function(t) {
return t.close()
})
}
var h, u, d, p, _, f, m, g, v, y, b, S, w, T, C, x, P;
Object.defineProperty(e, "__esModule", {
value: !0
}), e.TVDialogAbstract = void 0, h = Object.assign || function(t) {
var e, i, o;
for (e = 1; e < arguments.length; e++) {
i = arguments[e];
for (o in i) Object.prototype.hasOwnProperty.call(i, o) && (t[o] = i[o])
}
return t
}, u = function() {
function t(t, e) {
var i, o;
for (i = 0; i < e.length; i++) o = e[i], o.enumerable = o.enumerable || !1, o
.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t,
o.key, o)
}
return function(e, i, o) {
return i && t(e.prototype, i), o && t(e, o), e
}
}(), e.closeAllDialogs = c, d = i(31), p = r(d), i(589), _ = i(204), f = n(_), i(590), i(
591), m = i(91), g = n(m), v = 0, y = [], b = void 0, S = 110, w = $(document), T = {
closeOnEsc: !0,
closeButton: !0,
focusFirstControl: !0,
closeOnOutsideClick: !0,
closeButtonAddClass: "",
focusClass: "i-focused",
template: '<div class="tv-dialog">',
errorTemplate: '<div class="tv-dialog__error i-slided{{# errorMod }} tv-dialog__error--{{ errorMod }}{{/ errorMod }}">{{{ error }}}</div>',
titleTemplate: '<div class="tv-dialog__section tv-dialog__section--title js-dialog__drag"><div class="js-title-text tv-dialog__title">{{{ title }}}</div></div>',
contentWrapTemplate: '<div class="tv-dialog__section tv-dialog__section--no-border">',
actionsWrapTemplate: '<div class="tv-dialog__section tv-dialog__section--actions tv-dialog__section--no-border">',
closeButtonTemplate: '<div class="tv-dialog__close js-dialog__close">' + i(169) +
"</div>",
helpButtonTemplate: '<a href="{{{ link }}}" target="_blank" class="tv-dialog__help apply-common-tooltip" title="{{{ title }}}"></a>',
helpActionsMod: "tv-dialog__section--actions_with-help"
}, C = {
default: "tv-button tv-button--default",
primary: "tv-button tv-button--primary",
success: "tv-button tv-button--success",
danger: "tv-button tv-button--danger",
warning: "tv-button tv-button--warning",
link: "tv-button tv-button--link",
checkbox: "tv-control-checkbox tv-control-checkbox--in-actions",
"default-ghost": "tv-button tv-button--default_ghost",
"primary-ghost": "tv-button tv-button--primary_ghost",
"success-ghost": "tv-button tv-button--success_ghost",
"danger-ghost": "tv-button tv-button--danger_ghost",
"warning-ghost": "tv-button tv-button--warning_ghost"
}, x = {
_default: '<div data-name="{{ name }}" class="js-dialog__action-click js-dialog__no-drag {{ class }}">{{ text }}</div>',
"submit-success": '<button type="submit" class="tv-button tv-button--success">{{ text }}</button>'
}, $(function() {
T.$wrap = $(document.all && !document.querySelector ? "html" : "body")
}), P = function(e) {
function i() {
var e, o, n, r, l, c = arguments.length > 0 && void 0 !== arguments[0] ? arguments[
0] : {};
for (s(this, i), e = a(this, (i.__proto__ || Object.getPrototypeOf(i)).call(this)),
e._id = v++, e.loadingActions = [], e.disabledActions = [], e
.firstFocusControl = null, e.options = h({}, T, c), e.$el = $(t.render(e.options
.template, {
title: e.options.title,
closeButton: e.options.closeButton
})), e.$el.addClass("js-dialog"), e.el = e.$el[0], e.options.addClass && e
.$el.addClass(e.options.addClass), e.options.width && e.$el.css({
width: "100%",
"max-width": e.options.width
}), e.options.title && (e.$title = $(t.render(e.options.titleTemplate, {
title: e.options.title
})).appendTo(e.$el)), e.$content = $(e.options.contentWrapTemplate).appendTo(e
.$el), e.$contentIn = e.$content; e.$contentIn.length;) e.$contentIn = e
.$contentIn.children();
if (e.$contentIn = e.$contentIn.end(), e.options.content && e.renderContent(e
.options.content), (e.options.actions || e.options.help) && (e.$content
.hasClass("tv-dialog__section") && e.$content.addClass(
"tv-dialog__section--no-padding_bottom"), e.$actions = $(e.options
.actionsWrapTemplate).appendTo(e.$el)), e.options.actions)
for (e.actions = {}, e.$el.on("click touchend", ".js-dialog__action-click",
function(t) {
t.preventDefault(), e.actionDispatcher($(t.currentTarget).data(
"name"))
}), o = function(i) {
var o, n, r, s, a, l, c = e.options.actions[i];
c.type || (c.type = "default"), c.class || (c.class = C[c.type] ? C[c
.type] : C.default), "checkbox" === c.type ? (o = new f
.default({
labelRight: c.text,
name: c.name,
checked: c.checked
}), e.actions[c.name] = o.$el.appendTo(e.$actions), e.actions[c
.name].on("change", function(t) {
setTimeout(function() {
return TVSettings.setValue(
"publish.showIntroText", !o.checked)
}, 0)
})) : e.actions[c.name] = $(t.render(c.template ? c.template :
x[c
.type] || x._default, c, c)).appendTo(e.$actions),
c.method && "function" == typeof e[c.method] && e.on("action:" + c
.name, e[c.method].bind(e)), c.addClass && e.actions[c.name]
.addClass(c.addClass), c.key && (n = void 0, "string" == typeof c
.key && c.key.split("+").length > 1 ? (r = [], s = c.key.split(
"+"), n = function(t) {
r = []
}, a = function(t) {
var i = "" + t.keyCode; - 1 !== s.indexOf(i) && r
.indexOf(i) && r.push(i), e._focused && r.length ===
s.length && (r = [], e.actionDispatcher(c.name))
}, e.on("afterOpen", function() {
w.on("keydown", a), w.on("keyup", n)
}), e.on("beforeClose", function() {
w.off("keydown", a), w.off("keyup", n)
})) : (l = $.isArray(c.key) ? c.key : [c.key], n = function(t) {
e._focused && -1 !== l.indexOf(t.keyCode) && e
.actionDispatcher(c.name)
}, e.on("afterOpen", function() {
return w.on("keyup", n)
}), e.on("beforeClose", function() {
return w.off("keyup", n)
})))
}, n = e.options.actions.length - 1; n >= 0; n--) o(n);
return e.options.help && $(t.render(e.options.helpButtonTemplate, e.options.help))
.prependTo(e.$actions.addClass(e.options.helpActionsMod)), e.options
.closeButton && (r = $(e.options.closeButtonTemplate), r.addClass(e.options
.closeButtonAddClass || ""), l = e.$el, 1 === e.$el.find(
".js-close-button-place").length && (l = e.$el.find(
".js-close-button-place")), r.appendTo(l)), e.setZIndex(S + y.length), c
.errorMod && (e.errorMod = c.errorMod), e.on("afterOpen", function() {
e.options.focusFirstControl && !Modernizr.touch && (e
.firstFocusControl || e.$el.find(
'input:not([type="hidden"]), textarea').first()).focus()
}), e.$el.on("click touchend", ".js-dialog__close", e.close.bind(e)), e.$el.on(
"mousedown touchstart", e.focus.bind(e)), y.push(e), e
}
return l(i, e), u(i, [{
key: "renderContent",
value: function(t) {
return this.$contentIn.html("function" == typeof t ? t(this) :
t), this
}
}, {
key: "setDestroyOnClose",
value: function(t) {
this.options.destroyOnClose = t
}
}, {
key: "setZIndex",
value: function(t) {
return this.zIndex = t, this.trigger("change:zIndex", [this]),
this
}
}, {
key: "toTop",
value: function() {
for (var t = y.length - 1; t >= 0; t--) y[t].zIndex > this
.zIndex && y[t].setZIndex(y[t].zIndex - 1);
return this.setZIndex(S + y.length), this
}
}, {
key: "isEventOut",
value: function(t) {
var e, i, o;
return this.options.isClickOutFn && void 0 !== (e = this.options
.isClickOutFn(t)) ? e : (i = !0, o = $(t.target), o.get(
0) !== this.$el.get(0) && ($(">*", this.$el).each(
function() {
o.get(0) === $(this).get(0) && (i = !1),
0 === o.closest("HTML", $(this).get(0))
.length && (i = !1)
}), i))
}
}, {
key: "focus",
value: function() {
var t = this;
b && b !== this && b.unfocus(), this._setFocused(), this
._focused = !0, this.$el.addClass(this.options.focusClass),
this.trigger("focus", [this]), setTimeout(function() {
w.on("mousedown.tv-dialog-unfocus-" + t._id,
function(e) {
t.isEventOut(e) && (t.unfocus(), w.off(
"mousedown.tv-dialog-unfocus-" +
t._id))
})
}, 20)
}
}, {
key: "_setFocused",
value: function() {
b !== this && (b = this)
}
}, {
key: "_setUnfocused",
value: function() {
b === this && (b = void 0)
}
}, {
key: "unfocus",
value: function() {
b === this && (this._setUnfocused(), this._focused = !1, this
.$el.removeClass(this.options.focusClass).find(":focus")
.blur(), this.trigger("unfocus", [this]))
}
}, {
key: "isFocused",
value: function() {
return this._focused
}
}, {
key: "setTitle",
value: function(t) {
var e = arguments.length > 1 && void 0 !== arguments[1] &&
arguments[1];
return this.$title.toggleClass(
"tv-dialog__section--one-line apply-overflow-tooltip", e
), this.$title.html(t), this
}
}, {
key: "setTitleText",
value: function(t) {
this.$title.find(".js-title-text").text(t)
}
}, {
key: "actionDispatcher",
value: function(t) {
this.disabledActions.includes(t) || this.loadingActions
.includes(t) || this.trigger("action:" + t, [this])
}
}, {
key: "toggleAction",
value: function(t, e) {
return !e && this.disabledActions.includes(t) ? this
.disabledActions.push(t) : e && this.disabledActions
.includes(t) && (this.disabledActions = o.without(this
.disabledActions, t)), this.actions[t].toggleClass(
"i-disabled", !e), this
}
}, {
key: "actionLoader",
value: function(t) {
var e = this,
i = arguments.length > 1 && void 0 !== arguments[1] ?
arguments[1] : "init";
return this.actions[t].tvButtonLoader(i), "init" === i && (this
.actions[t].off("tv-button-loader:start.dialog-action")
.on("tv-button-loader:start.dialog-action", function() {
e.loadingActions.push(t)
}), this.actions[t].off(
"tv-button-loader:stop.dialog-action").on(
"tv-button-loader:stop.dialog-action",
function() {
e.loadingActions = o.without(e.loadingActions,
t)
})), this
}
}, {
key: "error",
value: function(e) {
var i = $(t.render(this.options.errorTemplate, {
error: e,
errorMod: this.errorMod
})).appendTo(this.$el),
o = function() {
i.addClass("i-slided"), setTimeout(function() {
return i.remove()
}, .75 * p.dur)
};
return setTimeout(function() {
return i.removeClass("i-slided")
}, 20), w.one("touchstart mousedown keydown", o), this
.trigger("error", [this, i]), this
}
}, {
key: "destroy",
value: function() {
y = o.without(y, this);
for (var t = 0; t < y.length; t++) y[t].setZIndex(S + t);
this.trigger("destroy", [this])
}
}, {
key: "isOpened",
value: function() {
return !!this.opened
}
}]), i
}(g.default), e.TVDialogAbstract = P, w.on("keyup.tv-dialog-esc", function(t) {
b && b.options.closeOnEsc && !$(".tv-dropdown__body.i-opened").length && !$(t
.target).closest(".js-dialog-skip-escape").length && 27 === t.keyCode && b
.close()
})
}).call(e, i(41), i(118))
},
function(t, e, i) {
"use strict";
function o(t) {
var e, i;
if (t && t.__esModule) return t;
if (e = {}, null != t)
for (i in t) Object.prototype.hasOwnProperty.call(t, i) && (e[i] = t[i]);
return e.default = t, e
}
function n(t, e) {
if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
}
var r, s, a, l, c;
Object.defineProperty(e, "__esModule", {
value: !0
}), e.ButtonLoader = void 0, r = function() {
function t(t, e) {
var i, o;
for (i = 0; i < e.length; i++) o = e[i], o.enumerable = o.enumerable || !1, o
.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key,
o)
}
return function(e, i, o) {
return i && t(e.prototype, i), o && t(e, o), e
}
}(), s = i(203), a = i(31), l = o(a), $.fn.tvButtonLoader = (0, s.createTvBlockWithInstance)(
"tv-button-loader",
function(t, e) {
return new c(t, e)
}), c = e.ButtonLoader = function() {
function t(e, i) {
n(this, t), this.$btn = $(e).addClass("tv-button--loader"), 0 === this.$btn.find(
".tv-button__loader").length && this.$btn.html('<span class="tv-button__text">' +
this.$btn.html() +
'</span><span class="tv-button__loader"><span class="tv-button__loader-item"></span><span class="tv-button__loader-item"></span><span class="tv-button__loader-item"></span></span>'
), this.loading = this.$btn.hasClass("i-loading")
}
return r(t, [{
key: "_start",
value: function() {
var t = this;
this.starting = !0, this.$btn.addClass("i-start-load"), this.$btn
.trigger("tv-button-loader:start"), setTimeout(function() {
t.loading = !0, t.starting = !1, t._startPromise = !1, t
.$btn.addClass("i-loading"), t.$btn.removeClass(
"i-start-load"), t._stopPromise && t._stop()
}, 2 * l.dur)
}
}, {
key: "start",
value: function() {
this.starting || (this.stopping ? this._startPromise = !0 : this
._start())
}
}, {
key: "_stop",
value: function() {
var t = this;
this.stopping = !0, this.$btn.addClass("i-stop-load"), this.$btn
.trigger("tv-button-loader:stop"), setTimeout(function() {
t.loading = !1, t.stopping = !1, t._stopPromise = !1, t.$btn
.removeClass("i-loading i-start-load i-stop-load"), t
._startPromise && t._start()
}, l.dur)
}
}, {
key: "stop",
value: function() {
this.stopping || (this.starting ? this._stopPromise = !0 : this._stop())
}
}, {
key: "toggle",
value: function() {
this.loading ? this.stop() : this.start()
}
}, {
key: "contentHtml",
value: function(t) {
return t ? (this.$btn.find(".tv-button__text").html(t), t) : this.$btn
.find(".tv-button__text").html()
}
}, {
key: "contentNojQuery",
value: function() {
return this.$btn.get(0)
}
}, {
key: "disable",
value: function() {
this.stop(), this.$btn.addClass("i-disabled")
}
}, {
key: "enable",
value: function() {
this.$btn.removeClass("i-disabled")
}
}]), t
}()
},
function(t, e) {},
function(t, e) {},
function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
});
var o = i(593);
e.TVPopup = o.TVPopup
},
function(t, e, i) {
"use strict";
function o(t) {
return t && t.__esModule ? t : {
default: t
}
}
function n(t) {
var e, i;
if (t && t.__esModule) return t;
if (e = {}, null != t)
for (i in t) Object.prototype.hasOwnProperty.call(t, i) && (e[i] = t[i]);
return e.default = t, e
}
function r(t, e) {
if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
}
function s(t, e) {
if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
return !e || "object" != typeof e && "function" != typeof e ? t : e
}
function a(t, e) {
if ("function" != typeof e && null !== e) throw new TypeError(
"Super expression must either be null or a function, not " + typeof e);
t.prototype = Object.create(e && e.prototype, {
constructor: {
value: t,
enumerable: !1,
writable: !0,
configurable: !0
}
}), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
}
var l, c, h, u, d, p, _, f, m, g, v, y, b;
Object.defineProperty(e, "__esModule", {
value: !0
}), e.TVPopup = void 0, l = Object.assign || function(t) {
var e, i, o;
for (e = 1; e < arguments.length; e++) {
i = arguments[e];
for (o in i) Object.prototype.hasOwnProperty.call(i, o) && (t[o] = i[o])
}
return t
}, c = function() {
function t(t, e) {
var i, o;
for (i = 0; i < e.length; i++) o = e[i], o.enumerable = o.enumerable || !1, o
.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key,
o)
}
return function(e, i, o) {
return i && t(e.prototype, i), o && t(e, o), e
}
}(), h = i(31), u = n(h), d = i(201), p = o(d), _ = i(202), f = i(173), m = i(134), g = $("body"),
v = $(window), y = {
closeOnClickAtOtherDialogs: !0,
draggable: !0,
scrollWrap: '<div class="tv-dialog__scroll-wrap">',
scrollWrapInner: '<div class="tv-dialog__scroll-wrap-inner">',
withScroll: !0
}, b = "js-dialog__scroll-wrap", e.TVPopup = function(t) {
function e() {
var t, i = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
return r(this, e), t = s(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this, l({}, y,
i))), t.$scrollWrap = t.$content.hasClass(b) ? t.$content : t.$content.find("." +
b), t.$scrollWrap.length ? t.$scrollWrapInner = t.$scrollWrap.children().first() : (
t
.$scrollWrap = t.$content.wrap($(t.options.scrollWrap)).parent(), t
.$scrollWrapInner = t.$content.wrap($(t.options.scrollWrapInner)).parent()), t
.$actions && t.$scrollWrap.addClass("i-with-actions"), t.options.withScroll && (t
.scroll = new f.SidebarCustomScroll(t.$scrollWrap, t.$scrollWrapInner), t.scroll
.scrolled.subscribe(null, function() {
return t.trigger("scroll")
})), t.$scrollWrap.css("overflow", ""), t.$el.addClass(
"tv-dialog--popup i-closed i-hidden"), t.options.width && t.$el.css({
width: "calc(100% - 20px)",
"max-width": t.options.width
}), t.$el.on("mousedown touchstart", t.toTop.bind(t)), t.options.closeOnOutsideClick &&
(t.on("beforeOpen", function() {
setTimeout(function() {
t.opened && $(document).on("click.tv-popup-" + t.id, function(
e) {
var i = $(e.target).closest(".js-dialog");
(t.options.closeOnClickAtOtherDialogs || 0 === i
.length) && t.isEventOut(e) && t.close()
})
}, 0)
}), t.on("beforeClose", function() {
return $(document).off("click.tv-popup-" + t.id)
})), t.on("change:zIndex", function() {
t.$el.css("z-index", t.zIndex)
}), t.on("destroy", function() {
var e = function() {
t.$el.remove()
};
t.opened ? (t.close(), setTimeout(e, u.dur / 2)) : e()
}), t
}
return a(e, t), c(e, [{
key: "open",
value: function() {
var t = this;
return this.opened ? this : (this.opened = !0, this.trigger(
"beforeOpen", [this]), this.$el.appendTo(this.options.$wrap)
.removeClass("i-hidden").css(function() {
var e, i, o, n, r;
return t.calcHeight(), e = v.height(), i = v.width(),
o = t.$el.height(), n = t.$el.width(), r = t.options
.position, r || (r = {
top: e / 2 - o / 2,
left: i / 2 - n / 2
}), r.top > e - o && (r.top = e - o), r.left > i -
n && (r.left = i - n), r
}()), this.focus(), this.toTop(), this._doOpenAnimation().then(
function() {
t.opened && (t.$el.removeClass("i-closed"), t.options
.draggable && ((0, m.lazyJqueryUI)(t.$el)
.draggable({
handle: ".js-dialog__drag",
cancel: "input, textarea, button, select, option, .js-dialog__no-drag, .js-dialog__close",
containment: "window",
cursor: "-webkit-grabbing"
}), t.$el.find(".js-dialog__drag").addClass(
"tv-dialog__grab")), t.trigger(
"afterOpen", [t]))
}), v.on("resize.tv-popup-" + this.id, function() {
t.calcHeight(), t.fixPos()
}), this)
}
}, {
key: "close",
value: function() {
var t = this;
if (this.opened) return this.trigger("beforeClose", [this]), this.$el
.addClass("i-closed"), this.opened = !1, this
._doCloseAnimation().then(function() {
t.opened || ((0, m.lazyJqueryUI)(t.$el).draggable(
"instance").then(function(t) {
t && t.destroy()
}), t.$el.addClass("i-hidden").detach(), g.css(
"cursor", "auto"), t.trigger("afterClose", [
t
]), t.options.destroyOnClose && t.destroy())
}), v.off("resize.tv-popup-" + this.id), this
}
}, {
key: "hide",
value: function() {
this.$el.addClass("i-hidden")
}
}, {
key: "show",
value: function() {
this.$el.removeClass("i-hidden")
}
}, {
key: "fixPos",
value: function() {
var t = this.$el[0].getBoundingClientRect(),
e = {};
t.bottom > p.default.height - 10 && (e.top = p.default.height - 10 - t
.height, e.top < 10 && (e.top = 10)), t.right > p.default
.width - 10 && (e.left = p.default.width - 10 - t.width,
e.left < 10 && (e.left = 10)), (e.top || e.left) && this.$el
.css(e)
}
}, {
key: "calcHeight",
value: function() {
var t, e, i = this.$el[0].getBoundingClientRect(),
o = this.$scrollWrapInner[0].getBoundingClientRect(),
n = this.$scrollWrap[0].getBoundingClientRect(),
r = this.options.height && this.options.height < p.default.height -
20 ? this.options.height : p.default.height - 20;
this.$scrollWrap.css({
height: ""
}).removeClass("i-scrollable"), t = this.$el[0]
.getBoundingClientRect(), (this.options.height || t.height > r) && (
r -= i.height - n.height, r < 60 && (r = 60), this.$scrollWrap
.css({
height: r
})), this.options.withScroll && this.scroll.resize(), e = r < o
.height, e || this.$scrollWrapInner.css("top", 0), this.$scrollWrap
.toggleClass("i-scrollable", e), this.$actions && this.$actions
.toggleClass("tv-dialog__section--actions_with-border", e)
}
}, {
key: "updateScroll",
value: function() {
this.scroll && (this.scroll.updateScroll(), this.scroll
.updateScrollBar())
}
}, {
key: "scrollToStart",
value: function() {
this.scroll && this.scroll.scrollToStart()
}
}, {
key: "_doOpenAnimation",
value: function() {
return Promise.resolve()
}
}, {
key: "_doCloseAnimation",
value: function() {
return Promise.resolve()
}
}]), e
}(_.TVDialogAbstract)
},
function(t, e) {},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 973.125"><path d="M960 832L710.875 582.875C746.438 524.812 768 457.155 768 384 768 171.97 596 0 384 0 171.97 0 0 171.97 0 384c0 212 171.97 384 384 384 73.156 0 140.812-21.562 198.875-57L832 960c17.5 17.5 46.5 17.375 64 0l64-64c17.5-17.5 17.5-46.5 0-64zM384 640c-141.375 0-256-114.625-256-256s114.625-256 256-256 256 114.625 256 256-114.625 256-256 256z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28"><path fill="#ffffff" d="M18 10V0h-8v10H0v8h10v10h8V18h10v-8"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg"><line x2="100%" y2="100%"/><line x2="100%" y1="100%"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 14" width="25" height="14" style="position:relative;top:3px"><path d="M10.43 8.683L9.345 8.68c-.943-.005-1.712-.774-1.716-1.717-.003-.452.172-.877.49-1.195.32-.32.744-.493 1.196-.492l4.002.016c.83.004 2.22.18 2.225 1.316.002.522.427.943.95.942.52-.002.942-.427.94-.95-.007-1.932-1.62-3.188-4.107-3.198l-4.003-.016c-.96-.003-1.862.368-2.54 1.045-.677.68-1.048 1.58-1.044 2.54.003.99.41 1.887 1.06 2.54.652.65 1.55 1.056 2.54 1.06l1.086.004c.522.002.947-.42.948-.942.002-.52-.42-.946-.942-.947zm13.832-1.655c-.008-2.076-1.41-3.59-3.33-3.597l-1.357-.003c-.522-.002-.947.42-.948.942-.002.52.42.946.94.947l1.356.006c.996.003 1.445.863 1.448 1.714.004.453-.17.878-.49 1.196-.317.32-.742.493-1.195.492l-4.27-.017c-1.952-.008-1.955-.924-1.957-1.315-.002-.522-.426-.943-.948-.942-.523.003-.945.428-.943.95.004.896.296 1.63.834 2.17.66.66 1.69 1.023 3.01 1.028l4.27.017c.96.003 1.86-.368 2.54-1.046.675-.678 1.046-1.58 1.043-2.54z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 9 9" width="9px" height="9px"><path d="M2 1L1 2l2.5 2.5L1 7l1 1 2.5-2.5L7 8l1-1-2.5-2.5L8 2 7 1 4.5 3.5z"/></svg>'
},
function(t, e, i) {
"use strict";
function o() {
return "www.tradingview.com" === location.host || "wwwcn.tradingview.com" === location.host ||
"dwq4do82y8xi7.cloudfront.net" === location.host || "s.tradingview.com" === location.host ||
"i18n.tradingview.com" === location.host || "partial.tradingview.com" === location.host ||
location.host.match(/^[a-z]{2}\.tradingview\.com/) || location.host.match(
/prod-[^.]+.tradingview.com/) ? "battle" : -1 !== location.href.indexOf("tradingview.com") ?
"staging" : location.host.match(/webcharts/) ? "staging_local" : (location.host.match(
/^localhost(:\d+)?$/), "local")
}
function n() {
return "local" === o()
}
function r() {
return "battle" === o()
}
function s() {
return !r()
}
Object.defineProperty(e, "__esModule", {
value: !0
}), e.environment = o, e.isLocal = n, e.isProd = r, e.isDebug = s
},
function(t, e, i) {
"use strict";
TradingView.PublishedChartsTimeline = function() {}, TradingView.LinearRegressionPaneView =
function() {}, TradingView.study_PivotPointsStandard = function() {}, TradingView
.study_PivotPointsHighLow = function() {}, TradingView.study_ZigZag = function() {}, TradingView
.study_LinearRegression = function() {}, TradingView.study_ElliottWave = function() {}, TradingView
.ESDStudyBase = function() {}, TradingView.Pro = function() {
this.hasPackage = function() {
return !1
}
}, window.user = {
is_pro: !1,
settings: {}
}, TradingView.Pro.prototype.getStudies = function() {
return []
}, TradingView.Pro.prototype.getProduct = function() {
return {}
}, TradingView.Pro.prototype.getStudiesOrder = function() {
return []
}, TradingView.templates = i(205), TradingView.templates.dialogs = {
symbolSearch: '<div class="symbol-block"><div class="spread-actions"></div><div class="symbol-block-inputspacer"><input maxlength="' +
TradingView.SYMBOL_SEARCH_MAX_LENGTH +
'" /><div class="search-icon"></div></div></div><div class="filter"></div><div class="results"></div>'
}, TradingView.AlertLabel = function() {}, TradingView.getDataVendorString = function() {}, window
.Telemetry = {
sendReport: function() {}
}, TradingView.study_VbPVisible = function() {}, TradingView.study_VbPSessions = function() {},
TradingView.study_ESD$TV_DIVIDENDS = function() {}, TradingView.study_ESD$TV_SPLITS = function() {},
TradingView.study_ESD$TV_EARNINGS = function() {}, TradingView.MockupRequestedCache = function(t) {
t && t([])
}, TradingView.MockupRequestedCache.invalidate = function() {}, TradingView.StudyStrategy =
function() {}, TradingView.LinetoolTemplatesList = function() {}, window.PublishedScript = {
suggest: function() {
var t = $.Deferred();
return t.resolve(null), t
}
}
},
function(t, e, i) {
"use strict";
function o(t) {
void 0 === t && (t = []);
var e = t.map(function(t) {
return x[t]
}) || [d.STYLE_CANDLES, d.STYLE_RENKO, d.STYLE_KAGI, d.STYLE_PNF];
return p.isOnFeaturePage() && !h.enabled("charting_library_base") && (e = []), h.enabled(
"widget") && (e = [d.STYLE_BARS, d.STYLE_CANDLES, d.STYLE_AREA]), e
}
var n, r, s, a, l, c, h, u, d, p, _, f, m, g, v, y, b, S, w, T, C, x, P, L, I;
Object.defineProperty(e, "__esModule", {
value: !0
}), n = i(0), i(13), r = i(2), s = i(27), a = i(83), l = i(14), c = i(91), h = i(5), u = i(23), d =
i(49), p = i(64),
_ = i(207), f = i(603), m = i(17), g = i(616), v = i(617), y = i(122), b = i(618), S = i(93), w = i(
24), T = i(619), C = i(620), e.HEADER_TOOLBAR_HEIGHT_EXPANDED = parseInt(C[
"css-value-header-toolbar-height"]), e.HEADER_TOOLBAR_HEIGHT_COLLAPSED = 3, x = {
Area: d.STYLE_AREA,
Bars: d.STYLE_BARS,
Candles: d.STYLE_CANDLES,
"Heiken Ashi": d.STYLE_HEIKEN_ASHI,
"Hollow Candles": d.STYLE_HOLLOW_CANDLES,
Line: d.STYLE_LINE
}, P = [], L = ["full", "medium"], I = function(t) {
function i(e) {
var i, n, r, s, a = t.call(this, e) || this;
return a._templateSyncEmitter = new c, a._saveLoadSyncEmitter = new c, a
._handleFullWidthChange = function(t) {
a._fullWidth = t, a.setState({
measureValid: !1
})
}, a._handleFavoritesWidthChange = function(t) {
a._favoritesWidth = t, a.setState({
measureValid: !1
})
}, a._handleCollapseWidthChange = function(t) {
a._collapseWidth = t, a.setState({
measureValid: !1
})
}, a._handleMeasure = function(t) {
var e = t.width;
a.setState({
availableWidth: e,
measureValid: !1
})
}, a._showScrollbarWhen = e.allowedModes.slice(-1), i = e.chartWidgetCollection, n = e
.chartSaver, a._chartChangesWatcher = new b.ChartChangesWatcher(i.undoHistory, n, u),
r = o(a.props.defaultFavoriteStyles), a._favoriteChartStylesService = new g
.FavoriteChartStylesService(S.TVXWindowEvents, w, r), s = y.getDefaultFavoriteIntervals(
a.props.defaultFavoriteIntervals), a._favoriteIntervalsService = new v
.FavoriteIntervalsService(S.TVXWindowEvents, w, s), a.state = {
isVisible: !0,
availableWidth: 0,
displayMode: "full",
measureValid: !1,
leftCustomButtons: [],
rightCustomButtons: []
}, a._readOnly = i.readOnly(), a._features = {
accentScreenshotButton: !!a.props.accentScreenshot,
allowFavoriting: h.enabled("items_favoriting"),
showIdeasButton: !!a.props.ideas,
showLaunchInPopupButton: !!a.props.popupButton,
allowSymbolSearchSpread: h.enabled("header_symbol_search") && !h.enabled(
"charting_library_base"),
allowToolbarHiding: h.enabled("collapsible_header")
}, a._setDisplayMode = _(a._setDisplayMode, 100), a._negotiateResizer(), a
}
return n.__extends(i, t), i.prototype.getChildContext = function() {
var t = this.props,
e = t.tools,
i = t.windowMessageService,
o = t.chartWidgetCollection,
n = t.chartApiInstance;
return {
tools: e,
isFundamental: t.isFundamental,
chartWidgetCollection: o,
windowMessageService: i,
chartApiInstance: n,
favoriteStudyTemplatesService: t.favoriteStudyTemplatesService,
studyTemplates: t.studyTemplates,
favoriteChartStylesService: this._favoriteChartStylesService,
favoriteIntervalsService: this._favoriteIntervalsService,
customIntervalsService: this._customIntervalsService,
chartChangesWatcher: this._chartChangesWatcher
}
}, i.prototype.componentDidUpdate = function(t, e) {
var i = this.state,
o = i.isVisible,
n = i.measureValid;
o !== e.isVisible && (u.emit("toggle_header", o), this._negotiateResizer()), n || this
._setDisplayMode()
}, i.prototype.render = function() {
var t, e = this.props,
i = (e.resizerBridge, e.allowedModes),
o = n.__rest(e, ["resizerBridge", "allowedModes"]),
s = this.state,
c = s.displayMode,
h = s.availableWidth,
u = s.isVisible,
d = s.leftCustomButtons,
p = s.rightCustomButtons,
_ = n.__assign({
features: this._features,
readOnly: this._readOnly,
isFake: !1,
templateSyncEmitter: this._templateSyncEmitter,
saveLoadSyncEmitter: this._saveLoadSyncEmitter,
width: h,
leftCustomButtons: d,
rightCustomButtons: p
}, o),
m = n.__assign({}, _, {
isFake: !0,
showScrollbarWhen: P
});
return r.createElement("div", {
className: l(T.toolbar, (t = {}, t[T.isHidden] = !u, t))
}, r.createElement("div", {
className: T.overflowWrap
}, r.createElement(a, {
onMeasure: this._handleMeasure,
whitelist: ["width"]
}, r.createElement(f.ToolbarInner, n.__assign({
showScrollbarWhen: this._showScrollbarWhen,
displayMode: c
}, _))), i.includes("full") && r.createElement(f.ToolbarInner, n.__assign({
displayMode: "full",
onWidthChange: this._handleFullWidthChange
}, m)), i.includes("medium") && r.createElement(f.ToolbarInner, n.__assign({
displayMode: "medium",
onWidthChange: this._handleFavoritesWidthChange
}, m)), i.includes("small") && r.createElement(f.ToolbarInner, n.__assign({
displayMode: "small",
onWidthChange: this._handleCollapseWidthChange
}, m))))
}, i.prototype.addButton = function(t) {
var e, i, o, n, r, s;
return void 0 === t && (t = "left"), e = new m(0), i = $(
'<div class="apply-common-tooltip ' + T.customButton + '">'), o = {
key: +new Date,
jquery: i,
width: e
}, n = this.state, r = n.leftCustomButtons, s = n.rightCustomButtons, "left" === t ?
this.setState({
leftCustomButtons: r.concat([o])
}) : this.setState({
rightCustomButtons: s.concat([o])
}), i
}, i.prototype._negotiateResizer = function() {
this.props.resizerBridge.negotiateHeight(this.state.isVisible ? e
.HEADER_TOOLBAR_HEIGHT_EXPANDED : e.HEADER_TOOLBAR_HEIGHT_COLLAPSED)
}, i.prototype._setDisplayMode = function() {
var t, e, i = this.state.availableWidth,
o = this.props.allowedModes,
n = (e = {}, e.full = this._fullWidth, e.medium = this._favoritesWidth, e.small =
this._collapseWidth, e),
r = o.map(function(t) {
return n[t]
}),
s = r.findIndex(function(t) {
return i >= t
}); - 1 === s && (s = o.length - 1), t = o[s], this.setState({
measureValid: !0,
displayMode: t
})
}, i.childContextTypes = {
tools: s.object.isRequired,
isFundamental: s.bool,
chartApiInstance: s.object,
chartWidgetCollection: s.object,
windowMessageService: s.object,
favoriteChartStylesService: s.object,
favoriteIntervalsService: s.object,
customIntervalsService: s.object,
favoriteStudyTemplatesService: s.object,
studyTemplates: s.object,
chartChangesWatcher: s.object
}, i.defaultProps = {
allowedModes: L
}, i
}(r.PureComponent), e.HeaderToolbar = I
},
function(t, e, i) {
"use strict";
function o(t) {
return [t.findIndex(function(t) {
return r.isValidElement(t) && !!t.key && -1 !== ("" + t.key).indexOf(
"view-only-badge")
}), t.findIndex(function(t) {
return r.isValidElement(t) && !!t.key && -1 !== ("" + t.key).indexOf(
"blue-screenshot")
}), t.findIndex(function(t) {
return r.isValidElement(t) && !!t.key && -1 !== ("" + t.key).indexOf("popup")
})].filter(function(t) {
return t >= 0
}).forEach(function(e) {
t = r.Children.map(t, function(t, i) {
var o, n, s;
if (r.isValidElement(t)) switch ([e - 1, e, e + 1].indexOf(i)) {
case 0:
o = {
noRightDecoration: !0
}, t = r.cloneElement(t, o);
break;
case 1:
n = {
noLeftDecoration: !0,
noRightDecoration: !0
}, t = r.cloneElement(t, n);
break;
case 2:
s = {
noLeftDecoration: !0
}, t = r.cloneElement(t, s)
}
return t
})
}), t
}
var n, r, s, a, l, c, h, u, d, p, _, f, m;
Object.defineProperty(e, "__esModule", {
value: !0
}), n = i(0), r = i(2), s = i(27), a = i(14), i(43), l = i(5), c = i(604), h = i(606), u = i(608),
d = i(610), p = i(612), _ = i(614), f = i(615), m = function(t) {
function e(e) {
var i = t.call(this, e) || this;
return i._activateSymbolSearchMode = function() {
i._setMode(2)
}, i._activateNormalMode = function() {
i._setMode(1)
}, i._handleInnerMeasure = function(t) {
var e = i.props.onWidthChange;
e && e(t)
}, i._processCustoms = function(t) {
var e = i.props.isFake,
o = i.state.mode,
s = i.context.tools;
return t.map(function(t) {
return r.createElement(c.ToolWidgetGroupWrap, {
className: a(1 !== o && _.hidden)
}, r.createElement(s.Custom, n.__assign({}, t, {
isFake: e
})))
})
}, i.state = {
mode: 1
}, i
}
return n.__extends(e, t), e.prototype.render = function() {
var t, e = this.context.tools,
i = this.props,
n = i.features,
s = i.displayMode,
m = i.chartSaver,
g = i.studyMarket,
v = i.readOnly,
y = i.templateSyncEmitter,
b = i.saveLoadSyncEmitter,
S = i.leftCustomButtons,
w = i.rightCustomButtons,
T = i.showScrollbarWhen,
C = i.width,
x = void 0 === C ? 0 : C,
P = i.isFake,
L = void 0 !== P && P,
I = this.state.mode,
k = this._processCustoms(S),
A = this._processCustoms(w),
M = T.includes(s);
return r.createElement("div", {
className: a(_.inner, (t = {}, t[_.fake] = L, t))
}, r.createElement(p.HorizontalScroll, {
isVisibleFade: Modernizr.touch && M,
isVisibleButtons: !Modernizr.touch && M,
isVisibleScrollbar: !1,
shouldMeasure: M && !L
}, r.createElement(h.ToolWidgetResizeDetector, {
onWidthChange: this._handleInnerMeasure
}, !v && r.Children.toArray([e.SymbolSearch && r.createElement(c
.ToolWidgetGroupWrap, {
key: "symbol",
className: 2 === I && _.symbolSearch
}, r.createElement(e.SymbolSearch, {
id: L ? void 0 : f.HeaderToolbarComponentIds
.SymbolSearch,
isActionsVisible: n.allowSymbolSearchSpread,
isExpanded: 2 === I,
onFocus: this._activateSymbolSearchMode,
onBlur: this._activateNormalMode,
maxWidth: x
})), e.DateRange && r.createElement(c.ToolWidgetGroupWrap, {
key: "range"
}, r.createElement(e.DateRange, null)), e.Intervals && 1 ===
I && r.createElement(c.ToolWidgetGroupWrap, {
key: "intervals"
}, r.createElement(e.Intervals, {
id: L ? void 0 : f.HeaderToolbarComponentIds
.Intervals,
isShownQuicks: n.allowFavoriting,
isFavoritingAllowed: n.allowFavoriting,
displayMode: s,
isFake: L
})), e.Bars && 1 === I && r.createElement(c
.ToolWidgetGroupWrap, {
key: "styles"
}, r.createElement(e.Bars, {
id: L ? void 0 : f.HeaderToolbarComponentIds
.ChartStyles,
isShownQuicks: n.allowFavoriting,
isFavoritingAllowed: n.allowFavoriting,
displayMode: s,
isFake: L
})), e.Compare && 1 === I && r.createElement(c
.ToolWidgetGroupWrap, {
key: "compare"
}, r.createElement(e.Compare, {
id: L ? void 0 : f.HeaderToolbarComponentIds
.Compare,
className: _.button,
displayMode: s
})), 1 === I && (e.Compare || e.Indicators) && r
.createElement(c.ToolWidgetGroupWrap, {
key: "study"
}, r.createElement("div", {
className: _.subGroup
}, e.Indicators && r.createElement(e.Indicators, {
id: L ? void 0 : f.HeaderToolbarComponentIds
.Indicators,
className: _.button,
studyMarket: g,
displayMode: s
}), e.Templates && r.createElement(e.Templates, {
id: L ? void 0 : f.HeaderToolbarComponentIds
.StudyTemplates,
isShownQuicks: n.allowFavoriting,
isFavoritingAllowed: n.allowFavoriting,
displayMode: s,
stateSyncEmitter: y,
isFake: L
}))), 1 === I && e.Alert && r.createElement(c
.ToolWidgetGroupWrap, {
key: "alert"
}, r.createElement(e.Alert, {
id: L ? void 0 : f.HeaderToolbarComponentIds.Alerts,
className: _.button,
displayMode: s
})), 1 === I && e.AlertReferral && r.createElement(c
.ToolWidgetGroupWrap, {
key: "alert-referral"
}, r.createElement(e.AlertReferral, {
className: _.button,
displayMode: s
})), 1 === I && n.showIdeasButton && e.Ideas && r
.createElement(c.ToolWidgetGroupWrap, {
key: "charts"
}, r.createElement(e.Ideas, {
isShownSettings: !l.enabled("widget") && !!window
.user,
displayMode: s
})), e.Replay && 1 === I && r.createElement(c
.ToolWidgetGroupWrap, {
key: "replay"
}, r.createElement(e.Replay, {
className: _.button,
displayMode: s
})), e.UndoRedo && 1 === I && r.createElement(c
.ToolWidgetGroupWrap, {
key: "undo-redo"
}, r.createElement(e.UndoRedo, {
id: L ? void 0 : f.HeaderToolbarComponentIds
.UndoRedo
})), e.ScalePercentage && r.createElement(c
.ToolWidgetGroupWrap, {
key: "percentage"
}, r.createElement(e.ScalePercentage, null)), e
.ScaleLogarithm && r.createElement(c.ToolWidgetGroupWrap, {
key: "logarithm"
}, r.createElement(e.ScaleLogarithm, null))
].concat(k)), 1 === I ? o(r.Children.toArray([v && r.createElement(c
.ToolWidgetGroupWrap, {
key: "view-only-badge"
}, r.createElement(d.ToolWidgetViewOnlyBadge, null)), r
.createElement(c.ToolWidgetGroupWrap, {
key: "gap",
className: a(_.fill)
}), !v && e.Layout && r.createElement(c
.ToolWidgetGroupWrap, {
key: "layout"
}, r.createElement(e.Layout, {
id: L ? void 0 : f.HeaderToolbarComponentIds
.Layouts
})), e.Screenshot && !n.accentScreenshotButton && r
.createElement(c.ToolWidgetGroupWrap, {
key: "screenshot"
}, r.createElement(e.Screenshot, {
className: _.iconButton
})), e.SaveLoad && r.createElement(c.ToolWidgetGroupWrap, {
key: "save-load-right"
}, r.createElement(e.SaveLoad, {
id: L ? void 0 : f.HeaderToolbarComponentIds
.SaveLoad,
chartSaver: m,
isReadOnly: v,
displayMode: s,
isFake: L,
stateSyncEmitter: b
})), e.SaveLoadReferral && r.createElement(c
.ToolWidgetGroupWrap, {
key: "save-load-referral"
}, r.createElement(e.SaveLoadReferral, {
isReadOnly: v,
displayMode: s
})), n.showLaunchInPopupButton && e.OpenPopup && r
.createElement(c.ToolWidgetGroupWrap, {
key: "popup"
}, r.createElement(e.OpenPopup, {
className: a(_.iconButton, _.popupButton)
})), e.Screenshot && n.accentScreenshotButton && r
.createElement(c.ToolWidgetGroupWrap, {
key: "blue-screenshot"
}, r.createElement(e.Screenshot, {
color: "blue",
className: _.iconButton
})), !v && e.Properties && r.createElement(c
.ToolWidgetGroupWrap, {
key: "properties"
}, r.createElement(e.Properties, {
id: L ? void 0 : f.HeaderToolbarComponentIds
.Properties,
className: _.iconButton
})), !v && e.Fullscreen && r.createElement(c
.ToolWidgetGroupWrap, {
key: "fullscreen"
}, r.createElement(e.Fullscreen, null))
].concat(A))) : [r.createElement(c.ToolWidgetGroupWrap, {
key: "gap",
className: a(_.fill, 2 === I && _.minimalPriority)
}), r.createElement(c.ToolWidgetGroupWrap, {
key: "symbol-search-close"
}, r.createElement(u.ToolWidgetSymbolSearchCloseButton, {
className: _.iconButton
}))])))
}, e.prototype._setMode = function(t) {
this.setState({
mode: t
})
}, e.contextTypes = {
tools: s.object.isRequired
}, e
}(r.PureComponent), e.ToolbarInner = m
},
function(t, e, i) {
"use strict";
function o(t) {
var e, i = t.children,
o = t.className,
a = t.noLeftDecoration,
l = t.noRightDecoration,
c = t.noMinimalWidth;
return n.createElement("div", {
className: r(o, s.group, (e = {}, e[s.noMinimalWidth] = c, e[s.noLeftDecoration] = a, e[
s.noRightDecoration] = l, e))
}, i)
}
var n, r, s;
Object.defineProperty(e, "__esModule", {
value: !0
}), n = i(2), r = i(14), s = i(605), e.ToolWidgetGroupWrap = o
},
function(t, e) {
t.exports = {
group: "group-wWM3zP_M-",
noLeftDecoration: "noLeftDecoration-15F5a1TB-",
noRightDecoration: "noRightDecoration-2GcAAgVb-",
noMinimalWidth: "noMinimalWidth-1sbl_ff5-"
}
},
function(t, e, i) {
"use strict";
var o, n, r, s, a;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(2), r = i(83), s = i(607), a = function(t) {
function e() {
var e = null !== t && t.apply(this, arguments) || this;
return e._handleMeasure = function(t) {
var i = t.width;
e.props.onWidthChange(i)
}, e
}
return o.__extends(e, t), e.prototype.render = function() {
var t = this.props.children;
return n.createElement(r, {
onMeasure: this._handleMeasure,
whitelist: ["width"]
}, n.createElement("div", {
className: s.wrap
}, t))
}, e
}(n.PureComponent), e.ToolWidgetResizeDetector = a
},
function(t, e) {
t.exports = {
"css-value-header-toolbar-height": "38px",
wrap: "wrap-3tiHesTk-"
}
},
function(t, e, i) {
"use strict";
function o(t) {
return r.createElement(s.ToolWidgetButton, n.__assign({}, t, {
forceInteractive: !0,
icon: a
}))
}
var n, r, s, a;
Object.defineProperty(e, "__esModule", {
value: !0
}), n = i(0), r = i(2), s = i(103), a = i(609), e.ToolWidgetSymbolSearchCloseButton = o
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 17 17" width="17" height="17"><path fill="none" stroke="currentColor" d="M1 1l15 15M1 16L16 1"/></svg>'
},
function(t, e, i) {
"use strict";
function o() {
return n.createElement("div", {
className: s.wrap
}, n.createElement(r.Icon, {
className: s.icon,
icon: a
}), l.text)
}
var n, r, s, a, l;
Object.defineProperty(e, "__esModule", {
value: !0
}), i(12), n = i(2), r = i(59), s = i(611), a = i(302), l = {
text: window.t("View Only Mode")
}, e.ToolWidgetViewOnlyBadge = o
},
function(t, e) {
t.exports = {
wrap: "wrap-3K4w_7te-",
icon: "icon-1dNdRXKB-"
}
},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c, h, u, d, p;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(2), r = i(39), s = i(14), a = i(83), l = i(59), c = i(150), h = i(613), u = i(
31), d = i(303), p = function(t) {
function e(e) {
var i = t.call(this, e) || this;
return i._wrapMeasureRef = null, i._contentMeasureRef = null, i._handleScrollLeft =
function() {
i.animateTo(Math.max(0, i.currentPosition() - (i.state.widthWrap - 50)))
}, i._handleScrollRight = function() {
i.animateTo(Math.min((i.state.widthContent || 0) - (i.state.widthWrap || 0), i
.currentPosition() + (i.state.widthWrap - 50)))
}, i._handleResizeWrap = function(t) {
var e = t.width;
i.setState({
widthWrap: e
}), i._checkButtonsVisibility()
}, i._handleResizeContent = function(t) {
var e = t.width;
i.setState({
widthContent: e
})
}, i._handleScroll = function() {
var t = i.props.onScroll;
t && t(i.currentPosition(), i.isAtLeft(), i.isAtRight()), i
._checkButtonsVisibility()
}, i._checkButtonsVisibility = function() {
var t, e, o, n, r;
(i.props.isVisibleButtons || i.props.isVisibleFade) && (t = i.state, e = t
.isVisibleLeftButton, o = t.isVisibleRightButton, n = i.isAtLeft(), r = i
.isAtRight(), n || e ? n && e && i.setState({
isVisibleLeftButton: !1
}) : i.setState({
isVisibleLeftButton: !0
}), r || o ? r && o && i.setState({
isVisibleRightButton: !1
}) : i.setState({
isVisibleRightButton: !0
}))
}, i._setWrapMeasureRef = function(t) {
i._wrapMeasureRef = t
}, i._setContentMeasureRef = function(t) {
i._contentMeasureRef = t
}, i.state = {
widthContent: 0,
widthWrap: 0,
isVisibleRightButton: !1,
isVisibleLeftButton: !1
}, i
}
return o.__extends(e, t),
e.prototype.componentDidMount = function() {
this._checkButtonsVisibility()
}, e.prototype.componentDidUpdate = function(t, e) {
e.widthWrap === this.state.widthWrap && e.widthContent === this.state.widthContent ||
this._handleScroll(), this.props.shouldMeasure && this._wrapMeasureRef && this
._contentMeasureRef && (this._wrapMeasureRef.measure(), this._contentMeasureRef
.measure())
}, e.prototype.currentPosition = function() {
return this._scroll ? this._scroll.scrollLeft : 0
}, e.prototype.isAtLeft = function() {
return this.currentPosition() <= 1
}, e.prototype.isAtRight = function() {
return this.currentPosition() + this.state.widthWrap >= this.state.widthContent - 1
}, e.prototype.animateTo = function(t, e) {
if (void 0 === e && (e = u.dur), this._scroll) {
var i = r.findDOMNode(this._scroll);
c.doAnimate({
onStep: function(t, e) {
i.scrollLeft = Math.round(e)
},
from: i.scrollLeft,
to: Math.round(t),
easing: u.easingFunc.easeInOutCubic,
duration: e
})
}
}, e.prototype.render = function() {
var t, e, i, o, r, c = this,
u = this.props,
p = u.children,
_ = u.isVisibleScrollbar,
f = u.isVisibleFade,
m = u.isVisibleButtons,
g = u.shouldMeasure,
v = this.state,
y = v.widthContent,
b = v.widthWrap,
S = v.isVisibleRightButton,
w = v.isVisibleLeftButton;
return n.createElement(a, {
whitelist: ["width"],
onMeasure: this._handleResizeWrap,
shouldMeasure: g,
ref: this._setWrapMeasureRef
}, n.createElement("div", {
className: h.wrap
}, n.createElement("div", {
className: s(h.scrollWrap, (t = {}, t[h.noScrollBar] = !_, t)),
onScroll: this._handleScroll,
ref: function(t) {
return c._scroll = t
}
}, n.createElement(a, {
onMeasure: this._handleResizeContent,
whitelist: ["width"],
shouldMeasure: g,
ref: this._setContentMeasureRef
}, n.createElement("div", {
className: h.content
}, p))), f && n.createElement("div", {
className: s(h.fadeLeft, (e = {}, e[h.isVisible] = w && y > b, e))
}), f && n.createElement("div", {
className: s(h.fadeRight, (i = {}, i[h.isVisible] = S && y > b, i))
}), m && n.createElement("div", {
className: s(h.scrollLeft, (o = {}, o[h.isVisible] = w && y > b,
o)),
onClick: this._handleScrollLeft
}, n.createElement("div", {
className: h.iconWrap
}, n.createElement(l.Icon, {
icon: d,
className: h.icon
}))), m && n.createElement("div", {
className: s(h.scrollRight, (r = {}, r[h.isVisible] = S && y > b,
r)),
onClick: this._handleScrollRight
}, n.createElement("div", {
className: h.iconWrap
}, n.createElement(l.Icon, {
icon: d,
className: h.icon
})))))
}, e.defaultProps = {
isVisibleScrollbar: !0,
shouldMeasure: !0
}, e
}(n.PureComponent), e.HorizontalScroll = p
},
function(t, e) {
t.exports = {
wrap: "wrap-1GG7GnNO-",
scrollWrap: "scrollWrap-1icOiezT-",
noScrollBar: "noScrollBar-2zw2auFK-",
content: "content-3_f7yH29-",
icon: "icon-2fZsO52g-",
scrollLeft: "scrollLeft-3OUcqYWy-",
scrollRight: "scrollRight-UDsPWprP-",
isVisible: "isVisible-zZk7F7wr-",
iconWrap: "iconWrap-1U8J-Qkw-",
fadeLeft: "fadeLeft-31arUEZY-",
fadeRight: "fadeRight-36gcjOQb-"
}
},
function(t, e) {
t.exports = {
fake: "fake-37paHC6T-",
inner: "inner-v8eiKwdM-",
subGroup: "subGroup-1JpgB9zD-",
fill: "fill-2axUON87-",
minimalPriority: "minimalPriority-1MGEuVHu-",
button: "button-3xrjDzA4-",
iconButton: "iconButton-3vyD3BPg-",
hidden: "hidden-2kSvETGo-",
symbolSearch: "symbolSearch-3I4QF1U_-"
}
},
function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
});
! function(t) {
t.SymbolSearch = "header-toolbar-symbol-search", t.Intervals = "header-toolbar-intervals", t
.ChartStyles = "header-toolbar-chart-styles", t.Compare = "header-toolbar-compare", t
.Indicators = "header-toolbar-indicators", t.StudyTemplates = "header-toolbar-study-templates",
t.Alerts = "header-toolbar-alerts", t.Layouts = "header-toolbar-layouts", t.SaveLoad =
"header-toolbar-save-load", t.UndoRedo = "header-toolbar-undo-redo", t.Properties =
"header-toolbar-properties"
}(e.HeaderToolbarComponentIds || (e.HeaderToolbarComponentIds = {}))
},
function(t, e, i) {
"use strict";
var o, n, r;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(174), r = function(t) {
function e(e, i, o) {
return void 0 === o && (o = []), t.call(this, e, i, "FAVORITE_CHART_STYLES_CHANGED",
"StyleWidget.quicks", o) || this
}
return o.__extends(e, t), e
}(n.CommonJsonStoreService), e.FavoriteChartStylesService = r
},
function(t, e, i) {
"use strict";
var o, n, r, s, a;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(122), r = i(174), s = i(304), a = function(t) {
function e(e, i, o) {
return t.call(this, e, i, "FAVORITE_INTERVALS_CHANGED", "IntervalWidget.quicks", o) || this
}
return o.__extends(e, t), e.prototype._serialize = function(t) {
return n.convertIntervalsToObject(t.map(n.normalizeIntervalString))
}, e.prototype._deserialize = function(t) {
return s(Object.keys(t).map(n.normalizeIntervalString))
}, e
}(r.AbstractJsonStoreService), e.FavoriteIntervalsService = a
},
function(t, e, i) {
"use strict";
var o, n;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(10), n = function() {
function t(t, e, i) {
this._hasChanges = !1, this._undoHistory = t, this._chartSaver = e, this._globalEvents = i,
this._onValueChanged = new o, this._subscribe()
}
return t.prototype.destroy = function() {
this._unsubscribe(), this._onValueChanged.destroy()
}, t.prototype.hasChanges = function() {
return this._hasChanges
}, t.prototype.getOnChange = function() {
return this._onValueChanged
}, t.prototype._subscribe = function() {
this._globalEvents.subscribe("chart_loaded", this._handleChartLoaded, this), this
._undoHistory.undoStack().onChange().subscribe(this, this._handleChangeUndoStack),
this._chartSaver.chartSaved().subscribe(this, this._handleChartSaved)
}, t.prototype._unsubscribe = function() {
this._globalEvents.unsubscribe("chart_loaded", this._handleChartLoaded, this), this
._undoHistory.undoStack().onChange().unsubscribe(this, this._handleChangeUndoStack),
this._chartSaver.chartSaved().unsubscribe(this, this._handleChartSaved)
}, t.prototype._setChanges = function(t) {
this._hasChanges = t, this._onValueChanged.fire(t)
}, t.prototype._handleChartLoaded = function() {
this._setChanges(!1)
}, t.prototype._handleChangeUndoStack = function() {
var t = this._undoHistory.undoStack().head();
t && t.customFlag("doesnt_affect_save") || this._setChanges(!0)
}, t.prototype._handleChartSaved = function(t) {
t && this._setChanges(!1)
}, t
}(), e.ChartChangesWatcher = n
},
function(t, e) {
t.exports = {
"css-value-header-toolbar-height": "38px",
toolbar: "toolbar-2n2cwgp5-",
isHidden: "isHidden-GTob3P_C-",
overflowWrap: "overflowWrap-PWdgT-U_-",
customButton: "customButton--jqJTfH5-",
hovered: "hovered-1mGRUp3y-"
}
},
function(t, e) {
t.exports = {
"css-value-header-toolbar-height": "38px"
}
},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c, h, u, d, p, _, f, m, g, v, y, b, S, w, T, C, x, P, L, I, k, A, M, E, D;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), i(12), i(43), n = i(2), r = i(39), s = i(14), a = i(24), l = i(5), c = i(26), h = i(
23), u = i(64), d = i(66), p = i(713), _ = i(714), f = i(306), m = i(715), g = i(381), v = i(
717), y = i(85), b = i(307), S = i(721), w = i(725), T = i(726), C = i(727), x = i(729), P = i(
733), L = i(734), I = i(736), k = {
hide: window.t("Hide Drawings Toolbar"),
show: window.t("Show Drawings Toolbar")
}, A = u.onWidget(), M = 52, E = 3, D = function(t) {
function e(e) {
var i = t.call(this, e) || this;
return i._grayedTools = {}, i._handleChangeVisibility = function(t) {
i.setState({
isVisible: t
})
}, i._toggleVisibility = function() {
f.isDrawingToolbarVisible.setValue(!f.isDrawingToolbarVisible.value())
}, i._handleEsc = function() {
c.resetToCursor(!0)
}, c.init(), i._toolsFilter = new p.ToolsFilter(i.props.drawingsAccess), i
._filteredLineTools = _.lineTools.map(function(t) {
return t.filter(function(t) {
return i._toolsFilter.isToolEnabled(d.lineToolsInfo[t.name]
.localizedName)
})
}).filter(function(t) {
return 0 !== t.length
}), i._filteredLineTools.forEach(function(t) {
return t.forEach(function(t) {
i._grayedTools[t.name] = i._toolsFilter.isToolGrayed(d
.lineToolsInfo[t.name].localizedName)
})
}), i.state = {
isVisible: f.isDrawingToolbarVisible.value()
}, i._features = {
favoriting: !A && l.enabled("items_favoriting"),
multicharts: l.enabled("support_multicharts"),
tools: !A || l.enabled("charting_library_base")
}, i._negotiateResizer(), i
}
return o.__extends(e, t), e.prototype.componentDidMount = function() {
f.isDrawingToolbarVisible.subscribe(this._handleChangeVisibility), r.findDOMNode(this)
.addEventListener("contextmenu", function(t) {
return t.preventDefault()
})
}, e.prototype.componentWillUnmount = function() {
f.isDrawingToolbarVisible.unsubscribe(this._handleChangeVisibility)
}, e.prototype.componentDidUpdate = function(t, e) {
var i = this.state.isVisible;
i !== e.isVisible && (h.emit("toggle_sidebar", !i), a.setValue(
"ChartDrawingToolbarWidget.visible", i), this._negotiateResizer())
}, e.prototype.render = function() {
var t, e = this,
i = this.props,
o = i.bgColor,
r = i.chartWidgetCollection,
a = i.readOnly,
l = this.state.isVisible,
h = {
backgroundColor: o && "#" + o
};
return n.createElement("div", {
className: s(I.drawingToolbar, (t = {}, t[I.isHidden] = !l, t)),
style: h
}, n.createElement(m.VerticalScroll, {
onScroll: y.globalClosePopupMenu,
isVisibleFade: Modernizr.touch,
isVisibleButtons: !Modernizr.touch,
isVisibleScrollbar: !1
}, n.createElement("div", {
className: I.inner
}, !a && n.createElement("div", {
className: I.group,
style: h
}, this._filteredLineTools.map(function(t, i) {
return n.createElement(x.ToolDropdownDrawings, {
chartWidgetCollection: r,
favoriting: e._features.favoriting,
grayedTools: e._grayedTools,
key: i,
lineTools: t
})
}), this._toolsFilter.isToolEnabled("Font Icons") && n
.createElement(S.ToolButtonFontIcons, {
isGrayed: this._grayedTools["Font Icons"],
toolName: "LineToolIcon"
})), !a && n.createElement("div", {
className: I.group,
style: h
}, n.createElement(T.ToolButtonTool, {
toolName: "measure"
}), n.createElement(T.ToolButtonTool, {
toolName: "zoom"
}), n.createElement(C.ToolButtonZoomOut, {
chartWidgetCollection: r
})), !a && n.createElement("div", {
className: I.group,
style: h
}, n.createElement(w.ToolButtonProperty, {
property: c.properties().magnet,
saveDefaultOnChange: !0,
toolName: "magnet"
}), this._features.tools && n.createElement(w.ToolButtonProperty, {
property: c.properties().stayInDrawingMode,
saveDefaultOnChange: !0,
toolName: "drawginmode"
}), this._features.tools && n.createElement(w.ToolButtonProperty, {
property: c.lockDrawings(),
toolName: "lockAllDrawings"
}), this._features.tools && n.createElement(w.ToolButtonProperty, {
property: c.hideAllDrawings(),
toolName: "hideAllDrawings"
}), this._features.tools && this._features.multicharts && n
.createElement(w.ToolButtonProperty, {
property: c.drawOnAllCharts(),
saveDefaultOnChange: !0,
toolName: "SyncDrawing"
})), !a && this._features.tools && n.createElement("div", {
className: I.group,
style: h
}, n.createElement(b.ToolButtonAction, {
action: function() {
return e._activeChartWidget().showSourceProperties()
},
toolName: "showObjectsTree"
}), n.createElement(P.ToolDropdownRemove, {
chartWidgetCollection: r,
toolName: "removeAllDrawingTools"
})))), n.createElement("div", {
className: s(I.toggleButton,
"apply-common-tooltip common-tooltip-vertical", !l && I
.collapsed),
onClick: this._toggleVisibility,
title: l ? k.hide : k.show
}, n.createElement(L.VerticalToolbarHider, {
direction: l ? "left" : "right"
})), n.createElement(g.KeyboardDocumentListener, {
keyCode: v.KeyCode.Escape,
handler: this._handleEsc
}))
}, e.prototype._activeChartWidget = function() {
return this.props.chartWidgetCollection.activeChartWidget.value()
}, e.prototype._negotiateResizer = function() {
this.props.resizerBridge.negotiateWidth(this.state.isVisible ? M : E)
}, e
}(n.PureComponent), e.DrawingToolbar = D
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M20.449 8.505l2.103 9.112.974-.225-2.103-9.112zM13.943 14.011l7.631 4.856.537-.844-7.631-4.856zM14.379 11.716l4.812-3.609-.6-.8-4.812 3.609zM10.96 13.828l-4.721 6.744.819.573 4.721-6.744zM6.331 20.67l2.31-13.088-.985-.174-2.31 13.088zM9.041 7.454l1.995 3.492.868-.496-1.995-3.492z"/><path d="M8.5 7c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM5.5 24c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM12.5 14c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM20.5 8c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM23.5 21c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M21.487 5.248l-12.019 1.502.124.992 12.019-1.502zM6.619 9.355l-2.217 11.083.981.196 2.217-11.083zM6.534 22.75l12.071-1.509-.124-.992-12.071 1.509zM21.387 18.612l2.21-11.048-.981-.196-2.21 11.048zM8.507 9.214l10.255 10.255.707-.707-10.255-10.255z"/><path d="M7.5 9c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM4.5 24c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM23.5 7c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM20.5 22c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M8.013 23.846c4.923 2.247 9.792 2.626 13.448-.517l-.652-.758c-3.277 2.817-7.775 2.467-12.381.365l-.415.91z"/><path d="M24.035 20.056c2.262-4.176 1.814-8.73-.13-12.98l-.909.416c1.826 3.993 2.244 8.24.16 12.088l.879.476z"/><path d="M8.221 21.401l13.249-14.077-.728-.685-13.249 14.077z"/><path d="M6.5 24c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM22.5 7c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM22.5 23c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g><path fill-rule="nonzero" d="M7.354 21.354l14-14-.707-.707-14 14z"/><path d="M21 7l-8 3 5 5z"/><path fill-rule="nonzero" d="M22.5 7c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM5.5 24c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><path fill-rule="nonzero" d="M17 12v-6h-6v6h-4.865l7.865 9.438 7.865-9.438h-4.865zm-7-7h8v6h6l-10 12-10-12h6v-6z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><path fill-rule="nonzero" d="M16 17h6v-6h-6v-4.865l-9.438 7.865 9.438 7.865v-4.865zm7 1h-6v6l-12-10 12-10v6h6v8z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><path fill-rule="nonzero" d="M12 11h-6v6h6v4.865l9.438-7.865-9.438-7.865v4.865zm-7 7v-8h6v-6l12 10-12 10v-6h-6z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><path fill-rule="nonzero" d="M11 16v6h6v-6h4.865l-7.865-9.438-7.865 9.438h4.865zm7 7h-8v-6h-6l10-12 10 12h-6v6z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><path fill-rule="nonzero" d="M9.586 18h7.414c3.309 0 6-2.689 6-6 0-3.309-2.687-6-5.994-6h-5.012c-3.306 0-5.994 2.686-5.994 5.994v9.592l3.586-3.586zm-4.586 6v-12.006c0-3.863 3.137-6.994 6.994-6.994h5.012c3.863 0 6.994 3.142 6.994 7 0 3.866-3.142 7-7 7h-7l-5 5z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M6 6v6.5h1v-6.5zM7 22v-2.5h-1v2.5zM11 11v2.5h1v-2.5zM12 24v-7.5h-1v7.5zM16 5v5.5h1v-5.5zM17 21v-2.5h-1v2.5zM21 7v4.5h1v-4.5zM22 19v-2.5h-1v2.5z"/><path d="M6 13v6h1v-6h-1zm-1-1h3v8h-3v-8z"/><path d="M11 16h1v-2h-1v2zm-1-3h3v4h-3v-4z"/><path d="M16 18h1v-7h-1v7zm-1-8h3v9h-3v-9z"/><path d="M21 16h1v-4h-1v4zm-1-5h3v6h-3v-6z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M17.605 19.584c.295-2.304-.584-3.586-3.274-5.959-2.462-2.172-3.191-3.241-2.94-5.111l-.991-.133c-.312 2.322.567 3.61 3.269 5.994 2.452 2.163 3.181 3.227 2.943 5.083l.992.127z"/><path d="M6.053 24.868c3.772 1.644 7.307 1.643 9.712-1.249l-.769-.64c-2.045 2.458-5.133 2.459-8.544.972l-.4.917z"/><path d="M12.949 5.087c2.044-2.525 5.157-2.54 8.602-1.036l.4-.917c-3.81-1.663-7.376-1.646-9.779 1.324l.777.629z"/><path d="M4.5 25c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM16.5 23c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM11.5 8c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM23.5 6c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M6.256 20.652c.548-3.024 1.607-5.962 3.329-8.312l-.807-.591c-1.825 2.493-2.933 5.565-3.506 8.725l.984.178z"/><path d="M12.243 9.657c2.365-1.764 5.345-2.846 8.416-3.402l-.178-.984c-3.21.581-6.326 1.712-8.836 3.584l.598.802z"/><path d="M10.5 12c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM22.5 7c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM5.5 24c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M1.789 23l.859-.854.221-.228c.18-.19.38-.409.597-.655.619-.704 1.238-1.478 1.815-2.298.982-1.396 1.738-2.776 2.177-4.081 1.234-3.667 5.957-4.716 8.923-1.263 3.251 3.785-.037 9.38-5.379 9.38h-9.211zm9.211-1c4.544 0 7.272-4.642 4.621-7.728-2.45-2.853-6.225-2.015-7.216.931-.474 1.408-1.273 2.869-2.307 4.337-.599.852-1.241 1.653-1.882 2.383l-.068.078h6.853z"/><path d="M18.182 6.002l-1.419 1.286c-1.031.935-1.075 2.501-.096 3.48l1.877 1.877c.976.976 2.553.954 3.513-.045l5.65-5.874-.721-.693-5.65 5.874c-.574.596-1.507.609-2.086.031l-1.877-1.877c-.574-.574-.548-1.48.061-2.032l1.419-1.286-.672-.741z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><path fill-rule="nonzero" d="M6 21.586l3.586-3.586h13.407c.004 0 .007-11.993.007-11.993 0-.007-17-.007-17-.007v15.586zm-1 2.414v-18.005c0-.549.451-.995.995-.995h17.01c.549 0 .995.45.995 1.007v11.986c0 .556-.45 1.007-1.007 1.007h-12.993l-5 5z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M23 4v21h1v-21z"/><path d="M17 4v21h1v-21z"/><path d="M5 16.5v8.5h1v-8.5z"/><path d="M5 4v8.5h1v-8.5z"/><path d="M5.5 16c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/><path d="M11 16.5v8.5h1v-8.5z"/><path d="M11 4v8.5h1v-8.5z"/><path d="M11.5 16c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g><path d="M15.246 21.895l1.121.355c-.172.625-.458 1.089-.857 1.393-.4.303-.907.455-1.521.455-.76 0-1.385-.26-1.875-.779-.49-.52-.734-1.23-.734-2.131 0-.953.246-1.693.738-2.221.492-.527 1.139-.791 1.941-.791.701 0 1.27.207 1.707.621.26.245.456.596.586 1.055l-1.145.273c-.068-.297-.209-.531-.424-.703-.215-.172-.476-.258-.783-.258-.424 0-.769.152-1.033.457-.264.305-.396.798-.396 1.48 0 .724.13 1.24.391 1.547.26.307.599.461 1.016.461.307 0 .572-.098.793-.293.221-.195.38-.503.477-.922z"/><path fill-rule="nonzero" d="M20.449 8.505l2.103 9.112.974-.225-2.103-9.112zM13.943 14.011l7.631 4.856.537-.844-7.631-4.856zM14.379 11.716l4.812-3.609-.6-.8-4.812 3.609zM10.96 13.828l-4.721 6.744.819.573 4.721-6.744zM6.331 20.67l2.31-13.088-.985-.174-2.31 13.088zM9.041 7.454l1.995 3.492.868-.496-1.995-3.492z"/><path fill-rule="nonzero" d="M8.5 7c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM5.5 24c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM12.5 14c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM20.5 8c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM23.5 21c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g><path fill-rule="nonzero" d="M6.5 23v1h17.5v-17.5h-1v16.5z"/><path fill-rule="nonzero" d="M21.5 5v-1h-17.5v17.5h1v-16.5z"/><path fill-rule="nonzero" d="M4.5 25c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM23.5 6c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/><path fill-rule="nonzero" d="M13 9v13h1v-13z" id="Line"/><path d="M13.5 6l2.5 3h-5z"/><path fill-rule="nonzero" d="M19 14h-13v1h13z"/><path d="M19 17v-5l3 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g><path fill-rule="nonzero" d="M20 14h-14v1h14z" id="Line"/><path d="M20 17v-5l3 2.5z"/><path fill-rule="nonzero" d="M24 8.5v16.5h1v-16.5zM4 4v16.5h1v-16.5z"/><path fill-rule="nonzero" d="M4.5 24c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM24.5 8c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M20.534 4.664l-13.318 4.701.333.943 13.318-4.701zM20.802 22.371l-13.285-4.689-.333.943 13.285 4.689z"/><path d="M5.5 12c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM22.5 6c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM5.5 19c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM22.5 25c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g><path fill-rule="nonzero" d="M5.238 18.469l4.17-4.17-.707-.707-4.17 4.17zM16.47 17.763l-.707.707-4.265-4.265.707-.707zM22.747 13.546l-4.192 4.192.707.707 4.192-4.192z"/><path fill-rule="nonzero" d="M10.5 14c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM17.5 21c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM24.5 14c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM3.5 21c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/><path d="M13.746 7h-1.258l-.5-1.301h-2.289l-.473 1.301h-1.227l2.23-5.727h1.223l2.293 5.727zm-2.129-2.266l-.789-2.125-.773 2.125h1.563z"/><path d="M26.246 4.895l1.121.355c-.172.625-.458 1.089-.857 1.393-.4.303-.907.455-1.521.455-.76 0-1.385-.26-1.875-.779-.49-.52-.734-1.23-.734-2.131 0-.953.246-1.693.738-2.221.492-.527 1.139-.791 1.941-.791.701 0 1.27.207 1.707.621.26.245.456.596.586 1.055l-1.145.273c-.068-.297-.209-.531-.424-.703-.215-.172-.476-.258-.783-.258-.424 0-.769.152-1.033.457-.264.305-.396.798-.396 1.48 0 .724.13 1.24.391 1.547.26.307.599.461 1.016.461.307 0 .572-.098.793-.293.221-.195.38-.503.477-.922z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g><path fill-rule="nonzero" d="M5.238 18.469l4.17-4.17-.707-.707-4.17 4.17zM16.47 17.763l-.707.707-4.265-4.265.707-.707zM22.747 13.546l-4.192 4.192.707.707 4.192-4.192z"/><path fill-rule="nonzero" d="M10.5 14c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM17.5 21c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM24.5 14c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM3.5 21c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/><path d="M8.395 7l-1.367-5.727h1.184l.863 3.934 1.047-3.934h1.375l1.004 4 .879-4h1.164l-1.391 5.727h-1.227l-1.141-4.281-1.137 4.281z"/><path d="M24.086 7v-2.41l-2.098-3.316h1.355l1.348 2.266 1.32-2.266h1.332l-2.105 3.324v2.402z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g><path fill-rule="nonzero" d="M5.238 18.469l4.17-4.17-.707-.707-4.17 4.17zM16.47 17.763l-.707.707-4.265-4.265.707-.707zM22.747 13.546l-4.192 4.192.707.707 4.192-4.192z"/><path fill-rule="nonzero" d="M10.5 14c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM17.5 21c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM24.5 14c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM3.5 21c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/><path d="M11.148 7h-1.098v-4.137c-.401.375-.874.652-1.418.832v-.996c.286-.094.598-.271.934-.533.336-.262.566-.567.691-.916h.891v5.75z"/><path d="M23.355 5.527l1.094-.113c.031.247.124.443.277.588.154.145.331.217.531.217.229 0 .423-.093.582-.279.159-.186.238-.467.238-.842 0-.352-.079-.615-.236-.791-.158-.176-.363-.264-.615-.264-.315 0-.598.139-.848.418l-.891-.129.563-2.98h2.902v1.027h-2.07l-.172.973c.245-.122.495-.184.75-.184.487 0 .9.177 1.238.531.339.354.508.814.508 1.379 0 .471-.137.892-.41 1.262-.372.505-.889.758-1.551.758-.529 0-.96-.142-1.293-.426-.333-.284-.533-.665-.598-1.145z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g><path fill-rule="nonzero" d="M5.238 18.469l4.17-4.17-.707-.707-4.17 4.17zM16.47 17.763l-.707.707-4.265-4.265.707-.707zM22.747 13.546l-4.192 4.192.707.707 4.192-4.192z"/><path fill-rule="nonzero" d="M10.5 14c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM17.5 21c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM24.5 14c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM3.5 21c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/><path d="M13.746 7h-1.258l-.5-1.301h-2.289l-.473 1.301h-1.227l2.23-5.727h1.223l2.293 5.727zm-2.129-2.266l-.789-2.125-.773 2.125h1.563z"/><path d="M22.582 7v-5.727h4.246v.969h-3.09v1.27h2.875v.965h-2.875v1.559h3.199v.965z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g><path fill-rule="nonzero" d="M5.238 18.469l4.17-4.17-.707-.707-4.17 4.17zM16.47 17.763l-.707.707-4.265-4.265.707-.707zM22.747 13.546l-4.192 4.192.707.707 4.192-4.192z"/><path fill-rule="nonzero" d="M10.5 14c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM17.5 21c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM24.5 14c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM3.5 21c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/><path d="M8.395 7l-1.367-5.727h1.184l.863 3.934 1.047-3.934h1.375l1.004 4 .879-4h1.164l-1.391 5.727h-1.227l-1.141-4.281-1.137 4.281z"/><path d="M22.086 7v-1.043l3.008-3.715h-2.668v-.969h4.191v.898l-3.137 3.863h3.258v.965z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M12.435 6.136c-4.411.589-7.983 3.039-9.085 6.27l.946.323c.967-2.836 4.209-5.059 8.271-5.602l-.132-.991zM3.347 16.584c1.101 3.243 4.689 5.701 9.117 6.283l.13-.991c-4.079-.537-7.335-2.767-8.301-5.613l-.947.321zM16.554 22.865c4.381-.582 7.94-3 9.071-6.2l-.943-.333c-.994 2.811-4.224 5.006-8.26 5.542l.132.991zM25.646 12.394c-1.107-3.225-4.675-5.668-9.078-6.257l-.133.991c4.056.542 7.293 2.76 8.265 5.591l.946-.325z"/><path d="M14.5 8c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM14.5 24c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM3.5 16c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM25.5 16c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M4.354 25.354l5-5-.707-.707-5 5z"/><path d="M12.354 17.354l5-5-.707-.707-5 5z"/><path d="M20.354 9.354l5-5-.707-.707-5 5z"/><path d="M18.5 12c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM10.5 20c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M7.463 12.026l13.537-7.167-.468-.884-13.537 7.167z"/><path d="M22.708 16.824l-17.884 9.468.468.884 17.884-9.468z"/><path d="M22.708 9.824l-15.839 8.386.468.884 15.839-8.386z"/><path d="M5.5 14c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM5.5 21c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM22.5 5c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M23.868 7.825c2.791 3.916 2.918 9.33-.065 13.435-3.733 5.138-10.925 6.277-16.063 2.544l.721-.714c4.682 3.294 11.157 2.229 14.534-2.418 2.641-3.635 2.657-8.502.153-12.133l.721-.714z"/><path d="M8.477 5.899c3.584-2.509 8.298-2.514 11.865-.127l.718-.721c-3.845-2.669-9.099-2.813-13.157.028-5.203 3.643-6.467 10.814-2.824 16.016l.718-.721c-3.201-4.737-2.022-11.185 2.68-14.476z"/><path d="M14.5 22c4.142 0 7.5-3.358 7.5-7.5 0-4.142-3.358-7.5-7.5-7.5-4.142 0-7.5 3.358-7.5 7.5 0 4.142 3.358 7.5 7.5 7.5zm0 1c-4.694 0-8.5-3.806-8.5-8.5s3.806-8.5 8.5-8.5 8.5 3.806 8.5 8.5-3.806 8.5-8.5 8.5z"/><path d="M14.5 19c2.485 0 4.5-2.015 4.5-4.5s-2.015-4.5-4.5-4.5-4.5 2.015-4.5 4.5 2.015 4.5 4.5 4.5zm0 1c-3.038 0-5.5-2.462-5.5-5.5s2.462-5.5 5.5-5.5 5.5 2.462 5.5 5.5-2.462 5.5-5.5 5.5z"/><path d="M22.5 8c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM6.5 24c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M3 5h22v-1h-22z"/><path d="M3 17h22v-1h-22z"/><path d="M3 11h19.5v-1h-19.5z"/><path d="M5.5 23h19.5v-1h-19.5z"/><path d="M3.5 24c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM24.5 12c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M8 9.5c0 3.038 2.462 5.5 5.5 5.5s5.5-2.462 5.5-5.5v-.5h-1v.5c0 2.485-2.015 4.5-4.5 4.5s-4.5-2.015-4.5-4.5v-.5h-1v.5z"/><path d="M0 9.5c0 7.456 6.044 13.5 13.5 13.5s13.5-6.044 13.5-13.5v-.5h-1v.5c0 6.904-5.596 12.5-12.5 12.5s-12.5-5.596-12.5-12.5v-.5h-1v.5z"/><path d="M4 9.5c0 4.259 2.828 7.964 6.86 9.128l.48.139.277-.961-.48-.139c-3.607-1.041-6.137-4.356-6.137-8.167v-.5h-1v.5z"/><path d="M16.141 18.628c4.032-1.165 6.859-4.869 6.859-9.128v-.5h-1v.5c0 3.811-2.53 7.125-6.136 8.167l-.48.139.278.961.48-.139z"/><path d="M13.5 20c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM13.5 11c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M4 2v19.5h1v-19.5zM15.5 10h-11v1h11zM17 12.5v11h1v-11zM6.29 22.417l10.162-10.162-.707-.707-10.162 10.162z" id="Line"/><path d="M19.264 9.443l6.589-6.589-.707-.707-6.589 6.589z"/><path d="M6.577 23.381l19.071-5.903-.296-.955-19.071 5.903z"/><path d="M5.573 21.724l5.905-19.076-.955-.296-5.905 19.076z"/><path d="M6.5 24h19.5v-1h-19.5z"/><path d="M4.5 25c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM17.5 12c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M4.395 10.18c3.432-4.412 10.065-4.998 13.675-.973l.745-.668c-4.044-4.509-11.409-3.858-15.209 1.027l.789.614z"/><path d="M19.991 12.494c.877 2.718.231 5.487-1.897 7.543-2.646 2.556-6.752 2.83-9.188.477-1.992-1.924-2.027-5.38-.059-7.281 1.582-1.528 3.78-1.587 5.305-.115 1.024.99 1.386 2.424.876 3.491l.902.431c.709-1.482.232-3.37-1.084-4.641-1.921-1.855-4.734-1.78-6.695.115-2.378 2.297-2.337 6.405.059 8.719 2.846 2.749 7.563 2.435 10.577-.477 2.407-2.325 3.147-5.493 2.154-8.569l-.952.307z"/><path d="M21.01 9.697l3.197-3.197-.707-.707-3.197 3.197z"/><path d="M14.989 15.719l3.674-3.674-.707-.707-3.674 3.674z"/><path d="M13.5 18c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM19.5 12c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M17 4v21h1v-21z"/><path d="M23 4v21h1v-21z"/><path d="M5 16.5v8.5h1v-8.5z"/><path d="M5 4v8.5h1v-8.5z"/><path d="M11 16.5v8.5h1v-8.5z"/><path d="M11 4v8.5h1v-8.5z"/><path d="M5.5 16c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM11.5 16c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M21.5 23h-14v1h14zM5 7.5v14h1v-14z"/><path d="M12 23c0-3.314-2.686-6-6-6h-.5v1h.5c2.761 0 5 2.239 5 5v.5h1v-.5z"/><path d="M20 23c0-7.732-6.268-14-14-14h-.5v1h.5c7.18 0 13 5.82 13 13v.5h1v-.5z"/><path d="M16 23c0-5.523-4.477-10-10-10h-.5v1h.5c4.971 0 9 4.029 9 9v.5h1v-.5z"/><path d="M5.5 7c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM23.5 25c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM5.5 25c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><path fill-rule="nonzero" d="M7.382 16h14.483l-4.167-5 4.167-5h-15.865v12.764l1.382-2.764zm-2.382 7v-18h19l-5 6 5 6h-16l-3 6z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M7.5 23h13v-1h-13z"/><path d="M7.55 13.088l13.29-6.254-.426-.905-13.29 6.254z"/><path d="M5.5 24c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM5.5 15c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM22.5 24c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM22.5 7c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M7.354 21.354l7.097-7.097-.707-.707-7.097 7.097z"/><path d="M17.249 11.458l7.105-7.105-.707-.707-7.105 7.105z"/><path d="M7.542 22.683l17.296-2.739-.156-.988-17.296 2.739z" id="Line"/><path d="M7.538 22.062l15.708-7.661-.438-.899-15.708 7.661z"/><path d="M6.802 20.97l7.695-15.777-.899-.438-7.695 15.777z"/><path d="M6.285 20.741l2.76-17.423-.988-.156-2.76 17.423z"/><path d="M5.5 24c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM15.5 14c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M3.5 11h21v-1h-21z"/><path d="M3.5 18h21v-1h-21z"/><path d="M10 3.5v21h1v-21z"/><path d="M17 3.5v21h1v-21z"/><path d="M22.5 4v-1h-19.5v19.5h1v-18.5z"/><path d="M24 24h-18.507v1h19.507v-19.5h-1z"/><path d="M3.5 26c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM24.5 5c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g><path fill-rule="nonzero" d="M4.529 18.21l3.157-1.292-.379-.926-3.157 1.292z"/><path fill-rule="nonzero" d="M9.734 16.081l2.97-1.215-.379-.926-2.97 1.215z"/><path fill-rule="nonzero" d="M14.725 14.039l2.957-1.21-.379-.926-2.957 1.21z"/><path fill-rule="nonzero" d="M19.708 12.001l3.114-1.274-.379-.926-3.114 1.274z"/><path d="M8 18h1v3h-1z" id="Path"/><path d="M8 9h1v5h-1z"/><path fill-rule="nonzero" d="M8 18h1v-4h-1v4zm-1-5h3v6h-3v-6z" id="Rectangle-44"/><path d="M18 16h1v3h-1z" id="Path"/><path d="M18 3h1v6h-1z"/><path fill-rule="nonzero" d="M18 16h1v-7h-1v7zm-1-8h3v9h-3v-9z" id="Rectangle-44"/><path d="M13 6h1v5h-1z"/><path d="M13 15h1v5h-1z"/><path fill-rule="nonzero" d="M13 15h1v-4h-1v4zm-1-5h3v6h-3v-6z"/><path fill-rule="nonzero" d="M2.5 20c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM24.5 11c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M4.436 21.667l2.083-9.027-.974-.225-2.083 9.027zM10.046 16.474l-2.231-4.463-.894.447 2.231 4.463zM13.461 6.318l-2.88 10.079.962.275 2.88-10.079zM18.434 16.451l-2.921-10.224-.962.275 2.921 10.224zM21.147 12.089l-2.203 4.405.894.447 2.203-4.405zM25.524 21.383l-2.09-9.055-.974.225 2.09 9.055z"/><path d="M1 19h7.5v-1h-7.5z"/><path d="M12.5 19h4v-1h-4z"/><path d="M20.5 19h6.5v-1h-6.5z"/><path d="M6.5 12c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM3.5 25c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM10.5 20c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM18.5 20c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM22.5 12c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM25.5 25c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM14.5 6c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M4 15h8.5v-1h-8.5zM16.5 15h8.5v-1h-8.5z"/><path d="M14.5 16c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M8.5 15h16.5v-1h-16.5z"/><path d="M6.5 16c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M6.5 23h12v-1h-12z" id="Line"/><path d="M21.596 20.715l3.091-9.66-.952-.305-3.091 9.66z"/><path d="M8.413 22.664l1.95-6.094-.952-.305-1.95 6.094z"/><path d="M11.602 12.695l3.085-9.641-.952-.305-3.085 9.641z"/><path d="M11.783 16.167l6.817 5.454.625-.781-6.817-5.454z"/><path d="M15.976 18.652l3.711-11.598-.952-.305-3.711 11.598z"/><path d="M4.5 24c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM10.5 16c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM20.5 24c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g><path fill-rule="nonzero" d="M20 11c0-3.314-2.686-6-6-6s-6 2.686-6 6c0 2.913 2.872 8.112 6 11.551 3.128-3.438 6-8.638 6-11.551zm-6 13c-3-3-7-9.134-7-13 0-3.866 3.134-7 7-7s7 3.134 7 7-4 10-7 13z"/><ellipse cx="14" cy="11" rx="2" ry="2"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g><path fill-rule="nonzero" d="M16 11c0-3.314-2.686-6-6-6s-6 2.686-6 6c0 2.913 2.872 8.112 6 11.551 3.128-3.438 6-8.638 6-11.551zm-6 13c-3-3-7-9.134-7-13 0-3.866 3.134-7 7-7s7 3.134 7 7-4 10-7 13z"/><ellipse cx="10" cy="11" rx="2" ry="2"/><path fill-rule="nonzero" d="M25 20c0 2.485-2.015 4-4.5 4s-4.5-1.515-4.5-4h1c0 1.797 1.421 3 3.5 3 2.079 0 3.5-1.203 3.5-3h1zm-1 0h1c0 2.485-2.015 4-4.5 4s-4.5-1.515-4.5-4h1c0 1.797 1.421 3 3.5 3 2.079 0 3.5-1.203 3.5-3z"/><path fill-rule="nonzero" d="M18 19h5v-1h-5zM20 15.5v8h1v-8z"/><ellipse cx="20.5" cy="14.5" rx="1.5" ry="1.5"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M8.354 18.354l10-10-.707-.707-10 10zM12.354 25.354l5-5-.707-.707-5 5z"/><path d="M20.354 17.354l5-5-.707-.707-5 5z"/><path d="M19.5 8c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM6.5 21c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM18.5 20c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M20.349 20.654l4.489-.711-.156-.988-4.489.711z"/><path d="M7.254 22.728l9.627-1.525-.156-.988-9.627 1.525z"/><path d="M7.284 22.118l15.669-8.331-.469-.883-15.669 8.331z"/><path d="M6.732 21.248l8.364-15.731-.883-.469-8.364 15.731z"/><path d="M17.465 18.758l-8.188-8.188-.707.707 8.188 8.188z"/><path d="M6.273 20.818l1.499-9.467-.988-.156-1.499 9.467z"/><path d="M8.329 7.834l.715-4.516-.988-.156-.715 4.516z"/><path d="M7.354 21.354l17-17-.707-.707-17 17z"/><path d="M5.5 24c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM7.5 11c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM18.5 22c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M7.275 21.432l12.579-12.579-.707-.707-12.579 12.579z"/><path d="M6.69 13.397l7.913 7.913.707-.707-7.913-7.913zM7.149 10.558l7.058-7.058-.707-.707-7.058 7.058z"/><path d="M18.149 21.558l7.058-7.058-.707-.707-7.058 7.058z"/><path d="M5.5 24c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM5.5 13c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM16.5 24c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M16.5 6h4v-1h-4z" id="Line"/><path d="M16.5 15h4v-1h-4z"/><path d="M8.5 23h4v-1h-4z"/><path d="M8.298 11.591l5.097-4.46-.659-.753-5.097 4.46zM22 7.5v5h1v-5z"/><path d="M14 16.5v4h1v-4z"/><path d="M6 14.5v6h1v-6z"/><path d="M6.5 14c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM14.5 7c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM22.5 7c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM14.5 16c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM22.5 16c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM6.5 24c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM14.5 24c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g><path d="M19 11h5l-2.5 3z"/><circle cx="21.5" cy="16.5" r="1.5"/><path fill-rule="nonzero" d="M22 11v-6h-1v6z"/><path d="M14 18h1v3h-1z" id="Path"/><path d="M14 5h1v6h-1z"/><path d="M7 19h1v3h-1z"/><path d="M7 6h1v7h-1z"/><path fill-rule="nonzero" d="M7 13v6h1v-6h-1zm-1-1h3v8h-3v-8zM14 18h1v-7h-1v7zm-1-8h3v9h-3v-9z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M6.995 5c.008 0 .005 15.5.005 15.5h-1v-15.493c0-.556.451-1.007.995-1.007h17.01c.549 0 .995.45.995 1.007v11.986c0 .556-.45 1.007-1.007 1.007h-12.993l-3.104 3.104-.707-.707 3.397-3.397h13.407c.004 0 .007-11.993.007-11.993 0-.007-17.005-.007-17.005-.007z"/><path d="M6.5 24c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g><path fill-rule="nonzero" d="M4 5h16.5v-1h-16.5zM25 24h-16.5v1h16.5z" id="Line"/><path fill-rule="nonzero" d="M6.5 26c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM22.5 6c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/><path fill-rule="nonzero" d="M14 9v14h1v-14z"/><path d="M14.5 6l2.5 3h-5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M23.886 21.431c-.953-8.558-7.742-15.354-16.299-16.315l-.112.994c8.093.909 14.516 7.338 15.417 15.432l.994-.111z"/><path d="M5 7.5v14h1v-14zM21.5 23h-14v1h14z"/><path d="M5.5 7c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM23.5 25c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM5.5 25c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M8.354 20.354l5-5-.707-.707-5 5z"/><path d="M16.354 12.354l8-8-.707-.707-8 8z"/><path d="M14.5 15c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM6.5 23c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M7.5 6h13v-1h-13z" id="Line"/><path d="M7.5 23h13v-1h-13z"/><path d="M5 7.5v13h1v-13z"/><path d="M22 7.5v13h1v-13z"/><path d="M5.5 7c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM22.5 7c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM22.5 24c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM5.5 24c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M7.551 17.98l13.284-7.033-.468-.884-13.284 7.033z"/><path d="M6 11.801l16-8.471v4.17h1v-5.83l-18 9.529v5.301h1z"/><path d="M6 24.67v-4.17h-1v5.83l18-9.529v-5.301h-1v4.699z"/><path d="M5.5 20c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM22.5 11c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g><path fill-rule="nonzero" d="M6 6h19v-1h-19z" id="Line"/><path fill-rule="nonzero" d="M6 24h19v-1h-19z"/><path fill-rule="nonzero" d="M6 17h17v-1h-17z"/><path d="M14.5 7l2.5 3h-5z"/><path d="M14.5 22l2.5-3h-5z"/><path fill-rule="nonzero" d="M14 10v10h1v-10z"/><path fill-rule="nonzero" d="M4.5 18c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM4.5 7c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM4.5 25c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM24.5 18c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g><path fill-rule="nonzero" d="M6 6h19v-1h-19z" id="Line"/><path fill-rule="nonzero" d="M6 24h19v-1h-19z"/><path fill-rule="nonzero" d="M6 13h17v-1h-17z"/><path d="M14.5 7l2.5 3h-5z"/><path d="M14.5 22l2.5-3h-5z"/><path fill-rule="nonzero" d="M14 10v10h1v-10z"/><path fill-rule="nonzero" d="M4.5 14c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM4.5 7c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM4.5 25c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM24.5 14c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M14.743 3.55l-4.208 4.208.707.707 4.208-4.208zM7.71 10.583l-4.187 4.187.707.707 4.187-4.187zM3.536 18.244l6.171 6.171.707-.707-6.171-6.171zM13.232 24.475l4.22-4.22-.707-.707-4.22 4.22zM20.214 17.494l4.217-4.217-.707-.707-4.217 4.217zM24.423 9.716l-6.218-6.218-.707.707 6.218 6.218z"/><path d="M2.5 18c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM9.5 11c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM16.5 4c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM11.5 27c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM18.5 20c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM25.5 13c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M7.854 22.854l14-14-.707-.707-14 14z"/><path d="M8.336 13.043l8.621 8.621.707-.707-8.621-8.621zM9.149 10.558l7.058-7.058-.707-.707-7.058 7.058z" id="Line"/><path d="M20.149 21.558l7.058-7.058-.707-.707-7.058 7.058z"/><path d="M5.5 23h11v-1h-11z"/><path d="M7.5 13c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM18.5 24c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM3.5 24c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M10.275 20.432l11.579-11.579-.707-.707-11.579 11.579z"/><path d="M8.336 13.043l8.621 8.621.707-.707-8.621-8.621zM9.149 10.558l7.058-7.058-.707-.707-7.058 7.058z" id="Line"/><path d="M20.149 21.558l7.058-7.058-.707-.707-7.058 7.058z"/><path d="M6.5 23h10v-1h-10z"/><path d="M4.5 24c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM7.5 13c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM18.5 24c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M5.205 14.111l-.013-.172c-.054-.906.022-1.966.327-2.961.395-1.289 1.111-2.215 2.221-2.666l-.377-.926c-1.42.578-2.324 1.746-2.8 3.3-.346 1.128-.429 2.299-.369 3.313l.017.219.994-.106z"/><path d="M11.051 8.554c1.12.893 1.766 2.343 2.973 6.099 1.274 3.963 1.947 5.48 3.28 6.557l.629-.778c-1.112-.899-1.754-2.345-2.956-6.085-1.28-3.982-1.957-5.503-3.302-6.575l-.623.782z"/><path d="M21.722 21.558c1.439-.634 2.428-1.886 3.046-3.551.311-.836.509-1.726.618-2.616.066-.539.088-.967.088-1.227l-1 .002-.01.304c-.012.241-.035.51-.071.798-.101.818-.282 1.634-.563 2.39-.533 1.434-1.354 2.474-2.512 2.985l.403.915z"/><path d="M9.5 9c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM19.5 23c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M14 5.5v17h1v-17z" id="Line"/><path d="M9 8.5v-2.001c0-.272.229-.499.502-.499h9.995c.28 0 .502.221.502.499v2.001h1v-2.001c0-.832-.672-1.499-1.502-1.499h-9.995c-.824 0-1.502.673-1.502 1.499v2.001h1z"/><path d="M12 23h5v-1h-5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g><path fill-rule="nonzero" d="M25 19c0 2.485-2.015 4-4.5 4s-4.5-1.515-4.5-4h1c0 1.797 1.421 3 3.5 3 2.079 0 3.5-1.203 3.5-3h1zm-1 0h1c0 2.485-2.015 4-4.5 4s-4.5-1.515-4.5-4h1c0 1.797 1.421 3 3.5 3 2.079 0 3.5-1.203 3.5-3z"/><path fill-rule="nonzero" d="M18 18h5v-1h-5zM20 14.5v8h1v-8z" id="Line"/><ellipse cx="20.5" cy="13.5" rx="1.5" ry="1.5"/><path fill-rule="nonzero" d="M11 5.5v17h1v-17z" id="Line"/><path fill-rule="nonzero" d="M6 8.5v-2.001c0-.272.229-.499.502-.499h9.995c.28 0 .502.221.502.499v2.001h1v-2.001c0-.832-.672-1.499-1.502-1.499h-9.995c-.824 0-1.502.673-1.502 1.499v2.001h1z"/><path fill-rule="nonzero" d="M9 23h5v-1h-5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M.303 17.674l1.104.473.394-.919-1.104-.473z"/><path d="M5.133 19.744l3.335 1.429.394-.919-3.335-1.429z"/><path d="M12.134 22.744l3.352 1.436.394-.919-3.352-1.436z"/><path d="M19.203 25.774l1.6.686.394-.919-1.6-.686z"/><path d="M.3 4.673l1.13.484.394-.919-1.13-.484-.394.919zm.394-.919l1.13.484-.394.919-1.13-.484.394-.919z"/><path d="M5.141 6.747l3.325 1.425.394-.919-3.325-1.425z"/><path d="M12.133 9.744l3.353 1.437.394-.919-3.353-1.437z"/><path d="M19.221 12.782l5.838 2.502.394-.919-5.838-2.502z"/><path d="M3 7.473v8.969h1v-8.969zM8.93 9.871l-4.616 6.594.819.573 4.616-6.594zM11 19.5v-9h-1v9zM15.898 12.916l-4.616 6.594.819.573 4.616-6.594zM18 22.5v-9h-1v9zM24.313 5.212l-6.57 17.247.934.356 6.57-17.247z"/><path d="M3.5 7c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM3.5 20c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM10.5 23c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM17.5 13c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM25.5 5c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM17.5 26c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM10.5 10c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g><path fill-rule="nonzero" d="M27.186 9.411c-.691-.27-1.429-.411-2.186-.411-3.314 0-6 2.686-6 6h1c0-2.761 2.239-5 5-5 .632 0 1.246.117 1.821.342l.364-.931z"/><path fill-rule="nonzero" d="M9 15c0-3.314-2.686-6-6-6-.754 0-1.489.139-2.177.407l.363.932c.573-.223 1.185-.339 1.814-.339 2.761 0 5 2.239 5 5h1z"/><path d="M8 15h1v1h-1v-1zm11 0h1v1h-1v-1zm1 0h-1c0-2.761-2.239-5-5-5s-5 2.239-5 5h-1c0-3.314 2.686-6 6-6s6 2.686 6 6z"/><path fill-rule="nonzero" d="M8.5 19c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM19.5 19c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M15.5 22.5c0-2.697-1.073-5.225-2.947-7.089l-.705.709c1.687 1.679 2.652 3.952 2.652 6.38h1z"/><path d="M7.354 21.354l14-14-.707-.707-14 14z"/><path d="M7.5 23h16.5v-1h-16.5z"/><path d="M22.5 7c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM5.5 24c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M4 25h22v-1h-22z" id="Line"/><path d="M4 21h22v-1h-22z"/><path d="M6.5 17h19.5v-1h-19.5z"/><path d="M5 14.5v-3h-1v3zM6.617 9.275l10.158-3.628-.336-.942-10.158 3.628z"/><path d="M18.5 6c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM4.5 11c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM4.5 18c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M20 2v22h1v-22z"/><path d="M24 2v22h1v-22z"/><path d="M4.673 11.471l3.69 10.333.942-.336-3.69-10.333z"/><path d="M17 21.535v-19.535h-1v19.535z"/><path d="M11.5 24h3v-1h-3z"/><path d="M4.5 11c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM9.5 25c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM16.5 25c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M7.354 21.354l14-14-.707-.707-14 14z"/><path d="M22.5 7c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM5.5 24c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M8.5 23h11v-1h-11zM6 8.5v12h1v-12zM7.483 8.28l12.293 13.112.73-.684-12.293-13.112z"/><path d="M6.5 8c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM6.5 24c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM21.5 24c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M9.457 18.844l-5.371 2.4.408.913 5.371-2.4z"/><path d="M13.13 17.203l.408.913 13.688-6.116-6.736-3.01-.408.913 4.692 2.097z"/><path d="M11.077 5.88l5.34 2.386.408-.913-5.34-2.386z"/><path d="M7.401 4.237l.408-.913-5.809-2.595v19.771h1v-18.229z"/><path d="M3.708 20.772l5.51-14.169-.932-.362-5.51 14.169zM9.265 6.39l1.46 10.218.99-.141-1.46-10.218zM13.059 17.145l4.743-6.775-.819-.573-4.743 6.775z"/><path d="M9.5 6c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM11.5 20c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM18.5 10c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5zM2.5 24c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="nonzero"><path d="M15 12.5v-8.5h-1v8.5zM14 16.5v8.5h1v-8.5z"/><path d="M14.5 16c.828 0 1.5-.672 1.5-1.5s-.672-1.5-1.5-1.5-1.5.672-1.5 1.5.672 1.5 1.5 1.5zm0 1c-1.381 0-2.5-1.119-2.5-2.5s1.119-2.5 2.5-2.5 2.5 1.119 2.5 2.5-1.119 2.5-2.5 2.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g><path fill-rule="nonzero" d="M15.039 5.969l-.019-.019-2.828 2.828.707.707 2.474-2.474c1.367-1.367 3.582-1.367 4.949 0s1.367 3.582 0 4.949l-2.474 2.474.707.707 2.828-2.828-.019-.019c1.415-1.767 1.304-4.352-.334-5.99-1.638-1.638-4.224-1.749-5.99-.334zM5.97 15.038l-.019-.019 2.828-2.828.707.707-2.475 2.475c-1.367 1.367-1.367 3.582 0 4.949s3.582 1.367 4.949 0l2.474-2.474.707.707-2.828 2.828-.019-.019c-1.767 1.415-4.352 1.304-5.99-.334-1.638-1.638-1.749-4.224-.334-5.99z"/><path d="M10.485 16.141l5.656-5.656.707.707-5.656 5.656z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g><path fill-rule="nonzero" d="M14.039 6.969l-.019-.019-2.828 2.828.707.707 2.474-2.474c1.367-1.367 3.582-1.367 4.949 0s1.367 3.582 0 4.949l-2.474 2.474.707.707 2.828-2.828-.019-.019c1.415-1.767 1.304-4.352-.334-5.99-1.638-1.638-4.224-1.749-5.99-.334zM6.968 14.039l-.019-.019 2.828-2.828.707.707-2.475 2.475c-1.367 1.367-1.367 3.582 0 4.949s3.582 1.367 4.949 0l2.474-2.474.707.707-2.828 2.828-.019-.019c-1.767 1.415-4.352 1.304-5.99-.334-1.638-1.638-1.749-4.224-.334-5.99z"/><path d="M10.485 16.141l5.656-5.656.707.707-5.656 5.656z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><path d="M11.682 16.09l3.504 6.068 1.732-1-3.497-6.057 3.595-2.1L8 7.74v10.512l3.682-2.163zm-.362 1.372L7 20V6l12 7-4.216 2.462 3.5 6.062-3.464 2-3.5-6.062z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g><path d="M18 15h8v-1h-8z"/><path d="M14 18v8h1v-8zM14 3v8h1v-8zM3 15h8v-1h-8z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><circle cx="14" cy="14" r="3"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="evenodd"><path fill-rule="nonzero" d="M23.002 23C23 23 23 18.003 23 18.003L15.998 18C16 18 16 22.997 16 22.997l7.002.003zM15 18.003A1 1 0 0 1 15.998 17h7.004c.551 0 .998.438.998 1.003v4.994A1 1 0 0 1 23.002 24h-7.004A.993.993 0 0 1 15 22.997v-4.994z"/><path d="M19 20h1v2h-1z"/><path fill-rule="nonzero" d="M22 14.5a2.5 2.5 0 0 0-5 0v3h1v-3a1.5 1.5 0 0 1 3 0v.5h1v-.5z"/><g fill-rule="nonzero"><path d="M3 14.707A1 1 0 0 1 3.293 14L14.439 2.854a1.5 1.5 0 0 1 2.122 0l2.585 2.585a1.5 1.5 0 0 1 0 2.122L8 18.707a1 1 0 0 1-.707.293H4a1 1 0 0 1-1-1v-3.293zm1 0V18h3.293L18.439 6.854a.5.5 0 0 0 0-.708l-2.585-2.585a.5.5 0 0 0-.708 0L4 14.707z"/><path d="M13.146 4.854l4 4 .708-.708-4-4zm-9 9l4 4 .708-.708-4-4z"/><path d="M15.146 6.146l-9 9 .708.708 9-9z"/></g></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="evenodd"><path fill-rule="nonzero" d="M23.002 23C23 23 23 18.003 23 18.003L15.998 18C16 18 16 22.997 16 22.997l7.002.003zM15 18.003A1 1 0 0 1 15.998 17h7.004c.551 0 .998.438.998 1.003v4.994A1 1 0 0 1 23.002 24h-7.004A.993.993 0 0 1 15 22.997v-4.994z"/><path d="M19 20h1v2h-1z"/><path fill-rule="nonzero" d="M22 17.5v-2a2.5 2.5 0 0 0-5 0v2h1v-2a1.5 1.5 0 0 1 3 0v2h1z"/><g fill-rule="nonzero"><path d="M3 14.707A1 1 0 0 1 3.293 14L14.439 2.854a1.5 1.5 0 0 1 2.122 0l2.585 2.585a1.5 1.5 0 0 1 0 2.122L8 18.707a1 1 0 0 1-.707.293H4a1 1 0 0 1-1-1v-3.293zm1 0V18h3.293L18.439 6.854a.5.5 0 0 0 0-.708l-2.585-2.585a.5.5 0 0 0-.708 0L4 14.707z"/><path d="M13.146 4.854l4 4 .708-.708-4-4zm-9 9l4 4 .708-.708-4-4z"/><path d="M15.146 6.146l-9 9 .708.708 9-9z"/></g></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 29 31" width="29" height="31"><g fill-rule="nonzero"><path d="M15.3 22l8.187-8.187c.394-.394.395-1.028.004-1.418l-4.243-4.243c-.394-.394-1.019-.395-1.407-.006l-11.325 11.325c-.383.383-.383 1.018.007 1.407l1.121 1.121h7.656zm-9.484-.414c-.781-.781-.779-2.049-.007-2.821l11.325-11.325c.777-.777 2.035-.78 2.821.006l4.243 4.243c.781.781.78 2.048-.004 2.832l-8.48 8.48h-8.484l-1.414-1.414z"/><path d="M13.011 22.999h7.999v-1h-7.999zM13.501 11.294l6.717 6.717.707-.707-6.717-6.717z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30.000001 29.999999" width="30" height="30" enable-background="new 0 0 595.3 841.9"><path d="M5.5 13A2.5 2.5 0 0 0 3 15.5 2.5 2.5 0 0 0 5.5 18 2.5 2.5 0 0 0 8 15.5 2.5 2.5 0 0 0 5.5 13zm9.5 0a2.5 2.5 0 0 0-2.5 2.5A2.5 2.5 0 0 0 15 18a2.5 2.5 0 0 0 2.5-2.5A2.5 2.5 0 0 0 15 13zm9.5 0a2.5 2.5 0 0 0-2.5 2.5 2.5 2.5 0 0 0 2.5 2.5 2.5 2.5 0 0 0 2.5-2.5 2.5 2.5 0 0 0-2.5-2.5z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><path fill-rule="nonzero" d="M17.537 7.635l-.789.789c-.886-.275-1.812-.424-2.748-.424-3.841 0-7.521 2.503-8.962 6 .562 1.364 1.465 2.577 2.585 3.549l-.709.709c-1.265-1.112-2.274-2.506-2.881-4.077l-.07-.18.07-.18c1.535-3.975 5.645-6.82 9.966-6.82 1.213 0 2.409.224 3.537.635zm3.549 2.108c1.265 1.112 2.274 2.506 2.881 4.077l.07.18-.07.18c-1.535 3.975-5.646 6.82-9.966 6.82-1.213 0-2.409-.224-3.537-.635l.789-.789c.886.275 1.812.424 2.748.424 3.84 0 7.521-2.503 8.962-6-.562-1.364-1.465-2.577-2.585-3.549l.709-.709zm-6.049.392l-4.902 4.902c-.088-.33-.135-.677-.135-1.036 0-2.213 1.788-4.001 4.001-4.001.358 0 .705.047 1.036.135zm2.828 2.829c.088.331.135.679.135 1.038 0 2.213-1.786 3.999-3.999 3.999-.359 0-.707-.047-1.038-.135l4.901-4.901zm-12.365 10.243l-.707-.707 17.707-17.707.707.707-17.707 17.707z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g><path fill-rule="nonzero" d="M7 13.003v8.994c0 .557.445 1.003.994 1.003h12.012c.547 0 .994-.449.994-1.003v-8.994c0-.557-.445-1.003-.994-1.003h-12.012c-.547 0-.994.449-.994 1.003zm-1 0c0-1.106.895-2.003 1.994-2.003h12.012c1.101 0 1.994.894 1.994 2.003v8.994c0 1.106-.895 2.003-1.994 2.003h-12.012c-1.101 0-1.994-.894-1.994-2.003v-8.994z"/><path fill-rule="nonzero" d="M11 11v-4h-1v4z"/><path fill-rule="nonzero" d="M10 7c0-2.209 1.791-4 4-4s4 1.791 4 4h-1c0-1.657-1.343-3-3-3s-3 1.343-3 3h-1zm1 0h-1c0-2.209 1.791-4 4-4s4 1.791 4 4h-1c0-1.657-1.343-3-3-3s-3 1.343-3 3z"/><rect width="2" height="4" rx="1" x="13" y="17"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g><path fill-rule="nonzero" d="M7 13.003v8.994c0 .557.445 1.003.994 1.003h12.012c.547 0 .994-.449.994-1.003v-8.994c0-.557-.445-1.003-.994-1.003h-12.012c-.547 0-.994.449-.994 1.003zm-1 0c0-1.106.895-2.003 1.994-2.003h12.012c1.101 0 1.994.894 1.994 2.003v8.994c0 1.106-.895 2.003-1.994 2.003h-12.012c-1.101 0-1.994-.894-1.994-2.003v-8.994z"/><path fill-rule="nonzero" d="M11 11v-3h-1v3z"/><path fill-rule="nonzero" d="M18 11v-3h-1v3z"/><path fill-rule="nonzero" d="M10 8c0-2.209 1.791-4 4-4s4 1.791 4 4h-1c0-1.657-1.343-3-3-3s-3 1.343-3 3h-1zm1 0h-1c0-2.209 1.791-4 4-4s4 1.791 4 4h-1c0-1.657-1.343-3-3-3s-3 1.343-3 3z"/><rect width="2" height="4" rx="1" x="13" y="17"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill-rule="evenodd"><path fill-rule="nonzero" d="M14 10a2 2 0 0 0-2 2v11H6V12c0-4.416 3.584-8 8-8s8 3.584 8 8v11h-6V12a2 2 0 0 0-2-2zm-3 2a3 3 0 0 1 6 0v10h4V12c0-3.864-3.136-7-7-7s-7 3.136-7 7v10h4V12z"/><path d="M6.5 18h5v1h-5zm10 0h5v1h-5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28"><path fill="none" stroke="currentColor" d="M3.207 19.793L19.793 3.207a1 1 0 0 1 1.414 0l3.586 3.586a1 1 0 0 1 0 1.414L8.207 24.793a1 1 0 0 1-1.414 0l-3.586-3.586a1 1 0 0 1 0-1.414zM5.5 17.5l2 2m1-5l3 3m0-6l2 2m1-5l3 3m0-6l2 2"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g><path fill-rule="nonzero" d="M8 21c0 1.1.825 2 1.833 2h7.333c1.008 0 1.833-.9 1.833-2v-12h-11v12zm-1 0v-13h13v13c0 1.634-1.252 3-2.833 3h-7.333c-1.581 0-2.833-1.366-2.833-3z"/><path d="M17 6l-1-1h-5l-1 1h-3v1h13v-1z"/><path fill-rule="nonzero" d="M10 11v9.062h1v-9.062z"/><path fill-rule="nonzero" d="M13 11v9.062h1v-9.062z"/><path fill-rule="nonzero" d="M16 11v9.062h1v-9.062z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g><path fill-rule="nonzero" d="M14 18.634l-.307-.239-7.37-5.73-2.137-1.665 9.814-7.633 9.816 7.634-.509.394-1.639 1.269-7.667 5.969zm7.054-6.759l1.131-.876-8.184-6.366-8.186 6.367 1.123.875 7.063 5.491 7.054-5.492z"/><path d="M7 14.5l-1 .57 8 6.43 8-6.5-1-.5-7 5.5z"/><path d="M7 17.5l-1 .57 8 6.43 8-6.5-1-.5-7 5.5z"/></g></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><path d="M17.646 18.354l4 4 .708-.708-4-4z"/><path d="M12.5 21a8.5 8.5 0 1 1 0-17 8.5 8.5 0 0 1 0 17zm0-1a7.5 7.5 0 1 0 0-15 7.5 7.5 0 0 0 0 15z"/><path d="M9 13h7v-1H9z"/><path d="M13 16V9h-1v7z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><path d="M17.646 18.354l4 4 .708-.708-4-4z"/><path d="M12.5 21a8.5 8.5 0 1 1 0-17 8.5 8.5 0 0 1 0 17zm0-1a7.5 7.5 0 1 0 0-15 7.5 7.5 0 0 0 0 15z"/><path d="M9 13h7v-1H9z"/></svg>'
},
function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
});
var o = function() {
function t(t) {
this._drawingsAccess = t || {
tools: [],
type: "black"
}
}
return t.prototype.isToolEnabled = function(t) {
var e = this._findTool(t);
return !(!e || !e.grayed) || ("black" === this._drawingsAccess.type ? !e : !!e)
}, t.prototype.isToolGrayed = function(t) {
var e = this._findTool(t);
return !(!e || !e.grayed)
}, t.prototype._findTool = function(t) {
return this._drawingsAccess.tools.find(function(e) {
return e.name === t
})
}, t
}();
e.ToolsFilter = o
},
function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
}), e.lineTools = [
[{
name: "cursor"
}, {
name: "dot"
}, {
name: "arrow"
}, {
name: "eraser"
}],
[{
name: "LineToolTrendLine"
}, {
name: "LineToolTrendAngle"
}, {
name: "LineToolHorzLine",
shortcut: {
keys: "Alt+H",
immediately: !0
}
}, {
name: "LineToolHorzRay"
}, {
name: "LineToolVertLine",
shortcut: {
keys: "Alt+V",
immediately: !0
}
}, {
name: "LineToolArrow"
}, {
name: "LineToolRay"
}, {
name: "LineToolExtended"
}, {
name: "LineToolParallelChannel"
}, {
name: "LineToolDisjointAngle"
}, {
name: "LineToolFlatBottom"
}],
[{
name: "LineToolPitchfork"
}, {
name: "LineToolSchiffPitchfork2"
}, {
name: "LineToolSchiffPitchfork"
}, {
name: "LineToolInsidePitchfork"
}, {
name: "LineToolPitchfan"
}, {
name: "LineToolGannSquare"
}, {
name: "LineToolGannComplex"
}, {
name: "LineToolGannFixed"
}, {
name: "LineToolGannFan"
}, {
name: "LineToolFibRetracement"
}, {
name: "LineToolTrendBasedFibExtension"
}, {
name: "LineToolFibSpeedResistanceFan"
}, {
name: "LineToolFibTimeZone"
}, {
name: "LineToolTrendBasedFibTime"
}, {
name: "LineToolFibCircles"
}, {
name: "LineToolFibSpiral"
}, {
name: "LineToolFibSpeedResistanceArcs"
}, {
name: "LineToolFibWedge"
}, {
name: "LineToolFibChannel"
}],
[{
name: "LineToolBrush"
}, {
name: "LineToolRectangle"
}, {
name: "LineToolRotatedRectangle"
}, {
name: "LineToolEllipse"
}, {
name: "LineToolTriangle"
}, {
name: "LineToolPolyline"
}, {
name: "LineToolBezierQuadro"
}, {
name: "LineToolBezierCubic"
}, {
name: "LineToolArc"
}],
[{
name: "LineToolText"
}, {
name: "LineToolTextAbsolute"
}, {
name: "LineToolNote"
}, {
name: "LineToolNoteAbsolute"
}, {
name: "LineToolCallout"
}, {
name: "LineToolBalloon"
}, {
name: "LineToolPriceLabel"
}, {
name: "LineToolArrowMarkLeft"
}, {
name: "LineToolArrowMarkRight"
}, {
name: "LineToolArrowMarkUp"
}, {
name: "LineToolArrowMarkDown"
}, {
name: "LineToolFlagMark"
}],
[{
name: "LineTool5PointsPattern"
}, {
name: "LineToolCypherPattern"
}, {
name: "LineToolABCD"
}, {
name: "LineToolTrianglePattern"
}, {
name: "LineToolThreeDrivers"
}, {
name: "LineToolHeadAndShoulders"
}, {
name: "LineToolElliottImpulse"
}, {
name: "LineToolElliottTriangle"
}, {
name: "LineToolElliottTripleCombo"
}, {
name: "LineToolElliottCorrection"
}, {
name: "LineToolElliottDoubleCombo"
}, {
name: "LineToolCircleLines"
}, {
name: "LineToolTimeCycles"
}, {
name: "LineToolSineLine"
}],
[{
name: "LineToolRiskRewardLong"
}, {
name: "LineToolRiskRewardShort"
}, {
name: "LineToolPrediction"
}, {
name: "LineToolDateRange"
}, {
name: "LineToolPriceRange"
}, {
name: "LineToolDateAndPriceRange"
}, {
name: "LineToolBarsPattern"
}, {
name: "LineToolGhostFeed"
}, {
name: "LineToolProjection"
}]
]
},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c, h, u, d, p;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(2), r = i(39), s = i(14), a = i(83), l = i(59), c = i(150), h = i(716), u = i(
31), d = i(303), p = function(t) {
function e(e) {
var i = t.call(this, e) || this;
return i._scroll = null, i._handleScrollTop = function() {
i.animateTo(Math.max(0, i.currentPosition() - (i.state.heightWrap - 50)))
}, i._handleScrollBot = function() {
i.animateTo(Math.min((i.state.heightContent || 0) - (i.state.heightWrap || 0), i
.currentPosition() + (i.state.heightWrap - 50)))
}, i._handleResizeWrap = function(t) {
var e = t.height;
i.setState({
heightWrap: e
})
}, i._handleResizeContent = function(t) {
var e = t.height;
i.setState({
heightContent: e
})
}, i._handleScroll = function() {
var t = i.props.onScroll;
t && t(i.currentPosition(), i.isAtTop(), i.isAtBot()), i._checkButtonsVisibility()
}, i._checkButtonsVisibility = function() {
var t, e, o, n, r;
(i.props.isVisibleButtons || i.props.isVisibleFade) && (t = i.state, e = t
.isVisibleTopButton, o = t.isVisibleBotButton, n = i.isAtTop(), r = i.isAtBot(),
n || e ? n && e && i.setState({
isVisibleTopButton: !1
}) : i.setState({
isVisibleTopButton: !0
}), r || o ? r && o && i.setState({
isVisibleBotButton: !1
}) : i.setState({
isVisibleBotButton: !0
}))
}, i.state = {
heightContent: 0,
heightWrap: 0,
isVisibleBotButton: !1,
isVisibleTopButton: !1
}, i
}
return o.__extends(e, t), e.prototype.componentDidMount = function() {
this._checkButtonsVisibility()
}, e.prototype.componentDidUpdate = function(t, e) {
e.heightWrap === this.state.heightWrap && e.heightContent === this.state
.heightContent || this._handleScroll()
}, e.prototype.currentPosition = function() {
return this._scroll ? this._scroll.scrollTop : 0
}, e.prototype.isAtTop = function() {
return this.currentPosition() <= 1
}, e.prototype.isAtBot = function() {
return this.currentPosition() + this.state.heightWrap >= this.state.heightContent - 1
}, e.prototype.animateTo = function(t, e) {
if (void 0 === e && (e = u.dur), this._scroll) {
var i = r.findDOMNode(this._scroll);
c.doAnimate({
onStep: function(t, e) {
i.scrollTop = e
},
from: i.scrollTop,
to: Math.round(t),
easing: u.easingFunc.easeInOutCubic,
duration: e
})
}
}, e.prototype.render = function() {
var t, e, i, o, r, c = this,
u = this.props,
p = u.children,
_ = u.isVisibleScrollbar,
f = u.isVisibleFade,
m = u.isVisibleButtons,
g = this.state,
v = g.heightContent,
y = g.heightWrap,
b = g.isVisibleBotButton,
S = g.isVisibleTopButton;
return n.createElement(a, {
whitelist: ["height"],
onMeasure: this._handleResizeWrap
}, n.createElement("div", {
className: h.wrap
}, n.createElement("div", {
className: s(h.scrollWrap, (t = {}, t[h.noScrollBar] = !_, t)),
onScroll: this._handleScroll,
ref: function(t) {
return c._scroll = t
}
}, n.createElement(a, {
onMeasure: this._handleResizeContent,
whitelist: ["height"]
}, n.createElement("div", {
className: h.content
}, p))), f && n.createElement("div", {
className: s(h.fadeTop, (e = {}, e[h.isVisible] = S && v > y, e))
}), f && n.createElement("div", {
className: s(h.fadeBot, (i = {}, i[h.isVisible] = b && v > y, i))
}), m && n.createElement("div", {
className: s(h.scrollTop, (o = {}, o[h.isVisible] = S && v > y, o)),
onClick: this._handleScrollTop
}, n.createElement("div", {
className: h.iconWrap
}, n.createElement(l.Icon, {
icon: d,
className: h.icon
}))), m && n.createElement("div", {
className: s(h.scrollBot, (r = {}, r[h.isVisible] = b && v > y, r)),
onClick: this._handleScrollBot
}, n.createElement("div", {
className: h.iconWrap
}, n.createElement(l.Icon, {
icon: d,
className: h.icon
})))))
}, e.defaultProps = {
isVisibleScrollbar: !0
}, e
}(n.PureComponent), e.VerticalScroll = p
},
function(t, e) {
t.exports = {
wrap: "wrap-1h7U5nKd-",
scrollWrap: "scrollWrap-3gtPS0Fe-",
noScrollBar: "noScrollBar-ieMwbfur-",
content: "content-YhoA_L2m-",
icon: "icon-2xObs8DI-",
scrollBot: "scrollBot-2HHpZNuf-",
scrollTop: "scrollTop-1eXi8ltS-",
isVisible: "isVisible-3zZOL3TO-",
iconWrap: "iconWrap-2Q69rfEO-",
fadeBot: "fadeBot-3JstnoWq-",
fadeTop: "fadeTop-3oJzNyTq-"
}
},
function(t, e, i) {
"use strict";
function o(t) {
return function(e) {
function i(t) {
var i = e.call(this, t) || this;
return i._keyboardListener = new s, i._listener = i._keyboardListener.listen.bind(i
._keyboardListener), i
}
return n.__extends(i, e), i.prototype.componentDidMount = function() {
this._registerHandlers(this.props.keyboardEventHandlers)
}, i.prototype.componentWillReceiveProps = function(t) {
Object.is(this.props.keyboardEventHandlers, t.keyboardEventHandlers) || this
._registerHandlers(t.keyboardEventHandlers)
}, i.prototype.render = function() {
return r.createElement(t, n.__assign({}, this.props, {
onKeyDown: this._listener
}))
}, i.prototype._registerHandlers = function(t) {
t && (this._keyboardListener.deleteAllHandlers(), this._keyboardListener
.registerHandlers(t))
}, i
}(r.PureComponent)
}
var n, r, s;
Object.defineProperty(e, "__esModule", {
value: !0
}), n = i(0), r = i(2),
function(t) {
t[t.Enter = 13] = "Enter", t[t.Space = 32] = "Space", t[t.Backspace = 8] = "Backspace", t[t
.DownArrow = 40] = "DownArrow", t[t.UpArrow = 38] = "UpArrow", t[t.RightArrow = 39] =
"RightArrow", t[t.LeftArrow = 37] = "LeftArrow", t[t.Escape = 27] = "Escape", t[t.Tab = 9] =
"Tab"
}(e.KeyCode || (e.KeyCode = {})), s = function() {
function t() {
this._handlers = new Map
}
return t.prototype.registerHandlers = function(t) {
var e = this;
Object.keys(t).forEach(function(i) {
var o, n = parseInt(i),
r = t[n];
Array.isArray(r) || (r = [r]), e._handlers.has(n) ? (o = e._handlers.get(
n)) && r.forEach(function(t) {
return o.add(t)
}) : e._handlers.set(n, new Set(r))
})
}, t.prototype.unregisterHandlers = function(t) {
var e = this;
Object.keys(t).forEach(function(i) {
var o, n = parseInt(i),
r = t[n];
Array.isArray(r) || (r = [r]), e._handlers.has(n) && (o = e._handlers.get(
n)) && r.forEach(function(t) {
return o.delete(t)
})
})
}, t.prototype.deleteAllHandlers = function() {
this._handlers = new Map
}, t.prototype.registerHandler = function(t, e) {
if (this._handlers.has(t)) {
var i = this._handlers.get(t);
i && i.add(e)
} else this._handlers.set(t, new Set([e]))
}, t.prototype.unregisterHandler = function(t, e) {
if (this._handlers.has(t)) {
var i = this._handlers.get(t);
i && i.delete(e)
}
}, t.prototype.listen = function(t) {
if (this._handlers.has(t.keyCode)) {
var e = this._handlers.get(t.keyCode);
e && e.forEach(function(e) {
return e(t)
})
}
}, t
}(), e.KeyboardListener = s, e.makeKeyboardListener = o
},
function(t, e, i) {
"use strict";
function o(t) {
var i = e.formatLayerId(t),
o = document.getElementById(i);
return o || (o = document.createElement("div"), o.id = i, document.body.appendChild(o)), c[t] = (c[
t] || 0) + 1, o
}
function n(t) {
var i = e.formatLayerId(t),
o = document.getElementById(i);
c[t] && (c[t] -= 1), o && 0 === c[t] && document.body.removeChild(o)
}
var r, s, a, l, c, h;
Object.defineProperty(e, "__esModule", {
value: !0
}), r = i(0), s = i(2), a = i(39), l = 0, c = {}, e.formatLayerId = function(t) {
return "__outside-render-" + t
}, h = function(t) {
function e(e) {
return t.call(this, e) || this
}
return r.__extends(e, t), e.prototype.componentDidMount = function() {
this._rememberLayer(), this._renderLayer()
}, e.prototype.componentDidUpdate = function(t) {
this.props.layerId !== t.layerId && (n(this._layerId), this._rememberLayer()), this
._renderLayer()
}, e.prototype.componentWillUnmount = function() {
a.unmountComponentAtNode(this._layer), n(this._layerId)
}, e.prototype.render = function() {
return null
}, e.prototype._rememberLayer = function() {
var t = this.props.layerId,
e = void 0 === t ? l++ + "" : t;
this._layerId = e, this._layer = o(e)
}, e.prototype._renderLayer = function() {
a.render(s.createElement("div", null, this.props.children), this._layer)
}, e
}(s.Component), e.OutsideRenderWrap = h
},
function(t, e) {
t.exports = {
menuWrap: "menuWrap-23ejLU7n-",
isMeasuring: "isMeasuring-26jTjsBf-",
scrollWrap: "scrollWrap-2ReEQpR0-",
menuBox: "menuBox-3CsColoQ-",
isHidden: "isHidden-1CunrsTV-"
}
},
function(t, e) {
t.exports = {
button: "button-263WXsg--",
bg: "bg-1kRv1Pf2-",
isBgFull: "isBgFull-CmoDGRQP-",
icon: "icon-1Y-3MM9F-",
hovered: "hovered--MYZioUu-",
isActive: "isActive-2mI1-NUL-",
isGrayed: "isGrayed-1kWObWVr-",
isTransparent: "isTransparent-sRmateFl-",
isHidden: "isHidden-2VzaskeU-"
}
},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c, h, u, d, p, _, f, m, g;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), i(12), n = i(2), r = i(23), s = i(24), a = i(298), l = i(26), c = i(308), h = i(66),
u = i(208), d = i(85), p = i(152), _ = i(724), f = {
icon: window.t("Icon")
}, m = 10, g = function(t) {
function e(e) {
var i = t.call(this, e) || this;
return i._renderItem = function(t) {
return n.createElement("div", {
className: _.item,
key: t,
onClick: function() {
i._handleSelect(t), d.globalClosePopupMenu()
}
}, String.fromCharCode(t))
}, i._onChangeDrawingState = function() {
i.setState({
isActive: i._isActive()
})
}, i._handleSelect = function(t) {
var e, n;
a.saveDefaults("linetoolicon", o.__assign({}, a.defaults("linetoolicon"), {
icon: t
})), l.tool.setValue("LineToolIcon"), e = i.state.recents, n = e.indexOf(t), -
1 !== n && e.splice(n, 1), e = [t].concat(e.slice(0, m - 1)), s.setJSON(
"linetoolicon.recenticons", e), i.setState({
current: t,
recents: e
})
}, i.state = {
current: a.defaults("linetoolicon").icon,
recents: s.getJSON("linetoolicon.recenticons") || []
}, i
}
return o.__extends(e, t), e.prototype.componentDidMount = function() {
l.tool.subscribe(this._onChangeDrawingState), s.onSync.subscribe(this, this
._onSyncSettings)
}, e.prototype.componentWillUnmount = function() {
l.tool.unsubscribe(this._onChangeDrawingState), s.onSync.unsubscribe(this, this
._onSyncSettings)
}, e.prototype.render = function() {
var t = this,
e = this.props,
i = e.isGrayed,
o = e.toolName,
s = this.state,
a = s.current,
l = s.isActive,
d = s.recents;
return n.createElement(u.ToolDropdown, {
buttonClass: _.button,
buttonIcon: n.createElement("div", {
className: _.buttonIcon
}, String.fromCharCode(a || c.availableIcons[0])),
buttonTitle: f.icon,
isActive: l,
isGrayed: i,
onClickButton: function() {
return t._handleSelect(a || c.availableIcons[0])
},
onClickWhenGrayed: function() {
return r.emit("onGrayedObjectClicked", {
type: "drawing",
name: h.lineToolsInfo[o].localizedName
})
}
}, d && [n.createElement("div", {
key: "recent",
className: _.wrap
}, d.map(this._renderItem)), n.createElement(p.PopupMenuSeparator, {
key: "separator"
})], n.createElement("div", {
key: "all",
className: _.wrap
}, c.availableIcons.map(this._renderItem)))
}, e.prototype._isActive = function() {
return l.tool.value() === this.props.toolName
}, e.prototype._onSyncSettings = function() {
this.setState({
recents: s.getJSON("linetoolicon.recenticons")
})
}, e
}(n.Component), e.ToolButtonFontIcons = g
},
function(t, e) {
t.exports = {
dropdown: "dropdown-3_ASLzSj-",
buttonWrap: "buttonWrap-3fZWypJl-",
control: "control-1TyEfSIx-",
arrow: "arrow-1cFKS5Ok-",
arrowIcon: "arrowIcon-2wA7q8om-",
isOpened: "isOpened-22vLOY9o-",
isGrayed: "isGrayed-xr-mULNo-"
}
},
function(t, e) {
t.exports = {
separator: "separator-25lkUpN--"
}
},
function(t, e) {
t.exports = {
wrap: "wrap-2I6DAtXG-",
buttonIcon: "buttonIcon-2rBwJ1QM-",
item: "item-31XunD5q-",
hovered: "hovered-2A1Cpat5-",
button: "button-21ihqWJ8-"
}
},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(2), r = i(66), s = i(6), a = i(151), l = function(t) {
function e(e) {
var i = t.call(this, e) || this;
return i._handleClick = function() {
i.props.saveDefaultOnChange && s.saveDefaultProperties(!0), i.props.property
.setValue(!i.props.property.value()), i.props.saveDefaultOnChange && s
.saveDefaultProperties(!1)
}, i.state = {
isActive: i.props.property.value()
}, i
}
return o.__extends(e, t), e.prototype.componentDidMount = function() {
this.props.property.subscribe(this, this._onChange)
}, e.prototype.componentWillUnmount = function() {
this.props.property.unsubscribe(this, this._onChange)
}, e.prototype.render = function() {
var t = this.props.toolName,
e = this.state.isActive,
i = r.lineToolsInfo[t];
return n.createElement(a.ToolButton, {
icon: e && i.iconActive ? i.iconActive : i.icon,
isActive: e,
onClick: this._handleClick,
title: i.localizedName
})
}, e.prototype._onChange = function(t) {
this.setState({
isActive: t.value()
})
}, e
}(n.PureComponent), e.ToolButtonProperty = l
},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(2), r = i(26), s = i(66), a = i(151), l = function(t) {
function e(e) {
var i = t.call(this, e) || this;
return i._handleClick = function() {
r.tool.setValue(i.props.toolName)
}, i._onChange = function() {
i.setState({
isActive: r.tool.value() === i.props.toolName
})
}, i.state = {
isActive: r.tool.value() === i.props.toolName
}, i
}
return o.__extends(e, t), e.prototype.componentDidMount = function() {
r.tool.subscribe(this._onChange)
}, e.prototype.componentWillUnmount = function() {
r.tool.unsubscribe(this._onChange)
}, e.prototype.render = function() {
var t = this.props.toolName,
e = this.state.isActive;
return n.createElement(a.ToolButton, {
icon: s.lineToolsInfo[t].icon,
isActive: e,
isTransparent: !0,
onClick: this._handleClick,
title: s.lineToolsInfo[t].localizedName
})
}, e
}(n.PureComponent), e.ToolButtonTool = l
},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(2), r = i(239), s = i(307), a = i(728), l = i(31), c = function(t) {
function e(e) {
var i = t.call(this, e) || this;
return i._boundUndoModel = null, i._handleClick = function() {
var t = i._activeChartWidget().model();
t && t.zoomFromViewport()
}, i._syncUnzoomButton = function() {
var t = i._activeChartWidget(),
e = t.model(),
o = !1;
e ? (i._boundUndoModel !== e && (i._boundUndoModel && i._boundUndoModel.zoomStack()
.onChange().unsubscribe(null, i._syncUnzoomButton), e.zoomStack()
.onChange().subscribe(null, i._syncUnzoomButton), i._boundUndoModel = e
), o = !e.zoomStack().isEmpty()) : t.withModel(null, i
._syncUnzoomButton), i.setState({
isVisible: o
})
}, i.state = {
isVisible: !1
}, i
}
return o.__extends(e, t), e.prototype.componentDidMount = function() {
this.props.chartWidgetCollection.activeChartWidget.subscribe(this._syncUnzoomButton, {
callWithLast: !0
})
}, e.prototype.componentWillUnmount = function() {
this.props.chartWidgetCollection.activeChartWidget.unsubscribe(this._syncUnzoomButton)
}, e.prototype.render = function() {
return n.createElement(r.CSSTransitionGroup, {
transitionName: {
enter: a.enter,
enterActive: a.enterActive,
leave: a.leave
},
transitionEnter: !0,
transitionEnterTimeout: l.dur / 2,
transitionLeave: !0,
transitionLeaveTimeout: .75 * l.dur
}, this.state.isVisible && n.createElement("div", {
key: "button",
className: a.item
}, n.createElement(s.ToolButtonAction, {
action: this._handleClick,
isTransparent: !0,
toolName: "zoom-out"
})))
}, e.prototype._activeChartWidget = function() {
return this.props.chartWidgetCollection.activeChartWidget.value()
}, e
}(n.PureComponent), e.ToolButtonZoomOut = c
},
function(t, e) {
t.exports = {
item: "item--pyC03Z7-",
enter: "enter-q8JpeMGW-",
enterActive: "enterActive-2R8N33Bn-",
leave: "leave-3723J30--"
}
},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c, h, u, d, p;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(2), r = i(26), s = i(23), a = i(66), l = i(309), c = i(208), h = i(153), u = i(
70), d = i(732), p = function(t) {
function e(e) {
var i, n = t.call(this, e) || this;
return n._onChangeDrawingState = function() {
var t = n._getActiveToolIndex();
n.setState({
current: -1 !== t ? t : n.state.current,
isActive: -1 !== t
})
}, n._handleClickButton = function() {
var t = n._getCurrentToolName();
n._selectTool(t)
}, n._handleClickItem = function(t) {
n._selectTool(t)
}, n._handleGrayedClick = function(t) {
s.emit("onGrayedObjectClicked", {
type: "drawing",
name: a.lineToolsInfo[t].localizedName
})
}, n._handleShortcut = function(t) {
var e = n.props.lineTools.find(function(e) {
return e.name === t
}),
i = e && e.shortcut;
i && i.immediately ? n._drawLinetoolImmediately(t) : n._selectTool(t)
}, n._drawLinetoolImmediately = function(t) {
var e = n.props.chartWidgetCollection.activeChartWidget.value();
e.activePaneWidget && e.activePaneWidget.drawRightThere(t)
}, n._handleClickFavorite = function(t) {
n.state.favState && n.state.favState[t] ? l.LinetoolsFavoritesStore.removeFavorite(
t) : l.LinetoolsFavoritesStore.addFavorite(t)
}, n._onAddFavorite = function(t) {
n.setState({
favState: o.__assign({}, n.state.favState, (e = {}, e[t] = !0, e))
});
var e
}, n._onRemoveFavorite = function(t) {
n.setState({
favState: o.__assign({}, n.state.favState, (e = {}, e[t] = !1, e))
});
var e
}, n._onSyncFavorites = function() {
n.setState({
favState: n._composeFavState()
})
}, i = n._getActiveToolIndex(), n.state = {
current: -1 === i ? n._firstNonGrayedTool() : i,
favState: n._composeFavState(),
isActive: -1 !== i
}, n
}
return o.__extends(e, t), e.prototype.componentDidMount = function() {
r.tool.subscribe(this._onChangeDrawingState), l.LinetoolsFavoritesStore.favoriteAdded
.subscribe(null, this._onAddFavorite), l.LinetoolsFavoritesStore.favoriteRemoved
.subscribe(null, this._onRemoveFavorite), l.LinetoolsFavoritesStore.favoritesSynced
.subscribe(null, this._onSyncFavorites)
}, e.prototype.componentWillUnmount = function() {
r.tool.unsubscribe(this._onChangeDrawingState), l.LinetoolsFavoritesStore.favoriteAdded
.unsubscribe(null, this._onAddFavorite), l.LinetoolsFavoritesStore.favoriteRemoved
.unsubscribe(null, this._onRemoveFavorite), l.LinetoolsFavoritesStore
.favoritesSynced.unsubscribe(null, this._onSyncFavorites)
}, e.prototype.componentDidUpdate = function(t, e) {
t.lineTools !== this.props.lineTools && this.setState({
favState: this._composeFavState()
})
}, e.prototype.render = function() {
var t = this,
e = this.props,
i = e.favoriting,
o = e.grayedTools,
r = e.lineTools,
s = this.state,
l = s.current,
p = s.favState,
_ = s.isActive,
f = this._getCurrentToolName(),
m = a.lineToolsInfo[f],
g = this._showHint();
return n.createElement("span", null, n.createElement(c.ToolDropdown, {
buttonIcon: m.icon,
buttonTitle: m.localizedName,
isActive: _,
onClickButton: this._handleClickButton
}, r.map(function(e, r) {
var s = e.name,
c = a.lineToolsInfo[s],
d = o[s];
return n.createElement(u.PopupMenuItem, {
key: s,
dontClosePopup: d,
forceShowHint: g,
hint: e.shortcut && e.shortcut.keys,
icon: c.icon,
isActive: _ && l === r,
appearAsDisabled: d,
label: c.localizedName,
onClick: d ? t._handleGrayedClick : t._handleClickItem,
onClickArg: s,
showToolboxOnHover: !p[s],
toolbox: i && !d ? n.createElement(h.FavoriteButton, {
isFilled: p[s],
onClick: t._handleClickFavorite,
onClickArg: s
}) : void 0
})
})), r.map(function(e, i) {
var o = e.name,
r = e.shortcut;
return r && n.createElement(d.Shortcut, {
handler: function(e) {
e.preventDefault(), t._handleShortcut(o)
},
key: o,
keys: r.keys
})
}))
}, e.prototype._getCurrentToolName = function() {
var t = this.state.current;
return this.props.lineTools[t || 0].name
}, e.prototype._firstNonGrayedTool = function() {
var t = this.props,
e = t.grayedTools;
return t.lineTools.findIndex(function(t) {
return !e[t.name]
})
}, e.prototype._getActiveToolIndex = function() {
return this.props.lineTools.findIndex(function(t) {
return t.name === r.tool.value()
})
}, e.prototype._showHint = function() {
return this.props.lineTools.some(function(t) {
return "shortcut" in t
})
}, e.prototype._selectTool = function(t) {
r.tool.setValue(t)
}, e.prototype._composeFavState = function() {
var t = {};
return this.props.lineTools.forEach(function(e) {
t[e.name] = l.LinetoolsFavoritesStore.isFavorite(e.name)
}), t
}, e
}(n.PureComponent), e.ToolDropdownDrawings = p
},
function(t, e) {
t.exports = {
star: "star-uhAI7sV4-",
checked: "checked-2bhy04CF-"
}
},
function(t, e) {
t.exports = {
item: "item-2xPVYue0-",
hovered: "hovered-1uf45E05-",
isDisabled: "isDisabled-1wLqKupj-",
isActive: "isActive-2j-GhQs_-",
icon: "icon-2Qm7YIcz-",
hint: "hint-1IhIvLPB-",
toolbox: "toolbox-3ulPxfe--",
withIcon: "withIcon-1xBjf-oB-",
labelRow: "labelRow-3Q0rdE8--",
label: "label-3Xqxy756-",
showOnHover: "showOnHover-1q6ySzZc-"
}
},
function(t, e, i) {
"use strict";
var o, n, r, s;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(2), r = i(147), s = function(t) {
function e() {
return null !== t && t.apply(this, arguments) || this
}
return o.__extends(e, t), e.prototype.componentDidMount = function() {
r.bind(this.props.keys, this.props.handler)
}, e.prototype.componentDidUpdate = function(t) {
this.props.keys === t.keys && this.props.handler === t.handler || (r.unbind(t.keys), r
.bind(this.props.keys, this.props.handler))
}, e.prototype.componentWillUnmount = function() {
r.unbind(this.props.keys)
}, e.prototype.render = function() {
return null
}, e
}(n.PureComponent), e.Shortcut = s
},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), i(12), n = i(2), r = i(66), s = i(208), a = i(70), l = {
all: window.t("Remove Drawing Tools & Indicators"),
drawings: window.t("Remove Drawing Tools"),
studies: window.t("Remove Indicators")
}, c = function(t) {
function e() {
var e = null !== t && t.apply(this, arguments) || this;
return e._handleRemoveDrawings = function() {
e.props.chartWidgetCollection.activeChartWidget.value().removeAllDrawingTools()
}, e._handleRemoveStudies = function() {
e.props.chartWidgetCollection.activeChartWidget.value().removeAllStudies()
}, e._handleRemoveAll = function() {
e.props.chartWidgetCollection.activeChartWidget.value()
.removeAllStudiesDrawingTools()
}, e
}
return o.__extends(e, t), e.prototype.render = function() {
return n.createElement(s.ToolDropdown, {
buttonIcon: r.lineToolsInfo[this.props.toolName].icon,
buttonTitle: l.drawings,
onClickButton: this._handleRemoveDrawings
}, n.createElement(a.PopupMenuItem, {
label: l.drawings,
onClick: this._handleRemoveDrawings
}), n.createElement(a.PopupMenuItem, {
label: l.studies,
onClick: this._handleRemoveStudies
}), n.createElement(a.PopupMenuItem, {
label: l.all,
onClick: this._handleRemoveAll
}))
}, e
}(n.PureComponent), e.ToolDropdownRemove = c
},
function(t, e, i) {
"use strict";
function o(t) {
return r.createElement("svg", {
xmlns: l,
width: "9",
height: "27",
viewBox: "0 0 9 27",
className: s(a.container, "right" === t.direction ? a.mirror : null)
}, r.createElement("g", {
fill: "none",
fillRule: "evenodd"
}, r.createElement("path", {
className: a.background,
d: "M4.5.5a4 4 0 0 1 4 4v18a4 4 0 1 1-8 0v-18a4 4 0 0 1 4-4z"
}), r.createElement("path", {
className: a.arrow,
d: "M5.5 10l-2 3.5 2 3.5"
})))
}
function n(t) {
return r.createElement("svg", {
xmlns: l,
width: "28",
height: "9",
viewBox: "0 0 28 9",
className: s(a.container, "bottom" === t.direction ? a.mirror : null)
}, r.createElement("g", {
fill: "none",
fillRule: "evenodd"
}, r.createElement("path", {
className: a.background,
d: "M4.5.5h19a4 4 0 1 1 0 8h-19a4 4 0 1 1 0-8z"
}), r.createElement("path", {
className: a.arrow,
d: "M10.5 5.5l3.5-2 3.5 2"
})))
}
var r, s, a, l;
Object.defineProperty(e, "__esModule", {
value: !0
}), r = i(2), s = i(14), a = i(735), l = "http://www.w3.org/2000/svg", e.VerticalToolbarHider = o, e
.HorizontalToolbarHider = n
},
function(t, e) {
t.exports = {
container: "container-3_8ayT2Q-",
mirror: "mirror-crJbq8d0-",
background: "background-Q1Fcmxly-",
arrow: "arrow-WcYWFXUn-"
}
},
function(t, e) {
t.exports = {
drawingToolbar: "drawingToolbar-U3_QXRof-",
isHidden: "isHidden-2d-PYkzV-",
inner: "inner-1xuW-gY4-",
toggleButton: "toggleButton-13QgefpG-",
collapsed: "collapsed-2trH0gCi-",
group: "group-2JyOhh7Z-",
separator: "separator-1BAqp1-l-"
}
},
function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
})
},
function(t, e, i) {
"use strict";
function o(t) {
return l.fetch("/theme/?themeName=" + encodeURIComponent(t), {
credentials: "include",
method: "GET"
}).then(function(t) {
return t.json()
}).then(function(t) {
var e = {};
return t.content && (e.content = JSON.parse(t.content)), e
})
}
function n() {
return u || l.fetch("/themes/", {
credentials: "include",
method: "GET"
}).then(function(t) {
return u = t.json()
})
}
function r(t, e) {
var i = new FormData;
return i.append("content", JSON.stringify(e)), i.append("name", t), u = null, l.fetch(
"/save-theme/", {
credentials: "include",
method: "POST",
body: i
}).then(function(t) {
return t.json()
}, function(t) {
return h.logError(t)
})
}
function s(t) {
var e = new FormData;
return e.append("name", t), u = null, l.fetch("/remove-theme/", {
credentials: "include",
method: "POST",
body: e
}).then(function(t) {
return t.json()
}, function(t) {
return h.logError(t)
})
}
function a(t) {
return o(t).then(function(t) {
return !!t.content
})
}
var l, c, h, u;
Object.defineProperty(e, "__esModule", {
value: !0
}), l = i(739), c = i(7), h = c.getLogger("Themes.Provider"), u = null, e.loadTheme = o, e
.loadThemes = n, e.saveTheme = r, e.removeTheme = s, e.isThemeExist = a
},
function(t, e, i) {
"use strict";
function o(t, e) {
return window.fetch(t, e)
}
Object.defineProperty(e, "__esModule", {
value: !0
}), e.fetch = o
},
function(t, e, i) {
"use strict";
function o() {
return m || (m = new Promise(function(t) {
i.e(9).then(function(e) {
var o, n = i(1081),
r = i(1082);
t((o = {}, o[f.Light] = r, o[f.Dark] = n, o))
}.bind(null, i)).catch(i.oe)
})), m
}
function n() {
return [f.Light, f.Dark]
}
function r() {
return o().then(function(t) {
return e = {}, e[f.Light] = JSON.parse(t[f.Light]), e[f.Dark] = JSON.parse(t[f.Dark]),
e;
var e
})
}
function s(t) {
return r().then(function(e) {
return e[t]
})
}
function a(t) {
return g[t] || t
}
function l(t) {
return r().then(function(e) {
return n().some(function(i) {
return c(e[i], t)
})
})
}
function c(t, e) {
var i = t.content === e.content;
return u(t.content, function(t, o) {
var n = p(t, e.content);
return !(i = h(o, n))
}), i
}
function h(t, e) {
if ("string" == typeof t && "string" == typeof e) try {
return _.areEqualRgb(_.parseRgb(t), _.parseRgb(e))
} catch (i) {
return t === e
}
return t === e
}
function u(t, e) {
void 0 === t && (t = {});
try {
d(t, [], e)
} catch (t) {
return
}
}
function d(t, e, i) {
var o, n;
for (o in t)
if (t.hasOwnProperty(o))
if (n = e.concat(o), "object" == typeof t[o]) d(t[o], n, i);
else if (i(n, t[o])) throw Error("exit")
}
function p(t, e) {
void 0 === e && (e = {});
var i = Function("obj", "return obj." + t.join(".") + ";");
try {
return i(e)
} catch (t) {
return
}
}
var _, f, m, g, v;
Object.defineProperty(e, "__esModule", {
value: !0
}), i(12), _ = i(32),
function(t) {
t.Light = "light", t.Dark = "dark"
}(f = e.StdTheme || (e.StdTheme = {})), m = null, v = {}, v[f.Light] = window.t("Light", {
context: "colorThemeName"
}), v[f.Dark] = window.t("Dark", {
context: "colorThemeName"
}), v.Black = window.t("Black", {
context: "colorThemeName"
}), v.Blue = window.t("Blue", {
context: "colorThemeName"
}), v.Grey = window.t("Grey", {
context: "colorThemeName"
}), v.White = window.t("White", {
context: "colorThemeName"
}), g = v, e.loadStdThemes = o, e.getStdThemeNames = n, e.getStdThemes = r, e.getStdChartTheme = s,
e.translateThemeName = a, e.isStdTheme = l
},
function(t, e) {
t.exports = {
"color-active-hover-text": "color-gull-gray",
"color-alert-bg": "color-mirage-1",
"color-alert-text": "color-loblolly",
"color-border": "color-bright-gray",
"color-border-chat-fields": "color-bright-gray",
"color-border-hover": "color-trout-1",
"color-border-table": "color-bright-gray",
"color-brand": "color-picton-blue-1",
"color-brand-active": "color-curious-blue",
"color-brand-hover": "color-scooter",
"color-button-hover-bg": "color-mirage-3",
"color-chart-page-bg": "color-charade",
"color-depthrenderer-fill-style": "color-catskill-white",
"color-depthrenderer-stroke-style": "color-trout-1",
"color-disabled-border-and-color": "color-ebony-clay",
"color-disabled-input": "color-bright-gray",
"color-empty-container-message": "color-slate-gray",
"color-footer-chart-panel-bg": "color-mirage-3",
"color-highlight-new": "color-dark-slate-blue",
"color-icons": "color-slate-gray",
"color-input-bg": "color-charade",
"color-input-textarea-readonly": "color-trout-1",
"color-input-publish-bg": "color-mirage-1",
"color-item-active-blue": "color-blue-dianne",
"color-item-hover-active-bg": "color-charade",
"color-item-hover-bg": "color-ebony-clay",
"color-item-hover-blue": "color-blue-dianne",
"color-item-selected-blue": "color-blue-dianne",
"color-link": "color-curious-blue",
"color-list-item": "color-slate-gray",
"color-list-nth-child-bg": "color-mirage-3",
"color-news-highlight": "color-charade",
"color-pane-bg": "color-mirage-1",
"color-placeholder": "color-trout-2",
"color-popup-bg": "color-mirage-3",
"color-popup-menu-separator": "color-bright-gray",
"color-row-hover-active-bg": "color-ebony-clay",
"color-sb-scrollbar-body-bg": "color-trout-2",
"color-screener-header-bg": "color-mirage-3",
"color-screener-header-bg-hover": "color-ebony-clay",
"color-section-separator-border": "color-bright-gray",
"color-separator-table-chat": "color-bright-gray",
"color-tag-active-bg": "color-bright-gray",
"color-tag-hover-bg": "color-charade",
"color-text-regular": "color-loblolly",
"color-text-secondary": "color-trout-1",
"color-toolbar-button-text-active": "color-picton-blue-1",
"color-toolbar-interactive-element-text-normal": "color-slate-gray",
"color-toolbar-interactive-element-text-hover": "color-gull-gray",
"color-toolbar-opened-element-bg": "color-mirage-3",
"color-tooltip-bg": "color-bright-gray",
"color-tv-button-checked": "color-slate-gray",
"color-tv-dialog-caption": "color-athens-gray-2",
"color-tv-dropdown-item-hover-bg": "color-charade",
"color-underlined-text": "color-gull-gray",
"color-widget-pages-bg": "color-mirage-2"
}
},
function(t, e, i) {
"use strict";
function o(t, e) {
var i, r;
return void 0 === e && (e = []), (i = n[t]) ? l.test(i) ? i : (r = i, e.push(t), -1 !== e.indexOf(
r) ? (console.warn("Colors definitions cycled"), i) : e.length > a ? (console.warn(
"Too many variables-link in HEX-color search: " + e[0]), null) : o(r, e)) : null
}
var n, r, s, a, l;
Object.defineProperty(e, "__esModule", {
value: !0
}), n = i(743), r = i(9), s = {}, a = Object.keys(n).length, l = /^#[0-9A-F]{6}$/i, Object.keys(n)
.forEach(function(t) {
var e = o(t);
s[t] = r.ensureNotNull(e)
}), e.colorsPalette = s
},
function(t, e) {
t.exports = {
"color-aqua-spring": "#ebf9f5",
"color-army-green": "#3d2c12",
"color-army-green-2": "#31230d",
"color-athens-gray-1": "#f2f3f5",
"color-athens-gray-2": "#f7f8fa",
"color-athens-gray-3": "#eceff2",
"color-black": "#000000",
"color-blue-dianne": "#21384d",
"color-bright-gray": "#363c4e",
"color-carnation": "#f04561",
"color-catskill-white": "#e1ecf2",
"color-charade": "#2f3241",
"color-charcoal-grey": "#323337",
"color-curious-blue": "#299dcd",
"color-dark-blue-grey": "#123440",
"color-dark-grey": "#292a2d",
"color-dark-grey-blue": "#28415a",
"color-dark-sky-blue": "#37a6ef",
"color-dark-slate-blue": "#194453",
"color-deep-sea-blue": "#016087",
"color-ebony-clay": "#262b3e",
"color-foam": "#d7f0fb",
"color-gull-gray": "#9db2bd",
"color-humming-bird": "#d3eef9",
"color-keppel-1": "#37bc9b",
"color-keppel-2": "#34b293",
"color-lavender-blush": "#ffedf0",
"color-loblolly": "#c5cbce",
"color-manatee": "#878ca8",
"color-mandy": "#eb4d5c",
"color-milk-chocolate": "#6f2626",
"color-mirage-1": "#131722",
"color-mirage-2": "#171b29",
"color-mirage-3": "#1c2030",
"color-mischka": "#d6d8e0",
"color-morning-glory": "#9addcc",
"color-oslo-gray": "#8b8e95",
"color-pale": "#fff2cf",
"color-pale-sky": "#6b7988",
"color-picton-blue-1": "#3bb3e4",
"color-picton-blue-2": "#41bef1",
"color-puerto-rico": "#3bc2a1",
"color-purple-brown": "#4e2934",
"color-purple-brown-2": "#3d2028",
"color-radical-red": "#ff4a68",
"color-regent-gray": "#8797a5",
"color-scooter": "#38acdb",
"color-silver-tree": "#53b987",
"color-slate-gray": "#758696",
"color-sundown": "#ffa4b3",
"color-sunglow": "#ffca3b",
"color-tan-hide": "#ff9850",
"color-trout-1": "#4c525e",
"color-trout-2": "#4f5966",
"color-violet-1": "#332738",
"color-violet-2": "#271d2b",
"color-water-blue": "#1592e6",
"color-white": "#ffffff",
"color-white-ice": "#ebf7fc",
"color-wild-watermelon": "#ff5773",
"color-active-hover-text": "color-black",
"color-alert-bg": "color-white",
"color-alert-text": "color-black",
"color-border-table": "color-athens-gray-3",
"color-brand": "color-picton-blue-1",
"color-brand-active": "color-curious-blue",
"color-brand-hover": "color-scooter",
"color-brand-light": "color-picton-blue-2",
"color-chart-page-bg": "color-athens-gray-3",
"color-danger": "color-radical-red",
"color-depthrenderer-stroke-style": "color-athens-gray-1",
"color-highlight-new": "color-pale",
"color-input-bg": "color-white",
"color-input-publish-bg": "color-white",
"color-link": "color-brand",
"color-list-nth-child-bg": "color-athens-gray-2",
"color-pane-bg": "color-white",
"color-popup-bg": "color-white",
"color-popup-menu-separator": "color-catskill-white",
"color-replay-data-mode": "color-radical-red",
"color-screener-header-bg": "color-athens-gray-2",
"color-success": "color-keppel-1",
"color-toolbar-button-text-active": "color-water-blue",
"color-toolbar-interactive-element-text-normal": "color-trout-1",
"color-toolbar-interactive-element-text-hover": "color-mirage-1",
"color-toolbar-opened-element-bg": "color-athens-gray-2",
"color-tooltip-bg": "color-ebony-clay",
"color-tv-dialog-caption": "color-trout-2",
"color-tv-dropdown-item-hover-bg": "color-athens-gray-1",
"color-underlined-text": "color-slate-gray",
"color-widget-pages-bg": "color-white",
"color-growing": "color-keppel-1",
"color-falling": "color-radical-red",
"color-label-long": "color-success",
"color-label-short": "color-danger",
"color-label-education": "color-sunglow",
"color-label-neutral": "color-gull-gray",
"color-collapse-tabs-border": "color-athens-gray-3",
"color-border": "#dadde0",
"color-border-chat-fields": "#c9cbcd",
"color-border-hover": "#c8c8c8",
"color-button-hover-bg": "#f2f2f2",
"color-depthrenderer-fill-style": "#555555",
"color-disabled-border-and-color": "#ececec",
"color-disabled-input": "#ececec",
"color-empty-container-message": "#8a8a8a",
"color-footer-chart-panel-bg": "#f1f3f6",
"color-icons": "#7d7d7d",
"color-input-textarea-readonly": "#555555",
"color-item-active-blue": "#eff9ff",
"color-item-hover-active-bg": "#f1f3f6",
"color-item-hover-bg": "#edf1f2",
"color-item-hover-blue": "#c6e9f8",
"color-item-selected-blue": "#eafafe",
"color-list-item": "#888989",
"color-news-highlight": "#f2f5f8",
"color-placeholder": "#adaeb0",
"color-row-hover-active-bg": "#f1f3f6",
"color-sb-scrollbar-body-bg": "#d8d8d8",
"color-screener-header-bg-hover": "#f1f3f6",
"color-section-separator-border": "#b5b7b9",
"color-separator-table-chat": "#eaecef",
"color-tag-active-bg": "#cfdce3",
"color-tag-hover-bg": "#dce6ea",
"color-text-regular": "#4a4a4a",
"color-text-secondary": "#b4b4b4",
"color-tv-button-checked": "#757575",
"color-seeking-alpha-brand": "#ff7200"
}
},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c, h, u;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(745), n = i(92), r = i(40), s = i(10), a = i(17), l = i(211), c = i(24), h = {
confirmDelete: window.t("Do you really want to delete Study Template '{0}' ?")
}, u = function() {
function t(t) {
var e = this;
this._chartWidgetCollection = t.chartWidgetCollection, this._favoriteStudyTemplatesService =
t.favoriteStudyTemplatesService, window.loginStateChange.subscribe(null, n
.invalidateStudyTemplatesList), this._list = new a([]), this._onChange = new s, this
._list.subscribe(function() {
return e._onChange.fire()
})
}
return t.prototype.showSaveAsDialog = function() {
var t = this,
e = this._chartWidgetCollection.activeChartWidget.value();
new o.StudyTemplateSaver({
chartWidget: e,
onSave: function(e) {
t._list.setValue(e)
}
}).show()
}, t.prototype.applyTemplate = function(t) {
var e = this._chartWidgetCollection.activeChartWidget.value();
c.setValue("defaultStudyTemplate", t), n.getStudyTemplateContent(t, function(i) {
r.trackEvent("GUI", "Load Study Template"), e.model().model()
.restoreStudyTemplate(JSON.parse(i.content), t), e
.updateSeriesControlUI()
})
}, t.prototype.deleteStudyTemplate = function(t) {
var e = this;
window.runOrSignIn(function() {
var i = l.createConfirmDialog({
type: "modal",
content: h.confirmDelete.format(t)
});
i.on("action:yes", function(i) {
i.actionLoader("yes", "start"), n
.invalidateStudyTemplatesList(), n.removeStudyTemplate(t,
function() {
var o, n = e.list();
e._list.setValue(n.filter(function(e) {
return e.name !== t
})), e._favoriteStudyTemplatesService && (o = e
._favoriteStudyTemplatesService.get(), e
._favoriteStudyTemplatesService.set(o
.filter(function(e) {
return e !== t
}))), setTimeout(function() {
i.actionLoader("yes", "stop"), i.close()
}, 0)
})
}), i.open()
}, {
source: "Study templates delete"
})
}, t.prototype.list = function() {
return this._list.value()
}, t.prototype.plainList = function(t) {
var e, i = this.list();
return e = "default" === t ? i.filter(function(t) {
return !!t.is_default
}) : i.filter(function(t) {
return !t.is_default
}), e.map(function(t) {
return t.name
})
}, t.prototype.getOnChange = function() {
return this._onChange
}, t.prototype.refreshStudyTemplateList = function(t) {
var e = this;
n.getStudyTemplatesList(function(i) {
e._list.setValue(i), void 0 !== t && t()
})
}, t
}(), e.StudyTemplates = u
},
function(t, e, i) {
"use strict";
function o(t, e) {
return new h.SaveRenameDialog({
fields: [new h.AutocompleteField({
name: d,
label: _.saveRenameDialog.titleFieldLabel + ":",
error: _.saveRenameDialog.titleFieldError,
source: t,
valueField: "name",
textField: "name",
maxLength: 64
}), new h.CheckboxField({
name: p,
label: _.saveRenameDialog.intervalFieldLabel,
hint: _.saveRenameDialog.intervalFieldHint.format(e)
})],
title: _.saveRenameDialog.dialogTitle
}).show().then(function(t) {
return {
title: t[d],
saveInterval: !!t[p]
}
})
}
function n(t) {
return new Promise(function(e) {
var i = c.createConfirmDialog({
type: "modal",
content: _.confirmDialog.title.format(t)
});
i.on("action:yes", function(t) {
e(), t.close()
}), i.open()
})
}
function r(t, e) {
u.saveStudyTemplate(t, function(i) {
i.error || (a.setValue("defaultStudyTemplate", t.name), u
.invalidateStudyTemplatesList(), u.getStudyTemplatesList(e))
})
}
var s, a, l, c, h, u, d, p, _, f;
Object.defineProperty(e, "__esModule", {
value: !0
}), s = i(0), a = i(24), l = i(295), c = i(211), h = i(154), u = i(92), d = "text", p = "bool",
_ = {
saveRenameDialog: {
dialogTitle: window.t("Save Indicator Template As"),
titleFieldLabel: window.t("Template name"),
titleFieldError: window.t("Please enter template name"),
intervalFieldLabel: window.t("Save Interval"),
intervalFieldHint: window.t(
"When selecting this checkbox the study template will set {0} interval on a chart")
},
confirmDialog: {
title: window.t("Study Template '{0}' already exists. Do you really want to replace it?")
}
}, f = function() {
function t(t) {
var e = this;
this._showSaveDialog = function() {
return s.__awaiter(e, void 0, void 0, function() {
var t, e, i;
return s.__generator(this, function(n) {
switch (n.label) {
case 0:
return t = this._chartWidget.model().model()
.mainSeries().interval(), [4, this
._getActualTemplateList()
];
case 1:
return e = n.sent(), [4, o(e, t)];
case 2:
return i = n.sent(), this._doSave(i.title, i
.saveInterval, e), [2]
}
})
})
}, this._chartWidget = t.chartWidget, t.onSave && (this._onSave = t.onSave)
}
return t.prototype.show = function() {
window.runOrSignIn(this._showSaveDialog, {
source: "Study templates save as",
sourceMeta: "Chart"
})
}, t.prototype._doSave = function(t, e, i) {
return s.__awaiter(this, void 0, void 0, function() {
var o, a, c, h;
return s.__generator(this, function(s) {
switch (s.label) {
case 0:
return t = l.clean(t), o = this._chartWidget.model()
.model().studyTemplate(e), a = JSON.stringify(o),
c = {
name: t,
content: a
}, h = i.map(function(t) {
return t.name
}).includes(t), h ? [4, n(t)] : [3, 2];
case 1:
s.sent(), s.label = 2;
case 2:
return r(c, this._onSave), [2]
}
})
})
}, t.prototype._getActualTemplateList = function() {
return u.invalidateStudyTemplatesList(), new Promise(function(t) {
u.getStudyTemplatesList(t)
})
}, t
}(), e.StudyTemplateSaver = f
},
function(t, e, i) {
"use strict";
function o(t, e) {
if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
}
var n, r;
Object.defineProperty(e, "__esModule", {
value: !0
}), e.AutocompleteField = void 0, n = function() {
function t(t, e) {
var i, o;
for (i = 0; i < e.length; i++) o = e[i], o.enumerable = o.enumerable || !1, o
.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key,
o)
}
return function(e, i, o) {
return i && t(e.prototype, i), o && t(e, o), e
}
}(), r = i(747), e.AutocompleteField = function() {
function t(e) {
var i = e.label,
n = e.name,
s = e.maxLength,
a = e.error,
l = void 0 === a ? "" : a,
c = e.source,
h = e.valueField,
u = e.textField;
o(this, t), this._name = n, this._valueField = h, this._textField = u, this._error = l, this
._$field = $(
'<label class="tv-rename-chart-dialog__field">\n\t\t\t\t<span class="tv-rename-chart-dialog__label">' +
i + '</span>\n\t\t\t\t<tv-autocomplete name="' + n +
'"><tv-autocomplete>\n\t\t\t</label>'), this._autocomplete = new r.Autocomplete({
el: this._$field.find("tv-autocomplete").get(0),
source: new r.ArraySource(c),
textField: this._textField,
maxLength: s
}), this._preventDialogEvents()
}
return n(t, [{
key: "appendTo",
value: function(t) {
t.append(this._$field)
}
}, {
key: "focus",
value: function() {
this._autocomplete.input.focus()
}
}, {
key: "select",
value: function() {
this._autocomplete.input.focus(), this._autocomplete.input.select()
}
}, {
key: "_preventDialogEvents",
value: function() {
var t = this,
e = function(t) {
return t.stopPropagation()
};
this._autocomplete.stream.addListener(r.events.BEFORE_OPEN_MENU,
function() {
t._$field.on("keypress keyup", e)
}), this._autocomplete.stream.addListener(r.events
.AFTER_CLOSE_MENU,
function() {
t._$field.off("keypress keyup", e)
})
}
}, {
key: "value",
get: function() {
return this._autocomplete.value[this._valueField]
}
}, {
key: "name",
get: function() {
return this._name
}
}, {
key: "valid",
get: function() {
return !!this._autocomplete.input.value
}
}, {
key: "error",
get: function() {
return this._error
}
}]), t
}()
},
function(t, e, i) {
"use strict";
var o, n;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(748), e.Autocomplete = o.Autocomplete, e.ArraySource = o.ArraySource, n = i(315), e
.events = n.events
},
function(t, e, i) {
"use strict";
(function(t) {
function o(t) {
var e, i;
if (t && t.__esModule) return t;
if (e = {}, null != t)
for (i in t) Object.prototype.hasOwnProperty.call(t, i) && (e[i] = t[i]);
return e.default = t, e
}
function n(t) {
return t && t.__esModule ? t : {
default: t
}
}
function r(t, e, i) {
return e in t ? Object.defineProperty(t, e, {
value: i,
enumerable: !0,
configurable: !0,
writable: !0
}) : t[e] = i, t
}
function s(t, e) {
if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
}
var a, l, c, h, u, d, p, _, f, m;
Object.defineProperty(e, "__esModule", {
value: !0
}), e.ArraySource = e.Autocomplete = void 0, a = function() {
function t(t, e) {
var i, o;
for (i = 0; i < e.length; i++) o = e[i], o.enumerable = o.enumerable || !1, o
.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t,
o.key, o)
}
return function(e, i, o) {
return i && t(e.prototype, i), o && t(e, o), e
}
}(), i(749), l = i(91), c = n(l), h = i(394), u = i(751), d = i(754), p = i(123), _ = o(p),
f = i(315), m = i(755), e.Autocomplete = function() {
function e(i) {
var o = i.el,
n = i.source,
r = i.textField,
a = void 0 === r ? "text" : r,
l = i.userpicField,
c = void 0 === l ? "userpic" : l,
h = i.maxLength;
s(this, e), this._el = o, this._$el = $(o), this._source = n, this._tmpl = t.render(
m, {
maxLength: h
}), this._textField = a, this._userpicField = c, this._init()
}
return a(e, [{
key: "_init",
value: function() {
this.stream = new c.default;
var t = this._el.querySelector("input");
this._el.innerHTML = this._tmpl, this.input = this._el
.querySelector("input"), t && (this.input.parentNode
.replaceChild(t, this.input), this.input = t), this
.input.addEventListener("input", this._onInput.bind(this)),
this.input.addEventListener("focus", this._onInput.bind(
this)), this.input.addEventListener("blur", this._onBlur
.bind(this)), this._$el.on("beforeOpenMenu", this
._onBeforeOpenMenu.bind(this)), this._$el.on(
"afterCloseMenu", this._onAfterCloseMenu.bind(this)),
this._dropdown = new h.DropdownView(this._$el), this
._initMenu(), this._regHandlers()
}
}, {
key: "_initMenu",
value: function(t) {
var e = this;
this._menu = new u.Menu({
el: this._el.querySelector("tv-menu"),
itemClass: "tv-autocomplete__dropdown-item tv-dropdown__item",
textField: this._textField,
userpicClass: "tv-autocomplete__userpic",
userpicField: this._userpicField
}), this._menu.stream.addListener(u.events.SELECT, function(
t) {
if (!t[e._textField]) return void e.stream
.emitEvent(f.events.SELECT_CUSTOM, [t]);
e.input.value = t[e._textField], e._dropdown
.close(), e.stream.emitEvent(f.events.SELECT, [
t
])
})
}
}, {
key: "_regHandlers",
value: function() {
var t, e, i = this;
this._closeStateKeyboardListener = new d.KeyboardListener, this
._closeStateKeyboardListener.regHandlers((t = {}, r(t, _
.UP_ARROW,
function() {
i._dropdown.open()
}), r(t, _.DOWN_ARROW, function() {
i._dropdown.open()
}), r(t, _.ENTER, function() {
i._menu.select()
}), t)), this._openStateKeyboardListener = new d
.KeyboardListener, this._openStateKeyboardListener
.regHandlers((e = {}, r(e, _.UP_ARROW, function() {
i._menu.prev()
}), r(e, _.DOWN_ARROW, function() {
i._menu.next()
}), r(e, _.ENTER, function() {
i._menu.select()
}), r(e, _.ESC, function() {
i._dropdown.close()
}), e)), this._closeStateKeyboardListener.watchOn(this
.input)
}
}, {
key: "_onBlur",
value: function() {
this._dropdown.close()
}
}, {
key: "_onInput",
value: function() {
var t = this;
this._menu.highlight(this.input.value), this._source.find(this
.input.value, this._textField).then(function(e) {
t._menu.updateItems(e), e.length ? t._dropdown
.open() : t._dropdown.close()
})
}
}, {
key: "_onAfterCloseMenu",
value: function() {
this._openStateKeyboardListener.stopWatching(), this
._closeStateKeyboardListener.watchOn(this.input), this._menu
.reset(), this.stream.emitEvent(f.events.AFTER_CLOSE_MENU)
}
}, {
key: "_onBeforeOpenMenu",
value: function() {
this._closeStateKeyboardListener.stopWatching(), this
._openStateKeyboardListener.watchOn(this.input), this.stream
.emitEvent(f.events.BEFORE_OPEN_MENU)
}
}, {
key: "value",
get: function() {
return this.input.value !== this._menu.value[this._textField] ?
r({}, this._textField, this.input.value) : this._menu.value
}
}]), e
}(), e.ArraySource = function() {
function t(e) {
s(this, t), this._array = e
}
return a(t, [{
key: "find",
value: function(t, e) {
var i = this._array.filter(function(i) {
return i[e].toLowerCase().includes(t.toLowerCase())
});
return Promise.resolve(i)
}
}, {
key: "getItems",
value: function() {
return Promise.resolve(this._array)
}
}]), t
}()
}).call(e, i(41))
},
function(t, e) {},
function(t, e) {},
function(t, e, i) {
"use strict";
var o, n;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(752), Object.defineProperty(e, "Menu", {
enumerable: !0,
get: function() {
return o.Menu
}
}), n = i(312), Object.defineProperty(e, "events", {
enumerable: !0,
get: function() {
return n.events
}
})
},
function(t, e, i) {
"use strict";
(function(t) {
function o(t) {
return t && t.__esModule ? t : {
default: t
}
}
function n(t, e) {
if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
}
var r, s, a, l, c, h, u, d, p, _;
Object.defineProperty(e, "__esModule", {
value: !0
}), e.Menu = void 0, r = function() {
function t(t, e) {
var i, o;
for (i = 0; i < e.length; i++) o = e[i], o.enumerable = o.enumerable || !1, o
.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t,
o.key, o)
}
return function(e, i, o) {
return i && t(e.prototype, i), o && t(e, o), e
}
}(), i(753), s = i(91), a = o(s),
l = i(312), c = i(313), h = "tv-menu-item", u =
'<tv-menu-item class="{{itemClass}} {{activeClass}}" data-item="{{item}}">{{#userpic}}<img class="{{userpicClass}}" src="{{userpic}}">{{/userpic}}{{{html}}}</tv-menu-item>',
d = "prev", p = "next", _ = function(t, e) {
var i = Math.min(t.length, e.length),
o = void 0;
for (o = 0; o < i && t.charAt(o).toLowerCase() === e.charAt(o).toLowerCase(); o++);
return o > 0 ? "<strong>" + (0, c.htmlEscape)(t.slice(0, o)) + "</strong>" + (0, c
.htmlEscape)(t.slice(o)) : (0, c.htmlEscape)(t)
}, e.Menu = function() {
function e(t) {
var i = t.el,
o = t.items,
r = t.itemClass,
s = t.textField,
a = void 0 === s ? "text" : s,
l = t.userpicField,
c = void 0 === l ? "userpic" : l,
h = t.userpicClass;
n(this, e), this._el = i, this._items = o, this._itemClass = r, this._textField = a,
this._userpicField = c, this._userpicClass = h, this._hightlighted = "", this
._init()
}
return r(e, [{
key: "_init",
value: function() {
this._el.setAttribute("tabindex", "1"), this.stream = new a
.default, this.updateItems(this._items), this._el
.addEventListener("mousedown", function(t) {
t.preventDefault()
}), this._el.addEventListener("click", this._onClick.bind(
this))
}
}, {
key: "updateItems",
value: function(t) {
this._items = t, t && this._renderItems(t), this._menuItems =
this._el.querySelectorAll(h), this._selectedItem = this._el
.querySelector(h + ".i-active"), this._setFocusOnItem(this
._selectedItem)
}
}, {
key: "next",
value: function() {
this._moveFocusTo(p)
}
}, {
key: "prev",
value: function() {
this._moveFocusTo(d)
}
}, {
key: "reset",
value: function() {
return this._selectedItem ? void this._setFocusOnItem(this
._selectedItem) : this._focusedItem ? void this
._blur() : void 0
}
}, {
key: "select",
value: function() {
this._selectedItem = this._focusedItem, this.stream.emitEvent(l
.events.SELECT, [this.value])
}
}, {
key: "highlight",
value: function(t) {
null == t ? t = "" : t += "", this._hightlighted !== t && (this
._hightlighted = t, this.updateItems(this._items))
}
}, {
key: "_moveFocusTo",
value: function(t) {
var e = this._getFocusedItemIdx(),
i = this._menuItems.length - 1,
o = void 0;
switch (t) {
case p:
o = this._findActiveItem(t, ++e) || this
._findActiveItem(t, 0);
break;
case d:
o = this._findActiveItem(t, --e) || this
._findActiveItem(t, i)
}
this._setFocusOnItem(o)
}
}, {
key: "_getFocusedItemIdx",
value: function() {
var t = this;
return Array.prototype.findIndex.call(this._menuItems, function(
e) {
return Object.is(e, t._focusedItem)
})
}
}, {
key: "_findActiveItem",
value: function(t, e) {
for (var i = this._menuItems[e]; i && i.classList.contains(
"i-disabled");) switch (t) {
case "next":
i = this._menuItems[e++];
break;
case "prev":
i = this._menuItems[e--]
}
return i
}
}, {
key: "_setFocusOnItem",
value: function(t) {
t && !t.classList.contains("i-disabled") ? (this._blur(), this
._focusedItem = t, this._focus()) : this._focusedItem =
null
}
}, {
key: "_focus",
value: function() {
this._focusedItem && this._focusedItem.classList.add("i-active")
}
}, {
key: "_blur",
value: function() {
this._focusedItem && this._focusedItem.classList.remove(
"i-active")
}
}, {
key: "_onClick",
value: function(t) {
var e = !t.target.classList.contains("i-disabled");
t.target.tagName === h.toUpperCase() && e && (this
._setFocusOnItem(t.target), this.select())
}
}, {
key: "_renderItems",
value: function(e) {
var i = this,
o = {
items: e,
itemClass: this._itemClass,
userpicClass: this._userpicClass,
activeClass: function() {
var t = i._hightlighted,
e = this[i._textField];
if (t && e && t.toLowerCase() === e
.toLowerCase()) return "i-active"
},
text: function() {
return this[i._textField]
},
html: function() {
return _(this[i._textField], i._hightlighted)
},
userpic: function() {
return this[i._userpicField]
},
item: function() {
return JSON.stringify(this)
}
},
n = "{{#items}}" + u + "{{/items}}";
this._el.innerHTML = t.render(n, o)
}
}, {
key: "value",
get: function() {
var t = void 0;
try {
t = JSON.parse(this._selectedItem.dataset.item)
} catch (e) {
t = {}
}
return t
}
}]), e
}()
}).call(e, i(41))
},
function(t, e) {},
function(t, e, i) {
"use strict";
var o, n;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(123), Object.keys(o).forEach(function(t) {
"default" !== t && "__esModule" !== t && Object.defineProperty(e, t, {
enumerable: !0,
get: function() {
return o[t]
}
})
}), n = i(314), Object.defineProperty(e, "KeyboardListener", {
enumerable: !0,
get: function() {
return n.KeyboardListener
}
})
},
function(t, e) {
t.exports =
'<div class="tv-dropdown-behavior tv-autocomplete__wrapper">\n\t<input class="tv-control-input tv-dropdown-behavior__button" type="text" {{#maxLength}}maxlength="{{ maxLength }}"{{/maxLength}}>\n\t<tv-menu class="tv-dropdown-behavior__body tv-dropdown__body tv-dropdown__body--under-trigger tv-autocomplete__dropdown i-hidden">\n\t</tv-menu>\n</div>\n'
},
function(t, e, i) {
"use strict";
function o(t) {
return t && t.__esModule ? t : {
default: t
}
}
function n(t, e) {
if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
}
var r, s, a;
Object.defineProperty(e, "__esModule", {
value: !0
}), e.CheckboxField = void 0, r = function() {
function t(t, e) {
var i, o;
for (i = 0; i < e.length; i++) o = e[i], o.enumerable = o.enumerable || !1, o
.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key,
o)
}
return function(e, i, o) {
return i && t(e.prototype, i), o && t(e, o), e
}
}(), s = i(204), a = o(s), e.CheckboxField = function() {
function t(e) {
var i = e.label,
o = e.name,
r = e.error,
s = void 0 === r ? "" : r,
l = e.hint;
n(this, t), this._name = o, this._error = s, this._checkboxView = new a.default({
labelRight: i,
name: o
}), this._checkboxView.$el.addClass("tv-rename-chart-dialog__field"), l && this
._checkboxView.$el.append(
'<span class="tv-rename-chart-dialog__hint apply-common-tooltip" title=\'' + l +
"'></span>")
}
return r(t, [{
key: "appendTo",
value: function(t) {
t.append(this._checkboxView.$el)
}
}, {
key: "focus",
value: function() {}
}, {
key: "select",
value: function() {}
}, {
key: "value",
set: function(t) {
this._checkboxView.checked = t
},
get: function() {
return this._checkboxView.checked
}
}, {
key: "name",
get: function() {
return this._name
}
}, {
key: "valid",
get: function() {
return !0
}
}, {
key: "error",
get: function() {
return this._error
}
}]), t
}()
},
function(t, e, i) {
"use strict";
function o(t, e) {
if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
}
function n(t, e) {
if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
return !e || "object" != typeof e && "function" != typeof e ? t : e
}
function r(t, e) {
if ("function" != typeof e && null !== e) throw new TypeError(
"Super expression must either be null or a function, not " + typeof e);
t.prototype = Object.create(e && e.prototype, {
constructor: {
value: t,
enumerable: !1,
writable: !0,
configurable: !0
}
}), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e)
}
var s, a;
Object.defineProperty(e, "__esModule", {
value: !0
}), e.InputFieldRegExp = void 0, s = function() {
function t(t, e) {
var i, o;
for (i = 0; i < e.length; i++) o = e[i], o.enumerable = o.enumerable || !1, o
.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key,
o)
}
return function(e, i, o) {
return i && t(e.prototype, i), o && t(e, o), e
}
}(), a = i(154), e.InputFieldRegExp = function(t) {
function e(t) {
var i, r;
return o(this, e), i = t.regExp, delete t.regExp, r = n(this, (e.__proto__ || Object
.getPrototypeOf(e)).call(this, t)), r._regExp = i, r
}
return r(e, t), s(e, [{
key: "valid",
get: function() {
return this._regExp.test(this._$input.val())
}
}]), e
}(a.InputField)
},
function(t, e) {},
function(t, e, i) {
"use strict";
var o, n, r;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(174), r = function(t) {
function e(e, i) {
return t.call(this, e, i, "FAVORITE_STUDY_TEMPLATES_CHANGED", "StudyTemplates.quicks",
[]) || this
}
return o.__extends(e, t), e
}(n.CommonJsonStoreService), e.FavoriteStudyTemplateService = r
},
function(t, e, i) {
"use strict";
function o(t, e, i, o) {
null === a && (a = (0, r.createDialog)({
width: i || 600,
closeOnOutsideClick: !1,
destroyOnClose: !0,
type: "modal",
contentWrapTemplate: '<div class="tv-dialog__section tv-dialog__section--no-border"><div class="tv-text tv-text--position-outside"></div></div>',
actionsWrapTemplate: '<div class="tv-dialog__section tv-dialog__section--actions tv-dialog__section--actions-adaptive tv-dialog__section--no-border">',
title: t,
content: e,
actions: [{
name: "reconnect",
type: "primary",
text: $.t("Reconnect")
}, {
name: "report",
type: "primary",
text: $.t("Report a data issue")
}]
}).on("action:reconnect", function(t) {
t.close(), o()
}).on("action:report", function(t) {
t.setDestroyOnClose(!1), t.close(), runOrSignIn(function() {}, {
source: "Report data issue from disconnect dialog"
})
}).on("destroy", function() {
a = null
}).open())
}
function n(t) {
(0, s.trackEvent)("System", "Critical Error"), o($.t("Oops, something went wrong"), $.t(
"Please report the issue or click Reconnect."), 500, t)
}
var r, s, a;
Object.defineProperty(e, "__esModule", {
value: !0
}), e.showCriticalErrorMessage = n, r = i(65), s = i(40), a = null
},
function(t, e, i) {
"use strict";
(function(e, o, n) {
function r(t, i, n) {
this.HIGHLIGHT_STUDY_NUM_FLICKS = 2, this.SCROLL_TOLERANCE = 10, this
._BASIC_STUDIES_PACKAGE_NAME = "tv-basicstudies", this._CUSTOM_STUDIES_PACKAGE_NAME =
"Script$USER", this._PUBLISHED_STUDIES_PACKAGE_NAME = "Script$PUB", this
._STANDARD_STUDIES_PACKAGE_NAME = "Script$STD", this._SCRIPTING_PACKAGE_NAME =
"tv-scripting", this._FUNDAMENTAL_PACKAGE_NAME = "Script$EDGR", this
._BASIC_STUDIES_PAGE_NAME = e.enabled("plain_studymarket") ? $.t("Technical Analysis") :
$.t("Built-ins"), this._FUNDAMENTALS_PAGE_NAME = $.t("Fundamentals"), this._dialog =
null, this._selectedStudy = null, this._keyDownListener = null, this.visibilityChanged =
new o, this._chartWidgetCollection = t, this._chart = t.activeChartWidget.value(), this
._options = $.extend({}, this.DEFAULT_OPTIONS, n || {}), this.concretizeOptions(), this
._user = i, this.setup(), this.favsModel = T.getInstance(),
this.favsModel.favoritesChanged().subscribe(this, this.updateFavorites)
}
var s, a, l, c = i(9).assert,
h = i(23),
u = i(173).SidebarCustomScroll,
d = i(33),
p = i(65).createDialog,
_ = (i(112).createConfirmDialog, i(145).createNoticeDialog),
f = i(316).createSearchControl,
m = i(31),
g = i(24),
v = i(201),
y = i(71),
b = i(318).AddSymbolCheckbox,
S = i(121),
w = i(123),
T = i(766).FavoriteScriptsModel,
C = i(314).KeyboardListener,
x = i(319),
P = i(7).getLogger("Chart.StudyMarket");
i(767), i(768), i(175), s =
'<div class="tv-insert-indicator-dialog__body js-dialog__scroll-wrap"><div class="tv-insert-indicator-dialog__left-panel">{{^minimized}}<div id="js-search-placeholder"></div>{{/minimized}}<div class="tv-insert-indicator-dialog__left-panel-content-wrapper js-left-panel-wrapper"><div class="tv-insert-indicator-dialog__tabs-viewport js-tabs-viewport"><div class="tv-insert-indicator-dialog__tabs-container js-tabs-container"></div></div></div></div><div class="tv-insert-indicator-dialog__right-panel js-right-panel">{{#minimized}}{{#withSearch}}<div id="js-search-placeholder"></div>{{/withSearch}}{{/minimized}}<div class="tv-insert-indicator-dialog__pages js-pages"></div></div></div>',
a =
'<div class="tv-insert-indicator-dialog__tabs-group"><div class="tv-insert-indicator-dialog__tab tv-insert-indicator-dialog__tab--group-head js-tab js-tab-head">{{title}}<span class="tv-caret"></span></div><div class="tv-insert-indicator-dialog__tabs"></div></div>',
l =
'<div class="js-study-item tv-insert-study-item {{^withFavorites}}i-without-stars{{/withFavorites}}">{{#withFavorites}}<div class="tv-insert-study-item__favorite-icon js-favorite-icon"><span class="tv-insert-study-item__star tv-insert-study-item__star--filled">' +
i(209) +
'</span><span class="tv-insert-study-item__star tv-insert-study-item__star--empty">' + i(
210) +
'</span></div>{{/withFavorites}}<div class="tv-insert-study-item__title"><div class="tv-insert-study-item__title-text" title="{{titleTooltip}}">{{{title}}}</div></div></div>',
r.prototype.destroy = function() {}, r.prototype.setup = function() {
this._initialized = !1, this._loadMore = null, this._$economyTabInput = null, this
._$symbolSearchPopup = null, this._market = null, this._studies = null, this
._packagesWithTabNames = {}, this._pages = {}, this._tabs = {}, this
._subProductIds = {}, this.favsChanged = new o, this
._previousInviteOnlyStudiesIds = [], this.studiesReady = new $.Deferred, this
.marketPagesReady = new $.Deferred, this._pubSearchCount = [0, 0, 0], this
._pubSearchCanLoad = [!0, !0, !0], this._pubSearchEntries = [], this
._pubSearchCache = [], this._pubSearchDfd = null, this._pubSearchPageShown = !1,
this._w_market_tabs = null, this._w_technical_tabs = null
}, r.prototype.init = function() {
if (this._initialized) return void this.getStudyInfo();
this.setupMarketInfo(), this.getStudyInfo(), this.setUser(this._user), this
.prepareLayout(), this.attachHandlers(), this._initialized = !0
}, r.prototype.DEFAULT_OPTIONS = {
onWidget: !1,
hideMarketPages: !1,
selectBasicPage: !0,
minimized: !1,
searchKeywords: {
earning: RegExp("EPS"),
earnings: RegExp("EPS"),
"trailing twelve months": RegExp("TTM")
}
}, r.prototype._PAGE_KEY = "studyMarket.page",
r.prototype._ECONOMY_TAB = $.t("Economy & Symbols"), r.prototype
._PUB_SEARCH_ENTRIES_ON_PAGE = 20, r.prototype.loadFavorites = function() {
this.favsModel.loadFavs()
}, r.prototype.concretizeOptions = function() {
e.enabled("study_market_minimized") && (this._options.hideMarketPages = !0, this
._options.selectBasicPage = !0, this._options.minimized = !0), this._options
.onWidget && (this._options.hideMarketPages = !0)
}, r.prototype.setupMarketInfo = function() {}, r.prototype.getStudyInfo = function() {
this._chart.withModel(this, function() {
this.setupStudyInfo()
})
}, r.prototype.setupStudyInfo = function() {
var t = this._chartWidgetCollection.activeChartWidget.value().model().studiesMetaData();
t.length;
this._studies = {}, t = t.filter(function(t) {
return !this.isHidedStudy(t)
}, this), t.forEach(function(t) {
var e, i = this.getStudyPackageName(t.id);
!(this._options.minimized && i !== this._BASIC_STUDIES_PACKAGE_NAME || this
._options.onWidget && d.isScriptStrategy(t)) && (e = this
.resolvePackageName(i), c(void 0 !== e, "Cannot resolve packageName " +
i), this._studies[e] = this._studies[e] || [], this._studies[e]
.push(t))
}.bind(this), this), this.studiesReady.resolve()
}, r.prototype.setupAddonsInfo = function() {
var t, e, i, o, n, r = [],
s = {};
for (t in this._market.products) e = this._market.products[t], pro.hasPackage(t) && e
.subproduct_ids && e.subproduct_ids[0] && !e.disabled && (i = e.subproduct_ids[0],
o = i.split("$")[1], s[o] = t, r.push(ScriptLib.requestPineAddons(o)));
return n = this, Promise.all(r).then(function(t) {
return t.reduce(function(t, e) {
var i, o;
return i = e[0].scriptIdPart.split("_")[0], o = [], n
._fillScriptsMetainfo(e, o), t[s[i]] = o, t
}, {})
})
}, r.prototype.resolvePackageName = function(t) {
return t in this._subProductIds ? this._subProductIds[t] : t
}, r.prototype.setUser = function(t) {
window.is_authenticated ? this.setupUserData(t) : this.setAnonymous()
}, r.prototype.setupUserData = function(t) {
this._user = t, this.loadFavorites(), this.updateMarketPages()
}, r.prototype.setAnonymous = function() {
this.setupUserData(null), this.favsChanged.fire()
}, r.prototype.isHidedStudy = function(t) {
var e;
return this._options.onWidget && (e = "IchimokuCloud@tv-basicstudies" === t.id), !!t
.is_hidden_study && !e
}, r._breakpointDevice = "phone-vertical", r.prototype._switchPagesContainer = function(t,
e) {
this._options.minimized || (t === r._breakpointDevice ? this._w_pages.detach().appendTo(
this._widget.find(".js-left-panel-wrapper")) : e === r._breakpointDevice &&
this._w_pages.detach().appendTo(this._widget.find(".js-right-panel")))
}, r.prototype.prepareLayout = function() {
this._widget = $(n.render(s, {
withSearch: e.enabled("study_dialog_search_control"),
minimized: this._options.minimized
})), this._w_tabs = this._widget.find(".js-tabs-container"), this._w_pages = this
._widget.find(".js-pages"), this._loadMore = null, this.preparePages(), !this
._options.selectBasicPage || this._options.fundamentalsOnly || v.device === r
._breakpointDevice && !this._options.minimized ? this._options.fundamentalsOnly && (
v.device !== r._breakpointDevice || this._options.minimized) ? this.selectPage(
this._FUNDAMENTALS_PAGE_NAME) : v.device === r._breakpointDevice && this
.selectPage("") : this.selectPage(this._BASIC_STUDIES_PAGE_NAME),
this._scroll = new u(this._widget.find(".js-tabs-viewport"), this._w_tabs, {
showBottomShadow: !1
});
var t =
'<div class="tv-dialog__section tv-dialog__section--title js-dialog__drag tv-insert-indicator-dialog__title-container js-title-container"><div class="tv-insert-indicator-dialog__back-button js-back-button js-dialog__no-drag">' +
i(214) +
'</div><div class="js-title-text tv-dialog__title tv-insert-indicator-dialog__title-text">{{{ title }}}</div></div>';
this._dialog = p({
title: " ",
titleTemplate: t,
contentWrapTemplate: this._widget,
addClass: "tv-insert-indicator-dialog " + (this._options.minimized ?
"i-minimized" : ""),
width: this._options.minimized ? 490 : 842,
height: 580,
withScroll: !1,
focusFirstControl: !1,
closeOnClickAtOtherDialogs: !1,
isClickOutFn: function(t) {
var e = x.instance();
if (e) return e.isEventOut(t);
if (this._$symbolSearchPopup) return this._$symbolSearchPopup[0] !==
t.target && !this._$symbolSearchPopup[0].contains(t
.target) && void 0
}.bind(this)
}), this._dialog.on("afterClose", this._onDialogClosed.bind(this)), this._dialog
.$title.find(".js-back-button").on(Modernizr.touch ? "touchend" : "click", this
.selectPage.bind(this, "")), v.on("changeDevice", function(t, e) {
t === r._breakpointDevice && this.currentPage() && this.currentPage()
.hasClass("js-marketplace-page") && this.selectPage(""), t === r
._breakpointDevice && (this._scroll.scrollToStart(), this
._updateDialogTitleText()), this._switchPagesContainer(t, e)
}.bind(this)), this._switchPagesContainer(v.device, ""), this._showHideBackButton(),
this.hide()
}, r.prototype.scrollHandler = function() {
var t, e;
if (!this._loadMore) return void this._w_pages.off("scroll.loadMoreOnEnd");
t = $.map(this._w_pages.children(":visible"), function(t) {
return $(t).outerHeight(!0)
}).reduce(function(t, e) {
return t + e
}, 0), e = this._widget.find(".js-right-panel").height(), this._w_pages
.scrollTop() > t - e - this.SCROLL_TOLERANCE && (this._w_pages.off(
"scroll.loadMoreOnEnd"), this._loadMore())
}, r.prototype._updateDialogTitleText = function() {
var t, e, i;
if (this._dialog) {
if (t = "" !== this._currentPageTitle, e = v.device !== r._breakpointDevice, !t ||
e || this._options.minimized) return void this._dialog.setTitleText(this
._dialogTitleText);
i = this.currentPage(), this._dialog.setTitleText(i.data("fullTitle"))
}
}, r.prototype.currentPage = function() {
return this._pages[this._currentPageTitle]
}, r.prototype.preparePages = function() {
this.addSearchPage(), e.enabled("items_favoriting") && this.addFavoritesPage(), this
._options.fundamentalsOnly || this.prepareBasicPage(), this._options
.fundamentalsOnly || this.addEconomyPage()
}, r.prototype.addEconomyPage = function() {
var t, e, i = this.addPage(this._ECONOMY_TAB, {
withoutTopPadding: !0,
noFlex: !0
}),
o = f({
withoutControls: !0,
placeholder: $.t("Symbol"),
addClass: "tv-insert-indicator-dialog__economy"
});
this._$economyTabInput = o.$input, t = new b({
labelRight: $.t("Overlay the main chart")
}), this._symbolSearch = y.bindToInput(this._$economyTabInput, {
keepFocus: !0,
clearAfterAccept: !0,
callback: function(e) {
var i = this._chartWidgetCollection.activeChartWidget.value();
i && i.addSymbol(e, t.checked)
}.bind(this),
onPopupOpen: function(t) {
this._$symbolSearchPopup = t,
this._$symbolSearchPopup.css("z-index", this._dialog.zIndex)
}.bind(this),
onPopupClose: function() {
this._$symbolSearchPopup = null
}.bind(this)
}), i.append(o.$control), e = $(
'<div class="tv-insert-indicator-dialog__economy-content">'), e.append(t.$el), i
.append(e)
}, r.prototype.addFavoritesPage = function() {
this.addPage("Favorites", {
localizedTitle: $.t("Favorites")
}), this.loadFavorites(), this.updateFavorites()
}, r.prototype.addInvitesOnlyPage = function() {
this.addPage("invitesOnly", {
localizedTitle: $.t("Invite-Only Scripts")
})
}, r.prototype.prepareBasicPage = function() {
var t = this.addPage(this._BASIC_STUDIES_PAGE_NAME, {
packageName: this._BASIC_STUDIES_PACKAGE_NAME,
technical: !e.enabled("plain_studymarket")
});
this._basicPage = t, this.studiesReady.done(function() {
this.resetBasicPage()
}.bind(this))
}, r.prototype._applyGlobalFilter = function(t) {
return this._parentSource && (t = t.filter(d.canBeChild)), t
}, r.prototype._applyStrategiesFilter = function(t) {
var e = this._parentSource ? "not_strategies" : "none";
return "not_strategies" !== e && "only_strategies" !== e || (t = t.filter(function(t) {
var i = d.isScriptStrategy(t);
return "not_strategies" === e ? !i : i
})), t
}, r.prototype.resetBasicPage = function() {
var t, e, i = this.getPage(this._BASIC_STUDIES_PAGE_NAME);
this._studies && (t = this._studies[this._BASIC_STUDIES_PACKAGE_NAME] || [], e = this
._studies[this._STANDARD_STUDIES_PACKAGE_NAME] || [], t = t.concat(e), t = this
._applyStrategiesFilter(t), t = this._applyGlobalFilter(t), this
.preparePageStudies(i, t))
}, r.prototype.resetAllPages = function() {
this.resetBasicPage(), this.resetCustomScriptPage(), this.resetPublishedScriptPage(),
this.resetInvitesOnlyPage()
}, r.prototype._fillScriptsMetainfo = function(t, e) {
var i, o, n;
for (i = 0; i < t.length; i++) o = t[i], n = d.createMetaInfoStub(o, "1"), TradingView
.merge(n, d.parseIdString(n.id)), e.push(n)
}, r.prototype.resetCustomScriptPage = function() {}, r.prototype.resetPublishedScriptPage =
function() {}, r.prototype._createItemsList = function() {
return $('<div class="tv-insert-indicator-dialog__items-list">')
}, r.prototype._createSubGroupItem = function(t) {
return $('<div class="tv-insert-study-item tv-insert-study-item--subgroup-header">')
.text(t)
}, r.prototype._createItemsGroup = function(t, e, i) {
var o, n = this._createItemsList();
return this.fillStudies(n, t, i), o = $(
'<div class="tv-insert-indicator-dialog__subgroup">'), e.length && o.append(this
._createSubGroupItem(e)), o.append(n), o
}, r.prototype.addSearchPage = function() {
var t, e, i, o = f({
addClass: "tv-insert-indicator-dialog__search-control"
});
this._tabs.search = o.$control.data("title", "search"), this._pages.search = $(
'<div class="tv-insert-indicator-dialog__page tv-insert-indicator-dialog__page--search">'
).data("title", "search"), this._pages.search.data("fullTitle", $.t("Search")),
t = null, this._search_value = null, this._search_input = o.$input, o
.inputChangedDelegate.subscribe(null, function() {
t && clearTimeout(t), t = setTimeout(function() {
t = null, this.search(this._search_input.val()), this._w_pages
.scrollTop(0)
}.bind(this), 200)
}.bind(this)), this._search_input.focus(function() {
this.search(this._search_input.val())
}.bind(this)), e = this._widget.find("#js-search-placeholder"),
e.length && e.parent()[0].replaceChild(this._tabs.search[0], e[0]), this._w_pages
.prepend(this._pages.search), i = {}, i[w.ENTER] = this._onEnterKeyHandler.bind(
this), i[w.UP_ARROW] = this._onUpKeyHandler.bind(this), i[w.DOWN_ARROW] = this
._onDownKeyHandler.bind(this), this._keyDownListener = new C("keydown"), this
._keyDownListener.regHandlers(i), this._keyDownListener.watchOn(this._search_input[
0])
}, r.prototype._onEnterKeyHandler = function() {
null !== this._selectedStudy && this.insertThisStudy(this._selectedStudy)
}, r.prototype._onUpKeyHandler = function() {
if (null !== this._selectedStudy) {
var t = this._selectedStudy.prev(".js-study-item");
t && t.length && (this._selectedStudy.removeClass("tv-insert-study-item--selected"),
t.addClass("tv-insert-study-item--selected"), this._selectedStudy = t, this
._ensureSelectedItemIsVisible())
}
}, r.prototype._onDownKeyHandler = function() {
if (null === this._selectedStudy) this._selectedStudy = this.currentPage().find(
".js-study-item").first(), this._selectedStudy.addClass(
"tv-insert-study-item--selected");
else {
var t = this._selectedStudy.next(".js-study-item");
t && t.length && (this._selectedStudy.removeClass("tv-insert-study-item--selected"),
t.addClass("tv-insert-study-item--selected"), this._selectedStudy = t, this
._ensureSelectedItemIsVisible())
}
}, r.prototype._ensureSelectedItemIsVisible = function() {
var t, e, i, o, n, r;
null !== this._selectedStudy && (t = this._w_pages, e = this._selectedStudy[0]
.getBoundingClientRect(), i = t[0].getBoundingClientRect(), o = this
.currentPage()[0].getBoundingClientRect().top, n = e.top - o, r = 3, e.top - i
.top < 0 ? t.scrollTop(n - r) : e.bottom - i.bottom > 0 && t.scrollTop(n - i
.height + e.height + r))
}, r.prototype.search = function(t, i, o) {
function n(t, e, i, o, n, r) {
t.push(e), t[t.length - 1].matchPriority = o, n && (t[t.length - 1].matchIndex = i
.match(r).index)
}
var r, s, a, l, c, h = this;
(this._search_value !== t || i) && (r = this._pages.search, s = [], a = function(t) {
return t.replace(/[!-\/[-^{-}]/g, "\\$&")
}, "" !== t && (l = t.split("").map(function(t, e) {
var i = a(t);
return 0 !== e && (i = "[/\\s-]" + i), "(" + i + ")"
}).join("(.*?)") + "(.*)", s.push({
fullMatch: RegExp("(" + a(t) + ")", "i"),
re: RegExp("^" + l, "i"),
reserveRe: RegExp(l, "i"),
fuzzyHighlight: !0
}), t.toLowerCase() in this.DEFAULT_OPTIONS.searchKeywords && s.push({
fullMatch: this.DEFAULT_OPTIONS.searchKeywords[t.toLowerCase()],
re: this.DEFAULT_OPTIONS.searchKeywords[t.toLowerCase()],
fuzzyHighlight: !1
})), this._search_value = t, c = $.Deferred(), h._currentAsyncSearchDfd = c, e
.enabled("plain_studymarket") ? c.resolve([]) : PublishedScript.suggest(t).done(
function(t) {
var e = [];
t && t.results;
c.resolve(e)
}).fail(function() {
c.resolve([])
}), c.done(function(e) {
var i, o, a, l, u, d, p, _, f, m, g, v, y, b, S, w, T, C, x;
if (h._currentAsyncSearchDfd === c) {
for (i = Object.keys(h._studies), i.indexOf(h
._PUBLISHED_STUDIES_PACKAGE_NAME) < 0 && i.push(h
._PUBLISHED_STUDIES_PACKAGE_NAME), i.sort(), o = [h
._BASIC_STUDIES_PACKAGE_NAME, h._STANDARD_STUDIES_PACKAGE_NAME,
h._PUBLISHED_STUDIES_PACKAGE_NAME, h
._CUSTOM_STUDIES_PACKAGE_NAME
], a = o.length; a--;) l = o[a], -1 !== (u = i.indexOf(l)) && (i
.splice(u, 1), i.unshift(l));
for (d = {}, p = 0, _ = 0; _ < i.length; _++) {
for (f = i[_], m = [], g = h._studies[f], f === h
._PUBLISHED_STUDIES_PACKAGE_NAME && (g = e),
a = 0; a < g.length; a++)
if (v = g[a], s.length)
for (y = 0; y < s.length; y++) b = s[y].re, b.lastIndex = 0,
S = s[y].fullMatch, w = v.shortDescription, w && w
.toLowerCase() === t.toLowerCase() ? n(m, v, w, 3, !0,
S) : w && S.test(w) ? n(m, v, w, 2, !0, S) : (w = v
.description_localized || v.description || v
.scriptName, S.test(w) ? n(m, v, w, 1, !0, S) : b
.test(w) && n(m, v, w, 0, !0, b));
else m.push(v);
if (m = h._applyGlobalFilter(m), m.length) {
switch (T = f, f) {
case h._BASIC_STUDIES_PACKAGE_NAME:
case h._STANDARD_STUDIES_PACKAGE_NAME:
T = h._BASIC_STUDIES_PAGE_NAME;
break;
case h._CUSTOM_STUDIES_PACKAGE_NAME:
T = $.t("My Scripts");
break;
case h._PUBLISHED_STUDIES_PACKAGE_NAME:
T = $.t("Public Library");
break;
default:
f in h._packagesWithTabNames && (T = h
._packagesWithTabNames[T])
}
T in d || (d[T] = []), d[T] = d[T].concat(m), p += m.length
}
}
for (r.html(""), C = Object.keys(d), a = 0; a < C.length; ++a) T = C[a],
m = d[T], s.length && Array.prototype.sort.call(m, function(t, e) {
if (t.matchPriority < e.matchPriority) return 1;
if (t.matchPriority > e.matchPriority) return -1;
if (t.matchPriority === e.matchPriority) switch (t
.matchIndex) {
case void 0:
return 0;
default:
return t.matchIndex > e.matchIndex ? 1 : t
.matchIndex < e.matchIndex ? -1 : 0
}
}), x = this._createItemsGroup(m, this._options.minimized ? "" : $
.t(T), s), r.append(x), this._selectedStudy = null;
0 === p && r.append(
'<p class="tv-insert-indicator-dialog__not-found-message">' + $
.t("No indicators matched your criteria.") + "</p>")
}
}.bind(this))), o || this.selectPage("search")
}, r.prototype.updateSearchPage = function() {
var t = this._search_input.val();
this.search(t, !0, !0)
}, r.prototype.updateMarketPages = function() {}, r.prototype.preparePageStudies = function(
t, e, i, o) {
if (t) {
o || (e = this.sortStudies(e)), t.empty();
var n = this._createItemsList();
this.fillStudies(n, e, null), t.append(n)
}
}, r.prototype.addPage = function(t, e) {
var i, o, n, r, s, a;
return e = $.extend({}, e), i = e.localizedTitle || $.t(t), o = t.toLowerCase(), n = $(
'<div class="tv-insert-indicator-dialog__page">').data("title", o), r = $(
'<div class="tv-insert-indicator-dialog__tab js-tab"></div>').text(i).data(
"title", o).attr("title", i), s = e.technical ? $.t("Technical Analysis") +
": " : "", n.data("fullTitle", s + i), r.toggleClass(
"tv-insert-indicator-dialog__tab--beta", !!e.beta), e.packageName && (this
._packagesWithTabNames[e.packageName] = t), this._pages[o] = n, this._tabs[o] =
r, e.withoutTopPadding && n.addClass(
"tv-insert-indicator-dialog__page--without-top-padding"), e.noFlex && n
.addClass("tv-insert-indicator-dialog__page--no-flex"), e.technical || e.market ? (
a = e.technical ? this._getOrCreateTechnicalTab() : this
._getOrCreateMarketTab(), a.find(".tv-insert-indicator-dialog__tabs").append(r),
e
.market && n.addClass("js-marketplace-page")) : this._w_market_tabs ? r
.insertBefore(this._w_market_tabs) : this._w_tabs.append(r), this._w_pages.append(
n), n.toggleClass("i-hidden", o !== this._currentPageTitle), n
}, r.prototype._createGroupTab = function(t, e) {
var i = $(n.render(a, {
title: t
}));
return i.find(".js-tab-head").on("click", function() {
this._expandCollapseTabs(i, e)
}.bind(this)), this._expandCollapseTabs(i, e, g.getBool(e, !0), !0), i.data(
"settings-open-key", e), this._w_tabs.append(i), i
}, r.prototype._getOrCreateMarketTab = function() {
return this._w_market_tabs || (this._w_market_tabs = this._createGroupTab($.t(
"Marketplace Add-ons"), "studyMarket.marketTabIsOpen"), this._w_market_tabs
.addClass("tv-insert-indicator-dialog__tabs-group--marketplace")), this
._w_market_tabs
}, r.prototype._getOrCreateTechnicalTab = function() {
return this._w_technical_tabs || (this._w_technical_tabs = this._createGroupTab($.t(
"Technical Analysis"), "studyMarket.technicalTabIsOpen")), this
._w_technical_tabs
}, r.prototype._onDialogClosed = function() {
null !== this._selectedStudy && this._selectedStudy.removeClass(
"tv-insert-study-item--selected"), this._selectedStudy = null, this
.visibilityChanged.fire(!1), S.removeListener("StudyMarket")
}, r.prototype.hide = function() {
this._dialog.close()
}, r.prototype.show = function(t) {
var i, o;
this.init(), i = !1, o = t instanceof TradingView.Study && t || null, o !== this
._parentSource && (this._parentSource = o, this._dialogTitleText = this
._parentSource ? $.t("Apply Indicator on {0}").format(this._parentSource.title(!
0)) : $.t("Indicators"), i = !0), this._updateDialogTitleText(), this
._widget.on("keyup.hideDialogStudy", function(t) {
t.which === w.ESC && (this._widget.unbind("keyup.hideDialogStudy"), this
.hide())
}.bind(this)), this._clearInput(), this.loadFavorites(), i && this.resetAllPages(),
this._scroll.scrollTo(0), this.visibilityChanged.fire(!0), this.focusAddSymbolInput(
this._currentPageTitle), S.registerListener("StudyMarket", function(t) {
return !t.ctrlKey && (47 !== t.which && (t.which && t.which === w.ENTER ? (t
.target === this._search_input.get(0) && this
._insertStudyByShortDescription(), !0) : !!t.charCode && (!(
!t.which || t.which <= 32) && (!/^(input|textarea)$/i
.test(t.target.tagName) && (t.preventDefault(), !!(
TradingView.onWidget() || this._options
.minimized && !e.enabled(
"study_dialog_search_control")) || (this
._search_input.focus(), this._search_input[0]
.value = String.fromCharCode(t.charCode), !0))))))
}.bind(this)), this._dialog.open(), h.emit("indicators_dialog")
}, r.prototype.isVisible = function() {
return !!this._initialized && this._widget.is(":visible")
}, r.prototype.getPage = function(t) {
return t = t.toLowerCase(), this._pages[t]
}, r.prototype.focusAddSymbolInput = function(t) {
t === this._ECONOMY_TAB.toLowerCase() && this._$economyTabInput && this
._$economyTabInput.focus()
}, r.prototype._showHideBackButton = function() {
if (this._dialog && !this._options.minimized) {
var t = "" !== this._currentPageTitle;
this._dialog.$el.find(".js-title-container").toggleClass("i-with-back-button", t)
}
}, r.prototype.selectPage = function(t) {
var e, i, o, n, r, s;
if (t = t.toLowerCase(), this.focusAddSymbolInput(t), this._currentPageTitle !== t)
if ("" === t || t in this._pages && t in this._tabs && ("favorites" !== t || this
.hasVisibleFavorites())) {
for (e in this._pages)
if (i = t === e, o = this._pages[e], o.toggleClass("i-hidden", !i), this
._tabs[e].toggleClass("i-active", i), i) {
if (o.trigger("show-page"), n = this._tabs[e].parents(
".tv-insert-indicator-dialog__tabs-group"), 0 === n.length)
continue;
r = n.find(".js-tab-head"), this._expandCollapseTabs(n, r.data(
"settings-open-key"), !0, !0)
} this._currentPageTitle = t, this._w_pages.scrollTop(0), g.setValue(this
._PAGE_KEY, t), this._selectedStudy = null, s = "" !== this
._currentPageTitle,
this._widget.find(".js-tabs-viewport").toggleClass("i-active", !s), this
._w_pages.toggleClass("i-active", s), this._showHideBackButton(), s || this
._search_input.blur(), this._updateDialogTitleText()
} else this.selectPage(this._BASIC_STUDIES_PAGE_NAME)
}, r.prototype.attachHandlers = function() {
var t = Modernizr.touch ? "touchend" : "click",
i = this;
Modernizr.touch && this._w_pages.on("touchstart", ".js-study-item", function(t) {
i._touchStart = $.extend({}, t.originalEvent.touches[0])
}), this._w_tabs.on("click", ".js-tab", this._onTabClicked.bind(this)), e.enabled(
"items_favoriting") && this._w_pages.on(t, ".js-favorite-icon", this.toggleItem
.bind(this)), this._w_pages.on(t, ".js-study-item", function(t) {
var e;
i._touchStart && (e = i._w_pages.find(".tv-insert-study-item")[0]
.clientHeight, Math.abs(i._touchStart.screenY - t.originalEvent
.changedTouches[0].screenY) > e) || i.insertThisStudy($(t
.target).closest(".js-study-item"))
})
}, r.prototype._onTabClicked = function(t) {
var e = $(t.currentTarget).data("title");
e && "search" !== e && this.selectPage(e), t.stopPropagation()
}, r.prototype._expandCollapseTabs = function(t, e, i, o) {
var n, r = t.hasClass("i-dropped");
if (void 0 === i) i = !t.hasClass("i-dropped");
else if (r === i && !o) return;
if (n = t.find(".tv-insert-indicator-dialog__tabs"), t.toggleClass("i-dropped", !!i), o)
return void n.toggleClass("i-hidden", !i);
n.removeClass("i-hidden"), n.velocity(i ? "slideDown" : "slideUp", {
duration: m.dur / 2,
complete: function() {
g.setValue(e, i), this._scroll.updateScroll()
}.bind(this)
})
}, r.prototype.toggleItem = function(t) {
var e = $(t.target).closest(".js-study-item").data("study");
return this.toggleFavorite(e.id), this.toggleEverywhere(e.id), !1
}, r.prototype.toggleEverywhere = function(t) {
var e = this,
i = this.isFavorite(t);
this._w_pages.find(".js-study-item").filter(function(i, o) {
var n = $(o).data("study");
return !!n && e.favsModel.favId(n.id) === e.favsModel.favId(t)
}).find(".js-favorite-icon").toggleClass("i-starred", i).attr("title", this
.favTitle(i))
}, r.prototype.toggleFavorite = function(t) {
this.favsModel.favorite(t)
}, r.prototype.isFavorite = function(t) {
return this.favsModel.isFav(t)
}, r.prototype._getInviteOnlyStudies = function() {
return new Promise(function(t, e) {
t([])
})
}, r.prototype.resetInvitesOnlyPage = function() {
var t = this;
t._tabs.invitesonly && (t._previousInviteOnlyStudiesIds && 0 !== t
._previousInviteOnlyStudiesIds.length ? t._tabs.invitesonly.show() : t._tabs
.invitesonly.hide()), t._getInviteOnlyStudies().then(function(e) {
t._previousInviteOnlyStudies = e, t.preparePageStudies(t._pages.invitesonly,
e), t._tabs.invitesonly && (e && 0 !== e.length ? t._tabs
.invitesonly.show() : t._tabs.invitesonly.hide())
}, function() {
t.preparePageStudies(t._pages.invitesonly, []), t._tabs.invitesonly && t
._tabs.invitesonly.hide()
})
}, r.prototype.updateFavorites = function() {
var t, e, i, o, n, s, a, l, c, h, u, p, _;
if (this._w_pages) {
if (t = this, e = this.getVisibleFavorites(), i = function() {
"favorites" === t._currentPageTitle && t.selectPage(v.device === r
._breakpointDevice ? "" : t._BASIC_STUDIES_PAGE_NAME), t._w_pages
.find(".js-favorite-icon").removeClass("i-starred"), t._tabs && t._tabs
.favorites && t._tabs.favorites.hide()
},
t._tabs.favorites && 0 === e.length) return void i();
for (o = $.Deferred(), n = [], s = [], a = 0; a < e.length; a++)
if (l = e[a], (c = this.getStudyPackageName(l)) !== t
._PUBLISHED_STUDIES_PACKAGE_NAME) {
for (h = this._studies[c] || [], u = 0; u < h.length; u++)
if (p = t.favsModel.favId(d.cutFullId(h[u].id)), _ = t.favsModel.favId(
l), p === _) {
n.push(h[u]);
break
}
} else s.push(l);
s.length && !this._options.minimized || o.resolve(n), o.done(function(t) {
0 === t.length ? i() : this._tabs.favorites.show(), t = this
._applyStrategiesFilter(t), this.preparePageStudies(this._pages
.favorites, t), this._w_pages.find(".js-study-item").find(
".js-favorite-icon").removeClass("i-starred"), e.forEach(this
.toggleEverywhere, this)
}.bind(this)), n && 0 !== n.length && this._tabs.favorites.show()
}
}, r.prototype.hasVisibleFavorites = function() {
return !!this.getVisibleFavorites().length
}, r.prototype.getVisibleFavorites = function() {
return this.checkExcludePackageStudies(this.favsModel.favorites())
}, r.prototype.checkExcludePackageStudies = function(t) {
return t.filter(function(t) {
var e = this.getStudyPackageName(t);
return e === this._PUBLISHED_STUDIES_PACKAGE_NAME || !!(this._studies &&
this._studies[e] && $.grep(this._studies[e], function(e) {
return e.id.indexOf(t) >= 0
}).length > 0) && (e === this._BASIC_STUDIES_PACKAGE_NAME || e ===
this._STANDARD_STUDIES_PACKAGE_NAME || e === this
._CUSTOM_STUDIES_PACKAGE_NAME || e === this
._SCRIPTING_PACKAGE_NAME || e === this._FUNDAMENTAL_PACKAGE_NAME ||
pro.hasPackage(e) && e in this._studies)
}, this)
}, r.prototype.sortStudies = function(t) {
return t.sort(function(t, e) {
return t = t.scriptName || t.description_localized || t.description, e = e
.scriptName || e.description_localized || e.description, t > e ? 1 : t <
e ? -1 : 0
})
}, r.prototype.fillStudies = function(t, e, i) {
var o;
t.empty(), e.forEach(function(e) {
e ? o = this.createStudyListItem(e, i) : (o = document.createElement("div"),
o.className = "placeholder"), t.append(o)
}, this)
}, r.prototype.createStudyListItem = function(t, i) {
var o, r, s, a, c, h, u, p, _, f, m, g, v, y, b, S, w, T, C, x, P, L, I, k, A, M, E, D =
t.description_localized || $.t(t.scriptName || t.description || " ", {
context: "study"
}),
V = this.isFavorite(t.id),
O = [];
if (i && D)
for (o = [], i instanceof RegExp ? o.push({
re: i,
fuzzyHighlight: !1
}) : $.isArray(i) && (o = i), r = 0; r < o.length; r++)
if (s = o[r].fullMatch, a = o[r].reserveRe, c = o[r].re, s.lastIndex = 0, c
.lastIndex = 0, h = s.exec(D), h ? o[r].fuzzyHighlight = !1 : (h = c.exec(
D), !h && a && (h = a.exec(D)), o[r].fuzzyHighlight = !0), h)
if (o[r].fuzzyHighlight)
for (u = h.index, p = 1; p < h.length; p++) _ = h[p].length, p % 2 && (
O[u] = !0), u += _;
else
for (f = 0; f < h[0].length; f++) O[h.index + f] = !0;
return m = TradingView.clean(D, !0), g = m.replace(/./g, function(t, e) {
if ("<" === t ? t = "&lt;" : "&" === t ? t = "&amp;" : '"' === t && (t =
"&quot;"), O[e]) {
if (" " === t || "-" === t || "/" === t) return O[e + 1] = !0, t;
t = '<span class="i-match">' + t + "</span>"
}
return t
}), v = !!t.pine, y = this.getStudyPackageName(t.id), b = v && y === this
._PUBLISHED_STUDIES_PACKAGE_NAME, S = v && y === this._CUSTOM_STUDIES_PACKAGE_NAME,
w = v && (y === this._STANDARD_STUDIES_PACKAGE_NAME || y === this
._FUNDAMENTAL_PACKAGE_NAME), T = v && [TVScript.Access.ACCESS_CLOSED_NEEDS_AUTH,
TVScript.Access.ACCESS_CLOSED_NO_AUTH
].indexOf(t.pine.access) >= 0, C = v && TVScript.Access.ACCESS_CLOSED_NEEDS_AUTH ===
t.pine.access,
x = v && C && void 0 !== t.pine.userHaveAccess, P = v && t.pine.userHaveAccess,
L = !!t.TVScriptSourceCode, I = !1, k = v && !w && !T && (S || b || L || V && !I),
A = {
closed: $.t("Invite-only script. Contact the author for more information."),
open: $.t("Invite-only script. You have been granted access.")
}, M = $(n.render(l, {
publishedOrUserScript: S || b,
title: g,
titleTooltip: TradingView.strip_tags(m),
isStrategy: d.isScriptStrategy(t),
isInviteOnly: C,
showAccessIcon: x,
accessIconClass: P ? "tv-insert-study-item__green-lock-icon" :
"tv-insert-study-item__red-lock-icon",
accessTooltip: P ? A.open : A.closed,
author: t.author && t.author.username,
likes: t.agreeCount ? t.agreeCount + " " + $.t("like", {
plural: "likes",
count: t.agreeCount
}) : "",
showMoreButton: !!t.imageUrl,
deleteButton: !t.imageUrl && S,
withFavorites: e.enabled("items_favoriting") && !this._options.minimized
})), k || M.find(".js-show-source-btn").removeClass("js-show-source-btn").addClass(
"i-empty"), M.data("study", t), void 0 !== t.isCustomIndicator && M.addClass(
"custom-indicator"), e.enabled("items_favoriting") && (E = M.find(
".js-favorite-icon"), E.toggleClass("i-starred", !!V), E.attr("title", this
.favTitle(!!V))), e.enabled("graying_disabled_tools_enabled") &&
ChartApiInstance.studiesAccessController.isToolGrayed(t.description) && M.addClass(
"i-grayed"), M
}, r.prototype.favTitle = function(t) {
return t ? $.t("Remove from favorites") : $.t("Add to favorites")
}, r.prototype.insertThisStudy = function(t) {
if (!t.hasClass("placeholder")) {
var i = t.data("study");
return e.enabled("graying_disabled_tools_enabled") && ChartApiInstance
.studiesAccessController.isToolGrayed(i.description) ? void h.emit(
"onGrayedObjectClicked", {
type: "study",
name: i.description
}) : (t.highlight(this.HIGHLIGHT_STUDY_NUM_FLICKS), this.insertStudy(i), !1)
}
}, r.prototype.insertStudy = function(t) {
var e, i, o = this._chartWidgetCollection.activeChartWidget.value();
o && (e = o.insertStudyStub(t.description), i = d.replaceWithFullStudyMetaInfoAsync(o
.model().studiesMetaData(), t), i.done(function(t) {
var i;
if (o.removeStudyStub(e.id())) {
if (this._parentSource && !d.canBeChild(t)) return i = _({
type: "modal",
title: $.t("Oops!"),
content: $.t(
"This indicator cannot be applied to another indicator"
)
}), void i.open();
o.insertStudyOrShowDialog(t, this._parentSource), this
._is_on_chart = !0
}
}.bind(this)), i.fail(function(t) {
P.logError("Error: " + t), e.setStatus(t)
}))
}, r.prototype.onLoginStateChange = function(t) {
t || this.setUser(window.user), PublishedScript.cleanCache(), this.resetAllPages(), this
.setup(), this.init()
}, r.prototype.getStudyList = function(t) {
function e(t) {
i.push(t)
}
var i, o;
if (!this.studiesReady.isResolved()) return [];
i = [];
for (o in this._studies)(o === this._BASIC_STUDIES_PACKAGE_NAME || pro.hasPackage(o)) &&
(this._studies[o].forEach(e), t && i.push({
separator: !0
}));
return t && i.splice(i.length - 1, 1), i
}, r.prototype.getStudyPackageName = function(t) {
var e, i, o, n, r, s;
if (t) return e = t.split("@"), (i = 1 === e.length) || (o = d.getPackageName(t)) ===
this._SCRIPTING_PACKAGE_NAME ? (n = e[0], i || /^(Strategy)?Script\$/.test(n) ?
(r = n.indexOf("_"), -1 !== r ? (o = n.substring(0, r), s = o.indexOf(
"Script$") >= 0 ? o : "Script$" + o,
pro.getSuperProduct(s) || s) : /USER;/.test(n) ? this
._CUSTOM_STUDIES_PACKAGE_NAME : /PUB;/.test(n) ? this
._PUBLISHED_STUDIES_PACKAGE_NAME : /STD;/.test(n) ? this
._STANDARD_STUDIES_PACKAGE_NAME : n) : o) : o
}, r.prototype.selectSearchPage = function() {
this.selectPage("search"), this._clearInput()
}, r.prototype._insertStudyByShortDescription = function() {
var t, e, i, o = this._search_value;
for (o = o.trim(), t = this._studies[this._BASIC_STUDIES_PACKAGE_NAME], e = 0; e < t
.length; e++)
if (i = t[e], i.shortDescription && i.shortDescription.toUpperCase() === o
.toUpperCase()) {
this.insertStudy(i);
break
}
}, r.prototype._clearInput = function() {
this._search_input.val(""), "search" === this._currentPageTitle && this._search_input
.val("").trigger("input").focus()
}, r.prototype._getScriptType = function() {
return 0
}, r.prototype._pubSearchEntryAlreadyLoaded = function(t) {
var e = t.scriptIdPart.split(";")[1];
return !(this._pubSearchCache.indexOf(e) < 0) || (this._pubSearchCache.push(e), !1)
}, r.prototype._addPubSearchResult = function(t, e) {
t.length && (t.forEach(function(t) {
this._pubSearchEntryAlreadyLoaded(t) || (this._pubSearchEntries.push(t),
this._pubSearchCount[t.scriptType]++)
}, this), 0 === e && (this._pubSearchCount[0] += t.length), this
._pubSearchEntries.sort(function(t, e) {
return e.agreeCount - t.agreeCount
}))
}, r.prototype._getPublicLibraryRequestParams = function(t) {
var e = this._pubSearchCount[t],
i = this._PUB_SEARCH_ENTRIES_ON_PAGE;
return e < this._PUB_SEARCH_ENTRIES_ON_PAGE && (i = this._PUB_SEARCH_ENTRIES_ON_PAGE -
e), {
offset: e,
count: i,
type: t
}
}, t.exports = r
}).call(e, i(5), i(10), i(41))
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18" width="18px" height="18px"><path fill-rule="evenodd" d="M12.5 11h-.79l-.28-.27A6.47 6.47 0 0 0 13 6.5 6.5 6.5 0 1 0 6.5 13c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L17.49 16l-4.99-5zm-6 0C4.01 11 2 8.99 2 6.5S4.01 2 6.5 2 11 4.01 11 6.5 8.99 11 6.5 11z"/></svg>'
},
function(t, e) {},
function(t, e, i) {
"use strict";
var o = i(5);
t.exports.displayedExchangesFilter = function(t) {
return o.enabled("symbol_search_limited_exchanges") && (t = t.filter(function(t) {
return !("bitcoin" === t.flag || t.hideInSymbolSearch)
})), t
}, t.exports.sortExchangesListByFlagIfNeeded = function(t) {
return t
}
},
function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
}), e.types = {
ECONOMIC: "economic",
QUANDL: "quandl"
}
},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c, h;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(24), n = i(93), r = i(33), s = i(10), a = i(15), l = {
FAV_KEY: "studyMarket.favorites",
FAV_EXTRA_KEY: "studyMarket.favorites.extra"
}, c = null, h = function() {
function t() {
var t = this;
this._previousFavorites = [], this._favorites = [], this._favoritesExtra = {}, this
._favoritesChanged = new s, this.loadFavs(), n.TVXWindowEvents.on(
"StudyFavoritesChanged",
function(e) {
var i = JSON.parse(e);
t._updateFavorites(i.favorites || []), t._updateFavoritesExtra(i
.favoritesExtra || {})
}), window.loginStateChange.subscribe(null, function() {
t.loadFavs()
})
}
return t.prototype.loadFavs = function() {
var t = o.getJSON(l.FAV_KEY, []),
e = o.getJSON(l.FAV_EXTRA_KEY, {}),
i = this._migrate(t, e);
this._updateFavorites(i.favs),
this._updateFavoritesExtra(i.favsExtra)
}, t.prototype.isFav = function(t) {
0 === this._favorites.length && this.loadFavs();
var e = this.favId(t);
return -1 !== this._favorites.indexOf(e)
}, t.prototype.favorite = function(t, e) {
var i, o, r, s;
0 !== this._favorites.length && 0 !== Object.keys(this._favoritesExtra).length || this
.loadFavs(), i = this.favId(t), o = this.favorites(), r = this.favoritesExtra(), s =
o.indexOf(i), -1 !== s ? (o.splice(s, 1), delete r[i]) : (o.push(i), void 0 !== e &&
(r[i] = e)), this._updateFavorites(o), this._updateFavoritesExtra(r), this
._saveFavs(o, r), n.TVXWindowEvents.emit("StudyFavoritesChanged", JSON.stringify({
favorites: o,
favoritesExtra: r
}))
}, t.prototype.favId = function(t) {
return r.cutScriptIdPart(t) || r.cutFullId(t)
}, t.prototype.previousFavorites = function() {
return this._previousFavorites.slice()
}, t.prototype.favorites = function() {
return this._favorites.slice()
}, t.prototype.favoritesExtra = function() {
return Object.assign({}, this._favoritesExtra)
}, t.prototype.favoritesChanged = function() {
return this._favoritesChanged
}, t.getInstance = function() {
return null === c && (c = new t), c
}, t.prototype._saveFavs = function(t, e) {
o.setJSON(l.FAV_KEY, t), o.setJSON(l.FAV_EXTRA_KEY, e)
}, t.prototype._migrate = function(t, e) {
var i, o, n = [],
r = {};
for (i = 0; i < t.length; i++) o = this.favId(t[i]), -1 === n.indexOf(o) && (n.push(o),
r[o] = e[t[i]]);
return {
favs: n,
favsExtra: r
}
}, t.prototype._updateFavorites = function(t) {
a.deepEquals(this._favorites, t)[0] || (this._previousFavorites = this.favorites(), this
._favorites = t, this._favoritesChanged.fire(this.favorites()))
}, t.prototype._updateFavoritesExtra = function(t) {
this._favoritesExtra = t
}, t
}(), e.FavoriteScriptsModel = h
},
function(t, e) {},
function(t, e) {},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c, h, u, d, p, _, f;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), i(13), i(12), n = i(23), r = i(154), s = i(133), a = i(40), l = i(10), c = i(770), h =
i(771), u = i(313), d = i(5), p = i(121), _ = i(772), f = function(t) {
function e(e, i, o) {
var r, a, u, d, _ = t.call(this) || this;
return _.onTitleSizeChanged = new l, _._autosaveInterval = 6e4, _._editEnabled = !0, _
._titleValue = "", _._saving = !1, _._haveChanges = !1, _._autosaveTimer = 0, _
._options = o = Object.assign({
popupDirection: "up"
}, o || {}), _._chartWidgetCollection = i, _._readOnly = i.readOnly(), r = "\n" + window
.t("Dot", {
context: "hotkey"
}) + " (.)", _._load = $('<span class="load button first apply-common-tooltip"></span>')
.html(c).attr("title", window.t("Load Chart Layout") + r).click(_.signInOrLoadChart
.bind(_)).appendTo(e), _._title = $(
'<span class="title apply-common-tooltip"></span>'), o.hideChartTitle && _._title
.hide(), a = $("<span>").addClass("separator"), _._optionsMenu = $(
'<span class="button options last">').append($('<div class="tv-caret"></div>')), s
.bindPopupMenu(_._optionsMenu, _._getSavedCharts.bind(_), {
direction: o.popupDirection,
reverse: o.popupReverse,
notCloseOnButtons: !0,
popupSpacing: o.popupSpacing
}), _._readOnly ? (_._save = $(), _._copy = $('<span class="copy">' + window.t("Copy") +
"</span>").appendTo(e).click(_.cloneChart.bind(_)), _._title.addClass(
"read-only"), _._titleReadOnly = $("<span>").addClass("read-only").appendTo(_
._title), a.appendTo(_._copy),
_._optionsMenu.hide()) : (u = window.t(
"Save Chart Layout saves not just some particular chart, it saves all charts for all symbols and intervals which you are modifying while working with this Layout"
), _._save = $('<span class="save button apply-common-tooltip"></span>').attr(
"title", u).html(h).appendTo(e).click(_.signInOrSaveChart.bind(_, null, null,
null)), _._copy = $(), _._titleInput = $('<span type="text" maxlength="80">')
.appendTo(_._title), _._title.bind("click", _._renameChart.bind(_)), _._title.attr(
"title", window.t("Rename Chart Layout")), _._titleSize = $(
'<span class="sizer">').appendTo(_._title), _._titleReadOnly = $(), a.appendTo(_
._save)), _._title.appendTo(e), _._optionsMenu.appendTo(e), _._savecopy = $()
.add(_._save).add(_._copy).mousedown(function(t) {
if (t.button) return void t.preventDefault();
_._save.addClass("active")
}).mouseup(function(t) {
_._save.removeClass("active")
}), d = function() {
i.metaInfo.name.value() || _._readOnly ? _.setTitle(i.metaInfo.name.value()) : _
.hideTitle()
}, i.metaInfo.name.subscribe(d), d(), _._setChanges(!1), n.subscribe("chart_loaded",
function() {
_._setChanges(!1)
}, void 0), i.undoHistory.undoStack().onChange().subscribe(_, function() {
var t = i.undoHistory.undoStack().head();
t && t.customFlag("doesnt_affect_save") || (_._setChanges(!0), _.autosave())
}), p.registerListener("LoadChartDialogHotkey", function(t) {
return !t.ctrlKey && (!(46 !== t.which || !$(t.target).is("body")) && (_
.loadMenu(), t.preventDefault(), t.stopPropagation(), !0))
}), window.saver.chartSaved().subscribe(_, _._onChartSaved), window.saver
.chartAboutToBeSaved().subscribe(_, _._onChartAboutToBeSaved), _
}
return o.__extends(e, t), e.prototype.setTitle = function(t) {
var e, i;
this._readOnly ? (e = this._chartWidgetCollection.metaInfo.username.value(), i =
'<a href="/u/' + encodeURIComponent(e) + '">' + u.htmlEscape(e) + "</a>", t = (
t ? u.htmlEscape(t) + ": " : "") + window.t("view-only chart by {user}")
.replace("{user}", i), this._setReadOnlyTitle(t)) : this._setTitle(t)
}, e.prototype.hideTitle = function() {
this._title.hide(), this._optionsMenu.hide(), this._titleInput.text(""), this._savecopy
.removeClass("titled").addClass("last")
}, e.prototype.getTitle = function() {
return this._titleValue
}, e.prototype.cloneChart = function() {
var t, e, i, o = this;
d.enabled("save_old_chart_before_save_as") && this._chartWidgetCollection.metaInfo.id
.value() && this._saveChart(), t = "text", e = new r.SaveRenameDialog({
fields: [new r.InputField({
name: t,
label: window.t("Enter a new chart layout name") + ":",
error: window.t("Please enter chart layout name"),
maxLength: 64
})],
title: window.t("Copy Chart Layout")
}), i = this._chartWidgetCollection.metaInfo.name.value(), e.setField(t, i ? window
.t("{0} copy").format(i) : ""), e.show().then(function(e) {
d.enabled("saved_charts_count_restriction") && !window.user.is_pro && o
._savedCharts.length >= 5 || (d.enabled(
"saveload_storage_customization") ? (o._chartWidgetCollection
.metaInfo.uid.deleteValue(), o._chartWidgetCollection.metaInfo
.id.deleteValue(), o.setTitle(e[t]), o.saveChart()) : window
.open("/chart/?clone=" + o._chartWidgetCollection.metaInfo.uid
.value() + "&name=" + encodeURIComponent(e[t]), "_blank"))
})
}, e.prototype.autosave = function() {
var t = this;
d.enabled("charts_auto_save") && (this._chartWidgetCollection.onfeatures || (this
._autosaveTimer && (clearTimeout(this._autosaveTimer), this._autosaveTimer =
0), this._autosaveTimer = setTimeout(function() {
t._chartWidgetCollection.metaInfo.id.value() && t._saveChart()
}, this._autosaveInterval)))
}, e.prototype.saveChart = function(t, e, i) {
var o, n, s, l = this;
if (this._chartWidgetCollection.onfeatures) return void(e && e());
o = this.getTitle(), o ? (this._chartWidgetCollection.metaInfo.name.setValue(o), t &&
t(), this._saveChart(function() {
a.trackEvent("GUI", "Save Chart Layout"), l._goChartPage(l
._chartWidgetCollection.metaInfo.uid.value()), e && e(), l
._refreshSavedChartsList()
}, i)) : (n = "text", s = new r.SaveRenameDialog({
fields: [new r.InputField({
name: n,
label: window.t("Chart layout name") + ":",
maxLength: 64,
error: window.t("Please enter chart layout name")
})],
title: window.t("Save New Chart Layout")
}), s.show().then(function(o) {
l.setTitle(o[n]), l.saveChart(t, e, i)
}))
}, e.prototype.signInOrSaveChart = function(t, e, i) {
d.enabled("saveload_requires_authentication") ? runOrSignIn(this.saveChart.bind(this, t,
e, i), {
source: "Save chart",
sourceMeta: "Chart"
}) : this.saveChart(t, e, i)
}, e.prototype.signInOrRenameChart = function() {
d.enabled("saveload_requires_authentication") ? runOrSignIn(this._renameChart.bind(
this), {
source: "Rename chart"
}) : this._renameChart()
}, e.prototype.signInOrSaveAs = function() {
d.enabled("saveload_requires_authentication") ? runOrSignIn(this.cloneChart.bind(
this), {
source: "Clone chart"
}) : this.cloneChart()
}, e.prototype.saveChartByEnter = function(t) {
13 === t.keyCode && (this._titleInput.blur(), this.signInOrSaveChart())
}, e.prototype.isSaved = function() {
return !!this.getTitle()
}, e.prototype.loadMenu = function() {
var e = this;
return this._load.addClass("process"), t.prototype.loadMenu.call(this).catch(
function() {}).then(function() {
e._load.removeClass("process")
})
}, e.prototype._fastDelete = function(e, i) {
t.prototype._fastDelete.call(this, e, i), this._chartIsActive(e) && (d.enabled(
"saveload_storage_customization") ? (this._chartWidgetCollection
.clearChartMetaInfo(), this.setTitle("")) : location.href = "/chart/" +
window.location.search)
}, e.prototype._chartIsActive = function(t) {
return t === this._chartWidgetCollection.metaInfo.id.value()
}, e.prototype._renameChart = function() {
var t = this,
e = "text",
i = new r.SaveRenameDialog({
fields: [new r.InputField({
name: e,
label: window.t("Enter a new chart layout name") + ":",
error: window.t("Please enter chart layout name"),
maxLength: 64
})],
title: window.t("Rename Chart Layout")
});
this._editEnabled && (i.setField(e, this.getTitle()), i.show().then(function(i) {
t.setTitle(i[e]), t.saveChart()
}))
}, e.prototype._setTitle = function(t) {
this._titleInput.text(t), this._titleValue = t, this._savecopy.removeClass("last")
.addClass("titled"), t ? this._options.hideChartTitle || (this._optionsMenu.show(),
this._title.show()) : (this._optionsMenu.hide(), this._title.hide(), this
._savecopy.addClass("last").removeClass("titled")), this._setInputSize(), this
._setChanges(!0)
}, e.prototype._setReadOnlyTitle = function(t) {
this._titleReadOnly.html(t).attr("title", t.replace(/<[^>]+>/g, "")),
this._savecopy.removeClass("last").addClass("titled"), this._title.addClass("last"),
this._options.hideChartTitle || this._title.show()
}, e.prototype._setInputSize = function() {
this._titleSize.text(this._titleInput.text()), this._titleInput.width(this._titleSize
.width()), this.onTitleSizeChanged.fire()
}, e.prototype._setChanges = function(t) {
t = !!t, this._haveChanges = t, !t && this.getTitle() ? this._save.addClass(
"no-change") : this._save.removeClass("no-change")
}, e.prototype._process = function(t) {
t ? this._save.addClass("process") : this._save.removeClass("process")
}, e.prototype._onChartAboutToBeSaved = function() {
this._saving = !0, this._process(!0), this._editEnabled = !1
}, e.prototype._onChartSaved = function(t) {
this._stopProcess(), t && this._setChanges(!1)
}, e.prototype._stopProcess = function() {
this._saving = !1, this._process(!1), this._editEnabled = !0
}, e.prototype._saveChart = function(t, e) {
return this._readOnly || this._saving ? void(e && e()) : this._haveChanges ? void window
.saver.saveChartSilently(function() {
t && t()
}, !1, function() {
e && e()
}) : void(t && t())
}, e.prototype._goChartPage = function(t) {
"/chart/" === location.pathname && (location.href = "/chart/" + t)
}, e.prototype._getSavedCharts = function() {
var t = [];
return this.isSaved() && t.push({
title: this.getTitle(),
disabled: !0,
addClass: "save-load-chart-title"
}), this._readOnly || (t.push({
title: window.t("Save Chart Layout"),
action: this.signInOrSaveChart.bind(this, null, null, null)
}), this.isSaved() && (t.push({
title: window.t("Save As..."),
action: this.signInOrSaveAs.bind(this)
}), t.push({
title: window.t("Rename..."),
action: this.signInOrRenameChart.bind(this)
}))), t
}, e
}(_.LoadChartWidget), e.SaveLoadWidget = f
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 26 18" width="26" height="18"><path d="M12 0C8.4 0 5.4 2.8 5.1 6.3 2 6.1.1 9 0 11.1 0 13.9 2.2 16 4.7 16h4.9l-1-1H4.7C2.8 15 1 13.3 1 11.2 1 9 3 6.7 6 7.4 6 3 9 1 12 1s3.7 1.2 5.1 2.9c1.5.1 3.3.6 4.2 1.7 1 1.5 1.2 2.6 1.2 4.2 1.4.4 2.5 1.5 2.5 2.7-.2 1.6-1.3 2.5-2.6 2.5h-5l-1 1h5.9c2.8 0 3.7-1.9 3.7-3.5s-1-3-2.5-3.4c0-1.6-.5-2.9-1.4-4.1-.9-1.2-2.7-2-4.5-2.1C16.3 1.2 14.3 0 12 0zm-2 7v5H7l6 6 6-6h-3V7h-6zm1 1h4v5h1.6L13 16.6 9.4 13H11V8z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><path fill="currentColor" d="M10 16l4-4 4 4z"/><g fill="none" stroke="currentColor"><path d="M21.5 21.5h-14a5 5 0 1 1 .42-9.983 7.5 7.5 0 0 1 14.57 2.106 4.002 4.002 0 0 1-.99 7.877z"/><path stroke-linecap="square" stroke-width="2" d="M14 16v5"/></g></svg>'
},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c;
Object.defineProperty(e, "__esModule", {
value: !0
}), i(13), o = i(92), n = i(397), r = i(398), s = i(93), a = i(24), l = i(5), c = function() {
function t() {
var e = this;
this._savedCharts = [], window.loginStateChange.subscribe(this, function() {
e._refreshSavedChartsList()
}), s.TVXWindowEvents.on("saved-charts-change", this._otherTabUpdated.bind(this)), s
.TVXWindowEvents.on("saved-charts-change-favorites", this._favoritesUpdated.bind(this)),
this._favorites = a.getJSON(t._favoritesKey, {})
}
return t.prototype.signInOrLoadChart = function() {
l.enabled("saveload_requires_authentication") ? runOrSignIn(this.loadMenu.bind(this), {
source: "Load chart",
sourceMeta: "Chart"
}) : this.loadMenu()
}, t.prototype.loadMenu = function() {
var t, e = this;
return this._loadChartDialog || (this._loadChartDialog = new n), t = this
._loadChartDialog, t.show(this._getLoadMenuCharts(), this._favorites), this
._refreshSavedChartsList().then(function() {
t.updateChartsAndFavoritesData(e._getLoadMenuCharts(), e._favorites)
})
}, t.prototype._refreshSavedChartsList = function() {
var t, e = this;
return t = l.enabled("saveload_requires_authentication") && !window.is_authenticated ?
Promise.resolve([]) : new Promise(function(t, e) {
o.getCharts(t, e)
}), t.then(function(t) {
e._savedCharts = t, s.TVXWindowEvents.emit("saved-charts-change", JSON
.stringify(t))
})
}, t.prototype._fastDelete = function(t, e) {
this._savedCharts.splice(e, 1)
}, t.prototype._chartIsActive = function(t) {
return !1
}, t.prototype._getLoadMenuCharts = function() {
var e = this;
return this._savedCharts.map(function(i, n) {
return {
id: i.id,
url: i.url,
title: i.name,
symbol: i.short_symbol,
interval: i.interval,
toolsCount: 0,
modified: i.modified_iso,
active: e._chartIsActive.bind(e, i.id),
openAction: function() {
return o.loadChart(i)
},
deleteAction: function(t, o) {
r.deleteChart(o, i.image_url, function() {
e._fastDelete(i.id, n), s.TVXWindowEvents.emit(
"saved-charts-change", JSON.stringify(e
._savedCharts)), t.resolve()
}, t.reject.bind(t))
},
favoriteAction: function(i) {
e._favorites = i, a.setJSON(t._favoritesKey, i), s
.TVXWindowEvents.emit("saved-charts-change-favorites", JSON
.stringify(i))
}
}
})
}, t.prototype._favoritesUpdated = function(t) {
this._favorites = JSON.parse(t), this._loadChartDialog && this._loadChartDialog
.updateFavoritesData(this._favorites)
}, t.prototype._otherTabUpdated = function(t) {
this._savedCharts = JSON.parse(t), this._loadChartDialog && this._loadChartDialog
.updateChartsData(this._getLoadMenuCharts())
}, t._favoritesKey = "loadChartDialog.favorites", t
}(), e.LoadChartWidget = c
},
function(t, e) {},
function(t, e, i) {
"use strict";
(function(t, e) {
function o(e, i) {
this.options = $.extend({
throttleTimeout: 125
}, i), this._connected = !1, this._symbol_data = {}, this._subscriptions = {}, this
._delayed_subscriptions = [], this.fieldsSent = new $.Deferred, this.onConnect = new t,
this.onDisconnect = new t, this._quoteApi = new n(ChartApiInstance), this._type = e ||
"full", this.fieldsSent = new $.Deferred, this._delayUpdateFastSymbols = s(this
._updateFastSymbols, 250), this._throttledSymbolData = {}, this
._formatterValuesCache = {}, this._waitingForFormatters = {}, this
._snapshotValuesCache = {}, this._waitingForSnapshot = {}, this.connect()
}
var n, r = i(28).PriceFormatter,
s = i(321),
a = i(207),
l = i(304),
c = i(61);
n = i(775), o.prototype.destroy = function() {
this._quoteApi.destroy(), this._quoteApi = null, this._connected = !1, this.onDisconnect
.fire()
}, o.prototype.typeFields = {}, o.prototype.typeFields.simple = ["ch", "chp",
"current_session", "description", "local_description", "language", "exchange",
"fractional", "is_tradable", "lp", "minmov", "minmove2", "original_name", "pricescale",
"pro_name", "short_name", "type", "update_mode", "volume"
],
o.prototype.typeFields.simpleDetailed = [].concat(o.prototype.typeFields.simple, ["ask",
"bid", "fundamentals", "high_price", "is_tradable", "low_price", "open_price",
"prev_close_price", "rch", "rchp", "rtc", "status", "basic_eps_net_income",
"beta_1_year", "earnings_per_share_basic_ttm", "industry", "market_cap_basic",
"price_earnings_ttm", "sector", "volume", "dividends_yield"
]), o.prototype.typeFields.full = [], o.prototype.connect = function(t) {
this._quoteApi.connect(this.quoteHandler.bind(this))
}, o.prototype.quoteHandler = function(t) {
var e = t.method,
i = t.params;
switch (e) {
case "connected":
this._connected || (this._connected = !0, this.onConnected());
break;
case "quote_list_fields":
break;
case "quote_symbol_data":
this._connected && this.onSymbolData(i[0]);
break;
case "disconnected":
this._connected && (this._connected = !1, this.onDisconnect.fire())
}
}, o.prototype.onConnected = function() {
this.setFields();
var t = Object.keys(this._symbol_data);
t.length && this._quoteApi.quoteAddSymbols(t, {
forcePermission: !0
}), this._delayed_subscriptions.forEach(function(t) {
this.subscribe.apply(this, t)
}, this), this._delayed_subscriptions = [], this.onConnect.fire()
}, o.prototype.setFields = function() {
var t = o.prototype.typeFields[this._type];
t && t.length && this._quoteApi.quoteSetFields(t), this.fieldsSent.resolve()
}, o.prototype.onSymbolData = function(t) {
var e = t.symbolname,
i = this._throttledSymbolData[e];
i || (i = this._throttledSymbolData[e] = {
fnDispatch: a(this.dipatchSymbolData.bind(this), this.options
.throttleTimeout)
}), i.cache ? $.extend(!0, i.cache, t) : i.cache = t, i.fnDispatch(e)
}, o.prototype._parseUpdateMode = function(t) {
var e = t.update_mode;
e && (e = e.match(/(delayed_streaming){1}(?:_([\d]+))?/)) && e[1] && (e[2] && (t
.update_mode_seconds = +e[2]), t.update_mode = e[1])
}, o.prototype.dipatchSymbolData = function(t) {
var e, i, o = this._symbol_data[t],
n = this._throttledSymbolData[t].cache;
if (delete this._throttledSymbolData[t].cache, this._symbol_data[t]) {
$.extend(!0, o, n), o.values && this._parseUpdateMode(o.values);
for (e in this._subscriptions) i = this._subscriptions[e], i[t] && i[t].forEach(
function(t) {
t(o, n)
})
}
}, o.prototype.subscribe = function(t, e, i) {
var o, n;
if (!this._connected) return void this._delayed_subscriptions.push(arguments);
this._subscriptions[t] = this._subscriptions[t] || {}, o = this._subscriptions[t],
e = [].concat(e), n = [], e.forEach(function(t) {
this._symbol_data[t] ? o && o[t] || this._symbol_data[t].subscribers_count++
:
(this._symbol_data[t] = {
subscribers_count: 1
}, n.push(t)), o[t] = o[t] || [], o[t].push(i), o[t].fast = !0, this
._symbol_data[t] && this._symbol_data[t].values && i(this._symbol_data[
t], this._symbol_data[t])
}, this), n.length && (this._quoteApi.quoteAddSymbols(n, {
forcePermission: !0
}), this._delayUpdateFastSymbols())
}, o.prototype.unsubscribe = function(t, e, i) {
var o, n = this._subscriptions[t];
n && (n[e] && i ? (o = n[e].indexOf(i), ~o && n[e].splice(o, 1), n[e].length ||
delete n[e]) : delete n[e]), n && 0 === Object.keys(n).length && delete this
._subscriptions[t], this._symbol_data.hasOwnProperty(e) && (n && !n[e] && this
._symbol_data[e].subscribers_count--, this._symbol_data[e].subscribers_count ||
(delete this._symbol_data[e], this._quoteApi.quoteRemoveSymbols([e]),
this._delayUpdateFastSymbols()))
}, o.prototype.setFastSymbols = function(t, e) {
var i, o;
if (this._subscriptions[t]) {
i = this._subscriptions[t];
for (o in i) i[o].fast = -1 !== e.indexOf(o)
}
this._delayUpdateFastSymbols()
}, o.prototype._updateFastSymbols = function() {
if (this._connected) {
var t = this._fastSymbols();
0 === t.length ? this._quoteApi.quoteHibernateAll() : this._quoteApi
.quoteFastSymbols(t)
}
}, o.prototype._delayUpdateFastSymbols = o.prototype._updateFastSymbols, o.prototype
._fastSymbols = function() {
var t, e, i, o = [];
for (t in this._subscriptions) {
e = this._subscriptions[t];
for (i in e) e[i].fast && o.push(i)
}
return o = l(o)
}, o.prototype.formatter = function(t) {
function e(t) {
return new r(t.pricescale, t.minmov, t.fractional, t.minmove2)
}
function i(t) {
return t && null != t.pricescale && null != t.minmov
}
var o, n = this;
return this._waitingForFormatters[t] ? this._waitingForFormatters[t] : (o = new Promise(
function(o, r) {
if (n._formatterValuesCache[t]) o(e(n._formatterValuesCache[t]));
else {
var s = c.guid();
n.subscribe(s, [t], function(a) {
a.error && (n._waitingForFormatters[t] = null, r(a
.error)), i(a.values) && (n
._waitingForFormatters[t] = null, n
._formatterValuesCache[t] = a.values, o(e(a
.values)), n.unsubscribe(s, t))
})
}
}), this._waitingForFormatters[t] = o, o)
}, o.prototype.snapshot = function(t) {
var e, i = this;
return this._waitingForSnapshot[t] ? this._waitingForSnapshot[t] : (e = new Promise(
function(e, o) {
if (i._snapshotValuesCache[t]) e(i._snapshotValuesCache[t]);
else {
var n = c.guid();
i.subscribe(n, [t], function(r) {
r.error && (i._waitingForSnapshot[t] = null, o(r
.error));
var s = r.values;
s && s.minmov && s.pricescale && s.description && (i
._waitingForSnapshot[t] = null, i
._snapshotValuesCache[t] = s, e(s), i
.unsubscribe(n, t))
})
}
}), this._waitingForSnapshot[t] = e, e)
}, TradingView.QuoteSessionMultiplexer = o, void 0 !== e && e && e.exports && (e.exports =
o)
}).call(e, i(10), i(42)(t))
},
function(t, e, i) {
"use strict";
(function(t) {
function e(t) {
this._chartApi = t, this._sessionid = "qs_" + o(), this._sessionstarted = !1
}
var o = i(61).randomHash;
e.prototype.destroy = function() {
this._sessionstarted && (this._chartApi.quoteDeleteSession(this._sessionid), this
._sessionid = null, this._sessionstarted = !1)
}, e.prototype.connected = function() {
return this._chartApi.connected()
}, e.prototype.connect = function(t) {
this._globalHandler = t, this._chartApi.createSession(this._sessionid, this), this
._chartApi.connect()
}, e.prototype.disconnect = function() {
this._chartApi.disconnect()
}, e.prototype.quoteAddSymbols = function(t, e) {
t = [].concat(t), e && e.forcePermission && (t = t.concat({
flags: ["force_permission"]
})), this._chartApi.quoteAddSymbols(this._sessionid, t)
}, e.prototype.quoteRemoveSymbols = function(t) {
this._chartApi.quoteRemoveSymbols(this._sessionid, t)
}, e.prototype.quoteFastSymbols = function(t) {
this._chartApi.quoteFastSymbols(this._sessionid, t)
}, e.prototype.quoteSetFields = function(t) {
this._chartApi.quoteSetFields(this._sessionid, t)
}, e.prototype.onMessage = function(t) {
switch (t.method) {
case "connected":
this._sessionstarted || (this._chartApi.quoteCreateSession(this._sessionid),
this._sessionstarted = !0);
break;
case "disconnected":
this._sessionstarted = !1
}
this._globalHandler(t)
},
e.prototype.quoteHibernateAll = function(t) {
this._chartApi.quoteHibernateAll(this._sessionid)
}, TradingView.QuoteSession = e, void 0 !== t && t && t.exports && (t.exports = e)
}).call(e, i(42)(t))
},
function(t, e, i) {
"use strict";
var o, n;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(17), n = function() {
function t(t) {
var e, i, n, r, s = this;
this._document = t, this.isFullscreen = new o, (e = function() {
var t, e, i = ["fullscreenElement", "webkitFullscreenElement",
"mozFullscreenElement", "mozFullScreenElement", "msFullscreenElement"
];
for (t = 0; t < i.length; t++)
if ((e = i[t]) in s._document) {
s.isFullscreen.setValue(!!s._document[e]);
break
}
})();
for (i = 0, n = ["fullscreenchange", "webkitfullscreenchange", "mozfullscreenchange",
"MSFullscreenChange"
]; i < n.length; i++) r = n[i], t.addEventListener(r, e, !1)
}
return t.prototype.enter = function() {
var t, e, i, o = this._document.documentElement;
for (t = 0, e = ["requestFullscreen", "mozRequestFullScreen", "webkitRequestFullscreen",
"msRequestFullscreen"
]; t < e.length; t++)
if (i = e[t], "function" == typeof o[i]) {
o[i]();
break
} this.isFullscreen.setValue(!0)
}, t.prototype.exit = function() {
var t, e, i, o = this._document;
for (t = 0, e = ["exitFullscreen", "mozCancelFullScreen", "mozExitFullscreen",
"webkitExitFullscreen", "msExitFullscreen"
]; t < e.length; t++)
if (i = e[t], "function" == typeof o[i]) {
o[i]();
break
} this.isFullscreen.setValue(!1)
}, t
}(), e.FullscreenApi = n
},
function(t, e, i) {
"use strict";
var o, n;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(17), n = function() {
function t(t) {
var e, i, n, r, s, a, l = this;
this.isVisible = new o(!0), i = null, n = function(o) {
var n = o ? o + "Hidden" : "hidden";
if (n in t) return e = o + "visibilitychange", i = function() {
l.isVisible.setValue(!t[n])
}, i(), t.addEventListener(e, i, !1), "break"
};
for (r = 0, s = ["", "moz", "ms", "webkit"]; r < s.length && (a = s[r], "break" !== n(
a)); r++);
this.destroy = function() {
i && (t.removeEventListener(e, i, !1), i = null)
}
}
return t
}(), e.VisibilityApi = n
},
function(t, e) {},
function(t, e, i) {
"use strict";
function o(t) {
var e = l.enabled("side_toolbar_in_fullscreen_mode");
return "center" === t || "left" === t && e
}
var n, r, s, a, l, c;
Object.defineProperty(e, "__esModule", {
value: !0
}), i(13), n = i(17), r = i(215), s = i(780), a = i(781), l = i(5), c = function() {
function t(t) {
var e = this;
if (this._$body = $(t.body.value()), 0 === this._$body.size()) throw Error(
"bridge.body.value() must be an element or not empty jQuery object");
this._availableAreas = ["left", "dompanel", "right", "top", "footer", "bottom", "center"],
this._areas = {}, this._bridge = t, this._width = t.width, this._height = t.height, this
._width.subscribe(function() {
return e.recalculate()
}), this._height.subscribe(function() {
return e.recalculate()
}), this._bridge.visible.subscribe(function() {
return e._updateVisibility()
}), this._bridge.fullscreen.subscribe(function() {
return e._onParentFullscreenChange()
}), this.recalculate()
}
return t.prototype.allocate = function(t) {
var e, i, o = this,
l = t && t.areaName;
if (-1 === this._availableAreas.indexOf(l)) throw Error("unknown options.areaName");
return this.free(l), e = this._createDOM(l), i = {
canNegotiate: {
width: "left" === l || "right" === l || "dompanel" === l,
height: "top" === l || "bottom" === l || "footer" === l
},
negotiations: {
width: [],
height: []
},
remove: function() {
for (var t in o._areas) o._areas[t] === i && o.free(t)
},
negotiateWidth: function(t) {
if (i.canNegotiate.width) {
var e = s.processNegotiation(t);
s.negotiationsAreEqual(i.negotiations.width, e) || (i.negotiations
.width = e, o.recalculate())
}
},
negotiateHeight: function(t) {
if (i.canNegotiate.height) {
var e = s.processNegotiation(t);
s.negotiationsAreEqual(i.negotiations.height, e) || (i.negotiations
.height = e, o.recalculate())
}
},
requestFullscreen: function() {
o._fullscreenArea || ("right" !== l && "center" !== l || (o
._fullscreenArea = l), "center" === l && o._bridge
.requestFullscreen(), o._updateFullscreen())
},
exitFullscreen: function() {
l === o._fullscreenArea && (o._fullscreenArea = void 0, "center" ===
l && o._bridge.exitFullscreen(), o._updateFullscreen())
},
detach: function(t) {
a.detachToPopup(i.rdState, Object.assign({}, t, a.screenBox(i.body
.value())))
},
width: new n,
height: new n,
availWidth: new n,
availHeight: new n,
alive: new n(!0),
body: new n(e),
detachable: new n(!0),
visible: new n(!0),
fullscreen: new n(!0),
rdState: new r.ResizerDetacherState
}, i.rdState.pushOwner(i), this._areas[l] = i, i.rdState.owner.subscribe(function(
t) {
var e, n, r, s = i.body.value();
if (t !== i) s.empty().detach();
else {
for (e = null, n = o._availableAreas.indexOf(l); n--;)
if (r = o._availableAreas[n], o._affectsLayout(r)) {
e = o._areas[r].body.value();
break
} e ? s.insertAfter(e) : s.appendTo(o._$body)
}
o.recalculate()
}, {
callWithLast: !0
}), i.rdState.bridge()
}, t.prototype.free = function(t) {
var e = this._areas[t];
e && (this._areas[t] = void 0, $(e.body.value()).remove(), e.alive.setValue(!1))
}, t.prototype.recalculate = function() {
var t, e, i, o, n, r, a, l, c, h, u, d, p, _ = {};
for (this._recalcSingleRunToken = _, t = {
width: this._width.value(),
height: this._height.value()
}, e = 0; e < this._availableAreas.length; e++)
if (i = this._availableAreas[e], (o = this._areas[i]) && this._affectsLayout(i)) {
for ("center" === i ? (n = 0, this._affectsLayout("left") && (n += this._areas
.left.width.value()), r = 0, this._affectsLayout("top") && (r +=
this._areas.top.height.value()), o.body.value().css({
left: n,
top: r
})) : "top" !== i && "bottom" !== i && "footer" !== i || (n = 0, this
._affectsLayout("left") && (n += this._areas.left.width.value()), o.body
.value().css({
left: n
})), a = void 0, a = o.canNegotiate.width && !o.canNegotiate.height ? [
"height", "width"
] : ["width", "height"], l = 0; l < 2; l++) {
if (c = a[l], h = void 0, u = t[c], this._fullscreenArea === i) h = u;
else {
if ("bottom" === i && "height" === c && (u -= 5), "right" !== i &&
"dompanel" !== i || "width" !== c || (u -= 300), "width" === c ? o
.availWidth.setValue(u) : "height" === c && o.availHeight.setValue(
u), _ !== this._recalcSingleRunToken) return;
o.canNegotiate[c] ? (h = s.determineSize(u, o.negotiations[c]), t[c] -=
h) : h = u
}
if (o.body.value().css(c, h), o[c].setValue(h), _ !== this
._recalcSingleRunToken) return
}
o.body.value().toggleClass("js-hidden", !1)
} else o && o.body.value().toggleClass("js-hidden", !0);
this._affectsLayout("footer") && (o = this._areas.footer, d = this._height.value() - o
.height.value(), this._affectsLayout("bottom") && (d -= this._areas.bottom
.height.value()), o.body.value().css({
top: d
})), this._affectsLayout("dompanel") && (o = this._areas.dompanel, p = 0, this
._affectsLayout("right") && (p += this._areas.right.width.value()), o.body
.value().css({
right: p
}))
},
t.prototype._affectsLayout = function(t) {
var e, i = this._areas[t];
return !!i && (i.rdState.owner.value() === i && (this._fullscreenArea && this
._fullscreenArea !== t ? o(t) : !((this._width.value() <= 567 || this
._height.value() <= 450) && (e = ["center", "top"], l.enabled(
"keep_left_toolbar_visible_on_small_screens") && e.push("left"),
!e.includes(t)))))
}, t.prototype._updateVisibility = function() {
var t, e, i, o = this._bridge.visible.value();
for (t = 0; t < this._availableAreas.length; t++) e = this._availableAreas[t], (i = this
._areas[e]) && (o && this._affectsLayout(e) ? i.visible.setValue(!0) : i.visible
.setValue(!1))
}, t.prototype._onParentFullscreenChange = function() {
this._bridge.fullscreen.value() || (this._fullscreenArea = void 0, this
._updateFullscreen())
}, t.prototype._updateFullscreen = function() {
var t, e, i, n = void 0 !== this._fullscreenArea;
for (t = 0; t < this._availableAreas.length; t++) e = this._availableAreas[t], (i = this
._areas[e]) && (e !== this._fullscreenArea ? i.body.value().toggleClass(
"js-hidden", n && !o(e)) : i.fullscreen.setValue(!0));
this._updateVisibility(), this.recalculate()
}, t.prototype._createDOM = function(t) {
var e = $("<div>").addClass("layout__area--" + t).css("position", "absolute");
return "bottom" === t ? e.css("bottom", 0) : e.css("top", 0), "right" === t ||
"dompanel" === t ? e.css("right", 0) : e.css("left", 0), e
}, t
}(), e.ChartPage = c
},
function(t, e, i) {
"use strict";
function o(t, e) {
var i, o, n, r, s, a, l = 0;
for (i = 0, o = e; i < o.length && (n = o[i], r = n.min, s = n.max, t < r || s < r || (a = Math.min(
t, s), l = Math.max(l, a), t !== l)); i++);
return l
}
function n(t) {
var e, i, o, n, r, s = [];
if (void 0 === t) return [];
for (Array.isArray(t) || (t = [t]), e = 0, i = t; e < i.length; e++) o = i[e], n = void 0, r =
void 0, isFinite(o) ? n = r = +o : (n = +o.min, r = +o.max), (n < 0 || isNaN(n)) && (n = 0),
isNaN(r) && (r = 1 / 0), n <= r && r > 0 && s.push({
min: n,
max: r
});
return s.sort(function(t, e) {
return t.min - e.min || t.max - e.max
}), s
}
function r(t, e) {
if (t.length !== e.length) return !1;
for (var i = t.length; i--;) {
if (t[i].min !== e[i].min) return !1;
if (t[i].max !== e[i].max) return !1
}
return !0
}
Object.defineProperty(e, "__esModule", {
value: !0
}), e.determineSize = o, e.processNegotiation = n, e.negotiationsAreEqual = r
},
function(t, e, i) {
"use strict";
function o(t, e) {
var i, o = Object.assign({}, e),
n = t.bridge().body.value();
return n && (o.useStylesFrom = n.prop("ownerDocument")), !!(i = l(o)) && (t.pushOwner(i.allocate()),
!0)
}
function n(t) {
var e, i, o = $(t),
n = o.offset(),
r = {
left: +n.left,
top: +n.top,
width: o.width(),
height: o.height()
},
s = o.prop("ownerDocument");
return s && (e = s.defaultView) ? (i = e.innerWidth / $(s.documentElement).width(), isFinite(i) && (
r.left *= i, r.top *= i, r.width *= i, r.height *= i), r.left += e.screenLeft || e
.screenX || 0, r.top += e.screenTop || e.screenY || 0, r) : r
}
var r, s, a, l;
Object.defineProperty(e, "__esModule", {
value: !0
}), r = i(322), e.detachToPopup = o, e.screenBox = n, s = function(t, e) {
var i, o, n, r, s, a, l = t.querySelectorAll('style, link[rel~="stylesheet"]'),
c = e.createDocumentFragment();
for (i = 0; i < l.length; i++) {
for (o = l[i], n = e.createElement(o.tagName), r = 0; r < o.attributes.length; r++) s = o
.attributes[r], n.setAttribute(s.nodeName, s.nodeValue || "");
a = o.textContent, a && (n.textContent = a), c.appendChild(n)
}
return c
}, a = function(t, e, i) {
var o = function() {
t && t.removeEventListener("unload", o, !1),
e && (e.removeEventListener("unload", o, !1), e.close()), i && i.free()
};
t.addEventListener("unload", o, !1), e.addEventListener("unload", o, !1)
}, l = function(t) {
var e, i, o, n, l, c, h, u, d;
for (void 0 === t && (t = {}), e = "menubar=no,toolbar=no,location=no,personalbar=no,status=no",
i = 0, o = ["top", "left", "width", "height"]; i < o.length; i++) n = o[i], l = +t[n],
isFinite(l) && l >= 0 && (e += "," + n + "=" + l);
if (!(c = window.open("", t.name || "_blank", e)) || c.closed) return null;
h = null;
try {
h = c.document, h.close()
} catch (t) {
return null
}
return h.open(), h.write(
'<!DOCTYPE html><html><head><meta http-equiv="X-UA-Compatible" content="IE=Edge" /></head><body></body></html>'
), h.close(), null != t.title && (h.title = t.title + ""), t.useStylesFrom && (h.head
.appendChild(s(t.useStylesFrom, h)), u = h.createElement("style"), u.textContent =
"html, body {min-width: 0 !important; max-width: none !important}", h.head.appendChild(
u)), d = new r.Root(c), a(window, c, d), d
}
},
function(t, e, i) {
"use strict";
var o = i(5);
window.onload = function() {
function t() {
var t = 0;
return JSON.parse(urlParams.logo).image && (t = "C", o.enabled("link_to_tradingview") || (
t = "D")), t
}
function e() {
try {
return /^(192|172|10)\.[0-9][0-9][0-9]\.[0-9][0-9][0-9]\.[0-9][0-9][0-9]/.test(location
.hostname) || /^.*((?:\.local)|localhost)$/.test(location.hostname)
} catch (t) {
return !1
}
}
location.hostname.indexOf(".") >= 0 && !e() && setTimeout(function() {
try {
var e = t();
window.ga && 0 !== e && window.ga("send", "event", "s", e)
} catch (t) {}
}, 3e4)
}
},
function(t, e, i) {
"use strict";
(function(e) {
function o(t) {
function i(t, e) {
var i, o, r = [],
s = n[Kt].count;
for (i = 0; i < s; i++) r.push(Ut[i].chartWidget.state(t, e));
return o = {
layout: Kt,
charts: r
}, Jt.value() && (o.symbolLock = 1), Qt.value() && (o.intervalLock = 1), te
.value() && (o.trackTimeLock = 1), l.hideAllDrawings().value() && (o
.hideAllDrawings = !
0), o
}
function o(t) {
var e, i = $.Deferred(),
o = [],
r = n[Kt].count;
for (e = 0; e < r; e++) o.push(Ut[e].chartWidget.asyncState(t));
return $.when.apply($, o).then(function() {
var t, e = {
charts: []
};
for (t = 0; t < arguments.length; t++) e.charts.push(arguments[t]);
i.resolve(e)
}), i
}
function S() {
if (Yt && !St)
for (var t = 0; t < Yt.count; t++) w(t);
else w(Gt);
Lt.trigger("chart-rect-update", Lt[0].getBoundingClientRect())
}
function w(t) {
var e, i, o = Ut[t];
o && (e = St ? n.s.sizer(0, {
width: yt.value(),
height: bt.value()
}, Ft, Nt) : Yt.sizer(t, {
width: yt.value(),
height: bt.value()
}, Ft, Nt), i = {
width: Math.max(Math.round(e.width || 0) - 2 * Wt, 0),
height: Math.max(Math.round(e.height || 0) - 2 * Wt, 0),
top: Math.max(Math.round(e.top || 0), 0),
left: Math.max(Math.round(e.left || 0), 0)
}, o.metrics = i, o.body.value().css(i), o.width.setValue(i.width), o.height
.setValue(i.height))
}
function T() {
for (var t = 0; t < Ut.length; t++) Ut[t].chartWidget.resizeSeriesControlUI()
}
function C() {
for (var t = 0; t < Ut.length; t++) Ut[t].chartWidget.tickSeriesControlClock()
}
function x() {
for (var t = 0; t < Ut.length; t++)
if (!Ut[t].chartWidget || !Ut[t].chartWidget.model()) return !1;
return !0
}
function P(e) {
function i() {
a.visible.setValue(!a.hiddenInLayout.value() && t.resizerBridge.visible.value())
}
var o, n, s, a;
return e = Object.assign({
chartWidgetCollection: zt,
isActive: 0 === Ut.length,
barsMarksContainersFactory: L,
undoHistory: Pt
}, e || {}),
n = $(document.createElement("div")).addClass("chart-container").appendTo(Lt).css({
position: "absolute",
overflow: "hidden"
}), n.on("mousedown touchstart", function() {
x() && $t.setValue(o)
}), s = Ut.length, a = {
alive: new _(!0),
body: new _(n),
width: new _,
height: new _,
hiddenInLayout: new _(!1),
visible: new _,
rdState: new f
}, a.rdState.pushOwner(a), Ut.push(a), w(s), a.hiddenInLayout.subscribe(i), t
.resizerBridge.visible.subscribe(i), i(), Object.assign(e, a.rdState.bridge()), a
.chartWidget = o = new r.ChartWidget(e), zt.firstWidgetInitialized || o
.chartWidgetInitialized.subscribe(null, function() {
zt.firstWidgetInitialized = !0, T()
}, !0), (1 === Ut.length || d.enabled("show_logo_on_all_charts")) && o
.createBranding(), e.containsData ? o.finishInitWithoutConnect() : o.connect(), k(),
A(), kt.fire(o), o
}
function L(t) {
var e, i, o = [];
return d.enabled("charting_library_base") && (e = new v(t), o.push(e), i = new y(t), o
.push(i)), o
}
function I(t, e) {
var i, o, r, s;
t in n || (t = "s"), i = n[t].count, h.emit("layout_about_to_be_changed", t), Kt = t,
St = e, wt.setValue(St), Yt = n[t];
for (o = 0; o < i || o < Ut.length; o++) r = e ? Gt === o : o < i, r ? (Ut[o] ? (Lt
.append(Ut[o].body.value()), Ut[o].hiddenInLayout.setValue(!1), (s = Zt
.shift()) && (Xt = !0, Ut[o].chartWidget.loadContent(s.content), Xt = !
1)) : P($.extend({}, Tt, Zt.shift() || ($t.value() ? {
content: $t.value().state()
} : null) || {}, 0 === o || Jt.value() ? {} : {
defSymbol: null
})), Ut[o].body.value().toggleClass("multiple", i > 1), w(o)) : Ut[o] && (Ut[o]
.hiddenInLayout.setValue(!0), Ut[o].body.value().detach());
return k(), h.emit("layout_changed"), !0
}
function k() {
var t, e = Math.min(Yt.count, Ut.length) - 1;
if (e < 0) return void $t.deleteValue();
t = Gt, t < 0 && (t = 0), t > e && (t = e), $t.setValue(Ut[t].chartWidget)
}
function A() {
var t, e;
for (t = Ut.length; t--;) e = t === Gt, Ut[t].body.value().toggleClass("active", e)
.toggleClass("inactive", !e)
}
function M() {
return Ut.filter(function(t) {
return !t.hiddenInLayout.value()
}).sort(function(t, e) {
return t.metrics.top - e.metrics.top || t.metrics.left - e.metrics.left
})
}
function E() {
var t, e, i, o = vt.value();
"s" !== o && (t = n[o].count, wt.value() || (jt = M()), e = qt + 1, i = jt[e], !i || e >
t ? (i = jt[0], qt = 0) : qt = e, $t.setValue(i.chartWidget), wt.value() && I(o,
!0))
}
function D(t) {
var e = $t.value();
return !!e && e.trySetChartStyle(t)
}
function V(t) {
var e, i, o, n;
Et !== t && (Et && (Et.modelCreated().unsubscribe(null, O), (e = Et.model()) && (i = e
.mainSeries().properties(), i.style.unsubscribe(null, R), o = e.model(),
o.onSelectedSourceChanged().unsubscribe(null, B), Et = null)), t && (n = t
.model(), n ? O(n) : t.modelCreated().subscribe(null, O), Et = t))
}
function O(t) {
var e, i = t.mainSeries().properties();
i.style.subscribe(null, R), R(i.style), e = t.model(), e.onSelectedSourceChanged()
.subscribe(null, B), B(t.selectedSource())
}
function R(t) {
At.setValue(t.value())
}
function B(t) {
Mt.setValue(t)
}
function z(t) {
var e, i, o, n;
if (t !== Jt.value()) {
if (Pt.beginUndoMacro("Symbol Lock"), t)
for (e = $t.value(), i = e.getSymbol(), o = 0; o < Ut.length; o++)(n = Ut[o]
.chartWidget) !== e && n.getSymbol() !== i && n.setSymbol(i);
Pt.setWatchedValue(Jt, t, "Symbol Lock"), Pt.endUndoMacro()
}
}
function F(t) {
var e, i, o, n;
if (t !== Qt.value()) {
if (Pt.beginUndoMacro("Interval Lock"), t)
for (e = $t.value(), i = e.getResolution(),
o = 0; o < Ut.length; o++)(n = Ut[o].chartWidget) !== e && n
.getResolution() !== i && n.setResolution(i);
Pt.setWatchedValue(Qt, t, "Resolution Lock"), Pt.endUndoMacro()
}
}
function N(t) {
te.value() !== t && Pt.setWatchedValue(te, t, "Track Time")
}
function W(t) {
return vt.value() !== t && (Pt.pushUndoCommand(new p(zt, t)), !0)
}
function H(t) {
Jt.value() ? U(t) : $t.value().setSymbol(t)
}
function U(t) {
var e, i, o = !1;
for (e = 0; e < Ut.length; e++) i = Ut[e].chartWidget, (i.model().mainSeries()
.properties().symbol.value() !== t || d.enabled("same_data_requery")) && (o || (
Pt.beginUndoMacro("Change Symbol"), o = !0), i.setSymbol(t));
o && Pt.endUndoMacro()
}
function j(t) {
var e, i, o;
if (!Xt)
if (Qt.value()) {
for (e = !1, i = 0; i < Ut.length; i++) o = Ut[i].chartWidget, o.model()
.mainSeries().properties().interval.value() !== t && (e || (Pt
.beginUndoMacro("Change Resolution"), e = !0), o.setResolution(t));
e && Pt.endUndoMacro()
} else $t.value().setResolution(t)
}
function q(t) {
var e, i, o;
if (t && t.onlyActiveChart || St) return {
layout: "s",
hidpiRatio: window.hidpiCanvasRatio || 1,
charts: [$t.value().images()]
};
for (e = [], i = Yt.count, o = 0; o < Ut.length && o < i; o++) e.push(Ut[o].chartWidget
.images());
return {
layout: Kt,
hidpiRatio: window.hidpiCanvasRatio || 1,
charts: e
}
}
function G() {
var t, e = [];
for (t = 0; t < Ut.length && t < Yt.count; t++) e = e.concat(Ut[t].chartWidget.tags());
return e = $.unique(e), e = $.map(e, function(t) {
return t.toLowerCase().replace(/\W+/g, "-").replace(/-+/g, "-").replace(
/^-|-$/g, "")
})
}
function Y(t, e, i, o) {
var n, r, s, a;
if (i || oe && !St)
for (n = Yt.count, r = 0; r < Ut.length && r < n; r++)(s = Ut[r].chartWidget) !==
e && (a = s.model()) && a.model().setExternalPosition(t, o)
}
function K(t, e) {
var i, o, n, r;
if (te.value()) {
for (i = Yt.count, Pt.beginUndoMacro("Sync Time"), o = 0; o < Ut.length && o <
i; o++)
if (n = Ut[o].chartWidget, r = n.model()) {
if (r.model() === e) continue;
r.gotoTime(t, {
centerIfVisible: !1,
model: e
})
} Pt.endUndoMacro()
}
}
function Z() {
dt(!1), Ut.forEach(function(t) {
void 0 !== t.timingsMeter && t.timingsMeter.destroy(), t.chartWidget
.destroy()
}), t.resizerBridge.remove(), Ot && clearInterval(Ot), $(window).off("resize", S),
$(document).off("onUpdate", S), It.resolve()
}
function X() {
return It.promise()
}
function J() {
return kt
}
function Q() {
xt.id.setValue(void 0), xt.uid.setValue(void 0), xt.name.setValue(void 0)
}
function tt() {
var e = {
snapshotUrl: t.snapshotUrl
};
(d.enabled("show_dialog_on_snapshot_ready") ? u.getImageOfChart : u
.getImageOfChartSilently)(zt, e, function(t) {
h.emit("onScreenshotReady", t)
})
}
function et() {
for (var t = n[Kt].count; t < Ut.length; t++) Ut[t].chartWidget.destroy();
Ut.splice(n[Kt].count)
}
function it(t) {
for (var e = 0; e < Ut.length; e++) Ut[e].chartWidget.applyOverrides(t)
}
function ot(t) {
for (var e = 0; e < Ut.length; e++) Ut[e].chartWidget.applyStudiesOverrides(t)
}
function nt() {
t.resizerBridge.requestFullscreen()
}
function rt() {
t.resizerBridge.exitFullscreen()
}
function st() {
return Lt
}
function at(t, e) {
(e ? [{
chartWidget: $t.value()
}] : Ut).forEach(function(e) {
var i = e.chartWidget.model().mainSeries().properties(),
o = e.chartWidget.model().model().properties().paneProperties,
n = i.extendedHours.value(),
r = o.background.value();
e.chartWidget._model.model().restoreTheme(t),
i.extendedHours.value() !== n && i.extendedHours.listeners().fire(i
.extendedHours), o.background.value() !== r && o.background
.listeners().fire(o.background)
})
}
function lt(t, e) {
g.bind(t, function(t) {
t.preventDefault(), e()
})
}
function ct() {
for (var t in Vt) lt(t, Vt[t])
}
function ht() {
for (var t in Vt) g.unbind(t)
}
function ut(t) {
Dt !== t && (Dt = t, t ? ct() : ht())
}
function dt(t) {
if (Tt.onWidget || ut(t), 0 !== Ut.length) {
for (var e = Ut.length; e--;) Ut[e].chartWidget.setActive(!1);
Ut[Gt].chartWidget.setActive(t)
}
}
function pt(t) {
return d.enabled("charting_library_base") ? t : "s" === t || d.enabled(ProductFeatures
.MULTIPLE_CHARTS) && d.getConfig(ProductFeatures.MULTIPLE_CHARTS).layout
.indexOf(t) >= 0 || Tt.containsData || Ht ? t : "s"
}
function _t(t) {
if (Zt = [], t) {
t.charts || (t = {
layout: "s",
charts: [t]
}), Kt = pt(t.layout || "s");
for (var e = 0; e < t.charts.length; e++) Zt.push({
content: t.charts[e]
});
t.symbolLock && Jt.setValue(!0), t.intervalLock && Qt.setValue(!0), t
.trackTimeLock && te.setValue(!0), t.hideAllDrawings && ee.setValue(!0)
}
vt.setValue(Kt), I(Kt, St) && (l.init(), l.hideAllDrawings().setValue(ee.value()), Zt
.splice(0, Zt.length))
}
function ft() {
0 === --Rt && h.emitOnce("onChartReady")
}
function mt() {
return Promise.all(Ut.map(function(t) {
return m(t.chartWidget.modelCreated())
}))
}
function gt() {
return Promise.all(Ut.map(function(t) {
return m(t.chartWidget.model().mainSeries().onSymbolResolved())
}))
}
var vt, yt, bt, St, wt, Tt, Ct, xt, Pt, Lt, It, kt, At, Mt, Et, Dt, Vt, Ot, Rt, Bt, zt =
this,
Ft = 2,
Nt = 0,
Wt = 1,
$t = new _,
Ht = !1,
Ut = [],
jt = [],
qt = 0,
Gt = 0,
Yt = null,
Kt = "s",
Zt = [],
Xt = !1,
Jt = new _(!1),
Qt = new _(!1),
te = new _(!1),
ee = new _(!1),
ie = new _(TVSettings.getBool("chart.syncCrosshair", !0)),
oe = ie.value();
ie.subscribe(function(t) {
t = !!t, oe = t, TVSettings.setValue("chart.syncCrosshair", t)
}), vt = new _(Kt), yt = t.resizerBridge.width, bt = t.resizerBridge.height, St = !1,
wt = new _(St), "padding" in t && (Ft = t.padding), "edge" in t && (Nt = t.edge), Tt = t
.widgetOptions || {}, Tt.readOnly && (Ht = !0), Ct = t.metaInfo || {}, xt = {
id: new _(Ct.id),
name: new _(Ct.name),
description: new _(Ct.description),
username: new _(Ct.username),
uid: new _(Ct.uid)
}, Pt = a(), Lt = $(t.resizerBridge.body.value()).eq(0), It = $.Deferred(), kt = new e,
yt.subscribe(S), bt.subscribe(S), this.updateLayout = S, At = new _, Mt = new _, Et =
null, $t.subscribe(function(t) {
var e, i;
if (t) {
for (i = Ut.length; i--;)
if (Ut[i].chartWidget === t) {
e = i;
break
} if (!isFinite(e)) throw Error(
"Cannot make detached ChartWidget active");
if (Gt !== e) {
for (Gt = e, A(), jt.length && (qt = jt.indexOf(Ut[Gt])), i = Ut
.length; i--;) Ut[i].chartWidget.setActive(!1);
t.setActive(!0)
}
V(t)
}
}, {
callWithLast: !0
}), Dt = !1, Vt = {
"Alt+s": tt,
Tab: E
}, ut(!0), Object.assign(this, {
createChartWidget: P,
getAll: function() {
return Ut.map(function(t) {
return t.chartWidget
})
},
destroy: Z,
layout: vt,
maximizeCurrentChart: wt,
activeChartWidget: $t,
activeChartStyle: At.readonly(),
trySetChartStyleToActiveWidget: D,
selectedSource: Mt.readonly(),
metaInfo: xt,
state: i,
asyncState: o,
readOnly: function() {
return Ht
},
lock: {
symbol: Jt,
setSymbolLockWithUndo: z,
interval: Qt,
setIntervalLockWithUndo: F,
crosshair: ie,
trackTime: te,
setTrackTimeWithUndo: N
},
setSymbol: H,
setResolution: j,
updateLayout: S,
setChartLayoutWithUndo: W,
resizeWidgetsUI: T,
images: q,
tags: G,
syncCrosshair: Y,
syncScroll: K,
setSymbolAll: U,
clearChartMetaInfo: Q,
onfeatures: t.onfeatures,
takeScreenshot: tt,
loadContent: _t,
purgeUnusedWidgets: et,
applyOverrides: it,
applyStudiesOverrides: ot,
switchChart: E,
startFullscreen: nt,
exitFullscreen: rt,
destroyPromise: X,
chartWidgetCreated: J,
getContainer: st,
onWidget: Tt.onWidget,
applyTheme: at,
setActive: dt,
undoHistory: Pt
}), _t(t.onfeatures ? void 0 : t.content), vt.subscribe(function(t) {
A(), I(t, !1) && (jt = M(), qt = jt.indexOf(Ut[Gt]))
}), vt.hook = function(t) {
return t === this.value() ? t : pt(t)
}, Ht && (vt.writeLock = !0), wt.subscribe(function(t) {
t !== St && (jt = M(), I(Kt, t))
}), Ot = setInterval(C, 1e3), $(window).on("resize", S), $(document).on("onUpdate", S),
d.enabled("datasource_copypaste") && (c.init(), t.globalEvents && ($(window).on(
"appclip:paste",
function(t) {
$t.value().onAppClipboardPaste(), t.preventDefault()
}), $(window).on("appclip:copy", function(t) {
$t.value().onAppClipboardCopy(), t.preventDefault()
}), $(window).on("appclip:cut", function(t) {
$t.value().onAppClipboardCut(), t.preventDefault()
}))), Rt = 0, Ut.forEach(function(t) {
if (t) {
Rt++;
var e = t.chartWidget;
e.withModel(null, function() {
if (e.model().mainSeries().bars().size() > 0) ft();
else {
var t = function() {
ft(), e.model().mainSeries().onBarReceived()
.unsubscribe(null, t), e.model().mainSeries()
.onCompleted().unsubscribe(null, t)
};
e.model().mainSeries().onBarReceived().subscribe(null, t), e
.model().mainSeries().onCompleted().subscribe(null, t)
}
})
}
}), s() && (Bt = l.tool.setValue, l.tool.setValue = function() {
zt.selectedSource.value() && zt.activeChartWidget.value().model()
.lineBeingCreated() && zt.activeChartWidget.value().model()
.cancelCreatingLine(), Bt.apply(l.tool, arguments)
}), mt().then(gt).then(function() {
window.saver && window.is_authenticated && t.widgetOptions.justCloned && window
.saver.saveChartSilently()
}).catch(b.logError.bind(b))
}
var n = i(216).layouts,
r = i(784),
s = i(64).supportTouch,
a = i(964).createUndoHistory,
l = i(26),
c = i(233),
h = i(23),
u = i(966),
d = i(5),
p = i(967).SetChartLayoutCommand,
_ = i(17),
f = i(215).ResizerDetacherState,
m = i(968).delegateToPromise,
g = i(147),
v = i(969),
y = i(970),
b = i(7).getLogger("Chart.ChartWidgetCollection");
t.exports = o
}).call(e, i(10))
},
function(t, e, i) {
"use strict";
(function(e) {
function o(t) {
var i, o, n, r, s, a, l, c, h, u, d, f, m, g, v, y, b, w = this;
this._guid = j(), this._startSpinner(t.body.value()), this._options = t = t || {}, i = t
.content, o = t.readOnly, o || (x.init(), x.tool.subscribe(function(t) {
var e, i, o, n;
w._model && (e = t, w._model.model().setCurrentTool(e), TradingView.isMobile
.any() && (i = w._paneWidgets[0], S.isLineTool(e) &&
"LineToolBrush" !== e && !w.selectBarMode().value() ? (o = .5 *
w._model.model().timeScale().width(), n = .5 * i._state
.defaultPriceScale().height(), w._model.model()
.setAndSaveCurrentPosition(o, n, i._state), i
._updateTooltip(o, n)) : i._hideTooltip()), w._model &&
TradingView.isMobile.any() && w._model.model().crossHairSource()
.updateAllViews())
}), n = function(t, e, i) {
var o, n = e.mainSeries().syncModel(),
r = t.mainSeries().syncModel(),
s = i;
return n && r && (o = t._createSyncPoint(n, r), s = o.sourceTimeToTargetTime(
i)), t.timeScale().points().roughIndex(s, r && r.distance.bind(r))
}, x.createdLineTool.subscribe(null, function(t) {
var e, i, o;
w._model && (e = w._model.model(), t.model !== e && (i = e.paneForSource(w
._model.model().mainSeries()), o = {
index: n(e, t.model, t.point.timeStamp),
price: t.point.price
}, w._model.createLineTool(i, o, t.linetool, t.properties, t
.linkKey)))
}), x.continuedLineTool.subscribe(null, function(t) {
var e, i, o;
w._model && (e = w._model.model(), t.model !== e && (i = {
index: n(e, t.model, t.point.timeStamp),
price: t.point.price
}, (o = w._model.lineBeingCreated()) && w._model.model()
.coninueCreatingLine(i, t.envState, !!t.finalState) && t
.finalState && o.restoreExternalPoints(t.finalState)))
}), x.cancelledLineTool.subscribe(null, function(t) {
if (w._model) {
var e = w._model.model();
t.model !== e && w._model.model().cancelCreatingLine()
}
}), x.startedMovingLineTool.subscribe(null, function(t) {
var e, i, o;
w._model && (e = w._model.model(), t.model !== e && (i = e.dataSources()
.filter(function(e) {
return e.linkKey === t.linkKey
})[0]) && (o = {
index: n(e, t.model, t.point.timeStamp),
price: t.point.price
}, w._model.model().startMovingSource(i, o)))
}), x.movedLineTool.subscribe(null, function(t) {
var e, i;
w._model && (e = w._model.model(), t.model !== e && e.sourceBeingMoved() &&
e.sourceBeingMoved().linkKey === t.linkKey && (i = {
index: n(e, t.model, t.point.timeStamp),
price: t.point.price
}, w._model.model().moveSource(i)))
}), x.finishedMovingLineTool.subscribe(null, function(t) {
var e, i;
w._model && (e = w._model.model(), t.model !== e && (i = e
.sourceBeingMoved()) && (w._model.model().endMovingSource(!!t
.finalState), t.finalState && i.restoreExternalPoints(t
.finalState)))
}), x.startedChangingLineTool.subscribe(null, function(t) {
var e, i, o;
w._model && (e = w._model.model(), t.model !== e && (i = e.dataSources()
.filter(function(e) {
return e.linkKey === t.linkKey
})[0]) && (o = {
index: n(e, t.model, t.point.timeStamp),
price: t.point.price
}, w._model.model().startChangingLinetool(i, o, t.pointIndex, t
.envState)))
}), x.changedLineTool.subscribe(null, function(t) {
var e, i;
w._model && (e = w._model.model(), t.model !== e && e.lineBeingEdited() && e
.lineBeingEdited().linkKey === t.linkKey && (i = {
index: n(e, t.model, t.point.timeStamp),
price: t.point.price
}, w._model.model().changeLinePoint(i, t.envState)))
}), x.finishedChangingLineTool.subscribe(null, function(t) {
var e, i;
w._model && (e = w._model.model(), t.model !== e && (i = e.dataSources()
.filter(function(e) {
return e.linkKey === t.linkKey
})[0], e.lineBeingEdited() && w._model.model()
.endChangingLinetool(!!t.finalState), i && t.finalState && i
.restoreExternalPoints(t.finalState)))
}), x.removedLineTool.subscribe(null, function(t) {
var e, i;
w._model && (e = w._model.model(), t.model !== e && (i = e.dataSources()
.filter(function(e) {
return e.linkKey === t.linkKey
})[0]) && w._model.model().removeSource(i))
}), x.finishedLineTool.subscribe(null, function(t) {
var e;
w._model && (e = w._model.model(), t.model !== e && e.dataSources().filter(
function(e) {
return e.linkKey === t.linkKey
})[0] && w._model.model().finishLineTool())
}), x.changedLineStyle.subscribe(null, function(t) {
var e, i;
w._model && (e = w._model.model(), t.model !== e && (i = e.dataSources()
.filter(function(e) {
return e.linkKey === t.linkKey
})[0]) && (i.properties().merge(t.state), i
.propertiesChanged()))
}), x.restoredLineToolState.subscribe(null, function(t) {
var e, i, o;
w._model && (e = w._model.model(), t.model !== e && (i = e.dataSources()
.filter(function(e) {
return e.linkKey === t.linkKey
})[0]) && (o = $.extend({}, t.state), o.indexes = o.points.map(
function(i) {
return {
index: n(e, t.model, i.time_t),
price: i.price
}
}), e.restoreLineToolState(i, o)))
}), x.restoredLineTool.subscribe(null, function(t) {
if (w._model) {
var e = w._model.model();
t.model !== e && e.restoreSource(t.state.restorePane, t.state.paneIndex,
t.state.paneState, t.state.sourceState, t.state.priceScaleName)
}
}), x.copiedLineTool.subscribe(null, function(t) {
var e, i, o, r, s, a;
if (w._model && (e = w._model.model(), t.model !== e)) {
if (i = e.paneForSource(e.mainSeries()), o = t.points.map(function(i) {
return {
index: n(e, t.model, i.timeStamp),
price: i.price
}
}), r = o[0], s = e.createLineTool(i, r, t.linetool, null, t
.linkKey), e.lineBeingCreated())
for (a = 1; a < o.length; a++) a !== o.length - 1 ||
"LineToolBrush" !== t.linetool && "LineToolGhostFeed" !== t
.linetool || e.finishLineTool(!0), e.coninueCreatingLine(o[
a], {}, a < o.length - 1, !0);
s.properties().interval.setValue(t.state.interval), s.properties()
.merge(t.state), s.restoreData && s.restoreData(t), s
.propertiesChanged(), s && t.finalState && (s.calcIsActualSymbol(),
s.restoreExternalPoints(t.finalState))
}
})), r = t.containsData, s = t.onWidget, a = t.onCmeWidget, a && X.logWarn(
"[ChartWidget] 'onCmeWidget' option is depricated"), l = t.widgetCustomer, c = t
.timezone, h = t.withDateRanges, u = t.hideSymbolSearch, d = t.defSymbol, f = t
.defInterval, m = t.defExtendedHours, g = t.defTimeframe, v = -1 !== $.inArray(t
.defStyle, $.map($.grep(Object.keys(p), function(t) {
return /^STYLE_\w+/.test(t)
}), function(t) {
return p[t]
})), y = v ? t.defStyle : void 0, this._chartWidgetCollection = t
.chartWidgetCollection || null, this._withDateRanges = (void 0 === h ? !o : !!h) && _
.enabled("timeframes_toolbar"), this._jqParent = t.body.value(), this._setContent(i),
this._readOnly = o, this._containsData = r, this._defSymbol = d, this._defInterval = f,
this._defTimeframe = g, this._defStyle = y, this._onWidget = !!s, this._onWidget && (a ?
this._widgetCustomer = "cme" : l && (this._widgetCustomer = l)), this
.controlBarHeight = 22, this._hideSymbolSearch = u, this._jqMainDiv = null, this
._jqMainTable = null, this._paneWidgets = [], this._paneSeparators = [], this
._timeAxisWidget = null, this._frameTime = 30, this._model = null, this._metaInfo = {},
this._drawRafId = 0, b = this._contentSeriesProperties(), b && (d = b.symbol, f = b
.interval), void 0 === P || P.isValid(f) || (f = void 0), this._properties = new O(
"chartproperties"), this._properties.mainSeriesProperties.merge(defaults(
"chartproperties.mainSeriesProperties")), this._properties.mainSeriesProperties
.merge({
visible: !0,
symbol: d || DEFAULT_SYMBOL,
shortName: "",
timeframe: "",
onWidget: this._onWidget,
interval: f || "D",
style: y,
extendedHours: m,
lineStyle: {
styleType: TradingView.factoryDefaults(
"chartproperties.mainSeriesProperties.lineStyle.styleType")
}
}), this._containsData && this._properties.mainSeriesProperties.merge({
showCountdown: !1
}), c && z(c) && this._properties.timezone.setValue(c), this._tagsChanged = new e, this
._modelCreated = new e, this._disconnected = new e, this._reconnectBailout = new e, this
._connected = new e, this._redrawPanes = new e, this._onScroll = new e, this
.chartWidgetInitialized = new e, this._studiesMetaData = [],
this._studiesMigrations = [], this._chartSession = new N(ChartApiInstance), this
.lhsPriceAxisWidthChanged = new e, this.rhsPriceAxisWidthChanged = new e, this
._timingsMeter = null, this._isActive = t.isActive, this._width = t.width, this
._height = t.height, t.width.subscribe(function() {
w.resize()
}), t.height.subscribe(function() {
w.resize()
}), t.visible.subscribe(this._updateTimingsMeterState.bind(this))
}
function n(t) {
return {
UTC: "Etc/UTC",
EST: "America/New_York",
CST: "America/Chicago",
PST: "America/Los_Angeles"
} [t] || "exchange"
}
function r(t) {
return t.description_localized = window.t(t.description, {
context: "study"
}), t
}
var s, a, l, c, h, u, d, p, _, f, m, g, v, y, b, S, w, T, C, x, P, L, I, k, A, M, E, D, V, O, R,
B, z, F, N, W, H, U, j, q, G, Y, K, Z, X;
i(12), s = i(9).assert, a = i(785), l = i(936), c = i(938), h = i(164).PriceAxisWidget, u = i(
942), i(84), d = i(106).BarsMarksContainer, p = i(77), _ = i(5), f = i(148)
.isFeatureEnabled, m = i(232).ActionBinder, g = i(136).showEditObjectDialog, v = i(358)
.showGoToDateDialog, y = i(35).Study, b = i(163), S = i(1).LineDataSource, w = i(52), T = w
.Action, C = w.ActionSeparator, x = i(26), P = i(34).Interval, L = i(944), I = i(949), k =
i(950).showSymbolInfoDialog, A = i(22), M = i(360).AddCompareDialog, E = i(76), D = i(317),
V = i(71), i(346), O = i(6).DefaultProperty, R = i(171), B = R.availableTimezones, z = R
.timezoneIsAvailable, F = i(65).createDialog, N = i(345).ChartSession, W = i(33), H = i(172)
.unifiedSpinner, U = i(40).trackEvent, j = i(61).guid, q = i(130).Size, G = i(319), Y = i(
112).createConfirmDialog, K = i(960).MarketStatusIndicator, Z = i(962)
.DataModeIndicator, X = i(7).getLogger("ChartWidget", {
color: "#606"
}), o.prototype.setTimezone = function(t) {
t && z(t) ? this._properties.timezone.setValue(t) : console.warn(
"Incorrect timezone: " + JSON.stringify(t))
}, o.prototype.refreshMarks = function() {
this.model().barsMarksSources().forEach(function(t) {
t.refreshData()
})
}, o.prototype.clearMarks = function() {
this.model().barsMarksSources().forEach(function(t) {
t.clearMarks()
})
}, o._nextMetadataId = 1, o._filterAuthorizedMetaInfo = function(t) {
var e, i, o, n, r = [];
for (e = 0; t && e < t.length; ++e) i = t[e], o = W.parseIdString(i.id), n = o
.productId, pro.hasPackage(n) && r.push(i);
return r
}, o.prototype.privateMetaInfo = function(t) {
if (t) {
return new t(W.CURRENT_METAINFO_FORMAT_VERSION).generateMetaInfo()
}
return []
}, o.prototype._onScriptSources = function(t, e) {
var i, o, n, r, s, a, l, c;
for (X.logDebug("ChartWidget _onScriptSources called"), i = null, o = 0; o < e
.length; ++o)
if (n = e[o], n.id.startsWith("Script@tv-scripting-")) {
i = W.parseIdString(n.id).version;
break
} if (null != i) {
for (this.studyScriptingPkgVers = i, r = 0, s = 0, o = 0; o < t.length; ++o) {
a = t[o], l = a && a.scriptName, r++;
try {
c = W.createMetaInfoStub(a, i), e.push(c)
} catch (t) {
X.logError("Could not process script (skipped): " + l + " (" + t.message +
")"), s++
}
}
X.logDebug("User's Pine Scripts loaded " + r + ", skipped " + s)
} else X.logError("Could not find tv-scripting package in metadata response");
for (o = 0; o < e.length; o++) W.addOrReplaceStudyMetaInfo(this._studiesMetaData, e[o]);
this._applyStudiesOverrides(), this._inited ? this.model().model().setStudiesMetaData(
this._studiesMetaData, this._studiesMigrations) : (this._init(), this
.chartWidgetInitialized.fire(), X.logDebug("ChartWidget _onScriptSources done"))
},
o.prototype._init = function() {
var t, e, i = this;
this.model() && this.model().mainSeries().clearData(), this.initColors(), this
._makeDefaultGui(), t = function() {
i._checkObsoleteTimezone(), i._chartSession && i._chartSession.connected() && i
._restartModel(), this._content && (this.initColors(), this._updateGui(),
this.update());
var t = i._model.mainSeries();
t.marketStatus.subscribe(function(e) {
i.indicatorImage && i._updateDataAndMarketStatus(e, t.status(), t
.quoteData.update_mode_seconds)
}, {
callWithLast: !0
}), this._resizeHandler = function() {
this._adjustSize(), this._model && this._model.mainSeries()
.requestMoreData(), this.paint(), this.resizeSeriesControlUI(), this
.checkCompactMode(), this.resizeIndicator()
}.bind(this), this._resizeHandler(), this._jqMainDiv.appendTo(this
._jqParent), this._spinner && (this._spinner.stop(), delete this
._spinner), f("chrome_canvas_fix") && navigator.userAgent.match(
/windows.+chrome/i) && $(window).on("visibilitychange:chart_" + this
._guid,
function(t, e) {
if (e) {
for (var o = 0; o < i._paneWidgets.length; o++) i._paneWidgets[
o].hardResetCanvas();
i._timeaxiswidget && i._timeaxiswidget.hardResetCanvas(), i
.paint(new A(A.LIGHT_UPDATE))
}
}), $(window).on("keydown:chart_" + this._guid, function(t) {
27 === t.which && t.preventDefault()
}), this._containsData || this._jqMainDiv.mousewheel(function(t, e, i, o) {
var n, r, s, a, l;
if ((TradingView.onWidget() || !parent || parent === window || !
parent.IS_DEMO_PAGE) && this.model() && !this.noScroll && !
this.model().timeScale().isEmpty()) return n = t.pageX - 5, r =
this._paneWidgets[0].lhsPriceAxisWidget.size.w, s = this
._timeAxisWidget.size.w, r && (n = Math.max(0, n - r)), n =
Math.min(n, s), a = _.enabled("right_bar_stays_on_scroll") ?
1 : 2 * (n / s - .5), l = Math.min(1, Math.abs(o)), o > 0 ?
this.model().zoomIn(a, l) : o < 0 && this.model().zoomOut(a,
l), i && this.model().scrollChart(-80 * i), !1
}.bind(this)), this._initBarsMarksSources(), this
.setAutoScaleOnSymbolChange(), this._activateSymbolSearchHotkeys(), this
.model().timeScale().onScroll().subscribe(this, function() {
this._onScroll.fire()
}), this._inited = !0
}.bind(this), e = this._makeDefaultModel(), void 0 === e ? t() : e.then(t)
}, o.prototype._activateSymbolSearchHotkeys = function() {
this.readOnly() || this._hideSymbolSearch || V.activateKeyPressHandler()
}, o.prototype._checkObsoleteTimezone = function() {
var t = this._properties.timezone.value();
z(t) || this._properties.timezone.setValue(n(t))
}, o.prototype._initBarsMarksSources = function() {
var t = this;
this.withModel(this, function() {
this.model().barsMarksSources().forEach(function(e) {
e.onNeedRepaint.subscribe(t, t.paint)
})
})
}, o.prototype.initESDTimelineWidget = function() {
new ESDTimelineWidget(this)
}, o.prototype.applyAutoScaleOnNewSymbol = function() {
(!this.model().mainSeries() instanceof p || !this.model().mainSeries().priceScale()
.isLockScale()) && this.model().mainSeries().priceScale().setAutoScale(!0)
}, o.prototype.setAutoScaleOnSymbolChange = function() {
this.withModel(this, function() {
this.model().mainSeries().properties().symbol.listeners().subscribe(this,
function() {
this.applyAutoScaleOnNewSymbol()
})
})
}, o.prototype.initColors = function() {
this._properties.paneProperties.background.listeners().subscribe(this, o.prototype
.setBackgroundColor), this._properties.paneProperties.vertGridProperties.color
.listeners().subscribe(this, o.prototype.redrawPanes), this._properties
.paneProperties.horzGridProperties.color.listeners().subscribe(this, o.prototype
.redrawPanes), this._properties.scalesProperties.lineColor.listeners()
.subscribe(this, o.prototype.setScaleLineColor), this._properties.scalesProperties
.textColor.listeners().subscribe(this, o.prototype.setScaleTextColor)
}, o.prototype.paneWidgets = function() {
return this._paneWidgets
}, o.prototype.paneByCanvas = function(t) {
for (var e = 0; e < this._paneWidgets.length; e++)
if (this._paneWidgets[e].canvas === t || this._paneWidgets[e].top_canvas === t)
return this._paneWidgets[e];
return null
}, o.prototype.paneByState = function(t) {
for (var e = 0; e < this._paneWidgets.length; e++)
if (this._paneWidgets[e]._state === t) return this._paneWidgets[e];
return null
}, o.prototype.priceAxisByCanvas = function(t) {
var e, i, o;
for (e = 0; e < this._paneWidgets.length; e++)
if (i = this._paneWidgets[e], o = i.priceAxisByCanvas(t)) return o;
return null
}, o.prototype.timeAxisByCanvas = function(t) {
return t === this._timeAxisWidget.canvas || t === this._timeAxisWidget.top_canvas ? this
._timeAxisWidget : null
}, o.prototype.properties = function() {
return this._properties
}, o.prototype.emulateCriticalError = function() {
this._chartSession.removeSeries(-1, null)
}, o.prototype.readOnly = function() {
return this._readOnly
}, o.prototype.onDisconnected = function() {
return this._disconnected
}, o.prototype.onReconnectBailout = function() {
return this._reconnectBailout
}, o.prototype.onConnected = function() {
return this._connected
}, o.prototype.onRedrawPanes = function() {
return this._redrawPanes
}, o.prototype.onScroll = function() {
return this._onScroll
}, o.prototype.modelCreated = function() {
return this._modelCreated
}, o.prototype.setResolution = function(t) {
if (!this._model) return void this._properties.mainSeriesProperties.merge({
interval: t
});
var e = this._model.mainSeries().properties().interval;
this._model.setScreenChartProperty(e, t, this, window.t("Change Resolution"))
}, o.prototype.getResolution = function() {
return this._model ? this._model.mainSeries().properties().interval.value() : this
._properties.mainSeriesProperties.interval.value()
}, o.prototype._addSymbol = function(t, e) {
var i = this.model(),
o = i.studiesMetaData(),
n = "study_Overlay@tv-basicstudies",
r = _.enabled("use_overrides_for_overlay") && TradingView.defaultProperties[n] &&
TradingView.defaultProperties[n].style,
s = r || (i.mainSeries().properties().style.value() === p.STYLE_CANDLES ? p
.STYLE_BARS : p.STYLE_CANDLES),
a = {
inputs: {
symbol: t
},
style: s
},
l = o.filter(function(t) {
return "Overlay@tv-basicstudies" === t.id
})[0];
i.insertStudy(l, a, e)
}, o.prototype.addSymbol = function(t, e) {
var i = Array.prototype.slice.call(arguments);
(function() {
this._addSymbol.apply(this, i)
}).bind(this)()
}, o.prototype.updateActions = function() {
function t() {
var t, e, i = studyTemplates.plainList("custom"),
o = studyTemplates.plainList("default");
l.applyStudyTemplate.subActions || (l.applyStudyTemplate.subActions = []), t = l
.applyStudyTemplate.subActions,
t.splice(0, t.length), e = new T({
text: $.t("Save Indicator Template As..."),
statName: "Save"
}), e.callbacks().subscribe(studyTemplates, studyTemplates.showSaveAsDialog), t
.push(e, new C), i.length || o.length ? (i.length && ($.each(i, function(e, i) {
function o(t) {
return function() {
return studyTemplates.deleteStudyTemplate(t), this
._parentMenu._parentMenuItem._parentMenu
.destroy(), !1
}
}
var n = new T({
text: i,
statName: "SetStudyTemplate"
});
n.callbacks().subscribe(studyTemplates, function() {
this.applyTemplate(i)
}), n.deleteButton = {
action: o(n.text)
}, t.push(n)
}), o.length && t.push(new C)), $.each(o, function(e, i) {
var o = new T({
text: i,
statName: "SetStudyTemplateFromDefaults"
});
o.callbacks().subscribe(studyTemplates, function() {
this.applyTemplate(i)
}), t.push(o)
})) : t.push(new T({
text: window.t("No study templates saved"),
enabled: !1
}))
}
var e, i, o, n, r, s, a, l = this.actions(),
c = this._model.dataSources(),
h = !1,
u = !1;
for (e = 0, i = c.length; e < i; e++) o = c[e], TradingView.isInherited(o.constructor,
S) && o.isUserDeletable() && (h = !0), TradingView.isInherited(o.constructor,
y) && o.removeByRemoveAllStudies() && (u = !0), TradingView.isInherited(o
.constructor, b) && (u = !0);
this._readOnly || (l.paneRemoveAllStudies && l.paneRemoveAllStudies.setEnabled(u), l
.paneRemoveAllDrawingTools && l.paneRemoveAllDrawingTools.setEnabled(h), l
.paneRemoveAllStudiesDrawingTools && l.paneRemoveAllStudiesDrawingTools
.setEnabled(u || h)), window.studyTemplates && (t(), studyTemplates
.refreshStudyTemplateList(t)), n = this, r = [], s = B, a = function(t) {
return t.id === n.model().model().properties().timezone.value()
}, s.forEach(function(t) {
if (!t.separator) {
var e = new T({
text: t.title,
checkable: !0,
checked: a(t),
statName: "SetTimeZone"
});
e.callbacks().subscribe(this, function() {
n.model().setProperty(n.model().model().properties()
.timezone, t.id, "Changed Time Zone")
}), r.push(e)
}
}, this), l.applyTimeZone.subActions = r, l.addToWatchlist && (l.addToWatchlist
.text = window.t("Add {0} To Watchlist").format(this.getSymbol(!0))), l
.addToTextNotes && (l.addToTextNotes.text = window.t("Add Text Note For {0}")
.format(this.getSymbol(!0))), this.updateActionForIntradayOnly(l.sessionBreaks)
}, o.prototype.actions = function() {
return this._actions || this._setActions(), this._actions
}, o.prototype._setActions = function() {
var t, e, i, n, r, s, a, l, c, h, u, d, p, g, y, b, S, w, P, L, I, M, O, R, B, z, F, N,
W, $, H, j, q, G, Y, K, Z, X, J, Q, tt, et, it, ot, nt, rt, st, at, lt, ct, ht, ut,
dt, pt, _t, ft, mt, gt = this,
vt = [];
if (!this._readOnly) {
for (vt = [new T({
text: window.t("Eraser"),
callbackContext: "eraser",
statName: "Eraser"
}), new C, new T({
text: window.t("Trend Line"),
callbackContext: "LineToolTrendLine",
statName: "LineToolTrendLine"
}), new T({
text: window.t("Horizontal Line"),
callbackContext: "LineToolHorzLine",
statName: "LineToolHorzLine"
}), new T({
text: window.t("Vertical Line"),
callbackContext: "LineToolVertLine",
statName: "LineToolVertLine"
}), new T({
text: window.t("Arrow"),
callbackContext: "LineToolArrow",
statName: "LineToolArrow"
}), new T({
text: window.t("Ray"),
callbackContext: "LineToolRay",
statName: "LineToolRay"
}), new T({
text: window.t("Extended"),
callbackContext: "LineToolExtended",
statName: "LineToolExtended"
}), new T({
text: window.t("Parallel Channel"),
callbackContext: "LineToolParallelChannel",
statName: "LineToolParallelChannel"
}), new C, new T({
text: window.t("Pitchfork"),
callbackContext: "LineToolPitchfork",
statName: "LineToolPitchfork"
}), new T({
text: window.t("Schiff Pitchfork"),
callbackContext: "LineToolSchiffPitchfork",
statName: "LineToolSchiffPitchfork"
}), new T({
text: window.t("Pitchfan"),
callbackContext: "LineToolPitchfan",
statName: "LineToolPitchfan"
}), new T({
text: window.t("Gann Square"),
callbackContext: "LineToolGannSquare",
statName: "LineToolGannSquare"
}), new T({
text: window.t("Gann Fan"),
callbackContext: "LineToolGannFan",
statName: "LineToolGannFan"
}), new T({
text: window.t("Fib Retracement"),
callbackContext: "LineToolFibRetracement",
statName: "LineToolFibRetracement"
}), new T({
text: window.t("Trend-Based Fib Extension"),
callbackContext: "LineToolTrendBasedFibExtension",
statName: "LineToolTrendBasedFibExtension"
}), new T({
text: window.t("Fib Speed Resistance Fan"),
callbackContext: "LineToolFibSpeedResistanceFan",
statName: "LineToolFibSpeedResistanceFan"
}), new T({
text: window.t("Fib Time Zone"),
callbackContext: "LineToolFibTimeZone",
statName: "LineToolFibTimeZone"
}), new T({
text: window.t("Circle Lines"),
callbackContext: "LineToolCircleLines",
statName: "LineToolCircleLines"
}), new T({
text: window.t("Fib Circles"),
callbackContext: "LineToolFibCircles",
statName: "LineToolFibCircles"
}), new T({
text: window.t("Fib Speed Resistance Arcs"),
callbackContext: "LineToolFibSpeedResistanceArcs",
statName: "LineToolFibSpeedResistanceArcs"
}), new C, new T({
text: window.t("Rectangle"),
callbackContext: "LineToolRectangle",
statName: "LineToolRectangle"
}), new T({
text: window.t("Ellipse"),
callbackContext: "LineToolEllipse",
statName: "LineToolEllipse"
}), new T({
text: window.t("Triangle"),
callbackContext: "LineToolTriangle",
statName: "LineToolTriangle"
}), new T({
text: window.t("Polyline"),
callbackContext: "LineToolPolyline",
statName: "LineToolPolyline"
}), new T({
text: window.t("Arc"),
callbackContext: "LineToolArc",
statName: "LineToolArc"
}), new C, new T({
text: window.t("Text"),
callbackContext: "LineToolText",
statName: "LineToolText"
}), new T({
text: window.t("Anchored Text"),
callbackContext: "LineToolTextAbsolute",
statName: "LineToolTextAbsolute"
}), new T({
text: window.t("Balloon"),
callbackContext: "LineToolBalloon",
statName: "LineToolBalloon"
}), new T({
text: window.t("Price Label"),
callbackContext: "LineToolPriceLabel",
statName: "LineToolPriceLabel"
}), new C, new T({
text: window.t("Elliott Wave Subminuette"),
callbackContext: "LineToolElliottSubminuette",
statName: "LineToolElliottSubminuette"
}), new T({
text: window.t("Elliott Wave Minor"),
callbackContext: "LineToolElliottMinor",
statName: "LineToolElliottMinor"
}), new T({
text: window.t("Elliott Wave Circle"),
callbackContext: "LineToolElliottCircle",
statName: "LineToolElliottCircle"
}), new T({
text: window.t("Elliott Minor Retracement"),
callbackContext: "LineToolElliottMinorRetr",
statName: "LineToolElliottMinorRetr"
}), new T({
text: window.t("Elliott Major Retracement"),
callbackContext: "LineToolElliottMajorRetr",
statName: "LineToolElliottMajorRetr"
}), new C, new T({
text: window.t("Brush"),
callbackContext: "LineToolBrush",
statName: "LineToolBrush"
}), new C, new T({
text: window.t("Forecast"),
callbackContext: "LineToolPrediction",
statName: "LineToolPrediction"
})], gt = this, i = function(t) {
x.tool.setValue(t.callbackContext())
}, n = 0; n < vt.length; n++) vt[n].callbacks().subscribe(null, i);
t = new T({
text: window.t("Scales Properties..."),
statName: "ScalesProperties"
}), e = new T({
text: window.t("Timezone/Sessions Properties..."),
statName: "TimezoneSessionsProperties"
})
}
r = new T({
text: window.t("Reset Chart"),
shortcut: "Alt+R",
statName: "ResetChart"
}), r.callbacks().subscribe(this, this.GUIResetScales), s = new T({
text: window.t("Undo"),
shortcut: "ctrl+z"
}), s.callbacks().subscribe(null, function() {
U("GUI", "Undo"), gt._model.undoHistory.undo()
}), s.disable(), a = new T({
text: window.t("Redo"),
shortcut: "ctrl+y"
}), a.callbacks().subscribe(null, function() {
U("GUI", "Redo"), gt._model.undoHistory.redo()
}), a.disable(), gt.withModel(null, function() {
gt._model.undoHistory.undoStack().onChange().subscribe(gt, gt
.updateUndoRedo), gt._model.undoHistory.redoStack().onChange()
.subscribe(gt, gt.updateUndoRedo)
}), l = new T({
text: window.t("Loading")
}), c = [l], h = new T({
text: window.t("Color Theme"),
subActions: c,
statName: "ColorTheme"
}), u = new T({
text: window.t("TimeZone"),
statName: "TimeZone"
}), d = new T({
text: window.t("Change Symbol..."),
shortcut: window.t("Any Symbol"),
doNotBindShortcut: !0,
statName: "ChangeSymbol"
}), TVSettings.setValue("symboledit.dialog_last_entry", ""), d.callbacks()
.subscribe(this, function() {
V.showDialog({
callback: this.setSymbol.bind(this)
})
}), p = new T({
text: window.t("Change Interval..."),
shortcut: window.t("Any Number"),
doNotBindShortcut: !0,
statName: "ChangeInterval"
}), p.callbacks().subscribe(this, function() {
new D({
callback: function(t) {
E.interval.setValue(t)
}
}).show()
}), TradingView.onWidget() || (_.enabled("add_to_watchlist") && (g = new T({
text: window.t("Add To Watchlist"),
shortcut: "Alt+W",
statName: "AddToWatchlist"
}), g.callbacks().subscribe(this, function() {
var t, e, i = widgetbar.setPage("base");
for (e = 0; e < i.widgets.length; e++)
if ("watchlist" === i.widgets[e].type) {
t = i.widgets[e].widgetObject;
break
} t && t.addHighlight(this.getSymbol())
})), f("text_notes") && (y = new T({
text: window.t("Add To Text Notes"),
shortcut: "Alt+N",
statName: "AddToTextNotes"
}), y.callbacks().subscribe(this, function() {
var t = this;
runOrSignIn(function() {
TradingView.bottomWidgetBar.toggleWidget("text_notes", !
0), TradingView.bottomWidgetBar._widgets
.text_notes.addNote(null, t.getSymbol(!0), t
.getSymbol())
}, {
source: "Add text note in chart context menu"
})
}))), b = new T({
text: window.t("Insert Study Template"),
statName: "InserStudyTemplate"
}), S = new T({
shortcut: "Ctrl+Alt+Q",
text: window.t("Reset Scale"),
statName: "ResetScale"
}), S.callbacks().subscribe(null, function(t) {
gt.model().resetTimeScale()
}), w = new T({
text: window.t("Insert Drawing Tool"),
subActions: vt,
statName: "InsertDravingTool"
}), P = new T({
text: window.t("Remove All Indicators"),
statName: "RemoveAllIndicators"
}), L = new T({
text: window.t("Remove All Drawing Tools"),
statName: "RemoveAllDrawingTools"
}), I = new T({
text: window.t("All Indicators And Drawing Tools"),
statName: "RemoveAllIndicatorsAndDrawingTools"
}), M = new T({
text: window.t("Insert Indicator..."),
shortcut: "/",
statName: "InsertIndicator"
}), O = new T({
text: window.t("Script Editor..."),
statName: "ScriptEditor"
}), R = new T({
text: window.t("Compare or Add Symbol..."),
statName: "CompareOrAddSymbol"
}), B = new T({
text: window.t("Compare..."),
statName: "Compare"
}), z = new T({
text: window.t("Objects Tree..."),
statName: "ObjectsTree"
}), F = new T({
text: window.t("Properties..."),
statName: "ChartProperties",
callback: function(t, e) {
gt.showChartProperties()
}
}), N = new T({
text: window.t("Lock/Unlock"),
statName: "ToggleLockSelectedObject"
}), N.callbacks().subscribe(this, o.prototype.toggleLockSelectedObject), W = new T({
text: window.t("Hide"),
statName: "HideSelectedObject"
}), W.callbacks().subscribe(this, o.prototype.hideSelectedObject), _.enabled(
"property_pages") && ($ = new T({
text: window.t("Format..."),
statName: "EditSelectedObject"
}), $.callbacks().subscribe(this, o.prototype.editSelectedObject)), H = new T({
text: window.t("Source Code..."),
statName: "OpenSelectedObjectSource"
}), H.callbacks().subscribe(this, this.openSelectedObjectSource), j = new T({
text: window.t("Left Axis"),
checkable: !0,
statName: "ToggleLeftAxis"
}), j.binder = new m(j, this._properties.scalesProperties.showLeftScale, this
.model(), window.t("Show Left Scale")), q = new T({
text: window.t("Right Axis"),
checkable: !0,
statName: "ToggleRightAxis"
}), q.binder = new m(q, this._properties.scalesProperties.showRightScale, this
.model(), window.t("Show Right Scale")), this._properties.scalesProperties
.showLeftScale.listeners().subscribe(this, o.prototype._updateScalesActions), this
._properties.scalesProperties.showRightScale.listeners().subscribe(this, o.prototype
._updateScalesActions), G = new T({
text: window.t("Scale Price Chart Only"),
checkable: !0,
statName: "ScalePriceChartOnly"
}), G.binder = new m(G, this._properties.scalesProperties.scaleSeriesOnly, this
.model(), window.t("Scale Price Chart Only")), Y = this.model().model(), this
._properties.scalesProperties.scaleSeriesOnly.listeners().subscribe(null,
function() {
Y.recalculateAllPanes(), Y.invalidate(new A(A.FULL_UPDATE))
}), K = new T({
text: window.t("Drawings Toolbar"),
checkable: !0,
statName: "ToggleDrawingToolbar"
}), Z = this._options.isDrawingToolbarVisible, Z && (Z.subscribe(function(t) {
K.setChecked(t)
}, {
callWithLast: !0
}), K.callbacks().subscribe(null, function() {
Z.setValue(!Z.value())
})), X = new T({
text: window.t("Favorite Drawings Toolbar"),
checkable: !0,
statName: "ToggleFavoriteDrawingsToolbar"
}), J = this._options.favoriteDrawingToolbar, J && (J.canBeShown().subscribe(
function(t) {
X.setEnabled(t)
}, {
callWithLast: !0
}), J.visibility().subscribe(function(t) {
X.setChecked(t)
}, {
callWithLast: !0
}), X.callbacks().subscribe(null, function() {
J.isVisible() ? J.hide() : J.show()
})), Q = new T({
text: window.t("Magnet Mode"),
checkable: !0,
statName: "ToggleMagnetMode"
}), Q.binder = new m(Q, x.properties().magnet, this.model(), "Magnet"), tt = new T({
text: window.t("Stay In Drawing Mode"),
checkable: !0,
statName: "ToggleStayInDrawingMode"
}), tt.binder = new m(tt, x.properties().stayInDrawingMode, this.model(), window.t(
"Stay In Drawing Mode")), et = new T({
text: window.t("Sync drawings to all charts"),
checkable: !0,
statName: "ToggleSyncDrawings"
}), et.binder = new m(et, x.properties().drawOnAllCharts, this.model(),
"SyncDrawings"), it = new T({
text: window.t("Lock All Drawing Tools"),
checkable: !0,
statName: "ToggleLockDrawings"
}), it.binder = new m(it, x.lockDrawings(), this.model(), window.t("Lock drawings"),
function(t) {
t || this.binder.setValue(!this.binder.value()), x.lockDrawings().setValue(
this.binder.value())
}.bind(it)), ot = new T({
text: window.t("Hide All Drawing Tools"),
checkable: !0,
statName: "ToggleHideAllDrawingTools"
}), ot.binder = new m(ot, x.hideAllDrawings(), this.model(), window.t(
"Hide All Drawing Tools"), function(t) {
t || this.binder.setValue(!this.binder.value()), x.hideAllDrawings()
.setValue(this.binder.value())
}.bind(ot)), nt = new T({
text: window.t("Hide Marks On Bars"),
checkable: !0,
statName: "ToggleHideMarksOnBars"
}), nt.binder = new m(nt, x.hideMarksOnBars(), this.model(), window.t(
"Hide Marks On Bars"), function(t) {
t || this.binder.setValue(!this.binder.value()), x.hideMarksOnBars()
.setValue(this.binder.value())
}.bind(nt)), rt = new T({
text: window.t("Extended Hours"),
checkable: !0,
statName: "ToggleExtendedHours"
}), rt.binder = new m(rt, this.model().mainSeries().properties().extendedHours, this
.model(), window.t("Change Extended Hours")), st = new T({
text: window.t("Symbol Last Value"),
checkable: !0,
checked: !1,
statName: "ToggleSymbolLastValue"
}), st.binder = new m(st, this.properties().scalesProperties.showSeriesLastValue,
this.model(), window.t("Show Symbol Last Value")), at = new T({
text: window.t("Symbol Labels"),
checkable: !0,
checked: !1,
statName: "ToggleSymbolLabels"
}), at.binding = new m(at, this.properties().scalesProperties.showSymbolLabels, this
.model(), "Undo Show Symbol Labels"), lt = new T({
text: window.t("Indicator Last Value"),
checkable: !0,
checked: !1,
statName: "ToggleStudyLastValue"
}), lt.binder = new m(lt, this.properties().scalesProperties.showStudyLastValue,
this.model(), window.t("Show Indicator Last Value")), ct = new T({
text: window.t("Indicator Labels"),
checkable: !0,
checked: !1,
statName: "ToggleIndicatorsLabels"
}), ct.binding = new m(ct, this.properties().scalesProperties.showStudyPlotLabels,
this.model(), "Undo Show Indicator Labels"), ht = new T({
text: window.t("Countdown"),
checkable: !0,
checked: !1,
statName: "ToggleCountdown"
}), ht.binder = new m(ht, this.model().mainSeries().properties().showCountdown, this
.model(), window.t("Show Countdown")), dt = _.enabled("go_to_date"), !
TradingView.onWidget() && dt && (ut = new T({
text: window.t("Go to Date..."),
shortcut: "Alt+G",
statName: "GoToDate"
}), ut.callbacks().subscribe(null, function() {
var t = gt._chartWidgetCollection.activeChartWidget.value();
v(t.model())
})), pt = new T({
text: window.t("Symbol Info..."),
checkable: !1,
statName: "SymbolInfo"
}), pt.callbacks().subscribe(null, function() {
var t = gt.model().mainSeries().symbol(),
e = gt.model().mainSeries().symbolInfo();
k(t, {
symbolInfo: e
})
}), this._actions = {
chartProperties: F,
timeScaleReset: S,
chartReset: r,
compareOrAdd: R,
compare: B,
paneObjectTree: z,
insertIndicator: M,
insertDrawingTool: w,
applyColorTheme: h,
applyStudyTemplate: b,
symbolSearch: d,
showSymbolInfoDialog: pt,
changeInterval: p,
seriesHide: W,
studyHide: W,
lineToggleLock: N,
lineHide: W,
showLeftAxis: j,
showRightAxis: q,
scaleSeriesOnly: G,
drawingToolbarAction: K,
favoriteDrawingToolbar: X,
magnetAction: Q,
stayInDrawingModeAction: tt,
syncModeAction: et,
lockDrawingsAction: it,
hideAllDrawingsAction: ot,
hideAllMarks: nt,
applyTimeZone: u,
extendedHours: rt,
showCountdown: ht,
showSeriesLastValue: st,
showSymbolLabelsAction: at,
showStudyLastValue: lt,
showStudyPlotNamesAction: ct,
undo: s,
redo: a,
viewSourceCode: H
}, t && (this._actions.scalesProperties = t), e && (this._actions.tmzProperties =
e), g && (this._actions.addToWatchlist = g), !TradingView.onWidget() && _
.enabled(
"text_notes") && f("text_notes") && (this._actions.addToTextNotes = y), !
TradingView.onWidget() && dt && (this._actions.gotoDate = ut), _.enabled(
"charting_library_base") || (this._actions.scriptEditor = O), this
.createSessionBreaksActions(), this.readOnly() || (_t = new T({
text: window.t("Remove"),
shortcut: "Del",
statName: "RemoveSelectedObject"
}), _t.callbacks().subscribe(this, function() {
var t;
this._chartWidgetCollection && (t = this._chartWidgetCollection
.activeChartWidget.value()), t || (t = this), t
.removeSelectedSource()
}), ft = new T({
text: window.t("Stop syncing drawing"),
statName: "StopSyncingDrawing"
}), ft.callbacks().subscribe(this, function() {
var t;
this._chartWidgetCollection && (t = this._chartWidgetCollection
.activeChartWidget.value()), t || (t = this), t
.unlinkSelectedLine()
}), mt = new T({
text: window.t("Sync drawing to all charts"),
statName: "SyncDrawingToAllCharts"
}), mt.callbacks().subscribe(this, function() {
var t;
this._chartWidgetCollection && (t = this._chartWidgetCollection
.activeChartWidget.value()), t || (t = this), t
.copyLineToOtherCharts()
}), this._actions.insertDrawingTool = w, this._actions.paneRemoveAllStudies = P,
this._actions.paneRemoveAllDrawingTools = L, this._actions
.paneRemoveAllStudiesDrawingTools = I, this._actions.seriesRemove = _t, this
._actions.studyRemove = _t, this._actions.lineRemove = _t, this._actions
.lineUnlink = ft, this._actions.lineCopyToCharts = mt, _.enabled(
"property_pages") && (this._actions.format = $), this._actions
.lockDrawingsAction = it, this._actions.hideAllDrawingsAction = ot, this
._actions.hideAllMarks = nt, this._actions.paneRemoveAllStudies.callbacks()
.subscribe(this, o.prototype.removeAllStudies), this._actions
.paneRemoveAllDrawingTools.callbacks().subscribe(this, o.prototype
.removeAllDrawingTools), this._actions.paneRemoveAllStudiesDrawingTools
.callbacks().subscribe(this, o.prototype.removeAllStudiesDrawingTools)), this
._actions.paneObjectTree.callbacks().subscribe(this, o.prototype
.showSourceProperties), this._actions.chartProperties.callbacks().subscribe(
this, o.prototype.showChartProperties), this._actions.insertIndicator
.callbacks().subscribe(this, o.prototype.showIndicators), this._actions
.scriptEditor && this._actions.scriptEditor.callbacks().subscribe(this, o.prototype
.showScriptEditor), this._actions.compareOrAdd.callbacks().subscribe(this, o
.prototype.showCompareOrAdd), this._actions.compare.callbacks().subscribe(this,
o.prototype.showCompareOrAdd), this._actions.scalesProperties && this._actions
.scalesProperties.callbacks().subscribe(this, o.prototype.showScalesProperties),
this._actions.tmzProperties && this._actions.tmzProperties.callbacks().subscribe(
this, o.prototype.showTimezoneProperties), this._updateScalesActions()
}, o.prototype.executeActionById = function(t) {
if ("takeScreenshot" === t) return console.warn(
'Action "takeScreenshot" is deprecated. Use method "takeScreenshot" instead'
), void this._chartWidgetCollection.takeScreenshot();
if ("lockDrawingsAction" === t && console.warn(
'Action "lockDrawingsAction" is deprecated. Use method "lockAllDrawingTools" instead'
), t in this._actions) {
var e = this._actions[t];
e.checkable && e.setChecked(!e.checked), this._actions[t].callbacks().fire(e)
} else console.warn("Unknown action id: " + t)
}, o.prototype.getCheckableActionState = function(t) {
if ("lockDrawingsAction" === t) return console.warn(
'Action "lockDrawingsAction" is deprecated. Use method "lockAllDrawingTools" instead'
), null;
if (t in this._actions) {
var e = this._actions[t];
if (e.checkable) return e.checked;
console.warn("Action " + t + " has no state")
} else console.warn("Unknown action id: " + t);
return null
}, o.prototype._updateScalesActions = function() {
if (this._actions) {
for (var t = 0; t < this._paneWidgets.length; t++) this._paneWidgets[t]
.updateScalesVisibility();
this._timeAxisWidget.updatePriceScalesVisibility()
}
}, o.prototype.removeAllStudies = function() {
this._model.removeAllStudies()
}, o.prototype.removeAllDrawingTools = function() {
this._model.removeAllDrawingTools()
}, o.prototype.removeAllStudiesDrawingTools = function() {
this._model.removeAllStudies(), this._model.removeAllDrawingTools()
}, o.prototype.model = function() {
return this._model
}, o.prototype.defaultSymbol = function() {
return this._defSymbol
}, o.prototype.connect = function() {
this._handler = function(t) {
this._onData(t)
}.bind(this), this._boundOnChartSessionIsConnectedChanged = this
._onChartSessionIsConnectedChanged.bind(this), this._chartSession.isConnected()
.subscribe(this._boundOnChartSessionIsConnectedChanged), this._chartSession
.criticalError().subscribe(this, this._onChartSessionCriticalError), this
._chartSession.connect(this._handler)
}, o.prototype.finishInitWithoutConnect = function() {
this._chartSession.disable(), this._init(), this.chartWidgetInitialized.fire()
}, o.prototype.reconnect = function() {
this._chartSession.disconnect(), this._chartSession.connect()
}, o.prototype.update = function() {
if (this._model) {
for (var t = 0; t < this._paneWidgets.length; t++) this._paneWidgets[t].update();
this._timeAxisWidget.update()
}
}, o.prototype.paint = function(t) {
t || (t = new A(A.FULL_UPDATE));
for (var e = 0; e < this._paneWidgets.length; e++) this._paneWidgets[e].paint(t
.invalidateForPane(e), !1);
this._timeAxisWidget && this._timeAxisWidget.paint(t.fullInvalidation()), this
._redrawPanes.fire()
}, o.prototype._makeDefaultGui = function() {
this._makeChartWidget(), this._makeLoadingScreen(), this._makeMasterTable(), this
._makeTimeAxisWidget(), this._adjustSize(), this._updateScalesActions(), $("*", this
._jqMainTable).selectable(!1), this.update(), this.paint()
}, o.prototype.widget = function() {
return this._jqMainDiv
}, o.prototype.restoreState = function(t, e) {
this._adjustSize(), this._model.restoreState(this._content, e), this._setActions()
},
o.prototype.redrawPanes = function(t) {
for (var e = 0; e < this._paneWidgets.length; e++) this._paneWidgets[e].paint();
this._redrawPanes.fire()
}, o.prototype.setBackgroundColor = function(t) {
this.scaleBackgroundColor = t.value();
for (var e = 0; e < this._paneWidgets.length; e++) this._paneWidgets[e].paint(), this
._paneWidgets[e].setCursorForTool();
this.update(), this.paint()
}, o.prototype.setScaleLineColor = function(t) {
this.scaleLineColor = t.value(), $.each(this._paneSeparators, function() {
this.update()
}), this.update(), this.paint()
}, o.prototype.setScaleTextColor = function(t) {
this.scaleTextColor = t.value(), this.update(), this.paint()
}, o.prototype.setTimingsMeter = function(t) {
this._timingsMeter = t, this._updateTimingsMeterState()
}, o.prototype._updateTimingsMeterState = function() {
var t = this._options.visible.value();
null !== this._timingsMeter && (t ? this._timingsMeter.startCollect() : this
._timingsMeter.stopCollect())
}, o.prototype._update = function(t) {
var e, i = t ? t.fullInvalidation() : A.FULL_UPDATE;
if (null !== this._timingsMeter && this._timingsMeter.startDraw(i), i === A
.FULL_UPDATE) {
for (this._model ? this._updateGui() : this._adjustSize(), this._timeAxisWidget
.update(), e = 0; e < this._paneWidgets.length; e++) this._paneWidgets[e]
._state = this._model.panes()[e], this._paneWidgets[e].statusWidget()
.updateLayout();
this._dataWindowWidget && this._dataWindowWidget.fullUpdate()
} else if (i === A.LIGHT_UPDATE) {
for (this._timeAxisWidget.update(), e = 0; e < this._paneWidgets.length; e++) this
._paneWidgets[e].statusWidget().update();
this._dataWindowWidget && this._dataWindowWidget.update()
} else if (i === A.UPDATE_CURSOR_ONLY) {
for (e = 0; e < this._paneWidgets.length; e++) this._paneWidgets[e].statusWidget()
.update();
this._dataWindowWidget && this._dataWindowWidget.update()
}
this.paint(t), null !== this._timingsMeter && this._timingsMeter.stopDraw()
}, o.prototype._createVolumeIfNeeded = function() {
var t = _.enabled("create_volume_indicator_by_default") && this._options.addVolume,
e = !this._content,
i = _.enabled("charting_library_base"),
o = _.enabled("create_volume_indicator_by_default_once"),
n = this._content && !this._content.loading;
t && (e || i && n && !o) && this._model.mainSeries().onSymbolResolved().subscribe(this,
function() {
var t = this;
setTimeout(function() {
var e, i, o, n, r = t._model.model().mainSeries().symbolInfo();
r && (e = !r.has_no_volume, !t.containsVolume() && e ? (i =
TradingView.factoryDefaults(
"chartproperties.volumePaneSize"), o = {
paneSize: i
}, _.enabled("hide_volume_ma") && (o.styles = {
vol_ma: {
visible: !1
}
}), t.insertStudy("Volume@tv-basicstudies", !1, _
.enabled("volume_force_overlay"), void 0, o)) :
!e && t.containsVolume() && (n = t.model().dataSources()
.filter(function(t) {
return t instanceof y && "Volume" === t
.metaInfo().shortId
})[0], t._model.model().removeSource(n)))
}, 0)
}, o)
}, o.prototype._restartModel = function() {
(function() {
this._model.restart()
}).bind(this)()
}, o.prototype._makeDefaultModel = function() {
function t() {
return c(l._chartSession, function(t) {
if (!(t instanceof A)) throw Error("Invalid mask");
l._invalidateMask ? l._invalidateMask.merge(t) : l._invalidateMask = t,
l._draw_planned || (l._draw_planned = !0, l._options.visible.when(
function() {
var t = !document.hidden,
i = l.screen && l.screen.isShown();
null !== l._timingsMeter && t && !i && l._timingsMeter
.startWaitingDraw(), l._drawRafId =
requestAnimationFrame(e)
}))
}, l._properties, l.readOnly(), n, l._studiesMetaData, l._studiesMigrations,
l, l._options.undoHistory, l._options.barsMarksContainersFactory)
}
function e() {
l._draw_planned = !1, l._drawRafId = 0, l._inLoadingState || l._invalidateMask && (l
._invalidateMask = l._update(l._invalidateMask))
}
var i, n, r, s, a, l = this;
if (this._content && this._content.timeScale.points && (i = this._content.timeScale
.points.items[0], n = {
startDate: i
}), !this._studiesMetaData) throw Error(
"Cannot create chart model: studies metainfo is absent");
if (_.enabled("lean_chart_load") ? this._model = this._model || t() : this._model = t(),
this._createVolumeIfNeeded(), r = function() {
var t, e;
this._model.onTagsChanged().subscribe(this, o.prototype.onModelTagsChanged),
this._updateGui(), this._modelCreated.fire(this._model), this._tagsChanged
.fire(), t = this._model.mainSeries(), this._defTimeframe && t
.setDefaultTimeframe(this._defTimeframe), this._model.lineCancelled()
.subscribe(this, this.onLineCancelled), t.onSymbolNotPermitted().subscribe(
null,
function(e) {
t.properties().symbol.setValue(e)
}), t.properties().style.unsubscribe(this, this._onChartStyleChanged), t
.properties().style.subscribe(this, this._onChartStyleChanged), e = this
._options, e.handleSessionErrors && (t.chartTypeNotPermitted.subscribe(null,
function() {
t.properties().interval.setValue("D")
}), t.intradaySpreadNotPermitted.subscribe(null, function() {
t.properties().interval.setValue("D")
}), t.customIntervalNotPermitted.subscribe(null, function() {
t.properties().interval.setValue("D")
}), t.intradayExchangeNotPermitted.subscribe(null, function() {
t.properties().interval.setValue("D")
}), l._options.muteSessionErrors || t.onExtendedHoursNotPermitted()
.subscribe(null, function() {})), this._options.handleSessionErrors && (
t.requestingIntradayWhenNotSupported.subscribe(null, function() {
t.properties().interval.setValue("D"), l._options
.muteSessionErrors || TVDialogs.showIntervalMismatchDialog()
}), t.requestingResolutionWhenNotSupported.subscribe(null, function(e) {
t.properties().interval.setValue(e)
}))
}.bind(this), this._content) {
if (this.restoreState(this._content, this._containsData), _.enabled(
"chart_content_overrides_by_defaults")) return this._defSymbol && (s = this
.setSymbol(this._defSymbol), this.applyAutoScaleOnNewSymbol()), a =
function() {
return this._defInterval && this.setResolution(this._defInterval),
void 0 !== this._defStyle && this.setSeriesStyle(this._model
.mainSeries(), this._defStyle), r()
}.bind(this), void 0 === s ? a() : s.then(a)
} else this._setActions();
return r()
}, o.prototype._onChartStyleChanged = function() {
U("Chart", "Chart Style " + this._model.mainSeries().getStyleShortName().toUpperCase())
}, o.prototype._updateGui = function() {
this._model && (this._makePaneWidgetsAndSeparators(), this._makeTimeAxisWidget(), $("*",
this._jqMainTable).selectable(!1), this._adjustSize())
}, o.prototype.setVisibleTimeRange = function(t, e, i) {
this._chartSession.setVisibleTimeRange(this._model.mainSeries(), t, e, i)
}, o.prototype._dateRangeResolutions = function() {
return ChartApiInstance.availableTimeFrames(this._model.mainSeries().symbolInfo(), this
._model.mainSeries().status()) || []
}, o.prototype._makeChartWidget = function() {
this._jqMainDiv = $(document.createElement("div")), this._jqMainDiv.addClass(
"chart-widget"), this._tooltipDiv = $(document.createElement("div")).appendTo(
this._jqMainDiv), this._tooltipDiv.addClass("tooltip-wrapper"), this
._withDateRanges && (!_.enabled("lean_chart_load") || !this._chartControlsBar) && (
this._chartControlsBar = $(document.createElement("div")).attr("class",
"chart-controls-bar").appendTo(this._jqParent), this._seriesControlWidget =
new I({
parent: this._chartControlsBar,
chartWidget: this
})), (this._options.controlBar || _.enabled("control_bar")) && (this
._controlBarNavigation = new L(this, this._jqMainDiv, !0)), this
._containsData || this.createIndicatorImage()
}, o.prototype._makeLoadingScreen = function() {
if (_.enabled("lean_chart_load")) {
if (this.screen) return;
this.screen = new o.LoadingScreen(this, this._jqParent)
} else this.screen = new o.LoadingScreen(this, this._jqMainDiv)
}, o.prototype._setSymbol = function(t, e) {
if (this._model) {
var i = this._model.mainSeries();
if (!e && i.symbolSameAsCurrent(t) && !_.enabled("same_data_requery")) return;
this._model.setSelectedSource(null), this._model.setScreenChartProperty(i
.properties().symbol, t, this, "Change Symbol", _.enabled(
"same_data_requery"))
} else this._properties.mainSeriesProperties.merge({
symbol: t
})
}, o.prototype.setSymbol = function(t, e) {
return this._setSymbol.apply(this, arguments)
}, o.prototype.getSymbol = function(t) {
var e;
return e = this._model ? this._model.mainSeries().properties() : this._properties
.mainSeriesProperties, e ? t && e.shortName && e.shortName.value() ? e.shortName
.value() : e.symbol.value() : ""
}, o.LoadingScreen = function(t, e) {
this._cw = t, this.$element = $('<div class="chart-loading-screen">'), this.$shield = $(
'<div class="chart-loading-screen-shield">').appendTo(this.$element), this
.$element.appendTo(e), this._showed = !1, this._cw.withModel(this, this
._connectToModel)
}, o.LoadingScreen.prototype._connectToModel = function() {
this._cw.model().mainSeries().onDataLoaded().subscribe(this, function(t) {
switch (t.method) {
case "symbol_error":
t.params[1] !== p.PERMISSION_DENIED && this.hide();
break;
case "series_error":
_.enabled("hide_loading_screen_on_series_error") && this.hide();
break;
case "series_completed":
this.hide()
}
})
}, o.LoadingScreen.prototype.show = function() {
return this._cw._inLoadingState = !0, this._showed || (this._showed = !0, this._show()),
$.Deferred().resolve()
}, o.LoadingScreen.prototype._show = function() {
var t = this._cw.properties().paneProperties.background.value();
this.$shield.css("background", t), this.$element.addClass("fade")
}, o.LoadingScreen.prototype.hide = function() {
delete this._cw._inLoadingState, this._showed && this._hide()
}, o.LoadingScreen.prototype._hide = function() {
this._showed = !1, this.$element.removeClass("fade")
}, o.LoadingScreen.prototype.$canvas = null, o.LoadingScreen.prototype.context = null, o
.LoadingScreen.prototype.isShown = function() {
return this._showed
}, o.prototype._makeMasterTable = function() {
this._jqMainTable = $(document.createElement("table")),
this._jqMainTable.appendTo(this._jqMainDiv), this._jqMainTable.addClass(
"chart-markup-table"), this._jqMainTable.attr("cellpading", "0"), this
._jqMainTable.attr("cellspacing", "0")
}, o.prototype.unsetActivePaneWidget = function() {
this.activePaneWidget = !1
}, o.prototype.setActivePaneWidget = function(t) {
this.activePaneWidget = t
}, o.prototype.isMaximizedPane = function() {
return !!this._maximizedPaneWidget
}, o.prototype.toggleMaximizePane = function(t) {
if (!(this._paneWidgets.length < 2)) {
this._maximizedPaneWidget ? (this._maximizedPaneWidget.state().setMaximized(!1),
this._maximizedPaneWidget = null, this._paneSeparators.forEach(function(t) {
t.show()
})) : (this._maximizedPaneWidget = t, this._maximizedPaneWidget.state()
.setMaximized(!0), this._paneSeparators.forEach(function(t) {
t.hide()
}));
for (var e = this._paneWidgets.length; e--;) this._paneWidgets[e].updateControls();
this._adjustSize(), this.updateIndicatorImagePosition()
}
}, o.prototype._makePaneWidgetsAndSeparators = function() {
var t, e, i, o, n = this._model.panes(),
r = n.length,
s = this._paneWidgets.length;
for (t = r; t < s; t++) e = this._paneWidgets.pop(), e.jqRow.remove(), e.jqRow.find("*")
.remove(), e.destroy(), (i = this._paneSeparators.pop()) && i.jqRow.remove();
for (t = s; t < r; t++) e = new a(this, n[t], this._onWidget, this._options
.verticalTouchScroll), e.onMouseLeave = this.unsetActivePaneWidget.bind(this), e
.onMouseEnter = this.setActivePaneWidget.bind(this), this._paneWidgets.push(e), t >
0 && (i = new l(this, t - 1, t), this._paneSeparators.push(i), this
._timeAxisWidget ? i.jqRow.insertBefore(this._timeAxisWidget.jqRow) : i.jqRow
.appendTo(this._jqMainTable)), this._timeAxisWidget ? e.jqRow.insertBefore(this
._timeAxisWidget.jqRow) : e.jqRow.appendTo(this._jqMainTable);
for (t = 0; t < r; t++) o = n[t], e = this._paneWidgets[t], e.state() !== o && e
.setState(o);
for (t = r; t--;) this._paneWidgets[t].updateControls()
}, o.prototype._makeTimeAxisWidget = function() {
this._timeAxisWidget || (this._timeAxisWidget = new u(this, this._onWidget), this
._timeAxisWidget.jqRow.appendTo(this._jqMainTable))
}, o.prototype.insertStudyOrShowDialog = function(t, e) {
var i, o, n, r, s, a, l, c;
this.isSymbolicStudy(t) ? (i = defaults("study_" + t.id).description, o = $(
'<input type="text" class="symbol-edit single" placeholder="' + window.t(
"Symbol") +
'" maxlength="30" style="text-transform: none; font-weight: normal;" autocomplete="off">'
), o.css({
float: "none",
"box-sizing": "border-box",
width: "100%"
}), n = null, r = F({
title: i || window.t("Add Symbol"),
width: 400,
actions: [{
name: "apply",
text: window.t("Apply"),
type: "primary"
}],
content: o,
isClickOutFn: function(t) {
if (n && (t.target === n[0] || n[0].contains(t.target)))
return !1
}
}), s = function(i) {
var o = {
inputs: {}
};
o.inputs[t.symbolInputId()] = i, this.model().insertStudy(t, o, !1, e), r
.close()
}, a = V.bindToInput(o, {
callback: s.bind(this),
onPopupOpen: function(t) {
t.css("z-index", r.zIndex), n = t
},
onPopupClose: function() {
n = null
}
}), r.on("action:apply", function() {
a.acceptTypeIn()
}), r.open()) : this.hasConfirmInputs(t) ? (i = defaults("study_" + t.id)
.description, G.show(this, t, {
title: i,
callback: function(i) {
this.model().insertStudy(t, i, !1, e)
}.bind(this)
})) : y.isPointsBasedStudy(t.id) ? (l = y.lineToolNameForPointsBasedStudy(t.id),
x.tool.setValue(l)) : (c = "Volume@tv-basicstudies" === t.id, this.insertStudy(t
.id, !0, c, null, null, e))
}, o.prototype.hasConfirmInputs = function(t) {
var e, i, o = t.inputs;
if (void 0 === o) return !1;
for (e = 0; e < o.length; ++e)
if (i = o[e], void 0 !== i.confirm && i.confirm) return !0;
return !1
}, o.prototype.isSymbolicStudy = function(t) {
switch (t.id) {
case "Overlay@tv-basicstudies":
case "CorrelationCoefficient@tv-basicstudies":
case "Correlation Coeff@tv-basicstudies":
return !0;
default:
return !1
}
}, o.prototype.isPointsBasedStudy = function(t) {
return y.isPointsBasedStudy(t.id)
}, o.prototype.insertStudy = function(t, e, i, o, n, r) {
var a, l = W.findStudyMetaInfo(this._studiesMetaData, t);
l = TradingView.clone(l), s(!l.isTVScriptStubToCompile,
"MetaInfo stub is unexpected here!"), a = o ? {
inputs: o
} : {}, n && (a = $.extend(a, n)), e ? this._model.insertStudy(l, a, i, r) : this
._model.model().insertStudy(l, a, i, r)
}, o.prototype.insertStudyStub = function(t) {
return this.model().insertStudyStub(t)
}, o.prototype.removeStudyStub = function(t) {
return this.model().removeStudyStub(t)
}, o.prototype._adjustSize = function() {
var t, e, i, o, n, r, s, a, c = this,
u = 0,
d = 0,
p = 0;
$.each(this._paneWidgets, function() {
c._maximizedPaneWidget && c._maximizedPaneWidget !== this || (u = Math.max(
this.lhsPriceAxisWidget.optimalWidth(), u), d = Math.max(this
.rhsPriceAxisWidget.optimalWidth(), d), p += this
.stretchFactor())
}), t = this._width.value(), e = this._height.value(), this._chartControlsBar && (
e = Math.max(e - this.controlBarHeight, 0)), i = t - u - d, o = this
._paneSeparators.length, n = l.HEIGHT, r = this._timeAxisWidget.optimalHeight(), s =
e - n * o - r, a = s / p, this._jqMainTable.width(t), this._jqMainTable.height(e),
this._jqMainDiv.width(t), this._jqMainDiv.height(e), $.each(this._paneWidgets,
function(t) {
c._model && (this._state = c._model.panes()[t]);
var e = c._maximizedPaneWidget ? c._maximizedPaneWidget === this ? s : 0 :
Math.max(Math.round(this.stretchFactor() * a), 2);
this.setPriceAxisSize(h.LHS, new q(u, e)), this.setPriceAxisSize(h.RHS,
new q(d, e)), this.setSize(new q(i, e)), c._model && this.state() &&
c._model.setPaneHeight(this.state(), e)
}), this._timeAxisWidget.setSize(new q(i, r), new q(u, r), new q(d, r)), this
._model && this._model.setWidth(i), this.maxLhsPriceAxisWidth !== u && (this
.maxLhsPriceAxisWidth = u, this.lhsPriceAxisWidthChanged.fire(u)), this
.maxRhsPriceAxisWidth !== d && (this.maxRhsPriceAxisWidth = d, this
.rhsPriceAxisWidthChanged.fire(d))
}, o.prototype._onChartSessionIsConnectedChanged = function(t) {
t ? this._onConnection() : this._onDisconnect()
}, o.prototype._onChartSessionCriticalError = function(t, e) {
this._disconnected.fire(!0)
}, o.prototype._onData = function(t) {
switch (t.method) {
case "reconnect_bailout":
this._reconnectBailout.fire();
break;
default:
this._model.onData(t)
}
}, o.prototype._nextMetadataId = 1, o.prototype._onConnection = function() {
this._online = !0, this._model ? (this._restartModel(), this._updateGui(), this
.update(), this.paint(), this._connected.fire()) : this.requestMetadata()
}, o.prototype._onDisconnect = function() {
this._model && this._model.disconnect(), this._online = !1, this.update(), this.paint(),
this._disconnected.fire()
}, o.prototype._applyStudiesOverrides = function() {
W.overrideDefaults(this._studiesMetaData)
},
o.prototype.requestMetadata = function() {
_.enabled("charting_library_base") && this._chartSession.requestMetadata("metadata_" + o
._nextMetadataId,
function(t) {
var e, i = t.params[1];
for (e = 0; e < i.length; ++e) W.addOrReplaceStudyMetaInfo(this
._studiesMetaData, r(i[e]));
this._studiesMetaData = this._studiesMetaData.sort(function(t, e) {
var i = t.description_localized || t.description,
o = e.description_localized || e.description;
return i > o ? 1 : i < o ? -1 : 0
}), this._applyStudiesOverrides(), this._inited || (this._init(), this
.chartWidgetInitialized.fire())
}.bind(this)), o._nextMetadataId++
}, o.prototype.studiesMetaData = function() {
return this._model.studiesMetaData()
}, o.prototype.getTimeScale = function() {
return this._timeAxisWidget
}, o.prototype.setSeriesStyle = function(t, e) {
this._model.setProperty(t.properties().style, e)
}, o.prototype.showSourceProperties = function(t) {
var e = this;
i.e(6).then(function(t) {
new(0, i(1192).ObjectTreeDialog)({
chartWidget: e
}, e._model).show()
}.bind(null, i)).catch(i.oe)
}, o.prototype.showChartProperties = function(t) {
if (!_.enabled("show_chart_property_page")) return Promise.resolve();
t && t.text === window.t("Properties...") && TVSettings.setValue(
"properties_dialog.active_tab.chart", window.t("Style"));
var e = this;
return new Promise(function(t) {
g(e._model.mainSeries(), e._model, {
doNotCloseOnBgClick: !0
}).then(function(e) {
t(e.isVisible() ? e._dialog : null)
})
})
}, o.prototype.showScriptEditor = function() {
TradingView.bottomWidgetBar && TradingView.bottomWidgetBar.activateScriptEditorTab()
}, o.prototype.showCompareOrAdd = function() {
new M(this._chartWidgetCollection).show()
}, o.prototype.showIndicators = function(t) {
if (window.studyMarket) return window.studyMarket.isVisible() ? void window.studyMarket
.hide() : (window.studyMarket.show(t), window.studyMarket)
}, o.prototype.showScalesProperties = function(t) {
g(this._model.mainSeries(), this._model, {
selectScales: !0
})
}, o.prototype.showTimezoneProperties = function() {
g(this._model.mainSeries(), this._model, {
selectTmz: !0
})
}, o.prototype.removeSelectedSource = function() {
var t, e = this,
i = e._model.selectedSource();
!i || i === e._model.mainSeries() || i === e._model.lineBeingCreated() ||
i instanceof d || (i.hasAlert.value() && i.isUserDeletable() ? (t = Y({
type: "modal",
content: window.t(
"This drawing is used in alert. If you remove the drawing, the alert will be also removed. Do you want to remove the drawing anyway?"
)
}), t.on("action:yes", function(t) {
e._model.removeSelectedSource(), t.close()
}), t.open()) : i instanceof y && i.hasChildren() ? showDeleteStudyTreeConfirm(e
._model.removeSelectedSource.bind(e._model)).open() : e._model
.removeSelectedSource())
}, o.prototype.unlinkSelectedLine = function() {
var t = this._model.selectedSource();
t instanceof S && this._model.unlinkLine(t)
}, o.prototype.copyLineToOtherCharts = function() {
var t = this._model.selectedSource();
t instanceof S && this._model.copyToOtherCharts(t)
}, o.prototype.hideSelectedObject = function() {
var t = this._model.selectedSource();
t && this._model.setProperty(t.properties().visible, !1, "Hide " + t.title())
}, o.prototype.toggleLockSelectedObject = function() {
var t, e = this._model.selectedSource();
e && (t = e.properties().frozen.value(),
this._model.setProperty(e.properties().frozen, !t, (t ? window.t("Unlock") :
window.t("Lock")) + " " + e.title()))
}, o.prototype.editSelectedObject = function(t) {
var e = this._model.selectedSource();
e && g(e, this._model)
}, o.prototype.openSelectedObjectSource = function(t) {}, o.prototype
.resetPriceAxisOptimalWidth = function(t) {
$.each(this._paneWidgets, function() {
this.resetPriceAxisOptimalWidth(t)
}), this._redrawPanes.fire()
}, o.prototype.adjustPriceAxisWidth = function(t) {
this.resetPriceAxisOptimalWidth(t), this._adjustSize()
}, o.prototype.setPriceAxisVisible = function(t, e) {
$.each(this._paneWidgets, function() {
this.setPriceAxisVisible(t, e)
}), this._timeAxisWidget.setStubVisible(t, e), this._adjustSize(), this._redrawPanes
.fire()
}, o.prototype.setTimeAxisVisible = function(t) {
this._timeAxisWidget.setVisible(t), this._adjustSize()
}, o.prototype.isTextTool = function(t) {
switch (t) {
case "LineToolBalloon":
case "LineToolText":
case "LineToolTextAbsolute":
case "LineToolCallout":
case "LineToolNote":
case "LineToolNoteAbsolute":
return !0
}
return !1
}, o.prototype.tags = function() {
return this._model ? this._model.calculateDefaultTags() : []
}, o.prototype.state = function(t, e) {
return this._model.state(t, e)
}, o.prototype.asyncState = function(t) {
return this._model.asyncState(t)
}, o.prototype.metaInfo = function() {
var t = this._metaInfo;
return this._model && (t.systemTags = this._model.calculateDefaultTags()), t
}, o.prototype.image = function() {
var t, e, i, o, n, r, s, a, l = document.createElement("canvas"),
c = l.getContext("2d"),
h = 0,
u = this._timeAxisWidget.size.h,
d = this.properties().scalesProperties.lineColor.value();
for (e = 0; e < this._paneWidgets.length; e++)(t = this._paneWidgets[e]) && t.state() &&
(t.state().recalculate(!0), 0 === e && (h = t.lhsPriceAxisWidget.size.w + t.size.w +
t.rhsPriceAxisWidget.size.w), u += t.size.h);
for (u += this._paneWidgets.length - 1, this._update(), i = 25, o = 5, l.width = h + 2 *
o, l.height = u + i + 2 * o, c.fillStyle = "#F2F5F8", c.fillRect(0, 0, l.width, l
.height), n = i + o, r = o, s = this.mainSeriesQuotesAndMetainfo(), s.ohlc && (
a = "{0} O:{1} H:{2} L:{3} C:{4}".format(s.meta.symbol, s.ohlc[0], s.ohlc[1], s
.ohlc[2], s.ohlc[3]), c.fillStyle = "#000", c.font = "12px Verdana, Arial",
c.fillText(a, r, o + 15)), e = 0; e < this._paneWidgets.length; e++) t = this
._paneWidgets[e], c.drawImage(t.lhsPriceAxisWidget.canvas, r, n), c.drawImage(t
.canvas, r + t.lhsPriceAxisWidget.size.w, n), t.statusWidget().renderTo(c, r +
5, n + 5), c.drawImage(t.rhsPriceAxisWidget.canvas, r + t.lhsPriceAxisWidget
.size.w + t.size.w, n), n += t.size.h, e < this._paneWidgets.length - 1 && (c
.fillStyle = d, c.fillRect(r, n, h, 1), n++);
return c.drawImage(this._timeAxisWidget.lhsCanvas, r, n), c.drawImage(this
._timeAxisWidget.canvas, r + t.lhsPriceAxisWidget.size.w, n), c.drawImage(this
._timeAxisWidget.rhsCanvas, r + t.lhsPriceAxisWidget.size.w + t.size.w, n), c
.lineWidth = 1, c.strokeStyle = "#000", c.strokeRect(o + .5, i + o + .5, h - 1, u -
1), l
}, o.prototype.images = function() {
function t(t) {
var e, o, n, r, s, a;
for (t.paint(A.LIGHT_UPDATE, i._onWidget), e = t.image(i._onWidget), e
.containsMainSeries = t.containsMainSeries(), e.studies = [], o = t.state()
.dataSources(), n = 0; n < o.length; n++) r = o[n], s = i.properties()
.paneProperties.legendProperties, a = r.statusView(),
r instanceof y ? r.properties().visible.value() && a && s.showStudyTitles
.value() && s.showLegend.value() && e.studies.push(r.statusView().text()) :
r instanceof p && a && s.showLegend.value() && s.showSeriesTitle.value() && (e
.mainSeriesText = r.statusView().text());
return e
}
var e, i, o, n, r, s, a;
if (TradingView.printing = !0, e = this._model.selectedSource(), this._model
.setSelectedSource(null), i = this, o = [], this.isMaximizedPane()) o.push(t(this
._maximizedPaneWidget));
else
for (n = 0; n < this._paneWidgets.length; n++) r = this._paneWidgets[n], o.push(t(
r)), n < this._paneWidgets.length - 1 && o.push(this._paneSeparators[n]
.image());
return this._timeAxisWidget.paint(A.LIGHT_UPDATE), s = this._timeAxisWidget.image(),
TradingView.printing = !1, this._model.setSelectedSource(e), this._model.invalidate(
new A(A.LIGHT_UPDATE)), a = this.mainSeriesQuotesAndMetainfo(), {
panes: o,
timeAxis: s,
colors: {
text: this.properties().scalesProperties.textColor.value(),
bg: this.properties().paneProperties.background.value(),
scales: this.properties().scalesProperties.lineColor.value()
},
meta: a.meta,
ohlc: a.ohlc,
quotes: a.quotes
}
}, o.prototype.mainSeriesQuotesAndMetainfo = function() {
var t, e, i, o, n, r, s, a = this._model.mainSeries();
return a && (o = function(t) {
return null == t ? "" : a.formatter().format(t) + ""
}, n = function(t) {
return null == t ? "" : t + ""
}, t = {
resolution: a.interval(),
symbol: a.symbol()
}, r = a.symbolInfo(), r && (t.symbol = r.full_name, t.description = r
.description, t.exchange = r.exchange), s = a.bars().last(), null !== s && (
e = s.value.slice(1, 5).map(o)), a.quoteData && (i = {
change: o(a.quoteData.change),
changePercent: n(a.quoteData.change_percent),
last: o(a.quoteData.last_price)
})), {
meta: t,
ohlc: e,
quotes: i
}
}, o.prototype.onTagsChanged = function() {
return this._tagsChanged
}, o.prototype.onModelTagsChanged = function() {
this._tagsChanged.fire()
}, o.prototype.destroy = function() {
var t, e, i;
for (0 !== this._drawRafId && cancelAnimationFrame(this._drawRafId), this._model.model()
.destroy(), null !== this._timingsMeter && (this._timingsMeter.stopCollect(), this
._timingsMeter = null), this._chartSession.criticalError().unsubscribe(this,
this._onChartSessionCriticalError), this._chartSession.isConnected()
.unsubscribe(this._boundOnChartSessionIsConnectedChanged), this._chartSession
.destroy(), t = 0; t < this._paneWidgets.length; t++) this._paneWidgets[t]
.destroy();
this._paneWidgets.length = 0, this._controlBarNavigation && (this._controlBarNavigation
.destroy(), this._controlBarNavigation = void 0), $(window).off(
"visibilitychange:chart_" + this._guid), $(window).off("keydown:chart_" + this
._guid);
for (e in this._actions) i = this._actions[e], i.setActive(!1), i.binder && i.binder
.destroy()
}, o.prototype.title = function() {
return window.t("Chart Properties")
}, o.prototype.symbolProperty = function() {
return this._model.mainSeries().properties().shortName ? this._model.mainSeries()
.properties().shortName : this._model.mainSeries().properties().symbol
}, o.prototype.loadContent = function(t, e) {
var i, o, n, r, s, a;
for (this.screen.show(), i = this, this.isMaximizedPane() && this.toggleMaximizePane(),
o = i._model.model().dataSources(), n = 0; n < o.length; n++)(r = o[n]) !== i._model
.mainSeries() && i._model.model().removeSource(r, !0);
for (this._model.disconnect(), i._jqMainDiv && (i._jqMainDiv.remove(), i._jqMainDiv =
null), i._timeAxisWidget = null, i._paneWidgets = [], i.activePaneWidget = !1, i
._model.mainSeries().purgeSymbolInfo(), t.loading = !0, i._setContent(t), n = 0; n <
t.panes.length; ++n)
for (a = 0; a < t.panes[n].sources.length; ++a)
if (t.panes[n].sources[a].state.symbol) {
s = t.panes[n].sources[a].state;
break
} if (!s) throw Error(
"An error occured while determining main series ion the chart");
i._properties.mainSeriesProperties.merge({
visible: !0,
symbol: s.symbol,
timeframe: "",
onWidget: i._onWidget,
interval: s.interval || "D",
style: s.style
}), i._init(), E.interval.setValue(s.interval), i._model.undoHistory.clearStack(), i
.updateSeriesControlUI()
}, o.prototype._setContent = function(t) {
t && t.panes.forEach(function(t) {
t.sources = t.sources.filter(function(t) {
return !!t && ("MainSeries" === t.type || (!t.points || !t
.points.some(function(t) {
return null === t.time_t || !isFinite(t
.time_t)
}) || (X.logNormal("Dropped invalid " + t.type +
". Reason: non-numeric point time"), !1)))
});
var e = function(e) {
return t.sources && t.sources.some(function(t) {
return t.id === e
})
};
t.leftAxisSources && (t.leftAxisSources = t.leftAxisSources.filter(e)), t
.rightAxisSources && (t.rightAxisSources = t.rightAxisSources.filter(e))
}), this._content = t
}, o.prototype._contentSeriesProperties = function() {
var t, e, i;
if (this._content)
for (t = this._content.panes.length; t-- > 0;)
for (e = this._content.panes[t].sources, i = e.length; i-- > 0;)
if ("MainSeries" === e[i].type) return e[i].state
}, o.prototype.updateSeriesControlUI = function() {
this._seriesControlWidget && this._seriesControlWidget.updateUI()
}, o.prototype.tickSeriesControlClock = function() {
this._seriesControlWidget && this._seriesControlWidget.tickClock()
}, o.prototype.resizeSeriesControlUI = function() {
this._seriesControlWidget && this._seriesControlWidget.resizeUI()
}, o.prototype.updateUndoRedo = function() {
this._model && (this.actions().undo.setEnabled(!this._model.undoHistory.undoStack()
.isEmpty()), this.actions().redo.setEnabled(!this._model.undoHistory
.redoStack().isEmpty()))
}, o.prototype.createSessionBreaksActions = function(t) {
var e, i = this,
o = function() {
e = new T({
text: window.t("Session Breaks"),
checkable: !0,
statName: "ToggleSessionBreaks"
}), e.binder = new m(e, i.model().mainSeries().sessionsStudy().properties()
.graphics.vertlines.sessBreaks.visible, i.model(), "Session Breaks"), i
._actions.sessionBreaks = e
};
i.model().mainSeries().sessionsStudy() ? o() : i.model().mainSeries()
.onSessionsStudyCreated().subscribe(i, function() {
o()
})
}, o.prototype.updateActionForIntradayOnly = function(t) {
!t || !t instanceof T || t.setEnabled(!!this.model().mainSeries().isIntradayInterval())
}, o.prototype.withModel = function(t, e) {
this.model() ? e.call(t) : this.modelCreated().subscribe(t, e, !0)
}, o.prototype.containsVolume = function() {
return this.model().dataSources().some(function(t) {
return t instanceof y && "Volume" === t.metaInfo().shortId
})
}, o.prototype.containsStudyByPredicate = function(t) {
return !!this._model && this._model.dataSources().some(function(e) {
if (!(e instanceof y)) return !1;
var i = e.metaInfo();
return t(i)
})
}, o.prototype.containsStudy = function(t) {
return this.containsStudyByPredicate(function(e) {
return e.id === t || e.fullId === t
})
}, o.prototype.containsSessions = function() {
return this.model().dataSources().some(function(t) {
return t instanceof y && "Sessions" === t.metaInfo().shortId
})
}, o.prototype.isSmall = function() {
return this._width.value() < 550 || this._height.value() < 300
};
o.prototype.onWidget = function() {
return this._onWidget
}, o.prototype.onCmeWidget = function() {
return "cme" === this.widgetCustomer()
}, o.prototype.widgetCustomer = function() {
return this._widgetCustomer
}, o.prototype.resize = function() {
this._resizeHandler && this._jqMainDiv && this._resizeHandler()
}, o.prototype.chartSession = function() {
return this._chartSession
}, o.prototype.maxLhsPriceAxisWidth = 0, o.prototype.maxRhsPriceAxisWidth = 0, o.prototype
.GUIResetScales = function() {
U("GUI", "Reset Scales");
var t = this.model();
t && t.resetScales()
}, o.prototype.onLineCancelled = function() {
x.resetToCursor()
}, o.prototype.createIndicatorImage = function() {
var t = this;
this.indicatorImage = this._jqParent.find(".chart-status-picture"), 0 === this
.indicatorImage.length ? this.indicatorImage = $(
'<span class="chart-status-picture"></span>').appendTo(this._jqParent) : this
.indicatorImage.html(""), _.enabled("display_market_status") && (this
.indicatorText = $(
'<span class="series-status-text apply-common-tooltip"><span class="js-market-status tv-market-status--series-status"></span></span>'
), this.indicatorText.appendTo(this.indicatorImage), this.indicatorDot &&
this.indicatorDot.stop(), this.indicatorDot = new K({
el: this.indicatorText.find(".js-market-status")[0],
classSuffix: "--for-chart"
}), this.indicatorDot.start(), _.enabled("display_data_mode") && ($(
'<span class="js-data-mode tv-data-mode--series-status"></span>')
.appendTo(this.indicatorText), this.dataModeIndicator && this
.dataModeIndicator.stop(), this.dataModeIndicator = new Z({
el: this.indicatorText.find(".js-data-mode")[0],
classSuffix: "--for-chart"
}), this.dataModeIndicator.start())), t.withModel(null, function() {
var e = t._model.mainSeries();
e.onStatusChanged().subscribe(null, t.updateIndicatorImage.bind(t)), e
.marketStatus.subscribe(t.updateIndicatorImage.bind(t)), t
.updateIndicatorImage(), t.checkCompactMode(), t._model
.onRearrangePanes().subscribe(null, function() {
t.resetIndicatorSize(), t.resizeIndicator()
})
}), t.rhsPriceAxisWidthChanged.subscribe(t, t.updateIndicatorImagePosition), t
.updateIndicatorImagePosition()
}, o.prototype.updateIndicatorImage = function() {
var t, e, i, o = this,
n = this._model;
n && (t = n.mainSeries(), e = t.status(), i = t.quoteData ? t.quoteData
.update_mode_seconds : null, o._updateDataAndMarketStatus(t.marketStatus
.value(), e, i))
}, o.prototype.checkCompactMode = function() {
this._jqMainDiv && this._jqMainDiv.toggleClass("i-compact", this._jqMainDiv.width() <=
400), this.indicatorImage && (this._indicatorWidth = this.indicatorImage
.outerWidth())
}, o.prototype._updateDataAndMarketStatus = function(t, e) {
var i, o;
if (void 0 !== this.indicatorText) {
switch (e) {
case p.STATUS_LOADING:
case p.STATUS_RESOLVING:
i = "loading", this.indicatorDot.setStatus("loading");
break;
case p.STATUS_INVALID_SYMBOL:
i = "invalid", this.indicatorDot.reset();
break;
case p.STATUS_NO_BARS:
i = "forbidden";
break;
case p.STATUS_DELAYED:
i = "delayed";
break;
case p.STATUS_DELAYED_STREAMING:
i = "delayed_streaming";
break;
case p.STATUS_EOD:
case p.STATUS_PULSE:
i = "endofday";
break;
case p.STATUS_OFFLINE:
i = "connecting";
break;
case p.STATUS_SNAPSHOT:
i = "snapshot";
break;
case p.STATUS_READY:
i = "realtime";
break;
case p.STATUS_REPLAY:
i = "replay";
break;
default:
i = e, X.logWarn("unhandled data mode " + i)
}
_.enabled("display_data_mode") && this.dataModeIndicator.setMode(i), o = ["loading",
"invalid", "replay"
], !o.includes(i) && t ? this.indicatorDot.setStatus(t, !0) : "invalid" === i ?
this.indicatorDot.setStatus("invalid", !0) : "replay" === i && this.indicatorDot
.setStatus("replay"), this.resizeIndicator()
}
}, o.prototype.resetIndicatorSize = function() {
if (this._paneWidgets[0] && this._paneWidgets[0].legendWidget)
for (var t = 0; t < this._paneWidgets.length; t++) this._paneWidgets[t].legendWidget
.firstTitle().css("padding-right", "")
}, o.prototype.resizeIndicator = function() {
var t, e, i;
this._paneWidgets[0] && this._paneWidgets[0].legendWidget && this._indicatorWidth &&
this._paneWidgets[0].legendWidget.firstTitle().css("padding-right", this
._indicatorWidth + 10), _.enabled("display_market_status") && _.enabled(
"display_data_mode") && this.indicatorDot && this.dataModeIndicator && (this
.indicatorDot.isShortModeEnabled() && this.dataModeIndicator
.isShortModeEnabled() ? (t = [this.indicatorDot.getTooltipText(), this
.dataModeIndicator.getTooltipText()
], t = t.filter(function(t) {
return t
}), e = t.join(", "), this.indicatorText.attr("title", e)) : this.indicatorText
.attr("title", ""), this.indicatorText.trigger("common-tooltip-update")), this
.indicatorImage && (this._indicatorWidth = this.indicatorImage.outerWidth()), i =
this._width.value(), _.enabled("display_market_status") && this.indicatorDot && (i >
650 ? (this.indicatorDot.setTooltipEnabled(!1), this.indicatorDot
.disableShortMode()) : i > 550 ? (this.indicatorDot.setTooltipEnabled(!1),
this.indicatorDot.disableShortMode()) : (this.indicatorDot
.setTooltipEnabled(!1), this.indicatorDot.enableShortMode())), _.enabled(
"display_data_mode") && this.dataModeIndicator && (i > 650 ? (this
.dataModeIndicator.setTooltipEnabled(!1), this.dataModeIndicator
.disableShortMode()) : i > 550 ? (this.dataModeIndicator.setTooltipEnabled(!
0), this.dataModeIndicator.enableShortMode()) : (this.dataModeIndicator
.setTooltipEnabled(!1), this.dataModeIndicator.enableShortMode()))
}, o.prototype.updateIndicatorImagePosition = function() {
var t = this.indicatorImage;
this.indicatorImage && t.css("marginRight", this.maxRhsPriceAxisWidth)
}, o.prototype._startSpinner = function(t) {
if (!this._spinner) {
var e = $(t).get(0);
e && (this._spinner = H("", {
zIndex: "auto"
}).spin(e))
}
}, o.prototype.isJustClonedChart = function() {
return !!(this._options || {}).justCloned
}, o.prototype.getLastPaneLeftBottom = function() {
var t = this._paneWidgets[this._paneWidgets.length - 1].jqPane,
e = t.offset();
return {
left: e.left,
bottom: $(document.body).height() - e.top - t.height()
}
}, o.prototype.setDataWindowWidget = function(t) {
this._dataWindowWidget = t
}, o.prototype.removeDataWindowWidget = function() {
this._dataWindowWidget = null
}, _.enabled("datasource_copypaste") && (o.prototype.onAppClipboardPaste = function(t, e) {
X.logDebug("[[paste]]"), this._model && this._model.pasteSourceFromClip(t, e)
}, o.prototype.onAppClipboardCopy = function(t) {
if (t || (t = this._model.selectedSource()), t instanceof y && t.isChildStudy())
return void X.logDebug("Can not copy child study");
X.logDebug("[[copy]]"), this._model && this._model.copySourceToClip(t)
}, o.prototype.onAppClipboardCut = function(t) {
X.logDebug("[[cut]]"), this._model && this._model.cutSourceToClip(t || this._model
.selectedSource())
}), o.prototype.applyOverrides = function(t) {
applyPropertiesOverrides(this.properties(), null, !1, t), this._model && (
applyPropertiesOverrides(this._model.model().properties(), null, !1, t),
applyPropertiesOverrides(this._model.mainSeries().properties(), null, !1, t,
"mainSeriesProperties"))
}, o.prototype.applyStudiesOverrides = function(t) {
W.setDefaultsOverrides(t), this._applyStudiesOverrides()
}, o.prototype._setActionsActive = function(t) {
var e, i = this.actions();
for (e in i) i.hasOwnProperty(e) && this.actions()[e].setActive(t)
}, o.prototype.setActive = function(t) {
this._setActionsActive(t), this._isActive = t, this._paneWidgets.forEach(function(t) {
t.update()
})
}, o.prototype.isActive = function() {
return this._isActive
}, o.prototype.trackTime = function() {
return this._chartWidgetCollection.lock.trackTime
}, o.prototype.id = function() {
return this._guid
}, o.prototype.createBranding = function() {
this._modelCreated.subscribe(this, function() {
this._model.model().createBrandingSource()
}, !0)
}, o.prototype.selectBarMode = function() {
return this._model.model().selectBarMode()
}, o.prototype.toggleSelectBarMode = function() {
this._model.model().toggleSelectBarMode()
}, o.prototype.onBarSelected = function() {
return this._model.model().onBarSelected()
}, o.prototype.trySetChartStyle = function(t) {
var e = this.model();
return !!e && (e.mainSeries().properties().style.value() === t || !!_.enabled(
"charting_library_base") && (this._setChartStyle(t), !0))
}, o.prototype._setChartStyle = function(t) {
var e = this.model(),
i = e.mainSeries().properties().style;
e.setChartStyleProperty(i, t, "Change Series Style")
}, t.exports.ChartWidget = o
}).call(e, i(10))
},
function(t, e, i) {
"use strict";
(function(e) {
function o(t, e, i, o) {
this._chart = t, this.dialog = t.dialog, this._state = e, this.verticalTouchScroll = o, this
._disableContextMenu = !!i, this.lhsPriceAxisWidget = new l(this, l.LHS), this
.rhsPriceAxisWidget = new l(this, l.RHS), this.jqPane = $(document.createElement("td")),
this.jqPane.addClass("chart-markup-table"), this.jqPane.addClass("pane"), this._dv = $(
"<div>"), this._dv.css("width", "100%"), this._dv.css("height", "100%"), this._dv
.css("position", "relative"), this._dv.css("overflow", "hidden"), this._dv.appendTo(this
.jqPane), this.canvas = V(this._dv, new O(16, 16)), $(this.canvas).css("position",
"absolute"), $(this.canvas).css("z-order", "2"), $(this.canvas).css("left", 0), $(
this.canvas).css("top", 0), this.ctx = this.canvas.getContext("2d"), this
.top_canvas = V(this._dv, new O(16, 16)), $(this.top_canvas).css("position",
"absolute"), $(this.top_canvas).css("z-order", "1"), $(this.top_canvas).css("left",
0),
$(this.top_canvas).css("top", 0), this.top_ctx = this.top_canvas.getContext("2d"), this
._zoomSelector = $("<div>"),
this._zoomSelector.addClass("zoom-selector"), this._zoomSelector.css("display", "none"),
this._zoomSelector.appendTo(this._dv), this._tooltipSelector = $("<div>"), this
._tooltipSelector.addClass("tooltip tooltip-selector tooltip-selector-hidden"), this
._tooltipSelector.appendTo(this._dv), this.legendWidget = new a(this, this._chart
.model(), this._chart._jqMainDiv), this.jqRow = $(document.createElement("tr")),
this
.lhsPriceAxisWidget.jqCell.appendTo(this.jqRow), this.jqPane.appendTo(this.jqRow), this
.legendWidget.$el.appendTo(this._dv), this.rhsPriceAxisWidget.jqCell.appendTo(this
.jqRow), this.setCursorForTool(), R($(this.top_canvas), this, !0, o), e && !this
._chart.readOnly() && (this.paneControls = new L(this, this._chart.model(), this._dv)),
this.updateScalesVisibility(), this.actions = [], this.readonlyActions = [], this
._onKeyUpListener = this._onKeyUpListener.bind(this), this._lineCancelledCallback = this
._lineCancelledCallback.bind(this), $(window).on("keyup.panewidget", this
._onKeyUpListener), this._chart.withModel(this, this._lineCancelledCallback), this
._overlays = {}, this._contextMenuX = 0, this._contextMenuY = 0, this
._lockDrawingsProperty = x.lockDrawings(), this._chart.withModel(this, function() {
var t = this._chart.model();
t.onSimpleZoomIn().subscribe(this, this._updateCrosshairOnZoom), t
.onSimpleZoomOut().subscribe(this, this._updateCrosshairOnZoom)
})
}
var n, r, s, a, l, c, h, u, d, p, _, f, m, g, v, y, b, S, w, T, C, x, P, L, I, k, A, M, E, D, V,
O, R, B, z, F, N;
i(786), i(12), n = i(8).Point, r = i(323).UndoMacroCommand, s = i(35).Study, a = i(922), l = i(
164).PriceAxisWidget, c = i(164).scaleRatioForContextMenuTransformer(7), h = i(57)
.LineToolOrder, u = i(57).LineToolPosition, d = i(1).LineDataSource, p = i(57)
.LineToolBrush, _ = i(106).BarsMarksContainer, f = i(40).trackEvent, m = i(148)
.isFeatureEnabled, g = i(136).showEditObjectDialog, v = i(232).ActionBinder, y = i(46)
.PriceDataSource, b = i(52), S = b.Action, w = b.ActionPlaceholder, T = b.ActionSeparator,
C = i(108), x = i(26), P = i(11), L = i(931), I = i(22), k = i(23), A = i(130), M = A
.resizeCanvas, E = A.hardResizeCanvas, D = A.clearRect, V = A.addCanvasTo, O = A.Size, R =
i(107).setMouseEventHandler, B = i(233), z = i(144), F = i(343).PaneCursorType, N = i(7)
.getLogger("Chart.PaneWidget"), o.prototype.destroy = function() {
$(window).off("keyup.panewidget", this._onKeyUpListener), this.legendWidget && (this
.legendWidget.destroy(), this.legendWidget.$el.remove(), delete this
.legendWidget), this.paneControls && (this.paneControls.destroy(), delete this
.paneControls), this.lhsPriceAxisWidget.destroy(), this.rhsPriceAxisWidget
.destroy(), this._chart.withModel({
chart: this._chart,
instance: this,
callback: this._hideTooltip
}, function() {
this.chart.model().lineCancelled().unsubscribe(this.instance, this.callback)
});
for (var t in this) delete this[t]
}, o.prototype.cancelZoom = function() {
this._zoomSelector.css("display", "none"), delete this._firstZoomPoint
}, o.prototype._onKeyUpListener = function(t) {
if (27 === t.keyCode) {
this._chart.model().lineBeingCreated() && this._chart.model().cancelCreatingLine(),
this._firstZoomPoint && this.cancelZoom();
this._chart.model().model().crossHairSource().clearMeasure(), this
.setCursorForTool(), this._hideTooltip()
}
}, o.prototype._lineCancelledCallback = function() {
try {
this._chart.model().lineCancelled().subscribe(this, this._hideTooltip)
} catch (t) {}
}, o.prototype.backgroundColor = function() {
return this._chart.properties().paneProperties.background.value()
}, o.prototype.priceAxisByCanvas = function(t) {
return t === this.lhsPriceAxisWidget.canvas || t === this.lhsPriceAxisWidget
.top_canvas ? this.lhsPriceAxisWidget : t === this.rhsPriceAxisWidget.canvas ||
t === this.rhsPriceAxisWidget.top_canvas ? this.rhsPriceAxisWidget : null
}, o.prototype.updateScalesVisibility = function() {
this.lhsPriceAxisWidget.setVisible(this._chart.properties().scalesProperties
.showLeftScale.value()), this.rhsPriceAxisWidget.setVisible(this._chart
.properties().scalesProperties.showRightScale.value())
}, o.prototype.chart = function() {
return this._chart
}, o.prototype._chartModel = function() {
return this._chart.model().model()
}, o.prototype.state = function() {
return this._state
}, o.prototype.setState = function(t) {
this._state = t
}, o.prototype.stretchFactor = function() {
return this._state ? this._state._stretchFactor : Pane.DEFAULT_STRETCH_FACTOR
}, o.prototype.setStretchFactor = function(t) {
this._state && (this._state._stretchFactor = t)
}, o.prototype.mouseEnterEvent = function(t) {
var e = this._chart.model();
e && (e.crossHairSource().visible = !0, "function" == typeof this.onMouseEnter && this
.onMouseEnter(this))
}, o.prototype.isLineTool = function(t) {
var e = TradingView[t];
return "function" == typeof e && e.prototype instanceof d
}, o.prototype.hideInplaceEditor = function() {
return !!this._inplaceEditor && (this._inplaceEditor.remove(), this._inplaceEditor =
void 0, !0)
}, o.prototype._processMouseMoveWhileZoom = function(t) {
var e = Math.floor(this._chart.model().timeScale().coordinateToIndex(t.localX)),
i = this._chart.model().timeScale().indexToCoordinate(e) - .5 * this._chart.model()
.timeScale().barSpacing(),
o = t.localY,
n = Math.abs(i - this._firstZoomPoint.x),
r = Math.abs(o - this._firstZoomPoint.y);
i < this._firstZoomPoint.x ? this._zoomSelector.css("left", i) : this._zoomSelector.css(
"left", this._firstZoomPoint.x), t.localY < this._firstZoomPoint.y ? this
._zoomSelector.css("top", t.localY) : this._zoomSelector.css("top", this
._firstZoomPoint.y), this._zoomSelector.width(n), this._zoomSelector.height(r)
}, o.prototype._finishZoom = function(t) {
var e = this._state.defaultPriceScale(),
i = e.coordinateToPrice(t.localY),
o = Math.round(this._chart.model().timeScale().coordinateToIndex(t.localX));
o !== this._firstZoomPoint.index && this._chart.model().zoomToViewport(this
._firstZoomPoint.index, o, this._firstZoomPoint.price, i, this.state()), this
._zoomSelector.css("display", "none"), this._firstZoomPoint = null, x
.resetToCursor()
}, o.EvironmentState = function(t) {
t.shiftKey && (this.shift = !0), t.ctrlKey && (this.control = !0)
}, o.prototype.checkMovepoint = function(t) {
return t === P.MOVEPOINT || t === P.MOVEPOINT_BACKGROUND && TradingView.isMobile.any()
}, o.prototype.mouseDownEvent = function(t) {
var i, r, a, l, c, h, u, p, _, f, m, g, v, b;
if (document.activeElement !== document.body && document.activeElement !== document
.documentElement ? document.activeElement && document.activeElement.blur ? document
.activeElement.blur() : document.body.focus() : document.getSelection ? document
.getSelection().removeAllRanges() : document.selection && document.selection
.clear(), k.emit("mouse_down", {
clientX: t.clientX,
clientY: t.clientY,
pageX: t.pageX,
pageY: t.pageY,
screenX: t.screenX,
screenY: t.screenY
}), this._updateCommonTooltip(null), i = this._chart.model(), r = new o
.EvironmentState(t), i.mainSeries().setGotoDateResult(), this.hideInplaceEditor(),
TradingView.supportTouch() && (this._skipFirstMove = !0), a = this._state
.defaultPriceScale(), !a.isEmpty() && !i.timeScale().isEmpty()) {
if (l = i.crossHairSource(), TradingView.supportTouch() && "LineToolBrush" !== x
.tool.value() || i.setAndSaveCurrentPosition(t.localX, t.localY, this._state),
c = l.price, h = l.index, l.startMeasurePoint() && l.endMeasurePoint() && l
.clearMeasure(), r.shift && x.toolIsCursor(x.tool.value()) && x.tool.setValue(
"measure"), "measure" === x.tool.value() && !l.startMeasurePoint())
return void l.startMeasuring({
price: c,
index: h,
x: t.localX,
y: t.localY
}, this._state);
if (l.startMeasurePoint() && !l.endMeasurePoint()) return l.finishMeasure({
price: c,
index: h,
x: t.localX,
y: t.localY
}), void x.resetToCursor();
if (this._firstZoomPoint) return void this._finishZoom(t);
if ("zoom" === x.tool.value() && e.enabled("chart_zoom")) return u = i.timeScale()
.indexToCoordinate(h) - .5 * i.timeScale().barSpacing(), this
._firstZoomPoint = {
price: c,
index: h,
x: u,
y: t.localY
}, this._zoomSelector.css("display", "block"), this._zoomSelector.css(
"left", u), this._zoomSelector.css("top", t.localY), this._zoomSelector
.width(0), void this._zoomSelector.height(0);
if (!this._isSelectBarModeEnabled() && (this.isLineTool(x.tool.value()) || i
.lineBeingCreated())) return void((!e.enabled("charting_library_base") ||
h >= 0) && this._mouseDownEventForLineTool(t, r, h, c));
if (p = this.dataSourceAtPoint(t.localX, t.localY), _ = p && p.source && p.source
.customization ? p.source.customization : {}, p.hittest && p.hittest
.result() === P.CUSTOM && (f = p.hittest.data().mouseDownHandler) && f(t), !this
._chart.readOnly()) {
if (p && p.hittest && p.hittest.result() === P.CUSTOM_MOVE && (f = p.hittest
.data().pressedMouseMoveHandler)) return void i.startCustomMoving(p
.source, new n(t.localX, t.localY), f);
if (p && !_.disableSelection && (m = p.hittest && p.hittest.result() > P
.MOVEPOINT_BACKGROUND, m = m || p.hittest && p.hittest.result() === P
.MOVEPOINT_BACKGROUND && TradingView.isMobile.any(), m ? i
.setSelectedSource(p.source, p.hittest && p.hittest.data()) : i
.setSelectedSource(null)), p.source && "eraser" === x.tool.value() && !_
.disableErasing && (TradingView.isInherited(p.source.constructor, d) ||
TradingView.isInherited(p.source.constructor, s))) return g = p.hittest
.eraseMarker(), void(t.ctrlKey && void 0 !== g && p.source
.processErase ? p.source.processErase(i, g) : i.removeSource(p
.source));
if (v = p.source && TradingView.isInherited(p.source.constructor, d) && p.source
.isLocked(), !(this._lockDrawingsProperty.value() || v)) {
if (p.source && p.source.userEditEnabled && !p.source.userEditEnabled())
return;
if (p.hittest && p.hittest.result() === P.CHANGEPOINT) return a = p.source
.priceScale(), c = a.coordinateToPrice(t.localY), i
.startChangingLinetool(p.source, {
index: h,
price: c
}, p.hittest.data(), r), void this._updateTooltip(t.localX, t
.localY);
if (p.hittest && this.checkMovepoint(p.hittest.result())) return b = p
.source.properties(), r.control && b.clonable && b.clonable
.value() ? void(this._clonningAtMoveLineTool = p.source) : void(p
.source
.isFixed && p.source.isFixed() ? i.startMovingSource(p.source,
new n(t.localX, t.localY), p.hittest.data()) : (a = p.source
.priceScale(), c = a.coordinateToPrice(t.localY), i
.startMovingSource(p.source, {
index: h,
price: c
}, p.hittest.data())))
}
if (p.source && TradingView.isInherited(p.source.constructor, y) && p.source
.isDraggable()) return void(this._chart.draggingSource = p.source)
}
p.hittest && p.hittest.result() === P.REGULAR || (this._processing = !0)
}
}, o.prototype.drawRightThere = function(t) {
var e, i;
this.isLineTool(t) && (e = this._chart.model(), i = e.crossHairSource(), e
.createLineTool(this._state, {
index: i.index,
price: i.price
}, t))
}, o.prototype._finishTool = function(t) {
var e, i = this._chart.model(),
o = x.tool.value();
x.resetToCursor(), this._hideTooltip(), i.setSelectedSource(t), this._chart.isTextTool(
o) && (e = i.createUndoCheckpoint(), g(t, i, null, e).then(function(t) {
t.focusOnText()
}))
}, o.prototype._mouseDownEventForLineTool = function(t, e, i, o) {
var r, s, a, l, c, h, u, d, _, f, m = this._chart.model(),
g = !1,
v = null,
y = t.localX,
b = t.localY,
S = this._chart.model().model().crossHairSource(),
w = x.tool.value();
if (x.hideAllDrawings().setValue(!1), x.lockDrawings().setValue(!1), TradingView
.supportTouch() && this.isLineTool(w) && "LineToolBrush" !== w && !m
.lineBeingCreated() && (this._startTouchPoint = new n(y, b), this
._initCrossHairPosition = S.currentPoint(), this._skipFirstMove = !0), !m
.lineBeingCreated() || m.lineBeingCreated() instanceof p) TradingView
.supportTouch() && "LineToolBrush" !== w || (f = {
index: i,
price: o
}, v = m.createLineTool(this._state, f, w), m.lineBeingCreated() || (g = !0));
else if (TradingView.supportTouch()) {
if (this._skipFirstMove = !0, !this._startTouchPoint) return this._startTouchPoint =
new n(y, b), r = m.lineBeingCreated().points(), s = r[r.length - 1], a = m
.timeScale().indexToCoordinate(s.index), o = s.price, l = m
.lineBeingCreated().priceScale(), l.isPercent() && (c = m.lineBeingCreated()
.ownerSource().firstValue(), o = l.priceRange().convertToPercent(o, c)),
h = l.priceToCoordinate(o), void(this._lastDrawingPoint = new n(a, h))
} else v = m.lineBeingCreated(), u = m.paneForSource(v), u !== this._state ? (d = this
._dv.offset(), y = t.localX + d.left, b = t.localY + d.top, _ = this._chart
.paneByState(u), d = _._dv.offset(), y -= d.left, b -= d.top, o = v.priceScale()
.coordinateToPrice(b), i = Math.round(m.timeScale().coordinateToIndex(y)), g = m
.coninueCreatingLine({
index: i,
price: o
}, e)) : g = m.coninueCreatingLine({
index: i,
price: o
}, e);
m.setSelectedSource(v), g ? this._finishTool(v) : TradingView.supportTouch() &&
"LineToolBrush" !== w || this._updateTooltip(t.localX, t.localY)
}, o.prototype._equalsCursorCache = function(t, e) {
return x.toolIsCursor(t.tool) ? t.tool === e.tool && t.theme === e.theme && t
.crosshair === e.crosshair : t.tool === e.tool && t.theme === e.theme
}, o.prototype._setCursorClassName = function(t) {
var e = "";
t && (e = "pane--cursor-" + t), this._currentCursorClassName !== e && (this
._currentCursorClassName && this.jqPane.removeClass(this
._currentCursorClassName), e && this.jqPane.addClass(e), this
._currentCursorClassName = e, this.jqPane.css("cursor"))
}, o.prototype.setCursorForTool = function(t, e) {
var i, o = x.tool.value();
if (x.toolIsCursor(o)) {
if (this._chart.draggingSource || this._isScrolling || this._chart.model() && this
._chart.model().sourceBeingMoved()) return void this._setCursorClassName(
"grabbing");
if (t) return void this._setCursorClassName("pointer")
}
return "eraser" === o ? void this._setCursorClassName("eraser") : "zoom" === o ?
void this._setCursorClassName("zoom-in") : "dot" === (i = x.cursorTool.value()) ?
void this._setCursorClassName("dot") : "arrow" === i ? void this
._setCursorClassName("default") : void this._setCursorClassName("")
}, o.prototype.setDragToAnotherPaneCursor = function() {
this._setCursorClassName("grabbing")
}, o.prototype.gestureStartEvent = function(t) {
this._prev_pinch_scale = 1, this._pinching = !0
}, o.prototype.gestureChangeEvent = function(t) {
var e, i, o = t.center.x - 5,
n = this._chart.paneWidgets()[0].lhsPriceAxisWidget.size.w,
r = this._chart.model().timeScale().width();
n && (o = Math.max(0, o - n)), o = Math.min(o, r), e = 2 * (o / r - .5), i = 5 * (t
.scale - this._prev_pinch_scale), i > 0 ? this._chart.model().zoomIn(e, i) : i <
0 && this._chart.model().zoomOut(e, -i), this._prev_pinch_scale = t.scale
}, o.prototype.gestureEndEvent = function(t) {
this._pinching = !1
}, o.prototype._updateCommonTooltip = function(t) {
var e, i, o, n = this._lastCommonTooltipData,
r = null;
if (t && t.hittest && t.hittest.result() === P.CUSTOM && (e = t.hittest.data()) && (r =
e.tooltip || null), null != n || null != r) return null == r ? (this
._lastCommonTooltipData = null, void z.hide()) : void(n && r.text === n
.text && r.rect.x === n.rect.x && r.rect.y === n.rect.y && r.rect.w === n
.rect.w && r.rect.h === n.rect.h || (this._lastCommonTooltipData = r, i =
TradingView.clone(r), o = this.jqPane.offset(), i.rect.x += o.left, i
.rect.y += o.top, z.show(i)))
}, o.prototype._processMouseMoveForCustomHandler = function(t) {
var e, i = this.dataSourceAtPoint(t.localX, t.localY);
i.hittest && i.hittest.result() === P.CUSTOM && (e = i.hittest.data()
.mouseMoveHandler) && e(t)
}, o.prototype.mouseMoveEvent = function(t) {
var e, i, n, r, s, a, l, c, h, u, d, p, _, f, m;
if (this._processMouseMoveForCustomHandler(t), e = this._chart.model()) {
if (i = t.localX, n = t.localY, r = new o.EvironmentState(t), this._firstZoomPoint)
return void this._processMouseMoveWhileZoom(t);
if (!(this._chart.readOnly() || this._editDialog && this._editDialog.isVisible()) &&
(s = x.tool.value(), a = null, l = null, c = null, this._processing || !x
.toolIsCursor(s) && "eraser" !== s || (a = this.dataSourceAtPoint(t.localX,
t.localY), h = a && a.source, u = this._chart.model()
.crossHairSource(), h && ("LineToolOrder" === h.toolname ||
"LineToolPosition" === h.toolname || "AlertLabel" === h.toolname) ?
u.visibleTrap = !1 : u.visibleTrap = !0, a.hittest && a.hittest
.result() > P.MOVEPOINT_BACKGROUND ? (l = a.source, c = a.hittest
.result(),
!a.source || "eraser" === s && a.source.constructor === TradingView
.Series ? e.setHoveredSource(null) : e.setHoveredSource(a.source, a
.hittest.data())) : e.setHoveredSource(null)),
this._isSelectBarModeEnabled() ? this._setCursorClassName("pointer") : this
.setCursorForTool(l, c), this._updateCommonTooltip(a), null !== a &&
null !== a.hittest && a.hittest.result() === P.CUSTOM_MOVE)) switch (d = a
.hittest.data() || {}, d.cursorType) {
case F.VerticalResize:
this._setCursorClassName("ns-resize")
}
if (this._chart.readOnly() && (a = this.dataSourceAtPoint(t.localX, t.localY),
null !== a.source ? e.setHoveredSource(a.source, a.hittest.data()) : e
.setHoveredSource(null, null)), this._chart.model().lineBeingCreated() && (
p = this._chart.model().lineBeingCreated(), (_ = this._chart.model()
.paneForSource(p)) !== this._state)) return f = this._dv.offset(), i +=
f.left, n += f.top, m = this._chart.paneByState(_), f = m._dv.offset(), i -=
f.left, n -= f.top, void e.setAndSaveCurrentPosition(i, n, _);
s = x.tool.value(), TradingView.supportTouch() && this.isLineTool(s) || (e
.setAndSaveCurrentPosition(i, n, this._state, r), this._updateTooltip(i, n))
}
},
o.prototype.pressedMouseMoveEvent = function(t) {
// console.log(this._chart)
// var system = {};
// system.pingtai = /(Win32|Win16|WinCE|Mac68K|MacIntel|MacIntel|MacPPC|Linux mips64)/i
// .test(navigator.platform);
// if (!system.pingtai) {
// //手机端
// //按下鼠标滚动K线
// // for (var i = 0; i < 5; i++) {
// // this._chart.model().scrollChart(10)
// // }
// // return
// }
var i, r, s, a, l, c, h, u, _, f, m, g, v, y, b, S, w, T, C, P, L, I, k, A, M, E, D, V;
if (!this._pinching) {
if (this._skipFirstMove ? (delete this._skipFirstMove, delete this._touchMove) :
this._touchMove = !0, i = new o.EvironmentState(t), r = this._chart.model(), s =
t.localX, a = t.localY, this._firstZoomPoint) return this
._processMouseMoveWhileZoom(t), void(this._firstZoomPoint.draggingMode = !0);
if (l = x.tool.value(), TradingView.supportTouch() && this._startTouchPoint && this
.isLineTool(l) && "LineToolBrush" !== l && !r.lineBeingCreated() && !this
._isSelectBarModeEnabled()) return c = this._initCrossHairPosition, h = new n(s,
a), u = h.subtract(this._startTouchPoint), _ = c.add(u), this._chart
.model().setAndSaveCurrentPosition(_.x, _.y, this._state), void this
._updateTooltip(_.x, _.y);
if (TradingView.supportTouch() && r.lineBeingCreated() && !(r
.lineBeingCreated() instanceof p)) return void(this._startTouchPoint && (f =
r
.lineBeingCreated(), m = t.localX - this._startTouchPoint.x, g = t
.localY - this._startTouchPoint.y, v = this._lastDrawingPoint.x + m,
y = this._lastDrawingPoint.y + g, b = this._chart.model()
.paneForSource(f), r.setAndSaveCurrentPosition(v, y, b), this
._updateTooltip(v, y)));
if (r.setAndSaveCurrentPosition(s, a, this._state, i), this._updateTooltip(s, a),
S = x.tool.value(), w = this._isSelectBarModeEnabled(), (!this.isLineTool(S) ||
"LineToolBrush" === l || w) && (0 === t.button || Modernizr.touch)) {
if ("LineToolBrush" === S && !w) {
if (T = this._state.defaultPriceScale(), T.isEmpty()) return;
if (!this._chart.model().lineBeingCreated()) return;
return C = T.coordinateToPrice(t.localY), P = Math.round(this._chart.model()
.timeScale().coordinateToIndex(t.localX)), void((!e.enabled(
"charting_library_base") || P >= 0) && this._chart.model()
.coninueCreatingLine({
index: P,
price: C
}))
}
if (this._chart.draggingSource && (L = t.target, I = this._chart.paneByCanvas(
L), I && (I !== this ? I.setDragToAnotherPaneCursor() : I
.setCursorForTool()), k = this._chart.priceAxisByCanvas(L), k && k
.setCursor("grabbing"), (A = this._chart.timeAxisByCanvas(L)) && A
.setCursor("grabbing")), r.timeScale().isEmpty()) return;
if (r.customMoveBeingProcessed()) return void r.processCustomMove(new n(s, a));
if (r.lineBeingEdited()) return P = Math.round(this._chart.model().timeScale()
.coordinateToIndex(s)),
(!e.enabled("charting_library_base") || P >= 0) && r.changeLinePoint({
x: s,
y: a
}, i), this._updateTooltip(s, a), void this.setCursorForTool();
if (r.sourceBeingMoved()) {
if (T = r.sourceBeingMoved().priceScale(), T.isEmpty()) return;
if (P = this._chart.model().timeScale().coordinateToIndex(t.localX), C = T
.coordinateToPrice(t.localY), M = r.sourceBeingMoved(), this
.setCursorForTool(), e.enabled("charting_library_base") && !r
.sourceBeingMoved().onlyYMoving() && (E = M.points(), 0 !== E.length &&
E.reduce(function(t, e) {
return e.index < t.index ? e : t
}).index - ((M._currentMovingPoint || M._startMovingPoint).index -
P) < 0)) return;
return TradingView.isInherited(M.constructor, d) && M.isFixed() ? void r
.moveSource(new n(s, a)) : void r.moveSource({
index: P,
price: C
}, i)
}
if (i.control && this._clonningAtMoveLineTool) return f = this
._clonningAtMoveLineTool, D = this.cloneLineTool(f, !0), V = this._chart
.model().model().dataSourceForId(D), this._chart.model()
.setSelectedSource(V), r.startMovingSource(V, {
index: this._chart.model().timeScale().coordinateToIndex(t
.localX),
price: f.priceScale().coordinateToPrice(t.localY)
}), void(this._clonningAtMoveLineTool = null);
T = this._state.defaultPriceScale(), !this._startScrollingPos && e.enabled(
"chart_scroll") && (this._startScrollingPos = {
x: t.clientX,
y: t.clientY
}), this._startScrollingPos && (this._startScrollingPos.x === t.clientX &&
this._startScrollingPos.y === t.clientY || this._isScrolling || (r
.beginUndoMacro("scroll").setCustomFlag("doesnt_affect_save", !0), T
.isEmpty() || r.startScrollPrice(this._state, T, t.localY), r
.startScrollTime(t.localX), this._isScrolling = !0, this
.setCursorForTool())), this._isScrolling && (T.isEmpty() || r
.scrollPriceTo(this._state, T, t.localY), r.scrollTimeTo(t.localX))
}
}
}, o.prototype._processMouseUpForCustomHandler = function(t) {
var e, i = this.dataSourceAtPoint(t.localX, t.localY);
i.hittest && i.hittest.result() === P.CUSTOM && (e = i.hittest.data().mouseUpHandler) &&
e(t)
}, o.prototype.mouseUpEvent = function(t) {
var e, i, o, n, s, a, l, c, h, u, d, _, f, m, g, v, y, b, S, w, T, C, P, L, A, M, E, D,
V, O, R, B, z;
if (this._processMouseUpForCustomHandler(t), this._clonningAtMoveLineTool = null, e =
this, k.emit("mouse_up", {
clientX: t.clientX,
clientY: t.clientY,
pageX: t.pageX,
pageY: t.pageY,
screenX: t.screenX,
screenY: t.screenY
}), i = this._chart.model(), o = this._touchMove, delete this._touchMove, n = x.tool
.value(), TradingView.supportTouch() && !o && "LineToolBrush" !== n && this
.isLineTool(n) && !i.lineBeingCreated()) return s = i.crossHairSource()
.currentPoint(), a = this._state.defaultPriceScale(), l = a.coordinateToPrice(s
.y), c = Math.round(i.timeScale().coordinateToIndex(s.x)), h = {
index: c,
price: l
}, u = i.createLineTool(this._state, h, n), i.setSelectedSource(u), i
.lineBeingCreated() || this._finishTool(u), this._updateTooltip(s.x, s.y),
void delete this._startTouchPoint;
if (i.lineBeingCreated() && !(i.lineBeingCreated() instanceof p) && this
._startTouchPoint) return d = !1, delete this._startTouchPoint, o || (u = i
.lineBeingCreated(), _ = u.points()[u.points().length - 1], l = _.price, f =
u.priceScale(), f.isPercent() && (m = i.lineBeingCreated().ownerSource()
.firstValue(), l = f.priceRange().convertToPercent(l, m)), d = i
.coninueCreatingLine({
index: _.index,
price: l
}, {}), delete this._lastDrawingPoint),
void(d && this._finishTool(u));
if (this._firstZoomPoint && this._firstZoomPoint.draggingMode) return void this
._finishZoom(t);
if (0 === t.button || TradingView.supportTouch()) {
if (this._processing = !1, i = this._chart.model(), i.customMoveBeingProcessed() &&
i.endCustomMoving(), i.lineBeingEdited()) return i.endChangingLinetool(),
void this._hideTooltip();
if ("LineToolBrush" === n && !this._isSelectBarModeEnabled()) {
if (i.finishLineTool(), a = this._state.defaultPriceScale(), a.isEmpty())
return;
if (!this._chart.model().lineBeingCreated()) return;
return l = a.coordinateToPrice(t.localY), c = Math.round(this._chart.model()
.timeScale().coordinateToIndex(t.localX)), void this._chart.model()
.coninueCreatingLine({
index: c,
price: l
})
}
if (g = i.sourceBeingMoved()) return i.endMovingSource(), this._hideTooltip(), this
.setCursorForTool(g), void i.invalidate(new I(I.UPDATE_CURSOR_ONLY));
if (this._chart.readOnly() || (v = this.dataSourceAtPoint(t.localX, t.localY), y =
this._chart.model().crossHairSource(), b = t.localX >= 0 && t.localX < this
.size.w, v && v.source === y || !b || (S = e._chart.model().timeScale()
.coordinateToIndex(t.localX), e._chart.model().model()
.onSyncScrollNeeded(S))), w = this._isScrolling && this._chart.model()
.undoHistory.undoStack().head() instanceof r, this._isScrolling && (a = this
._state.defaultPriceScale(), i.endScrollPrice(this._state, a), e = this, T =
function() {
i.endScrollTime(), i.endUndoMacro(), e._startScrollingPos = void 0, e
._isScrolling = !1, e.setCursorForTool()
}, TradingView.supportTouch() ? (C = i.timeScale().m_scrollStartPoint, P =
.05 * (t.localX - C), L = null, A = function(e) {
var o, n;
null === L && (L = e), o = .01 * Math.min(100, 3 * (e - L)), o =
Math.sqrt(o), n = t.localX + P * o, i.scrollTimeTo(n), o >= 1 ?
T() : requestAnimationFrame(A)
}, requestAnimationFrame(A)) : T()), this._chart.draggingSource)
for (M = t.target, E = this._chart.paneByCanvas(M), E && E !== this && (D = E
._state.findSuitableScale(this._chart.draggingSource), w && (w = !1,
this._chart.model().undoHistory.undo()), this._chart.model().move(
this._chart.draggingSource, E._state, D)), V = this._chart
.timeAxisByCanvas(M), V && (w && (w = !1, this._chart.model().undoHistory
.undo()), this._chart.model().move(this._chart.draggingSource, null,
null)), this._chart.draggingSource = null, O = this._chart
.getTimeScale(), O && O.restoreDefaultCursor(), v = this.dataSourceAtPoint(t
.localX, t.localY), R = this._chart.paneWidgets(), B = 0; B < R
.length; B++) z = R[B], z === this && v ? z.setCursorForTool(v.source, v
.hittest || null) : z.setCursorForTool(), z.lhsPriceAxisWidget
.restoreDefaultCursor(), z.rhsPriceAxisWidget.restoreDefaultCursor()
}
delete this._touchMove
}, o.prototype.mouseLeaveEvent = function(t) {
var e = this._chart.model();
e && (TradingView.isMobile.any() || e.model().clearCurrentPosition(), e
.setHoveredSource(null), this._updateCommonTooltip(null), "function" ==
typeof this.onMouseLeave && this.onMouseLeave(this))
}, o.prototype.mouseClickEvent = function(t) {
var e, i = this.dataSourceAtPoint(t.localX, t.localY),
o = this._chart.model(),
n = i.source;
this._lastClickedSource !== n && (this._lastClickedSource && (this._lastClickedSource
.onClickOutside(t), o.chartModel().updateSource(this._lastClickedSource)),
this._lastClickedSource = n),
i.hittest && i.hittest.result() === P.CUSTOM && (e = i.hittest.data()
.mouseClickHandler) && (e(t), o.chartModel().updateSource(n)), o
.hoveredSource() instanceof _ && o.hoveredSource().onClicked()
}, o.prototype.showEditDialogForSource = function(t) {
if (!(this.chart().onWidget() || t.userEditEnabled && !t.userEditEnabled())) {
var e = this;
g(t, this._chart.model()).then(function(t) {
e._editDialog = t
})
}
}, o.prototype.mouseDoubleClickEvent = function(t) {
var e, i = !this._chart.readOnly() && !this.isLineTool(x.tool.value()) && this
.dataSourceAtPoint(t.localX, t.localY),
o = i && i.hittest && i.source;
o && i.hittest.result() <= P.MOVEPOINT_BACKGROUND && !TradingView.isMobile.any() && (o =
null), o && o.customization && o.customization.disableSelection && (o = null),
o && o._metaInfo && "Sessions@tv-basicstudies" === o._metaInfo.id && (o = this
._chart.model().mainSeries()), o ? (e = !1, e ? TradingView.alertsDispatcher
.openEditDialog(i.source.alert()) : this.showEditDialogForSource(o)) : this
._chart.readOnly() || this.isLineTool(x.tool.value()) || this._chart.model()
.lineBeingCreated() || this._chart.model().selectedSource() || this._chart
.toggleMaximizePane(this)
}, o.prototype.showContextMenuForSource = function(t, e) {
t.hasContextMenu() && (this._chart.model().setSelectedSource(t), t.constructor ===
TradingView.Series ? this._seriesContextMenu(t).show(e) : TradingView
.isInherited(t.constructor, s) ? this._studyContextMenu(t).show(e) : TradingView
.isInherited(t.constructor, h) || TradingView.isInherited(t.constructor, u) ?
this._tradingDrawingsContextMenu(t).show(e) : TradingView.isInherited(t
.constructor, d) ? this._lineContextMenu(t).then(function(t) {
t.show(e)
}) : t === this._chart.model().crossHairSource() && t.handleContextMenuEvent(e))
}, o.prototype.contextMenuEvent = function(t, i) {
var o, n, r, s;
if (e.enabled("pane_context_menu")) {
if (this._chart.model().crossHairSource().startMeasurePoint()) return void this
._chart.model().crossHairSource().clearMeasure();
if (!this._pinching && (this._firstZoomPoint && this.cancelZoom(), !this
.hideInplaceEditor())) {
if (!x.toolIsCursor(x.tool.value()) && !this._isSelectBarModeEnabled()) {
if (TradingView.isMobile.any()) return;
return x.resetToCursor(!0), this.setCursorForTool(), this._hideTooltip(),
void(this._chart.model().lineBeingCreated() && this._chart.model()
.cancelCreatingLine())
}
this.chart().readOnly() || this._disableContextMenu || (this._chart.model()
.mainSeries().createSessStudy(), this._contextMenuX = t.localX, this
._contextMenuY = t.localY, o = this.dataSourceAtPoint(t.localX, t
.localY), n = o ? o.source : null, r = o && o.hittest ? o.hittest
.result() : 0, s = r >= P.REGULAR || r >= P.MOVEPOINT_BACKGROUND &&
TradingView.isMobile.any(), this._chart.updateActions(), null !== n &&
s ? this.showContextMenuForSource(n, t) : (this._contextMenu(t).then(
function(e) {
return e.show(t)
}), this._chart.model().setSelectedSource(null)), this.paint())
}
}
}, o.prototype._contextMenu = function(t) {
function e(t) {
return null === t.text
}
var i = this;
return Promise.all(this._initActions(t)).then(function(t) {
var o, n, r = i._customActions();
for (t = t.filter(function(t) {
return null !== t
}), r.remove.forEach(function(e) {
for (var i = 0; i < t.length; i++)
if (t[i].text === e) {
t.splice(i, 1);
break
}
}), o = r.top.concat(t).concat(r.bottom),
n = o.length - 1; n > 0; n--) e(o[n]) && e(o[n - 1]) && o.splice(n, 1);
return o.length && e(o[0]) && o.splice(0, 1), o.length && e(o[o.length -
1]) && o.splice(o.length - 1, 1), C.createMenu(o, {
statName: "ChartContextMenu"
})
})
}, o.prototype.createRemoveMenu = function() {
var t, e = this._chart.actions(),
i = new S({
text: window.t("Remove"),
statName: "Remove"
});
return i.subActions || (i.subActions = []), t = i.subActions, t.push(e
.paneRemoveAllStudies, e.paneRemoveAllDrawingTools, e
.paneRemoveAllStudiesDrawingTools), i
}, o.prototype.createDrawingMenu = function() {
var t, i = this._chart.actions(),
o = new S({
text: window.t("Drawing Tools"),
statName: "DrawingTools"
});
return o.subActions || (o.subActions = []), t = o.subActions, e.enabled(
"left_toolbar") && t.push(i.drawingToolbarAction), e.enabled(
"items_favoriting") &&
t.push(i.favoriteDrawingToolbar), 0 !== o.subActions.length && t.push(new T), t
.push(i.magnetAction, i.stayInDrawingModeAction), e.enabled(
"support_multicharts") && t.push(i.syncModeAction), t.push(new T, i
.lockDrawingsAction, i.hideAllDrawingsAction, i.paneRemoveAllDrawingTools), o
}, o.prototype._initActions = function(t) {
var i, o, n, r, s, a = this,
l = this._chart.actions(),
c = [];
return e.enabled("datasource_copypaste") && (!(i = B.get()) || "study" !== i.type &&
"drawing" !== i.type || (o = new S({
text: window.t("Paste %s").replace("%s", window.t(i.title || i
.type)),
shortcut: "Ctrl-V",
statName: "Paste"
}), o.callbacks().subscribe(null, function() {
a._chart.onAppClipboardPaste(a.state())
}), c.push(o))), l.gotoDate && c.push(l.gotoDate), c.length && c.push(new T), c
.push(l.chartReset, l.symbolSearch, l.changeInterval), n = window.widgetbar && (!
window.widgetbar._customization || window.widgetbar._customization.watchlist),
n && l.addToWatchlist && c.push(l.addToWatchlist), e.enabled("text_notes") && m(
"text_notes") && c.push(l.addToTextNotes), e.enabled("symbol_info") && c.push(l
.showSymbolInfoDialog), c.push(new T, this._createLockTimeAxisAction(t), new T,
l.paneObjectTree, l.insertIndicator), e.enabled("charting_library_base") || c
.push(l.applyStudyTemplate), e.enabled("compare_symbol") && c.push(l.compareOrAdd),
c.push(this.createDrawingMenu()), e.enabled("charting_library_base") && c.push(l
.hideAllMarks), c.push(this.createRemoveMenu(), new T), r = this
._priceAxisMenu(), r && c.push(r), s = this._timeAxisMenu(), s && c.push(s), e
.enabled("charting_library_base") || c.push(l.applyColorTheme), e.enabled(
"show_chart_property_page") && c.push(l.chartProperties), pro.hasPackage(
"mtp-mtpredictor") && this.state().containsMainSeries() && c.push(new T, this
._createMTPredictorActions()), c
}, o.prototype._customActions = function() {
var t, i = {
top: [],
bottom: [],
remove: []
},
o = this._chart.model(),
n = o.timeScale(),
r = this._state.defaultPriceScale();
return e.enabled("custom_items_in_context_menu") ? (t = n.isEmpty() ? void 0 : n
.indexToUserTime(n.coordinateToIndex(this._contextMenuX)), k.emit(
"onContextMenu", {
unixtime: t ? t / 1e3 : void 0,
price: r.isEmpty() ? void 0 : r.coordinateToPrice(this._contextMenuY),
callback: function(t) {
[].concat(t).forEach(function(t) {
if (t.text)
if (t.text.length > 1 && "-" === t.text[0]) i
.remove.push(t.text.slice(1));
else {
var e;
"-" === t.text ? e = new T : (e = new S({
text: t.text
}), e.callbacks().subscribe(null, t
.click)),
t.position && "top" === t.position ? i
.top.push(e) : i.bottom.push(e)
}
})
}
}), i) : i
}, o.prototype._timeAxisMenu = function() {
if (this._chart.model().timeScale().isEmpty()) return null;
var t = this._chart.getTimeScale();
return new S({
text: window.t("Time Scale"),
subActions: t.getContextMenuActions(),
statName: "TimeScale"
})
}, o.prototype.getDefaultPriceAxisWidget = function() {
var t = this._state.defaultPriceScale();
return t.isEmpty() ? null : t === this._state.leftPriceScale ? this
.leftPriceAxisWidget() : this.rightPriceAxisWidget()
}, o.prototype._priceAxisMenu = function() {
var t = this.getDefaultPriceAxisWidget();
return t ? new S({
text: window.t("Price Scale"),
subActions: t.getContextMenuActions(),
statName: "PriceScale"
}) : null
}, o.prototype._seriesContextMenu = function(t) {
var i, o, n, r, s, a = this._chart.actions(),
l = t.properties().visible.value(),
c = null;
if (this._chart.readOnly()) i = [l ? a.seriesHide : this.createActionShow(t), new T,
this.createActionShowCountdown(t), new T, this.createActionScaleLeft(t), this
.createActionScaleRight(t), this.createActionNoScale(t)
], e.enabled("countdown") || i.splice(3, 1), c = C.createMenu(i);
else {
if (o = this._mergeContentMenuItems(t), n = [a.showSymbolInfoDialog, a.compare, l ?
a.seriesHide : this.createActionShow(t), this.createVisualOrderAction(t),
new T, this.createActionShowCountdown(t), new T
], e.enabled("countdown") || n.splice(5, 2), e.enabled("compare_symbol") || n
.splice(1, 1), e.enabled("symbol_info") || n.splice(0, 1), !this.chart()
.onWidget() && e.enabled("show_chart_property_page") && n.unshift(a.format), r =
this.createActionLockScale(t), r && n.push(r, new T), o.length > 0) {
for (s = 0; s < o.length; s++) n.push(o[s]);
n.push(new T)
}
n.push(this.createActionScaleLeft(t), this.createActionScaleRight(t), this
.createActionNoScale(t)), pro.hasPackage("mtp-mtpredictor") && n.push(new T,
this._createMTPredictorActions()), c = C.createMenu(n)
}
return c
}, o.prototype.toggleLockTimeAxis = function(t, e) {
var i, o, n;
"boolean" != typeof e && (e = !x.lockTimeAxis().value()), e && (i = this._chart.model()
.timeScale(), o = i.coordinateToIndex(t), n = i.points().roughTime(o), x
.lockTimeAxisTime.setValue(n)), x.lockTimeAxis().setValue(e)
}, o.prototype._createLockTimeAxisAction = function(t) {
var e = new S({
text: window.t("Lock Cursor In Time"),
checkable: !0,
statName: "ToggleLockCursorInTime"
}),
i = x.lockTimeAxis().value();
return e.setChecked(i), e.callbacks().subscribe(null, this.toggleLockTimeAxis.bind(this,
t.localX, !i)), e
}, o.prototype._createHVLineAction = function(t, e) {
e = "vertical" === e && "vertical" || "horizontal";
var i = new S({
text: "vertical" === e ? window.t("Create Vertical Line") : window.t(
"Create Horizontal Line"),
statName: "vertical" === e ? "CreateVerticalLine" : "CreateHorizontalLine"
});
return i.callbacks().subscribe(this, function() {
var i = this._chart.model().timeScale().coordinateToIndex(t.localX),
o = this._state.defaultPriceScale().coordinateToPrice(t.localY),
n = this._chart.model().createLineTool(this._state, {
index: i,
price: o
}, "vertical" === e && "LineToolVertLine" || "LineToolHorzLine");
this._finishTool(n)
}), i
}, o.prototype._createMTPredictorActions = function() {
var t = this,
e = function(e, i, o) {
var n = new S({
text: e
});
return n.callbacks().subscribe(t, function() {
var t, e, n = this._chart.model(),
r = n.timeScale(),
s = this._state.defaultPriceScale();
r.isEmpty() || s.isEmpty() || (o ? (t = s.coordinateToPrice(this
._contextMenuY), e = Math.round(r.coordinateToIndex(
this._contextMenuX)), n.createLineTool(this
._state, {
index: e,
price: t
}, i)) : x.tool.setValue(i))
}), n
};
return new S({
text: window.t("MTPredictor"),
subActions: [e(window.t("Apply Manual Risk/Reward"),
"LineStudyMtpRiskReward", !1), e(window.t(
"Apply Manual Decision Point"), "LineStudyMtpDecisionPoint",
!0), e(window.t("Analyze Trade Setup"), "LineStudyMtpAnalysis",
!0), new S({
text: window.t("Apply Elliot Wave"),
subActions: [e(window.t("Apply Elliot Wave Intermediate"),
"LineStudyMtpElliotWaveMain", !0), e(window.t(
"Apply Elliot Wave Major"),
"LineStudyMtpElliotWaveMajor", !0), e(window.t(
"Apply Elliot Wave Minor"),
"LineStudyMtpElliotWaveMinor", !0)]
}), new S({
text: window.t("Apply WPT Up Wave"),
subActions: [e(window.t("Up Wave 1 or A"),
"LineStudyMtpUpWave1OrA", !1), e(window.t(
"Up Wave 2 or B"), "LineStudyMtpUpWave2OrB",
!1), e(window.t("Up Wave C"),
"LineStudyMtpUpWaveC", !1), e(window.t(
"Up Wave 3"), "LineStudyMtpUpWave3", !1), e(
window.t("Up Wave 4"), "LineStudyMtpUpWave4", !1
), e(window.t("Up Wave 5"),
"LineStudyMtpUpWave5", !1)]
}), new S({
text: window.t("Apply WPT Down Wave"),
subActions: [e(window.t("Down Wave 1 or A"),
"LineStudyMtpDownWave1OrA", !1), e(window.t(
"Down Wave 2 or B"),
"LineStudyMtpDownWave2OrB", !1), e(window.t(
"Down Wave C"), "LineStudyMtpDownWaveC", !1), e(
window.t("Down Wave 3"),
"LineStudyMtpDownWave3", !1), e(window.t(
"Down Wave 4"), "LineStudyMtpDownWave4", !1), e(
window.t("Down Wave 5"),
"LineStudyMtpDownWave5", !1)]
})]
})
}, o.prototype.createEarningsShow = function(t) {
var e = this._chart.model().mainSeries().properties().esdShowEarnings,
i = new S({
checkable: !0,
text: window.t("Show Earnings"),
enabled: !0,
checked: e.value(),
statName: "ToggleShowEarnings"
});
return i.callbacks().subscribe(this, function(t) {
this._chart.model().setProperty(e, t.checked, "Show Earnings")
}), i
}, o.prototype.createDividendsShow = function(t) {
var e = this._chart.model().mainSeries().properties().esdShowDividends,
i = new S({
checkable: !0,
text: window.t("Show Dividends"),
enabled: !0,
checked: e.value(),
statName: "ToggleShowDividends"
});
return i.callbacks().subscribe(this, function(t) {
this._chart.model().setProperty(e, t.checked, "Show Dividends")
}), i
}, o.prototype.createSplitsShow = function(t) {
var e = this._chart.model().mainSeries().properties().esdShowSplits,
i = new S({
checkable: !0,
text: window.t("Show Splits"),
enabled: !0,
checked: e.value(),
statName: "ToggleShowSplits"
});
return i.callbacks().subscribe(this, function(t) {
this._chart.model().setProperty(e, t.checked, "Show Splits")
}), i
}, o.prototype._studyEsdContextMenu = function(t) {
var e = [];
return this._chart.readOnly() || e.push(this.createDividendsShow(t), this
.createSplitsShow(t), this.createEarningsShow(t)), C.createMenu(e)
}, o.prototype._studyContextMenu = function(t) {
var i, o, n, r, s, a = this._chart.actions(),
l = t.properties().visible.value(),
c = [];
return t.userEditEnabled() ? (i = this._chart,
this._chart.readOnly() ? c = [l ? a.studyHide : this.createActionShow(t), new T,
this.createActionScaleLeft(t), this.createActionScaleRight(t), this
.createActionNoScale(t)
] : (o = [], n = t.metaInfo(), n.pine && (o = [a.viewSourceCode], a
.viewSourceCode.setEnabled(!0), ScriptLib.isAuthToGetPineSourceCode(n
.scriptIdPart, n.pine.version).done(function(t) {
t || a.viewSourceCode.setEnabled(!1)
}).fail(function(t) {
N.logError("Failed isAuthToGetPineSourceCode, reason: " + t)
})), c = [], e.enabled("study_on_study") && t.canHaveChildren() && c
.push(this.createActionAddChildStudy(t)), e.enabled("property_pages") && c
.push(a.format), c = c.concat(o), c = c.concat([l ? a.studyHide : this
.createActionShow(t), this.createVisualOrderAction(t), new T
]), r = this._mergeContentMenuItems(t), !r.length || t.properties()
.linkedToSeries && t.properties().linkedToSeries.value() || (r.push(new T),
c = c.concat(r)), c.push(this.createActionScaleLeft(t), this
.createActionScaleRight(t), this.createActionNoScale(t), new T), e
.enabled("datasource_copypaste") && !t.isChildStudy() && (s = new S({
text: window.t("Copy"),
shortcut: "Ctrl-C",
statName: "Copy"
}), s.callbacks().subscribe(null, function() {
i.onAppClipboardCopy(t)
}), c.push(s)), c.push(a.studyRemove)), C.createMenu(c)) : C.createMenu(c)
}, o.prototype.createLineToolTemplateAction = function(t) {
var e, i, o, n, r, s = window.lineToolPropertiesToolbar.templatesList(),
a = new S({
text: window.t("Templates"),
statName: "Templates"
});
return a.subActions || (a.subActions = []), e = a.subActions, i = new S({
text: window.t("Save As..."),
statName: "SaveAs"
}), i.callbacks().subscribe(this, function() {
s.showSaveDialog(function(e) {
var i = JSON.stringify(t.template());
s.saveTemplate(e, i)
})
}), e.push(i), o = new S({
text: window.t("Apply Default"),
statName: "ApplyDefault"
}), o.callbacks().subscribe(this, function() {
this._chart.model().restoreLineToolFactoryDefaults(t,
"Load default drawing template"), window.lineToolPropertiesToolbar
.onSourceChanged(t)
}), e.push(o), n = $.Deferred(), s.templatesLoaded().then(function() {
var t = s.getData(),
e = [];
0 !== t.length && e.push(new T), $.each(t, function(t, i) {
function o(t) {
return function() {
var e = this.getTopLevelMenu();
return e && e.hide(), s.deleteAction(t), !0
}
}
var n = new S({
text: i,
statName: "ApplyTemplate"
});
n.callbacks().subscribe(this, function() {
s.loadTemplate(i)
}), n.deleteButton = {
action: o(n.text)
}, e.push(n)
}), n.resolve(e)
}), r = new w(n), e.push(r), a
}, o.prototype._lineContextMenu = function(t) {
var n = [],
r = this._chart,
s = r.actions(),
a = this;
return new Promise(function(l) {
i.e(12).then(function(c) {
var h, u, d, p, _, f = i(1077).hasStylesPropertyPage;
if (r.readOnly()) n.push(s.lineHide);
else if (t.userEditEnabled() && (e.enabled("alerts") && !a
.chart().onWidget() && t.hasAlert.value() && n.push(a
._createEditAlertDrawingAction(t)), e.enabled(
"property_pages") && f(t, r.model()) && n.push(s
.format), n.push(s.paneObjectTree), e.enabled(
"charting_library_base") || n.push(a
.createLineToolTemplateAction(t)), n.push(a
.createVisualOrderAction(t), new T, s.lineHide, s
.lineToggleLock), t.properties().clonable && t
.properties().clonable.value() && (h = new S({
text: window.t("Clone"),
callbackContext: {
target: t
},
shortcut: "Ctrl+Drag",
doNotBindShortcut: !0,
statName: "Clone"
}),
h.callbacks().subscribe(a, o.prototype.cloneLineTool
.bind(a, t, !1)), n.push(h)), e.enabled(
"datasource_copypaste") && !t.properties()
.blockCopying && (u = new S({
text: window.t("Copy"),
shortcut: "Ctrl-C",
statName: "Copy"
}), u.callbacks().subscribe(null, function() {
r.onAppClipboardCopy(t)
}), n.push(u)), e.enabled("support_multicharts") && (t
.linkKey ? n.push(s.lineUnlink) : n.push(s
.lineCopyToCharts)), n.push(s.lineRemove), t
.additionalActions))
for (n.push(new T), d = t.additionalActions(r.model()), p =
0; p < d.length; p++) n.push(d[p]);
_ = C.createMenu(n), l(_)
}.bind(null, i)).catch(i.oe)
})
}, o.prototype._tradingDrawingsContextMenu = function(t) {
return C.createMenu(t.contextMenuItems())
}, o.prototype._chartEventsContextMenu = function(t) {
var i, o, n, r = [];
return e.enabled("property_pages") && (i = this._chart, o = new S({
text: window.t("Format..."),
enabled: !0,
statName: "Format"
}), o.callbacks().subscribe(this, function(t) {
TVSettings.setValue("properties_dialog.active_tab.chart", window.t(
"Events & Alerts")), i.showChartProperties()
}), r.push(o)), n = new S({
text: window.t("Hide Events on Chart"),
enabled: !0,
statName: "HideEvents"
}), n.callbacks().subscribe(this, function(e) {
t.properties().visible.setValue(!1)
}), r.push(n), C.createMenu(r)
}, o.prototype._createAlertToggleHorzLineLabelAction = function(t) {
var e = t.properties().line.visible,
i = new S({
checkable: !0,
text: window.t("Extend Alert Line"),
enabled: !0,
checked: e.value(),
statName: "ToggleExtendAlertLine"
});
return i.callbacks().subscribe(this, function(t) {
var i = t.checked,
o = i ? window.t("Show alert label line") : window.t(
"Hide alert label line");
this._chart.model().setProperty(e, i, o)
}), i.setEnabled(t.globalProperties().line.visible.value()), i
}, o.prototype._createShowGlobalAlertPropertiesLabelAction = function(t) {
var e = this.chart(),
i = new S({
text: window.t("Visual settings..."),
statName: "VisualSettings"
});
return i.callbacks().subscribe(this, function(t) {
e.showChartProperties({
selectAlertEvent: !0
})
}), i
}, o.prototype._createEditAlertDrawingAction = function(t) {
if (t.hasAlert.value()) {
var e = new S({
text: window.t("Edit {0} Alert...").format(t.title()),
statName: "EditAlert"
});
return e.callbacks().subscribe(null, function() {
runOrSignIn(function() {
t.editAlert()
}, {
source: "Alert edit from pane context menu"
})
}), e
}
}, o.prototype.cloneLineTool = function(t, e) {
return this._chart.model().cloneLineTool(t, e)
}, o.prototype.setPriceAxisSize = function(t, e) {
this._priceAxisWidget(t).setSize(e)
}, o.prototype.setPriceAxisVisible = function(t, e) {
this._priceAxisWidget(t).setVisible(e), this._cachedStatus = null
}, o.prototype.resetPriceAxisOptimalWidth = function(t) {
this._priceAxisWidget(t).resetOptimalWidth(), this._cachedStatus = null
}, o.prototype.setSize = function(t) {
this.size && this.size.equals(t) || (this.size = t, M(this.canvas, t), M(this
.top_canvas, t), this.ctx = this.canvas.getContext("2d"), this.jqPane.width(
t.w), this.jqPane.height(t.h), this._cachedStatus = null, this.jqRow
.toggleClass("js-hidden", 0 === t.h))
}, o.prototype.dataSourceAtPoint = function(t, e) {
var i, o, r, s, a, l, c, h, u, d, p, _, f, m, g, v = null,
y = null;
if (!this._state) return null;
for (i = this._state.hitTestSources(), o = i.length; 0 < o--;)
if (r = i[o],
s = r.paneViews(this._state))
for (a = s.length; 0 < a--;)(l = s[a].renderer(e)) && l.hitTest && (c = l
.hitTest(new n(t, e))) && (h = y ? y.result() : 0, c.result() > h && (
y = c, v = r));
if (this.containsMainSeries()) {
for (u = this._chart.model().barsMarksSources(), o = 0; o < u.length; ++o)
for (r = u[o], s = r.paneViews(), a = 0; a < s.length; a++)
if (l = s[a].renderer(e), d = l.hitTest(new n(t, e))) {
y = d, v = r;
break
} p = this._chart.model().activeStrategySource().value(), _ = p && p
._strategyOrdersPaneView, _ && (f = _.renderer()) && (m = f.hitTest(new n(t,
e))) && (y = m, v = p)
}
return null === v && (v = this.legendWidget.dataSourceAtPoint(t, e)), g = this._chart
.model().brandingSource(), g && (m = g.hitTest(new n(t, e))) && (y = m, v = g), {
source: v,
hittest: y
}
}, o.prototype.update = function() {
this.lhsPriceAxisWidget.update(), this.rhsPriceAxisWidget.update(), this.legendWidget
.update(), this.paneControls && this.paneControls.update()
}, o.prototype.updateControls = function() {
this.paneControls && this.paneControls.update()
}, o.prototype.drawBackground = function(t, e) {
D(t, 0, 0, this.size.w, this.size.h, e)
}, o.prototype.drawGrid = function(t) {
var e, i, o = this._chart.model().gridSource(),
n = o.paneViews(this._state),
r = this._state.height(),
s = this._state.width();
for (e = 0; e < n.length; e++) t.save(), i = n[e].renderer(r, s), i && i.draw(t), t
.restore()
}, o.prototype.drawWatermark = function(t) {
var e, i, o = this._chart.model().watermarkSource(),
n = o.paneViews(this._state),
r = this._state.height(),
s = this._state.width();
for (e = 0; e < n.length; e++) t.save(), i = n[e].renderer(r, s), i && i.draw(t), t
.restore()
}, o.prototype.drawBranding = function(t) {
var e, i, o, n, r, s = this._chart.model().brandingSource();
if (s)
for (e = s.paneViews(this._state), i = this._state.height(), o = this._state
.width(), n = 0; n < e.length; n++)(r = e[n].renderer(i, o)) && (t.save(), r
.draw(
t), t.restore())
}, o.prototype.drawCrossHair = function(t) {
var e = this._chart.model().crossHairSource();
e.visibleTrap && (!e.visible && x.lockTimeAxis().value() && (e.setLockedPosition(this
._state), e.updateAllViews()), this._drawSource(e, t))
}, o.prototype._drawSource = function(t, e) {
var i, o, n, r, s = t.paneViews(this._state);
if (s)
for (i = this._state.height(), o = this._state.width(), n = 0; n < s.length; n++)(
r = s[n].renderer(i, o)) && (e.save(), r.draw(e), e.restore())
}, o.prototype._drawSourceStrategyOrders = function(t, e) {
var i, o = t._strategyOrdersPaneView;
o && (i = o.renderer()) && (e.save(), i.draw(e), e.restore())
}, o.prototype._drawSourceBackground = function(t, e) {
var i, o, n, r, s = t.paneViews(this._state);
if (s)
for (i = this._state.height(), o = this._state.width(), n = 0; n < s.length; n++)(
r = s[n].renderer(i, o)) && r.drawBackground && (e.save(), r.drawBackground(
e), e.restore())
}, o.prototype.drawActiveLineTool = function(t) {
var e, i, o = [this._chart.model().lineBeingCreated(), this._chart.model()
.sourceBeingMoved(), this._chart.model().lineBeingEdited()
];
for (e = 0; e < o.length; e++)(i = o[e]) && this._chart.model().paneForSource(i) ===
this._state && this._drawSource(i, t)
}, o.prototype.disableDrawOnTop = function(t) {
return t && t.hasOwnProperty("_metaInfo") && "Volume@tv-basicstudies" === t._metaInfo.id
}, o.prototype.drawSources = function(t) {
var e, i, o, n, r, s = this._state.orderedSources(),
a = this._state.model(),
l = this._chart.model().selectedSource(),
c = this._chart.model().hoveredSource(),
h = a.crossHairSource(),
u = [this._chart.model().lineBeingCreated(), this._chart.model().sourceBeingMoved(),
this._chart.model().lineBeingEdited()
];
for (this.disableDrawOnTop(l) && (l = void 0), this.disableDrawOnTop(c) && (c = void 0),
e = this._chart.model().model().panes(), i = e.length - 1; i >= 0; i--) e[i]
.createDrawingsCaches();
for (i = 0; i < s.length; i++) this._drawSourceBackground(s[i], t);
for (i = 0; i < s.length; i++)(o = s[i]) !== h && o !== l && o !== c && -1 === u
.indexOf(o) && this._drawSource(o, t);
for (n = null, l && -1 === u.indexOf(l) && -1 !== s.indexOf(l) && (n = l, this
._drawSource(l, t)), c && c !== n && -1 === u.indexOf(c) && -1 !== s.indexOf(
c) && this._drawSource(c, t), r = this._chart.model().activeStrategySource()
.value(), r && this.containsMainSeries() && this._drawSourceStrategyOrders(r, t),
i = e
.length - 1; i >= 0; i--) e[i].clearDrawingCaches()
}, o.prototype.recalculatePriceScale = function() {
var t, e, i, o = this._state;
for (o.recalculatePriceScale(o.m_rightPriceScale), o.recalculatePriceScale(o
.m_leftPriceScale), t = o.dataSources(), e = 0; e < t.length; ++e) i = t[e], o
.isOverlay(i) && (i instanceof d || o.recalculatePriceScale(i.priceScale()), i
.updateAllViews())
}, o.prototype.containsMainSeries = function() {
return this._state.containsMainSeries()
}, o.prototype.drawBarsMarks = function(t, e) {
var i, o;
this.containsMainSeries() && !e && (i = this._chart.model().barsMarksSources(), o =
this, i.forEach(function(e) {
o._drawSource(e, t)
}))
}, o.prototype._syncOverlays = function() {
var t, e, i = this._state.orderedSources(),
o = {},
n = this;
$.each(i, function() {
var t, e, i = this.paneViews(n._state);
if (i)
for (t = 0; t < i.length; t++) e = i[t], e.uid && (o[e.uid()] = e)
});
for (t in this._overlays) o[t] || (this._dv.remove(this._overlays[t]), this._overlays[
t] = void 0);
for (t in o) this._overlays[t] || (e = o[t].overlay(), this._dv.append(e), this
._overlays[t] = e)
}, o.prototype.hardResetCanvas = function() {
this.size && (E(this.canvas, this.size), E(this.top_canvas, this.size), this
.lhsPriceAxisWidget.hardResetCanvas(), this.rhsPriceAxisWidget.hardResetCanvas()
)
}, o.prototype.paint = function(t, e) {
if (t && this._chart.model())
if (this.lhsPriceAxisWidget.paint(t), this.rhsPriceAxisWidget.paint(t), t === I
.FULL_UPDATE && (this._cachedStatus = null), t === I.UPDATE_CURSOR_ONLY) this
.top_ctx.clearRect(-.5, -.5, this.size.w, this.size.h), this.drawCrossHair(this
.top_ctx), this.drawActiveLineTool(this.top_ctx);
else {
var i = this.ctx;
this.top_ctx.clearRect(-.5, -.5, this.size.w, this.size.h), this.drawBackground(
i, this.backgroundColor()), this._state && (this
.recalculatePriceScale(), this.drawGrid(i), this.drawWatermark(i), this
.drawSources(i), this.drawBarsMarks(i, e), this.drawCrossHair(this
.top_ctx), this.drawActiveLineTool(this.top_ctx), this.drawBranding(
i))
}
}, o.prototype.leftPriceAxisWidget = function() {
return this.lhsPriceAxisWidget
}, o.prototype.rightPriceAxisWidget = function() {
return this.rhsPriceAxisWidget
}, o.prototype._priceAxisWidget = function(t) {
return l.isLeft(t) ? this.lhsPriceAxisWidget : this.rhsPriceAxisWidget
}, o.prototype.statusWidget = function() {
return this.legendWidget
},
o.prototype.onScaleLeft = function(t) {
var e = t.callbackContext(); - 1 === this._state.leftPriceScale().dataSources().indexOf(
e) && this.chart().model().move(e, this._state, this._state.leftPriceScale())
}, o.prototype.onScaleRight = function(t) {
var e = t.callbackContext(); - 1 === this._state.rightPriceScale().dataSources()
.indexOf(e) && this.chart().model().move(e, this._state, this._state
.rightPriceScale())
}, o.prototype.onNoScale = function(t) {
var e = t.callbackContext();
this._state.isOverlay(e) || this.chart().model().move(e, this._state, null)
}, o.prototype.onRiskReward = function(t) {}, o.prototype.createActionRiskReward = function(
t) {
var e = new S({
checkable: !1,
text: window.t("Risk/Reward"),
enabled: !0,
statName: "RiskReward"
});
return e.setCallbackContext(t), e.callbacks().subscribe(this, o.prototype.onRiskReward),
e
}, o.prototype.createActionScaleLeft = function(t) {
var e = new S({
checkable: !0,
text: window.t("Scale Left"),
enabled: !0,
statName: "ToggleScaleLeft"
});
return e.setCallbackContext(t), e.setChecked(-1 !== this._state.leftPriceScale()
.dataSources().indexOf(t)), e.callbacks().subscribe(this, o.prototype
.onScaleLeft), e
}, o.prototype.createActionScaleRight = function(t) {
var e = new S({
checkable: !0,
text: window.t("Scale Right"),
enabled: !0,
statName: "ToggleScaleRight"
});
return e.setCallbackContext(t), e.setChecked(-1 !== this._state.rightPriceScale()
.dataSources().indexOf(t)), e.callbacks().subscribe(this, o.prototype
.onScaleRight), e
}, o.prototype.createActionNoScale = function(t) {
var e = this._chart.model().paneForSource(t),
i = e.actionNoScaleIsEnabled(t),
n = new S({
checkable: !0,
text: window.t("Screen (No Scale)"),
enabled: i,
statName: "ToggleNoScale"
});
return n.setCallbackContext(t), n.setChecked(this._state.isOverlay(t)), n.callbacks()
.subscribe(this, o.prototype.onNoScale), n
}, o.prototype.createActionShowCountdown = function(t) {
var e = new S({
checkable: !0,
text: window.t("Show Countdown"),
enabled: !0,
statName: "ToggleShowCountdown"
}),
i = this._chart.model().mainSeries().properties();
return e._binding = new v(e, i.showCountdown, this._chart.model(), e.text), e._binding
.setValue(i.showCountdown.value()), e
}, o.prototype.createActionLockScale = function(t) {
var e, i, o;
return t instanceof TradingView.Series ? (e = c(t.priceScale(), this._chart.model()
.model().mainSeriesScaleRatio()), i = new S({
checkable: t.priceScale().isLockScale(),
text: window.t("Lock Scale") + " " + e,
enabled: !0,
statName: "LockScale"
}), o = function(e) {
this._undoModel.setLockScaleProperty(this._property, e.checked, t, this
._undoText)
}, i._binding = new v(i, t.priceScale().properties().lockScale, this._chart
.model(), "Lock Scale", o), i) : null
}, o.prototype.createActionMergeUp = function(t) {
if (!this._chart.model().model().isMergeUpAvailableForSource(t)) return null;
var e = new S({
checkable: !1,
text: window.t("Merge Up"),
enabled: !0,
statName: "MergeUp"
});
return e.setCallbackContext(t), e.callbacks().subscribe(this, o.prototype.onMergeUp), e
}, o.prototype.onMergeUp = function(t) {
var e = t.callbackContext();
this._chart.model().mergeSourceUp(e)
}, o.prototype.createActionUnmergeUp = function(t) {
if (!this._chart.model().model().isUnmergeAvailableForSource(t)) return null;
var e = new S({
checkable: !1,
text: window.t("Unmerge Up"),
enabled: !0,
statName: "UnmergeUp"
});
return e.setCallbackContext(t), e.callbacks().subscribe(this, o.prototype.onUnmergeUp),
e
}, o.prototype.onUnmergeUp = function(t) {
var e = t.callbackContext();
this._chart.model().unmergeSourceUp(e)
}, o.prototype.createActionMergeDown = function(t) {
if (!this._chart.model().model().isMergeDownAvailableForSource(t)) return null;
var e = new S({
checkable: !1,
text: window.t("Merge Down"),
enabled: !0,
statName: "MergeDown"
});
return e.setCallbackContext(t), e.callbacks().subscribe(this, o.prototype.onMergeDown),
e
}, o.prototype.onMergeDown = function(t) {
var e = t.callbackContext();
this._chart.model().mergeSourceDown(e)
}, o.prototype.createActionUnmergeDown = function(t) {
if (!this._chart.model().model().isUnmergeAvailableForSource(t)) return null;
var e = new S({
checkable: !1,
text: window.t("Unmerge Down"),
enabled: !0,
statName: "UnmergeDown"
});
return e.setCallbackContext(t), e.callbacks().subscribe(this, o.prototype
.onUnmergeDown), e
}, o.prototype.onUnmergeDown = function(t) {
var e = t.callbackContext();
this._chart.model().unmergeSourceDown(e)
}, o.prototype._mergeContentMenuItems = function(t) {
var e = [],
i = this.createActionMergeUp(t);
return i && e.push(i), i = this.createActionUnmergeUp(t), i && e.push(i), i = this
.createActionMergeDown(t), i && e.push(i), i = this.createActionUnmergeDown(t), i &&
e.push(i), e
}, o.prototype.createActionShow = function(t) {
var e = new S({
checkable: !0,
text: window.t("Show"),
enabled: !0,
statName: "ToggleShow"
});
return e._binding = new v(e, t.properties().visible, this._chart.model(), e.text), e
._binding.setValue(t.properties().visible.value()), e
}, o.prototype.createActionAddChildStudy = function(t) {
var e = new S({
text: window.t("Apply Indicator on {0} ...").format(t.title(!0)),
enabled: !0,
statName: "ApplyIndicator"
});
return e.callbacks().subscribe(this, function() {
var e, i, o = this._chart.showIndicators(t);
o && (e = function() {
f("SOS", "Apply SOS", "Apply by RC menu")
}, i = this._chart.model().model().studyInserted(), i.subscribe(
this, e), o.visibilityChanged.subscribe(this, function(t) {
t || i.unsubscribe(this, e)
}, !0))
}), e
}, o.prototype.bringObjectForward = function(t) {
var e = this._chart.model().selectedSource();
e && this._chart.model().changeZOrder(e, 1)
}, o.prototype.sendObjectToBack = function(t) {
var e = this._chart.model().selectedSource();
e && this._chart.model().sendToBack(e)
}, o.prototype.bringObjectToFront = function(t) {
var e = this._chart.model().selectedSource();
e && this._chart.model().bringToFront(e)
}, o.prototype.sendObjectBackward = function(t) {
var e = this._chart.model().selectedSource();
e && this._chart.model().changeZOrder(e, -1)
}, o.prototype.createVisualOrderAction = function(t) {
var e, i, n, r, s, a, l = new S({
text: window.t("Visual Order"),
statName: "VisualOrder"
});
return l.subActions || (l.subActions = []), e = new S({
text: window.t("Bring to Front"),
statName: "BringToFront"
}), e.callbacks().subscribe(this, o.prototype.bringObjectToFront), l.subActions
.push(e), i = new S({
text: window.t("Send to Back"),
statName: "SendToBack"
}), i.callbacks().subscribe(this, o.prototype.sendObjectToBack), l.subActions.push(
i), n = new S({
text: window.t("Bring Forward"),
statName: "BringForward"
}),
n.callbacks().subscribe(this, o.prototype.bringObjectForward), l.subActions.push(n),
r = new S({
text: window.t("Send Backward"),
statName: "SendBackward"
}), r.callbacks().subscribe(this, o.prototype.sendObjectBackward), l.subActions
.push(r), s = this._chart.model().paneForSource(t), a = s.getZOrderMinMax(), i
.setEnabled(!0), n.setEnabled(!0), r.setEnabled(!0), e.setEnabled(!0), t
.zorder() === a.minZOrder && (i.setEnabled(!1), r.setEnabled(!1)), t.zorder() === a
.maxZOrder && (n.setEnabled(!1), e.setEnabled(!1)), l
}, o.prototype.image = function() {
var t = {};
return t.leftAxis = this.leftPriceAxisWidget().image(), t.rightAxis = this
.rightPriceAxisWidget().image(), t.content = this.canvas.toDataURL(), t
.contentWidth = this.size.w, t.contentHeight = this.size.h, t
}, o.prototype._updateTooltip = function(t, e) {
if (!this._rafSet) {
var i = this;
requestAnimationFrame(function() {
i._updateTooltipImpl(t, e), i._rafSet = !1
}), this._rafSet = !0
}
}, o.prototype._updateTooltipImpl = function(t, e) {
function i(i) {
function n() {
return TradingView.isMobile.any() ? {
left: t - o._tooltipSelector.outerWidth() - 16,
top: e - o._tooltipSelector.outerHeight() - 16
} : {
left: t + 16,
top: e + 16
}
}
TradingView[r].getTooltipText && (i = TradingView[r].getTooltipText(l) || i), o
._tooltipSelector.html(i).removeClass("tooltip-selector-hidden").css(n())
}
var o, n, r, a, l, c;
if (this._chart) {
for (o = this, n = this._chart.paneWidgets(), r = x.tool.value(), a = this._state
.model(), l = a.lineBeingCreated(), c = n.length - 1; c >= 0; c--) n[c]
._hideTooltip();
this._isSelectBarModeEnabled() || (s.isStudyLineTool(r) && !TradingView.isMobile
.any() ? i(window.t("Click to set a point")) : TradingView.isMobile.any() &&
"LineToolBrush" !== r && o.isLineTool(r) && !o._chart.model()
.lineBeingCreated() ? i(window.t(
"1. Slide your finger to select location for first anchor<br>2. Tap anywhere to place the first anchor"
)) : TradingView.isMobile.any() && "LineToolBrush" !== r && o
.isLineTool(r) && i(window.t(
"1. Slide your finger to select location for next anchor<br>2. Tap anywhere to place the next anchor"
)))
}
}, o.prototype._hideTooltip = function() {
this._tooltipSelector.addClass("tooltip-selector-hidden")
}, o.prototype._updateCrosshairOnZoom = function() {
var t, e;
x.lockTimeAxis().value() && (t = this._chart.model(), e = t.crossHairSource(), e
.setPosition(e.index, e.price, this._state))
}, o.prototype._isSelectBarModeEnabled = function() {
return this._chart.model().crossHairSource().selectBarMode().value()
}, t.exports = o
}).call(e, i(5))
},
function(t, e) {},
function(t, e, i) {
"use strict";
function o(t, e) {
this._source = e, this._properties = t, this._points = [new l(-1, -1)], this._invalidated = !0, this
._lineRenderer = new h
}
function n() {
this._data = null
}
function r(t) {
this._source = t, this._points = [], this._bandBgRenderer = new n
}
function s(t, e, i) {
this._source = t, this._points = [], a(e.type === u.FilledArea.TYPE_HLINES,
"Wrong filledArea type: " + e.type), this._initBandIndexes(e.objAId, e.objBId), this
._fillStyleProps = i, this._bandBgRenderer = new n
}
var a = i(9).assert,
l = i(8).Point,
c = i(54).clamp,
h = i(94).HorizontalLineRenderer,
u = i(33),
d = i(30);
o.prototype.update = function() {
this._invalidated = !0
}, o.prototype.updateImpl = function() {
var t, e = this._source.priceScale();
if (!e || e.isEmpty()) return void(this._points[0] = new l(-1, -1));
t = this._properties.value.value(), isNumber(t) ? this._points[0] = new l(-1, e
.priceToCoordinate(t)) : this._points[0] = new l(-1, NaN)
}, o.prototype.renderer = function() {
this._invalidated && (this.updateImpl(), this._invalidated = !1);
var t = {};
return t.width = this._source.model().timeScale().width(), t.height = this._source.priceScale()
.height(), t.points = this._points, t.color = this._properties.color.value(), t.linewidth =
this._properties.linewidth.value(), t.linestyle = this._properties.linestyle.value(), this
._lineRenderer.setData(t), this._lineRenderer
}, n.prototype.setData = function(t) {
this._data = t
}, n.prototype.draw = function(t) {
var e, i, o;
null !== this._data && 0 !== this._data.points.length && (e = t.canvas.width, t.fillStyle = d
.generateColor(this._data.backcolor, this._data.transparency), i = Math.min(this._data
.points[0], this._data.points[1]), o = Math.max(this._data.points[0], this._data
.points[1]), t.fillRect(0, i, e, o - i))
}, n.prototype.hitTest = function(t) {
return null
}, r.prototype.update = function() {
var t, e, i, o;
this._points = [], t = this._source.properties().bandsBackground, t.fillBackground.value() && (
e = this._source.properties().bands[0], i = this._source.properties().bands[1], (o =
this._source.priceScale()) && !o.isEmpty() && (this._points.push(o
.priceToCoordinate(e.value.value())), this._points.push(o.priceToCoordinate(i
.value.value()))))
}, r.prototype.renderer = function() {
var t = {};
return t.points = this._points, t.backcolor = this._source.properties().bandsBackground
.backgroundColor.value(), t.transparency = this._source.properties().bandsBackground
.transparency.value(), this._bandBgRenderer.setData(t), this._bandBgRenderer
}, s.prototype._initBandIndexes = function(t, e) {
var i, o;
for (this._bandAKey = null, this._bandBKey = null, i = 0; i < this._source.metaInfo().bands
.length; ++i) o = this._source.metaInfo().bands[i], null !== this._bandAKey || o.id !== t ?
null !== this._bandBKey || o.id !== e || (this._bandBKey = i) : this._bandAKey = i
}, s.prototype.update = function() {
var t, e, i;
this._points = [], this._fillStyleProps.visible.value() && (t = this._source.properties().bands[
this._bandAKey], e = this._source.properties().bands[this._bandBKey], (i = this
._source.priceScale()) && !i.isEmpty() && (this._points.push(i.priceToCoordinate(t
.value.value())), this._points.push(i.priceToCoordinate(e.value.value()))))
}, s.prototype.renderer = function() {
var t, e = this._fillStyleProps.transparency.value();
return e = c(e, 0, 100), t = {}, t.points = this._points, t.backcolor = d.generateColor(this
._fillStyleProps.color.value(), e), t.transparency = this._fillStyleProps.transparency
.value(), this._bandBgRenderer.setData(t), this._bandBgRenderer
}, e.BandPaneView = o, e.BandBackgroundPaneView = r, e.HlineFillPaneView = s
},
function(t, e, i) {
"use strict";
var o, n, r;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(30), r = function() {
function t(t) {
this.setData(t)
}
return t.prototype.setData = function(t) {
this._data = o.__assign({}, t)
}, t.prototype.draw = function(t, e) {
var i, o, r, s, a, l, c, h, u, d, p, _, f, m, g, v, y, b, S, w;
this._data.visible && (i = e.fontSize, t.font = e.font, o = e.tickLength, r = e
.borderSize, s = e.paddingTop, a = e.paddingBottom, l = e.paddingInner,
c = e.paddingOuter, h = Math.ceil(e.widthCache.measureText(t, this._data.text)),
u = e.baselineOffset, d = e.fontSize + s + a, p = r + h + l + c + o, _ = this
._data.coordinate, this._data.fixedCoordinate && (_ = this._data
.fixedCoordinate), f = _ - Math.floor(i / 2) - s - .5, m = f + d, g = e
.isLeft ? e.width - r - .5 : .5, v = g, t.fillStyle = n.resetTransparency(this
._data.background), t.lineWidth = 1, this._data.text && (e.isLeft ? (v = g -
p, y = g - o, b = v + c) : (v = g + p, y = g + o, b = g + r + o + l), t
.beginPath(), t.moveTo(g, f), t.lineTo(v, f), t.lineTo(v, m), t.lineTo(g,
m), t.fill(), t.beginPath(), t.strokeStyle = this._data.color, t.moveTo(
g,
_), t.lineTo(y, _), t.stroke(), t.textAlign = "left", t.fillStyle = this
._data.color, t.fillText(this._data.text, b, m - a - u)), this._data
.secondLine && (S = Math.ceil(e.widthCache.measureText(t, this._data
.secondLine)), w = S + l + c, t.fillStyle = n.resetTransparency(this
._data.background), this._data.text && (f += d + 1, m += d + 1), e
.isLeft ? (v = Math.min(v, e.width - o), g = v + w, b = v + c) : (g = Math
.max(v - w, r), v = g + w, b = g + l), t.beginPath(), t.moveTo(g, f), t
.lineTo(v, f), t.lineTo(v, m), t.lineTo(g, m), t.fill(), t.textAlign =
"left", t.fillStyle = this._data.color, t.fillText(this._data.secondLine, b,
m - a - u)))
}, t.prototype.height = function(t, e) {
var i = t.fontSize + t.paddingTop + t.paddingBottom;
return this._data.secondLine && e ? 2 * i + 1 : i
}, t
}(), e.PriceAxisViewRenderer = r
},
function(t, e, i) {
"use strict";
function o(t) {
this.items = t.items, this.barSpacing = t.barSpacing, this.histogramBase = t.histogramBase, this
.lineColor = t.lineColor, this.lineWidth = t.lineWidth
}
var n = i(8).Point,
r = i(44).distanceToSegment,
s = i(45).selectionTolerance,
a = i(11);
o.prototype.draw = function(t) {
var e, i, o, n, r;
for (t.translate(.5, .5), t.fillStyle = this.lineColor, e = this.lineWidth, i = 0; i < this
.items.length; ++i) o = this.items[i], n = o.x, r = o.y, o.style && (t.fillStyle = o.style
.color, e = o.style.width), t.fillRect(Math.round(n - .5 * e), r, e, this
.histogramBase - r)
}, o.prototype.hitTest = function(t) {
var e, i, o, l, c, h = s(this.lineWidth);
for (c = 0; c < this.items.length; ++c)
if (e = this.items[c], i = e.x, o = e.y, l = r(new n(i, o), new n(i, this.histogramBase),
new n(t.x, t.y)), l.distance <= h) return new a(a.REGULAR);
return null
}, e.PaneRendererHistogram = TradingView.PaneRendererHistogram = o
},
function(t, e, i) {
"use strict";
function o(t) {
this.items = t.items, this.barSpacing = t.barSpacing, this.histogramBase = t.histogramBase, this
.lineColor = t.lineColor, this.lineWidth = t.lineWidth
}
var n = i(11);
o.prototype.draw = function(t) {
var e, i, o, n, r, s, a, l, c, h, u, d, p;
if (0 !== this.items.length) {
for (e = this.barSpacing, i = this.lineColor, o = this.histogramBase, t.translate(.5, .5),
n = {}, r = this.items, s = 0; s < r.length; ++s) a = r[s], l = 0 === s ? null : r[s -
1], c = a.style ? a.style.color : i, h = n[c] || [], h.push({
item: a,
prev: l
}), n[c] = h;
for (c in n) {
for (h = n[c], t.fillStyle = c, t.strokeStyle = c, t.lineWidth = 1, t.beginPath(), s =
0; s < h.length; s++) a = h[s].item, u = Math.ceil(a.x - .5 * e), d = Math.ceil(u +
e), p = a.y, t.rect(u, p, d - u, o - p);
for (t.fill(), t.beginPath(), s = 0; s < h.length; s++) a = h[s].item, u = Math.ceil(a
.x - .5 * e), d = Math.ceil(u + e), p = a.y, l = h[s].prev, t.moveTo(d - .5, o),
t.lineTo(d - .5, p + .5), t.lineTo(u + .5, p + .5), l && l.y > p && t.lineTo(u + .5,
l.y);
t.stroke()
}
}
}, o.prototype.hitTest = function(t) {
var e, i, o, r = .5 * this.barSpacing + this.lineWidth,
s = t.x - r,
a = t.x + r,
l = this.items;
for (e = l.length; e--;)
if ((i = l[e].x) >= s && i <= a && (o = l[e].y, t.y >= Math.min(o, this.histogramBase) && t
.y <= Math.max(o, this.histogramBase))) return new n(n.REGULAR);
return null
}, e.PaneRendererColumns = TradingView.PaneRendererColumns = o
},
function(t, e, i) {
"use strict";
function o(t) {
this.items = t.items, this.barSpacing = t.barSpacing, this.lineColor = t.lineColor, this.lineWidth =
t.lineWidth, this.lineStyle = t.lineStyle
}
var n = i(8).Point,
r = i(44).distanceToSegment,
s = i(45).selectionTolerance,
a = i(11);
o.prototype.draw = function(t) {
var e, i, o, n, r, s, a, l, c = !1;
for (o = 0; o < this.items.length; ++o) n = this.items[o], r = n.x, s = n.y, TradingView.isNaN(
r) || TradingView.isNaN(s) || (null != n.style ? (a = n.style.color, e = n.style
.width) : (a = this.lineColor, e = this.lineWidth), a !== i && (i = a, c && t
.fill(), t
.beginPath(), t.fillStyle = a), l = 3 * e, t.rect(r - l / 2, s - e / 2, l, e), t
.rect(r - e / 2, s - l / 2, e, l), c = !0);
c && t.fill()
}, o.prototype.hitTest = function(t) {
var e, i, o, l, c, h, u = s(this.lineWidth);
for (h = 1; h < this.items.length; ++h)
if (e = this.items[h - 1], i = this.items[h], o = e.x, l = i.x, c = r(new n(o, e.y), new n(
l, i.y), new n(t.x, t.y)), c.distance <= u) return new a(a.REGULAR);
return null
}, e.PaneRendererCross = TradingView.PaneRendererCross = o
},
function(t, e, i) {
"use strict";
function o(t) {
this.items = t.items, this.barSpacing = t.barSpacing, this.lineColor = t.lineColor || t.color, this
.radius = t.lineWidth || t.height / 2, this.vertOffset = t.vertOffset || 0
}
var n = i(8).Point,
r = i(45).selectionTolerance,
s = i(11);
o.prototype.draw = function(t) {
var e, i, o, n, r, s, a, l = 2 * Math.PI,
c = !1;
for (o = 0; o < this.items.length; ++o) n = this.items[o], r = n.x, s = n.y + this.vertOffset,
TradingView.isNaN(r) || TradingView.isNaN(s) || (null != n.style ? (a = n.style.color, e = n
.style.width) : (a = this.lineColor, e = this.radius), a !== i && (i = a, c && t
.fill(), t.beginPath(), t.fillStyle = a), t.moveTo(r + e, s), t.arc(r, s, e, 0, l, !
1), c = !0);
c && t.fill()
}, o.prototype.hitTest = function(t) {
var e, i, o, a = 2 * this.radius,
l = this.vertOffset,
c = r(a);
for (e = 0; e < this.items.length; ++e)
if ((i = this.items[e]) && (o = new n(i.x, i.y + l), o.subtract(t).length() + this.radius <=
c)) return new s(s.REGULAR);
return null
}, e.PaneRendererCircles = TradingView.PaneRendererCircles = o
},
function(t, e, i) {
"use strict";
function o(t) {
this._items = t.items, this._y = t.y, this._h = t.h, this._w = t.w
}
o.prototype.draw = function(t) {}, o.prototype.drawBackground = function(t) {
var e, i, o;
for (t.save(), t.translate(-.5, -.5), e = 0; e < this._items.length; ++e) i = this._items[e],
null != i.color && (t.fillStyle = i.color, o = e === this._items.length - 1 ? this._w : this
._items[e + 1].x - i.x, t.fillRect(i.x, this._y, o, this._h));
t.restore()
}, o.prototype.hitTest = function(t) {
return null
}, e.PaneRendererBackground = TradingView.PaneRendererBackground = o
},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(11), n = i(8), r = i(90), s = i(86), a = i(44), l = i(45), c = function() {
function t() {
this._data = null
}
return t.prototype.setData = function(t) {
this._data = t
}, t.prototype.draw = function(t) {
var e, i, o, n, s, a, l, c, h, u;
if (null !== this._data && 0 !== this._data.items.length) {
for (e = this._data, i = e.lineWidth, o = e.lineStyle, n = e.lineColor, s = e.items,
t.save(), t.lineCap = "square", t.strokeStyle = n, t.lineWidth = i, i % 2 ==
0 && t.translate(-.5, -.5),
void 0 !== o && r.setLineStyle(t, o), t.beginPath(), t.moveTo(s[0].x, s[0].y),
a = s.length, l = 0; l < a; l++) c = s[l], t.lineTo(c.x, c.y), (h = s[l + 1]) &&
(u = Math.round((c.x + h.x) / 2), t.lineTo(u, c.y), t.lineTo(u, h.y));
t.stroke(), t.restore()
}
}, t.prototype.hitTest = function(t) {
var e, i, r, c, h, u, d, p, _, f, m, g, v;
if (null === this._data || 0 === this._data.items.length) return null;
for (e = this._data, i = e.items, r = e.lineWidth, c = l.selectionTolerance(r), h = s
.lowerbound(i, t, function(t, e) {
return t.x <= e.x
}), u = Math.max(0, h - 1), d = Math.min(i.length - 1, h + 1), p = u; p < d; p++)
if (_ = i[p], (f = i[p + 1]) && (m = Math.round((_.x + f.x) / 2), g = new n.Point(m,
_.y), v = new n.Point(m, f.y), Math.min(a.distanceToSegment(_, g, t)
.distance, a.distanceToSegment(g, v, t).distance, a.distanceToSegment(v,
f, t).distance) <= c)) return new o(o.REGULAR);
return null
}, t
}(), e.PaneRendererStepLine = c
},
function(t, e, i) {
"use strict";
function o(t, e) {
var i = function i(o) {
var n = i.cache,
r = "" + (e ? e.apply(this, arguments) : o);
return n.hasOwnProperty(r) || (n[r] = t.apply(this, arguments)), n[r]
};
return i.cache = {}, i
}
Object.defineProperty(e, "__esModule", {
value: !0
}), e.default = o, t.exports = e.default
},
function(t, e, i) {
"use strict";
function o(t) {
s.call(this, t), this.width = this._calculateWidth(t.barSpacing), this._isUp = !1
}
function n(t) {
o.call(this, t), this._isUp = !0
}
function r(t) {
o.call(this, t), this._isUp = !1
}
var s = i(56).PaneRendererAbstractShape;
inherit(o, s), o.prototype._calculateWidth = function(t) {
return t = t || this.barSpacing, Math.round(t / 4)
}, o.prototype.drawShape = function(t) {
var e, i, o, n, r, s, a, l, c = !1,
h = this.width,
u = Math.abs(this.height),
d = h < 4,
p = Math.max(parseInt(h / 2), 1),
_ = Math.round(this.width / 2),
f = Math.round(this.width),
m = this._isUp ? -1 : 1;
for (i = 0, o = this.items.length; i < o; i++) n = this.items[i], r = n.x, s = n.y + this
._vertOffset + m * Math.round(u / 2), n.style && null != n.style.color ? (a = n.style.color,
l = n.style.borderColor) : (a = this._color, l = this._borderColor), a !== e && (e = a,
c && (t.fill(), t.stroke()), t.beginPath(), t.fillStyle = a, t.strokeStyle = l), t
.translate(r, s), d ? (t.moveTo(0, 0), t.lineTo(-_, -_ * m), t.moveTo(0, 0), t.lineTo(_, -
_ * m), t.moveTo(0, 0), t.lineTo(0, -u * m), t.moveTo(-_, -u * m), t.lineTo(_, -u *
m), t.lineWidth = p) : (t.moveTo(0, 0), u < f ? (t.lineTo(h, -u * m), t.lineTo(-h, -u *
m)) : (t.lineTo(h, -f * m), t.lineTo(_, -f * m), t.lineTo(_, -u * m), t.lineTo(-_, -
u * m), t.lineTo(-_, -f * m), t.lineTo(-h, -f * m)), t.lineTo(0, 0)), t.translate(-r, -
s), c = !0;
c && (t.fill(), t.stroke())
}, inherit(n, o), inherit(r, o), e.PaneRendererArrowBase = TradingView.PaneRendererArrowBase = o, e
.PaneRendererArrowUp = TradingView.PaneRendererArrowUp = n, e.PaneRendererArrowDown = TradingView
.PaneRendererArrowDown = r
},
function(t, e, i) {
"use strict";
function o(t) {
n.call(this, t)
}
var n = i(56).PaneRendererAbstractShape;
inherit(o, n), o.prototype.drawShape = function(t) {
var e, i, o, n, r, s, a, l, c = Math.max(this.width, this.height) / 2,
h = this._vertOffset,
u = 2 * Math.PI,
d = !1;
for (i = 0, o = this.items.length; i < o; i++) n = this.items[i], n.style && null != n.style
.color ? (r = n.style.color, s = n.style.borderColor) : (r = this._color, s = this
._borderColor), r !== e && (e = r, d && (t.fill(), t.stroke()), t.beginPath(), t
.fillStyle = r, t.strokeStyle = s), a = n.x, l = n.y + h, t.moveTo(a + c, l), t.arc(a,
l, c, 0, u, !1), d = !0;
d && (t.fill(), t.stroke())
},
e.PaneRendererCircleShape = TradingView.PaneRendererCircleShape = o
},
function(t, e, i) {
"use strict";
function o(t) {
n.call(this, t)
}
var n = i(56).PaneRendererAbstractShape;
inherit(o, n), o.prototype.drawShape = function(t) {
var e, i, o, n, r, s, a, l, c, h, u;
for (t.lineWidth = 2, e = this.width, i = this.height, o = this._vertOffset, r = !1, s = 0, a =
this.items.length; s < a; s++) l = this.items[s], c = l.style && null != l.style.color ? l
.style.color : this._color, c !== n && (n = c, r && t.stroke(), t.beginPath(), t
.strokeStyle = c), h = l.x - e / 2, u = l.y - i / 2 + o, t.moveTo(h + e / 2, u), t
.lineTo(h + e / 2, u + i), t.moveTo(h, u + i / 2), t.lineTo(h + e, u + i / 2), r = !0;
r && t.stroke()
}, e.PaneRendererCrossShape = TradingView.PaneRendererCrossShape = o
},
function(t, e, i) {
"use strict";
function o(t) {
n.call(this, t)
}
var n = i(56).PaneRendererAbstractShape;
inherit(o, n), o.prototype.drawShape = function(t) {
var e, i, o, n, r, s, a, l, c = !1,
h = Math.round(this.height / 2);
for (i = 0, o = this.items.length; i < o; i++) n = this.items[i], n.style && null != n.style
.color ? (r = n.style.color, s = n.style.borderColor) : (r = this._color, s = this
._borderColor), r !== e && (e = r, c && (t.fill(), t.stroke()), t.beginPath(), t
.fillStyle = r, t.strokeStyle = s), a = n.x, l = n.y + this._vertOffset, t.moveTo(a, l -
h), t.lineTo(a + h, l), t.lineTo(a, l + h), t.lineTo(a - h, l), t.lineTo(a, l - h),
c = !0;
c && (t.fill(), t.stroke())
}, e.PaneRendererDiamond = TradingView.PaneRendererDiamond = o
},
function(t, e, i) {
"use strict";
function o(t) {
n.call(this, t)
}
var n = i(56).PaneRendererAbstractShape;
inherit(o, n), o.prototype.drawShape = function(t) {
var e, i, o, n, r, s, a, l, c = this.width,
h = this.height,
u = h / 2,
d = this._vertOffset,
p = 3,
_ = (c - p) / 3,
f = !1;
for (i = 0, o = this.items.length; i < o; i++) n = this.items[i], n.style && null != n.style
.color ? (r = n.style.color, s = n.style.borderColor) : (r = this._color, s = this
._borderColor), r !== e && (e = r, f && (t.fill(), t.stroke()), t.beginPath(), t
.fillStyle = r, t.strokeStyle = s), a = n.x - c / 2, l = n.y - u + d, t.moveTo(a, l), t
.lineTo(a + p, l), t.bezierCurveTo(a + _, l - _, a + 2 * _, l + _, a + c, l), t.lineTo(a +
c, l + u), t.bezierCurveTo(a + c - _, l + u + _, a + c - 2 * _, l + u - _, a + p, l +
u), t.lineTo(a + p, l + h), t.lineTo(a, l + h), t.lineTo(a, l), f = !0;
f && (t.fill(), t.stroke())
}, e.PaneRendererFlagShape = TradingView.PaneRendererFlagShape = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
l.call(this, t), this._isUp = e, this._stepX = Math.round(this.height / 2 * .65) + .5, this._stepY =
Math.round(this.height / 2) + .5, this._textCache ? (this._padding = this._stepX / 2, this
._shapeWidth = this._textImageWidth + 2 * this._stepX, this._shapeHeight = this
._textImageHeight + 2 * this._padding + this._stepY, 0 === this._vertOffset ? this._isUp ?
this._textVertOffset = this._stepY + this._padding + this._textImageHeight : this
._textVertOffset = -this._stepY - this._padding : this._textVertOffset = this._vertOffset >
0 ? this._stepY + this._padding : -this._stepY - this._padding) : (this._padding = 0, this
._shapeWidth = 2 * this._stepX, this._shapeHeight = 2.5 * this._stepY)
}
function n(t) {
o.call(this, t, !0)
}
function r(t) {
o.call(this, t, !1)
}
var s = i(8).Point,
a = i(11),
l = i(56).PaneRendererAbstractShape;
inherit(o, l), o.prototype.drawShape = function(t) {
var e, i, o, n, r, s, a, l, c = !1,
h = this._isUp ? 1 : -1,
u = Math.round(this._shapeWidth / 2) - .5,
d = Math.round(this._shapeHeight) - .5,
p = 0;
for (0 !== this._vertOffset && this._vertOffset < 0 === this._isUp && (p = -h * Math.round(d +
this._stepY)), i = 0, o = this.items.length; i < o; i++) n = this.items[i], r = n.x +
.5, s = n.y + this._vertOffset + p + .5, n.style && null != n.style.color ? (a = n.style
.color, l = n.style.borderColor) : (a = this._color, l = this._borderColor), a !== e &&
(e = a, c && (t.fill(), t.stroke()), t.beginPath(), t.fillStyle = a, t.strokeStyle = l), t
.translate(r, s), t.moveTo(0, 0), t.lineTo(this._stepX, this._stepY * h), t.lineTo(u, this
._stepY * h), t.lineTo(u, d * h), t.lineTo(-u, d * h), t.lineTo(-u, this._stepY * h), t
.lineTo(-this._stepX, this._stepY * h), t.lineTo(0, 0), t.translate(-r, -s), c = !0;
c && (t.fill(), t.stroke())
}, o.prototype.hitTest = function(t, e) {
var i, o, n, r, l, c, h, u, d, p, _, f, m, g, v = this._stepY / 2,
y = this._vertOffset,
b = this._isUp ? 1 : -1;
for (o = 0; o < this.items.length; ++o)
if (n = this.items[o]) {
if (r = b * v, 0 !== this._vertOffset && this._vertOffset < 0 === this._isUp && (r = -
b * (this._shapeHeight + v)), i = new s(n.x, n.y + y + r), i.subtract(t)
.length() <= v) return new a(a.REGULAR);
if (l = this._shapeWidth / 2, r = 0, 0 !== this._vertOffset && this._vertOffset < 0 ===
this._isUp && (r = -b * (this._shapeHeight + this._stepY)), c = n.y + y + r, h =
this._isUp ? this._stepY : -this._shapeHeight, u = this._isUp ? this._shapeHeight :
-this._stepY, d = t.x, p = t.y, _ = n.x - l, f = c + h, m = n.x + l, g = c + u, d >
_ && d < m && p > f && p < g) return new a(a.REGULAR)
} return null
}, inherit(n, o), inherit(r, o), e.PaneRendererLabelBase = TradingView.PaneRendererLabelBase = o, e
.PaneRendererLabelUp = TradingView.PaneRendererLabelUp = n, e.PaneRendererLabelDown = TradingView
.PaneRendererLabelDown = r
},
function(t, e, i) {
"use strict";
function o(t) {
n.call(this, t)
}
var n = i(56).PaneRendererAbstractShape;
inherit(o, n), o.prototype.drawShape = function(t) {
var e, i, o, n, r, s, a, l, c = !1,
h = Math.round(this.height / 2);
for (i = 0, o = this.items.length; i < o; i++) n = this.items[i], n.style && null != n.style
.color ? (r = n.style.color, s = n.style.borderColor) : (r = this._color, s = this
._borderColor), r !== e && (e = r, c && (t.fill(), t.stroke()), t.beginPath(), t
.fillStyle = r, t.strokeStyle = s), a = n.x - h, l = n.y + this._vertOffset - h, t.rect(
a, l, this.height, this.height), c = !0;
c && (t.fill(), t.stroke())
}, e.PaneRendererSquare = TradingView.PaneRendererSquare = o
},
function(t, e, i) {
"use strict";
function o(t) {
s.call(this, t)
}
function n(t) {
s.call(this, t)
}
function r(t) {
s.call(this, t)
}
var s = i(56).PaneRendererAbstractShape;
inherit(o, s), o.prototype.drawShape = function(t) {
var e, i, o, n, r, s, a, l, c = this.width,
h = this.height,
u = Math.round(h / 3),
d = this._vertOffset - 2 * u,
p = !1;
for (i = 0, o = this.items.length; i < o; i++) n = this.items[i], n.style && null != n.style
.color ? (r = n.style.color, s = n.style.borderColor) : (r = this._color, s = this
._borderColor), r !== e && (e = r, p && (t.fill(), t.stroke()), t.beginPath(), t
.fillStyle = r, t.strokeStyle = s), a = n.x, l = n.y + d, t.moveTo(a, l), t.lineTo(a +
c / 2, l + h), t.lineTo(a - c / 2, l + h), t.lineTo(a, l), p = !0;
p && (t.fill(), t.stroke())
}, inherit(n, s), n.prototype.drawShape = function(t) {
var e, i, o, n, r, s, a, l, c = this.width,
h = this.height,
u = Math.round(h / 3),
d = this._vertOffset - u,
p = !1;
for (i = 0, o = this.items.length; i < o; i++) n = this.items[i], n.style && null != n.style
.color ? (r = n.style.color, s = n.style.borderColor) : (r = this._color, s = this
._borderColor), r !== e && (e = r, p && (t.fill(), t.stroke()), t.beginPath(), t
.fillStyle = r,
t.strokeStyle = s), a = n.x - c / 2, l = n.y + d, t.moveTo(a, l), t.lineTo(a + c, l), t
.lineTo(a + c / 2, l + h), t.lineTo(a, l), p = !0;
p && (t.fill(), t.stroke())
}, inherit(r, s), r.prototype.drawShape = function(t) {
var e, i, o, n, r, s, a, l = this.width,
c = this.height,
h = this._vertOffset,
u = !1;
for (i = 0, o = this.items.length; i < o; i++) n = this.items[i], r = n.style && null != n.style
.color ? n.style.color : this._color, r !== e && (e = r, u && t.fill(), t.beginPath(), t
.fillStyle = r), s = n.x + l / 2, a = n.y - c / 2 + h, t.moveTo(s, a), t.lineTo(s, a +
c), t.lineTo(s - l, a + c / 2), t.lineTo(s, a), u = !0;
u && t.fill()
}, e.PaneRendererTriangleApexUp = TradingView.PaneRendererTriangleApexUp = o, e
.PaneRendererTriangleApexDown = TradingView.PaneRendererTriangleApexDown = n, e
.PaneRendererTriangleApexLeft = TradingView.PaneRendererTriangleApexLeft = r
},
function(t, e, i) {
"use strict";
function o(t) {
n.call(this, t)
}
var n = i(56).PaneRendererAbstractShape;
inherit(o, n), o.prototype.drawShape = function(t) {
var e, i, o, n, r, s, a, l, c, h, u;
for (t.lineWidth = 2, e = this.width, i = this.height, o = this._vertOffset, r = !1, s = 0, a =
this.items.length; s < a; s++) l = this.items[s], c = l.style && null != l.style.color ? l
.style.color : this._color, c !== n && (n = c, r && t.stroke(), t.beginPath(), t
.strokeStyle = c), h = l.x - e / 2, u = l.y - i / 2 + o, t.moveTo(h, u), t.lineTo(h + e,
u + i), t.moveTo(h, u + i), t.lineTo(h + e, u), r = !0;
r && t.stroke()
}, e.PaneRendererXCross = TradingView.PaneRendererXCross = o
},
function(t, e, i) {
"use strict";
function o() {
this._data = null
}
function n(t) {
this._source = t, this._points1 = [], this._points2 = [], this._timePoints = [], this
._getBarSpacing = t.model().timeScale().barSpacing.bind(t.model().timeScale()), this
._invalidated = !0, this._areaRenderer = new o
}
function r(t) {
n.call(this, t)
}
function s(t, e, i) {
var o, r;
if (n.call(this, t), this._isHlineFill = e.type === h.FilledArea.TYPE_HLINES, a(this._isHlineFill ||
e.type === h.FilledArea.TYPE_PLOTS, "Wrong filledArea type: " + e.type), this
._isHlineFill && this._initBandIndexes(e.objAId, e.objBId), this._fillMetaInfo = e, this
._fillStyleProps = i, o = t._metaInfo, e.palette)
for (r in o.plots)
if (o.plots[r].palette === e.palette) {
this._colorPlotOffset = parseInt(r), this._colorsMap = o.palettes[e.palette].valToIndex,
this._colorValues = t.properties().palettes[e.palette].colors;
break
}
}
var a = i(9).assert,
l = i(11),
c = i(45).coordinateIsValid,
h = i(33),
u = i(30),
d = i(54).clamp,
p = i(19).PlotRowSearchMode;
o.prototype.setData = function(t) {
this._data = t
}, o.prototype.hitTest = function(t) {
var e, i, o;
if (null === this._data) return null;
for (o = 1; o < this._data.points1.length; ++o)
if (e = this._data.points1[o], i = this._data.points2[o], this._data.timePoints[o] === t
.x && (t.y >= e && t.y <= i || t.y <= e && t.y >= i)) return new l(l.REGULAR);
return null
}, o.prototype.draw = function(t) {
var e, i, o, n, r, s, a, l, h, d, p, _, f, m, g, v, y, b;
if (null !== this._data && ((e = this._data.isHlineFill) || 0 !== this._data.points1.length &&
0 !== this._data.points2.length)) {
for (i = this._data.timePoints, o = this._data.points1, n = this._data.points2, r = this
._data.colors, s = isNumber(this._data.transparency) ? this._data.transparency : 50, s =
Math.min(s, 100), s = Math.max(s, 0), a = {}, l = [], d = 0; d < this._data.timePoints
.length; d++) p = {
point1: e ? this._data.level1 : o[d],
point2: e ? this._data.level2 : n[d],
timePoint: i[d]
}, _ = c(p.point1) && c(p.point2),
_ && (h = r && r[d] ? r[d] : this._data.backcolor, l.push(p)), (d === this._data
.timePoints.length - 1 || r && h !== r[d + 1] || !_) && (l.length > 0 && (f = a[
h] || [], f.push(l), a[h] = f), l = _ ? [p] : []);
for (m in a) {
for (g = a[m], t.beginPath(), v = 0; v < g.length; v++) {
for (y = g[v], t.moveTo(y[0].timePoint, y[0].point1), b = 1; b < y.length; b++) t
.lineTo(y[b].timePoint, y[b].point1);
for (b = y.length - 1; b >= 0; b--) t.lineTo(y[b].timePoint, y[b].point2)
}
t.closePath(), t.fillStyle = u.generateColor(m, s), t.fill()
}
}
}, n.prototype.update = function() {
this._invalidated = !0
}, n.prototype._updateImpl = function() {
var t, e, i, o, n, r, s, a, l, c, h, u, d, _, f, m, g, v, y, b, S, w, T, C, x, P, L, I;
if (this._points1 = [], this._points2 = [], this._colorsMap && (this._colors = []), this
._timePoints = [], this._visible() && (t = this._source.priceScale(), e = this._source
._model.timeScale(), t && !t.isEmpty() && !this._source._model.timeScale().isEmpty() &&
!(this._source._series.bars().isEmpty() || (this._isHlineFill && (i = this._source
.properties().bands[this._bandAKey], o = this._source.properties().bands[
this._bandBKey], this._level1 = t.priceToCoordinate(i.value.value()),
this._level2 = t.priceToCoordinate(o.value.value())), n = this._source
.data().plotNames().indexOf(this._plotAId()) + 1, r = this._source.data()
.plotNames().indexOf(this._plotBId()) + 1, null === (s = this._source._model
.timeScale().visibleBars()) || (a = this._source._series.nearestIndex(s
.firstBar(), p.NearestRight), l = this._source._series.nearestIndex(s
.lastBar(), p.NearestLeft), (a = this._correctStartBarIndex(a)) > l))))) {
if (c = this._source.data().range(a, l), c.size() > 0)
for (h = this._source.firstValue(), u = c.firstIndex(), d = c.lastIndex(), _ = this
._source.offset(this._plotAId()), f = this._source.offset(this._plotBId()), m = Math
.max(_, f), g = Math.min(_, f), v = u + m, y = this._source.data().firstIndex(), u >
y && (v = u < m + y ? m + y : u), b = d + g, S = this._source.data().lastIndex(),
d > S + g && d < S && (b = S + g), g < 0 && d <= S + g && (b = d), w = v < u ? u +
m : v > d ? u + m : v, T = v; T <= b; ++T) this._timePoints.push(e
.indexToCoordinate(w++)), this._colors && null != (C = this._source.data()
.valueAt(T - g)[this._colorPlotOffset + 1]) && this._colors.push(this
._colorValues[this._colorsMap[C]].color.value()), this._isHlineFill || (x = this
._source.data().valueAt(T - _), P = this._source.data().valueAt(T - f), L = x[
n], I = P[r], t.isPercentage() && (L = 100 * (L - h) / h, I = 100 * (I -
h) /
h), this._points1.push(L), this._points2.push(I));
t.pricesArrayToCoordinates(this._points1), t.pricesArrayToCoordinates(this._points2)
}
}, n.prototype.renderer = function() {
this._invalidated && (this._updateImpl(), this._invalidated = !1);
var t = {};
return t.points1 = this._points1, t.points2 = this._points2, t.timePoints = this._timePoints, t
.getBarSpacing = this._getBarSpacing, t.backcolor = this._color(), t.transparency = this
._transparency(), t.isHlineFill = this._isHlineFill, t.level1 = this._level1, t.level2 =
this._level2, this._colors && (t.colors = this._colors), this._areaRenderer.setData(t), this
._areaRenderer
}, n.prototype._plotAId = function() {
a(!1, "Pure virtual call!")
}, n.prototype._plotBId = function() {
a(!1, "Pure virtual call!")
}, n.prototype._color = function() {
a(!1, "Pure virtual call!")
}, n.prototype._transparency = function() {
a(!1, "Pure virtual call!")
}, n.prototype._visible = function() {
a(!1, "Pure virtual call!")
},
n.prototype._correctStartBarIndex = function(t) {
return t
}, inherit(r, n), r.prototype._plotAId = function() {
return this._source.properties().area[0].name.value()
}, r.prototype._plotBId = function() {
return this._source.properties().area[1].name.value()
}, r.prototype._color = function() {
return this._source.properties().areaBackground.backgroundColor.value()
}, r.prototype._transparency = function() {
var t = this._source.properties().areaBackground.transparency.value();
return d(t, 0, 100)
}, r.prototype._visible = function() {
return this._source.properties().areaBackground.fillBackground.value()
}, inherit(s, n), s.prototype._initBandIndexes = function(t, e) {
var i, o;
for (this._bandAKey = null, this._bandBKey = null, i = 0; i < this._source.metaInfo().bands
.length; ++i) o = this._source.metaInfo().bands[i], null !== this._bandAKey || o.id !== t ?
null !== this._bandBKey || o.id !== e || (this._bandBKey = i) : this._bandAKey = i
}, s.prototype._plotAId = function() {
return this._fillMetaInfo.objAId
}, s.prototype._plotBId = function() {
return this._fillMetaInfo.objBId
}, s.prototype._color = function() {
return this._fillStyleProps.color.value()
}, s.prototype._transparency = function() {
return this._fillStyleProps.transparency.value()
}, s.prototype._visible = function() {
return this._fillStyleProps.visible.value()
}, s.prototype._correctStartBarIndex = function(t) {
var e = this._source.getMinFirstBarIndexForPlot(this._fillMetaInfo.id);
return Math.max(e, t)
}, e.PlotFillPaneView = s, e.AreaBackgroundPaneView = r
},
function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
}), e.tzData = {
"America/New_York": {
time: [-2717668562, -1633298400, -1615154400, -1601848800, -1583704800, -1570399200, -
1551650400, -1536530400, -1523224800, -1504476e3, -1491775200, -1473026400, -
1459720800, -1441576800, -1428271200, -1410127200, -1396821600, -1378677600, -
1365372e3, -1347228e3, -1333922400, -1315173600, -1301868e3, -1283724e3, -
1270418400, -1252274400, -1238968800, -1220824800, -1207519200, -1189375200, -
1176069600, -1157320800, -114462e4, -1125871200, -1112565600, -1094421600, -
1081116e3, -1062972e3, -1049666400, -1031522400, -1018216800, -1000072800, -
986767200, -968018400, -955317600, -936568800, -923263200, -905119200, -891813600, -
880236e3, -76941e4, -765410400, -747266400, -733960800, -715816800, -702511200, -
684367200, -671061600, -652917600, -639612e3, -620863200, -608162400, -589413600, -
576108e3, -557964e3, -544658400, -526514400, -513208800, -495064800, -481759200, -
463615200, -447285600, -431560800, -415836e3, -400111200, -384386400, -368661600, -
352936800, -337212e3, -321487200, -305762400, -289432800, -273708e3, -257983200, -
242258400, -226533600, -210808800, -195084e3, -179359200, -163634400, -147909600, -
13158e4, -11646e4, -100130400, -84405600, -68680800, -52956e3, -37231200, -21506400,
-5781600, 9943200, 25668e3, 41392800, 57722400, 73447200, 89172e3, 104896800,
120621600, 126669600, 152071200, 162352800, 183520800, 199245600, 215575200,
230695200, 247024800, 262749600, 278474400, 294199200, 309924e3, 325648800,
341373600, 357098400, 372823200, 388548e3, 404877600, 419997600, 436327200,
452052e3, 467776800, 483501600, 499226400, 514951200, 530676e3, 544586400,
562125600, 576036e3, 59418e4, 607485600, 625629600, 638935200, 657079200, 670989600,
688528800, 702439200, 719978400, 733888800, 752032800, 765338400, 783482400,
796788e3, 814932e3, 828842400, 846381600, 860292e3, 877831200, 891741600, 909280800,
923191200, 941335200, 954640800, 972784800, 986090400, 1004234400, 1018144800,
1035684e3, 1049594400, 1067133600, 1081044e3, 1099188e3, 1112493600, 1130637600,
1143943200, 1162087200, 1173578400, 1194141600, 1205028e3, 1225591200, 1236477600,
1257040800, 1268532e3, 1289095200, 1299981600, 1320544800, 1331431200, 1351994400,
1362880800, 1383444e3, 1394330400, 1414893600, 142578e4, 1446343200, 1457834400,
1478397600, 1489284e3, 1509847200, 1520733600, 1541296800, 1552183200, 1572746400,
1583632800, 1604196e3, 1615687200, 1636250400, 1647136800, 16677e5, 1678586400,
1699149600, 1710036e3, 1730599200, 1741485600, 1762048800, 1772935200, 1793498400,
1804989600, 1825552800, 1836439200, 1857002400, 1867888800, 1888452e3, 1899338400,
1919901600, 1930788e3
],
offset: [-17762, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400,
-18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -
14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -
18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -
14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -14400, -18e3, -14400, -18e3, -
14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -
18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -
14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -
18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -
14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -
18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -
14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -
18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -
14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -
18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -
14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -
18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -
14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -
18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -
14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -
18e3, -14400, -18e3
]
},
"America/Los_Angeles": {
time: [-2717668378, -1633298400, -1615154400, -1601848800, -1583704800, -880236e3, -
769420800, -765410400, -687995940, -662680800, -620866800, -608162400, -589417200, -
576108e3, -557967600, -544658400, -526518e3, -513208800, -495068400, -481759200, -
463618800, -450309600, -431564400, -418255200, -400114800, -386805600, -368665200, -
355356e3, -337215600, -323906400, -305766e3, -292456800, -273711600, -261007200, -
242262e3, -226533600, -210812400, -195084e3, -179362800, -163634400, -147913200, -
13158e4, -116463600, -100130400, -84405600, -68680800, -52956e3, -37231200, -
21506400, -5781600, 9943200, 25668e3, 41392800, 57722400, 73447200, 89172e3,
104896800, 120621600, 126669600, 152071200, 162352800, 183520800, 199245600,
215575200, 230695200, 247024800, 262749600, 278474400, 294199200, 309924e3,
325648800, 341373600, 357098400, 372823200, 388548e3, 404877600, 419997600,
436327200, 452052e3, 467776800, 483501600, 499226400, 514951200, 530676e3,
544586400, 562125600, 576036e3, 59418e4, 607485600, 625629600, 638935200, 657079200,
670989600, 688528800, 702439200, 719978400, 733888800, 752032800, 765338400,
783482400, 796788e3, 814932e3, 828842400, 846381600, 860292e3, 877831200, 891741600,
909280800, 923191200, 941335200, 954640800, 972784800, 986090400, 1004234400,
1018144800, 1035684e3, 1049594400, 1067133600, 1081044e3, 1099188e3, 1112493600,
1130637600, 1143943200, 1162087200, 1173578400, 1194141600, 1205028e3, 1225591200,
1236477600, 1257040800, 1268532e3, 1289095200, 1299981600, 1320544800, 1331431200,
1351994400, 1362880800, 1383444e3, 1394330400, 1414893600, 142578e4, 1446343200,
1457834400, 1478397600, 1489284e3, 1509847200, 1520733600, 1541296800, 1552183200,
1572746400, 1583632800, 1604196e3, 1615687200, 1636250400, 1647136800, 16677e5,
1678586400, 1699149600, 1710036e3, 1730599200, 1741485600, 1762048800, 1772935200,
1793498400, 1804989600, 1825552800, 1836439200, 1857002400, 1867888800, 1888452e3,
1899338400, 1919901600, 1930788e3
],
offset: [-28378, -28800, -25200, -28800, -25200, -28800, -25200, -25200, -28800, -25200, -
28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -
28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -
28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -
28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -
28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -
28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -
28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -
28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -
28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -
28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -
28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -
28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -
28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -
28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -
28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -
28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -
28800, -25200, -28800
]
},
"America/Chicago": {
time: [-2717668236, -1633298400, -1615154400, -1601848800, -1583704800, -1563746400, -
1551650400, -1538949600, -1520200800, -1504476e3, -1491775200, -1473026400, -
1459720800, -1441576800, -1428271200, -1410127200, -1396821600, -1378677600, -
1365372e3, -1347228e3, -1333922400, -1315173600, -1301868e3, -1283724e3, -
1270418400, -1252274400, -1238968800, -1220824800, -1207519200, -1189375200, -
1176069600, -1157320800, -114462e4, -1125871200, -1112565600, -1094421600, -
1081116e3, -1067810400, -1045432800, -1031522400, -1018216800, -1000072800, -
986767200, -968018400, -955317600, -936568800, -923263200, -905119200, -891813600, -
880236e3, -769413600, -765410400, -747266400, -733960800, -715816800, -702511200, -
684367200, -671061600, -652917600, -639612e3, -620863200, -608162400, -589413600, -
576108e3, -557964e3, -544658400, -526514400, -513208800, -495064800, -481759200, -
463615200, -447285600, -431560800, -415836e3, -400111200, -384386400, -368661600, -
352936800, -337212e3, -321487200, -305762400, -289432800, -273708e3, -257983200, -
242258400, -226533600, -210808800, -195084e3, -179359200, -163634400, -147909600, -
13158e4, -11646e4, -100130400, -84405600, -68680800, -52956e3, -37231200, -21506400,
-5781600, 9943200, 25668e3, 41392800, 57722400, 73447200, 89172e3, 104896800,
120621600, 126669600, 152071200, 162352800, 183520800, 199245600, 215575200,
230695200, 247024800, 262749600, 278474400, 294199200, 309924e3, 325648800,
341373600, 357098400, 372823200, 388548e3, 404877600, 419997600, 436327200,
452052e3, 467776800, 483501600, 499226400, 514951200, 530676e3, 544586400,
562125600, 576036e3, 59418e4, 607485600, 625629600, 638935200, 657079200, 670989600,
688528800, 702439200, 719978400, 733888800, 752032800, 765338400, 783482400,
796788e3, 814932e3, 828842400, 846381600, 860292e3, 877831200, 891741600, 909280800,
923191200, 941335200, 954640800, 972784800, 986090400, 1004234400, 1018144800,
1035684e3, 1049594400, 1067133600, 1081044e3, 1099188e3, 1112493600, 1130637600,
1143943200, 1162087200, 1173578400, 1194141600, 1205028e3, 1225591200, 1236477600,
1257040800, 1268532e3, 1289095200, 1299981600, 1320544800, 1331431200, 1351994400,
1362880800, 1383444e3, 1394330400, 1414893600, 142578e4, 1446343200, 1457834400,
1478397600, 1489284e3, 1509847200, 1520733600, 1541296800, 1552183200, 1572746400,
1583632800, 1604196e3, 1615687200, 1636250400, 1647136800, 16677e5, 1678586400,
1699149600, 1710036e3, 1730599200, 1741485600, 1762048800, 1772935200, 1793498400,
1804989600, 1825552800, 1836439200, 1857002400, 1867888800, 1888452e3, 1899338400,
1919901600, 1930788e3
],
offset: [-21036, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3,
-21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -
18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -
21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -
18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -18e3, -21600, -18e3, -21600, -
18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -
21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -
18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -
21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -
18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -
21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -
18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -
21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -
18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -
21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -
18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -
21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -
18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -
21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -
18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -
21600, -18e3, -21600
]
},
"America/Phoenix": {
time: [-2717670498, -1633298400, -1615154400, -1601848800, -1583704800, -880236e3, -
820540740, -812678340, -796867140, -84405600, -68680800, 1924966800
],
offset: [-26898, -25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -25200, -
21600, -25200
]
},
"America/Toronto": {
time: [-2366755200, -1632088800, -1615154400, -1601771400, -1583712e3, -1567375200, -
1554681600, -1534716e3, -1524088800, -1503266400, -149238e4, -1471816800, -
1460930400, -1440972e3, -1428876e3, -1409522400, -1397426400, -1378072800, -
1365976800, -1346623200, -1333922400, -1315173600, -1301868e3, -1283724e3, -
1270418400, -1252274400, -1238968800, -1220824800, -1207519200, -1188770400, -
1176069600, -1157320800, -1144015200, -1125871200, -1112565600, -1094421600, -
1081116e3, -1062972e3, -1049666400, -1031522400, -1018216800, -1000072800, -
986767200, -968018400, -955317600, -936568800, -880232400, -76941e4, -765410400, -
747266400, -733960800, -715824e3, -702518400, -684374400, -671068800, -652924800, -
634176e3, -620863200, -602719200, -589413600, -576108e3, -557964e3, -544658400, -
526514400, -513208800, -495064800, -481759200, -463615200, -450309600, -431560800, -
418255200, -400111200, -384386400, -368661600, -352936800, -337212e3, -321487200, -
305762400, -289432800, -273708e3, -257983200, -242258400, -226533600, -210808800, -
195084e3, -179359200, -163634400, -147909600, -13158e4, -11646e4, -100130400, -
84405600, -68680800, -52956e3, -37231200, -21506400, -5781600, 9943200, 25668e3,
41392800, 57722400, 73447200, 89172e3, 104896800, 120621600, 136346400, 152071200,
167796e3, 183520800, 199245600, 215575200, 230695200, 247024800, 262749600,
278474400, 294199200, 309924e3, 325648800, 341373600, 357098400, 372823200,
388548e3, 404877600, 419997600, 436327200, 452052e3, 467776800, 483501600,
499226400, 514951200, 530676e3, 544586400, 562125600, 576036e3, 59418e4, 607485600,
625629600, 638935200, 657079200, 670989600, 688528800, 702439200, 719978400,
733888800, 752032800, 765338400, 783482400, 796788e3, 814932e3, 828842400,
846381600, 860292e3, 877831200, 891741600, 909280800, 923191200, 941335200,
954640800, 972784800, 986090400, 1004234400, 1018144800, 1035684e3, 1049594400,
1067133600, 1081044e3, 1099188e3, 1112493600, 1130637600, 1143943200, 1162087200,
1173578400, 1194141600, 1205028e3, 1225591200, 1236477600, 1257040800, 1268532e3,
1289095200, 1299981600, 1320544800, 1331431200, 1351994400, 1362880800, 1383444e3,
1394330400, 1414893600, 142578e4, 1446343200, 1457834400, 1478397600, 1489284e3,
1509847200, 1520733600, 1541296800, 1552183200, 1572746400, 1583632800, 1604196e3,
1615687200, 1636250400, 1647136800, 16677e5, 1678586400, 1699149600, 1710036e3,
1730599200, 1741485600, 1762048800, 1772935200, 1793498400, 1804989600, 1825552800,
1836439200, 1857002400, 1867888800, 1888452e3, 1899338400, 1919901600, 1930788e3
],
offset: [-19052, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400,
-18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -
14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -
18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -
14400, -18e3, -14400, -14400, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -
18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -
14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -
18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -
14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -
18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -
14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -
18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -
14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -
18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -
14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -
18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -
14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -
18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -
14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -
18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3, -14400, -18e3
]
},
"America/Vancouver": {
time: [-2713910400, -1632088800, -1615154400, -880236e3, -769420800, -765410400, -747266400,
-732751200, -715816800, -702511200, -684367200, -671061600, -652917600, -639612e3, -
620863200, -608162400, -589413600, -576108e3, -557964e3, -544658400, -526514400, -
513208800, -495064800, -481759200, -463615200, -450309600, -431560800, -418255200, -
400111200, -386805600, -368661600, -355356e3, -337212e3, -323906400, -305762400, -
292456800, -273708e3, -261007200, -242258400, -226533600, -210808800, -195084e3, -
179359200, -163634400, -147909600, -13158e4, -11646e4, -100130400, -84405600, -
68680800, -52956e3, -37231200, -21506400, -5781600, 9943200, 25668e3, 41392800,
57722400, 73447200, 89172e3, 104896800, 120621600, 136346400, 152071200, 167796e3,
183520800, 199245600, 215575200, 230695200, 247024800, 262749600, 278474400,
294199200, 309924e3, 325648800, 341373600, 357098400, 372823200, 388548e3,
404877600, 419997600, 436327200, 452052e3, 467776800, 483501600, 499226400,
514951200, 530676e3, 544586400, 562125600, 576036e3, 59418e4, 607485600, 625629600,
638935200, 657079200, 670989600, 688528800, 702439200, 719978400, 733888800,
752032800, 765338400, 783482400, 796788e3, 814932e3, 828842400, 846381600, 860292e3,
877831200, 891741600, 909280800, 923191200, 941335200, 954640800, 972784800,
986090400, 1004234400, 1018144800, 1035684e3, 1049594400, 1067133600, 1081044e3,
1099188e3, 1112493600, 1130637600, 1143943200, 1162087200, 1173578400, 1194141600,
1205028e3, 1225591200, 1236477600, 1257040800, 1268532e3, 1289095200, 1299981600,
1320544800, 1331431200, 1351994400, 1362880800, 1383444e3, 1394330400, 1414893600,
142578e4, 1446343200, 1457834400, 1478397600, 1489284e3, 1509847200, 1520733600,
1541296800, 1552183200, 1572746400, 1583632800, 1604196e3, 1615687200, 1636250400,
1647136800, 16677e5, 1678586400, 1699149600, 1710036e3, 1730599200, 1741485600,
1762048800, 1772935200, 1793498400, 1804989600, 1825552800, 1836439200, 1857002400,
1867888800, 1888452e3, 1899338400, 1919901600, 1930788e3
],
offset: [-29548, -28800, -25200, -28800, -25200, -25200, -28800, -25200, -28800, -25200, -
28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -
28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -
28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -
28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -
28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -
28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -
28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -
28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -
28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -
28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -
28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -
28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -
28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -
28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -
28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -
28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -28800, -25200, -
28800, -25200, -28800, -25200, -28800, -25200, -28800
]
},
"America/Argentina/Buenos_Aires": {
time: [-2372112e3, -1567468800, -1233446400, -1222992e3, -1205971200, -1194048e3, -117288e4,
-1162512e3, -1141344e3, -1130976e3, -1109808e3, -109944e4, -1078272e3, -1067817600,
-1046649600, -1036281600, -1015113600, -1004745600, -983577600, -973209600, -
952041600, -941587200, -931046400, -900892800, -890352e3, -83376e4, -82728e4, -
752284800, -733795200, -197337600, -190857600, -184204800, -164505600, -152668800, -
132969600, -121132800, -101433600, -86832e3, -71107200, -54777600, -39052800, -
23328e3, -7603200, 128131200, 136598400, 596937600, 605059200, 624412800, 636508800,
656467200, 667958400, 687916800, 699408e3, 719366400, 731462400, 938908800,
952041600, 1198972800, 1205625600, 1224374400, 1237075200, 1924981200
],
offset: [-14028, -15408, -14400, -10800, -14400, -10800, -14400, -10800, -14400, -10800, -
14400, -10800, -14400, -10800, -14400, -10800, -14400, -10800, -14400, -10800, -
14400, -10800, -14400, -10800, -14400, -10800, -14400, -10800, -14400, -10800, -
14400, -10800, -14400, -10800, -14400, -10800, -14400, -10800, -14400, -10800, -
14400, -10800, -14400, -10800, -7200, -10800, -7200, -10800, -7200, -10800, -7200, -
10800, -7200, -10800, -7200, -10800, -10800, -10800, -7200, -10800, -7200, -10800
]
},
"America/El_Salvador": {
time: [-1546300800, 546998400, 559699200, 578448e3, 591148800, 1924970400],
offset: [-21408, -21600, -18e3, -21600, -18e3, -21600]
},
"America/Sao_Paulo": {
time: [-1767225600, -1206968400, -1191369600, -1175385600, -1159833600, -633830400, -
622076400, -602294400, -59184e4, -570758400, -560217600, -539136e3, -53136e4, -
195436800, -184204800, -155174400, -150076800, -128908800, -121132800, -99964800, -
89596800, -68428800, -57974400, 499737600, 511228800, 530582400, 540259200,
562118400, 571190400, 592963200, 602035200, 624412800, 634694400, 656467200,
666748800, 687916800, 697593600, 719971200, 728438400, 750816e3, 761702400,
782265600, 793152e3, 813715200, 823996800, 84456e4, 856051200, 876096e3, 888710400,
908064e3, 919555200, 938908800, 951609600, 970963200, 982454400, 1003017600,
1013904e3, 1036281600, 1045353600, 1066521600, 1076803200, 1099353600, 1108857600,
1129420800, 1140307200, 1162684800, 1172361600, 119232e4, 1203206400, 1224374400,
1234656e3, 1255824e3, 1266710400, 1287273600, 129816e4, 1318723200, 1330214400,
1350777600, 1361059200, 1382227200, 1392508800, 1413676800, 1424563200, 1445126400,
1456012800, 1476576e3, 1487462400, 1508025600, 1518912e3, 154008e4, 1550361600,
1571529600, 1581811200, 1602979200, 1613865600, 1634428800, 1645315200, 1665878400,
1677369600, 1697328e3, 1708214400, 1729382400, 1739664e3, 1760832e3, 1771718400,
1792281600, 1803168e3, 1823731200, 1834617600, 1855180800, 1866067200, 1887235200,
1897516800, 1918684800, 1928966400
],
offset: [-11188, -10800, -7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, -7200,
-10800, -7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, -
7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, -7200, -
10800, -7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, -
7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, -7200, -
10800, -7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, -
7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, -7200, -
10800, -7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, -
7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, -7200, -
10800, -7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, -7200, -10800, -
7200, -10800, -7200, -10800, -7200
]
},
"America/Bogota": {
time: [-2707689600, -1739059200, 704851200, 733881600, 1924974e3],
offset: [-17776, -17776, -18e3, -14400, -18e3]
},
"America/Caracas": {
time: [-2524521600, -1826755200, -157766400, 1197169200, 1462069800, 1924977600],
offset: [-16064, -16060, -16200, -14400, -16200, -14400]
},
"Europe/Moscow": {
time: [-2840140800, -1688256e3, -165681e4, -1641340800, -1627956e3, -1618700400, -
1596416400, -1593804521, -1589846400, -1542416400, -1539478800, -1525305600, -
1522713600, -1491177600, -1247529600, 354931200, 370742400, 386467200, 402278400,
418003200, 433814400, 449625600, 465361200, 481082400, 496810800, 512532e3,
528260400, 543981600, 55971e4, 575431200, 591159600, 606880800, 622609200,
638330400, 654663600, 670384800, 686113200, 695786400, 701834400, 717562800,
733284e3, 749012400, 764733600, 780462e3, 796183200, 811911600, 828237600,
846385200, 859687200, 877834800, 891136800, 909284400, 922586400, 941338800,
954036e3, 972788400, 985485600, 1004238e3, 101754e4, 1035687600, 1048989600,
1067137200, 1080439200, 1099191600, 1111888800, 1130641200, 1143338400, 1162090800,
1174788e3, 1193540400, 1206842400, 122499e4, 1238292e3, 1256439600, 1269741600,
1288494e3, 1301191200, 1414288800, 1925002800
],
offset: [9017, 9017, 9079, 12679, 9079, 16279, 12679, 16279, 14400, 10800, 14400, 18e3,
14400, 10800, 7200, 10800, 14400, 10800, 14400, 10800, 14400, 10800, 14400, 10800,
14400, 10800, 14400, 10800, 14400, 10800, 14400, 10800, 14400, 10800, 14400, 10800,
10800, 7200, 10800, 14400, 10800, 14400, 10800, 14400, 10800, 14400, 10800, 14400,
10800, 14400, 10800, 14400, 10800, 14400, 10800, 14400, 10800, 14400, 10800, 14400,
10800, 14400, 10800, 14400, 10800, 14400, 10800, 14400, 10800, 14400, 10800, 14400,
10800, 14400, 10800, 14400, 10800, 14400, 10800
]
},
"Europe/Athens": {
time: [-2344636800, -1686095940, -1182988800, -1178150400, -906854400, -904867200, -85725e4,
-844473600, -828230400, -812419200, -552355200, -541641600, 166492800, 186195600,
198036e3, 213764400, 228880800, 244090800, 260330400, 275457600, 291805200,
307418400, 323395200, 338947200, 354682800, 370411200, 386132400, 401860800,
417582e3, 433310400, 449031600, 465364800, 481086e3, 496814400, 512535600, 528264e3,
543985200, 559713600, 575434800, 591163200, 606884400, 622612800, 638334e3,
654667200, 670388400, 686116800, 701838e3, 717566400, 733287600, 749016e3,
764737200, 780465600, 796186800, 811915200, 828241200, 846388800, 859690800,
877838400, 891140400, 909288e3, 92259e4, 941342400, 954039600, 972792e3, 985489200,
1004241600, 1017543600, 1035691200, 1048993200, 1067140800, 1080442800, 1099195200,
1111892400, 1130644800, 1143342e3, 1162094400, 1174791600, 1193544e3, 1206846e3,
1224993600, 1238295600, 1256443200, 1269745200, 1288497600, 1301194800, 1319947200,
1332644400, 1351396800, 1364698800, 1382846400, 1396148400, 1414296e3, 1427598e3,
1445745600, 1459047600, 14778e5, 1490497200, 1509249600, 1521946800, 1540699200,
1554001200, 1572148800, 1585450800, 1603598400, 1616900400, 1635652800, 164835e4,
1667102400, 1679799600, 1698552e3, 1711854e3, 1730001600, 1743303600, 1761451200,
1774753200, 1792900800, 1806202800, 1824955200, 1837652400, 1856404800, 1869102e3,
1887854400, 1901156400, 1919304e3, 1932606e3
],
offset: [5692, 5692, 7200, 10800, 7200, 10800, 7200, 3600, 7200, 3600, 7200, 10800, 7200,
10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800,
7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200,
10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800,
7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200,
10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800,
7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200,
10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800,
7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200,
10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200
]
},
"Europe/Belgrade": {
time: [-2713910400, -905821200, -85725e4, -844552800, -828219600, -812498400, -79677e4, -
777938400, -766616400, 417578400, 433306800, 449028e3, 465361200, 481082400,
496810800, 512532e3, 528260400, 543981600, 55971e4, 575431200, 591159600, 606880800,
622609200, 638330400, 654663600, 670384800, 686113200, 701834400, 717562800,
733284e3, 749012400, 764733600, 780462e3, 796183200, 811911600, 828237600,
846385200, 859687200, 877834800, 891136800, 909284400, 922586400, 941338800,
954036e3, 972788400, 985485600, 1004238e3, 101754e4, 1035687600, 1048989600,
1067137200, 1080439200, 1099191600, 1111888800, 1130641200, 1143338400, 1162090800,
1174788e3, 1193540400, 1206842400, 122499e4, 1238292e3, 1256439600, 1269741600,
1288494e3, 1301191200, 1319943600, 1332640800, 1351393200, 1364695200, 1382842800,
1396144800, 1414292400, 1427594400, 1445742e3, 1459044e3, 1477796400, 1490493600,
1509246e3, 1521943200, 1540695600, 1553997600, 1572145200, 1585447200, 1603594800,
1616896800, 1635649200, 1648346400, 1667098800, 1679796e3, 1698548400, 1711850400,
1729998e3, 17433e5, 1761447600, 1774749600, 1792897200, 1806199200, 1824951600,
1837648800, 1856401200, 1869098400, 1887850800, 1901152800, 1919300400, 1932602400
],
offset: [4920, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600,
7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600,
7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600,
7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600,
7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600,
7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600,
7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600,
7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600
]
},
"Europe/Berlin": {
time: [-2422051200, -1693702800, -1680476400, -1663452e3, -1650142800, -1632002400, -
1618693200, -938901600, -85725e4, -844552800, -828219600, -812498400, -79677e4, -
781048800, -776556e3, -765925200, -761173200, -748476e3, -733266e3, -717627600, -
714603600, -71037e4, -701902800, -684972e3, -670453200, -654127200, -639003600,
323834400, 338958e3, 354679200, 370407600, 386128800, 401857200, 417578400,
433306800, 449028e3, 465361200, 481082400, 496810800, 512532e3, 528260400,
543981600, 55971e4, 575431200, 591159600, 606880800, 622609200, 638330400,
654663600, 670384800, 686113200, 701834400, 717562800, 733284e3, 749012400,
764733600, 780462e3, 796183200, 811911600, 828237600, 846385200, 859687200,
877834800, 891136800, 909284400, 922586400, 941338800, 954036e3, 972788400,
985485600, 1004238e3, 101754e4, 1035687600, 1048989600, 1067137200, 1080439200,
1099191600, 1111888800, 1130641200, 1143338400, 1162090800, 1174788e3, 1193540400,
1206842400, 122499e4, 1238292e3, 1256439600, 1269741600, 1288494e3, 1301191200,
1319943600, 1332640800, 1351393200, 1364695200, 1382842800, 1396144800, 1414292400,
1427594400, 1445742e3, 1459044e3, 1477796400, 1490493600, 1509246e3, 1521943200,
1540695600, 1553997600, 1572145200, 1585447200, 1603594800, 1616896800, 1635649200,
1648346400, 1667098800, 1679796e3, 1698548400, 1711850400, 1729998e3, 17433e5,
1761447600, 1774749600, 1792897200, 1806199200, 1824951600, 1837648800, 1856401200,
1869098400, 1887850800, 1901152800, 1919300400, 1932602400
],
offset: [3208, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600,
7200, 10800, 7200, 3600, 7200, 3600, 7200, 10800, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600
]
},
"Europe/London": {
time: [-3852662400, -1691964e3, -1680469200, -1664143200, -1650142800, -1633903200, -
1617483600, -1601848800, -1586034e3, -1570399200, -1552165200, -1538344800, -
152253e4, -15075e5, -1490562e3, -1473631200, -1460926800, -1442786400, -1428872400,
-1410732e3, -1396213200, -1379282400, -1364763600, -1348437600, -1333314e3, -
1315778400, -1301259600, -1284328800, -126981e4, -1253484e3, -1238360400, -
1221429600, -1206910800, -118998e4, -1175461200, -1159135200, -1143406800, -
1126476e3, -1111957200, -1095631200, -1080507600, -1063576800, -1049058e3, -
1032127200, -1017608400, -1001282400, -986158800, -969228e3, -950475600, -942012e3,
-904514400, -896043600, -875484e3, -864594e3, -844034400, -832539600, -812584800, -
798066e3, -781048800, -772059600, -764802e3, -748476e3, -733352400, -719445600, -
717026400, -706741200, -699483600, -687996e3, -668034e3, -654732e3, -636584400, -
622072800, -605739600, -590623200, -57429e4, -558568800, -542235600, -527119200, -
512600400, -496274400, -481150800, -46422e4, -449701200, -432165600, -417646800, -
401320800, -386197200, -369266400, -354747600, -337816800, -323298e3, -306972e3, -
291848400, -276732e3, -257979600, -245282400, -22653e4, -213228e3, -195080400, -
182383200, -163630800, -150933600, -132181200, -119484e3, -100731600, -88034400, -
68677200, -59004e3, -37238400, 57726e3, 69818400, 89175600, 101268e3, 120625200,
132717600, 152074800, 164167200, 183524400, 196221600, 214974e3, 227671200,
246423600, 259120800, 278478e3, 290570400, 309927600, 32202e4, 341377200, 354675600,
372823200, 386125200, 404272800, 417574800, 435722400, 449024400, 467776800,
481078800, 499226400, 512528400, 530676e3, 543978e3, 562125600, 575427600,
593575200, 606877200, 625629600, 638326800, 657079200, 670381200, 688528800,
701830800, 719978400, 733280400, 751428e3, 76473e4, 782877600, 796179600, 814327200,
828234e3, 846381600, 859683600, 877831200, 891133200, 909280800, 922582800,
941335200, 954032400, 972784800, 985482e3, 1004234400, 1017536400, 1035684e3,
1048986e3, 1067133600, 1080435600, 1099188e3, 1111885200, 1130637600, 1143334800,
1162087200, 1174784400, 1193536800, 1206838800, 1224986400, 1238288400, 1256436e3,
1269738e3, 1288490400, 1301187600, 131994e4, 1332637200, 1351389600, 1364691600,
1382839200, 1396141200, 1414288800, 1427590800, 1445738400, 1459040400, 1477792800,
149049e4, 1509242400, 1521939600, 1540692e3, 1553994e3, 1572141600, 1585443600,
1603591200, 1616893200, 1635645600, 1648342800, 1667095200, 1679792400, 1698544800,
1711846800, 1729994400, 1743296400, 1761444e3, 1774746e3, 1792893600, 1806195600,
1824948e3, 1837645200, 1856397600, 1869094800, 1887847200, 1901149200, 1919296800,
1932598800
],
offset: [-75, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0,
3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0,
3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 7200, 3600,
7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 0, 3600, 0, 3600, 7200, 3600, 0,
3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0,
3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0,
3600, 0, 3600, 0, 3600, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600,
0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0,
3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0,
3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0,
3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0,
3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0,
3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0
]
},
"Europe/Luxembourg": {
time: [-2069712e3, -1692493200, -1680476400, -1662339600, -165015e4, -1632002400, -
1618693200, -1612656e3, -1604278800, -1585515600, -1574038800, -1552255200, -
1539997200, -1520546400, -1507510800, -1490569200, -1473642e3, -1459116e3, -
1444006800, -142767e4, -1411866e3, -1396220400, -1379293200, -1364770800, -
1348448400, -1333321200, -1316394e3, -1301266800, -1284339600, -126981e4, -
1253484e3, -1238360400, -1221429600, -1206910800, -1191189600, -1175461200, -
1160344800, -1143406800, -1127685600, -1111957200, -1096840800, -1080507600, -
1063576800, -1049058e3, -1033336800, -1017608400, -1002492e3, -986158800, -969228e3,
-950475600, -942012e3, -935182800, -85725e4, -844552800, -828219600, -812498400, -
797979600, -781048800, -766616400, -745452e3, -733266e3, 228880800, 244004400,
260330400, 276058800, 29178e4, 307508400, 323834400, 338958e3, 354679200, 370407600,
386128800, 401857200, 417578400, 433306800, 449028e3, 465361200, 481082400,
496810800, 512532e3, 528260400, 543981600, 55971e4, 575431200, 591159600, 606880800,
622609200, 638330400, 654663600, 670384800, 686113200, 701834400, 717562800,
733284e3, 749012400, 764733600, 780462e3, 796183200, 811911600, 828237600,
846385200, 859687200, 877834800, 891136800, 909284400, 922586400, 941338800,
954036e3, 972788400, 985485600, 1004238e3, 101754e4, 1035687600, 1048989600,
1067137200, 1080439200, 1099191600, 1111888800, 1130641200, 1143338400, 1162090800,
1174788e3, 1193540400, 1206842400, 122499e4, 1238292e3, 1256439600, 1269741600,
1288494e3, 1301191200, 1319943600, 1332640800, 1351393200, 1364695200, 1382842800,
1396144800, 1414292400, 1427594400, 1445742e3, 1459044e3, 1477796400, 1490493600,
1509246e3, 1521943200, 1540695600, 1553997600, 1572145200, 1585447200, 1603594800,
1616896800, 1635649200, 1648346400, 1667098800, 1679796e3, 1698548400, 1711850400,
1729998e3, 17433e5, 1761447600, 1774749600, 1792897200, 1806199200, 1824951600,
1837648800, 1856401200, 1869098400, 1887850800, 1901152800, 1919300400, 1932602400
],
offset: [1476, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600,
0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0,
3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600
]
},
"Europe/Madrid": {
time: [-2177453684, -1631926800, -1616972400, -1601168400, -1585436400, -1442451600, -
1427756400, -1379293200, -1364857200, -1348448400, -1333407600, -1316390400, -
1301353200, -1284339600, -1269903600, -1026954e3, -1017702e3, -1001898e3, -
999478800, -986083200, -951519600, -940208400, -873075600, -862614e3, -842835600, -
828313200, -811386e3, -796863600, -779936400, -765414e3, -748486800, -733964400, -
652323600, -639010800, 135126e3, 150253200, 166575600, 181702800, 196815600,
212547600, 22887e4, 243997200, 260330400, 276058800, 29178e4, 307508400, 323834400,
338958e3, 354679200, 370407600, 386128800, 401857200, 417578400, 433306800,
449028e3, 465361200, 481082400, 496810800, 512532e3, 528260400, 543981600, 55971e4,
575431200, 591159600, 606880800, 622609200, 638330400, 654663600, 670384800,
686113200, 701834400, 717562800, 733284e3, 749012400, 764733600, 780462e3,
796183200, 811911600, 828237600, 846385200, 859687200, 877834800, 891136800,
909284400, 922586400, 941338800, 954036e3, 972788400, 985485600, 1004238e3,
101754e4, 1035687600, 1048989600, 1067137200, 1080439200, 1099191600, 1111888800,
1130641200, 1143338400, 1162090800, 1174788e3, 1193540400, 1206842400, 122499e4,
1238292e3, 1256439600, 1269741600, 1288494e3, 1301191200, 1319943600, 1332640800,
1351393200, 1364695200, 1382842800, 1396144800, 1414292400, 1427594400, 1445742e3,
1459044e3, 1477796400, 1490493600, 1509246e3, 1521943200, 1540695600, 1553997600,
1572145200, 1585447200, 1603594800, 1616896800, 1635649200, 1648346400, 1667098800,
1679796e3, 1698548400, 1711850400, 1729998e3, 17433e5, 1761447600, 1774749600,
1792897200, 1806199200, 1824951600, 1837648800, 1856401200, 1869098400, 1887850800,
1901152800, 1919300400, 1932602400
],
offset: [-884, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0,
3600, 7200, 3600, 0, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600
]
},
"Europe/Paris": {
time: [-2486678340, -1855958340, -1689814800, -1680393600, -1665363600, -1648339200, -
1635123600, -1616889600, -1604278800, -158544e4, -1574038800, -1552262400, -
1539997200, -1520553600, -1507510800, -1490572800, -1470618e3, -1459123200, -
1444006800, -1427673600, -1411952400, -1396224e3, -1379293200, -1364774400, -
1348448400, -1333324800, -1316394e3, -1301270400, -1284339600, -1269820800, -
1253494800, -1238371200, -1221440400, -1206921600, -1191200400, -1175472e3, -
1160355600, -1143417600, -1127696400, -1111968e3, -1096851600, -1080518400, -
1063587600, -1049068800, -1033347600, -1017619200, -1002502800, -986169600, -
969238800, -950486400, -942012e3, -932432400, -85725e4, -844552800, -828219600, -
812498400, -800064e3, -796258800, -781048800, -766616400, 196822800, 212547600,
228880800, 244004400, 260330400, 276058800, 29178e4, 307508400, 323834400, 338958e3,
354679200, 370407600, 386128800, 401857200, 417578400, 433306800, 449028e3,
465361200, 481082400, 496810800, 512532e3, 528260400, 543981600, 55971e4, 575431200,
591159600, 606880800, 622609200, 638330400, 654663600, 670384800, 686113200,
701834400, 717562800, 733284e3, 749012400, 764733600, 780462e3, 796183200,
811911600, 828237600, 846385200, 859687200, 877834800, 891136800, 909284400,
922586400, 941338800, 954036e3, 972788400, 985485600, 1004238e3, 101754e4,
1035687600, 1048989600, 1067137200, 1080439200, 1099191600, 1111888800, 1130641200,
1143338400, 1162090800, 1174788e3, 1193540400, 1206842400, 122499e4, 1238292e3,
1256439600, 1269741600, 1288494e3, 1301191200, 1319943600, 1332640800, 1351393200,
1364695200, 1382842800, 1396144800, 1414292400, 1427594400, 1445742e3, 1459044e3,
1477796400, 1490493600, 1509246e3, 1521943200, 1540695600, 1553997600, 1572145200,
1585447200, 1603594800, 1616896800, 1635649200, 1648346400, 1667098800, 1679796e3,
1698548400, 1711850400, 1729998e3, 17433e5, 1761447600, 1774749600, 1792897200,
1806199200, 1824951600, 1837648800, 1856401200, 1869098400, 1887850800, 1901152800,
1919300400, 1932602400
],
offset: [561, 561, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600,
0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0,
3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 0, 3600, 7200, 3600,
7200, 3600, 7200, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600
]
},
"Europe/Rome": {
time: [-3259094400, -2403562204, -1690761600, -168048e4, -1664755200, -1648944e3, -163512e4,
-1616889600, -1604275200, -1585526400, -1571011200, -1555286400, -932428800, -
85725e4, -844552800, -828219600, -812498400, -798066e3, -781048800, -76671e4, -
750895200, -733352400, -719452800, -70191e4, -689205600, -670453200, -114048e3, -
103161600, -81993600, -71708400, -50544e3, -40258800, -18489600, -8204400, 1296e4,
23245200, 43804800, 54694800, 75859200, 86749200, 107913600, 118198800, 138758400,
149648400, 170812800, 181098e3, 202262400, 212547600, 233107200, 243997200,
265161600, 276051600, 296611200, 307501200, 323834400, 338958e3, 354679200,
370407600, 386128800, 401857200, 417578400, 433306800, 449028e3, 465361200,
481082400, 496810800, 512532e3, 528260400, 543981600, 55971e4, 575431200, 591159600,
606880800, 622609200, 638330400, 654663600, 670384800, 686113200, 701834400,
717562800, 733284e3, 749012400, 764733600, 780462e3, 796183200, 811911600,
828237600, 846385200, 859687200, 877834800, 891136800, 909284400, 922586400,
941338800, 954036e3, 972788400, 985485600, 1004238e3, 101754e4, 1035687600,
1048989600, 1067137200, 1080439200, 1099191600, 1111888800, 1130641200, 1143338400,
1162090800, 1174788e3, 1193540400, 1206842400, 122499e4, 1238292e3, 1256439600,
1269741600, 1288494e3, 1301191200, 1319943600, 1332640800, 1351393200, 1364695200,
1382842800, 1396144800, 1414292400, 1427594400, 1445742e3, 1459044e3, 1477796400,
1490493600, 1509246e3, 1521943200, 1540695600, 1553997600, 1572145200, 1585447200,
1603594800, 1616896800, 1635649200, 1648346400, 1667098800, 1679796e3, 1698548400,
1711850400, 1729998e3, 17433e5, 1761447600, 1774749600, 1792897200, 1806199200,
1824951600, 1837648800, 1856401200, 1869098400, 1887850800, 1901152800, 1919300400,
1932602400
],
offset: [2996, 2996, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600
]
},
"Europe/Warsaw": {
time: [-2840140800, -1717027200, -1693702800, -1680476400, -1663452e3, -1650142800, -
1632002400, -1618693200, -1600466400, -1587157200, -1501718400, -931730400, -
85725e4, -844552800, -828219600, -812498400, -796600800, -778723200, -762652800, -
748483200, -733266e3, -715212e3, -701902800, -684972e3, -670453200, -654127200, -
639003600, -397090800, -386805600, -371084400, -355356e3, -334191600, -323301600, -
307580400, -291852e3, -271292400, -260402400, -239842800, -228952800, -208393200, -
197503200, -176338800, -166053600, 228877200, 244000800, 260326800, 276055200,
291776400, 307504800, 323830800, 338954400, 354675600, 370404e3, 386125200,
401853600, 417574800, 433303200, 449024400, 465357600, 481078800, 496807200,
512528400, 528256800, 543978e3, 559706400, 575431200, 591159600, 606880800,
622609200, 638330400, 654663600, 670384800, 686113200, 701834400, 717562800,
733284e3, 749012400, 764733600, 780462e3, 796183200, 811911600, 828237600,
846385200, 859687200, 877834800, 891136800, 909284400, 922586400, 941338800,
954036e3, 972788400, 985485600, 1004238e3, 101754e4, 1035687600, 1048989600,
1067137200, 1080439200, 1099191600, 1111888800, 1130641200, 1143338400, 1162090800,
1174788e3, 1193540400, 1206842400, 122499e4, 1238292e3, 1256439600, 1269741600,
1288494e3, 1301191200, 1319943600, 1332640800, 1351393200, 1364695200, 1382842800,
1396144800, 1414292400, 1427594400, 1445742e3, 1459044e3, 1477796400, 1490493600,
1509246e3, 1521943200, 1540695600, 1553997600, 1572145200, 1585447200, 1603594800,
1616896800, 1635649200, 1648346400, 1667098800, 1679796e3, 1698548400, 1711850400,
1729998e3, 17433e5, 1761447600, 1774749600, 1792897200, 1806199200, 1824951600,
1837648800, 1856401200, 1869098400, 1887850800, 1901152800, 1919300400, 1932602400
],
offset: [5040, 5040, 3600, 7200, 3600, 7200, 3600, 7200, 7200, 10800, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600
]
},
"Europe/Istanbul": {
time: [-2840140800, -1869868800, -1693699200, -168048e4, -1570406400, -1552176e3, -
1538352e3, -1522540800, -1507507200, -1490572800, -1440201600, -1428019200, -
1409702400, -1396483200, -931132800, -922752e3, -917827200, -892425600, -875836800,
-857347200, -781056e3, -764726400, -744336e3, -733795200, -716428800, -701913600, -
684979200, -670464e3, -654134400, -639014400, -621820800, -60696e4, -590025600, -
575424e3, -235612800, -228268800, -177724800, -165715200, 10540800, 23846400,
41990400, 55296e3, 74044800, 87350400, 107917200, 12123e4, 133927200, 152686800,
165369600, 183513600, 202435200, 215568e3, 228873600, 245808e3, 260323200,
277257600, 308793600, 323838e3, 340243200, 354682800, 371692800, 386132400,
403142400, 428457600, 433900800, 482803200, 496713600, 512528400, 528256800,
543978e3, 559706400, 575427600, 591156e3, 606877200, 622605600, 638326800, 65466e4,
670381200, 686109600, 701830800, 717559200, 733280400, 749008800, 764125200,
780458400, 796179600, 811908e3, 828234e3, 846381600, 859683600, 877831200,
891133200, 909280800, 922582800, 941335200, 954032400, 972784800, 985482e3,
1004234400, 1017536400, 1035684e3, 1048986e3, 1067133600, 1080435600, 1099188e3,
1111885200, 1130637600, 1143334800, 1162087200, 1174791600, 1193544e3, 1206846e3,
1224993600, 1238295600, 1256443200, 1269745200, 1288497600, 1301281200, 1319947200,
1332644400, 1351396800, 1364698800, 1382846400, 1396234800, 1414296e3, 1427598e3,
1446955200, 1459047600, 1473206400, 1925002800
],
offset: [6952, 7016, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200,
10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800,
7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200,
10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800,
7200, 10800, 7200, 10800, 14400, 10800, 14400, 10800, 14400, 10800, 14400, 10800,
14400, 10800, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200,
10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800,
7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200,
10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800,
7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200,
10800, 10800
]
},
"Europe/Zurich": {
time: [-3675196800, -2385244800, -904431600, -891122400, -872982e3, -859672800, 354679200,
370407600, 386128800, 401857200, 417578400, 433306800, 449028e3, 465361200,
481082400, 496810800, 512532e3, 528260400, 543981600, 55971e4, 575431200, 591159600,
606880800, 622609200, 638330400, 654663600, 670384800, 686113200, 701834400,
717562800, 733284e3, 749012400, 764733600, 780462e3, 796183200, 811911600,
828237600, 846385200, 859687200, 877834800, 891136800, 909284400, 922586400,
941338800, 954036e3, 972788400, 985485600, 1004238e3, 101754e4, 1035687600,
1048989600, 1067137200, 1080439200, 1099191600, 1111888800, 1130641200, 1143338400,
1162090800, 1174788e3, 1193540400, 1206842400, 122499e4, 1238292e3, 1256439600,
1269741600, 1288494e3, 1301191200, 1319943600, 1332640800, 1351393200, 1364695200,
1382842800, 1396144800, 1414292400, 1427594400, 1445742e3, 1459044e3, 1477796400,
1490493600, 1509246e3, 1521943200, 1540695600, 1553997600, 1572145200, 1585447200,
1603594800, 1616896800, 1635649200, 1648346400, 1667098800, 1679796e3, 1698548400,
1711850400, 1729998e3, 17433e5, 1761447600, 1774749600, 1792897200, 1806199200,
1824951600, 1837648800, 1856401200, 1869098400, 1887850800, 1901152800, 1919300400,
1932602400
],
offset: [2048, 1786, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200,
3600, 7200, 3600, 7200, 3600, 7200, 3600, 7200, 3600
]
},
"Australia/Sydney": {
time: [-2364076800, -1672531140, -1665352800, -883605600, -876088800, -860364e3, -844639200,
-828309600, -813189600, 57722400, 68007600, 89172e3, 100062e3, 120621600, 131511600,
152071200, 162961200, 183520800, 195015600, 215575200, 226465200, 247024800,
257914800, 278474400, 289364400, 309924e3, 320814e3, 341373600, 352263600,
372823200, 386737200, 404877600, 415767600, 436327200, 447217200, 467776800,
478666800, 499226400, 511326e3, 530071200, 542775600, 562125600, 57483e4, 59418e4,
606279600, 625629600, 636519600, 657079200, 667969200, 688528800, 699418800,
719978400, 731473200, 752032800, 762922800, 783482400, 794372400, 814932e3,
828241200, 846381600, 859690800, 877831200, 891140400, 909280800, 92259e4,
941335200, 954039600, 967341600, 985489200, 1004234400, 1017543600, 1035684e3,
1048993200, 1067133600, 1080442800, 1099188e3, 1111892400, 1130637600, 1143946800,
1162087200, 1174791600, 1193536800, 1207450800, 1223172e3, 1238900400, 1254621600,
127035e4, 1286071200, 1301799600, 1317520800, 1333249200, 1349575200, 1365303600,
1381024800, 1396753200, 1412474400, 1428202800, 1443924e3, 1459652400, 1475373600,
1491102e3, 1506823200, 1522551600, 1538877600, 1554606e3, 1570327200, 1586055600,
1601776800, 1617505200, 1633226400, 1648954800, 1664676e3, 1680404400, 1696125600,
1712458800, 172818e4, 1743908400, 1759629600, 1775358e3, 1791079200, 1806807600,
1822528800, 1838257200, 1853978400, 1869706800, 1886032800, 1901761200, 1917482400,
1933210800
],
offset: [36292, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3,
39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600,
36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3,
39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600,
36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3,
39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600,
36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3,
39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600,
36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3,
39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600
]
},
"Australia/Brisbane": {
time: [-2366755200, -1672531140, -1665352800, -883605600, -876088800, -860364e3, -844639200,
-828309600, -813189600, 57722400, 68007600, 625629600, 636519600, 657079200,
667969200, 688528800, 699418800, 1925028e3
],
offset: [36728, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3,
39600, 36e3, 39600, 36e3, 39600, 36e3
]
},
"Australia/Adelaide": {
time: [-2364076800, -2230156800, -1672531140, -1665352800, -883605600, -876088800, -
860364e3, -844639200, -828309600, -813189600, 57722400, 68007600, 89172e3, 100062e3,
120621600, 131511600, 152071200, 162961200, 183520800, 195015600, 215575200,
226465200, 247024800, 257914800, 278474400, 289364400, 309924e3, 320814e3,
341373600, 352263600, 372823200, 384318e3, 404877600, 415767600, 436327200,
447217200, 467776800, 478666800, 499226400, 511326e3, 530071200, 542775600,
562125600, 57483e4, 59418e4, 606279600, 625629600, 637729200, 657079200, 667969200,
688528800, 701233200, 719978400, 731473200, 752032800, 764132400, 783482400,
796186800, 814932e3, 828241200, 846381600, 859690800, 877831200, 891140400,
909280800, 92259e4, 941335200, 954039600, 972784800, 985489200, 1004234400,
1017543600, 1035684e3, 1048993200, 1067133600, 1080442800, 1099188e3, 1111892400,
1130637600, 1143946800, 1162087200, 1174791600, 1193536800, 1207450800, 1223172e3,
1238900400, 1254621600, 127035e4, 1286071200, 1301799600, 1317520800, 1333249200,
1349575200, 1365303600, 1381024800, 1396753200, 1412474400, 1428202800, 1443924e3,
1459652400, 1475373600, 1491102e3, 1506823200, 1522551600, 1538877600, 1554606e3,
1570327200, 1586055600, 1601776800, 1617505200, 1633226400, 1648954800, 1664676e3,
1680404400, 1696125600, 1712458800, 172818e4, 1743908400, 1759629600, 1775358e3,
1791079200, 1806807600, 1822528800, 1838257200, 1853978400, 1869706800, 1886032800,
1901761200, 1917482400, 1933210800
],
offset: [33260, 32400, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800,
34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800,
34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800,
34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800,
34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800,
34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800,
34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800,
34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800,
34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800,
34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800,
34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800, 34200, 37800
]
},
"Australia/ACT": {
time: [-2364076800, -1672531140, -1665352800, -883605600, -876088800, -860364e3, -844639200,
-828309600, -813189600, 57722400, 68007600, 89172e3, 100062e3, 120621600, 131511600,
152071200, 162961200, 183520800, 195015600, 215575200, 226465200, 247024800,
257914800, 278474400, 289364400, 309924e3, 320814e3, 341373600, 352263600,
372823200, 386737200, 404877600, 415767600, 436327200, 447217200, 467776800,
478666800, 499226400, 511326e3, 530071200, 542775600, 562125600, 57483e4, 59418e4,
606279600, 625629600, 636519600, 657079200, 667969200, 688528800, 699418800,
719978400, 731473200, 752032800, 762922800, 783482400, 794372400, 814932e3,
828241200, 846381600, 859690800, 877831200, 891140400, 909280800, 92259e4,
941335200, 954039600, 967341600, 985489200, 1004234400, 1017543600, 1035684e3,
1048993200, 1067133600, 1080442800, 1099188e3, 1111892400, 1130637600, 1143946800,
1162087200, 1174791600, 1193536800, 1207450800, 1223172e3, 1238900400, 1254621600,
127035e4, 1286071200, 1301799600, 1317520800, 1333249200, 1349575200, 1365303600,
1381024800, 1396753200, 1412474400, 1428202800, 1443924e3, 1459652400, 1475373600,
1491102e3, 1506823200, 1522551600, 1538877600, 1554606e3, 1570327200, 1586055600,
1601776800, 1617505200, 1633226400, 1648954800, 1664676e3, 1680404400, 1696125600,
1712458800, 172818e4, 1743908400, 1759629600, 1775358e3, 1791079200, 1806807600,
1822528800, 1838257200, 1853978400, 1869706800, 1886032800, 1901761200, 1917482400,
1933210800
],
offset: [36292, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3,
39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600,
36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3,
39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600,
36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3,
39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600,
36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3,
39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600,
36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3,
39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600, 36e3, 39600
]
},
"Asia/Almaty": {
time: [-1441152e3, -1247529600, 354931200, 370742400, 386467200, 402278400, 418003200,
433814400, 449625600, 465361200, 481082400, 496810800, 512532e3, 528260400,
543981600, 55971e4, 575431200, 591159600, 606880800, 622609200, 638330400,
654663600, 670384800, 686113200, 695786400, 701834400, 717562800, 733284e3,
749012400, 764733600, 780462e3, 796183200, 811911600, 828237600, 846385200,
859687200, 877834800, 891136800, 909284400, 922586400, 941338800, 954036e3,
972788400, 985485600, 1004238e3, 101754e4, 1035687600, 1048989600, 1067137200,
1080439200, 1099191600, 1925013600
],
offset: [18468, 18e3, 21600, 25200, 21600, 25200, 21600, 25200, 21600, 25200, 21600, 25200,
21600, 25200, 21600, 25200, 21600, 25200, 21600, 25200, 21600, 25200, 21600, 21600,
18e3, 21600, 25200, 21600, 25200, 21600, 25200, 21600, 25200, 21600, 25200, 21600,
25200, 21600, 25200, 21600, 25200, 21600, 25200, 21600, 25200, 21600, 25200, 21600,
25200, 21600, 25200, 21600
]
},
"Asia/Ashkhabad": {
time: [-1441152e3, -1247529600, 354931200, 370742400, 386467200, 402278400, 418003200,
433814400, 449625600, 465361200, 481082400, 496810800, 512532e3, 528260400,
543981600, 55971e4, 575431200, 591159600, 606880800, 622609200, 638330400,
654663600, 670384800, 686113200, 695786400, 192501e4
],
offset: [14012, 14400, 18e3, 21600, 18e3, 21600, 18e3, 21600, 18e3, 21600, 18e3, 21600,
18e3, 21600, 18e3, 21600, 18e3, 21600, 18e3, 21600, 18e3, 21600, 18e3, 18e3, 14400,
18e3
]
},
"Asia/Tokyo": {
time: [-2587678861, -683762400, -672357600, -654732e3, -640908e3, -620258400, -609458400, -
588808800, -578008800, 1925024400
],
offset: [33539, 32400, 36e3, 32400, 36e3, 32400, 36e3, 32400, 36e3, 32400]
},
"Asia/Taipei": {
time: [-2335219200, -1017792e3, -766191600, -745804800, -733795200, -716860800, -699580800,
-683856e3, -670636800, -65232e4, -639100800, -620784e3, -607564800, -589248e3, -
576028800, -562896e3, -541728e3, -528681600, -510192e3, -497145600, -478656e3, -
465609600, -449798400, -433987200, -418176e3, -402451200, -38664e4, -370915200, -
355104e3, -339379200, -323568e3, -302486400, -291945600, -270950400, -260409600,
134006400, 149817600, 165542400, 181353600, 299635200, 307584e3, 1925020800
],
offset: [29160, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800,
32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800,
32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800,
32400, 28800, 32400, 28800, 32400, 28800
]
},
"Asia/Singapore": {
time: [-2177452800, -2038176e3, -1167609600, -1073001600, -894153600, -879638400, -
766972800, 378691200, 1925020800
],
offset: [24925, 24925, 25200, 26400, 26400, 27e3, 32400, 27e3, 28800]
},
"Asia/Shanghai": {
time: [-2177452800, -933465600, -923097600, -908755200, -891561600, 515548800, 52704e4,
545184e3, 558489600, 576633600, 589939200, 608688e3, 621993600, 640137600,
653443200, 671587200, 684892800, 1925020800
],
offset: [29143, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800,
32400, 28800, 32400, 28800, 32400, 28800
]
},
"Asia/Seoul": {
time: [-1948752e3, -1830384e3, -767318400, -498096e3, -462672e3, -451699200, -429753600, -
418262400, -399513600, -387417600, -368064e3, -355968e3, -336614400, -324518400, -
305164800, -293068800, -264902400, 547610400, 560919600, 57906e4, 592369200,
1925024400
],
offset: [30472, 30600, 32400, 32400, 30600, 34200, 30600, 34200, 30600, 34200, 30600, 34200,
30600, 34200, 30600, 34200, 30600, 32400, 36e3, 32400, 36e3, 32400
]
},
"Asia/Tehran": {
time: [-1704153600, -757382400, 247190400, 259286400, 277776e3, 283996800, 290822400,
306547200, 322444800, 338515200, 673228800, 685497600, 701222400, 71712e4,
732758400, 748656e3, 764294400, 780192e3, 795830400, 811728e3, 827366400, 843264e3,
858988800, 874886400, 890524800, 906422400, 922060800, 937958400, 953596800,
969494400, 985219200, 1001116800, 1016755200, 1032652800, 1048291200, 1064188800,
1079827200, 1095724800, 1111449600, 1127347200, 1206057600, 1221955200, 123768e4,
1253577600, 1269216e3, 1285113600, 1300752e3, 1316649600, 1332288e3, 1348185600,
1363910400, 1379808e3, 1395446400, 1411344e3, 1426982400, 144288e4, 1458518400,
1474416e3, 1490140800, 1506038400, 1521676800, 1537574400, 1553212800, 1569110400,
1584748800, 1600646400, 1616371200, 1632268800, 1647907200, 1663804800, 1679443200,
1695340800, 1710979200, 1726876800, 1742601600, 1758499200, 1774137600, 1790035200,
1805673600, 1821571200, 1837209600, 1853107200, 1868745600, 1884643200, 1900368e3,
1916265600, 1931904e3
],
offset: [12344, 12344, 12600, 14400, 18e3, 14400, 12600, 16200, 12600, 16200, 12600, 16200,
12600, 16200, 12600, 16200, 12600, 16200, 12600, 16200, 12600, 16200, 12600, 16200,
12600, 16200, 12600, 16200, 12600, 16200, 12600, 16200, 12600, 16200, 12600, 16200,
12600, 16200, 12600, 16200, 12600, 16200, 12600, 16200, 12600, 16200, 12600, 16200,
12600, 16200, 12600, 16200, 12600, 16200, 12600, 16200, 12600, 16200, 12600, 16200,
12600, 16200, 12600, 16200, 12600, 16200, 12600, 16200, 12600, 16200, 12600, 16200,
12600, 16200, 12600, 16200, 12600, 16200, 12600, 16200, 12600, 16200, 12600, 16200,
12600, 16200, 12600
]
},
"Asia/Dubai": {
time: [-1577923200, 1925006400],
offset: [13272, 14400]
},
"Asia/Kolkata": {
time: [-2840140800, -891561600, -872035200, -862617600, -764121600, 1925011800],
offset: [21208, 21200, 23400, 19800, 23400, 19800]
},
"Asia/Hong_Kong": {
time: [-2056665600, -907360200, -891635400, -884217600, -766713600, -747952200, -728512200,
-717021e3, -694470600, -683757e3, -668032200, -654726600, -636582600, -623277e3, -
605133e3, -591827400, -573683400, -559773e3, -542320200, -528323400, -510179400, -
498083400, -478729800, -466633800, -446675400, -435184200, -415225800, -403129800, -
383776200, -371680200, -352326600, -340230600, -320877e3, -308781e3, -288822600, -
277331400, -257373e3, -245881800, -225923400, -213827400, -194473800, -182377800, -
163024200, -148509e3, -132784200, -117059400, -101334600, -85609800, -69280200, -
53555400, -37830600, -22105800, -6381e3, 9343800, 25068600, 40793400, 56518200,
72243e3, 88572600, 104297400, 120022200, 126070200, 151471800, 167196600, 182921400,
198646200, 214371e3, 295414200, 309324600, 1925020800
],
offset: [27402, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800,
32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800,
32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800,
32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800,
32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800,
32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800
]
},
"Asia/Bangkok": {
time: [-2840140800, -1570060800, 1925017200],
offset: [24124, 24124, 25200]
},
"Asia/Chongqing": {
time: [-2177452800, -933465600, -923097600, -908755200, -891561600, 515548800, 52704e4,
545184e3, 558489600, 576633600, 589939200, 608688e3, 621993600, 640137600,
653443200, 671587200, 684892800, 1925020800
],
offset: [29143, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800, 32400, 28800,
32400, 28800, 32400, 28800, 32400, 28800
]
},
"Asia/Jerusalem": {
time: [-2840140800, -1640995200, -933638400, -857347200, -844293600, -825811200, -812678400,
-794188800, -779846400, -762645600, -748303200, -731116800, -681955200, -673228800,
-667951200, -65232e4, -636415200, -62208e4, -608936400, -59184e4, -572475600, -
558568800, -542840400, -527724e3, -514414800, -490838400, -482976e3, -459468e3, -
451526400, -428544e3, -418251600, -400024800, -387417600, 142387200, 150854400,
167184e3, 178675200, 482284800, 495590400, 516758400, 526435200, 545443200,
558489600, 576633600, 589334400, 609897600, 620784e3, 638323200, 651628800,
669772800, 683683200, 701827200, 715737600, 733708800, 747187200, 765158400,
778032e3, 796608e3, 810086400, 826848e3, 842832e3, 858902400, 874195200, 890352e3,
90504e4, 923018400, 936324e3, 955677600, 970794e3, 986778e3, 1001293200, 1017363600,
1033952400, 1048813200, 1065142800, 1081299600, 1095814800, 1112320800, 1128823200,
1143770400, 1159668e3, 117522e4, 1189908e3, 1206669600, 1223172e3, 1238119200,
1254016800, 1269568800, 1284256800, 1301623200, 1317520800, 1333072800, 1348365600,
1364522400, 1382839200, 1395972e3, 1414288800, 1427421600, 1445738400, 1458871200,
1477792800, 1490320800, 1509242400, 1521770400, 1540692e3, 1553824800, 1572141600,
1585274400, 1603591200, 1616724e3, 1635645600, 1648173600, 1667095200, 1679623200,
1698544800, 1711677600, 1729994400, 1743127200, 1761444e3, 1774576800, 1792893600,
1806026400, 1824948e3, 1837476e3, 1856397600, 1868925600, 1887847200, 190098e4,
1919296800, 1932429600
],
offset: [8454, 8440, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200,
14400, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200,
10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800,
7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200,
10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800,
7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200,
10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800,
7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200,
10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800,
7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200
]
},
"Asia/Kuwait": {
time: [-719625600, 1925002800],
offset: [11212, 10800]
},
"Asia/Muscat": {
time: [-1577923200, 1925006400],
offset: [13272, 14400]
},
"Asia/Qatar": {
time: [-1577923200, 76204800, 1925002800],
offset: [12368, 14400, 10800]
},
"Asia/Riyadh": {
time: [-719625600, 1925002800],
offset: [11212, 10800]
},
"Pacific/Auckland": {
time: [-3192393600, -1330293600, -1320012e3, -1300658400, -1287352800, -1269208800, -
1255903200, -1237759200, -1224453600, -1206309600, -1192399200, -117486e4, -
1160949600, -1143410400, -1125871200, -1112565600, -1094421600, -1081116e3, -
1062972e3, -1049666400, -1031522400, -1018216800, -1000072800, -986767200, -
968018400, -955317600, -936568800, -923263200, -757382400, 152676e3, 162356400,
183520800, 195015600, 215575200, 226465200, 247024800, 257914800, 278474400,
289364400, 309924e3, 320814e3, 341373600, 352263600, 372823200, 384318e3, 404877600,
415767600, 436327200, 447217200, 467776800, 478666800, 499226400, 510116400,
530676e3, 541566e3, 562125600, 573620400, 59418e4, 60507e4, 623815200, 637729200,
655264800, 669178800, 686714400, 700628400, 718164e3, 732682800, 749613600,
764132400, 781063200, 795582e3, 812512800, 827031600, 844567200, 858481200,
876016800, 889930800, 907466400, 921985200, 938916e3, 953434800, 970365600,
984884400, 100242e4, 1016334e3, 1033869600, 1047783600, 1065319200, 1079838e3,
1096768800, 1111287600, 1128218400, 1142737200, 1159668e3, 1174186800, 1191117600,
1207450800, 1222567200, 1238900400, 1254016800, 127035e4, 1285466400, 1301799600,
1316916e3, 1333249200, 1348970400, 1365303600, 138042e4, 1396753200, 1411869600,
1428202800, 1443319200, 1459652400, 1474768800, 1491102e3, 1506218400, 1522551600,
1538272800, 1554606e3, 1569722400, 1586055600, 1601172e3, 1617505200, 1632621600,
1648954800, 1664071200, 1680404400, 1695520800, 1712458800, 1727575200, 1743908400,
1759024800, 1775358e3, 1790474400, 1806807600, 1821924e3, 1838257200, 1853373600,
1869706800, 1885428e3, 1901761200, 1916877600, 1933210800
],
offset: [41944, 41400, 45e3, 41400, 43200, 41400, 43200, 41400, 43200, 41400, 43200, 41400,
43200, 41400, 43200, 41400, 43200, 41400, 43200, 41400, 43200, 41400, 43200, 41400,
43200, 41400, 43200, 41400, 43200, 43200, 46800, 43200, 46800, 43200, 46800, 43200,
46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200,
46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200,
46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200,
46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200,
46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200,
46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200,
46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200,
46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200,
46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800, 43200, 46800
]
},
"Pacific/Chatham": {
time: [-3192393600, -757382400, 152678700, 162359100, 183523500, 195018300, 215577900,
226467900, 247027500, 257917500, 278477100, 289367100, 309926700, 320816700,
341376300, 352266300, 372825900, 384320700, 404880300, 415770300, 436329900,
447219900, 467779500, 478669500, 499229100, 510119100, 530678700, 541568700,
562128300, 573623100, 594182700, 605072700, 623817900, 637731900, 655267500,
669181500, 686717100, 700631100, 718166700, 732685500, 749616300, 764135100,
781065900, 795584700, 812515500, 827034300, 844569900, 858483900, 876019500,
889933500, 907469100, 921987900, 938918700, 953437500, 970368300, 984887100,
1002422700, 1016336700, 1033872300, 1047786300, 1065321900, 1079840700, 1096771500,
1111290300, 1128221100, 1142739900, 1159670700, 1174189500, 1191120300, 1207453500,
1222569900, 1238903100, 1254019500, 1270352700, 1285469100, 1301802300, 1316918700,
1333251900, 1348973100, 1365306300, 1380422700, 1396755900, 1411872300, 1428205500,
1443321900, 1459655100, 1474771500, 1491104700, 1506221100, 1522554300, 1538275500,
1554608700, 1569725100, 1586058300, 1601174700, 1617507900, 1632624300, 1648957500,
1664073900, 1680407100, 1695523500, 1712461500, 1727577900, 1743911100, 1759027500,
1775360700, 1790477100, 1806810300, 1821926700, 1838259900, 1853376300, 1869709500,
1885430700, 1901763900, 1916880300, 1933213500
],
offset: [44028, 44100, 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500,
45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500,
45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500,
45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500,
45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500,
45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500,
45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500,
45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500,
45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500,
45900, 49500, 45900, 49500, 45900, 49500, 45900, 49500
]
},
"Pacific/Fakaofo": {
time: [-2177452800, 1325203200, 1925038800],
offset: [-41096, -39600, 46800]
},
"Pacific/Honolulu": {
time: [-2334139200, -1157320800, -1155470400, -880236e3, -765410400, -712188e3, 1924956e3],
offset: [-37886, -37800, -34200, -37800, -34200, -37800, -36e3]
},
"America/Mexico_City": {
time: [-1514763396, -1343091600, -1234828800, -1220317200, -1207180800, -1191369600, -
975283200, -963187200, -917136e3, -907372800, -821923200, -810086400, -627523200, -
613008e3, 828842400, 846381600, 860292e3, 877831200, 891741600, 909280800,
923191200, 941335200, 954640800, 972784800, 989114400, 1001815200, 1018144800,
1035684e3, 1049594400, 1067133600, 1081044e3, 1099188e3, 1112493600, 1130637600,
1143943200, 1162087200, 1175392800, 1193536800, 1207447200, 1224986400, 1238896800,
1256436e3, 1270346400, 1288490400, 1301796e3, 131994e4, 1333245600, 1351389600,
13653e5, 1382839200, 1396749600, 1414288800, 1428199200, 1445738400, 1459648800,
1477792800, 1491098400, 1509242400, 1522548e3, 1540692e3, 1554602400, 1572141600,
1586052e3, 1603591200, 1617501600, 1635645600, 1648951200, 1667095200, 1680400800,
1698544800, 1712455200, 1729994400, 1743904800, 1761444e3, 1775354400, 1792893600,
1806804e3, 1824948e3, 1838253600, 1856397600, 1869703200, 1887847200, 1901757600,
1919296800, 1933207200
],
offset: [-23796, -25200, -21600, -25200, -21600, -25200, -21600, -18e3, -21600, -18e3, -
21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -
18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -
21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -
18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -
21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -
18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -
21600, -18e3, -21600, -18e3, -21600, -18e3, -21600, -18e3, -21600
]
},
"Africa/Cairo": {
time: [-2185401600, -929836800, -923097600, -906163200, -892857600, -875836800, -857779200,
-844300800, -825811200, -812678400, -794188800, -779846400, -762652800, -399081600,
-38664e4, -368323200, -355104e3, -336783600, -323643600, -305161200, -292021200, -
273625200, -260485200, -242089200, -228949200, -210553200, -197413200, -178930800, -
165790800, -147394800, -134254800, -115858800, -102632400, -84322800, -71096400, -
52700400, -39474e3, -21164400, -7938e3, 10371600, 23598e3, 41907600, 55134e3,
7353e4, 86756400, 105066e3, 118292400, 136602e3, 149828400, 168138e3, 181364400,
199760400, 212986800, 231296400, 244522800, 262832400, 276058800, 294368400,
307594800, 325990800, 339217200, 357526800, 370753200, 396406800, 402289200,
426819600, 433825200, 452221200, 465447600, 483757200, 496983600, 515293200,
528519600, 546829200, 560055600, 578451600, 591678e3, 610419600, 623214e3,
641523600, 65475e4, 673059600, 686286e3, 704682e3, 717908400, 736218e3, 749444400,
767754e3, 780980400, 799027200, 812332800, 830476800, 843782400, 861926400,
875232e3, 893376e3, 906681600, 925430400, 938736e3, 95688e4, 970185600, 988329600,
1001635200, 1019779200, 1033084800, 1051228800, 1064534400, 1083283200, 1096588800,
1114732800, 1128038400, 1146182400, 1158883200, 1177632e3, 1189123200, 1209081600,
1219968e3, 1240531200, 1250812800, 1272585600, 1281484800, 1284076800, 1285891200,
1400198400, 1403827200, 1406851200, 1411689600, 1924999200
],
offset: [7509, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800,
7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200,
10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800,
7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200,
10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800,
7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200,
10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800,
7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200,
10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800,
7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200, 10800, 7200
]
},
"Africa/Johannesburg": {
time: [-2458166400, -2109283200, -860968800, -845244e3, -829519200, -813794400, 1924999200],
offset: [6720, 5400, 7200, 10800, 7200, 10800, 7200]
},
"Asia/Kathmandu": {
time: [-1577923200, 504921600, 1925012700],
offset: [20476, 19800, 20700]
},
"US/Mountain": {
time: [-2717668796, -1633298400, -1615154400, -1601848800, -1583704800, -1570399200, -
1551650400, -1538949600, -1534111200, -880236e3, -769417200, -765410400, -147909600,
-13158e4, -11646e4, -100130400, -84405600, -68680800, -52956e3, -37231200, -
21506400, -5781600, 9943200, 25668e3, 41392800, 57722400, 73447200, 89172e3,
104896800, 120621600, 126669600, 152071200, 162352800, 183520800, 199245600,
215575200, 230695200, 247024800, 262749600, 278474400, 294199200, 309924e3,
325648800, 341373600, 357098400, 372823200, 388548e3, 404877600, 419997600,
436327200, 452052e3, 467776800, 483501600, 499226400, 514951200, 530676e3,
544586400, 562125600, 576036e3, 59418e4, 607485600, 625629600, 638935200, 657079200,
670989600, 688528800, 702439200, 719978400, 733888800, 752032800, 765338400,
783482400, 796788e3, 814932e3, 828842400, 846381600, 860292e3, 877831200, 891741600,
909280800, 923191200, 941335200, 954640800, 972784800, 986090400, 1004234400,
1018144800, 1035684e3, 1049594400, 1067133600, 1081044e3, 1099188e3, 1112493600,
1130637600, 1143943200, 1162087200, 1173578400, 1194141600, 1205028e3, 1225591200,
1236477600, 1257040800, 1268532e3, 1289095200, 1299981600, 1320544800, 1331431200,
1351994400, 1362880800, 1383444e3, 1394330400, 1414893600, 142578e4, 1446343200,
1457834400, 1478397600, 1489284e3, 1509847200, 1520733600, 1541296800, 1552183200,
1572746400, 1583632800, 1604196e3, 1615687200, 1636250400, 1647136800, 16677e5,
1678586400, 1699149600, 1710036e3, 1730599200, 1741485600, 1762048800, 1772935200,
1793498400, 1804989600, 1825552800, 1836439200, 1857002400, 1867888800, 1888452e3,
1899338400, 1919901600, 1930788e3
],
offset: [-25196, -25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -25200, -
21600, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -
25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -
25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -
25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -
25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -
25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -
25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -
25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -
25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -
25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -
25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -
25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -
25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -25200, -21600, -
25200, -21600, -25200, -21600, -25200
]
}
}
},
function(t, e, i) {
"use strict";
(function(e, o, n, r) {
function s(t) {
return t instanceof A
}
function a(t) {
return TradingView.isInherited(t.constructor, g)
}
function l(t) {
return t.isNoScale() ? null : t.priceScale()
}
function c(t, e, i, o, n) {
if (void 0 !== n) switch (n) {
case "right":
return t.rightPriceScale();
case "left":
return t.leftPriceScale();
case "no-scale":
return null;
case "as-series":
if (!t.isMainPane()) {
j.logWarn(
'BEWARE: Attempt to set "as-series" price scale to study, but series and study are on different panes'
);
break
}
return l(e);
default:
j.logWarn("Unknown override for priceScale type - " + n +
", default will be used")
}
var r = i.priceScale;
return o ? null : (s(e) || t.isMainPane() && void 0 === r) && i.is_price_study ? l(e) :
r === R.None ? i.is_price_study ? null : (j.logWarn("Cannot add study " + i.id +
" with 'No Scale' setting, because study is not a price study. Using right price scale."
), t.rightPriceScale()) : r === R.Left ? t.leftPriceScale() : t.rightPriceScale()
}
function h(t, i, n, r, s, a, l, c, u, d) {
var p, _, f;
for (this._version = h.version, this._readOnly = r, this._undoModel = c, this._properties =
n, this._modelIntervals = [], this._isSnapshot = u, this.setStudiesMetaData(a, l), this
.m_timeScale = new T(this), F.init(), p = this, this.m_panes = [], this.m_gridSource =
new S, this.m_crossHairSource = new v(this, F.properties()), this.m_crossHairSource
.selectBarMode().subscribe(function(t) {
if (t && p.lineBeingCreated()) {
var e = F.tool.value();
p.cancelCreatingLine(), F.tool.setValue(e)
}
}), this.m_width = 0, this._tagsChanged = new e, this._lineCancelled = new e, this
._magnet = new w(F.properties().magnet, this.m_timeScale, n.paneProperties
.magnetSensivity), _ = new N("chartproperties.mainSeriesProperties"), _
.addExclusion("minTick"), _.addExclusion("priceAxisProperties.lockScale"), _
.addExclusion("priceAxisProperties.percentage"), _.addExclusion(
"priceAxisProperties.log"), this.createPane(void 0, {
rightAxisProperties: _.priceAxisProperties.state(["autoScale"])
}), this.m_panes[0]._stretchFactor = 2 * y.DEFAULT_STRETCH_FACTOR, this.m_panes[0]
._isMainPane = !0, this.m_selectedSource = null, this._selectedSourceChanged = new e,
this._chartApi = t,
this._invalidateHandler = i, this.m_hoveredSource = null, this._properties.listeners()
.subscribe(this, h.prototype.propertyChangeHandler), this._properties.timezone
.listeners().subscribe(null, function() {
p._chartApi && p._chartApi.connected() && p._chartApi.switchTimezone(p
.timezone())
}), this.m_timeScale.defaultRightOffsetProperty().listeners().subscribe(null,
function() {
p.recalculateAllPanes()
}), _.merge(n.mainSeriesProperties.state()), this.m_mainSeries = new z(this, _, s),
this
.m_panes[0].addDataSource(this.m_mainSeries, this.m_panes[0].rightPriceScale()), this
._mainSeriesScaleRatioProperty = new q(this), this.m_mainSeries.onCompleted().subscribe(
this,
function() {
p.clearCurrentPosition(), p._scrollingState && p.gotoTime()
}), this.m_mainSeries.onIntervalChanged().subscribe(this, function() {
this._oldStartVisibleIndex = -1, this._oldEndVisibleIndex = -1
}), this.m_mainSeries.onBarReceived().subscribe(this, h.prototype
.updateTimeScaleBaseIndex), r || (_.addChild("priceAxisProperties", this
.m_mainSeries.m_priceScale.properties()), this._properties.paneProperties
.legendProperties.showStudyTitles.listeners().subscribe(this, function(t) {
t.value() || p._properties.paneProperties.legendProperties
.showStudyArguments.setValue(!1)
})), this._barsMarksSources = d(this), f = 0; f < this._barsMarksSources.length; f++
) this._barsMarksSources[f].setOwnerSource(this.m_mainSeries);
this._syncPointCache = {}, this.m_watermarkSource = new b(this.m_mainSeries), this
._brandingSource = null, this.strategySources = [], this.strategySources.change = new e,
this._activeStrategySource = new o(null), this._oldStartVisibleIndex = -1, this
._oldEndVisibleIndex = -1, this._currentTool = "", F.hideAllDrawings().subscribe(this,
this.visibilityChangeHandler), this._properties.scalesProperties.listeners()
.subscribe(this, h.prototype.fullUpdate), this._id = U.guid(), this._studyInserted =
new e, this._chartThemeLoaded = new e, this._resetScales = new e, this
._studyShiftColorStartOffset = void 0
}
var u = i(9).ensureNotNull,
d = i(8).Point,
p = i(32),
_ = p.parseRgb,
f = p.rgbToBlackWhiteString,
m = i(220),
g = i(1).LineDataSource,
v = i(901),
y = i(228),
b = i(907),
S = i(908),
w = i(909),
T = i(910),
C = i(229),
x = i(106).BarsMarksContainer,
P = i(914).Branding,
L = i(46).PriceDataSource,
I = i(22),
k = i(35),
A = k.Study,
M = k.createStudy,
E = k.prepareStudyProperties,
D = i(84),
V = i(163),
O = i(128).StudyLineDataSource,
R = i(111).ScaleType,
B = i(19).PlotRowSearchMode,
z = i(77),
F = i(26),
N = i(6).DefaultProperty,
W = i(347).SyncPoint,
H = i(40).trackEvent,
U = i(61),
j = i(7).getLogger("Chart.ChartModel"),
q = i(916).MainSeriesScaleRatioProperty;
h.prototype.setStudiesMetaData = function(t, e) {
this._studiesMetaData = t, this._studyVersioning = new D(this._studiesMetaData, e)
}, h.prototype.isSnapshot = function() {
return this._isSnapshot
}, h.prototype.currentTool = function() {
return this._currentTool
}, h.prototype.setCurrentTool = function(t) {
this._currentTool = t
}, h.prototype.timezone = function() {
return this._properties.timezone.value()
}, h.prototype.version = function() {
return this._version
}, h.prototype.initConnection = function() {
this._chartApi.switchTimezone(this.timezone())
}, h.prototype.dumpViews = function() {
var t, e, i, o, n = {};
for (n.panes = [],
t = 0; t < this.m_panes.length; t++) n.panes.push(this.m_panes[t].dumpViews());
for (n.dataWindow = [], e = this.dataSources(), t = 0; t < e.length; t++) i = e[t], (o =
i.dataWindowView()) && n.dataWindow.push(o.dump());
return n
}, h.prototype._paneInvalidationMask = function(t, e) {
var i = new I,
o = this.m_panes.indexOf(t);
return void 0 === e && (e = I.LIGHT_UPDATE), i.invalidatePane(o, e), i
}, h.prototype.updatePane = function(t) {
var e = this._paneInvalidationMask(t);
this.invalidate(e)
}, h.prototype.fullUpdate = function() {
this.invalidate(new I(I.FULL_UPDATE))
}, h.prototype.updateSource = function(t) {
var e = this.paneForSource(t),
i = this._paneInvalidationMask(e);
this.invalidate(i)
}, h.prototype.studiesMetaData = function() {
return this._studiesMetaData
}, h.prototype.studyVersioning = function() {
return this._studyVersioning
}, h.prototype.disconnect = function() {
var t, e, i = this.dataSources();
for (e = 0; e < i.length; e++) t = i[e], t.disconnect && t.disconnect()
}, h.prototype.restart = function() {
var t, e, i;
for (this.initConnection(), this.m_timeScale.reset(), this.m_mainSeries.restart(), t =
this.dataSources(), e = 0; e < t.length; e++) i = t[e], i.restart && i !== this
.m_mainSeries && i.restart()
}, h.prototype.startNotStartedStudies = function() {
var t, e;
if (!this.m_mainSeries.isStarted()) throw Error(
"Cannot start studies: main series is not started");
for (t = this.dataSources(), e = 0; e < t.length; e++) s(t[e]) && !t[e].isStarted() &&
t[e].restart && t[e] !== this.m_mainSeries && t[e].restart()
}, h.prototype.updateLineTools = function() {
var t, e, i = this.dataSources();
for (t = 0; t < i.length; t++) a(i[t]) && (e = i[t], e.tryCreateServerPoints(), e
.checkAlert && e.checkAlert())
}, h.prototype.realignLineTools = function() {
var t, e, i = this.dataSources();
for (t = 0; t < i.length; t++) a(i[t]) && (e = i[t], e.calcIsActualSymbol());
for (t = 0; t < this.m_panes.length; t++) this.m_panes[t].invalidateSourcesCache()
}, h.prototype.readOnly = function() {
return this._readOnly
}, h.prototype.properties = function() {
return this._properties
}, h.prototype.lineCancelled = function() {
return this._lineCancelled
}, h.prototype.crossHairMoved = function() {
return this.m_crossHairSource.moved()
}, h.prototype.chartApi = function() {
return this._chartApi
}, h.prototype.propertyChangeHandler = function() {
this.invalidate(new I(I.LIGHT_UPDATE))
}, h.prototype.visibilityChangeHandler = function() {
this.setSelectedSource(), this.invalidate(new I(I.LIGHT_UPDATE))
}, h.prototype.updateAllPaneViews = function() {
var t, e;
for (t = 0; t < this.m_panes.length; t++) e = this.m_panes[t], e.updateAllViews()
}, h.prototype.mainSeries = function() {
return this.m_mainSeries
}, h.prototype.timeScale = function() {
return this.m_timeScale
}, h.prototype.panes = function() {
return this.m_panes
}, h.prototype.gridSource = function() {
return this.m_gridSource
}, h.prototype.watermarkSource = function() {
return this.m_watermarkSource
}, h.prototype.brandingSource = function() {
return this._brandingSource
}, h.prototype.crossHairSource = function() {
return this.m_crossHairSource
}, h.prototype.barsMarksSources = function() {
return this._barsMarksSources
}, h.prototype.width = function() {
return this.m_width
}, h.prototype.setPaneHeight = function(t, e) {
t.setHeight(e), this.recalculateAllPanes(), this.invalidate(new I(I.LIGHT_UPDATE))
},
h.prototype.setWidth = function(t) {
var e, i;
for (this.m_width = t, this.m_timeScale.setWidth(this.m_width), e = 0; e < this.m_panes
.length; ++e) i = this.m_panes[e], i.setWidth(t);
this.recalculateAllPanes(), this.recalcVisibleRangeStudy(this.dataSources())
}, h.prototype.createPane = function(t, e) {
var i, o;
if (this._undoModel._chartWidget.isMaximizedPane() && this._undoModel._chartWidget
.toggleMaximizePane(), i = this._properties.paneProperties, e && i.merge(e), o =
new y(this.m_timeScale, i, this), "number" == typeof t && isFinite(t)) {
if (t < 0 || t > this.m_panes.length) return void j.logDebug(
"ChartModel.createPane: invalid index: " + t);
this.m_panes.splice(t, 0, o)
} else this.m_panes.push(o);
return o.onTagsChanged().subscribe(this, h.prototype.onPaneTagsChanged), o
}, h.prototype.removePane = function(t) {
this._undoModel._chartWidget.isMaximizedPane() && this._undoModel._chartWidget
.toggleMaximizePane(), t.destroy();
var e = this.m_panes.indexOf(t); - 1 !== e && this.m_panes.splice(e, 1), this
.invalidate(new I(I.FULL_UPDATE))
}, h.prototype.startScalePrice = function(t, e, i) {
t.startScalePrice(e, i)
}, h.prototype.scalePriceTo = function(t, e, i) {
t.scalePriceTo(e, i), this.mainSeries().priceScale().isLockScale() ? this.invalidate(
new I(I.LIGHT_UPDATE)) : this.invalidate(this._paneInvalidationMask(t, I
.LIGHT_UPDATE))
}, h.prototype.endScalePrice = function(t, e) {
t.endScalePrice(e), this.invalidate(this._paneInvalidationMask(t, I.LIGHT_UPDATE))
}, h.prototype.startScrollPrice = function(t, e, i) {
t.startScrollPrice(e, i)
}, h.prototype.scrollPriceTo = function(t, e, i) {
t.scrollPriceTo(e, i), this.invalidate(this._paneInvalidationMask(t, I.LIGHT_UPDATE))
}, h.prototype.endScrollPrice = function(t, e) {
t.endScrollPrice(e), this.invalidate(this._paneInvalidationMask(t, I.LIGHT_UPDATE))
}, h.prototype.setPriceAutoScale = function(t, e, i) {
t.setPriceAutoScale(e, i), this.invalidate(this._paneInvalidationMask(t, I
.LIGHT_UPDATE))
}, h.prototype.restorePriceScaleState = function(t, e, i) {
t.restorePriceScaleState(e, i), this.invalidate(this._paneInvalidationMask(t, I
.LIGHT_UPDATE))
}, h.prototype.resetPriceScale = function(t, e) {
t.resetPriceScale(e), this.invalidate(this._paneInvalidationMask(t, I.LIGHT_UPDATE))
}, h.prototype.updateScales = function(t, e) {
this._undoModel._chartWidget._updateScalesActions()
}, h.prototype.startScaleTime = function(t) {
this.m_timeScale.startScale(t)
}, h.prototype.mainSeriesScaleRatioProperty = function() {
return this._mainSeriesScaleRatioProperty
}, h.prototype.mainSeriesScaleRatioPropertyOnChanged = function() {
this._mainSeriesScaleRatioProperty.listeners().fire(this._mainSeriesScaleRatioProperty)
}, h.prototype._mainSeriesPriceScaleName = function() {
var t = this.paneForSource(this.m_mainSeries);
return t.priceScaleName(t.priceScaleForSource(this.m_mainSeries))
}, h.prototype.mainSeriesScaleRatio = function() {
var t = this.paneForSource(this.m_mainSeries);
return "left" === this._mainSeriesPriceScaleName() ? t.leftPriceScaleRatio() : t
.rightPriceScaleRatio()
}, h.prototype.setMainSeriesScaleRatio = function(t) {
var e = this.paneForSource(this.m_mainSeries);
"left" === this._mainSeriesPriceScaleName() ? e.applyLeftPriceScaleRatio(t) : e
.applyRightPriceScaleRatio(t)
},
h.prototype.scaleTimeTo = function(t) {
this.m_timeScale.scaleTo(t), this.recalculateAllPanes(), this.invalidate(new I(I
.LIGHT_UPDATE))
}, h.prototype.endScaleTime = function() {
this.m_timeScale.endScale(), this.invalidate(new I(I.LIGHT_UPDATE)), this.mainSeries()
.requestMoreData(), this.recalcVisibleRangeStudy(this.dataSources())
}, h.prototype.startScrollTime = function(t) {
this.m_timeScale.startScroll(t), this._isTimeScrolling = !0
}, h.prototype.scrollTimeTo = function(t) {
this.m_timeScale.scrollTo(t), this.recalculateAllPanes(), this.updateCrossHair(), this
.invalidate(new I(I.LIGHT_UPDATE))
}, h.prototype.endScrollTime = function() {
this.m_timeScale.endScroll(), this.invalidate(new I(I.LIGHT_UPDATE)), this.mainSeries()
.requestMoreData(), this.recalcVisibleRangeStudy(this.dataSources()), this
._isTimeScrolling = !1
}, h.prototype.recalcStudyBasedLineTools = function() {
this.dataSources().forEach(function(t) {
t instanceof O && t.recalcStudyIfNeeded && t.recalcStudyIfNeeded()
})
}, h.prototype.recalcVisibleRangeStudy = function(t, e) {
void 0 !== this._recalcVRTimerId && clearTimeout(this._recalcVRTimerId);
var i = this;
this._recalcVRTimerId = setTimeout(function() {
i._recalcVisibleRangeStudy(t, e)
}, 1e3)
}, h.prototype._recalcVisibleRangeStudy = function(t, e) {
var i, o, n, r, a, l, c, h, u, d, p, _, f, m, g, v;
if (!this.timeScale().isEmpty() && (i = this.timeScale().visibleBars(), o = this
.mainSeries().nearestData(i.firstBar(), B.NearestRight), n = this.mainSeries()
.nearestData(i.lastBar(), B.NearestLeft), r = this.mainSeries().bars()
.lastIndex(), a = o ? o.index : void 0, l = n ? n.index : void 0, c = a === this
._oldStartVisibleIndex, h = l === this._oldEndVisibleIndex, !c || !h || e))
for (this._oldStartVisibleIndex = a, this._oldEndVisibleIndex = l, u = {
first_visible_bar_time: 1e3 * Math.floor(o && o.value ? o.value[TradingView
.TIME_PLOT] : 0),
last_visible_bar_time: 1e3 * Math.floor(n && n.value ? n.value[TradingView
.TIME_PLOT] : 0),
subscribeRealtime: n && n.index === r
}, d = 0; d < t.length; d++)
if (s(t[d])) {
for (p = t[d], _ = p.metaInfo().inputs, f = [], m = 0; m < _.length; m++) u
.hasOwnProperty(_[m].id) && f.push(_[m].id);
for (g = p.properties().inputs, m = 0; m < f.length; m++) v = f[m], g[v]
.setValueSilently(u[v]);
f.length > 0 && g.listeners().fire(g)
}
}, h.prototype.onResetScales = function() {
return this._resetScales
}, h.prototype.resetTimeScale = function() {
this.m_timeScale.restoreDefault(), this.recalculateAllPanes(), this.mainSeries()
.requestMoreData(), this.recalcVisibleRangeStudy(this.dataSources()), this
.updateCrossHair(), this.invalidate(new I(I.LIGHT_UPDATE)), this._resetScales.fire()
}, h.prototype.restoreTimeScaleState = function(t) {
this.m_timeScale.restoreState(t), this.recalculateAllPanes(), this.updateCrossHair(),
this.invalidate(new I(I.LIGHT_UPDATE))
}, h.prototype.restoreFactoryDefaults = function(t) {
t.restoreFactoryDefaults(), this.recalcVisibleRangeStudy(this.dataSources(), !0), this
.mainSeries().onChartStyleChanged()
}, h.prototype.restoreDefaults = function(t) {
t.restoreDefaults(), this.recalcVisibleRangeStudy(this.dataSources(), !0), this
.mainSeries().onChartStyleChanged()
}, h.prototype.setSelectedSource = function(t, e) {
if (!(this.m_selectedSource === t && this._lastHittestData === e || t && t
.customization && t.customization.disableSelection)) {
this._lastHittestData = e;
var i = new I;
this.m_selectedSource && (this.m_selectedSource.updateAllViews(), TradingView
.alertsDispatcher && this.m_selectedSource.hasAlert.value() && this
.m_selectedSource.getAlert({
fromCache: !0
}).done(function(t) {
t && t.set("selected", !1)
})), this.m_selectedSource = t, this._selectedSourceChanged.fire(t), t && (t
.updateAllViews(), TradingView.alertsDispatcher && t.hasAlert.value() && t
.getAlert({
fromCache: !0
}).done(function(t) {
t && t.set("selected", !0)
})), i.force = !0, this.invalidate(new I(I.LIGHT_UPDATE)), this
.setHoveredSource(t, e)
}
}, h.prototype.checkLineToolSelection = function() {
this.m_selectedSource && this.m_selectedSource instanceof g && (this.m_selectedSource
.calcIsActualSymbol(), this.m_selectedSource.isActualSymbol() || this
.setSelectedSource(null))
}, h.prototype.onSelectedSourceChanged = function() {
return this._selectedSourceChanged
}, h.prototype.setHoveredSource = function(t, e) {
if (this.m_hoveredSource !== t || this._lastHittestData !== e) {
this._lastHittestData = e;
var i = null;
this.m_hoveredSource && (this.m_hoveredSource.updateAllViews(), i || (i = new I),
TradingView.alertsDispatcher && this.m_hoveredSource.hasAlert.value() &&
this.m_hoveredSource.getAlert({
fromCache: !0
}).done(function(t) {
t && t.set("hovered", !1)
}), i.merge(this._paneInvalidationMask(this.paneForSource(this
.m_hoveredSource), I.LIGHT_UPDATE))), this.m_hoveredSource = t, t && (t
.updateAllViews(), i || (i = new I), i.merge(this._paneInvalidationMask(this
.paneForSource(t), I.LIGHT_UPDATE)), TradingView.alertsDispatcher && t
.hasAlert.value() && t.getAlert({
fromCache: !0
}).done(function(t) {
t && t.set("hovered", !0)
})), i && this.invalidate(i)
}
}, h.prototype.selectedSource = function() {
return this.m_selectedSource
}, h.prototype.hoveredSource = function() {
return this.m_hoveredSource
}, h.prototype.lastHittestData = function() {
return this._lastHittestData
}, h.prototype.invalidate = function(t) {
this._invalidateHandler && this._invalidateHandler(t)
}, h.prototype.dataSources = function() {
var t, e, i, o = [];
for (o.push(this.m_crossHairSource), t = 0; t < this.m_panes.length; ++t)
for (e = this.m_panes[t].dataSources(), i = 0; i < e.length; i++) o.push(e[i]);
return o
}, h.prototype.orderedDataSources = function(t) {
var e, i, o = [];
for (o.push(this.m_crossHairSource), e = 0; e < this.m_panes.length; e++) i = this
.m_panes[e].orderedSources().slice(), t && i.reverse(), o = o.concat(i);
return o
}, h.prototype.dataSourceForId = function(t) {
var e, i;
for (i = 0; i < this.m_panes.length; ++i)
if (e = this.m_panes[i].dataSourceForId(t)) return e;
return null
}, h.prototype.children = function(t, e) {
return this.dataSources().filter(function(i) {
return (!0 !== e || !s(i) || !i.isChildStudy()) && i.ownerSource() === t
})
}, h.prototype.setAndSaveCurrentPosition = function(t, e, i, o) {
this.m_crossHairSource.saveOriginCoord(t, e), this.setCurrentPosition(t, e, i, o)
}, h.prototype.setCurrentPosition = function(t, e, i, o) {
var n, r, s, a, l, c, h, u, d, p, _, f, m, v = NaN,
y = Math.round(this.m_timeScale.coordinateToIndex(t));
if (i && (n = i.defaultPriceScale(), n.isEmpty() || (v = n.coordinateToPrice(e))),
(this._lineBeingCreated || g.isLineTool(this.currentTool())) && (v = this._magnet
.align(v, y, i)), this._isTimeScrolling) return void this.m_crossHairSource
.setPosition(this.m_crossHairSource.index, v, i);
for (this.m_crossHairSource.setOnHoveredChartWidget(!0), this.m_crossHairSource
.setPosition(y, v, i), this.m_crossHairSource.dataWindowView().update(), r = this
.m_panes, s = r.length; s--;)
for (a = r[s].dataSources(), l = a.length; l--;)(c = a[l].dataWindowView()) && c
.update();
this._lineBeingCreated ? (this._lineBeingCreated.setLastPoint({
index: y,
price: v
}, o), this._lineBeingCreated.updateAllViews(), this.invalidate(new I(I
.LIGHT_UPDATE))) : this.crossHairSource().startMeasurePoint() ? this.invalidate(
new I(I.LIGHT_UPDATE)) : this.invalidate(new I(I.UPDATE_CURSOR_ONLY)), this
._isSettingsExternalPosition || (h = this._undoModel._chartWidget, h
._chartWidgetCollection && (u = this.mainSeries(), (d = u.syncModel()) && (p =
this.m_timeScale.points().roughTime(y, d.projectTime.bind(d)), _ = {
timeStamp: p
}, f = i.mainDataSource(), f instanceof z && (_.price = v, _.symbol = f
.symbol()), _.syncModel = d, m = this._lineBeingCreated || this
._linePointBeingEdited || this._sourceBeingMoved, m = m && F
.drawOnAllCharts().value(), h._chartWidgetCollection.syncCrosshair(_, h,
m, o))))
}, h.prototype.clearCurrentPosition = function() {
var t, e, i, o, n, r, s = this.crossHairSource();
for (s.clearPosition(), s.dataWindowView().update(), t = this.m_panes, e = t
.length; e--;)
for (i = t[e].dataSources(), o = i.length; o--;)(n = i[o].dataWindowView()) && n
.update();
this.invalidate(new I(I.UPDATE_CURSOR_ONLY)), r = this._undoModel._chartWidget, r
._chartWidgetCollection && r._chartWidgetCollection.syncCrosshair(NaN, r)
}, h.prototype.onSyncScrollNeeded = function(t) {
var e, i, o, n = this._undoModel._chartWidget;
n._chartWidgetCollection && (e = this.mainSeries(), (i = e.syncModel()) && (o = 1e3 *
this.m_timeScale.points().roughTime(t, i.projectTime.bind(i)), n
._chartWidgetCollection.syncScroll(o, this)))
}, h.prototype.gotoTime = function(t, e) {
function i() {
return p.tickMarks().indexToTime(p.tickMarks().minIndex).valueOf() - t
}
function o(e) {
var o, n, r, s, a;
if (i() < 0) {
for (o = p.tickMarks().nearestIndex(t), n = u(_.bars().lastIndex()), o = Math
.min(o, n), r = p.tickMarks().indexToTime(o).valueOf(); r < t && o < n;)
o++, r = p.tickMarks().indexToTime(o).valueOf();
return s = p.visibleBars(), a = s.lastBar() - s.firstBar(), !e && s.contains(
o) || (p.zoomToBarsRange(o - a / 2, o + a / 2), _.requestMoreData()), {
timestamp: p.indexToTimePoint(o)
}
}
}
var n, r, s, a, l, c, h, d, p = this.timeScale(),
_ = this.mainSeries();
if (e && e.model && (n = _.syncModel()) && (r = this._createSyncPoint(e.model
.mainSeries().syncModel(), n), t = 1e3 * r.sourceTimeToTargetTime(t / 1e3)), e =
e || {
centerIfVisible: !0
}, t) this._scrollingState && this._scrollingState.deferred.reject(), s = $
.Deferred(), this._scrollingState = {
targetDate: t,
deferred: s,
centerIfVisible: e.centerIfVisible
};
else {
if (!this._scrollingState) return j.logError("scrollTo called without an argument"),
$.Deferred().reject().promise();
t = this._scrollingState.targetDate, s = this._scrollingState.deferred
}
return a = o(this._scrollingState.centerIfVisible), a || (l = p.tickMarks().minIndex,
c = p.visibleBars(), h = c.lastBar() - c.firstBar(),
_.endOfData() ? (p.zoomToBarsRange(l - h / 2, l + h / 2), a = {
timestamp: p.indexToTimePoint(l),
eod: !0
}) : (d = this.timeScale().tickMarks().estimateLeft(t), _.requestMoreData(Math
.ceil(d + h / 2)))), a && (this.fullUpdate(), this._scrollingState = null, s
.resolve(a)), s.promise()
}, h.prototype._createSyncPoint = function(t, e) {
var i, o, n = this._syncPointCache[t.uniqueId()];
if (n) {
if (i = n[e.uniqueId()]) return i
} else this._syncPointCache[t.uniqueId()] = {};
return o = new W(t, e), this._syncPointCache[t.uniqueId()][e.uniqueId()] = o, o
}, h.prototype.setExternalPosition = function(t, e) {
var i, o, n, r, s, a, l, c, h, u, d, p = this.crossHairSource();
if (p.setOnHoveredChartWidget(!1), !Number.isNaN(t) && isNumber(t.timeStamp) && (o =
this.mainSeries(), (n = o.syncModel()) && (r = this._createSyncPoint(t
.syncModel, n), s = r.sourceTimeToTargetTime(t.timeStamp), i = this
.m_timeScale.points().roughIndex(s, n.distance.bind(n)))), this.mainSeries()
.symbol() === t.symbol) return this._isSettingsExternalPosition = !0, a = this
.paneForSource(this.mainSeries()), l = this.m_timeScale.indexToCoordinate(i),
c = this.mainSeries().priceScale().priceToCoordinate(t.price, !0), this
.setCurrentPosition(l, c, a, e || {}), p.setOnHoveredChartWidget(!1),
void delete this._isSettingsExternalPosition;
for (isFinite(i) ? p.setPosition(i, NaN, null) : (p.clearPosition(), p.dataWindowView()
.update()), h = this.dataSources(), u = h.length; u--;)(d = h[u]
.dataWindowView()) && d.update();
this.invalidate(new I(I.UPDATE_CURSOR_ONLY))
}, h.prototype.updateCrossHair = function() {
this.m_crossHairSource.update()
}, h.prototype.updateTimeScale = function(t, e, i, o, n, r) {
var s, a, l;
if (r)
for (this.m_timeScale.reset(), s = this.dataSources(), a = 0; a < s.length; a++) s[
a].clearData && s[a].clearData();
if (o.length > 0)
for (s = this.dataSources(), a = 0; a < s.length; a++) s[a].moveData && s[a]
.moveData(o);
this.m_timeScale.update(t, e, i, n), l = "ChartModel.prototype.updateTimeScale(" + t +
"," + e + "," + i.length + "," + o.length + "," + n.length + "," + r + ")", l +=
"TimeScale: {first:" + this.m_timeScale.m_points.firstIndex() + ",last:" + this
.m_timeScale.m_points.lastIndex() + "}", j.logDebug(l), this.recalculateAllPanes(),
this.invalidate(new I(I.LIGHT_UPDATE))
}, h.prototype.updateTimeScaleBaseIndex = function(t) {
var e, i, o, n, r, s, a = this.mainSeries().bars();
a.isEmpty() || (e = this.timeScale(), i = e.baseIndex(), o = u(a.lastIndex()), n = e
.visibleBars(), null !== n && (r = n.contains(i), t && t.earliestRow.index >
0 && !r && (s = o - i, e.setRightOffset(e.rightOffset() - s))), e
.setBaseIndex(o))
}, h.prototype.recalculatePane = function(t) {
t && t.recalculate()
}, h.prototype.paneForSource = function(t) {
for (var e = this.m_panes.length - 1; e >= 0; e--)
if (-1 !== this.m_panes[e].dataSources().indexOf(t)) return this.m_panes[e];
return t instanceof x ? this.paneForSource(this.m_mainSeries) : null
}, h.prototype.recalculateAllPanes = function() {
for (var t = 0; t < this.m_panes.length; ++t) this.m_panes[t].recalculate();
this.updateAllPaneViews()
}, h.prototype._invalidateBarColorerCaches = function() {
var t, e, i = this.dataSources();
for (t = 0; t < i.length; ++t)(e = i[t]) instanceof z && e.invalidateBarColorerCache()
}, h.prototype.addStrategySource = function(t) {
~this.strategySources.indexOf(t) || (this.strategySources.push(t), this.strategySources
.change.fire())
},
h.prototype.removeStrategySource = function(t) {
var e = this.strategySources.indexOf(t);
~e && (this.strategySources.splice(e, 1), this.strategySources.change.fire())
}, h.prototype.setActiveStrategySource = function(t) {
~this.strategySources.indexOf(t) && this._activeStrategySource.setValue(t)
}, h.prototype.unsetActiveStrategySource = function() {
this._activeStrategySource.setValue(null)
}, h.prototype.activeStrategySource = function() {
return this._activeStrategySource
}, h.prototype.insertStudy = function(t, e, i, o, n) {
var r, s, a, l;
return null !== o && void 0 !== o || (o = this.mainSeries()), r = [
"Study_ESD$TV_SPLITS@tv-scripting", "Study_ESD$TV_DIVIDENDS@tv-scripting",
"Study_ESD$TV_SPLITS@tv-scripting", "Volume@tv-basicstudies",
"Sessions@tv-basicstudies"
], -1 === r.indexOf(t.id) && H("studies", "Study_" + t.id), s = null, i || t
.is_price_study ? s = this.paneForSource(o) : (s = this.createPane(), e && e
.paneSize && s.setPaneSize(e.paneSize)), "Compare@tv-basicstudies" === t.id && (
H("compare", "symbol:" + e.inputs.symbol), this.m_mainSeries.priceScale()
.properties().log.setValue(!1), this.m_mainSeries.priceScale().properties()
.percentage.setValue(!0)), a = E(t, e, s, this.studyVersioning(), o), l = M(
this, a, o, t), this._recalcVisibleRangeStudy([l], !0), l.start(), l
.childStudyByRebind().subscribe(null, function() {
H("SOS", "Apply SOS", "Rebind SOS")
}), s.addDataSource(l, c(s, o, l.metaInfo(), i, n)), l.properties()
.linkedToSeries && l.properties().linkedToSeries.value() && l.setOwnerSource(this
.mainSeries()), this.recalculatePane(s), this.invalidate(new I(I.FULL_UPDATE)),
this._invalidateBarColorerCaches(), this.recalcVisibleRangeStudy(this.dataSources(),
!0), this._studyInserted.fire(l), l
}, h.prototype.studyInserted = function() {
return this._studyInserted
}, h.prototype.replaceStudyStub = function(t, e) {
var i, o, n, r = this.paneForSource(t);
return null !== r && (i = t.isNoScale() ? null : t.priceScale(), o = t.zorder(), n = t
.ownerSource(), r.insertDataSource(e, i, o), e.setOwnerSource(n), this.panes()
.forEach(function(i) {
i.dataSources().forEach(function(i) {
i._ownerSource === t && i.setOwnerSource(e)
})
}), this.removeSource(t), e.start(), this.recalculatePane(r), this.invalidate(
new I(I.FULL_UPDATE)), !0)
}, h.prototype.insertStudyStub = function(t) {
var e = this.mainSeries(),
i = this.paneForSource(e),
o = new V(this, null, t);
return i.addDataSource(o, null), this.recalculatePane(i), this.invalidate(new I(I
.FULL_UPDATE)), o
}, h.prototype.removeStudyStub = function(t) {
var e = this.dataSourceForId(t);
return void 0 === e ? (j.logNormal("StudyStub id=" + t +
" is not found in chart model"), !1) : (this.removeSource(e), !0)
}, h.prototype.detachSource = function(t, e) {
var i = this.paneForSource(t);
if (i) return i.removeDataSource(t), i.isEmpty() ? (this._lineBeingCreated && i === this
._paneBeingCreatedLineOn && this.cancelCreatingLine(), this.removePane(i,
e), !0) : (this.invalidate(new I(I.FULL_UPDATE)), this._alertsList &&
this
._alertsList.trigger("reset"), !1)
}, h.prototype.removeSource = function(t, e) {
var i, o, n, r;
if (t === this.m_selectedSource && this.setSelectedSource(null), t === this
._sourceBeingMoved && (this._sourceBeingMoved = null, this._linePointBeingMoved =
null), t.stop && t.stop(), i = this.detachSource(t, e),
t.metaInfo && t.metaInfo() && "Compare@tv-basicstudies" === t.metaInfo().id) {
for (o = this.paneForSource(this.m_mainSeries), n = o.dataSources(), r = 0; r < n
.length; r++)
if (n[r].metaInfo && "Compare@tv-basicstudies" === n[r].metaInfo().id) return;
this.m_mainSeries.priceScale().properties().percentage.setValue(!1)
}
return this.invalidate(new I(I.FULL_UPDATE)), this._invalidateBarColorerCaches(), t
.linkKey && F.removeLineTool({
model: this,
linkKey: t.linkKey
}), s(t) && t.isChildStudy() && t.source().unsetChild(t), t.destroy && t.destroy(),
i
}, h.prototype._isStudyOrMainSeries = function(t) {
return TradingView.isInherited(t.constructor, A) || t === this.m_mainSeries
}, h.prototype.isMergeUpAvailableForSource = function(t) {
return !!this._isStudyOrMainSeries(t) && this.paneForSource(t) !== this.panes()[0]
}, h.prototype.mergeSourceUp = function(t) {
var e, i, o, n;
this.isMergeUpAvailableForSource(t) && (e = this.paneForSource(t), i = this.panes()
.indexOf(e), o = this.panes()[i - 1], n = o.findSuitableScale(t), this.move(t,
o, n))
}, h.prototype.isMergeDownAvailableForSource = function(t) {
var e, i;
return !!this._isStudyOrMainSeries(t) && (e = this.paneForSource(t), i = this.panes(),
e !== i[i.length - 1])
}, h.prototype.mergeSourceDown = function(t) {
var e, i, o, n;
this.isMergeDownAvailableForSource(t) && (e = this.paneForSource(t), i = this.panes()
.indexOf(e), o = this.panes()[i + 1], n = o.findSuitableScale(t), this.move(t,
o, n))
}, h.prototype.isUnmergeAvailableForSource = function(t) {
var e, i;
return !!this._isStudyOrMainSeries(t) && (e = this.paneForSource(t), i = e.dataSources()
.filter(function(t) {
return TradingView.isInherited(t.constructor, L) && t.showInObjectTree()
}), i.length > 1)
}, h.prototype.unmergeSourceUp = function(t) {
var e, i, o, n;
this.isUnmergeAvailableForSource(t) && (e = this.paneForSource(t), i = this.panes()
.indexOf(e), o = this.createPane(i), n = o.findSuitableScale(t), this.move(t, o,
n))
}, h.prototype.unmergeSourceDown = function(t) {
var e, i, o, n;
this.isUnmergeAvailableForSource(t) && (e = this.paneForSource(t), i = this.panes()
.indexOf(e), o = this.createPane(i + 1), n = o.findSuitableScale(t), this.move(
t, o, n))
}, h.prototype.isLeftPriceScaleVisible = function() {
return this._properties.scalesProperties.showLeftScale.value()
}, h.prototype.isRightPriceScaleVisible = function() {
return this._properties.scalesProperties.showRightScale.value()
}, h.prototype.setLeftPriceScaleVisible = function(t) {
this._properties.scalesProperties.showLeftScale.value() !== t && this._properties
.scalesProperties.showLeftScale.setValue(t)
}, h.prototype.setRightPriceScaleVisible = function(t) {
this._properties.scalesProperties.showRightScale.value() !== t && this._properties
.scalesProperties.showRightScale.setValue(t)
}, h.prototype.setPriceScaleVisibility = function(t, e) {
"left" === t && this.setLeftPriceScaleVisible(e), "right" === t && this
.setRightPriceScaleVisible(e)
}, h.prototype.move = function(t, e, i) {
var o, n, r, s, a = this.children(t, !0),
l = this.paneForSource(t),
c = e ? e.priceScaleName(i) : "right";
if (l === e) {
for (o = e.priceScaleByName(c), n = 0; n < a.length; n++) e.move(a[n], o);
e.move(t, o)
} else {
for (r = e || this.createPane(), s = r.priceScaleByName(c), n = 0; n < a
.length; n++) this.detachSource(a[n]);
for (n = 0; n < a.length; n++) r.addDataSource(a[n], s);
this.detachSource(t),
r.addDataSource(t, s)
}
this._alertsList && this._alertsList.trigger("reset"), this.invalidate(new I(I
.FULL_UPDATE))
}, h.prototype.isSingleInstanceLineTool = function(t) {
return "LineStudyMtpRiskReward" === t || "LineStudyMtpAnalysis" === t
}, h.prototype._externalTimeStamp = function(t) {
var e = this.mainSeries().syncModel();
return this.m_timeScale.points().roughTime(t, e && e.projectTime.bind(e))
}, h.prototype.createLineTool = function(t, e, i, o, n) {
var r, s, a, l, c, h, u, p, _, f, g;
return m.isValid(i) ? (this.isSingleInstanceLineTool(i) && this._undoModel
.removeAllDrawingTools(i), "LineToolExecution" !== i && H("drawings",
"Study_Drawing_" + i), o && (r = o.state(), s = TradingView.factoryDefaults(
"linetool"), a = i.toLowerCase(), TradingView.merge(s, TradingView
.factoryDefaults(a)), o = TradingView[i].prototype
.createPropertiesObject(a, s), o.merge(r)), l = m.create(i, this, o, null, t
.mainDataSource()), o || (o = l.properties()), c = !l.linkKey && !n, F
.drawOnAllCharts().value() ? l.linkKey = n || U.randomHash() : l.linkKey = n, l
.toolname = i, l.setOwnerSource(t.mainDataSource()), h = t.defaultPriceScale(),
t.addDataSource(l, h), p = this.m_timeScale.indexToCoordinate(e.index), _ = h
.priceToCoordinate(e.price), l.isFixed() ? u = l.addFixedPoint(new d(p, _)) : (
f = l.constructor, f.skipMagnetting || (e.price = this._magnet.align(e
.price, e.index, t)), u = l.addPoint(e)), u || (this._lineBeingCreated =
l, this._paneBeingCreatedLineOn = t), c && l
.enableCurrentIntervalVisibility(), this.invalidate(new I(I.FULL_UPDATE)), n ||
!F.drawOnAllCharts().value() || l.properties().singleChartOnly || (g = this
._externalTimeStamp(e.index), F.createLineTool({
point: {
price: e.price,
timeStamp: g
},
linetool: i,
properties: o,
symbol: this.mainSeries().symbol(),
model: this,
linkKey: l.linkKey
})), l) : null
}, h.prototype.lineBeingCreated = function() {
return this._lineBeingCreated
}, h.prototype.paneBeingCreatedLineOn = function() {
return this._paneBeingCreatedLineOn
}, h.prototype.coninueCreatingLine = function(t, e, i, o) {
var n, r, s, a, l, c = this.paneForSource(this._lineBeingCreated);
return t.price = this._magnet.align(t.price, t.index, c), n = this._lineBeingCreated
.addPoint(t, e, i), r = this._lineBeingCreated, this._lineBeingCreated
.updateAllViews(), s = new I(I.LIGHT_UPDATE), a = null, n && (a = {
points: this._lineBeingCreated._timePoint,
interval: this.mainSeries().interval()
}, this._paneBeingCreatedLineOn = null, this._lineBeingCreated = null, s
.force = !0), this.invalidate(s), o || !F.drawOnAllCharts().value() || r
.properties().singleChartOnly || (l = this._externalTimeStamp(t.index), F
.continueLineTool({
point: {
price: t.price,
timeStamp: l
},
envState: e,
finalState: a,
model: this
})), n
}, h.prototype.cancelCreatingLine = function() {
if (this._lineBeingCreated) {
var t = this._lineBeingCreated;
this.removeSource(this._lineBeingCreated), this._lineBeingCreated = null, this
._lineCancelled.fire(), F.drawOnAllCharts().value() && !t.properties()
.singleChartOnly && F.cancelLineTool({
model: this
})
}
}, h.prototype.startChangingLinetool = function(t, e, i, o) {
var n, r, s;
this._lineBeingEdited = t, this._linePointBeingEdited = i, this._lineBeingEdited
.startChanging(i, e), n = this.paneForSource(t), e.price = this._magnet.align(e
.price, e.index, n),
this._lineBeingEdited.startDragPoint && this._lineBeingEdited.startDragPoint(i, e),
this._lineBeingEdited.setPoint(i, e, o), this._lineBeingEdited.updateAllViews(), r =
this._paneInvalidationMask(n, I.LIGHT_UPDATE), r.force = !0, this.invalidate(r), t
.linkKey && !t.properties().singleChartOnly && (s = this._externalTimeStamp(e
.index), F.startChangingLineTool({
linkKey: t.linkKey,
model: this,
symbol: this.mainSeries().symbol(),
point: {
price: e.price,
timeStamp: s
},
pointIndex: i,
envState: o
}))
}, h.prototype.lineBeingEdited = function() {
return this._lineBeingEdited
}, h.prototype.linePointBeingEdited = function() {
return this._linePointBeingEdited
}, h.prototype.changeLinePoint = function(t, e) {
var i, o, n, r, s = this.paneForSource(this._lineBeingEdited);
void 0 !== t.x && void 0 !== t.y ? (n = this._lineBeingEdited.priceScale(), i = n
.coordinateToPrice(t.y), o = Math.round(this.timeScale().coordinateToIndex(t
.x)), i = this._magnet.align(i, o, s), this._lineBeingEdited.setPoint(this
._linePointBeingEdited, {
price: i,
index: o
}, e)) : this._lineBeingEdited.setPoint(this._linePointBeingEdited, t, e),
this._lineBeingEdited.updateAllViews(), this.invalidate(new I(I.LIGHT_UPDATE)), this
._lineBeingEdited.linkKey && !this._lineBeingEdited.properties().singleChartOnly &&
(r = this._externalTimeStamp(o), F.changeLineTool({
linkKey: this._lineBeingEdited.linkKey,
model: this,
symbol: this.mainSeries().symbol(),
point: {
price: i,
timeStamp: r
},
envState: e
}))
}, h.prototype.endChangingLinetool = function(t) {
var e, i, o = this._lineBeingEdited;
this._lineBeingEdited.endChanging(!1, t), this._lineBeingEdited = null, this
._linePointBeingEdited = null, e = new I(I.LIGHT_UPDATE), e.force = !0, this
.invalidate(e), i = {
points: o._timePoint,
interval: this.mainSeries().interval()
}, o.linkKey && !o.properties().singleChartOnly && F.finishChangingLineTool({
model: this,
linkKey: o.linkKey,
symbol: this.mainSeries().symbol(),
finalState: i
})
}, h.prototype.startMovingSource = function(t, e, i) {
var o, n, r;
this._sourceBeingMoved = t, this._linePointBeingMoved = i, this._sourceBeingMoved
.startMoving(e, i), o = this.paneForSource(this._sourceBeingMoved), n = this
._paneInvalidationMask(o, I.LIGHT_UPDATE), n.force = !0, this.invalidate(n), t
.linkKey && !t.properties().singleChartOnly && (r = this._externalTimeStamp(e
.index), F.startMovingLineTool({
linkKey: t.linkKey,
model: this,
symbol: this.mainSeries().symbol(),
point: {
price: e.price,
timeStamp: r
}
}))
}, h.prototype.sourceBeingMoved = function() {
return this._sourceBeingMoved
}, h.prototype.moveSource = function(t) {
if (this._sourceBeingMoved.move(t, this._linePointBeingMoved), this.invalidate(new I(I
.LIGHT_UPDATE)), this._sourceBeingMoved.linkKey && !this._sourceBeingMoved
.properties().singleChartOnly) {
var e = this._externalTimeStamp(t.index);
F.moveLineTool({
linkKey: this._sourceBeingMoved.linkKey,
model: this,
point: {
price: t.price,
timeStamp: e
}
})
}
}, h.prototype.endMovingSource = function(t) {
var e, i, o = this._sourceBeingMoved,
n = this.paneForSource(this._sourceBeingMoved);
this._sourceBeingMoved.endMoving(t), this._sourceBeingMoved = null, this
._linePointBeingMoved = null, e = this._paneInvalidationMask(n, I.LIGHT_UPDATE), e
.invalidateAll(I.LIGHT_UPDATE), e.force = !0, this.invalidate(e), o instanceof g &&
(i = {
points: o._timePoint,
interval: this.mainSeries().interval()
}, o.linkKey && !o.properties().singleChartOnly && F.finishMovingLineTool({
linkKey: o.linkKey,
model: this,
finalState: i
}))
}, h.prototype.finishLineTool = function(t) {
var e = this.lineBeingCreated();
e && (e.finish && e.finish(), !t && F.drawOnAllCharts().value() && e.linkKey && !e
.properties().singleChartOnly && F.finishLineTool({
linkKey: e.linkKey,
model: this
}))
}, h.prototype.calculateDefaultTags = function() {
var t, e, i = [],
o = this.dataSources();
for (t = 0; t < o.length; t++) e = o[t], e.tags && (i = i.concat(e.tags()));
return i
}, h.prototype.changeZOrder = function(t, e) {
this.paneForSource(t).changeZOrder(t, e), this.invalidate(new I(I.FULL_UPDATE))
}, h.prototype.sendToBack = function(t) {
this.paneForSource(t).sendToBack(t), this.invalidate(new I(I.FULL_UPDATE))
}, h.prototype.bringToFront = function(t) {
this.paneForSource(t).bringToFront(t), this.invalidate(new I(I.FULL_UPDATE))
}, h.prototype.onTagsChanged = function() {
return this._tagsChanged
}, h.prototype.onPaneTagsChanged = function() {
this._tagsChanged.fire()
}, h.prototype.setTimeViewport = function(t, e) {
this.timeScale().zoomToBarsRange(t, e), this.recalculateAllPanes(), this.invalidate(
new I(I.LIGHT_UPDATE))
}, h.prototype.zoomToViewport = function(t, e, i, o, r) {
var s, a, l;
this.setTimeViewport(t, e), s = Math.min(i, o), a = Math.max(i, o), l = r
.defaultPriceScale(), l.setAutoScale(!1), l.isLog() && (s = l.priceToLogical(s), a =
l.priceToLogical(a)), l.setPriceRange(new n(s, a)), this.recalculateAllPanes(),
this.invalidate(this._paneInvalidationMask(r, I.LIGHT_UPDATE))
}, h.prototype.clearAllStudies = function() {
var t, e = this.dataSources();
for (t = 0; t < e.length; t++) e[t].clearData && e[t].clearData()
}, h.prototype.allStudies = function() {
return this._getAllSources(s)
}, h.prototype.allLineTools = function() {
return this._getAllSources(a)
}, h.prototype.getStudyById = function(t) {
var e = this.dataSourceForId(t);
return null !== e && s(e) ? e : null
}, h.prototype.getLineToolById = function(t) {
var e = this.dataSourceForId(t);
return null !== e && a(e) ? e : null
}, h.prototype._getAllSources = function(t) {
var e, i, o, n, r, s, a = [],
l = this.m_panes,
c = l.length;
for (e = 0; e < c; ++e)
for (i = l[e], o = i.dataSources(), n = o.length, r = 0; r < n; ++r) s = o[r], t(
s) && a.push(s);
return a
}, h.prototype.getStudyById = function(t) {
var e = this.dataSourceForId(t);
return e instanceof A ? e : null
}, h.prototype.backgroundColor = function() {
return this._properties.paneProperties.background._value
}, h.prototype.backgroundCounterColor = function() {
return "black" === f(_(this.backgroundColor()), 150) ? "white" : "black"
}, h.prototype.isDark = function() {
return "white" === this.backgroundCounterColor()
}, h.prototype.canZoomIn = function() {
return this.m_timeScale.canZoomIn() && r.enabled("chart_zoom")
}, h.prototype.canZoomOut = function() {
return this.m_timeScale.canZoomOut() && r.enabled("chart_zoom")
}, h.prototype.updateAllVolumeStudies = function() {
var t, e, i, o, n, r, a = this.m_panes;
for (t = a.length; t--;)
for (e = !1, i = a[t], o = i.dataSources(), n = o.length; n--;) r = o[n], s(r) &&
"Volume" === r.metaInfo().shortId && (r.updateAllViews(), e || (this.updatePane(
i), e = !0))
}, h.prototype.alertsList = function() {
return this._alertsList
}, h.prototype.setAlertsStudiesList = function(t) {
this._alertsStudiesList = $.map($.grep(t, function(t) {
var e, i = t.plots || [];
for (e = 0; e < i.length; e++)
if ("line" === i[e].type) return !0;
return !1
}), function(t) {
return t.id
})
}, h.prototype.canCreateAlertForDataSource = function(t) {
if (!r.enabled("alerts")) return !1
}, h.prototype.setInterval = function(t, e) {
var i = setInterval(t, e);
return this._modelIntervals.push(i), i
}, h.prototype.clearInterval = function(t) {
clearInterval(t);
var e = this._modelIntervals.indexOf(t);
e > -1 && this._modelIntervals.splice(e, 1)
}, h.prototype.clearIntervals = function() {
for (var t = 0; t < this._modelIntervals.length; t++) clearInterval(this
._modelIntervals[t]);
this._modelIntervals = []
}, h.prototype.destroy = function() {
var t;
for (t = 0; t < this._barsMarksSources.length; t++) this._barsMarksSources[t].destroy();
for (this.clearIntervals(), F.hideAllDrawings().unsubscribe(this, this
.visibilityChangeHandler), this.resetDeferredStudies(), this._brandingSource &&
this._brandingSource.destroy(), t = 0; t < this._barsMarksSources.length; t++) this
._barsMarksSources[t].destroy();
for (t = 0; t < this.m_panes.length; t++) this.m_panes[t].destroy();
this.m_panes.length = 0
}, h.prototype.countUserStudies = function(t) {
var e, i, o, n, r, a, l = 0;
for (t = t || {}, e = 0; e < this.m_panes.length; e++)
for (i = this.m_panes[e].dataSources(), o = 0; o < i.length; o++)
if (n = i[o], s(n) && n.showInObjectTree()) {
if (r = n.metaInfo && n.metaInfo()) {
if (a = r.id, t.dontCountVolume && "Volume@tv-basicstudies" === a)
continue;
if (t.dontCountCompare && "Compare@tv-basicstudies" === a) continue;
if (t.dontCountOverlay && "Overlay@tv-basicstudies" === a) continue
}
l++
} return l
}, h.prototype.isJustClonedChart = function() {
return this._undoModel.isJustClonedChart()
}, h.prototype.copyToOtherCharts = function(t) {
var e, i, o, n;
t.linkKey = t.linkKey || U.randomHash(), e = this, i = t.state(), o = this.mainSeries(),
(n = o.syncModel()) && (i.points = t._timePoint.map(function(t) {
var i = e.timeScale().timePointToIndex(t.time_t) + t.offset;
return {
price: t.price,
timeStamp: e._externalTimeStamp(i)
}
}), i.linetool = t.getType(), i.model = this, i.symbol = this.mainSeries()
.symbol(), i.finalState = {
points: t._timePoint,
interval: this.mainSeries().interval()
}, F.copyLineTool(i))
}, h.prototype.restoreSource = function(t, e, i, o, n) {
var r, s, a, l, c, h, u, d;
return r = t ? this.createPane(e) : this.panes()[e], a = o.type, s = a.toLowerCase()
.startsWith("study") ? r._restoreStudy(o) : r._restoreLineTool(o), l = s
.ownerSource() ? s.ownerSource().priceScale() : r.priceScaleByName(n), l ? (s
.setPriceScale(l), l.addDataSource(s)) : (l = new C(this.properties()
.scalesProperties), l.setHeight(r.m_height), c = s.metaInfo &&
"Volume@tv-basicstudies" === s.metaInfo().id, h = c ? .75 : r.m_rightPriceScale
.topMargin(), u = c ? 0 : r.m_rightPriceScale.bottomMargin(), l.setTopMargin(h),
l.setBottomMargin(u), l.addDataSource(s), s.setPriceScale(l), s._isOverlay = !0
), d = null, o.ownerSource && (d = r.dataSourceForId(o.ownerSource)), s
.setOwnerSource(d), s.setPriceScale(l), s.start(), s.restore && s.restore(), t && r
.restoreState(i), this.recalculateAllPanes(), this.mainSeries()
.invalidateBarColorerCache(), this.invalidate(new I(I.FULL_UPDATE, !0)), s
.linkKey && F.restoreLineTool({
model: this,
linkKey: s.linkKey,
state: {
restorePane: t,
paneIndex: e,
paneState: i,
sourceState: o,
priceScaleName: n
}
}), s
}, h.prototype.restoreLineToolState = function(t, e) {
t.restorePoints(e.points, e.indexes || []), t.properties().merge(e.state), t
.restoreData && t.restoreData(e), t.createServerPoints(), this.invalidate(new I(I
.FULL_UPDATE)), t.linkKey && F.restoreLineToolState({
model: this,
linkKey: t.linkKey,
state: e
})
}, h.prototype.createBrandingSource = function() {
this._brandingSource = new P(this)
}, h.prototype.onChartThemeLoaded = function() {
return this._chartThemeLoaded
}, h.prototype.chartThemeLoaded = function() {
this._chartThemeLoaded.fire()
}, h.prototype.selectBarMode = function() {
return this.m_crossHairSource.selectBarMode()
}, h.prototype.toggleSelectBarMode = function() {
this.m_crossHairSource.toggleSelectBarMode()
}, h.prototype.onBarSelected = function() {
return this.m_crossHairSource.onBarSelected()
}, h.prototype.isSeriesStyleSupported = function(t) {
return this.m_mainSeries.isStyleSupported(t)
}, h.prototype.getStudyShiftColorStartOffset = function() {
return this._studyShiftColorStartOffset
}, h.prototype.setStudyShiftColorStartOffset = function(t) {
this._studyShiftColorStartOffset = t
}, t.exports = h
}).call(e, i(10), i(17), i(73), i(5))
},
function(t, e, i) {
"use strict";
function o() {
s.call(this)
}
function n(t, e) {
this._constructor = "LineToolFibRetracement";
var r = e || this.createPropertiesObject("linetoolfibretracement");
a.call(this, t, r), this.version = n.version, this._properties._stateVersion = 1, t
._fibRetracementLabelsCache || (t._fibRetracementLabelsCache = new o), i.e(1).then(function(t) {
var e = i(1135).FibRetracementPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var r = i(21),
s = i(88),
a = i(1).LineDataSource,
l = i(3).propertyPages;
inherit(o, s), o.prototype.levelsCount = function() {
return n.LevelsCount
}, inherit(n, a), n.version = 2, n.LevelsCount = 24, n.prototype.levelsCount = function() {
return n.LevelsCount
}, n.prototype.stop = function() {
a.prototype.stop.call(this), this._model._fibRetracementLabelsCache.removeSource(this.id())
}, n.prototype.pointsCount = function() {
return 2
}, n.prototype.title = function() {
return "Fib Retracement"
}, n.prototype.migrateVersion = function(t, e, i) {
1 === t && this.properties().extendLines.setValue(!0)
}, n.prototype.processErase = function(t, e) {
var i = "level" + e,
o = this.properties()[i].visible;
t.setProperty(o, !1, "Erase level line")
}, n.prototype.createPropertiesObject = function(t, e, i) {
return new r(t, e, i, {
range: [1, 24],
names: ["coeff", "color", "visible"]
})
}, n.prototype.getStylesPropertyPage = function() {
return l.LineToolFibRetracementStylesPropertyPage
}, e.LineToolFibRetracement = n
},
function(t, e, i) {
"use strict";
(function(e) {
function i(t) {
e.call(this, ""), this.subscribe(this, i.prototype.checkSelfColor), this.reloadProperties(t)
}
inherit(i, e), i.prototype.reloadProperties = function(t) {
for (; this._childs.length > 0;) this.removeProperty(this._childs[0]);
this._initValues = [];
for (var e = 0; e < t.length; ++e) this._initValues.push(t[e].defaultValue), this
.addChild(e, t[e].property);
this.checkSelfColor()
}, i.prototype.setValue = function(t, i) {
if (this._value !== t || i) {
var o = this;
this._childs.forEach(function(e) {
o[e].setValue(t || o._initValues[e])
}), e.prototype.setValue.call(this, t, i)
}
},
i.prototype.checkSelfColor = function() {
var t, i = !0;
for (t = 0; t < this._initValues.length; ++t)
if (this[t].value() !== this[0].value()) {
i = !1;
break
} e.prototype.setValue.call(this, i ? this[0].value() : "")
}, t.exports = i
}).call(e, i(25))
},
function(t, e, i) {
"use strict";
function o(t, e) {
this.array = [];
for (var i in t) t[i].key = i, this.array.push(t[i]);
this.rearrange(e)
}
o.prototype.rearrange = function(t) {
if ("function" != typeof t) throw Error("sort param is not a function");
return this.array.sort(t)
}, o.byValue = function(t) {
return function(t, e) {
return t - e
}
}, o.byField = function(t) {
return function(e, i) {
return e[t] > i[t] ? 1 : e[t] < i[t] ? -1 : e[t] === i[t] ? 0 : void 0
}
}, o.byOrder = function(t) {
return function(e, i) {
return t.indexOf(e.key) - t.indexOf(i.key)
}
}, t.exports = o
},
function(t, e, i) {
"use strict";
function o() {
a.call(this)
}
function n(t, e) {
this._constructor = "LineToolFibChannel";
var s = e || this.createPropertiesObject("linetoolfibchannel");
r.call(this, t, s), this.version = n.version, t._fibChannelLabelsCache || (t
._fibChannelLabelsCache = new o), i.e(1).then(function(t) {
var e = i(1136).FibChannelPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var r = i(1).LineDataSource,
s = i(21),
a = i(88),
l = i(3).propertyPages;
inherit(o, a), o.prototype.levelsCount = function() {
return n.LevelsCount
}, inherit(n, r), n.LevelsCount = 24, n.version = 2, n.prototype.levelsCount = function() {
return n.LevelsCount
}, n.prototype.migrateVersion = function(t, e, i) {
i.properties.removeProperty("reverse")
}, n.prototype.pointsCount = function() {
return 3
}, n.prototype.title = function() {
return "Fib Channel"
}, n.prototype.processErase = function(t, e) {
var i = "level" + e,
o = this.properties()[i].visible;
t.setProperty(o, !1, "Erase level line")
}, n.prototype.createPropertiesObject = function(t, e, i) {
return new s(t, e, i, {
range: [1, 24],
names: ["coeff", "color", "visible"]
})
}, n.prototype.getStylesPropertyPage = function() {
return l.LineToolFibChannelStylesPropertyPage
}, e.LineToolFibChannel = n
},
function(t, e, i) {
"use strict";
function o() {
a.call(this)
}
function n(t, e) {
this._constructor = "LineToolFibSpeedResistanceArcs";
var n = e || this.createPropertiesObject("linetoolfibspeedresistancearcs");
r.call(this, t, n), t._fibSpeedResistanceArcsLabelsCache || (t._fibSpeedResistanceArcsLabelsCache =
new o), i.e(1).then(function(t) {
var e = i(1137).FibSpeedResistanceArcsPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var r = i(1).LineDataSource,
s = i(21),
a = i(88),
l = i(3).propertyPages;
inherit(o, a), o.prototype.levelsCount = function() {
return n.LevelsCount
}, inherit(n, r), n.LevelsCount = 11, n.prototype.levelsCount = function() {
return n.LevelsCount
}, n.prototype.pointsCount = function() {
return 2
}, n.prototype.title = function() {
return "Fib Speed Resistance Arcs"
}, n.prototype.processErase = function(t, e) {
var i = "level" + e,
o = this.properties()[i].visible;
t.setProperty(o, !1, "Erase level line")
}, n.prototype.createPropertiesObject = function(t, e, i) {
return new s(t, e, i, {
range: [1, 11]
})
}, n.prototype.getStylesPropertyPage = function() {
return l.LineToolFibSpeedResistanceArcsStylesPropertyPage
}, e.LineToolFibSpeedResistanceArcs = n
},
function(t, e, i) {
"use strict";
function o() {
a.call(this)
}
function n(t, e) {
this._constructor = "LineToolProjection";
var o = e || this.createPropertiesObject("linetoolprojection");
l.call(this, t, o), i.e(1).then(function(t) {
var e = i(1138).ProjectionLinePaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var r = i(21),
s = i(333).LineToolFibWedge,
a = i(88),
l = i(1).LineDataSource,
c = i(3).propertyPages;
inherit(o, a), o.prototype.levelsCount = function() {
return 1
}, inherit(n, s), n.prototype.title = function() {
return "Projection"
}, n.prototype.getCache = function() {
return this._model._projectionLabelsCache || (this._model._projectionLabelsCache = new o), this
._model._projectionLabelsCache
}, n.prototype.createPropertiesObject = function(t, e, i) {
return new r(t, e, i, {
range: [1, 1]
})
}, n.prototype.getStylesPropertyPage = function() {
return c.LineToolProjectionStylesPropertyPage
}, e.LineToolProjection = n
},
function(t, e, i) {
"use strict";
function o() {
a.call(this)
}
function n(t, e) {
this._constructor = "LineToolTrendBasedFibExtension";
var s = e || new this.createPropertiesObject("linetooltrendbasedfibextension");
r.call(this, t, s), this.version = n.version, t._trendBasedFibExtensionLabelsCache || (t
._trendBasedFibExtensionLabelsCache = new o), i.e(1).then(function(t) {
var e = i(1139).TrendBasedFibExtensionPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var r = i(1).LineDataSource,
s = i(21),
a = i(88),
l = i(3).propertyPages;
inherit(o, a), o.prototype.levelsCount = function() {
return n.LevelsCount
}, o.prototype.points = function(t) {
return [t.points()[0], t.points()[1]]
}, o.prototype.startPoint = function(t, e) {
return t.points()[2]
}, o.prototype.priceRange = function(t, e) {
var i = this.points(t),
o = i[0],
n = i[1];
return e ? o.price - n.price : n.price - o.price
}, o.prototype.sourceIsReady = function(t) {
return t.points().length >= 3
}, inherit(n, r), n.version = 2, n.LevelsCount = 24, n.prototype.levelsCount = function() {
return n.LevelsCount
}, n.prototype.stop = function() {
r.prototype.stop.call(this), this._model._trendBasedFibExtensionLabelsCache.removeSource(this
.id())
}, n.prototype.pointsCount = function() {
return 3
}, n.prototype.title = function() {
return "Trend-Based Fib Extension"
}, n.prototype.migrateVersion = function(t, e, i) {
1 === t && this.properties().extendLines.setValue(!0)
}, n.prototype.processErase = function(t, e) {
var i = "level" + e,
o = this.properties()[i].visible;
t.setProperty(o, !1, "Erase level line")
}, n.prototype.createPropertiesObject = function(t, e, i) {
return new s(t, e, i, {
range: [0, 8]
})
}, n.prototype.getStylesPropertyPage = function() {
return l.LineToolTrendBasedFibExtensionStylesPropertyPage
}, e.LineToolTrendBasedFibExtension = n
},
function(t, e, i) {
"use strict";
function o() {
a.call(this)
}
function n(t, e) {
this._constructor = "LineToolFibCircles";
var n = e || this.createPropertiesObject("linetoolfibcircles");
r.call(this, t, n), t._fibCirclesLabelsCache || (t._fibCirclesLabelsCache = new o), i.e(1).then(
function(t) {
var e = i(1140).FibCirclesPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var r = i(1).LineDataSource,
s = i(21),
a = i(88),
l = i(3).propertyPages;
inherit(o, a), o.prototype.levelsCount = function() {
return n.LevelsCount
}, inherit(n, r), n.LevelsCount = 11, n.prototype.levelsCount = function() {
return n.LevelsCount
}, n.prototype.pointsCount = function() {
return 2
}, n.prototype.title = function() {
return "Fib Circles"
}, n.prototype.processErase = function(t, e) {
var i = "level" + e,
o = this.properties()[i].visible;
t.setProperty(o, !1, "Erase level line")
}, n.prototype.createPropertiesObject = function(t, e, i) {
return new s(t, e, i, {
range: [1, 11]
})
}, n.prototype.getStylesPropertyPage = function() {
return l.LineToolFibCirclesStylesPropertyPage
}, e.LineToolFibCircles = n
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolVertLine";
var o = e || new r("linetoolvertline");
this._timeAxisView = new a(this, t), n.call(this, t, o), i.e(1).then(function(t) {
var e = i(1141).VertLinePaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(6).DefaultProperty,
s = i(3).propertyPages,
a = i(817).LineToolVertLineTimeAxisView;
inherit(o, n), o.prototype.pointsCount = function() {
return 1
}, o.prototype.title = function() {
return "Vertical Line"
}, o.prototype.timeAxisViews = function() {
return this.isSourceHidden() ? null : this.properties().showTime.value() ? [this
._timeAxisView
] : null
}, o.prototype.updateAllViews = function() {
n.prototype.updateAllViews.call(this), this._timeAxisView.update()
}, o.prototype.canHasAlert = function() {
return !0
}, o.prototype._getAlertPlots = function() {
var t = this._points[0],
e = {
index: t.index,
price: t.price + 1
};
return [this._linePointsToAlertPlot([t, e], null, !0, !0)]
}, o.prototype.getInputsPropertyPage = function() {
return s.LineToolVertLineInputsPropertyPage
}, o.prototype.getStylesPropertyPage = function() {
return s.LineToolVertLineStylesPropertyPage
}, e.LineToolVertLine = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
n.call(this), this._source = t, this._model = e, this._invalidated = !0, this._renderer = new r
}
var n = i(222).TimeAxisView,
r = i(223),
s = i(127).DateTimeFormatter;
inherit(o, n), o.prototype.update = function() {
this._invalidated = !0
}, o.prototype.updateImpl = function() {
var t, e;
this._model.timeScale().isEmpty() || 0 !== this._source.points().length && (this._text = "",
this._background = this._source.properties().linecolor.value(), t = this._source
.points()[0].index, this._coordinate = this._model.timeScale().indexToCoordinate(t), e =
this._model.timeScale().indexToUserTime(t), e && (this._text = new s(this._model
.mainSeries().isDWM()).format(e)), this._invalidated = !1)
}, o.prototype.renderer = function() {
this._invalidated && this.updateImpl();
var t = {
text: this._text,
coordinate: this._coordinate,
color: this.color(),
background: this._background
};
return this._renderer.setData(t), this._renderer
}, e.LineToolVertLineTimeAxisView = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolBarsPattern";
var r = e || new s("linetoolbarspattern");
n.call(this, t, r), r.mirrored.listeners().subscribe(this, o.prototype.mirror), r.flipped
.listeners().subscribe(this, o.prototype.flip), r.addExclusion("mirrored"), r.addExclusion(
"flipped"), this._scaleCoeff = 1, this.version = o.version, this._pattern = [], this
._properties.mode.listeners().subscribe(this, o.prototype.onModeChanged),
i.e(1).then(function(t) {
var e = i(1142).BarsPatternPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(52).Action,
s = i(6).DefaultProperty,
a = i(19).PlotRowSearchMode,
l = i(3).propertyPages,
c = i(245).LineToolBarsPatternMode;
inherit(o, n), o.version = 2, o.prototype.onModeChanged = function() {
var t = this.patternPriceDiff();
t *= this._pressCoeff, this._points[1].price = this._timePoint[1].price = this._points[0]
.price + t
}, o.prototype.additionalActions = function(t) {
var e, i, o = new r({
checked: this.properties().mirrored.value(),
checkable: !0,
text: $.t("Mirrored"),
callbackContext: {
target: this
}
}),
n = new r({
checked: this.properties().flipped.value(),
checkable: !0,
text: $.t("Flipped"),
callbackContext: {
target: this
}
});
return o.callbacks().subscribe(null, function(e) {
var i = e.callbackContext(),
o = i.target;
t.setProperty(o.properties().mirrored, !o.properties().mirrored.value(),
"Bats Pattern Mirroring"), o.updateAllViews(), o._model.updateSource(o)
}), n.callbacks().subscribe(null, function(e) {
var i = e.callbackContext(),
o = i.target;
t.setProperty(o.properties().flipped, !o.properties().flipped.value(),
"Bats Pattern Flipping"), o.updateAllViews(), o._model.updateSource(o)
}), e = new r({
checkable: !0,
text: $.t("Restore Size")
}), i = this, e.callbacks().subscribe(null, function(e) {
var o = i.points()[0],
n = i.patternPriceDiff(),
r = o.price + n,
s = o.index + i._pattern.length - 1;
t.startChangingLinetool(i, {
price: r,
index: s
}, 1, {}), t.changeLinePoint({
price: r,
index: s
}, {}), t.endChangingLinetool()
}), [o, n, e]
}, o.prototype.pointsCount = function() {
return 2
}, o.prototype.state = function(t) {
var e = n.prototype.state.call(this, t);
return e.pattern = this._pattern, e
}, o.prototype.restoreData = function(t) {
t.pattern && (this._pattern = t.pattern)
}, o.prototype.title = function() {
return "Bars Pattern"
}, o.prototype.cloneData = function(t) {
this._pattern = TradingView.clone(t._pattern)
}, o.prototype.mirror = function() {
var t, e, i, o, n, r = this._pattern,
s = r[0][TradingView.HIGH_PLOT],
a = Math.min(r[0][TradingView.LOW_PLOT], r[0][TradingView.HIGH_PLOT]),
l = Math.max(r[0][TradingView.LOW_PLOT], r[0][TradingView.HIGH_PLOT]);
for (t = 1; t < r.length; t++) a = Math.min(a, r[t][TradingView.LOW_PLOT]), l = Math.max(l, r[t]
[TradingView.HIGH_PLOT]);
if (a < l)
for (e = (a + l) / 2, i = function(t) {
return e - (t - e)
}, t = 0; t < r.length; t++) r[t][TradingView.HIGH_PLOT] = i(r[t][TradingView
.HIGH_PLOT
]), r[t][TradingView.LOW_PLOT] = i(r[t][TradingView.LOW_PLOT]), r[t][
TradingView.OPEN_PLOT
] = i(r[t][TradingView.OPEN_PLOT]), r[t][TradingView.CLOSE_PLOT] = i(r[t][TradingView
.CLOSE_PLOT
]);
o = r[0][TradingView.HIGH_PLOT] - s, n = r[r.length - 1][TradingView.LOW_PLOT] - r[0][
TradingView.HIGH_PLOT
], this._points[0].price += o, this._points[1].price = this._points[0].price + n, this
.updateAllViews()
}, o.prototype.flip = function() {
var t, e, i;
for (this._points[0].price = this._points[1].price, t = 0; t < this._pattern.length / 2; t++)
e = this._pattern[t], this._pattern[t] = this._pattern[this._pattern.length - t - 1], this
._pattern[this._pattern.length - t - 1] = e;
i = this._pattern[this._pattern.length - 1][TradingView.LOW_PLOT] - this._pattern[0][TradingView
.HIGH_PLOT
], this._points[1].price = this._points[0].price + i,
this.updateAllViews()
}, o.prototype.firstPatternPrice = function() {
var t, e, i = parseInt(this.properties().mode.value(), 10);
return i === c.LineHL2 ? (this._pattern[0][TradingView.HIGH_PLOT] + this._pattern[0][TradingView
.LOW_PLOT
]) / 2 : (t = {
0: TradingView.HIGH_PLOT,
1: TradingView.CLOSE_PLOT,
2: TradingView.OPEN_PLOT,
3: TradingView.OPEN_PLOT,
4: TradingView.HIGH_PLOT,
5: TradingView.LOW_PLOT
}, e = t[i], this._pattern[0][e])
}, o.prototype.lastPatternPrice = function() {
var t, e, i = parseInt(this.properties().mode.value(), 10);
return i === c.LineHL2 ? (this._pattern[this._pattern.length - 1][TradingView.HIGH_PLOT] + this
._pattern[this._pattern.length - 1][TradingView.LOW_PLOT]) / 2 : (t = {
0: TradingView.LOW_PLOT,
1: TradingView.CLOSE_PLOT,
2: TradingView.CLOSE_PLOT,
3: TradingView.OPEN_PLOT,
4: TradingView.HIGH_PLOT,
5: TradingView.LOW_PLOT
}, e = t[i], this._pattern[this._pattern.length - 1][e])
}, o.prototype.patternPriceDiff = function() {
return this.lastPatternPrice() - this.firstPatternPrice()
}, o.prototype.pressCoeff = function() {
var t = this.patternPriceDiff(),
e = this.points()[0].price,
i = this.points()[1].price,
o = i - e,
n = o / t;
return this._pressCoeff = n, n
}, o.prototype.addPoint = function(t, e) {
var i, o, r, s, l, h, u, d, p, _, f = this._model.mainSeries(),
m = f.nearestIndex(t.index, a.NearestRight);
if (this.properties().mode.value() === c.Bars ? t.price = f.bars().valueAt(m)[TradingView
.HIGH_PLOT] : t.price = f.bars().valueAt(m)[TradingView.CLOSE_PLOT], i = this
.priceScale().priceRange().length(), t.price += .05 * i, o = f.priceScale(), o
.isPercent() && (r = f.firstValue(), t.price = o.priceRange().convertToPercent(t.price, r)),
s =
n.prototype.addPoint.call(this, t, e, !0)) {
for (l = Math.min(this.points()[0].index, this.points()[1].index), h = Math.max(this
.points()[0].index, this.points()[1].index), m = this._model.mainSeries()
.nearestIndex(
l, a.NearestRight), u = this._model.mainSeries().nearestIndex(h, a.NearestLeft),
this.points()[0].index > this.points()[1].index && (this._points[0].price = this
._points[1].price), this._pattern = [], d = m; d <= u; d++) p = this._model
.mainSeries().data().valueAt(d), this._pattern.push(TradingView.clone(p));
this._pattern.length > 0 && (_ = this.patternPriceDiff(), this._points[1].price = this
._points[0].price + _, this._points[1].index = this._points[0].index + (u - m), this
.normalizePoints(), this.createServerPoints())
}
return s
}, o.prototype.setPoint = function(t, e, i) {
1 === t && e.index <= this._points[0].index && (e.index = this._points[0].index + 1), 0 === t &&
e.index >= this._points[1].index && (e.index = this._points[1].index - 1), n.prototype
.setPoint.call(this, t, e, i)
}, o.prototype.migrateVersion = function(t, e, i) {
if (1 === t && this._pattern.length > 0) {
var o = this.patternPriceDiff();
2 === this._timePoint.length && (this._timePoint[1].price = this._timePoint[0].price + o),
2 === this._points.length && (this._points[1].price = this._points[0].price + o)
}
}, o.prototype.getInputsPropertyPage = function() {
return null
}, o.prototype.getStylesPropertyPage = function() {
return l.LineToolBarsPatternStylesPropertyPage
}, e.LineToolBarsPattern = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolTrendBasedFibTime";
var r = e || new this.createPropertiesObject("linetooltrendbasedfibtime");
n.call(this, t, r),
this.version = o.version, i.e(1).then(function(t) {
var e = i(1143).TrendBasedFibTimePaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(21),
s = i(3).propertyPages;
inherit(o, n), o.version = 1, o.prototype.pointsCount = function() {
return 3
}, o.prototype.title = function() {
return "Trend-Based Fib Time"
}, o.prototype.migrateVersion = function(t, e, i) {}, o.prototype.processErase = function(t, e) {
var i = "level" + e,
o = this.properties()[i].visible;
t.setProperty(o, !1, "Erase level line")
}, o.prototype.createPropertiesObject = function(t, e, i) {
return new r(t, e, i, {
range: [1, 11]
})
}, o.prototype.getStylesPropertyPage = function() {
return s.LineToolTrendBasedFibTimeStylesPropertyPage
}, e.LineToolTrendBasedFibTime = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolFibTimeZone";
var r = e || this.createPropertiesObject("linetoolfibtimezone");
n.call(this, t, r), this.version = o.version, i.e(1).then(function(t) {
var e = i(1144).FibTimeZonePaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(21),
s = i(3).propertyPages;
inherit(o, n), o.version = 2, o.prototype.migrateVersion = function(t, e, i) {
var o;
if (1 === t) {
for (i.properties.level1.color.setValue(i.properties.baselinecolor.value()), o = 2; o <=
11; o++) i.properties["level" + o].color.setValue(i.properties.linecolor.value());
for (o = 1; o <= 11; o++) i.properties["level" + o].linewidth.setValue(i.properties
.linewidth.value()), i.properties["level" + o].linestyle.setValue(i.properties
.linestyle.value())
}
}, o.prototype.pointsCount = function() {
return 2
}, o.prototype.title = function() {
return "Fib Time Zone"
}, o.prototype.processErase = function(t, e) {
var i = "level" + e,
o = this.properties()[i].visible;
t.setProperty(o, !1, "Erase level line")
}, o.prototype.createPropertiesObject = function(t, e, i) {
return new r(t, e, i, {
range: [1, 11]
})
}, o.prototype.getStylesPropertyPage = function() {
return s.LineToolFibTimeZoneStylesPropertyPage
}, e.LineToolFibTimeZone = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolCircleLines";
var o = e || new r("linetoolcirclelines");
n.call(this, t, o), i.e(1).then(function(t) {
var e = i(1145).LineToolCircleLinesPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(6).DefaultProperty,
s = i(3).propertyPages;
inherit(o, n), o.prototype.pointsCount = function() {
return 2
}, o.prototype.title = function() {
return "Cyclic Lines"
}, o.prototype.getStylesPropertyPage = function() {
return s.LineToolCircleLinesStylesPropertyPage
}, e.LineToolCircleLines = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolDateRange";
var o = e || new r("linetooldaterange");
n.call(this, t, o), i.e(1).then(function(t) {
var e = i(1146).DateRangePaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(6).DefaultProperty,
s = i(3).propertyPages;
inherit(o, n), o.prototype.pointsCount = function() {
return 2
}, o.prototype.title = function() {
return "Date Range"
}, o.prototype.getStylesPropertyPage = function() {
return s.LineToolDateRangeStylesPropertyPage
}, e.LineToolDateRange = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolPriceRange";
var o = e || new r("linetoolpricerange");
n.call(this, t, o), i.e(1).then(function(t) {
var e = i(1147).PriceRangePaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(6).DefaultProperty,
s = i(3).propertyPages;
inherit(o, n), o.prototype.pointsCount = function() {
return 2
}, o.prototype.title = function() {
return "Price Range"
}, o.prototype.getStylesPropertyPage = function() {
return s.LineToolDateRangeStylesPropertyPage
}, e.LineToolPriceRange = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolDateAndPriceRange";
var o = e || new r("linetooldateandpricerange");
n.call(this, t, o), i.e(1).then(function(t) {
var e = i(1148).DateAndPriceRangePaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(6).DefaultProperty,
s = i(3).propertyPages;
inherit(o, n), o.prototype.pointsCount = function() {
return 2
}, o.prototype.title = function() {
return "Date and Price Range"
}, o.prototype.getStylesPropertyPage = function() {
return s.LineToolDateAndPriceRangeStylesPropertyPage
}, e.LineToolDateAndPriceRange = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolParallelChannel";
var o = e || new r("linetoolparallelchannel");
n.call(this, t, o), i.e(1).then(function(t) {
var e = i(1149).ParallelChannelPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(6).DefaultProperty,
s = i(3).propertyPages;
inherit(o, n), o.prototype.addPoint = function(t) {
var e, i = n.prototype.addPoint.call(this, t);
return i && (e = this.points()[0], this._points[2].index = e.index, this._points[2].price = e
.price + this._priceOffset), i
}, o.prototype.calculatePriceDiff = function() {
var t, e, i, o, n, r, s, a, l, c, h, u, d, p, _, f, m, g, v;
if (3 === this.points().length) {
if (t = this.points()[0], e = this.points()[1], i = this.points()[2], t.index === e.index)
return;
if (null === (o = this.priceScale())) return;
if (o.isLog()) {
if (n = this._model.timeScale(), n.isEmpty()) return;
r = n.indexToCoordinate(t.index), s = n.indexToCoordinate(e.index), a = o
.priceToCoordinate(t.price), l = o.priceToCoordinate(e.price), c = n
.indexToCoordinate(i.index), h = (l - a) / (s - r), u = a + h * (c - r), d = o
.priceToCoordinate(i.price), p = d - u, _ = .5 * (a + l), f = o.coordinateToPrice(
_), m = _ + p, g = o.coordinateToPrice(m), this._priceOffset = g - f
} else h = (e.price - t.price) / (e.index - t.index), v = t.price + h * (i.index - t.index),
this._priceOffset = i.price - v
}
}, o.prototype.setLastPoint = function(t, e) {
e && e.shift && 2 === this.points().length && this._snapPoint45Degree(t, this.points()[0]), n
.prototype.setLastPoint.call(this, t), this.calculatePriceDiff()
}, o.prototype.restorePoints = function(t, e, i) {
n.prototype.restorePoints.call(this, t, e, i), t && t.length >= 3 && (this._priceOffset = t[2]
.price - t[0].price)
}, o.prototype.setPoint = function(t, e, i) {
i && i.shift && t < 2 && this._snapPoint45Degree(e, this.points()[1 - t]), n.prototype.setPoint
.call(this, t, e, i), 2 === t && this.calculatePriceDiff();
var o = this.points()[0];
this._points[2].index = o.index, this._points[2].price = o.price + this._priceOffset
}, o.prototype.pointsCount = function() {
return 3
}, o.prototype.title = function() {
return "Parallel Channel"
}, o.prototype.addPoint = function(t, e) {
return e && e.shift && 2 === this.points().length && this._snapPoint45Degree(t, this.points()[
0]), n.prototype.addPoint.call(this, t, e)
}, o.prototype.fixAfterRestorePriceAxis = function() {
this.priceScale().isLog() || delete this._priceOffset
}, o.prototype.cloneData = function(t) {
this._priceOffset = t._priceOffset
}, o.prototype.restoreData = function(t) {
t.priceOffset && (this._priceOffset = t.priceOffset)
}, o.prototype.state = function(t) {
var e = n.prototype.state.call(this, t);
return e.priceOffset = this._priceOffset, e
}, o.prototype.canHasAlert = function() {
return !0
}, o.prototype._getAlertPlots = function() {
function t(t, e) {
return t.index <= e.index ? [t, e] : [e, t]
}
var e, i, o, n, r, s, a, l, c = [].concat(this._points).splice(0, 2);
return c = c.concat([{
price: c[0].price + this._priceOffset,
time: c[0].time,
index: c[0].index
}, {
price: c[1].price + this._priceOffset,
time: c[1].time,
index: c[1].index
}]), e = t(c[0], c[1]), i = t(c[2], c[3]), this._priceOffset < 0 ? (n = i, o = e) : (n = e,
o = i), a = this.properties().extendLeft.value(), l = this.properties().extendRight
.value(), c[0].index <= c[1].index ? (r = a, s = l) : (r = l, s = a), [this
._linePointsToAlertPlot(o, "Upper", r, s), this._linePointsToAlertPlot(n, "Lower", r, s)
]
}, o.prototype.getInputsPropertyPage = function() {
return null
}, o.prototype.getStylesPropertyPage = function() {
return s.LineToolParallelChannelStylesPropertyPage
}, e.LineToolParallelChannel = o
},
function(t, e, i) {
"use strict";
(function(t) {
function o(t, e) {
this._constructor = "LineToolTrendAngleLine";
var n = e || new s("linetooltrendangle");
r.call(this, t, n), this._properties.addProperty("angle"), this._properties.angle = new o
.AngleProperty(this), i.e(1).then(function(t) {
var e = i(1150).TrendAnglePaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(8).Point,
r = i(1).LineDataSource,
s = i(6).DefaultProperty,
a = i(3).propertyPages;
inherit(o, r), o.AngleProperty = function(e) {
t.call(this), this._lineSource = e
}, inherit(o.AngleProperty, t), o.AngleProperty.prototype.value = function() {
var t = this._lineSource._angle,
e = 180 * t / Math.PI;
return Math.round(e)
}, o.AngleProperty.prototype.setValue = function(t) {
var e, i, o, r, s, a, l = t * Math.PI / 180;
this._lineSource._angle = l, e = this._lineSource.pointToScreenPoint(this._lineSource
.points()[0])[0], i = Math.cos(this._lineSource._angle), o = -Math.sin(this
._lineSource._angle), r = new n(i, o), s = e.addScaled(r, this._lineSource
._distance), a = this._lineSource.screenPointToPoint(s), this._lineSource
._points[1] = a, this._lineSource._model.updateSource(this._lineSource), this
._lineSource.updateAllViews(), this._lineSource._model.updateSource(this
._lineSource)
}, o.prototype.pointsCount = function() {
return 2
}, o.prototype.title = function() {
return "Trend Angle"
}, o.prototype._calculateAngle = function() {
var t, e = this.pointToScreenPoint(this.points()[0])[0],
i = this.pointToScreenPoint(this.points()[1])[0],
o = i.subtract(e);
o.length() > 0 ? (o = o.normalized(), this._angle = Math.acos(o.x), o.y > 0 && (this
._angle = -this._angle),
this._distance = i.subtract(e).length()) : delete this._angle, t = this
.properties(), t.hasOwnProperty("angle") && this.properties().angle.listeners()
.fire(this.properties().angle)
}, o.prototype.addPoint = function(t, e) {
var i = r.prototype.addPoint.call(this, t, e);
return i && this._calculateAngle(), i
}, o.prototype.setLastPoint = function(t, e) {
r.prototype.setLastPoint.call(this, t, e), this.points().length > 1 && this
._calculateAngle()
}, o.prototype.axisPoints = function() {
var t, e, i, o, r, s;
return this.points().length < 2 ? [] : (t = [this.points()[0]], e = this
.pointToScreenPoint(this.points()[0])[1], i = Math.cos(this._angle) * this
._distance, o = -Math.sin(this._angle) * this._distance, r = e.add(new n(i, o)),
s = this.screenPointToPoint(r), t.push(s), t)
}, o.prototype.setPoint = function(t, e, i) {
r.prototype.setPoint.call(this, t, e, i), this.points().length > 1 && 1 === t && this
._calculateAngle()
}, o.prototype.restoreData = function(t) {
this._angle = t.angle, this._distance = t.distance
}, o.prototype.state = function(t) {
var e = r.prototype.state.call(this, t);
return e.angle = this._angle, e.distance = this._distance, e
}, o.prototype.cloneData = function(t) {
this._angle = t._angle, this._distance = t._distance
}, o.prototype.canHasAlert = function() {
return !0
}, o.prototype._getAlertPlots = function() {
return [this._linePointsToAlertPlot(this._points, null, this.properties().extendLeft
.value(), this.properties().extendRight.value())]
}, o.prototype.getInputsPropertyPage = function() {
return a.LineToolTrendAngleInputsPropertyPage
}, o.prototype.getStylesPropertyPage = function() {
return a.LineToolTrendAngleStylesPropertyPage
}, e.LineToolTrendAngle = o
}).call(e, i(25))
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolPitchfan";
var o = e || this.createPropertiesObject("linetoolpitchfan");
n.call(this, t, o), i.e(1).then(function(t) {
var e = i(1153).PitchfanLinePaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(21),
s = i(3).propertyPages;
inherit(o, n), o.prototype.pointsCount = function() {
return 3
}, o.prototype.title = function() {
return "Pitchfan"
}, o.prototype.processErase = function(t, e) {
var i = "level" + e,
o = this.properties()[i].visible;
t.setProperty(o, !1, "Erase level line")
}, o.prototype.createPropertiesObject = function(t, e, i) {
return new r(t, e, i, {
range: [0, 8]
})
}, o.prototype.getStylesPropertyPage = function() {
return s.LineToolPitchfanStylesPropertyPage
}, e.LineToolPitchfan = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolGannSquare";
var o = e || this.createPropertiesObject("linetoolgannsquare");
s.call(this, t, o), i.e(1).then(function(t) {
var e = i(1154).GannSquarePaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n, r, s = i(1).LineDataSource,
a = i(21),
l = i(3).propertyPages;
inherit(o, s), o.prototype.pointsCount = function() {
return 2
}, o.prototype.title = function() {
return "Gann Box"
}, n = [4.5, 9, 11.25, 18, 22.5, 36, 45], r = function() {
for (var t = [], e = 1e10, i = n.length - 1, o = 1, r = 0, s = 0; s < e;) s = n[r] * o, t.push(
Math.round(s)), t.push(Math.ceil(-s)), r === i - 1 && (o *= 10), r = (r + 1) % i;
return t.sort(function(t, e) {
return t < e ? -1 : t > e ? 1 : 0
}), t
}(),
o.prototype._alignPriceOnPattern = function(t, e) {
var i, o, r, s, a, l, c = Math.round(1e6 * (t.price - e.price)) / 1e6;
if (0 === c) return e.price;
for (i = n[0], o = n[n.length - 1], r = 1, s = Math.abs(c); s < i * r || o * r < s;) s < i * r ?
r *= .1 : o * r < s && (r *= 10);
for (a = o * r, l = n.length - 2; l >= 0 && !(n[l] * r < s); --l) a = n[l] * r;
return t.price = e.price + (c >= 0 ? a : -a), t
}, o.prototype._alignTimeOnPattern = function(t, e) {
var i, o = t.index - e.index;
if (0 === o) return 0;
for (i = r.length - 2; i >= 0 && !(r[i] < o); --i);
return i += o > 0 ? 1 : 0, t.index = e.index + r[i], t
}, o.prototype._alignPointsFixedIncrement = function(t, e) {
return this._alignTimeOnPattern(t, e), this._alignPriceOnPattern(t, e), t
}, o.prototype._preparePoint = function(t, e) {
return e && e.shift && 0 !== this._points.length && this._alignPointsFixedIncrement(t, this
._points[0]), s.prototype._preparePoint.call(this, t, e)
}, o.prototype.setPoint = function(t, e, i) {
if (i && i.shift) {
var o = 0 === t ? this._points[1] : this._points[0];
this._alignPointsFixedIncrement(e, o)
}
s.prototype.setPoint.call(this, t, e, i)
}, o.prototype.createPropertiesObject = function(t, e, i) {
return new a(t, e, i, {
range: [1, 7],
prefixes: ["h", "v"],
names: ["coeff", "color", "visible"]
})
}, o.prototype.getStylesPropertyPage = function() {
return l.LineToolGannSquareStylesPropertyPage
}, e.LineToolGannSquare = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolFibSpeedResistanceFan";
var o = e || this.createPropertiesObject("linetoolfibspeedresistancefan");
n.call(this, t, o), i.e(1).then(function(t) {
var e = i(1155).FibSpeedResistanceFanPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(21),
s = i(3).propertyPages;
inherit(o, n), o.prototype.pointsCount = function() {
return 2
}, o.prototype.title = function() {
return "Fib Speed Resistance Fan"
}, o.prototype.processErase = function(t, e) {
var i = "h" === e.type ? "hlevel" + e.index : "vlevel" + e.index,
o = this.properties()[i].visible;
t.setProperty(o, !1, "Erase level line")
}, o.prototype.createPropertiesObject = function(t, e, i) {
return new r(t, e, i, {
range: [1, 7],
prefixes: ["h", "v"],
names: ["coeff", "color", "visible"]
})
}, o.prototype.getStylesPropertyPage = function() {
return s.LineToolFibSpeedResistanceFanStylesPropertyPage
}, e.LineToolFibSpeedResistanceFan = o
},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c, h, u;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(8), r = i(9), s = i(213), a = i(1), l = i(160), c = i(3), h = i(335), u =
function(t) {
function e(e, o) {
var n, r = t.call(this, e, null == o ? h.createPropertiesObject("linetoolganncomplex") :
o) || this;
return r.version = 2, r._constructor = "LineToolGannComplex", r._scaleRatioFormatter = new s
.LimitedPrecisionNumericFormatter(7), i.e(1).then(function(t) {
var e = i(1156).GannComplexPaneView;
r._setPaneViews([new e(r, r.model())])
}.bind(null, i)).catch(i.oe), n = r.properties(), r._adjustScaleRatio(n), n.subscribe(r,
r._adjustScaleRatio), n.scaleRatio.subscribe(r, r._correctFirstPoint), r
._syncStateExclusions = ["scaleRatio"], n.addExclusion("scaleRatio"), r
._onRestoringFactoryDefaults.subscribe(r, r._handleRestoringFactoryDefaults), r
._onTemplateApplying.subscribe(r, r._handleTemplateApplying), r._onTemplateApplied
.subscribe(r, r._correctFirstPoint), r
}
return o.__extends(e, t), e.prototype.migrateVersion = function(t, e, i) {
var o = this;
1 === t && (this._points.length >= this.pointsCount() ? setTimeout(function() {
return o._migratePoint()
}) : this._timePoint.length >= this.pointsCount() && this._pointAdded.subscribe(
this, this._migratePoint))
}, e.prototype.destroy = function() {
var t = this.properties();
t.unsubscribe(this, this._adjustScaleRatio), t.scaleRatio.unsubscribe(this, this
._correctFirstPoint), this._onRestoringFactoryDefaults.unsubscribe(this, this
._handleRestoringFactoryDefaults), this._onTemplateApplying.unsubscribe(this,
this._handleTemplateApplying), this._onTemplateApplied.unsubscribe(this, this
._correctFirstPoint)
}, e.prototype.pointsCount = function() {
return 2
}, e.prototype.title = function() {
return "Gann Square"
}, e.prototype.addPoint = function(e, i, o) {
var n, s, a;
return this._points.length > 1 && this._points.pop(), n = t.prototype.addPoint.call(
this, e, i, o), s = this.priceScale(), a = r.ensureNotNull(s).isLog(), !a &&
n && this._correctFirstPoint(), n
}, e.prototype.setPoint = function(e, i, o) {
t.prototype.setPoint.call(this, e, i, o), void 0 !== o && o.shift ? this._correctPoint(
e) : this._correctScaleRatio()
}, e.prototype.setLastPoint = function(e, i) {
var o = this.priceScale();
r.ensureNotNull(o).isLog() || (this._convertPriceFromPercentIfNeeded(e), this._points[
1] = e, this._correctPoint(1), this._convertPriceToPercentIfNeeded(e)), t
.prototype.setLastPoint.call(this, e, i)
}, e.prototype.createPropertiesObject = function(t, e, i) {
return h.createPropertiesObject(t, e, i)
}, e.prototype.getStylesPropertyPage = function() {
return c.propertyPages.LineToolGannComplexStylesPropertyPage
}, e.prototype.isReversed = function() {
return this.properties().reverse.value()
}, e.prototype.levelsCount = function() {
return this.properties().levels.childCount()
}, e.prototype.levels = function() {
var t, e, i = [],
o = this.properties(),
n = o.levels.childCount();
for (t = 0; t < n; t++) e = o.levels[t], i.push({
index: t,
visible: e.visible.value(),
color: e.color.value(),
width: e.width.value()
});
return i
}, e.prototype.fanLinesCount = function() {
return this.properties().fanlines.childCount()
}, e.prototype.fanLines = function() {
var t, e, i = [],
o = this.properties(),
n = o.fanlines.childCount();
for (t = 0; t < n; t++) e = o.fanlines[t], i.push({
index: t,
visible: e.visible.value(),
x: e.x.value(),
y: e.y.value(),
color: e.color.value(),
width: e.width.value()
});
return i
}, e.prototype.arcsCount = function() {
return this.properties().arcs.childCount()
}, e.prototype.arcs = function() {
var t, e, i = [],
o = this.properties(),
n = o.arcs.childCount();
for (t = 0; t < n; t++) e = o.arcs[t], i.push({
index: t,
visible: e.visible.value(),
x: e.x.value(),
y: e.y.value(),
color: e.color.value(),
width: e.width.value()
});
return i
}, e.prototype.arcsBackgroundTransparency = function() {
return this.properties().arcsBackground.transparency.value()
}, e.prototype.isArcsBackgroundFilled = function() {
return this.properties().arcsBackground.fillBackground.value()
}, e.prototype.isLabelsVisible = function() {
return this.properties().showLabels.value()
}, e.prototype.getLabelsStyle = function() {
var t = this.properties(),
e = t.labelsStyle,
i = e.font,
o = e.fontSize,
n = e.bold,
r = e.italic,
s = t.levels.childCount();
return {
textColor: t.levels[s - 1].color.value(),
font: i.value(),
fontSize: o.value(),
bold: n.value(),
italic: r.value()
}
}, e.prototype.getScaleRatioStep = function() {
return 1e-7
}, e.prototype.getScaleRatioFormatter = function() {
return this._scaleRatioFormatter
}, e.prototype.getPriceDiff = function() {
var t, e, i = this.points();
return i.length < 2 ? null : (t = i[0], e = i[1], e.price - t.price)
}, e.prototype.getPercantageDiff = function() {
var t, e, i, o, n, r, s, a = this.points();
return a.length < 2 ? null : (t = a[0], e = a[1], i = this.model(), o = i.mainSeries(),
n = o.priceScale(), r = n.priceRange(), s = o.firstValue(), null === r ||
null == s ? null : r.convertToPercent(e.price, s) - r.convertToPercent(t.price,
s))
}, e.prototype.getIndexDiff = function() {
var t, e, i = this.points();
return i.length < 2 ? null : (t = i[0], e = i[1], e.index - t.index)
}, e.prototype.getScaleRatio = function() {
var t = this.getPriceDiff(),
e = this.getIndexDiff();
return null !== t && null !== e && 0 !== e ? Math.abs(t / e) : null
}, e.prototype._correctScaleRatio = function() {
var t = this.properties(),
e = this.getScaleRatio();
t.scaleRatio.setValue(e)
}, e.prototype._getAdjustedScaleRatio = function() {
var t = this.model().mainSeries().priceScale(),
e = this.model().timeScale();
return l.scaleRatio(e, t)
}, e.prototype._adjustScaleRatio = function(t) {
var e = t.scaleRatio.value();
"" !== e && null !== e || t.scaleRatio.setValue(this._getAdjustedScaleRatio())
}, e.prototype._correctPoint = function(t) {
var e, i, o, n, r, s, a, l;
this._points.length < 2 || null !== (e = this.getIndexDiff()) && (i = this.properties(),
o = i.scaleRatio.value(), null !== o && (n = this._points[t], r = 0 === t ? this
._points[1] : this._points[0], s = n.price - r.price > 0, a = n.index - r
.index > 0, l = s && !a || !s && a ? -1 : 1, 0 === t && (l = -l), n.price =
r.price + l * e * o, this._pointChanged.fire(t)), this.normalizePoints())
}, e.prototype._correctFirstPoint = function() {
this._correctPoint(this.isReversed() ? 0 : 1)
}, e.prototype._handleRestoringFactoryDefaults = function() {
this.properties().scaleRatio.setValue(this._getAdjustedScaleRatio())
}, e.prototype._handleTemplateApplying = function(t) {
"" === t.scaleRatio && (t.scaleRatio = this._getAdjustedScaleRatio())
}, e.prototype._migratePoint = function() {
var t, e;
this.points().length < this.pointsCount() || null !== (t = this._getScreenPoints()) && (
e = this.screenPointToPoint(t[1]), this.setPoint(1, e), this._pointAdded
.unsubscribe(this, this._migratePoint))
}, e.prototype._getScreenPoints = function() {
var t, e, i, o, r, s, a, l, c, h, u, d = this._calcAngle();
return null === d ? null : (t = this.points(), e = t[0], i = t[1], this.isReversed() &&
(u = [i, e], e = u[0], i = u[1]), o = this.pointToScreenPoint(e)[0], r = this
.pointToScreenPoint(i)[0], s = Math.sqrt(Math.pow(o.x - r.x, 2) + Math.pow(o.y -
r.y, 2)), a = new n.Point(Math.cos(d), -Math.sin(d)), l = a.normalized(),
c = l.x < 0 ? -1 : 1, h = l.y < 0 ? -1 : 1, [o.addScaled(a, s), o.add(new n
.Point(5 * s * c, 5 * s * h))])
}, e.prototype._calcAngle = function() {
var t, e = this.points(),
i = e[0],
o = e[1],
n = this.pointToScreenPoint(i)[0],
r = this.pointToScreenPoint(o)[0],
s = r.subtract(n);
return s.length() > 0 ? (s = s.normalized(), t = Math.acos(s.x), s.y > 0 && (t = -t),
t) : null
}, e
}(a.LineDataSource), e.LineToolGannComplex = u, u.prototype.superclass = a.LineDataSource
},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0),
n = i(8), r = i(1), s = i(335), a = i(3), l = function(t) {
function e(e, o) {
var n = t.call(this, e, null == o ? s.createPropertiesObject("linetoolgannfixed") : o) ||
this;
return n._constructor = "LineToolGannFixed", i.e(1).then(function(t) {
var e = i(1157).GannFixedPaneView;
n._setPaneViews([new e(n, n.model())])
}.bind(null, i)).catch(i.oe), n.properties().reverse.subscribe(n, n._reversePoints), n
}
return o.__extends(e, t), e.prototype.pointsCount = function() {
return 2
}, e.prototype.title = function() {
return "Gann Square Fixed"
}, e.prototype.createPropertiesObject = function(t, e, i) {
return s.createPropertiesObject(t, e, i)
}, e.prototype.getStylesPropertyPage = function() {
return a.propertyPages.LineToolGannFixedStylesPropertyPage
}, e.prototype.axisPoints = function() {
var t = this.points(),
e = this.getScreenPoints();
return t.length < 2 || e.length < 2 ? [] : [t[0], this.screenPointToPoint(e[1])]
}, e.prototype.getScreenPoints = function() {
var t, e, i, o, r, s, a, l, c, h, u = this.points();
return u.length < 2 ? [] : null === (t = this._calcAngle()) ? [] : (e = u[0], i = u[1],
o = this.pointToScreenPoint(e)[0], r = this.pointToScreenPoint(i)[0], s = Math
.sqrt(Math.pow(o.x - r.x, 2) + Math.pow(o.y - r.y, 2)), a = new n.Point(Math
.cos(t), -Math.sin(t)), l = a.normalized(), c = l.x < 0 ? -1 : 1, h = l.y <
0 ? -1 : 1, [o.addScaled(a, s), o.add(new n.Point(5 * s * c, 5 * s * h))])
}, e.prototype.levelsCount = function() {
return this.properties().levels.childCount()
}, e.prototype.levels = function() {
var t, e, i = [],
o = this.properties(),
n = o.levels.childCount();
for (t = 0; t < n; t++) e = o.levels[t], i.push({
index: t,
visible: e.visible.value(),
color: e.color.value(),
width: e.width.value()
});
return i
}, e.prototype.fanLinesCount = function() {
return this.properties().fanlines.childCount()
}, e.prototype.fanLines = function() {
var t, e, i = [],
o = this.properties(),
n = o.fanlines.childCount();
for (t = 0; t < n; t++) e = o.fanlines[t], i.push({
index: t,
visible: e.visible.value(),
x: e.x.value(),
y: e.y.value(),
color: e.color.value(),
width: e.width.value()
});
return i
}, e.prototype.arcsCount = function() {
return this.properties().arcs.childCount()
}, e.prototype.arcs = function() {
var t, e, i = [],
o = this.properties(),
n = o.arcs.childCount();
for (t = 0; t < n; t++) e = o.arcs[t], i.push({
index: t,
visible: e.visible.value(),
x: e.x.value(),
y: e.y.value(),
color: e.color.value(),
width: e.width.value()
});
return i
}, e.prototype.arcsBackgroundTransparency = function() {
return this.properties().arcsBackground.transparency.value()
}, e.prototype.isArcsBackgroundFilled = function() {
return this.properties().arcsBackground.fillBackground.value()
}, e.prototype._calcAngle = function() {
var t, e, i, o, n, r, s = this.points();
return s.length < 2 ? null : (t = s[0], e = s[1], i = this.pointToScreenPoint(t)[0], o =
this.pointToScreenPoint(e)[0], n = o.subtract(i), n.length() <= 0 ? null : (n =
n.normalized(), r = Math.acos(n.x), n.y > 0 && (r = -r), r))
}, e.prototype._reversePoints = function() {
var t = this._points,
e = t[0],
i = t[1];
this._points[0] = i, this._points[1] = e, this.normalizePoints(), this.restart()
}, e
}(r.LineDataSource), e.LineToolGannFixed = l, l.prototype.superclass = r.LineDataSource
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolGannFan";
var o = e || this.createPropertiesObject("linetoolgannfan");
n.call(this, t, o), i.e(1).then(function(t) {
var e = i(1158).GannFanPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(21),
s = i(3).propertyPages;
inherit(o, n), o.prototype.pointsCount = function() {
return 2
}, o.prototype.title = function() {
return "Gann Fan"
}, o.prototype.processErase = function(t, e) {
var i = "level" + e,
o = this.properties()[i].visible;
t.setProperty(o, !1, "Erase level line")
}, o.prototype.createPropertiesObject = function(t, e, i) {
return new r(t, e, i, {
range: [1, 9]
})
}, o.prototype.getStylesPropertyPage = function() {
return s.LineToolGannFanStylesPropertyPage
}, e.LineToolGannFan = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolDisjointAngle";
var s = e || new r("linetooldisjointangle");
n.call(this, t, s), this.version = o.version, i.e(1).then(function(t) {
var e = i(1160).DisjointAnglePaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(6).DefaultProperty,
s = i(3).propertyPages;
inherit(o, n), o.version = 1, o.prototype.pointsCount = function() {
return 3
}, o.prototype.title = function() {
return "Disjoint Angle"
}, o.prototype.addPoint = function(t, e) {
return e && e.shift && 2 === this.points().length && this._snapPoint45Degree(t, this.points()[
this.points().length - 2]), n.prototype.addPoint.call(this, t)
}, o.prototype.setLastPoint = function(t, e) {
return e && e.shift && 2 === this.points().length && this._snapPoint45Degree(t, this.points()[
this.points().length - 2]), n.prototype.setLastPoint.call(this, t)
}, o.prototype.setPoint = function(t, e, i) {
var o, r, s, a, l, c = .5 * (this._points[1].price + this._points[2].price);
i && i.shift && 1 === t && (o = 0, this._snapPoint45Degree(e, this.points()[o])), t < 3 && n
.prototype.setPoint.call(this, t, e), 0 !== t && 2 !== t && (1 === t ? (r = this._points[1]
.price - c, this._points[2].price = this._points[1].price - 2 * r) : 3 === t && (s =
this.priceScale(), a = e.price, s.isPercent() && (l = this.ownerSource()
.firstValue(), a = s.priceRange().convertFromPercent(a, l)), r = a - this
._points[2]
.price, this._points[0].price = this._points[1].price - r, this._points[0].index = e
.index))
}, o.prototype.canHasAlert = function() {
return !0
}, o.prototype._getAlertPlots = function() {
var t, e, i, o, n, r, s, a, l, c = this._points[0],
h = this._points[1],
u = [];
return c.index <= h.index ? (u.push(c), u.push(h)) : (u.push(h), u.push(c)), t = this._points[
2], t.time = h.time, t.index = h.index, e = {
price: t.price + (h.price - c.price),
time: c.time,
index: c.index
}, i = [], t.index <= e.index ? (i.push(t), i.push(e)) : (i.push(e), i.push(t)), u[0]
.price > i[0].price ? (o = u, n = i) : i[0].price > u[0].price ? (o = i, n = u) : i[1]
.price > u[1].price ? (o = i, n = u) : (o = u, n = i), a = this.properties().extendLeft
.value(), l = this.properties().extendRight.value(), c.index <= h.index ? (r = a, s = l) : (
r = l, s = a), [this._linePointsToAlertPlot(o, "Upper", r, s), this
._linePointsToAlertPlot(n, "Lower", r, s)
]
}, o.prototype.getInputsPropertyPage = function() {
return null
}, o.prototype.getStylesPropertyPage = function() {
return s.LineToolDisjointAngleStylesPropertyPage
}, e.LineToolDisjointAngle = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolFlatBottom";
var s = e || new r("linetoolflatbottom");
n.call(this, t, s), this.version = o.version,
i.e(1).then(function(t) {
var e = i(1161).FlatBottomPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(6).DefaultProperty,
s = i(3).propertyPages;
inherit(o, n), o.version = 1, o.prototype.pointsCount = function() {
return 3
}, o.prototype.title = function() {
return "Flat Bottom"
}, o.prototype.addPoint = function(t, e) {
return e && e.shift && 2 === this.points().length && this._snapPoint45Degree(t, this.points()[
this.points().length - 2]), n.prototype.addPoint.call(this, t)
}, o.prototype.setLastPoint = function(t, e) {
return e && e.shift && 2 === this.points().length && this._snapPoint45Degree(t, this.points()[
this.points().length - 2]), n.prototype.setLastPoint.call(this, t)
}, o.prototype.setPoint = function(t, e, i) {
if (i && i.shift && 1 === t) {
this._snapPoint45Degree(e, this.points()[0])
}
t < 3 ? n.prototype.setPoint.call(this, t, e) : this._points[0].index = e.index
}, o.prototype.canHasAlert = function() {
return !0
}, o.prototype._getAlertPlots = function() {
var t, e, i, o, n, r, s, a, l, c = this._points[0],
h = this._points[1],
u = [];
return c.index <= h.index ? (u.push(c), u.push(h)) : (u.push(h), u.push(c)), t = this._points[
2], t.time = h.time, t.index = h.index, e = {
price: t.price,
time: c.time,
index: c.index
}, i = [], t.index <= e.index ? (i.push(t), i.push(e)) : (i.push(e), i.push(t)), u[0]
.price > i[0].price ? (o = u, n = i) : i[0].price > u[0].price ? (o = i, n = u) : i[1]
.price > u[1].price ? (o = i, n = u) : (o = u, n = i), a = this.properties().extendLeft
.value(), l = this.properties().extendRight.value(), c.index <= h.index ? (r = a, s = l) : (
r = l, s = a), [this._linePointsToAlertPlot(o, "Upper", r, s), this
._linePointsToAlertPlot(n, "Lower", a, s)
]
}, o.prototype.getInputsPropertyPage = function() {
return null
}, o.prototype.getStylesPropertyPage = function() {
return s.LineToolFlatBottomStylesPropertyPage
}, e.LineToolFlatBottom = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolIcon";
var s = e || new r("linetoolicon");
s.addExclusion("angle"), s.addExclusion("scale"), n.call(this, t, s), this.version = o.version, i.e(
1).then(function(t) {
var e = i(1162).IconPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(6).DefaultProperty,
s = i(3).propertyPages;
inherit(o, n), o.version = 1, o.anchorLimit = 80, o.prototype.getAnchorLimit = function() {
return o.anchorLimit
}, o.prototype.pointsCount = function() {
return 1
}, o.prototype.title = function() {
return "Icon"
}, o.prototype.startChanging = function(t, e) {
var i, r;
n.prototype.startChanging.call(this, t, e), i = this.properties(), r = 65536 * i.icon.value() +
i.size.value(), this._startChangeWidth = this._paneViews[0]._cache[r], i.size.value() < o
.anchorLimit ? this._sizeScale = i.size.value() / o.anchorLimit : this._sizeScale = 1, this
._origScale = i.scale.value(), this._startChangeWidth * this._origScale < o.anchorLimit ?
this._resizeRatio = this._startChangeWidth / o.anchorLimit : this._resizeRatio = 1
}, o.prototype.endChanging = function() {
n.prototype.endChanging.call(this), delete this._startChangeWidth, delete this._sizeScale,
delete this._resizeRatio
}, o.prototype.setPoint = function(t, e, i) {
var n, r, s, a, l, c, h, u, d, p, _ = $.extend({}, e),
f = this.priceScale();
f.isPercent() && (n = this.ownerSource().firstValue(),
_.price = f.priceRange().convertFromPercent(_.price, n)), i && i.shift && this
._properties.snapTo45Degrees && this._snapPoint45Degree(_, this.points()[0]), r = this
.pointToScreenPoint(this.points()[0])[1], s = this.pointToScreenPoint(_)[1], 0 === t ||
1 === t ? (a = s.subtract(r).normalized(), l = 2 * s.subtract(r).length(), l *= this
._sizeScale, this._properties.size.setValue(l), c = -a.x, h = Math.acos(c), Math.asin(a
.y) > 0 && (h = 2 * Math.PI - h), 0 === t && (h += Math.PI), this._properties.angle
.setValue(h)) : (u = this._startChangeWidth, d = s.subtract(r).length(), this
._origScale * u < o.anchorLimit ? (p = o.anchorLimit / 2, this._properties.scale
.setValue(this._origScale * d / p)) : (p = u / 2, this._properties.scale.setValue(
d / p)))
}, o.prototype.getInputsPropertyPage = function() {
return null
}, o.prototype.getStylesPropertyPage = function() {
return s.LineToolIconStylesPropertyPage
}, o.prototype.getSourceIcon = function() {
return {
type: "text",
text: String.fromCharCode(this.properties().icon.value())
}
}, e.LineToolIcon = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolRotatedRectangle";
var o = e || new a("linetoolrotatedrectangle");
s.call(this, t, o), i.e(1).then(function(t) {
var e = i(1163).RotatedRectanglePaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(8).Point,
r = i(44).distanceToLine,
s = i(1).LineDataSource,
a = i(6).DefaultProperty,
l = i(3).propertyPages;
inherit(o, s), o.prototype.startChanging = function(t, e) {
var i, o, n, a;
s.prototype.startChanging.call(this, t, e), 0 !== t && 1 !== t || (i = this._paneViews[0], o = i
._points[0], n = i._points[1], a = i._points[2], this._distance = r(o, n, a).distance)
}, o.prototype.setPoint = function(t, e, i) {
var o, r, a, l, c, h, u;
s.prototype.setPoint.call(this, t, e, i), 0 !== t && 1 !== t || (o = this._paneViews[0], o
.update(), r = o._points[0], a = o._points[1], l = a.subtract(r), c = new n(l.y, -l.x)
.normalized().scaled(this._distance), h = r.add(c), u = this.screenPointToPoint(h), this
._points[2] = u)
}, o.prototype.endChanging = function() {
delete this._distance
}, o.prototype.pointsCount = function() {
return 3
}, o.prototype.title = function() {
return "Rotated Rectangle"
}, o.prototype.getInputsPropertyPage = function() {
return null
}, o.prototype.getStylesPropertyPage = function() {
return l.LineToolRectangleStylesPropertyPage
}, e.LineToolRotatedRectangle = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolFibSpiral";
var o = e || new r("linetoolfibspiral");
n.call(this, t, o), i.e(1).then(function(t) {
var e = i(1164).FibSpiralPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(6).DefaultProperty,
s = i(3).propertyPages;
inherit(o, n), o.prototype.pointsCount = function() {
return 2
}, o.prototype.title = function() {
return "Fib Spiral"
}, o.prototype.getStylesPropertyPage = function() {
return s.LineToolFibSpiralStylesPropertyPage
}, e.LineToolFibSpiral = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolHeadAndShoulders";
var o = e || new r("linetoolheadandshoulders");
n.call(this, t, o), i.e(1).then(function(t) {
var e = i(1165).LineToolHeadAndShouldersPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(6).DefaultProperty,
s = i(3).propertyPages;
inherit(o, n), o.prototype.pointsCount = function() {
return 7
}, o.prototype.title = function() {
return "Head and Shoulders"
}, o.prototype.getStylesPropertyPage = function() {
return s.LineToolLineTool5PointsPatternStylesPropertyPage
}, e.LineToolHeadAndShoulders = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolTriangle";
var o = e || new r("linetooltriangle");
n.call(this, t, o), i.e(1).then(function(t) {
var e = i(1166).TrianglePaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(6).DefaultProperty,
s = i(3).propertyPages;
inherit(o, n), o.prototype.pointsCount = function() {
return 3
}, o.prototype.title = function() {
return "Triangle"
}, o.prototype.getStylesPropertyPage = function() {
return s.LineToolTriangleStylesPropertyPage
}, e.LineToolTriangle = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolTrianglePattern";
var o = e || new r("linetooltrianglepattern");
n.call(this, t, o), i.e(1).then(function(t) {
var e = i(1167).LineToolTrianglePatternPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(6).DefaultProperty,
s = i(3).propertyPages;
inherit(o, n), o.prototype.pointsCount = function() {
return 4
}, o.prototype.title = function() {
return "Triangle Pattern"
}, o.prototype.getStylesPropertyPage = function() {
return s.LineToolTrianglePatternStylesPropertyPage
}, e.LineToolTrianglePattern = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolThreeDrivers";
var o = e || new r("linetoolthreedrivers");
n.call(this, t, o), i.e(1).then(function(t) {
var e = i(1168).LineToolThreeDrivesPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(6).DefaultProperty,
s = i(3).propertyPages;
inherit(o, n), o.prototype.pointsCount = function() {
return 7
}, o.prototype.title = function() {
return "Three Drives Pattern"
}, o.prototype.getStylesPropertyPage = function() {
return s.LineToolABCDPatternStylesPropertyPage
}, e.LineToolThreeDrivers = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolABCD";
var o = e || new r("linetoolabcd");
n.call(this, t, o), i.e(1).then(function(t) {
var e = i(1169).ABCDPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(6).DefaultProperty,
s = i(127).DateTimeFormatter,
a = i(3).propertyPages;
inherit(o, n), o.prototype.pointsCount = function() {
return 4
}, o.prototype.title = function() {
return "ABCD Pattern"
}, o.prototype._tooltipFieldsHash = {
time0: {
title: "Date 1",
value: null
},
price0: {
title: "Price 1",
value: null
},
time1: {
title: "Date 2",
value: null
},
price1: {
title: "Price 2",
value: null
},
time2: {
title: "Date 3",
value: null
},
price2: {
title: "Price 3",
value: null
},
time3: {
title: "Date 4",
value: null
},
price3: {
title: "Price 4",
value: null
}
}, o.prototype._updateTooltip = function() {
var t, e, i, o, n = this._tooltipFieldsHash,
r = this.points().m_values;
r[0] && (t = this._model.timeScale().indexToUserTime(r[0].index),
n.time0.value = t ? new s(this._model.mainSeries().isDWM()).format(t) : 0, n.price0
.value = this._model.mainSeries()._formatter.format(r[0].price)), r[1] && (e = this
._model.timeScale().indexToUserTime(r[1].index), n.time1.value = e ? new s(this._model
.mainSeries().isDWM()).format(e) : 0, n.price1.value = this._model.mainSeries()
._formatter.format(r[1].price)), r[2] && (i = this._model.timeScale().indexToUserTime(r[
2].index), n.time2.value = i ? new s(this._model.mainSeries().isDWM()).format(i) :
0, n.price2.value = this._model.mainSeries()._formatter.format(r[2].price)), r[3] && (
o = this._model.timeScale().indexToUserTime(r[3].index), n.time3.value = o ? new s(this
._model.mainSeries().isDWM()).format(o) : 0, n.price3.value = this._model
.mainSeries()._formatter.format(r[3].price))
}, o.prototype.tooltip = function() {
return this._updateTooltip(), this._formatTooltip()
}, o.prototype.getStylesPropertyPage = function() {
return a.LineToolABCDPatternStylesPropertyPage
}, e.LineToolABCD = o
},
function(t, e, i) {
"use strict";
var o, n, r;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(67), r = function(t) {
function e(e, i) {
var o = t.call(this) || this;
return o._source = e, o._data = i, o
}
return o.__extends(e, t), e.prototype._updateRendererData = function(t) {
var e, i, o;
t.visible = !1, e = this._source.priceScale(), 0 === this._source.points().length ||
null === e || e.isEmpty() || (i = this._data.priceProperty.value(), o = this._data
.colorProperty.value(), t.background = o, t.color = this.generateTextColor(o), t
.coordinate = e.priceToCoordinate(i), t.text = e.formatter().format(i), t
.visible = !0)
}, e
}(n.PriceAxisView), e.LineToolRiskRewardPriceAxisView = r
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolPolyline";
var o;
e ? o = e : (o = new s("linetoolpolyline"), o.filled.setValue(!1)), r.call(this, t, o), o
.addExclusion("filled"), i.e(1).then(function(t) {
var e = i(1171).PolylinePaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(8).Point,
r = i(1).LineDataSource,
s = i(6).DefaultProperty,
a = i(3).propertyPages;
inherit(o, r), o.prototype.pointsCount = function() {
return -1
}, o.prototype.title = function() {
return "Polyline"
}, o.prototype.addPoint = function(t) {
var e, i, o, s, a, l, c, h, u, d, p = this._model.timeScale().indexToCoordinate(t.index),
_ = t.price,
f = null;
if (this.priceScale().isPercent() && (f = this.ownerSource().firstValue()), e = this
.priceScale().priceToCoordinate(_), i = 5, this._points.length > 0) {
if (o = this._points[this._points.length - 1], s = this._model.timeScale()
.indexToCoordinate(o.index), a = o.price, this.priceScale().isPercent() && (a = this
.priceScale().priceRange().convertToPercent(a, f)), l = this.priceScale()
.priceToCoordinate(a), new n(p, e).subtract(new n(s, l)).length() < i) return this
._lastPoint = null, this.normalizePoints(), this.createServerPoints(), !0;
if (c = this._points[0], h = this._model.timeScale().indexToCoordinate(c.index), u = c
.price, this.priceScale().isPercent() && (u = this.priceScale().priceRange()
.convertToPercent(u, f)), d = this.priceScale().priceToCoordinate(u), new n(p, e)
.subtract(new n(h, d)).length() < i) return this._properties.filled.setValue(!0), this
._lastPoint = null, this.normalizePoints(), this.createServerPoints(), !0
}
return r.prototype.addPoint.call(this, t)
}, o.prototype.setPoint = function(t, e) {
var i, o, s, a, l, c;
r.prototype.setPoint.call(this, t, e), this._model.timeScale().isEmpty() || this.priceScale()
.isEmpty() || t !== this._points.length - 1 && 0 !== t || (i = 5, o = this._model
.timeScale().indexToCoordinate(e.index), s = this.priceScale().priceToCoordinate(e
.price), a = t === this._points.length - 1 ? this._points[0] : this._points[this
._points.length - 1], l = this._model.timeScale().indexToCoordinate(a.index), c =
this.priceScale().priceToCoordinate(a.price), new n(o, s).subtract(new n(l, c))
.length() < i && this._properties.filled.setValue(!0))
}, o.prototype.getInputsPropertyPage = function() {
return null
}, o.prototype.getStylesPropertyPage = function() {
return a.LineToolPolylineStylesPropertyPage
}, e.LineToolPolyline = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolPrediction";
var o = e || new s("linetoolprediction");
o.merge({
status: l.AlertStatus.Waiting
}), r.call(this, t, o), i.e(1).then(function(t) {
var e = i(1172).PredictionPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(9).ensureNotNull,
r = i(1).LineDataSource,
s = i(6).DefaultProperty,
a = i(3).propertyPages,
l = i(409);
inherit(o, r), o.prototype.status = function() {
return this._properties.status.value()
}, o.prototype.setStatus = function(t) {
return this._properties.status.setValue(t)
}, o.prototype.pointsCount = function() {
return 2
}, o.prototype.title = function() {
return "Forecast"
}, o.prototype.restorePoints = function(t, e, i) {
r.prototype.restorePoints.call(this, t, e, i), this.checkAlert()
}, o.prototype.checkAlert = function() {
var t, e, i, o;
if (!(this._points.length < 2 || this._model.mainSeries().bars().isEmpty())) {
if (t = this._points[1], this.status()) return void(t.index > this._model.timeScale()
.baseIndex() && this.setStatus(l.AlertStatus.Waiting));
e = this._model.mainSeries().bars().valueAt(t.index), null !== e && (i = this.direction(),
i === l.Direction.Up && e[TradingView.HIGH_PLOT] >= t.price ? this.setStatus(l
.AlertStatus.Success) : i === l.Direction.Down && e[TradingView.LOW_PLOT] <= t
.price ? this.setStatus(l.AlertStatus.Success) : (o = n(this._model.mainSeries()
.bars().lastIndex()), t.index !== o && this.setStatus(l.AlertStatus
.Failure)))
}
}, o.prototype.addPoint = function(t) {
var e = r.prototype.addPoint.call(this, t);
return e && this.checkAlert(), e
}, o.prototype.endChanging = function() {
r.prototype.endChanging.call(this), this.setStatus(l.AlertStatus.Waiting), this.checkAlert()
}, o.prototype.onData = function(t) {
r.prototype.onData.call(this, t), this.checkAlert()
}, o.prototype.endMoving = function() {
r.prototype.endMoving.call(this), this.setStatus(l.AlertStatus.Waiting), this.checkAlert()
}, o.prototype.direction = function() {
var t, e;
return this.points().length < 2 ? l.Direction.Up : (t = this.points()[0], e = this.points()[1],
e.price > t.price ? l.Direction.Up : l.Direction.Down)
}, o.prototype.getStylesPropertyPage = function() {
return a.LineToolPredictionStylesPropertyPage
}, e.LineToolPrediction = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolPriceLabel";
var o = e || new r("linetoolpricelabel");
n.call(this, t, o), i.e(1).then(function(t) {
var e = i(1173).PriceLabelPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(6).DefaultProperty,
s = i(3).propertyPages;
inherit(o, n), o.prototype.pointsCount = function() {
return 1
}, o.prototype.title = function() {
return "Price Label"
}, o.prototype.getStylesPropertyPage = function() {
return s.LineToolPriceLabelStylesPropertyPage
}, e.LineToolPriceLabel = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolBrush";
var o = e || new r("linetoolbrush");
n.call(this, t, o), this._finished = !1, i.e(1).then(function(t) {
var e = i(1175).BrushPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(6).DefaultProperty,
s = i(3).propertyPages;
inherit(o, n), o.prototype.pointsCount = function() {
return -1
}, o.prototype.finished = function() {
return this._finished
}, o.prototype.finish = function() {
this._finished = !0, this._lastPoint = null, this.normalizePoints(), this.createServerPoints()
}, o.prototype.title = function() {
return "Brush"
}, o.prototype.percentDistance = function(t, e) {
return Math.abs((e - t) / t)
}, o.prototype.addPoint = function(t) {
var e, i, o;
return !!this._finished || (this._lastPoint = null, this._points.length > 0 && (e = this
._points[this._points.length - 1], i = this.pointToScreenPoint(e)[1], o = this
.pointToScreenPoint(t)[1], o.subtract(i).length() < 2) ? this._finished : (n
.prototype.addPoint.call(this, t), this._finished))
}, o.prototype.restorePoints = function(t, e, i) {
n.prototype.restorePoints.call(this, t, e, i), this._finished = !0
}, o.prototype.getInputsPropertyPage = function() {
return null
}, o.prototype.getStylesPropertyPage = function() {
return s.LineToolBrushStylesPropertyPage
}, e.LineToolBrush = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolArc";
var n = e || new d("linetoolarc");
u.call(this, t, n), this.version = o.version, i.e(1).then(function(t) {
var e = i(1176).ArcPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(8).Point,
r = i(44).distanceToLine,
s = i(382),
a = s.rotationMatrix,
l = s.scalingMatrix,
c = s.translationMatrix,
h = s.transformPoint,
u = i(1).LineDataSource,
d = i(6).DefaultProperty,
p = i(3).propertyPages;
inherit(o, u), o.prototype.startChanging = function(t, e) {
var i, o, s, a, l, c, h;
u.prototype.startChanging.call(this, t, e), 0 !== t && 1 !== t || (i = this.pointToScreenPoint(
this._points[0])[0], o = this.pointToScreenPoint(this._points[1])[0], s = this
.pointToScreenPoint(this._points[2])[0], this._dist = r(i, o, s).distance, a = o
.subtract(i), l = new n(-a.y, a.x), c = i.add(o).scaled(.5), h = s.subtract(c), h
.dotProduct(l) < 0 && (this._dist = -this._dist))
}, o.prototype.pointsCount = function() {
return 3
}, o.prototype.title = function() {
return "Arc"
}, o.prototype.setPoint = function(t, e) {
var i, o, s, u, d, p, _, f, m, g, v, y, b, S = $.extend({}, e),
w = this.pointToScreenPoint(this._points[0])[0],
T = this.pointToScreenPoint(this._points[1])[0],
C = this.pointToScreenPoint(this._points[2])[0],
x = this.priceScale();
switch (x.isPercent() && (i = this.ownerSource().firstValue(), S.price = x.priceRange()
.convertFromPercent(S.price, i)), t) {
case 0:
w = this.pointToScreenPoint(S)[0], o = T.subtract(w),
s = w.add(T).scaled(.5), u = new n(-o.y, o.x), u = u.normalized(), C = s.add(u
.scaled(this._dist)), C = this.screenPointToPoint(C), this._points[0] = S, this
._points[2] = C;
break;
case 1:
d = r(w, T, C).distance, T = this.pointToScreenPoint(S)[0], o = T.subtract(w), s = w
.add(T).scaled(.5), u = new n(-o.y, o.x), u = u.normalized(), C = s.add(u.scaled(
this._dist)), C = this.screenPointToPoint(C), this._points[1] = S, this._points[
2] = C;
break;
case 2:
S = this.pointToScreenPoint(S)[0], d = r(w, T, S).distance, o = T.subtract(w), s = w
.add(T).scaled(.5), u = new n(-o.y, o.x), u = u.normalized(), C = s.add(u.scaled(
d)), p = s.add(u.scaled(-d)), _ = o.length(), f = o.x / _, m = o.y / _, g = Math
.acos(f), m < 0 && (g = -g), v = c(-s.x, -s.y), S = h(v, S), y = h(v, C), v = a(-g),
S = h(v, S), y = h(v, y), v = l(1, _ / (2 * d)), S = h(v, S), y = h(v, y), b = S.y *
y.y >= 0 ? new n(C.x, C.y) : new n(p.x, p.y), b = this.screenPointToPoint(b), this
._points[2] = b
}
this.normalizePoints()
}, o.version = 2, o.prototype.migrateVersion = function(t, e, i) {
var o, n;
1 === t && 2 === this._points.length && (o = (2 * this._points[0].price + 3 * this._points[1]
.price) / 5, this._points.append({
price: o,
index: this._points[1].index
})), 1 === t && 2 === this._timePoint.length && (o = (2 * this._timePoint[0].price + 3 *
this._timePoint[1].price) / 5, n = {
price: o,
offset: this._timePoint[1].offset,
time_t: this._timePoint[1].time_t
}, this._timePoint.append(n))
}, o.prototype.getInputsPropertyPage = function() {
return null
}, o.prototype.getStylesPropertyPage = function() {
return p.LineToolArcStylesPropertyPage
}, e.LineToolArc = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolCallout";
var o = e || new s("linetoolcallout");
n.call(this, t, o), this._barOffset = 0, this._timeScale = t.timeScale(), i.e(1).then(function(t) {
var e = i(1177).CalloutPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(46).DataSource,
s = i(6).DefaultProperty,
a = i(3).propertyPages,
l = i(410).CalloutConsts;
inherit(o, n), o.prototype.pointsCount = function() {
return 2
}, o.prototype.title = function() {
return "Callout"
}, o.prototype.correctPoints = function(t) {
var e = this._currentMovingPoint.index - this._startMovingPoint.index,
i = this._currentMovingPoint.price - this._startMovingPoint.price,
o = t[1];
o.index += e, o.price += i, t[1] = o
}, o.prototype.addPoint = function(t) {
var e = n.prototype.addPoint.call(this, t);
return e && this._calculateBarOffset(), e
}, o.prototype._calculateBarOffset = function() {
this.points().length > 1 && (this._barOffset = this.points()[1].index - this.points()[0].index)
}, o.prototype.setLastPoint = function(t) {
n.prototype.setLastPoint.call(this, t), 2 === this.points().length && this._calculateBarOffset()
}, o.prototype.setPoint = function(t, e) {
var i, o, r, s, a;
switch (t) {
case 0:
n.prototype.setPoint.call(this, t, e), this._calculateBarOffset();
break;
case 1:
if (i = this.properties(), !i.wordWrapWidth) return;
if (o = this._points, r = this._dragStartLeftEdgeIndex, s = Math.round((e.index - r) /
2), isFinite(r) && isFinite(s)) {
if (o[1] = {
index: r + s,
price: o[1].price
}, this._calculateBarOffset(), this.normalizePoints(), a = this._timeScale
.indexToCoordinate(r + 2 * s) - this._timeScale.indexToCoordinate(r) - l
.RoundRadius - l.TextMargins, !isFinite(a)) return;
i.wordWrapWidth.setValue(Math.max(l.MinWidth, a));
break
}
o[1] = e, this._calculateBarOffset(), this.normalizePoints()
}
}, o.prototype.startDragPoint = function(t, e) {
var i = this.properties();
1 === t && i.wordWrap && i.wordWrap.value() && (this._dragStartLeftEdgeIndex = 2 * this
.points()[1].index - e.index)
}, o.prototype.move = function(t) {
n.prototype.move.call(this, t), this._calculateBarOffset()
}, o.prototype.state = function(t) {
var e = n.prototype.state.call(this, t);
return e.barOffset = this._barOffset, e
}, o.prototype.restoreData = function(t) {
t.barOffset ? this._barOffset = t.barOffset : this._calculateBarOffset(), this
._calculatePoint2()
}, o.prototype.setPriceScale = function(t) {
r.prototype.setPriceScale.call(this, t), t && t.priceRange() && this._calculatePoint2()
}, o.prototype._calculatePoint2 = function() {
var t, e;
this._model.lineBeingEdited() !== this && this._model.sourceBeingMoved() !== this && (this
._points.length < 2 || (t = this.points()[0], e = this.points()[1], this._points[1] = {
price: e.price,
index: t.index + this._barOffset
}))
}, o.prototype.getStylesPropertyPage = function() {
return a.LineToolCalloutStylesPropertyPage
}, e.LineToolCallout = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolBalloon";
var o = e || new r("linetoolballoon");
n.call(this, t, o), i.e(1).then(function(t) {
var e = i(1178).BalloonPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(6).DefaultProperty,
s = i(3).propertyPages;
inherit(o, n), o.prototype.pointsCount = function() {
return 1
}, o.prototype.title = function() {
return "Balloon"
}, o.prototype.getStylesPropertyPage = function() {
return s.LineToolBalloonStylesPropertyPage
}, e.LineToolBalloon = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolHorzLine";
var o = e || new s("linetoolhorzline");
this._priceAxisView = new r(this), n.call(this, t, o), i.e(1).then(function(t) {
var e = i(1179).HorzLinePaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(339).LineToolHorzLinePriceAxisView,
s = i(6).DefaultProperty,
a = i(3).propertyPages;
inherit(o, n), o.prototype.state = function(t) {
var e = n.prototype.state.call(this, t);
return e.points && 0 !== e.points.length && (e.points[0].offset = 0), e
}, o.prototype.pointsCount = function() {
return 1
}, o.prototype.title = function() {
return "Horizontal Line"
}, o.prototype.priceAxisViews = function(t, e) {
return this.isSourceHidden() ? null : e === this.priceScale() && this.properties().showPrice
.value() && this._model.paneForSource(this) === t ? [this._priceAxisView] : null
}, o.prototype.updateAllViews = function() {
n.prototype.updateAllViews.call(this), this._priceAxisView.update()
}, o.prototype.canHasAlert = function() {
return !0
}, o.prototype._getAlertPlots = function() {
return [this.points()[0].price]
}, o.prototype.getInputsPropertyPage = function() {
return a.LineToolHorzLineInputsPropertyPage
}, o.prototype.getStylesPropertyPage = function() {
return a.LineToolHorzLineStylesPropertyPage
}, e.LineToolHorzLine = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolHorzRay";
var o = e || new s("linetoolhorzray");
this._priceAxisView = new r(this), n.call(this, t, o), i.e(1).then(function(t) {
var e = i(1180).HorzRayPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(339).LineToolHorzLinePriceAxisView,
s = i(6).DefaultProperty,
a = i(3).propertyPages;
inherit(o, n), o.prototype.pointsCount = function() {
return 1
}, o.prototype.title = function() {
return "Horizontal Ray"
}, o.prototype.priceAxisViews = function(t, e) {
return this.isSourceHidden() ? null : e === this.priceScale() && this.properties().showPrice
.value() && this._model.paneForSource(this) === t ? [this._priceAxisView] : null
}, o.prototype.updateAllViews = function() {
n.prototype.updateAllViews.call(this), this._priceAxisView.update()
}, o.prototype.canHasAlert = function() {
return !0
}, o.prototype._getAlertPlots = function() {
var t = this._points[0],
e = {
index: t.index + 1,
price: t.price
};
return [this._linePointsToAlertPlot([t, e], null, !1, !0)]
}, o.prototype.getStylesPropertyPage = function() {
return a.LineToolHorzLineStylesPropertyPage
}, e.LineToolHorzRay = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolRectangle";
var o = e || new r("linetoolrectangle");
n.call(this, t, o), i.e(1).then(function(t) {
var e = i(1181).RectanglePaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(6).DefaultProperty,
s = i(3).propertyPages;
inherit(o, n), o.prototype.pointsCount = function() {
return 2
}, o.prototype.title = function() {
return "Rectangle"
}, o.prototype.setPoint = function(t, e, i) {
var o, r, s;
if (t < 2) return void n.prototype.setPoint.call(this, t, e, i);
i && i.shift && this._properties.snapTo45Degrees && (o = this.points()[0], r = this.points()[1],
s = {
price: 2 === t ? o.price : r.price,
index: 2 === t ? r.index : o.index
}, this._snapPoint45Degree(e, s)), this._convertPriceFromPercentIfNeeded(e), 3 === t ? (
this._points[0].price = e.price, this._points[1].index = e.index) : (this._points[1]
.price = e.price, this._points[0].index = e.index), this.normalizePoints()
}, o.prototype.getStylesPropertyPage = function() {
return s.LineToolRectangleStylesPropertyPage
}, e.LineToolRectangle = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolEllipse";
var n = e || new a("linetoolellipse");
s.call(this, t, n), this.version = o.version, i.e(1).then(function(t) {
var e = i(1182).EllipsePaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(8).Point,
r = i(44).distanceToLine,
s = i(1).LineDataSource,
a = i(6).DefaultProperty,
l = i(3).propertyPages;
inherit(o, s), o.prototype.startChanging = function(t, e) {
var i, o, n;
s.prototype.startChanging.call(this, t, e), 0 !== t && 1 !== t || (i = this.pointToScreenPoint(
this._points[0])[0], o = this.pointToScreenPoint(this._points[1])[0], n = this
.pointToScreenPoint(this._points[2])[0], this._dist = r(i, o, n).distance || 0)
}, o.prototype._preparePoint = function(t, e) {
var i = this._preparePointInternal(t, e, !1);
return e && e.shift && this._points[0].index === this._points[1].index && this
._fixVerticalDiameterPoints(this._points[1], this._points[0], i), i
}, o.prototype._preparePointInternal = function(t, e, i) {
var o, r, a, l, c, h, u, d, p, _, f;
if (this._convertPriceFromPercentIfNeeded(t), o = $.extend({}, t), e && e.shift) {
if (r = this.points().length,
!this._fakePointAdded && 3 === r && !i) return o;
(this._fakePointAdded || 2 === r || i) && (this._snapPoint45Degree(t, this._points[0]), this
._fakePointAdded ? this._points[1] = t : i || (this._fakePointAdded = !0, s.prototype
._addPointIntenal.call(this, t)), a = this.pointToScreenPoint(this._points[0])[0],
l = this.pointToScreenPoint(this._points[1])[0], c = l.x - a.x, h = l.y - a.y, u = Math
.sqrt(c * c + h * h) / 2, d = l.subtract(a), p = a.add(l).scaled(.5), _ = new n(-d.y, d
.x), _ = _.normalized(), f = p.add(_.scaled(u)), o = this.screenPointToPoint(f), (
TradingView.isNaN(o.price) || TradingView.isNaN(o.index)) && (o = this
.screenPointToPoint(p)))
} else this._fakePointAdded && (this._points.splice(1, 1), this._fakePointAdded = !1);
return o
}, o.prototype._fixVerticalDiameterPoints = function(t, e, i) {
var o = this.pointToScreenPoint(t)[0],
n = this.pointToScreenPoint(e)[0],
r = this._model.timeScale(),
s = r.indexToCoordinate(t.index),
a = r.indexToCoordinate(i.index),
l = 2 * Math.abs(s - a);
l *= e.price > t.price ? 1 : -1, t.price = this.screenPointToPoint({
x: o.x,
y: n.y + l
}).price
}, o.prototype.addPoint = function(t, e, i) {
var o = s.prototype.addPoint.call(this, t, e, i);
return o && (this._fakePointAdded = !1), o
}, o.prototype.setPoint = function(t, e, i) {
var o, s, a, l, c = $.extend({}, e),
h = this.pointToScreenPoint(this._points[0])[0],
u = this.pointToScreenPoint(this._points[1])[0],
d = this.pointToScreenPoint(this._points[2])[0];
switch (this._convertPriceFromPercentIfNeeded(c), t) {
case 0:
if (i && i.shift) {
this._snapPoint45Degree(c, this._points[1]), this._points[0] = c, this._points[2] =
this._preparePointInternal(this._points[2], i, !0), this._points[0].index ===
this._points[1].index && this._fixVerticalDiameterPoints(this._points[0], this
._points[1], this._points[2]);
break
}
h = this.pointToScreenPoint(c)[0], o = u.subtract(h), s = h.add(u).scaled(.5), a =
new n(-o.y, o.x), a = a.normalized(), d = s.add(a.scaled(this._dist)), d = this
.screenPointToPoint(d), this._points[0] = c, this._points[2] = d;
break;
case 1:
if (i && i.shift) {
this._snapPoint45Degree(c, this._points[0]), this._points[1] = c, this._points[2] =
this._preparePointInternal(this._points[2], i, !0), this._points[0].index ===
this._points[1].index && this._fixVerticalDiameterPoints(this._points[1], this
._points[0], this._points[2]);
break
}
u = this.pointToScreenPoint(c)[0], o = u.subtract(h), s = h.add(u).scaled(.5), a =
new n(-o.y, o.x), a = a.normalized(), d = s.add(a.scaled(this._dist)), d = this
.screenPointToPoint(d), this._points[1] = c, this._points[2] = d;
break;
case 2:
case 3:
c = this.pointToScreenPoint(c)[0], l = r(h, u, c).distance, o = u.subtract(h), s = h
.add(u).scaled(.5), a = new n(-o.y, o.x), a = a.normalized(), d = s.add(a.scaled(
l)), d = this.screenPointToPoint(d), this._points[2] = d
}
this.normalizePoints()
}, o.prototype.pointsCount = function() {
return 3
}, o.prototype.title = function() {
return "Ellipse"
}, o.version = 2, o.prototype.migrateVersion = function(t, e, i) {
var o, n, r;
1 === t && 2 === this._points.length && (o = this._points[0].price, n = .5 * (this._points[0]
.price + this._points[1].price), this._points[0] = {
price: n,
index: this._points[0].index
}, this._points[1] = {
price: n,
index: this._points[1].index
}, this._points.push({
price: o,
index: this._points[0].index
})), 1 === t && 2 === this._timePoint.length && (o = this._timePoint[0].price,
n = .5 * (this._timePoint[0].price + this._timePoint[1].price), this._timePoint[0]
.price = n, this._timePoint[1].price = n, r = {
price: o,
offset: this._timePoint[0].offset,
time_t: this._timePoint[0].time_t
}, this._timePoint.push(r))
}, o.prototype.getInputsPropertyPage = function() {
return null
}, o.prototype.getStylesPropertyPage = function() {
return l.LineToolEllipseStylesPropertyPage
}, e.LineToolEllipse = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolTimeCycles";
var o;
o = e || new r("linetooltimecycles"), n.call(this, t, o), i.e(1).then(function(t) {
var e = i(1183).TimeCyclesPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(6).DefaultProperty,
s = i(3).propertyPages;
inherit(o, n), o.prototype.pointsCount = function() {
return 2
}, o.prototype.title = function() {
return "Time Cycles"
}, o.prototype.setPoint = function(t, e, i) {
var o, n = $.extend({}, e),
r = this._points[0],
s = this._points[1],
a = this.priceScale();
a.isPercent() && (o = this.ownerSource().firstValue(), n.price = a.priceRange()
.convertFromPercent(n.price, o)), r.price = n.price, s.price = n.price, this._points[
t] = n, this.normalizePoints()
}, o.prototype.addPoint = function(t, e, i) {
var o, r, s = n.prototype.addPoint.call(this, t, e, !0);
return s && (o = this._points[0], r = this._points[1], r.price = o.price, i || (this
.normalizePoints(), this.createServerPoints())), s
}, o.prototype.getStylesPropertyPage = function() {
return s.LineToolTimeCyclesPropertyPage
}, e.LineToolTimeCycles = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolSineLine";
var o;
o = e || new r("linetoolsineline"), n.call(this, t, o), i.e(1).then(function(t) {
var e = i(1184).SineLinePaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(6).DefaultProperty,
s = i(3).propertyPages;
inherit(o, n), o.prototype.pointsCount = function() {
return 2
}, o.prototype.title = function() {
return "Sine Line"
}, o.prototype.getStylesPropertyPage = function() {
return s.LineToolTimeCyclesPropertyPage
}, e.LineToolSineLine = o
},
function(t, e, i) {
"use strict";
function o(t, e, i) {
this._source = t, this._index = e, this._bars = i || []
}
function n(t, e, i) {
this._source = t, l.call(this, "linetoolghostfeed", e, i)
}
function r(t, e, o) {
var s, l;
this._constructor = "LineToolGhostFeed", e ? (s = e, s._source = this) : s = new n(this), o || (l =
Math.round(this.calculateATR(t)), s.averageHL.setValue(l)), a.call(this, t, s), this
._segments = [], s.averageHL.listeners().subscribe(this, r.prototype.regenerate), s.variance
.listeners().subscribe(this, r.prototype.regenerate), s.points || s.addProperty("points"), this
._currentAverageHL = this._properties.averageHL.value(), this._currentVariance = this
._properties.variance.value(), this._currentInterval = t.mainSeries().interval(), i.e(1).then(
function(t) {
var e = i(1185).GhostFeedPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var s = i(54).sign,
a = i(1).LineDataSource,
l = i(6).DefaultProperty,
c = i(3).propertyPages;
o.prototype.setBars = function(t) {
this._bars = t || []
}, o.prototype.clone = function(t) {
return new o(t, this._index, TradingView.clone(this._bars))
},
o.prototype.createBar = function() {
var t, e, i, o, n, r = this._source.properties().averageHL.value(),
s = this._source.properties().variance.value() / 100,
a = this._source._model.mainSeries().base(),
l = Math.random(),
c = r * (1 - 2 * l) * s;
return l = Math.random(), t = r * (1 + (.5 - l) * s), e = c - t / 2, i = e + t, o = e + Math
.random() * t, n = e + Math.random() * t, {
o: o / a,
h: i / a,
l: e / a,
c: n / a
}
}, o.prototype.generate = function() {
var t, e, i, o, n, r;
if (this._bars = [], t = this._source.points(), e = t[this._index], i = t[this._index + 1], e &&
i && e.index !== i.index)
for (this._avgHL = this._source.properties().averageHL.value(), this._variance = this
._source.properties().variance.value() / 100, o = this._index ? e.index + 1 : e.index,
n = s(i.index - e.index), r = o; r !== i.index; r += n) this._bars.push(this
.createBar())
}, o.prototype.bars = function() {
return this._bars
}, o.prototype.setSize = function(t) {
if (t < this._bars.length) this._bars.splice(t, this._bars.length - t);
else
for (; this._bars.length < t;) this._bars.push(this.createBar())
}, inherit(n, l), n.prototype.restoreFactoryDefaults = function() {
l.prototype.restoreFactoryDefaults.call(this);
var t = Math.round(this._source.calculateATR());
this.averageHL.setValue(t)
}, inherit(r, a), r.prototype.createPropertiesObject = function(t, e, i) {
return new n(null, e, i)
}, r.prototype.regenerate = function() {
this._currentAverageHL = this._properties.averageHL.value(), this._currentVariance = this
._properties.variance.value(), this._segments.forEach(function(t) {
t.generate()
}), this.updateAllViews(), this._model.updateSource(this)
}, r.prototype.propertiesChanged = function() {
a.prototype.propertiesChanged.call(this), this._currentAverageHL === this._properties.averageHL
.value() && this._currentVariance === this._properties.variance.value() || this.regenerate()
}, r.prototype.pointsCount = function() {
return -1
}, r.prototype.title = function() {
return "Ghost Feed"
}, r.prototype.segmentBars = function(t) {
return this._segments[t].bars()
}, r.prototype.segments = function() {
return this._segments
}, r.prototype.generateBars = function(t) {
this._segments.length <= t && this._segments.push(new o(this, t)), this._segments[t].generate()
}, r.prototype.addPoint = function(t) {
var e, i, o;
if (this._points.length > 0 && (e = this._points[this._points.length - 1], e.index === t
.index)) {
for (this._lastPoint = null, this.normalizePoints(), this.createServerPoints(), i = 0; i <
this._points.length; i++) this._createPointProperty(i);
return !0
}
return o = a.prototype.addPoint.call(this, t), this._finished && (this._lastPoint = null), this
._points.length > 1 && this.generateBars(this._points.length - 2), o || this._finished
}, r.prototype.finish = function() {
this._finished = !0, this._lastPoint = null, this.normalizePoints(), this.createServerPoints()
}, r.prototype.setPoint = function(t, e, i) {
var o, n, r;
a.prototype.setPoint.call(this, t, e, i), t > 0 && (o = this.points()[t - 1], n = e.index - o
.index, this._segments[t - 1].setSize(Math.abs(n))), t < this.points().length - 1 && (
r = this.points()[t + 1], n = r.index - e.index, this._segments[t].setSize(Math.abs(n)))
}, r.prototype.state = function(t) {
var e = a.prototype.state.call(this, t);
return e.segments = this._segments.map(function(t) {
return {
bars: t.bars()
}
}), e
}, r.prototype.restoreData = function(t) {
var e = this;
t.segments && (this._segments = t.segments.map(function(t, i) {
return new o(e, i, [].concat(t.bars))
})), this._currentAverageHL = this._properties.averageHL.value(), this._currentVariance =
this._properties.variance.value()
}, r.prototype.onData = function(t) {
if (a.prototype.onData.call(this, t), 0 === this.properties().points._childs.length)
for (var e = 0; e < this._points.length; e++) this._createPointProperty(e);
this._currentInterval !== this._model.mainSeries().interval() && (this.regenerate(), this
._currentInterval = this._model.mainSeries().interval())
}, r.prototype.cloneData = function(t) {
var e = this;
this._segments = t._segments.map(function(t) {
return t.clone(e)
})
}, r.prototype.calculateATR = function(t) {
var e, i = (void 0 !== t ? t : this._model).mainSeries(),
o = [];
return i.bars().each(function(t, e) {
o.push(e[TradingView.HIGH_PLOT] - e[TradingView.LOW_PLOT])
}), e = 0 === o.length ? 0 : o.reduce(function(t, e) {
return t + e
}, 0) / o.length, e *= i.base()
}, r.prototype.getInputsPropertyPage = function() {
return c.LineToolGhostFeedInputsPropertyPage
}, r.prototype.getStylesPropertyPage = function() {
return c.LineToolGhostFeedStylesPropertyPage
}, e.LineToolGhostFeed = r
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolBezierQuadro";
var o;
o = e || new r("linetoolbezierquadro"), n.call(this, t, o), i.e(1).then(function(t) {
var e = i(1186).BezierQuadroPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(6).DefaultProperty,
s = i(3).propertyPages;
inherit(o, n), o.prototype.pointsCount = function() {
return 2
}, o.prototype.title = function() {
return "Curve"
}, o.prototype.controlPoint = function() {
var t = this.pointToScreenPoint(this.points()[0])[0],
e = this.pointToScreenPoint(this.points()[1])[0],
i = e.subtract(t).scaled(.5),
o = i.transposed().scaled(.3),
n = t.add(e).scaled(.5),
r = n.add(o);
return this.screenPointToPoint(r)
}, o.prototype.setLastPoint = function(t, e) {
n.prototype.setLastPoint.call(this, t, e), this._controlPoint = this.controlPoint()
}, o.prototype.addPoint = function(t, e, i) {
var o, r = n.prototype.addPoint.call(this, t, e, !0);
return r && (o = this.controlPoint(), this._points.push(o), delete this._controlPoint, i || (
this.normalizePoints(), this.createServerPoints()), this._createPointProperty(2)), r
}, o.prototype.restorePoints = function(t, e, i) {
n.prototype.restorePoints.call(this, t, e, i), this._createPointProperty(2)
}, o.prototype.getStylesPropertyPage = function() {
return s.LineToolBezierStylesPropertyPage
}, e.LineToolBezierQuadro = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolBezierCubic";
var o;
o = e || new r("linetoolbeziercubic"), n.call(this, t, o), i.e(1).then(function(t) {
var e = i(1187).BezierCubicPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(6).DefaultProperty,
s = i(3).propertyPages;
inherit(o, n), o.prototype.pointsCount = function() {
return 2
}, o.prototype.title = function() {
return "Double Curve"
}, o.prototype.controlPoints = function() {
var t = this.pointToScreenPoint(this.points()[0])[0],
e = this.pointToScreenPoint(this.points()[1])[0],
i = e.subtract(t).scaled(.5),
o = i.transposed().scaled(.3),
n = t.add(e).scaled(.33),
r = t.add(e).scaled(.67),
s = n.add(o),
a = r.subtract(o);
return [this.screenPointToPoint(s), this.screenPointToPoint(a)]
}, o.prototype.setLastPoint = function(t, e) {
n.prototype.setLastPoint.call(this, t, e), this._controlPoints = this.controlPoints()
}, o.prototype.addPoint = function(t, e, i) {
var o, r = n.prototype.addPoint.call(this, t, e, !0);
return r && (o = this.controlPoints(), delete this._controlPoints, this._points.push(o[0]), this
._points.push(o[1]), i || (this.normalizePoints(), this.createServerPoints()), this
._createPointProperty(2), this._createPointProperty(3)), r
}, o.prototype.restorePoints = function(t, e, i) {
n.prototype.restorePoints.call(this, t, e, i), this._createPointProperty(2), this
._createPointProperty(3)
}, o.prototype.getStylesPropertyPage = function() {
return s.LineToolBezierStylesPropertyPage
}, e.LineToolBezierCubic = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolArrow";
var i = e || new r("linetoolarrow");
n.call(this, t, i)
}
var n = i(159).LineToolTrendLine,
r = i(6).DefaultProperty;
inherit(o, n), o.prototype.title = function() {
return "Arrow"
}, e.LineToolArrow = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolRay";
var i = e || new r("linetoolray");
n.call(this, t, i)
}
var n = i(159).LineToolTrendLine,
r = i(6).DefaultProperty;
inherit(o, n), o.prototype.title = function() {
return "Ray"
}, e.LineToolRay = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolExtended";
var i = e || new r("linetoolextended");
n.call(this, t, i)
}
var n = i(159).LineToolTrendLine,
r = i(6).DefaultProperty;
inherit(o, n), o.prototype.title = function() {
return "Extended Line"
}, e.LineToolExtended = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
var i = e || this.createPropertiesObject("linetoolschiffpitchfork");
r.call(this, t, i), this._constructor = "LineToolSchiffPitchfork"
}
var n = i(21),
r = i(161).LineToolPitchfork;
inherit(o, r), o.prototype.title = function() {
return $.t("Modified Schiff Pitchfork")
}, o.prototype.createPropertiesObject = function(t, e, i) {
return new n(t, e, i, {
range: [0, 8]
})
}, e.LineToolSchiffPitchfork = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
var i = e || this.createPropertiesObject("linetoolschiffpitchfork2");
r.call(this, t, i), this._constructor = "LineToolSchiffPitchfork2"
}
var n = i(21),
r = i(161).LineToolPitchfork;
inherit(o, r), o.prototype.title = function() {
return $.t("Schiff Pitchfork")
}, o.prototype.createPropertiesObject = function(t, e, i) {
return new n(t, e, i, {
range: [0, 8]
})
}, e.LineToolSchiffPitchfork2 = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
var i = e || this.createPropertiesObject("linetoolinsidepitchfork");
r.call(this, t, i), this._constructor = "LineToolInsidePitchfork"
}
var n = i(21),
r = i(161).LineToolPitchfork;
inherit(o, r), o.prototype.title = function() {
return $.t("Inside Pitchfork")
}, o.prototype.createPropertiesObject = function(t, e, i) {
return new n(t, e, i, {
range: [0, 8]
})
}, e.LineToolInsidePitchfork = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolFlagMark";
var o = e || new s("linetoolflagmark");
r.call(this, t, o), i.e(1).then(function(e) {
var o = i(407).MarkPaneView,
r = new o(this, t, this.image, 25, 25, -8, -21);
r.setAnchors(new n(0, 0)), this._setPaneViews([r])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(8).Point,
r = i(1).LineDataSource,
s = i(6).DefaultProperty;
inherit(o, r), o.prototype.image = new Image, o.prototype.image.src =
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAAsElEQVR4AWMYWcDExOS/YUd4hWF7+H90bNAePpO2liDwJTxyi2htyVXLvlBOWlry2bAtVIumwWXQERFF4zgJ20iPiP8JDCpLeqSuJ6ZdoRJ0SMIRx7QbQtmItgSXnGFbRCzMEnIzK8ISWgL6WzJqibGxsYaFhYUC7SxBWMQPNMjazMxMjebBZWhoKAq00NHc3FyL5nFiaWkpDTTYz8jISI/mEW9qaqoExGFgS+gFRgEAaE0hWxrw50oAAAAASUVORK5CYII=",
o.prototype.pointsCount = function() {
return 1
}, o.prototype.title = function() {
return "Flag Mark"
}, o.prototype.version = 2, e.LineToolFlagMark = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._constructor = "LineToolCypherPattern";
var o = e || new r("linetoolcypherpattern");
n.call(this, t, o), i.e(1).then(function(t) {
var e = i(1188).CypherPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var n = i(1).LineDataSource,
r = i(6).DefaultProperty,
s = i(336).LineTool5PointsPattern;
inherit(o, s), e.LineToolCypherPattern = o
},
function(t, e, i) {
"use strict";
(function(t) {
function o(t) {
this._line = t, this._data = {
bodyText: "position",
quantityText: "0"
}, this._closeEnabled = !0
}
function n(t, e) {
this._adapter = new o(this), this._constructor = "LineToolPosition";
var n = e || new c("linetoolposition");
r.call(this, t, n), i.e(1).then(function(t) {
var e = i(1189).PositionPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var r = i(224),
s = i(1).LineDataSource,
a = i(221).LineToolPriceAxisView,
l = i(170),
c = i(6).DefaultProperty;
o.prototype.getPrice = function() {
return this._line.points().length > 0 ? this._line.points()[0].price : this._line
._timePoint.length > 0 ? this._line._timePoint[0].price : void 0
}, o.prototype.setPrice = function(t) {
if (this._line.points().length > 0) {
var e = this._line.points()[0];
e.price = t, this._line._points[0] = e, this._line.normalizePoints(), this._line
.updateAllViewsAndRedraw()
}
return this._line._timePoint.length > 0 && (this._line._timePoint[0].price = t), this
}, o.prototype.getText = function() {
return this._data.bodyText
}, o.prototype.setText = function(t) {
return this._data.bodyText = t || "", this._line.updateAllViewsAndRedraw(), this
}, o.prototype.setTooltip = function(t) {
return null == t ? t = "" : t += "", this._line.properties().tooltip.setValue(t), this
}, o.prototype.getTooltip = function() {
return this._line.properties().tooltip.value()
}, o.prototype.getQuantity = function() {
return this._data.quantityText
}, o.prototype.setQuantity = function(t) {
return this._data.quantityText = t || "", this._line.updateAllViewsAndRedraw(), this
}, o.prototype.getExtendLeft = function() {
var t = this._line.properties().extendLeft.value();
return "inherit" === t ? this._line._model.properties().tradingProperties.extendLeft
.value() : t
}, o.prototype.setExtendLeft = function(t) {
return this._line.properties().extendLeft.setValue(t), this
}, o.prototype.getLineLength = function() {
var t = this._line.properties().lineLength.value();
return "inherit" === t ? this._line._model.properties().tradingProperties.lineLength
.value() : t
}, o.prototype.setLineLength = function(t) {
return this._line.properties().lineLength.setValue(Math.max(0, Math.min(t, 100))), this
}, o.prototype.getLineColor = function() {
return l.getColorFromProperties(this._line.properties().lineColor, this._line
.properties().lineTransparency)
}, o.prototype.setLineColor = function(t) {
return l.setColorToProperties(t, this._line.properties().lineColor, this._line
.properties().lineTransparency), this
}, o.prototype.getLineStyle = function() {
var t = this._line.properties().lineStyle.value();
return "inherit" === t ? this._line._model.properties().tradingProperties.lineStyle
.value() : t
}, o.prototype.setLineStyle = function(t) {
return this._line.properties().lineStyle.setValue(t), this
}, o.prototype.getLineWidth = function() {
var t = this._line.properties().lineWidth.value();
return "inherit" === t ? this._line._model.properties().tradingProperties.lineWidth
.value() : t
}, o.prototype.setLineWidth = function(t) {
return this._line.properties().lineWidth.setValue(t), this
}, o.prototype.getBodyBorderColor = function() {
return l.getColorFromProperties(this._line.properties().bodyBorderColor, this._line
.properties().bodyBorderTransparency)
}, o.prototype.setBodyBorderColor = function(t) {
return l.setColorToProperties(t, this._line.properties().bodyBorderColor, this._line
.properties().bodyBorderTransparency), this
}, o.prototype.getBodyBackgroundColor = function() {
return l.getColorFromProperties(this._line.properties().bodyBackgroundColor, this._line
.properties().bodyBackgroundTransparency)
}, o.prototype.setBodyBackgroundColor = function(t) {
return l.setColorToProperties(t, this._line.properties().bodyBackgroundColor, this._line
.properties().bodyBackgroundTransparency), this
}, o.prototype.getBodyTextColor = function() {
return l.getColorFromProperties(this._line.properties().bodyTextColor, this._line
.properties().bodyTextTransparency)
}, o.prototype.setBodyTextColor = function(t) {
return l.setColorToProperties(t, this._line.properties().bodyTextColor, this._line
.properties().bodyTextTransparency), this
}, o.prototype.getBodyFont = function() {
return l.getFontFromProperties(this._line.properties().bodyFontFamily, this._line
.properties().bodyFontSize, this._line.properties().bodyFontBold, this._line
.properties().bodyFontItalic)
}, o.prototype.setBodyFont = function(t) {
return l.setFontToProperties(t, this._line.properties().bodyFontFamily, this._line
.properties().bodyFontSize, this._line.properties().bodyFontBold, this._line
.properties().bodyFontItalic), this
}, o.prototype.getQuantityBorderColor = function() {
return l.getColorFromProperties(this._line.properties().quantityBorderColor, this._line
.properties().quantityBorderTransparency)
}, o.prototype.setQuantityBorderColor = function(t) {
return l.setColorToProperties(t, this._line.properties().quantityBorderColor, this._line
.properties().quantityBorderTransparency), this
}, o.prototype.getQuantityBackgroundColor = function() {
return l.getColorFromProperties(this._line.properties().quantityBackgroundColor, this
._line.properties().quantityBackgroundTransparency)
}, o.prototype.setQuantityBackgroundColor = function(t) {
return l.setColorToProperties(t, this._line.properties().quantityBackgroundColor, this
._line.properties().quantityBackgroundTransparency), this
}, o.prototype.getQuantityTextColor = function() {
return l.getColorFromProperties(this._line.properties().quantityTextColor, this._line
.properties().quantityTextTransparency)
}, o.prototype.setQuantityTextColor = function(t) {
return l.setColorToProperties(t, this._line.properties().quantityTextColor, this._line
.properties().quantityTextTransparency), this
}, o.prototype.getQuantityFont = function() {
return l.getFontFromProperties(this._line.properties().quantityFontFamily, this._line
.properties().quantityFontSize, this._line.properties().quantityFontBold, this
._line.properties().quantityFontItalic)
}, o.prototype.setQuantityFont = function(t) {
return l.setFontToProperties(t, this._line.properties().quantityFontFamily, this._line
.properties().quantityFontSize, this._line.properties().quantityFontBold, this
._line.properties().quantityFontItalic), this
}, o.prototype.getReverseButtonBorderColor = function() {
return l.getColorFromProperties(this._line.properties().reverseButtonBorderColor, this
._line.properties().reverseButtonBorderTransparency)
}, o.prototype.setReverseButtonBorderColor = function(t) {
return l.setColorToProperties(t, this._line.properties().reverseButtonBorderColor, this
._line.properties().reverseButtonBorderTransparency), this
}, o.prototype.getReverseButtonBackgroundColor = function() {
return l.getColorFromProperties(this._line.properties().reverseButtonBackgroundColor,
this._line.properties().reverseButtonBackgroundTransparency)
}, o.prototype.setReverseButtonBackgroundColor = function(t) {
return l.setColorToProperties(t, this._line.properties().reverseButtonBackgroundColor,
this._line.properties().reverseButtonBackgroundTransparency), this
}, o.prototype.getReverseButtonIconColor = function() {
return l.getColorFromProperties(this._line.properties().reverseButtonIconColor, this
._line.properties().reverseButtonIconTransparency)
}, o.prototype.setReverseButtonIconColor = function(t) {
return l.setColorToProperties(t, this._line.properties().reverseButtonIconColor, this
._line.properties().reverseButtonIconTransparency), this
}, o.prototype.getCloseButtonBorderColor = function() {
return l.getColorFromProperties(this._line.properties().closeButtonBorderColor, this
._line.properties().closeButtonBorderTransparency)
}, o.prototype.setCloseButtonBorderColor = function(t) {
return l.setColorToProperties(t, this._line.properties().closeButtonBorderColor, this
._line.properties().closeButtonBorderTransparency), this
}, o.prototype.getCloseButtonBackgroundColor = function() {
return l.getColorFromProperties(this._line.properties().closeButtonBackgroundColor, this
._line.properties().closeButtonBackgroundTransparency)
}, o.prototype.setCloseButtonBackgroundColor = function(t) {
return l.setColorToProperties(t, this._line.properties().closeButtonBackgroundColor,
this._line.properties().closeButtonBackgroundTransparency), this
}, o.prototype.getCloseButtonIconColor = function() {
return l.getColorFromProperties(this._line.properties().closeButtonIconColor, this._line
.properties().closeButtonIconTransparency)
}, o.prototype.setCloseButtonIconColor = function(t) {
return l.setColorToProperties(t, this._line.properties().closeButtonIconColor, this
._line.properties().closeButtonIconTransparency), this
}, o.prototype.block = function() {
this._blocked = !0, this._line.updateAllViewsAndRedraw()
}, o.prototype.unblock = function() {
this._blocked = !1, this._line.updateAllViewsAndRedraw()
}, o.prototype.isFunction = function(t) {
return "function" == typeof t
}, o.prototype.onReverse = function(t, e) {
return e ? this.isFunction(e) && (this._onReverseData = t, this._onReverseCallback =
e) : this.isFunction(t) && (this._onReverseCallback = t), this
}, o.prototype.callOnReverse = function() {
this.isFunction(this._onReverseCallback) && this._onReverseCallback.call(this, this
._onReverseData)
}, o.prototype.isOnReverseCallbackPresent = function() {
return this.isFunction(this._onReverseCallback)
}, o.prototype.onClose = function(t, e) {
return e ? this.isFunction(e) && (this._onCloseData = t, this._onCloseCallback = e) :
this.isFunction(t) && (this._onCloseCallback = t), this
}, o.prototype.setCloseEnabled = function(t) {
return this._closeEnabled === t ? this : (this._closeEnabled = t, this
._onCloseCallback && this._line.updateAllViewsAndRedraw(), this)
}, o.prototype.isCloseEnabled = function() {
return this._closeEnabled
}, o.prototype.callOnClose = function() {
this.isFunction(this._onCloseCallback) && this._closeEnabled && this._onCloseCallback
.call(this, this._onCloseData)
}, o.prototype.isOnCloseCallbackPresent = function() {
return this._closeEnabled && this.isFunction(this._onCloseCallback)
}, o.prototype.onModify = function(t, e) {
return e ? this.isFunction(e) && (this._onModifyData = t, this._onModifyCallback = e) :
this.isFunction(t) && (this._onModifyCallback = t), this
}, o.prototype.callOnModify = function() {
this.isFunction(this._onModifyCallback) && this._onModifyCallback.call(this, this
._onModifyData)
}, o.prototype.onContextMenu = function(t, e) {
return e ? this.isFunction(e) && (this._onContextMenuData = t, this
._onContextMenuCallback = e) : this.isFunction(t) && (this
._onContextMenuCallback = t), this
}, o.prototype.callOnContextMenu = function() {
if (this.isFunction(this._onContextMenuCallback)) return this._onContextMenuCallback
.call(this, this._onContextMenuData)
}, o.prototype.remove = function() {
this._line._model.removeSource(this._line), delete this._line
}, inherit(n, r), n.prototype.setPoint = function(t, e, i) {
this._points[t] = e, this.normalizePoints()
}, n.prototype.addPoint = function(t, e) {
return this._points.push(t), this._lastPoint = null, this.normalizePoints(), this
.createServerPoints(), !0
}, n.skipMagnetting = !0, n.prototype.title = function() {
return "Position"
}, n.prototype.createPriceAxisView = function(t) {
return this._priceAxisView = new a(this, {
pointIndex: t,
backgroundProperty: this.properties().lineColor
}), this._priceAxisView
}, n.prototype.paneViews = function(e) {
return TradingView.printing && !t.enabled("snapshot_trading_drawings") ? null : this
._model.properties().tradingProperties.showPositions.value() ? s.prototype.paneViews
.call(this, e) : null
}, n.prototype.priceAxisViews = function(e, i) {
return TradingView.printing && !t.enabled("snapshot_trading_drawings") ? null : this
._model.properties().tradingProperties.showPositions.value() ? s.prototype
.priceAxisViews.call(this, e, i) : null
}, n.prototype.hasContextMenu = function() {
return !0
}, n.prototype.contextMenuItems = function() {
return this._adapter.callOnContextMenu()
}, e.LineToolPosition = n
}).call(e, i(5))
},
function(t, e, i) {
"use strict";
(function(t) {
function o(t) {
this._line = t, this._data = {
bodyText: "order",
quantityText: "0"
}, this._editable = !0
}
function n(t, e) {
this._adapter = new o(this), this._constructor = "LineToolOrder";
var n = e || new c("linetoolorder");
r.call(this, t, n), i.e(1).then(function(t) {
var e = i(1190).OrderPaneView;
this._setPaneViews([new e(this, this._model)])
}.bind(this).bind(null, i)).catch(i.oe)
}
var r = i(224),
s = i(221).LineToolPriceAxisView,
a = i(170),
l = i(1).LineDataSource,
c = i(6).DefaultProperty;
o.prototype.setEditable = function(t) {
return this._editable = t, this
}, o.prototype.getPrice = function() {
return this._line.points().length > 0 ? this._line.points()[0].price : this._line
._timePoint.length > 0 ? this._line._timePoint[0].price : void 0
}, o.prototype.setPrice = function(t) {
if (this._line.points().length > 0) {
var e = this._line.points()[0];
e.price = t, this._line._points[0] = e, this._line.normalizePoints(), this._line
.updateAllViewsAndRedraw()
}
return this._line._timePoint.length > 0 && (this._line._timePoint[0].price = t), this
}, o.prototype.getText = function() {
return this._data.bodyText
}, o.prototype.setText = function(t) {
return this._data.bodyText = t || "", this._line.updateAllViewsAndRedraw(), this
}, o.prototype.setTooltip = function(t) {
return null == t ? t = "" : t += "", this._line.properties().tooltip.setValue(t), this
}, o.prototype.getTooltip = function() {
return this._line.properties().tooltip.value()
}, o.prototype.getQuantity = function() {
return this._data.quantityText
}, o.prototype.setQuantity = function(t) {
return this._data.quantityText = t || "", this._line.updateAllViewsAndRedraw(), this
}, o.prototype.getExtendLeft = function() {
var t = this._line.properties().extendLeft.value();
return "inherit" === t ? this._line._model.properties().tradingProperties.extendLeft
.value() : t
}, o.prototype.setExtendLeft = function(t) {
return this._line.properties().extendLeft.setValue(t), this
}, o.prototype.getLineLength = function() {
var t = this._line.properties().lineLength.value();
return "inherit" === t ? this._line._model.properties().tradingProperties.lineLength
.value() : t
}, o.prototype.setLineLength = function(t) {
return this._line.properties().lineLength.setValue(Math.max(0, Math.min(t, 100))), this
}, o.prototype.getLineColor = function() {
return a.getColorFromProperties(this._line.properties().lineColor, this._line
.properties().lineTransparency)
}, o.prototype.setLineColor = function(t) {
return a.setColorToProperties(t, this._line.properties().lineColor, this._line
.properties().lineTransparency), this
}, o.prototype.getLineStyle = function() {
var t = this._line.properties().lineStyle.value();
return "inherit" === t ? this._line._model.properties().tradingProperties.lineStyle
.value() : t
}, o.prototype.setLineStyle = function(t) {
return this._line.properties().lineStyle.setValue(t), this
}, o.prototype.getLineWidth = function() {
var t = this._line.properties().lineWidth.value();
return "inherit" === t ? this._line._model.properties().tradingProperties.lineWidth
.value() : t
}, o.prototype.setLineWidth = function(t) {
return this._line.properties().lineWidth.setValue(t), this
}, o.prototype.getBodyBorderColor = function() {
return a.getColorFromProperties(this._line.properties().bodyBorderColor, this._line
.properties().bodyBorderTransparency)
}, o.prototype.setBodyBorderColor = function(t) {
return a.setColorToProperties(t, this._line.properties().bodyBorderColor, this._line
.properties().bodyBorderTransparency), this
}, o.prototype.getBodyBackgroundColor = function() {
return a.getColorFromProperties(this._line.properties().bodyBackgroundColor, this._line
.properties().bodyBackgroundTransparency)
}, o.prototype.setBodyBackgroundColor = function(t) {
return a.setColorToProperties(t, this._line.properties().bodyBackgroundColor, this._line
.properties().bodyBackgroundTransparency), this
}, o.prototype.getBodyTextColor = function() {
return a.getColorFromProperties(this._line.properties().bodyTextColor, this._line
.properties().bodyTextTransparency)
}, o.prototype.setBodyTextColor = function(t) {
return a.setColorToProperties(t, this._line.properties().bodyTextColor, this._line
.properties().bodyTextTransparency), this
}, o.prototype.getBodyFont = function() {
return a.getFontFromProperties(this._line.properties().bodyFontFamily, this._line
.properties().bodyFontSize, this._line.properties().bodyFontBold, this._line
.properties().bodyFontItalic)
}, o.prototype.setBodyFont = function(t) {
return a.setFontToProperties(t, this._line.properties().bodyFontFamily, this._line
.properties().bodyFontSize, this._line.properties().bodyFontBold, this._line
.properties().bodyFontItalic), this
}, o.prototype.getQuantityBorderColor = function() {
return a.getColorFromProperties(this._line.properties().quantityBorderColor, this._line
.properties().quantityBorderTransparency)
}, o.prototype.setQuantityBorderColor = function(t) {
return a.setColorToProperties(t, this._line.properties().quantityBorderColor, this._line
.properties().quantityBorderTransparency), this
}, o.prototype.getQuantityBackgroundColor = function() {
return a.getColorFromProperties(this._line.properties().quantityBackgroundColor, this
._line.properties().quantityBackgroundTransparency)
}, o.prototype.setQuantityBackgroundColor = function(t) {
return a.setColorToProperties(t, this._line.properties().quantityBackgroundColor, this
._line.properties().quantityBackgroundTransparency), this
}, o.prototype.getQuantityTextColor = function() {
return a.getColorFromProperties(this._line.properties().quantityTextColor, this._line
.properties().quantityTextTransparency)
}, o.prototype.setQuantityTextColor = function(t) {
return a.setColorToProperties(t, this._line.properties().quantityTextColor, this._line
.properties().quantityTextTransparency), this
},
o.prototype.getQuantityFont = function() {
return a.getFontFromProperties(this._line.properties().quantityFontFamily, this._line
.properties().quantityFontSize, this._line.properties().quantityFontBold, this
._line.properties().quantityFontItalic)
}, o.prototype.setQuantityFont = function(t) {
return a.setFontToProperties(t, this._line.properties().quantityFontFamily, this._line
.properties().quantityFontSize, this._line.properties().quantityFontBold, this
._line.properties().quantityFontItalic), this
}, o.prototype.getCancelButtonBorderColor = function() {
return a.getColorFromProperties(this._line.properties().cancelButtonBorderColor, this
._line.properties().cancelButtonBorderTransparency)
}, o.prototype.setCancelButtonBorderColor = function(t) {
return a.setColorToProperties(t, this._line.properties().cancelButtonBorderColor, this
._line.properties().cancelButtonBorderTransparency), this
}, o.prototype.getCancelButtonBackgroundColor = function() {
return a.getColorFromProperties(this._line.properties().cancelButtonBackgroundColor,
this._line.properties().cancelButtonBackgroundTransparency)
}, o.prototype.setCancelButtonBackgroundColor = function(t) {
return a.setColorToProperties(t, this._line.properties().cancelButtonBackgroundColor,
this._line.properties().cancelButtonBackgroundTransparency), this
}, o.prototype.getCancelButtonIconColor = function() {
return a.getColorFromProperties(this._line.properties().cancelButtonIconColor, this
._line.properties().cancelButtonIconTransparency)
}, o.prototype.setCancelButtonIconColor = function(t) {
return a.setColorToProperties(t, this._line.properties().cancelButtonIconColor, this
._line.properties().cancelButtonIconTransparency), this
}, o.prototype.block = function() {
this._blocked = !0, this._line.updateAllViewsAndRedraw()
}, o.prototype.unblock = function() {
this._blocked = !1, this._line.updateAllViewsAndRedraw()
}, o.prototype.isFunction = function(t) {
return "function" == typeof t
}, o.prototype.onCancel = function(t, e) {
return e ? this.isFunction(e) && (this._onCancelData = t, this._onCancelCallback = e) :
this.isFunction(t) && (this._onCancelCallback = t), this
}, o.prototype.callOnCancel = function() {
this.isFunction(this._onCancelCallback) && this._onCancelCallback.call(this, this
._onCancelData)
}, o.prototype.isOnCancelCallbackPresent = function() {
return this.isFunction(this._onCancelCallback)
}, o.prototype.onModify = function(t, e) {
return e ? this.isFunction(e) && (this._onModifyData = t, this._onModifyCallback = e) :
this.isFunction(t) && (this._onModifyCallback = t), this
}, o.prototype.callOnModify = function() {
this.isFunction(this._onModifyCallback) && this._onModifyCallback.call(this, this
._onModifyData)
}, o.prototype.onMove = function(t, e) {
return e ? this.isFunction(e) && (this._onMoveData = t, this._onMoveCallback = e) : this
.isFunction(t) && (this._onMoveCallback = t), this
}, o.prototype.callOnMove = function() {
this.isFunction(this._onMoveCallback) && this._onMoveCallback.call(this, this
._onMoveData)
}, o.prototype.onContextMenu = function(t, e) {
return e ? this.isFunction(e) && (this._onContextMenuData = t, this
._onContextMenuCallback = e) : this.isFunction(t) && (this
._onContextMenuCallback = t), this
}, o.prototype.callOnContextMenu = function() {
if (this.isFunction(this._onContextMenuCallback)) return this._onContextMenuCallback
.call(this, this._onContextMenuData)
}, o.prototype.remove = function() {
this._line._model.removeSource(this._line), delete this._line
}, o.prototype.shouldShowModifyOrder = function() {
return !!this._onModifyCallback
}, inherit(n, r), n.skipMagnetting = !0, n.prototype.setPoint = function(t, e, i) {
this._points[t] = e, this.normalizePoints()
}, n.prototype.addPoint = function(t, e) {
return this._points.push(t), this._lastPoint = null, this.normalizePoints(), this
.createServerPoints(), !0
}, n.prototype.title = function() {
return "Order"
}, n.prototype.endMoving = function(t) {
var e = this._startMovingPoint && this._currentMovingPoint && this._startMovingPoint
.price !== this._currentMovingPoint.price;
r.prototype.endMoving.call(this), !t && e && this._adapter.callOnMove()
}, n.prototype.createPriceAxisView = function(t) {
return this._priceAxisView = new s(this, {
pointIndex: t,
backgroundProperty: this.properties().lineColor
}), this._priceAxisView
}, n.prototype.paneViews = function(e) {
return TradingView.printing && !t.enabled("snapshot_trading_drawings") ? null : this
._model.properties().tradingProperties.showOrders.value() ? l.prototype.paneViews
.call(this, e) : null
}, n.prototype.priceAxisViews = function(e, i) {
return TradingView.printing && !t.enabled("snapshot_trading_drawings") ? null : this
._model.properties().tradingProperties.showOrders.value() ? l.prototype
.priceAxisViews.call(this, e, i) : null
}, n.prototype.hasContextMenu = function() {
return !0
}, n.prototype.contextMenuItems = function() {
return this._adapter.callOnContextMenu()
}, n.prototype.onlyYMoving = function() {
return !0
}, n.prototype.userEditEnabled = function() {
return this._adapter.shouldShowModifyOrder()
}, e.LineToolOrder = n
}).call(e, i(5))
},
function(t, e, i) {
"use strict";
for (var o = {
StudyStrategy: i(871),
StatusView: i(126),
StudyLineDataSource: i(128).StudyLineDataSource,
StudyVersioning: i(84),
StudyMigration: i(301),
study_PivotPointsStandard: i(873),
study_Overlay: i(876).study_Overlay,
study_Compare: i(894),
study_Sessions: i(895),
study_Volume: i(896).study_Volume,
study_ScriptWithDataOffset: i(897),
StudyPaneView: i(87).StudyPaneView,
StudyBackgroundPaneView: i(87).StudyBackgroundPaneView,
StudyPlotShapesPaneView: i(87).StudyPlotShapesPaneView,
StudyPlotCharsPaneView: i(87).StudyPlotCharsPaneView,
StudyPlotArrowsPaneView: i(87).StudyPlotArrowsPaneView,
StudyPlotCandlesPaneView: i(87).StudyPlotCandlesPaneView,
StudyStrategyOrdersPaneView: i(340),
StudyPriceAxisView: i(324).StudyPriceAxisView,
StudyDataWindowView: i(125).StudyDataWindowView,
DataVendorStudyDataWindowView: i(125).DataVendorStudyDataWindowView,
LineStudyMtpAnalysis: i(898),
LineStudyMtpDecisionPoint: i(899),
LineStudyMtpRiskReward: i(900),
LineStudyMtpElliotWaveMain: i(227).LineStudyMtpElliotWaveMain,
LineStudyMtpElliotWaveMajor: i(227).LineStudyMtpElliotWaveMajor,
LineStudyMtpElliotWaveMinor: i(227).LineStudyMtpElliotWaveMinor,
LineStudyMtpDownWave1OrA: i(47).LineStudyMtpDownWave1OrA,
LineStudyMtpDownWave2OrB: i(47).LineStudyMtpDownWave2OrB,
LineStudyMtpDownWave3: i(47).LineStudyMtpDownWave3,
LineStudyMtpDownWave4: i(47).LineStudyMtpDownWave4,
LineStudyMtpDownWave5: i(47).LineStudyMtpDownWave5,
LineStudyMtpDownWaveC: i(47).LineStudyMtpDownWaveC,
LineStudyMtpUpWave1OrA: i(47).LineStudyMtpUpWave1OrA,
LineStudyMtpUpWave2OrB: i(47).LineStudyMtpUpWave2OrB,
LineStudyMtpUpWave3: i(47).LineStudyMtpUpWave3,
LineStudyMtpUpWave4: i(47).LineStudyMtpUpWave4,
LineStudyMtpUpWave5: i(47).LineStudyMtpUpWave5,
LineStudyMtpUpWaveC: i(47).LineStudyMtpUpWaveC
}, n = Object.keys(o), r = n.length; r--;) TradingView[n[r]] = o[n[r]];
t.exports = o
},
function(t, e, i) {
"use strict";
(function(e) {
function o(t, i, o, r) {
n.call(this, t, i, o, r), this._barsIndexes = [], this._reportDataBuffer = null, this
._reportData = null, this.watchedData = new e, this.model().addStrategySource(this)
}
var n = i(35).Study,
r = i(340),
s = i(3).propertyPages;
inherit(o, n), o.prototype.stop = function() {
if (n.prototype.stop.call(this), this._avoidRemoveStrategySource)
return void delete this._avoidRemoveStrategySource;
this.model().removeStrategySource(this)
}, o.prototype.start = function() {
this.model().addStrategySource(this), n.prototype.start.call(this)
}, o.prototype.processHibernate = function() {
this._studyId && !this.isVisible() && (this._avoidRemoveStrategySource = !0), n
.prototype.processHibernate.call(this)
}, o.prototype.onData = function(t) {
var e = this;
n.prototype.onData.call(this, t).then(function() {
var i, o, n, r;
t.method && "data_update" === t.method && (i = t.params && t.params
.nonseries && t.params.nonseries.d, o = i && i.data && i.data
.report, o ? (i.isUpdate && e._reportDataBuffer && (o = $.extend(e
._reportDataBuffer, o)), e._reportDataBuffer = e
._reportData = $.extend(e._reportDataBuffer || {}, o)) : (n = $
.extend({}, t), n.params.nonseries.d.data = {
report: e._reportDataBuffer
}, t = n), "nochange" !== (r = t.params && t.params.nonseries &&
t.params.nonseries.indexes) && r instanceof Array && r.length &&
e._collateBarsIndexes(r)), e.watchedData.setValue(t)
})
}, o.prototype._collateBarsIndexes = function(t) {
var e, i;
if (Array.isArray(t) && (e = this._reportData && this._reportData.filledOrders) && e
.length)
for (this._barsIndexes.length = 0, i = 0; i < e.length; i++) this._barsIndexes[i] =
t[e[i].tm]
}, o.prototype.reportData = function() {
return this._reportData
}, o.prototype.ordersData = function() {
return this._reportData && this._reportData.filledOrders
}, o.prototype.barsIndexes = function() {
return this._barsIndexes
}, o.prototype.clearData = function() {
n.prototype.clearData.call(this), this._strategyOrdersPaneView && this
._strategyOrdersPaneView.clearItems()
}, o.prototype.restoreData = function(t) {
n.prototype.restoreData.apply(this, arguments), this.model().addStrategySource(this), t
.reportData && t.barsIndexes && (this._reportData = t.reportData, this
._barsIndexes = t.barsIndexes, this.watchedData.setValue({
method: "data_update",
params: {
nonseries: {
d: {
data: {
report: this._reportData
}
}
}
}
})), t.activeState && (this._activeState = !0)
}, o.prototype.activeState = function() {
return this._activeState
}, o.prototype.updateAllViews = function() {
n.prototype.updateAllViews.call(this), this._strategyOrdersPaneView && this
._strategyOrdersPaneView.update()
}, o.prototype.createViews = function() {
n.prototype.createViews.call(this), this._strategyOrdersPaneView = new r(this, this
._series, this._model)
}, o.prototype.state = function(t) {
var e = n.prototype.state.apply(this, arguments);
return t && this._reportData && this._barsIndexes && (e.data || (e.data = {}), e.data
.reportData = this._reportData, e.data.barsIndexes = this._barsIndexes, e.data
.activeState = this.model().activeStrategySource().value() === this), e
}, o.prototype.getStrategyPropertyPage = function() {
return s.StudyStrategyPropertyPage
}, t.exports = o
}).call(e, i(17))
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._items = t.items, this._color = t.color, this._orderArrow = t.orderArrow, this._exitLineWidth =
t.exitLineWidth, this._priceArrow = t.priceArrow, this._text = t.text, this._textWidths = e
}
var n = i(11);
o.prototype._drawOrderArrow = function(t, e, i, o) {
var n, r = e.x,
s = e.y;
o ? (t.rotate(Math.PI), r = -r - this._orderArrow.width / 2, s = -s - this._orderArrow.height) :
(r -= this._orderArrow.width / 2, s -= this._orderArrow.height), i && (s -= i), n = o ?
"floor" : "ceil", r = Math[n](r) + (o ? -.5 : .5), s = Math[n](s) + .5, t.translate(r, s), t
.moveTo(.25 * this._orderArrow.width, 0), t.lineTo(.75 * this._orderArrow.width, 0), t
.lineTo(.75 * this._orderArrow.width, .45 * this._orderArrow.height), t.lineTo(this
._orderArrow.width, .45 * this._orderArrow.height), t.lineTo(.5 * this._orderArrow
.width, this._orderArrow.height), i && (t.lineTo(this._orderArrow.width, this
._orderArrow.height), t.lineTo(this._orderArrow.width, this._orderArrow.height + i),
t.lineTo(0, this._orderArrow.height + i), t.lineTo(0, this._orderArrow.height), t
.lineTo(.5 * this._orderArrow.width, this._orderArrow.height)), t.lineTo(0, .45 * this
._orderArrow.height), t.lineTo(.25 * this._orderArrow.width, .45 * this._orderArrow
.height)
}, o.prototype._drawPriceArrow = function(t, e, i) {
var o = e.x,
n = e.y;
i ? (t.rotate(Math.PI), o = -o - this._priceArrow.width, n = -n - this._priceArrow.height / 2) :
(o -= this._priceArrow.width, n -= this._priceArrow.height / 2), o = Math.round(o) + (i ? -
1.5 : .5), n = Math.floor(n) + .5, t.translate(o, n), t.moveTo(0, 0), t.lineTo(this
._priceArrow.width, .5 * this._priceArrow.height), t.lineTo(0, this._priceArrow.height)
}, o.prototype.draw = function(t) {
t.beginPath();
for (var e, i, o = 0; o < this._items.length; o++) e = this._items[o], i = "lower" === e.pos, t
.save(), t.translate(0, i ? this._orderArrow.vMargin : -this._orderArrow.vMargin), this
._drawOrderArrow(t, e.orderPoint, this._exitLineWidth, i), t.restore(), t.save(), this
._drawPriceArrow(t, e.pricePoint, !i), t.restore();
if (t.closePath(), t.fillStyle = this._color, t.fill(), this._text)
for (t.font = this._text.fontSize + "px " + this._text.font, t.textAlign = "center", t
.textBaseline = "top", o = 0; o < this._items.length; o++) e = this._items[o], i =
"lower" === e.pos, t.save(), t.translate(0, i ? this._orderArrow.vMargin : -this
._orderArrow.height - this._orderArrow.vMargin), e.label && (t.translate(0, i ? this
._text.fontSize + this._text.vMargin + this._exitLineWidth : -this._text
.fontSize - this._text.vMargin - this._exitLineWidth), t.fillText(e.label, Math
.ceil(e.orderPoint.x), e.orderPoint.y), "number" != typeof this._textWidths[e
.label] && (this._textWidths[e.label] = t.measureText(e.label).width)), e.qty && (t
.translate(0, i ? this._text.fontSize + this._text.vMargin + this._exitLineWidth : -
this._text.fontSize - this._text.vMargin - this._exitLineWidth), t.fillText(e
.qty, Math.ceil(e.orderPoint.x), e.orderPoint.y),
"number" != typeof this._textWidths[e.qty] && (this._textWidths[e.qty] = t
.measureText(e.qty).width)), t.restore()
}, o.prototype._testOrderArrows = function(t) {
for (var e, i, o, n, r, s, a, l = 0, c = this._orderArrow.width / 2; l < this._items
.length; l++)
if (e = this._items[l].orderPoint, !(t.x < e.x - c || t.x > e.x + c || (i = this._items[l],
o = "lower" === i.pos, n = this._orderArrow.height + this._exitLineWidth, o || (
n = -n), r = e.y + (o ? this._orderArrow.vMargin : -this._orderArrow
.vMargin), s = Math.min(r, r + n), a = Math.max(r, r + n), t.y < s || t.y >
a))) return !0;
return !1
}, o.prototype._testText = function(t) {
for (var e, i, o, n, r, s, a, l, c, h, u, d = 0; d < this._items.length; d++)
if (e = this._items[d], i = e.orderPoint, o = "lower" === e.pos, n = this._orderArrow
.vMargin + this._orderArrow.height + this._exitLineWidth, o || (n = -n), r = i.y + n,
s = this._text.vMargin + this._text.fontSize * (!!e.label + !!e.qty), o || (s = -s), a =
Math.min(r, r + s), l = Math.max(r, r + s), !(t.y < a || t.y > l || (c = e.label && e
.qty ? o && t.y < r + this._text.fontSize || !o && t.y > r - this._text
.fontSize ? e.label : e.qty : e.label || e.qty, h = this._textWidths[c], u =
h && h / 2, !h || t.x < i.x - u || t.x > i.x + u))) return !0;
return !1
}, o.prototype.hitTest = function(t) {
var e = this._testOrderArrows(t),
i = !e && this._text && this._testText(t);
return e || i ? new n(n.REGULAR) : null
}, e.PaneRendererStudyStrategyOrders = TradingView.PaneRendererStudyStrategyOrders = o
},
function(t, e, i) {
"use strict";
(function(e) {
function o(t, e, i, o) {
this._prices = [], this._canvas = $("<canvas>"), this._cache = this._canvas.get(0)
.getContext("2d"), this.reset({
font: t,
fontSize: e,
backColors: i,
colors: o
}), this._priceAxisFontSize = 11
}
function n(t, e) {
this._model = t, this._source = e, this._pivots = [], this._textCache = {}
}
function r(t, e) {
this._source = t, this._model = t._model, this._prices = [], this._invidated = !0, this
._cache = e;
var i = this;
t.priceScale() && (this._cachedFormatter = t.priceScale().formatter(), this
._formatterCache = new p(function(t) {
return i._cachedFormatter.format(t)
}))
}
function s(t, e, i, o) {
var r, s, a;
for (_.call(this, t, e, i, o, new n(t, this)), r = ["P", "S1/R1", "S2/R2", "S3/R3", "S4/R4",
"S5/R5"
], s = this.properties().levelsStyle.visibility, a = 0; a < r.length; a++) s[r[a]]
.listeners().subscribe(this, TradingView.Study.prototype.processHibernate)
}
var a = i(8).Point,
l = i(32),
c = l.parseRgb,
h = l.rgbToBlackWhiteString,
u = i(126),
d = i(125).StudyDataWindowView,
p = i(226),
_ = i(874),
f = i(875).StandardPivotPointsPriceAxisView,
m = i(110).TrendLineRenderer,
g = i(124),
v = i(375),
y = i(11),
b = i(53).CompositeRenderer,
S = i(19).PlotRowSearchMode,
w = i(3).propertyPages,
T = i(74).LineEnd;
o.prototype.remove = function() {
this._canvas.remove()
}, o.prototype.reset = function(t) {
this._prices = [], this._params = t, this._cache.setFont(t.fontSize + "px " + t.font);
var e = this;
this._labelWidth = ["P", "S1", "R1", "S2", "R2", "S3", "R3", "S4", "R4", "S5", "R5",
"/"
].reduce(function(t, i) {
var o = e._cache.measureText(i).width;
return Math.max(o, t)
}, 0)
}, o.prototype.rowHeight = function() {
return this._priceAxisFontSize + 4
}, o.prototype._labelRectByIndex = function(t) {
return {
left: 0,
top: Math.round(this._topByIndex(t)),
width: Math.round(this._labelWidth + 4),
height: this._params.fontSize + 8
}
}, o.prototype.params = function() {
return this._params
}, o.prototype._centerByIndex = function(t) {
return Math.round((t + .5) * (this._params.fontSize + 8))
}, o.prototype._topByIndex = function(t) {
return Math.round(t * (this._params.fontSize + 8))
}, o.prototype.setPrices = function(t) {
var e, i, o, n, r, s, a = 8,
l = !1,
c = function(t, e) {
return void 0 === t && void 0 === e || t.formatted === e.formatted
};
if (t.length !== this._prices.length) l = !0;
else
for (e = 0; e < this._prices.length; e++)
if (!c(this._prices[e], t[e])) {
l = !0;
break
} if (l) {
for (i = this, i._cache.save(), i._cache.font = this._priceAxisFontSize +
"px Arial", i._cache.restore(), o = this._labelWidth + 6, n = window
.hidpiCanvasRatio || 1, o *= n, this._canvas.prop("width", o), r = Math.max(t
.length, 22) * (this._params.fontSize + a), r *= n, this._canvas.prop(
"height", r), this._canvas.css("width", o).css("height", r), this._prices =
t, this._cache.clearRect(0, 0, o, r), this._cache.save(), this._cache.translate(
.5, .5), this._cache.font = this._params.fontSize + "px " + this._params
.font, this._cache.textBaseline = "middle", e = 0; e < this._prices.length; e++)
this._prices[e] && (s = ["P", "S1", "R1", "S2", "R2", "S3", "R3", "S4", "R4",
"S5", "R5"
][e], this._cache.fillStyle = this._params.backColors[e], this._cache
.fillText(s, 0, this._centerByIndex(e)), this._cache.fillText("/", 0, this
._centerByIndex(e + 11)));
this._prices = t, this._cache.restore()
}
}, n.prototype.setCache = function(t) {
this._cache = t
}, n.prototype.priceAxisViews = function(t, e) {
return this._priceAxisViews
}, n.prototype.mergeLabel = function(t, e, i) {
var o = "" + e;
void 0 === t[o] ? (t[o] = {}, t[o].text = i, t[o].ids = [this.complete(i)]) : (t[o]
.text += "/" + i, t[o].ids.push(this.complete(i)))
}, n.prototype.complete = function(t) {
return "P" === t ? t : "S" + t[1] + "/R" + t[1]
}, n.prototype.update = function() {
this._invalidated = !0
}, n.prototype._updateImpl = function() {
var t, e, i, o, n, r, s, a, l, c, h, u, d, p, _, f, m, g;
if (this._source.pricesView().prices(), this._pivots = [], this._source
._nonseriesdata && this._source._nonseriesdata.pivots && this._source.properties()
.visible.value() && (t = this._source._nonseriesdata.pivots, e = this._source
._indexes, i = this._model.timeScale(), (o = this._source.priceScale()) && !o
.isEmpty() && !i.isEmpty() && t)) {
if (n = i.visibleBars(), r = n.firstBar(), s = n.lastBar(), a = null, o
.isPercent()) {
if (!this._source.ownerSource()) return;
a = this._source.ownerSource().firstValue()
}
for (l = 0; l < t.length; l++)
if (t[l] && (c = e[t[l].startIndex], !((h = e[t[l].endIndex]) < r || c > s))) {
u = {}, d = this._source.properties().levelsStyle.visibility, d.P.value() &&
this.mergeLabel(u, t[l].p, "P"), d["S1/R1"].value() && (this.mergeLabel(
u, t[l].s1, "S1"), this.mergeLabel(u, t[l].r1, "R1")), d["S2/R2"]
.value() && (this.mergeLabel(u, t[l].s2, "S2"), this.mergeLabel(u, t[l]
.r2, "R2")), d["S3/R3"].value() && (this.mergeLabel(u, t[l].s3,
"S3"), this.mergeLabel(u, t[l].r3, "R3")), d["S4/R4"].value() && (
this.mergeLabel(u, t[l].s4, "S4"), this.mergeLabel(u, t[l].r4, "R4")
), d["S5/R5"].value() && (this.mergeLabel(u, t[l].s5, "S5"), this
.mergeLabel(u, t[l].r5, "R5")), p = i.indexToCoordinate(c), _ = i
.indexToCoordinate(h);
for (f in u) m = parseFloat(f), o.isPercent() && (m = o.priceRange()
.convertToPercent(m, a)), g = o.priceToCoordinate(m), this._pivots
.push({
x1: p,
x2: _,
y: g,
label: u[f].text,
labelIds: u[f].ids
})
}
}
}, n.prototype.renderer = function() {
var t, e, i, o, n, r, s, l, c, h, u, d, p, _, f, g, S;
for (this._invalidated && (this._updateImpl(), this._invalidated = !1), t = new b, e =
this._source.properties().levelsStyle.colors, i = this._source.properties()
.levelsStyle.widths, o = 0; o < this._pivots.length; o++)
if (n = this._pivots[o], r = new a(n.x1, n.y), s = new a(n.x2, n.y), l = {
points: [r, s],
width: this._model.timeScale().width(),
height: this._source.priceScale().height(),
color: e[n.labelIds[0]].value(),
linewidth: i[n.labelIds[0]].value(),
linestyle: CanvasEx.LINESTYLE_SOLID,
extendleft: !1,
extendright: !1,
leftend: T.Normal,
rightend: T.Normal
}, c = new m, c.setData(l), c.setHitTest(new y(y.REGULAR)), t.append(c), this
._source.properties().levelsStyle.showLabels.value())
for (h = n.label.split("/"), u = 0, d = 0; d < h.length; d++) p = ["P", "S1",
"R1", "S2", "R2", "S3", "R3", "S4", "R4", "S5", "R5"
].indexOf(h[d]), d > 0 && (_ = this._cache._labelRectByIndex(p + 11), f = {
left: r.x - _.width + u,
top: Math.round(r.y - _.height / 2),
width: _.width,
height: _.height
}, u += _.width / 2, g = this._cache._canvas.get(0), S = new v(g, _, f),
t.append(S)), _ = this._cache._labelRectByIndex(p), f = {
left: r.x - _.width + u,
top: Math.round(r.y - _.height / 2),
width: _.width,
height: _.height
}, u += _.width, g = this._cache._canvas.get(0), S = new v(g, _, f), t
.append(S);
return t
}, r.prototype._updateImpl = function() {
var t, e, i, o, n, r, s, a, l, c, h, u, d, _, f, m, g, v, y, b, w;
if (!this._model.timeScale().isEmpty() && !this._source.priceScale().isEmpty() &&
null !== (t = this._model.timeScale().visibleBars()) && this._source
._nonseriesdata && this._source._nonseriesdata.pivots && (this._cachedFormatter !==
this._source.priceScale().formatter() && (this._cachedFormatter = this._source
.priceScale().formatter(), e = this, this._formatterCache = new p(function(
t) {
return e._cachedFormatter.format(t)
})), e = this, i = this._model.mainSeries(), o = this._source.priceScale(),
null !== (n = i.bars().search(t.lastBar(), S.NearestLeft)))) {
for (r = n.index, s = this._source._nonseriesdata.pivots, a = this._source._indexes,
l = this._source.properties(), c = 0; c < s.length; c++)
if (s[c] && (h = a[s[c].startIndex], u = a[s[c].endIndex], d = l.inputs
.showHistoricalPivots.value(), u >= r && h <= r || !d))
for (o.properties().percentage.value() && (_ = e._source.firstValue()),
f = ["p", "s1", "r1", "s2", "r2", "s3", "r3", "s4", "r4", "s5", "r5"],
this._prices = [], m = 0; m < f.length; m++) g = f[m], void 0 !== (v =
s[c][g]) && (o.properties().percentage.value() && (v = 100 * (v -
_) / _), y = o.priceToCoordinate(v), b = {
P: "P",
S1: "S1/R1",
S2: "S2/R2",
S3: "S3/R3",
S4: "S4/R4",
S5: "S5/R5",
R1: "S1/R1",
R2: "S2/R2",
R3: "S3/R3",
R4: "S4/R4",
R5: "S5/R5"
}, w = l.levelsStyle.colors[b[g.toUpperCase()]].value(), this
._prices.push({
formatted: e._formatterCache.format(v),
price: v,
coordinate: y,
color: w
}));
this._cache.setPrices(this._prices)
}
}, r.prototype.update = function() {
this._invidated = !0
}, r.prototype.prices = function() {
return this._invidated && (this._updateImpl(), this._invidated = !1), this._prices
}, inherit(s, _), s.prototype.lastValueData = function(t, e, i) {
var o = ["P", "S1", "R1", "S2", "R2", "S3", "R3", "S4", "R4", "S5", "R5"].indexOf(t
.toUpperCase()),
n = {
noData: !0
},
r = this._pricesView.prices()[o];
return null !== r && void 0 !== r ? r : n
}, s.prototype.lastPriceLabelFixedCoordinate = function(t) {
var e = ["P", "S1", "R1", "S2", "R2", "S3", "R3", "S4", "R4", "S5", "R5"].indexOf(t
.toUpperCase());
return this._priceAxisViews[e]._fixedCoordinate
}, s.prototype.priceLabelText = function(t) {
return this._metaInfo.shortDescription + ":" + t.toUpperCase()
}, s.prototype.pricesView = function() {
return this._pricesView
}, s.prototype._getActualCacheParams = function() {
var t = {};
return t.font = this.properties().font.value(), t.fontSize = this.properties().fontsize
.value(), t.backColors = [this.properties().levelsStyle.colors.P.value(), this
.properties().levelsStyle.colors["S1/R1"].value(), this.properties().levelsStyle
.colors["S1/R1"].value(), this.properties().levelsStyle.colors["S2/R2"].value(),
this.properties().levelsStyle.colors["S2/R2"].value(), this.properties()
.levelsStyle.colors["S3/R3"].value(), this.properties().levelsStyle.colors[
"S3/R3"].value(), this.properties().levelsStyle.colors["S4/R4"].value(),
this.properties().levelsStyle.colors["S4/R4"].value(), this.properties()
.levelsStyle.colors["S5/R5"].value(), this.properties().levelsStyle.colors[
"S5/R5"].value()
], t.colors = t.backColors.map(function(t) {
return "black" === h(c(t), 150) ? "white" : "black"
}), t
}, s.prototype.updateAllViews = function() {
var t;
for (_.prototype.updateAllViews.call(this), this._pricesView.update(), t = 0; t < this
._priceAxisViews.length; t++) this._priceAxisViews[t].update();
for (t = 0; t < this._paneViews.length; t++) this._paneViews[t].update()
}, s.prototype.paneViews = function(t) {
var e = _.prototype.paneViews.call(this, t);
return e ? e.concat(this._paneViews) : this._paneViews
}, s.prototype.createViews = function() {
var t, e, i, n, s = this._getActualCacheParams();
for (this._cache && this._cache.remove(), this._cache = new o(s.font, s.fontSize, s
.backColors, s.colors), this._priceAxisViews = [], t = ["P", "S1", "R1", "S2",
"R2", "S3", "R3", "S4", "R4", "S5", "R5"
], this._paneViews.length = 0, e = this.properties().levelsStyle.visibility, i =
0; i < t.length; i++) this._priceAxisViews.push(new f(this, {
name: t[i],
cache: this._cache
})), n = "P" === t[i].toUpperCase() ? "P" : "S" + t[i][1] + "/R" + t[i][1], e[n] &&
e[n].value() && this._paneViews.push(new g(this._model, this, t[i],
"priceLabelText", "showStudyPlotLabels"));
this._dataWindowView || (this._dataWindowView = new d(this, this._model)), this
._statusView || (this._statusView = new u(this, this._model.properties())), this
._paneView.setCache(this._cache), this._pricesView = new r(this, this._cache)
}, s.prototype._postProcessGraphics = function() {}, s.prototype.isVisible = function() {
var t, e, i;
if (!this.properties().visible.value()) return !1;
for (t = ["P", "S1/R1", "S2/R2", "S3/R3", "S4/R4", "S5/R5"], e = this.properties()
.levelsStyle.visibility, i = 0; i < t.length; i++)
if (e[t[i]].value()) return !0;
return !1
}, s.prototype.stop = function() {
TradingView.Study.prototype.stop.call(this), this._cache && this._cache.remove()
}, s.prototype.priceRange = function(t, i) {
var o, n, r, s, a, l, c, h, u;
if (!this._nonseriesdata || !this._nonseriesdata.pivots || !this._indexes) return null;
if (!this.priceScale()) return null;
for (o = this._nonseriesdata.pivots, n = this._indexes, r = null, s = 0; s < o
.length; s++)
if (o[s] && (a = n[o[s].startIndex], !(n[o[s].endIndex] < t || a > i)))
for (l = [], c = this._properties.levelsStyle.visibility, c.P.value() && l.push(
o[s].p), c["S1/R1"].value() && l.push(o[s].s1, o[s].r1),
c["S2/R2"].value() && l.push(o[s].s2, o[s].r2), c["S3/R3"].value() && l
.push(o[s].s3, o[s].r3), c["S4/R4"].value() && l.push(o[s].s4, o[s].r4), c[
"S5/R5"].value() && l.push(o[s].s5, o[s].r5), h = 0; h < l.length; h++)
l[h] && (null === r ? r = new e(l[h], l[h]) : r.apply(l[h], l[h]));
return this.priceScale().isLog() && r ? new e(this.priceScale().priceToLogical(r
.minValue()), this.priceScale().priceToLogical(r.maxValue())) : this
.priceScale().properties().percentage.value() && r ? (u = this.ownerSource()
.firstValue(), u ? r.convertToPercents(u) : null) : r
}, s.prototype.getStylesPropertyPage = function() {
return w.StudyPivotPointsStandardStylesPropertyPage
}, t.exports = s
}).call(e, i(73))
},
function(t, e, i) {
"use strict";
function o(t, e, i, o, r) {
this._paneView = r, n.call(this, t, e, i, o)
}
var n = i(35).Study;
inherit(o, n), o.prototype.onData = function(t) {
var e = this;
switch (t.method) {
case "data_update":
n.prototype._makeJSONForNSData.call(this, t, {}).then(function(i) {
i.indexes_replace ? e._indexes = t.params.nonseries.indexes : (e
._nonseriesdata = i.data, e._indexes = t.params.nonseries.indexes);
var o = e._model.paneForSource(e);
e._model.recalculatePane(o), e._model.updateSource(e)
});
break;
default:
return n.prototype.onData.call(this, t)
}
}, o.prototype.updateAllViews = function() {
this._paneView.update(), this._dataWindowView.update(), this._statusView.update()
}, o.prototype.paneViews = function(t) {
return [this._paneView]
}, o.prototype.state = function(t) {
var e = n.prototype.state.call(this, t);
return t && (e.nonSeriesData = this._nonseriesdata, e.indexes = this._indexes), e
}, o.prototype.restoreData = function(t, e, i) {
n.prototype.restoreData.call(this, t), this._nonseriesdata = e, this._indexes = i
}, o.prototype.clearData = function() {
this._nonseriesdata = null, this._indexes = null
}, o.prototype.nonSeriesData = function() {
return this._nonseriesdata
}, t.exports = o
},
function(t, e, i) {
"use strict";
var o, n, r, s;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(67), r = ["P", "S1", "R1", "S2", "R2", "S3", "R3", "S4", "R4", "S5", "R5"], s =
function(t) {
function e(e, i) {
var o, n = t.call(this) || this;
return n._source = e, n._data = i, o = i.name, n._completeName = "P" === o.toUpperCase() ?
"P" : "S" + o[1] + "/R" + o[1], n
}
return o.__extends(e, t), e.prototype._updateRendererData = function(t) {
var e, i, o, n, s, a, l, c, h, u;
t.visible = !1, e = this._source.properties(), e.visible.value() && (i = this
._completeName, o = e.levelsStyle.visibility, o[i] && o[i].value() && (n = this
._source.model(), s = n.timeScale(), a = this._source.priceScale(), s
.isEmpty() || null === s.visibleBars() || null !== a && a.isEmpty() || (l =
this._source.nonSeriesData()) && l.pivots && (c = this._source
.pricesView().prices(), h = r.indexOf(this._data.name.toUpperCase()), (
u = c[h]) && (t.background = u.color, t.color = this
.generateTextColor(u.color), t.coordinate = u.coordinate, t
.floatCoordinate = u.floatCoordinate, t.text = u.formatted, t
.visible = !0))))
}, e
}(n.PriceAxisView), e.StandardPivotPointsPriceAxisView = s
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._source = t, this._model = e, this._points = [new s(0, 0)], this._lineRenderer = new x
}
function n(t, e) {
w.call(this), this._additional = void 0, this._study = t, this._model = e, this._items.push(new T(
"Open", "")), this._items.push(new T("High", "")),
this._items.push(new T("Low", "")), this._items.push(new T("Close", "")), this._invalidated = !
0, this.update()
}
function r(t, e, i, o) {
this._symbolLabelView = new P(t, this, void 0, "symbol", "showSymbolLabels"), this._baseLineView =
null, l.call(this, t, e, i, o), this._formatter = null, this._paneView = null;
var n = this;
this.properties().minTick.listeners().subscribe(null, function() {
n._createFormatter(), n.updateAllViews(), n._model.invalidate(new L(L.FULL_UPDATE))
}), this.properties().style.listeners().subscribe(this, this._updateBarFunction), this
.properties().lineStyle.priceSource.listeners().subscribe(this, this._updateBarFunction), this
.properties().areaStyle.priceSource.listeners().subscribe(this, this._updateBarFunction), this
.properties().baselineStyle.priceSource.listeners().subscribe(this, this._updateBarFunction),
this._updateBarFunction()
}
var s = i(8).Point,
a = i(77),
l = i(35).Study,
c = i(349),
h = i(19).PlotRowSearchMode,
u = i(893).OverlayPriceAxisView,
d = i(342),
p = d.SeriesAreaPaneView,
_ = d.SeriesLinePaneView,
f = d.SeriesHollowCandlesPaneView,
m = d.SeriesCandlesPaneView,
g = d.SeriesBarsPaneView,
v = d.SeriesBaselinePaneView,
y = d.SeriesBaselineLinePaneView,
b = i(126),
S = i(157),
w = S.DataWindowView,
T = S.DataWindowItem,
C = i(217).SeriesBarColorer,
x = i(94).HorizontalLineRenderer,
P = i(124),
L = i(22),
I = i(28).PriceFormatter,
k = i(3).propertyPages,
A = i(5),
M = !A.enabled("hide_study_overlay_legend_item");
o.prototype.update = function() {
if (this._visible = !1, this._source.properties().showPriceLine.value()) {
var t = this._source.lastValueData(void 0, !0);
t.noData || (this._visible = !0, this._points = [new s(0, t.coordinate)], this._color = t
.color)
}
}, o.prototype.renderer = function() {
var t = {};
return t.width = this._model.timeScale().width(), t.height = this._source.priceScale().height(),
t.points = this._points, t.color = this._color, t.linewidth = 1, t.linestyle = CanvasEx
.LINESTYLE_DOTTED, t.visible = this._visible, this._lineRenderer.setData(t), this
._lineRenderer
}, inherit(n, w), n.prototype._updateImpl = function() {
var t, e, i, o, n, r, s, l, c, u, d, p, _, f;
if (this._header = this._study.title(), !this._model.timeScale().isEmpty() && 0 !== this._study
.data().length && (i = !1, o = this._study.properties().style.value(), o === a.STYLE_BARS ?
(t = this._study.properties().barStyle.upColor.value(), e = this._study.properties()
.barStyle.downColor.value(), i = this._study.properties().barStyle
.barColorsOnPrevClose.value()) : o === a.STYLE_CANDLES ? (t = this._study
.properties().candleStyle.upColor.value(), e = this._study.properties().candleStyle
.downColor.value(), i = this._study.properties().candleStyle.barColorsOnPrevClose
.value()) : o === a.STYLE_HOLLOW_CANDLES ? (t = this._study.properties()
.hollowCandleStyle.upColor.value(), e = this._study.properties().hollowCandleStyle
.downColor.value(), i = !0) : o === a.STYLE_LINE ? t = e = this._study.properties()
.lineStyle.color.value() : o === a.STYLE_AREA && (t = e = this._study.properties()
.areaStyle.linecolor.value()), n = this._study.series(), r = this._model
.crossHairSource().appliedIndex(), void 0 !== (s = n.nearestIndex(r, h.NearestLeft)))) {
if (!(null !== (l = this._study.data().valueAt(s)) && l[TradingView.OPEN_PLOT] && l[
TradingView.HIGH_PLOT] && l[TradingView.LOW_PLOT] && l[TradingView.CLOSE_PLOT]))
return;
for (c = this._study.formatter(), this._items[0].setValue(c.format(l[TradingView
.OPEN_PLOT])), this._items[1].setValue(c.format(l[TradingView.HIGH_PLOT])), this
._items[2].setValue(c.format(l[TradingView.LOW_PLOT])), this._items[3].setValue(c
.format(l[TradingView.CLOSE_PLOT])), o === a.STYLE_BASELINE ? (d = this._study
.barColorer(), p = d.barStyle(s, !1), u = null != p.barBorderColor ? p
.barBorderColor : p.barColor) : i && s >= 1 ? (_ = this._study.data().valueAt(s -
1), u = _[TradingView.CLOSE_PLOT] <= l[TradingView.CLOSE_PLOT] ? t : e) : u = l[
TradingView.OPEN_PLOT] <= l[TradingView.CLOSE_PLOT] ? t : e, f = 0; f < 4; f++) this
._items[f].setColor(u)
}
}, n.prototype.items = function() {
return this._invalidated && (this._updateImpl(), this._invalidated = !1), this._items
}, n.prototype.update = function() {
this._invalidated = !0
}, n.prototype.additional = function() {
return this._invalidated && (this._updateImpl(), this._invalidated = !1), this._additional
}, inherit(r, l), r.prototype.createPlotLabels = function(t) {}, r.prototype
._showLastValueOnPriceScale = function() {
return this._model.properties().scalesProperties.showSeriesLastValue.value()
}, r.prototype.symbol = function() {
var t, e = this.properties().inputs.symbol.value(),
i = this._resolvedSymbols ? this._resolvedSymbols[e] : null;
return t = i ? i.name : e, t.toUpperCase()
}, r.prototype.lastValueData = function(t, e, i) {
var o, n, r, s, l, c, u, d, p, _, f, m, g, v = {
noData: !0
};
if (this._model.timeScale().isEmpty() || null == this.priceScale() || this.priceScale()
.isEmpty() || this.data().isEmpty()) return v;
if (null === (o = this._model.timeScale().visibleBars())) return v;
if (!this.properties().visible.value()) return v;
if (null == (n = this.nearestIndex(o.lastBar(), h.NearestLeft))) return v;
if (r = this._lastNonEmptyPlotRow(TradingView.CLOSE_PLOT), s = null !== r && o.contains(r
.index), l = null !== r ? r.value : null, c = e || s ? l : this.data().valueAt(n), u =
this
._barFunction(c), !c || !isNumber(u)) return v;
if (d = {
noData: !1
}, i && (d.price = u), this.priceScale().properties().percentage.value()) {
if (!(p = this.firstValue(!0))) return v;
u = this.priceScale().priceRange().convertToPercent(u, p)
}
switch (d.text = this.priceScale().formatter().format(u), d.floatCoordinate = this.priceScale()
.priceToCoordinate(u, !0), d.coordinate = Math.round(d.floatCoordinate), d.item = c, _ =
this.properties(), _.style.value()) {
case a.STYLE_BARS:
d.color = c[TradingView.OPEN_PLOT] <= c[TradingView.CLOSE_PLOT] ? _.barStyle.upColor
.value() : _.barStyle.downColor.value();
break;
case a.STYLE_CANDLES:
case a.STYLE_HOLLOW_CANDLES:
d.color = c[TradingView.OPEN_PLOT] <= c[TradingView.CLOSE_PLOT] ? _.candleStyle.upColor
.value() : _.candleStyle.downColor.value();
break;
case a.STYLE_LINE:
d.color = _.lineStyle.color.value();
break;
case a.STYLE_AREA:
d.color = _.areaStyle.color1.value();
break;
case a.STYLE_BASELINE:
f = _.baselineStyle, m = this.priceScale(), g = Math.round(m.height() * (Math.abs(100 -
f.baseLevelPercentage.value()) / 100)), d.color = d.coordinate < g ? _
.baselineStyle.topLineColor.value() : _.baselineStyle.bottomLineColor.value()
}
return d
}, r.prototype.firstValue = function(t) {
var e, i, o = this._model.timeScale().visibleBars();
return null === o ? null : (e = o.firstBar(), 0 === this.data().size() ? null : (i = this.data()
.search(e, h.NearestRight), null !== i ? this._barFunction(i.value) : null))
}, r.prototype.barFunction = function() {
return this._barFunction
}, r.prototype._updateBarFunction = function() {
this._barFunction = c.barFunction(this._currentPriceSource())
}, r.prototype._currentPriceSource = function() {
switch (this._properties.style.value()) {
case a.STYLE_LINE:
return this._properties.lineStyle.priceSource.value();
case a.STYLE_AREA:
return this._properties.areaStyle.priceSource.value();
case a.STYLE_BASELINE:
return this._properties.baselineStyle.priceSource.value()
}
return "close"
}, r.prototype.createViews = function() {
this._priceAxisViews = [], this._priceAxisViewsBase = [new u(this)], this._paneViews = [];
var t = null;
switch (this._properties.style.value()) {
case a.STYLE_BARS:
t = new g(this, this._model);
break;
case a.STYLE_CANDLES:
t = new m(this, this._model);
break;
case a.STYLE_HOLLOW_CANDLES:
t = new f(this, this._model);
break;
case a.STYLE_LINE:
t = new _(this, this._model);
break;
case a.STYLE_AREA:
t = new p(this, this._model);
break;
case a.STYLE_BASELINE:
t = new v(this, this._model), this._baseLineView = new y(this, this._model)
}
t && this._paneViews.push(t), null !== this._baseLineView && this._paneViews.push(this
._baseLineView), this._paneViews.push(new o(this, this._model)), this._paneViews.push(
this._symbolLabelView), this._dataWindowView || (this._dataWindowView = new n(this, this
._model)), this._statusView || (this._statusView = new b(this)), this
._priceAxisViews = [].concat(this._priceAxisViewsBase, this._hlinesPriceAsisViews, this
._horizlinesPriceAsisViews)
}, r.prototype.barColorer = function() {
return new C(this)
}, r.prototype.start = function(t) {
this._formatter = null, l.prototype.start.apply(this, arguments), this.priceScale() && this
.priceScale().updateFormatter()
}, r.prototype._createFormatter = function() {
var t, e, i, o, n, r, s;
"default" === this.properties().minTick.value() ? (t = this.properties().inputs.symbol.value(),
e = this._resolvedSymbols[t], this._formatter = new I(e ? e.pricescale : 100, e ? e
.minmov : 1, !!e && e.fractional)) : (i = this.properties().minTick.value(), o =
isNumber(i) ? ["100", "1", "false"] : i.split(","), n = parseInt(o[0]), r = parseInt(o[
1]), s = "true" === o[2], this._formatter = new I(n, r, s)), this.priceScale() &&
this.priceScale().updateFormatter()
}, r.prototype.formatter = function() {
return this._formatter || this._createFormatter(), this._formatter
}, r.prototype._changeInputs = function() {
l.prototype._changeInputs.call(this, this.inputs()), this.m_formatter = null, this.priceScale()
.updateFormatter()
}, r.prototype.title = function() {
var t, e = this.properties().inputs.symbol.value(),
i = this._resolvedSymbols[e];
return i ? (t = i.name, i.exchange && 0 !== i.exchange.length && (t += ", " + i.exchange)) : t =
e, t.toUpperCase()
}, r.prototype.bars = function() {
return this.m_data
}, r.prototype.open = function(t) {
return this.bars().valueAt(t)[TradingView.OPEN_PLOT]
}, r.prototype.high = function(t) {
return this.bars().valueAt(t)[TradingView.HIGH_PLOT]
}, r.prototype.low = function(t) {
return this.bars().valueAt(t)[TradingView.LOW_PLOT]
}, r.prototype.close = function(t) {
return this.bars().valueAt(t)[TradingView.CLOSE_PLOT]
}, r.prototype.hl2 = function(t) {
return (this.high(t) + this.low(t)) / 2
}, r.prototype.hlc3 = function(t) {
return (this.high(t) + this.low(t) + this.close(t)) / 3
}, r.prototype.ohlc4 = function(t) {
return (this.open(t) + this.high(t) + this.low(t) + this.close(t)) / 4
}, r.prototype.symbolInfo = function() {
if (!this._resolvedSymbols) return null;
var t = this._properties.inputs.symbol.value();
return t ? this._resolvedSymbols[t] : null
}, r.prototype.lastPriceLabelFixedCoordinate = function() {
return this._priceAxisViews[0]._fixedCoordinate
}, r.prototype.tags = function() {
var t = [],
e = this.symbolInfo();
return e ? t.push(e.name) : this._properties.inputs.symbol.value() && t.push(this._properties
.inputs.symbol.value()), t
}, r.prototype.statusView = function() {
return M ? l.prototype.statusView.call(this) : null
}, r.prototype.getStylesPropertyPage = function() {
return k.StudyOverlayStylesPropertyPage
}, e.OverlayDataWindowView = n, e.study_Overlay = r
},
function(t, e, i) {
"use strict";
function o(t, e) {
n.call(this, e), this._series = t, this._series.onRestarted().subscribe(this, o.prototype
.invalidate), this._series.onSymbolResolved().subscribe(this, o.prototype.invalidate), this
._series.onCompleted().subscribe(this, o.prototype.invalidate), this._series.onBoxSizeChanged()
.subscribe(this, o.prototype.invalidate)
}
var n = i(329),
r = i(878).getTranslatedSymbolDescription,
s = i(879).generateTitleForGui;
inherit(o, n), o.prototype.invalidate = function() {
delete this._text, this.update()
}, o.prototype.getSeriesPrecision = function() {
var t = 4;
return this._series._symbolInfo && this._series._symbolInfo.pricescale && (t = Math.round(Math
.log(this._series._symbolInfo.pricescale) / Math.log(10))), t
}, o.prototype.round = function(t) {
var e = this.getSeriesPrecision(),
i = Math.round(t * Math.pow(10, e)) / Math.pow(10, e);
return i || ""
}, o.prototype.update = function() {
if (!("_text" in this)) {
var t = this._series.symbolInfo() || {};
this._bold = !1, this._size = this._props.mainSeriesProperties.statusViewStyle.fontSize
.value() + "px", this._text = s({
description: this._props.mainSeriesProperties.statusViewStyle
.showSymbolAsDescription.value() ? t.name : r({
pro_name: t.pro_name,
description: t.description,
local_description: t.local_description,
language: t.language
}),
exchange: this._props.mainSeriesProperties.statusViewStyle.showExchange
.value() ? t.exchange : null,
symbol: this._series.symbol(),
interval: this._props.mainSeriesProperties.statusViewStyle.showInterval
.value() ? this._series.interval() : null,
style: this._series._properties.style.value(),
inputs: this._series.getInputsProperties().state(),
boxSize: this._series.data().boxSize,
reversalAmount: this._series.data().reversalAmount,
precision: this.getSeriesPrecision()
})
}
}, t.exports = o
},
function(t, e, i) {
"use strict";
function o(t) {
return t.description || ""
}
Object.defineProperty(e, "__esModule", {
value: !0
}), e.getTranslatedSymbolDescription = o
},
function(t, e, i) {
"use strict";
function o(t) {
function e(t, e) {
return Math.round(t * Math.pow(10, e)) / Math.pow(10, e) || ""
}
var i, o, s, a = t || {},
l = "QUANDL" === a.exchange,
c = "",
h = {
symbolDescription: "",
interval: "",
exchange: "",
chartStyle: "",
extended: ""
};
switch (a.description && l ? 2 === a.description.split("/").length ? h.symbolDescription = a
.description.split("/")[1] : (i = a.description.split("'").filter(function(t) {
return t.length
}), i.forEach(function(t) {
t = t && ("/" === t[0] || /\d+\/\(?/.test(t)) ? [t] : t.split("/").filter(function(
t) {
return t.length
}), h.symbolDescription += t[2 === t.length ? 1 : 0]
})) : a.description ? h.symbolDescription = a.description : h.symbolDescription = a.symbol, a
.interval && (h.interval = n(a.interval)), l && a.description && (o = /[\w_]+\/[\w_]+/.exec(a
.description), o && o[0] ? h.provider = o[0].split("/")[0] : h.provider = a.description
.split("/")[0]), a.exchange && (h.exchange = a.exchange), a.style) {
case r.STYLE_RENKO:
s = a.inputs.style + ("ATR" === a.inputs.style ? "(" + a.inputs.atrLength + ")" : ""), h
.chartStyle = $.t("Renko") + " [" + s + ", " + e(a.boxSize, 4) + "]";
break;
case r.STYLE_PB:
h.chartStyle = $.t("Line Break") + " [" + a.inputs.lb + "]";
break;
case r.STYLE_KAGI:
s = a.inputs.style + ("ATR" === a.inputs.style ? "(" + a.inputs.atrLength + ")" : ""), h
.chartStyle = $.t("Kagi") + " [" + s + (void 0 !== a.reversalAmount ? ", " + e(a
.reversalAmount, 8) : "") + "]";
break;
case r.STYLE_PNF:
s = a.inputs.style + ("ATR" === a.inputs.style ? "(" + a.inputs.atrLength + ")" : ""), h
.chartStyle = $.t("PnF") + " [" + s + ", " + e(a.boxSize, 8) + ", " + a.inputs
.reversalAmount + "]";
break;
case r.STYLE_HEIKEN_ASHI:
h.chartStyle = $.t("Heikin Ashi")
}
return a.extended && (h.extended = window.t("ext", {
context: "shorthand_for_extended_session"
})), c = h.symbolDescription + (h.interval ? ", " + h.interval : "") + (h.provider ? ", " + h
.provider : "") + (h.exchange ? ", " + h.exchange : "") + (h.chartStyle ? ", " + h
.chartStyle : "") + (h.extended ? ", " + h.extended : ""), c = c.replace(/\'/g, "")
}
var n = i(162).translatedIntervalString,
r = i(49);
t.exports = {
generateTitleForGui: o
}
},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(9), r = i(19), s = i(341), a = i(49), l = function(t) {
function e() {
return null !== t && t.apply(this, arguments) || this
}
return o.__extends(e, t), e.prototype.lastPrice = function() {
return this._getSource().data().lastProjectionPrice
}, e.prototype._updateRendererData = function(t) {
var e, i, o, s, l, c, h, u, d, p, _, f, m, g, v, y, b, S, w, T, C, x;
t.visible = !1, e = this._getData().model, e.properties().scalesProperties
.showSeriesLastValue.value() && (i = this._getSource(), o = i.priceScale(), s = e
.timeScale(), l = this.lastPrice(), s.isEmpty() || o.isEmpty() || void 0 ===
l || null !== (c = s.visibleBars()) && (h = c.firstBar(), u = c.lastBar(), d = i
.data(), null !== (p = d.search(u, r.PlotRowSearchMode.NearestLeft)) &&
void 0 !== (_ = i.nearestIndex(h, r.PlotRowSearchMode.NearestRight)) && (f =
n.ensureNotNull(d.valueAt(_))[TradingView.CLOSE_PLOT], m = l, o
.properties().percentage.value() && (m = 100 * (m - f) / f), g = t
.background, v = "", y = !1, b = i.properties(), S = b.style.value() ===
a.STYLE_HEIKEN_ASHI, S && b.haStyle.showRealLastPrice.value() ? (this
._isCountdownEnabled() && b.showCountdown.value() && (v = this
._countdownText()), w = i.lastValueData(TradingView.CLOSE_PLOT,
!0), w.noData || w.color === t.background || (g = w.color), T =
i.lastValueData(TradingView.CLOSE_PLOT, !1), w.noData || T.noData ||
(y = w.index === T.index)) : (C = i.barColorer(), x = C.barStyle(p
.index, !0), g = x.barColor, y = !0), t.background = g, t
.secondLine = v, t.visible = y,
t.color = this.generateTextColor(g), t.coordinate = o.priceToCoordinate(
m), t.text = o.formatter().format(m))))
}, e
}(s.SeriesPriceAxisView), e.ProjectionSeriesPriceAxisView = l
},
function(t, e, i) {
"use strict";
function o(t, e) {
h.call(this), this._series = t, this._model = e, this._items.push(new u($.t("O", {
context: "in_legend"
}), "")), this._items.push(new u($.t("H", {
context: "in_legend"
}), "")), this._items.push(new u($.t("L", {
context: "in_legend"
}), "")), this._items.push(new u($.t("C", {
context: "in_legend"
}), "")), this._invalidated = !0, this.update()
}
var n = i(32),
r = n.parseRgb,
s = n.distanceRgb,
a = n.invertRgb,
l = n.rgbToHexString,
c = i(157),
h = c.DataWindowView,
u = c.DataWindowItem,
d = i(162).translatedIntervalString,
p = i(19).PlotRowSearchMode;
inherit(o, h), o.prototype.update = function() {
this._invalidated = !0
}, o.prototype._updateImpl = function() {
var t, e, i, o, n, c, h, u, _, f, m, g, v;
if (this._series.symbolInfo() ? (this._header = [this._series.symbolInfo().name, d(this._series
.interval()), this._series.symbolInfo().exchange].join(", "), this._title = this
._series.symbolInfo().description) : this._header = this._series.symbol(), this._items[
0].setValue($.t("n/a")), this._items[1].setValue($.t("n/a")), this._items[2].setValue($
.t("n/a")), this._items[3].setValue($.t("n/a")), !this._model.timeScale().isEmpty() &&
0 !== this._series.bars().size() && (t = this._series.data().size() - 1, e = this._model
.crossHairSource().appliedIndex(), void 0 !== (i = isNumber(e) ? this._series
.nearestIndex(e, p.NearestLeft) : this._series.nearestIndex(t, p.NearestLeft))))
for (o = this._series.data().valueAt(i), n = this._series.formatter(), this._items[0]
.setValue(n.format(o[TradingView.OPEN_PLOT])), this._items[1].setValue(n.format(o[
TradingView.HIGH_PLOT])), this._items[2].setValue(n.format(o[TradingView
.LOW_PLOT])), this._items[3].setValue(n.format(o[TradingView.CLOSE_PLOT])), c = this
._series.barColorer(), h = c.barStyle(i, !1), u = null != h.barBorderColor ? h
.barBorderColor : h.barColor, _ = this._series.model().paneForSource(this._series), f =
_._properties.background.value(), m = r(u), g = r(f), s(m, g) < 70 && (u = l(a(m))), v =
0; v < 4; v++) this._items[v].setColor(u)
}, o.prototype.items = function() {
return this._invalidated && (this._updateImpl(), this._invalidated = !1), this._items
}, o.prototype.dump = function() {
return {
header: this._header,
items: this._items
}
}, t.exports = o
},
function(t, e, i) {
"use strict";
function o(t) {
var e, i;
if (0 === t.length) return !1;
if (-1 === (e = t.findIndex(function(t) {
return l.coordinateIsValid(t.y)
}))) return !1;
for (i = t.length - 1; i > e && !l.coordinateIsValid(t[i].y);) i--;
return !(e >= i)
}
function n(t, e) {
var i, o, n, a, c, h = [],
u = [],
d = null;
for (i = 0; i < t.length; i++) {
if (o = t[i], n = t[i + 1] || {}, l.coordinateIsValid(o.y)) o.y <= e && h.push(o), o.y >= e && u
.push(o), d = o;
else {
if (null === d) continue;
o = d
}
l.coordinateIsValid(n.y) && ((o.y > e && n.y < e || o.y < e && n.y > e) && (Math.abs(o.x - n
.x) < 1 ? (a = new r.Point(o.x, e), h.push(a), u.push(a)) : null !== (c = s
.intersectLineSegments(o, n, new r.Point(o.x, e), new r.Point(n.x, e))) && (a =
o.add(n.subtract(o).scaled(c)), h.push(a), u.push(a))))
}
return {
topItems: h,
bottomItems: u
}
}
var r, s, a, l, c, h, u;
Object.defineProperty(e, "__esModule", {
value: !0
}), r = i(8), s = i(132), a = i(44), l = i(45), c = i(86), h = i(11),
e.itemsRangeIsValid = o, e.splitItems = n, u = function() {
function t() {
this._data = null
}
return t.prototype.setData = function(t) {
this._data = t
}, t.prototype.draw = function(t) {
var e, i, r, s, a, l, c, h, u, d, p, _, f, m, g;
null !== this._data && (e = this._data, i = e.items, r = e.baseLevelCoordinate, s = e
.bottom, a = e.bottomFillColor1, l = e.bottomFillColor2, c = e.topFillColor1,
h = e.topFillColor2, u = e.topLineColor, d = e.bottomLineColor, p = e
.topLineWidth, _ = e.bottomLineWidth, o(i) && (f = n(i, r), m = f.topItems, g =
f.bottomItems, t.lineCap = "round", t.lineJoin = "round", t.translate(.5,
.5), 0 !== m.length && (t.beginPath(), t.moveTo(m[0].x, r), this
._makeLine(t, m, !0, 0), t.closePath(), t.fillStyle = this
._makeLinearGradient(t, c, h, r - s, r), t.fill(), t.beginPath(), this
._makeLine(t, m, !1, 0), t.lineWidth = p, t.strokeStyle = u, t.stroke()
), 0 !== g.length && (t.beginPath(), t.moveTo(g[0].x, r), this
._makeLine(t, g, !0, 1), t.closePath(), t.fillStyle = this
._makeLinearGradient(t, a, l, r, r + s), t.fill(), t.beginPath(), this
._makeLine(t, g, !1, 1), t.lineWidth = _, t.strokeStyle = d, t.stroke())
))
}, t.prototype.hitTest = function(t) {
var e, i, o, n, s, u, d, p, _, f, m;
if (null === this._data) return null;
for (e = this._data, i = e.items, o = e.topLineWidth, n = e.bottomLineWidth, s = l
.selectionTolerance((o + n) / 2), u = c.lowerbound(i, t, function(t, e) {
return t.x <= e.x
}), d = Math.max(1, u - 1), p = Math.min(i.length - 1, u + 1), _ = d; _ <= p; ++_)
if (f = i[_ - 1], m = i[_], a.distanceToSegment(new r.Point(f.x, f.y), new r.Point(m
.x, m.y), new r.Point(t.x, t.y)).distance <= s) return new h(h.REGULAR);
return null
}, t.prototype._makeLine = function(t, e, i, o) {
var n, r, s, a, c, h, u, d, p, _;
if (null !== this._data && -1 !== (n = e.findIndex(function(t) {
return l.coordinateIsValid(t.y)
})))
for (r = this._data, s = r.barSpacing, a = r.baseLevelCoordinate, c = .25 * s, u = e
.length, d = n; d < u; d++)
if (p = e[d], _ = e[d + 1] || {}, l.coordinateIsValid(p.y)) {
if (0 === o) {
if (h && h.y >= a && p.y >= a) {
t.moveTo(p.x, p.y);
continue
}
} else if (h && h.y <= a && p.y <= a) {
t.moveTo(p.x, p.y);
continue
}
if (h && l.coordinateIsValid(h.y)) t.lineTo(p.x, p.y), i && !l
.coordinateIsValid(_.y) && t.lineTo(p.x, a);
else if (_ && l.coordinateIsValid(_.y)) i ? (d !== n && t.lineTo(p.x, a), t
.lineTo(p.x, p.y)) : t.moveTo(p.x, p.y);
else if (i) {
if (0 === d) continue;
d !== n && t.lineTo(p.x - c, a), t.lineTo(p.x - c, p.y), t.lineTo(p.x +
c, p.y), t.lineTo(p.x + c, a)
} else t.moveTo(p.x - c, p.y), t.lineTo(p.x + c, p.y);
h = p
}
}, t.prototype._makeLinearGradient = function(t, e, i, o, n) {
var r = t.createLinearGradient(0, o, 0, n);
return r.addColorStop(0, e), r.addColorStop(1, i), r
}, t
}(), e.PaneRendererBaseline = u
},
function(t, e, i) {
"use strict";
function o() {
this._data = null
}
function n(t) {
this._series = t, this._invalidated = !0, this._renderer = new o
}
var r = i(8).Point,
s = i(53).CompositeRenderer,
a = i(177).DateFormatter,
l = i(135).TimeFormatter;
o.prototype.setData = function(t) {
this._data = t
}, o.prototype.hitTest = function() {
return null
}, o.prototype.draw = function(t) {
var e, i, o, n, r, s, a, l, c, h, u, d, p, _, f, m;
null !== this._data && (e = 5, i = 12, o = 5, n = 8, r = 13, s = 0, t.save(), t.setFont(r +
"px Arial"), c = $.t("Last available bar"), this._data.eod ? s = t.measureText(c)
.width : (a = t.measureText(this._data.dateString || "").width, l = t.measureText(this
._data.timeString || "").width, s = Math.max(a, l)), h = this._data.timeString ? 2 :
1,
t.fillStyle = this._data.eod ? "#FF4040" : "#58A3CD", t.translate(this._data.point.x +
.5, this._data.point.y + .5), u = Math.round(-s / 2) - n, d = -(r + e) * h - e - i -
o, p = Math.round(u + s + 2 * n), _ = -i - o, t.beginPath(), t.moveTo(u, d), t.lineTo(p,
d), t.lineTo(p, _), t.lineTo(i, _), t.lineTo(0, _ + i), t.lineTo(-i, _), t.lineTo(u,
_), t.fill(), t.fillStyle = "#FFFFFF", t.textBaseline = "top", this._data.eod ? t
.fillText(c, u + n, d + e) : (f = u + n + (s - a) / 2, t.fillText(this._data.dateString,
f, d + e), this._data.timeString && (m = u + n + (s - l) / 2, t.fillText(this
._data.timeString, m, d + 2 * e + r))), t.restore())
}, n.prototype.update = function() {
this._invalidated = !0
}, n.prototype.updateImpl = function() {
var t, e, i, o, n, s, c;
delete this._point, delete this._dateString, delete this._timeString, delete this._eod,
void 0 !== (t = this._series.gotoDateResult()) && (e = this._series.model().timeScale()
.timePointToIndex(t.timestamp), i = this._series.bars(), o = null, e < i.firstIndex() &&
null !== i.first() ? (e = i.firstIndex(), o = i.first().value) : e > i.lastIndex() &&
null !== i.last() ? (e = i.lastIndex(), o = i.last().value) : o = i.valueAt(e), null !==
o && (n = this._series.priceScale().priceToCoordinate(o[TradingView.HIGH_PLOT]), s =
this._series.model().timeScale().indexToCoordinate(e), this._point = new r(s, n), t
.eod ? this._eod = !0 : (c = this._series.model().timeScale().indexToUserTime(e),
this._dateString = (new a).format(c), this._series.isDWM() || (this
._timeString = (new l).format(c)))))
}, n.prototype.renderer = function() {
return this._invalidated && (this.updateImpl(), this._invalidated = !1), this._point ? (this
._renderer.setData({
point: this._point,
dateString: this._dateString,
timeString: this._timeString,
eod: this._eod
}), this._renderer) : new s
}, t.exports = n
},
function(t, e, i) {
"use strict";
function o() {
this._data = null, this._colors = null
}
function n(t, e, i) {
this._series = t, this._lastBar = e, this._direction = i, this._renderer = new o
}
var r = i(9).ensureNotNull;
i(345).ChartSession, i(7).getLogger("Chart.Snapshot");
o.prototype.setData = function(t) {
this._data = t
}, o.prototype.setPredictCode = function(t) {
this._colors = this.getBackgroundColor(t)
}, o.prototype.hitTest = function() {
return null
}, o.prototype.getBackgroundColor = function(t) {
return [{
background: "rgba(255, 158, 171, 0.3)",
line: "#7E202F"
}, {
background: "rgba(244, 255, 158, 0.3)",
line: "#EBFF3F"
}, {
background: "rgba(195, 255, 160, 0.3)",
line: "#308020"
}][t + 1]
}, o.prototype.draw = function(t) {
if (null !== this._data && null !== this._colors) {
t.fillStyle = this._colors.background, t.fillRect(Math.max(0, this._data.x), 0, this._data
.width, this._data.height), t.strokeStyle = this._colors.line, t.beginPath(), t
.lineWidth = 1;
var e = Math.round(this._data.x);
t.moveTo(e, 0), t.lineTo(e, this._data.height), t.stroke()
}
}, n.prototype.update = function() {
this._x = this._series.m_model.timeScale().indexToCoordinate(this._lastBar) + .5 * this._series
.m_model.timeScale().barSpacing() + 1
}, n.prototype.renderer = function() {
var t = {
x: this._x,
height: this._series.priceScale().height(),
width: this._series.m_model.timeScale().width()
},
e = this._series.data().bars(),
i = r(e.last()).value[TradingView.CLOSE_PLOT] > r(e.valueAt(this._lastBar))[TradingView
.CLOSE_PLOT] ? 1 : -1,
o = 0;
return 1 === this._direction ? o = i : 2 === this._direction && (o = -1 * i),
this._renderer.setData(t), this._renderer.setPredictCode(o), this._renderer
}, e.FutureBarsPaneView = n
},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c, h;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(9), n = i(17), r = i(10), s = i(61), a = i(7), l = a.getLogger(
"ChartApi.AbstractSession"), c = "", h = function() {
function t(t, e, i) {
this._isConnected = new n(!1), this._state = 0, this._isConnectForbidden = !1, this
._sessionId = c, this._sessionIdChanged = new r, this._chartApi = t, this
._sessionPrefix = e, this._shouldReconnectAfterCriticalError = i
}
return t.prototype.destroy = function() {
this._logNormal("Destroying session"), this._isConnected.unsubscribe(), this
.disconnect(), this._sessionIdChanged.destroy(), delete this._chartApi, this
._logNormal("Session has been destroyed")
}, t.prototype.isConnected = function() {
return this._isConnected
}, t.prototype.sessionId = function() {
return this._sessionId
}, t.prototype.onSessionIdChanged = function() {
return this._sessionIdChanged
}, t.prototype.connect = function() {
0 === this._state && (o.assert(!this._isConnectForbidden,
"Cannot call connect because it is forbidden at this moment"), this
._setSessionId(this._sessionPrefix + "_" + s.randomHash()), this._logNormal(
"Connecting session - wait until transport stay connected"), this._state =
1, this._chartApi.createSession(this._sessionId, this))
}, t.prototype.disconnect = function() {
var t = this;
0 !== this._state && (o.assert(this._sessionId !== c, "sessionId must not be invalid"),
this._logNormal("Disconnecting session..."), this._forbidConnectWhile(
function() {
t._chartApi.connected() && t._sendRemoveSession(), t
._processDestroyingOnServer()
}))
}, t.prototype.onMessage = function(t) {
var e, i;
switch (t.method) {
case "connected":
return void this._onChartApiConnected();
case "disconnected":
return void this._onChartApiDisconnected();
case "critical_error":
return e = t.params[0] + "", i = t.params[1] + "", void this._onCriticalError(e,
i)
}
this._onMessage(t)
}, t.prototype._getChartApi = function() {
return this._chartApi
}, t.prototype._generateLogMessage = function(t) {
return "[" + this._sessionId + "] " + t
}, t.prototype._onCriticalError = function(t, e) {
var i = this;
this._logError("Critical error. Reason=" + t + ", info=" + e + "."), this
._forbidConnectWhile(function() {
i._processDestroyingOnServer()
}), this._shouldReconnectAfterCriticalError ? (this._logNormal(
"Reconnecting after critical error..."), this.connect()) : this._logNormal(
"Reconnecting after critical error skipped")
}, t.prototype._onChartApiConnected = function() {
o.assert(1 === this._state, "Session is not registered"), this._logNormal(
"Transport is connected. Creating session on the server"), this
._sendCreateSession(), this._state = 2, this._isConnected.setValue(!0)
}, t.prototype._onChartApiDisconnected = function() {
var t = this;
this._logNormal("Transport is disconnected. Reconnecting..."), this._forbidConnectWhile(
function() {
t._processDestroyingOnServer()
}), this.connect()
}, t.prototype._setSessionId = function(t) {
var e = this._sessionId;
this._logNormal("Changing sessionId: old=" + e + ", new=" + t), this._sessionId = t,
this._sessionIdChanged.fire(t, e)
}, t.prototype._logNormal = function(t) {
l.logNormal(this._generateLogMessage(t))
},
t.prototype._logError = function(t) {
l.logError(this._generateLogMessage(t))
}, t.prototype._processDestroyingOnServer = function() {
this._state = 0, this._isConnected.setValue(!1), this._chartApi.removeSession(this
._sessionId), this._setSessionId(c)
}, t.prototype._forbidConnectWhile = function(t) {
this._isConnectForbidden = !0, t(), this._isConnectForbidden = !1
}, t
}(), e.Session = h
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><path d="M12.5 17.207L18.707 11h2l3.647-3.646-.708-.708L20.293 10h-2L12.5 15.793l-3-3-4.854 4.853.708.708L9.5 14.207z"/><path d="M9 16h1v1H9zm1 1h1v1h-1zm-1 1h1v1H9zm2 0h1v1h-1zm-1 1h1v1h-1zm-1 1h1v1H9zm2 0h1v1h-1zm-3-3h1v1H8zm-1 1h1v1H7zm-1 1h1v1H6zm2 0h1v1H8zm-1 1h1v1H7zm-2 0h1v1H5zm17-9h1v1h-1zm1-1h1v1h-1zm0 2h1v1h-1zm-1 1h1v1h-1zm-1 1h1v1h-1zm2 0h1v1h-1zm-1 1h1v1h-1zm-1 1h1v1h-1zm2 0h1v1h-1zm-1 1h1v1h-1zm-1 1h1v1h-1zm2 0h1v1h-1zm-1 1h1v1h-1zm-1 1h1v1h-1zm2 0h1v1h-1zm-5-7h1v1h-1zm2 0h1v1h-1zm1-1h1v1h-1zm-2 2h1v1h-1zm-1 1h1v1h-1zm2 0h1v1h-1zm-1 1h1v1h-1zm-1 1h1v1h-1zm2 0h1v1h-1zm-1 1h1v1h-1zm-1 1h1v1h-1zm2 0h1v1h-1zm-1 1h1v1h-1zm-2-6h1v1h-1zm-1 1h1v1h-1zm-1 1h1v1h-1zm2 0h1v1h-1zm-1 1h1v1h-1zm-1 1h1v1h-1zm2 0h1v1h-1zm-1 1h1v1h-1zm-1 1h1v1h-1zm2 0h1v1h-1zm-3-3h1v1h-1zm-1 1h1v1h-1zm-1 1h1v1h-1zm2 0h1v1h-1zm-1 1h1v1h-1z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><path d="M18 6h1v16h-1z"/><path d="M18.5 18H22v1h-3.5zM15 13h3.5v1H15zm-5-6h1v16h-1z"/><path d="M10.5 9H14v1h-3.5zM7 20h3.5v1H7z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><path d="M17 11v6h3v-6h-3zm-.5-1h4a.5.5 0 0 1 .5.5v7a.5.5 0 0 1-.5.5h-4a.5.5 0 0 1-.5-.5v-7a.5.5 0 0 1 .5-.5z"/><path d="M18 7h1v3.5h-1zm0 10.5h1V21h-1z"/><path d="M9 8v12h3V8H9zm-.5-1h4a.5.5 0 0 1 .5.5v13a.5.5 0 0 1-.5.5h-4a.5.5 0 0 1-.5-.5v-13a.5.5 0 0 1 .5-.5z"/><path d="M10 4h1v3.5h-1zm0 16.5h1V24h-1z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><path d="M9 8v12h3V8H9zm-1-.502C8 7.223 8.215 7 8.498 7h4.004c.275 0 .498.22.498.498v13.004a.493.493 0 0 1-.498.498H8.498A.496.496 0 0 1 8 20.502V7.498z"/><path d="M10 4h1v3.5h-1z"/><path d="M17 6v6h3V6h-3zm-1-.5c0-.276.215-.5.498-.5h4.004c.275 0 .498.23.498.5v7c0 .276-.215.5-.498.5h-4.004a.503.503 0 0 1-.498-.5v-7z"/><path d="M18 2h1v3.5h-1z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><path d="M17 11v6h3v-6h-3zm-.5-1h4a.5.5 0 0 1 .5.5v7a.5.5 0 0 1-.5.5h-4a.5.5 0 0 1-.5-.5v-7a.5.5 0 0 1 .5-.5z"/><path d="M18 7h1v3.5h-1zm0 10.5h1V21h-1z"/><path d="M9 8v11h3V8H9zm-.5-1h4a.5.5 0 0 1 .5.5v12a.5.5 0 0 1-.5.5h-4a.5.5 0 0 1-.5-.5v-12a.5.5 0 0 1 .5-.5z"/><path d="M10 4h1v5h-1zm0 14h1v5h-1zM8.5 9H10v1H8.5zM11 9h1.5v1H11zm-1 1h1v1h-1zm-1.5 1H10v1H8.5zm2.5 0h1.5v1H11zm-1 1h1v1h-1zm-1.5 1H10v1H8.5zm2.5 0h1.5v1H11zm-1 1h1v1h-1zm-1.5 1H10v1H8.5zm2.5 0h1.5v1H11zm-1 1h1v1h-1zm-1.5 1H10v1H8.5zm2.5 0h1.5v1H11z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><path d="M11.982 16.689L17.192 12h3.033l4.149-4.668-.748-.664L19.776 11h-2.968l-4.79 4.311L9 12.293l-4.354 4.353.708.708L9 13.707z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill="none" stroke="currentColor"><path stroke-dasharray="1,1" d="M4 14.5h22"/><path stroke-linecap="round" stroke-linejoin="round" d="M7.5 12.5l2-4 1 2 2-4 3 6"/><path stroke-linecap="round" d="M5.5 16.5l-1 2"/><path stroke-linecap="round" stroke-linejoin="round" d="M17.5 16.5l2 4 2-4m2-4l1-2-1 2z"/></g></svg>'
},
function(t, e, i) {
"use strict";
var o, n, r;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(67), r = function(t) {
function e(e) {
var i = t.call(this) || this;
return i._source = e, i
}
return o.__extends(e, t), e.prototype._updateRendererData = function(t) {
t.visible = !1;
var e = this._source.lastValueData("close", !1);
e.noData || (t.background = e.color, t.color = this.generateTextColor(e.color), t
.coordinate = e.coordinate, t.floatCoordinate = e.floatCoordinate, t.text = e
.text, t.visible = !0)
}, e
}(n.PriceAxisView), e.OverlayPriceAxisView = r
},
function(t, e, i) {
"use strict";
function o(t, e, i, o) {
this._symbolLabelView = new s(t, this, "compare", "symbol", "showSymbolLabels"), n.call(this, t, e,
i, o);
var r = this;
this._properties.minTick.listeners().subscribe(null, function() {
r._createFormatter()
}), this.properties().minTick.listeners().subscribe(null, function() {
r._model.invalidate(new a(a.FULL_UPDATE))
}), this._properties.merge({
skipHistogramBaseOnAutoScale: !0
})
}
var n = i(35).Study,
r = i(125).DataVendorStudyDataWindowView,
s = i(124),
a = i(22),
l = i(28).PriceFormatter,
c = i(3).propertyPages,
h = i(5),
u = !h.enabled("hide_study_compare_legend_item");
inherit(o, n), o.prototype.createPlotLabels = function(t) {}, o.prototype._showLastValueOnPriceScale =
function() {
return this._model.properties().scalesProperties.showSeriesLastValue.value()
}, o.prototype.createViews = function() {
this._dataWindowView || (this._dataWindowView = new r(this, this._model)), n.prototype
.createViews.call(this), this._paneViews.push(this._symbolLabelView)
}, o.prototype._createFormatter = function() {
var t, e, i, o, n, r = this.properties().inputs.symbol.value(),
s = this._resolvedSymbols ? this._resolvedSymbols[r] : null;
"default" === this.properties().minTick.value() ? this._formatter = new l(s ? s.pricescale :
100, s ? s.minmov : 1, !!s && s.fractional) : (t = this.properties().minTick.value(),
e = isNumber(t) ? ["100", "1", "false"] : t.split(","), i = parseInt(e[0]), o =
parseInt(e[1]), n = "true" === e[2], this._formatter = new l(i, o, n)), this
.priceScale() && this.priceScale().updateFormatter()
}, o.prototype.symbol = function() {
var t, e = this.properties().inputs.symbol.value(),
i = this._resolvedSymbols ? this._resolvedSymbols[e] : null;
return t = i ? i.name : e, t.toUpperCase()
}, o.prototype.title = function(t) {
var e, i = this.properties().inputs.symbol.value(),
o = this._resolvedSymbols ? this._resolvedSymbols[i] : null;
return o ? (e = o.name, o.exchange && 0 !== o.exchange.length && (e += ", " + o.exchange)) : e =
i, e.toUpperCase()
}, o.prototype.symbolInfo = function() {
if (!this._resolvedSymbols) return null;
var t = this._properties.inputs.symbol.value();
return t ? this._resolvedSymbols[t] : null
}, o.prototype.lastPriceLabelFixedCoordinate = function() {
return this._priceAxisViews[0]._fixedCoordinate
}, o.prototype.tags = function() {
var t = this.symbol();
return t ? [t] : []
}, o.prototype.statusView = function() {
return u ? n.prototype.statusView.call(this) : null
}, o.prototype.getInputsPropertyPage = function() {
return c.StudyCompareInputsPropertyPage
}, t.exports = o
},
function(t, e, i) {
"use strict";
function o(t, e, i, o) {
n.call(this, t, e, i, o)
}
var n = i(35).Study;
inherit(o, n), o.prototype.hasContextMenu = function() {
return !1
}, o.prototype.showInObjectTree = function() {
return !1
}, o.prototype.isSavedInStudyTemplates = function() {
return !1
}, o.prototype.isRemovedByStudyTemplates = function() {
return !1
}, o.prototype.removeByRemoveAllStudies = function() {
return !1
}, o.prototype.isUserDeletable = function() {
return !1
}, o.prototype.statusView = function() {
return !1
}, o.prototype.isDraggable = function() {
return !1
}, t.exports = o
},
function(t, e, i) {
"use strict";
function o(t, e, i, o) {
n.call(this, t, e, i, o)
}
var n = i(35).Study,
r = i(3).propertyPages;
inherit(o, n), o.prototype.getStylesPropertyPage = function() {
return r.VolumePropertyPage
}, e.study_Volume = o
},
function(t, e, i) {
"use strict";
function o(t, e, i, o) {
s.call(this, t, e, i, o)
}
var n = i(9).assert,
r = i(15).clone,
s = i(35).Study,
a = i(19).PlotList;
inherit(o, s), o.prototype.clearData = function() {
s.prototype.clearData.call(this), this._underlyingData = new a(this._plotFields)
}, o.prototype._mergeData = function(t) {
var e, i;
return this._invalidateLastNonEmptyPlotRowCache(), e = this._underlyingData.firstIndex(), this
._underlyingData.merge(t), e !== this._underlyingData.firstIndex() && (this.m_data = new a(
this._underlyingData.plotNames())), i = this.m_data.lastIndex(), this._underlyingData
.range(i, this._underlyingData.lastIndex()).each(function(t, e) {
return this.m_data.add(t, r(e)), !1
}.bind(this)), this._plotsForStrategyProcessing().forEach(function(t) {
this._createStrategy(t.strategy, t.strategyIndex, t.targetIndex, i).rebuildData(this
.m_data)
}, this), this.m_data
}, o.prototype._plotsForStrategyProcessing = function() {
var t = ["dataoffset"],
e = [];
return this._metaInfo.plots.forEach(function(i, o) {
var r, s;
t.indexOf(i.type) > -1 && (r = null, this._metaInfo.plots.forEach(function(t, e) {
t.id === i.target && (r = e)
}), n(r >= 0, "target plot not found for strategy plot " + i.id), s = {
strategy: i.type,
strategyIndex: o,
targetIndex: r
}, e.push(s))
}, this), e
}, o.prototype._createStrategy = function(t, e, i, n) {
return new o["Strategy_" + t](e, i, n)
}, o.Strategy_dataoffset = function(t, e, i) {
this._strategyPlotIndex = t, this._targetPlotIndex = e, this._startIndex = i
}, o.Strategy_dataoffset.prototype.rebuildData = function(t) {
var e = this._targetPlotIndex + 1,
i = this._strategyPlotIndex + 1,
o = null,
n = null;
t.range(this._startIndex || t.firstIndex(), t.lastIndex()).each(function(r, s) {
var a, l, c, h = s[e],
u = s[i] ? Math.round(s[i]) : null;
return s[e] = null, s[i] = null, !(!u || u > 0) && (a = r + u, l = {
pointIndex: a,
value: h
}, n ? n.pointIndex !== l.pointIndex && (a >= 0 && (t.valueAt(a)[e] = h),
c = !1, o && (c = o.value <= n.value && n.value <= h || o.value >= n
.value && n.value >= h), c ? n.pointIndex >= 0 && (t.valueAt(n
.pointIndex)[e] = null) : o = n, n = l) : n = l, !1)
})
}, t.exports = o
},
function(t, e, i) {
"use strict";
function o(t, e, i) {
n.call(this, t, e, i)
}
var n = i(105).LineStudyMtp;
inherit(o, n), o.prototype._mtpStudyId = function() {
return "mtp_tsanalysis"
}, o.prototype.pointsCount = function() {
return 1
}, o.prototype._studyInputs = function() {
var t, e, i = this.points();
return i.length < this.pointsCount() ? null : (t = i[0].index, e = this._model.mainSeries()
.bars().valueAt(t), null === e ? null : [this.properties().inputs.displayZoneLabels
.value(), 1e3 * e[TradingView.TIME_PLOT], this.properties().inputs.account_size
.value(), this.properties().inputs.percent_risk.value(), this.properties().inputs
.tickEntryOffset.value(), this.properties().inputs.tickStopOffset.value(), this
.properties().inputs.minRRRatio.value(), this.properties().inputs
.shouldFilterWPTZones.value(), this.properties().inputs.shouldFilterSTFTrends
.value()
])
}, t.exports = o
},
function(t, e, i) {
"use strict";
function o(t, e, i) {
n.call(this, t, e, i), this._symbolIntervalChanged = !1, this._model.mainSeries()
.onSymbolIntervalChanged().subscribe(this, this.onSymbolIntervalChanged)
}
var n = i(105).LineStudyMtp;
inherit(o, n), o.prototype._mtpStudyId = function() {
return "mtp_decisionpoint"
}, o.prototype.onSymbolIntervalChanged = function() {
this._symbolIntervalChanged = !0
}, o.prototype.pointsCount = function() {
return 1
}, o.prototype._studyInputs = function() {
var t, e, i = this.points();
return i.length < this.pointsCount() ? null : (t = i[0].index, e = this._model.mainSeries()
.bars().valueAt(t), null === e ? null : [this.properties().inputs.displayZoneLabels
.value(), this._symbolIntervalChanged, 1e3 * e[TradingView.TIME_PLOT]
])
}, o.prototype.onData = function(t) {
n.prototype.onData.call(this, t), this._symbolIntervalChanged = !1
}, t.exports = o
},
function(t, e, i) {
"use strict";
function o(t, e, i) {
n.call(this, t, e, i)
}
var n = i(105).LineStudyMtp;
inherit(o, n), o.prototype._mtpStudyId = function() {
return "mtp_riskreward"
}, o.prototype.pointsCount = function() {
return 3
}, o.getTooltipText = function(t) {
return t && 0 !== t._points.length ? 1 === t._points.length ? "Select Stop Bar" : 2 === t
._points.length ? "Select Target Point" : null : "Select Entry Setup Bar"
}, o.prototype._studyInputs = function() {
var t, e, i, o, n, r, s = this.points();
return s.length < this.pointsCount() ? null : (t = s[0].index, e = s[1].index, i = s[2].index,
o = this._model.mainSeries().bars().valueAt(t), n = this._model.mainSeries().bars()
.valueAt(e), r = this._model.mainSeries().bars().valueAt(i),
null === o || null === n || null === r ? null : [1e3 * o[TradingView.TIME_PLOT], 1e3 *
n[TradingView.TIME_PLOT], 1e3 * r[TradingView.TIME_PLOT], s[2].price, this
.properties().inputs.account_size.value(), this.properties().inputs.percent_risk
.value(), this.properties().inputs.tickEntryOffset.value(), this.properties().inputs
.tickStopOffset.value()
])
}, t.exports = o
},
function(t, e, i) {
"use strict";
(function(e) {
function o(t, i) {
var o = this;
f.call(this), this._properties = i, this._model = t, this._dataWindowView = new h(this, t),
this._priceAxisView = new c(this), this._startMeasurePriceAxisView = new c(this), this
._endMeasurePriceAxisView = new c(this), this._timeAxisView = new u(this, t), this
._startMeasureTimeAxisView = new u(this, t, "measureStartX"), this
._endMeasureTimeAxisView = new u(this, t, "measureEndX"), this.visible = !0, t
.readOnly() ? this.areLinesVisible = !0 : m.cursorTool.subscribe(function(t) {
o.areLinesVisible = "arrow" !== t
}, {
callWithLast: !0
}), this._movedDelegate = new e, this._subscribed = !1, this._model.readOnly() && (this
.visibleTrap = !0), this._selectBarMode = new L(!1), this._barSelectedDelegate =
new e, this._mouseClickBoundedHandler = this._mouseClickHandler.bind(this), this
._isOnHoveredChartWidget = !1
}
function n(t, e) {
this._source = t, this._pane = e, this._pipFormatter = null, this._lastSymbolInfo = null,
this._horzTrenRenderer = new d, this._vertTrenRenderer = new d, this._bgRenderer =
new _, this._labelRenderer = new p({})
}
function r(t, e, i, o) {
this.source = t, this.pane = e, this._horzVisible = i, this._mouseClickHandler = o
}
function s(t, e, i) {
this.source = t, this.pane = e, this._axis = i || "x"
}
var a = i(8).Point,
l = i(1).LineDataSource,
c = i(902).CrossHairPriceAxisView,
h = i(903),
u = i(904),
d = i(110).TrendLineRenderer,
p = i(166).TextRenderer,
_ = i(373).RectangleRenderer,
f = i(46).DataSource,
m = i(26),
g = i(905).PaneRendererCrossHair,
v = i(906).PaneRendererCrossHairLock,
y = i(53).CompositeRenderer,
b = i(22),
S = i(167).PercentageFormatter,
w = i(379).TimeSpanFormatter,
T = i(377).PipFormatter,
C = i(30),
x = i(74).LineEnd,
P = i(240),
L = i(17);
inherit(o, f), o.prototype.index = 0, o.prototype.price = NaN, o.prototype.pane = null, o
.prototype.color = "white", o.prototype.style = "", o.prototype.customization = {
disableSelection: !0
}, o.prototype.properties = function() {
return this._properties
}, o.prototype.moved = function() {
return this._movedDelegate
}, o.prototype.saveOriginCoord = function(t, e) {
this._originX = t, this._originY = e
}, o.prototype.clearOriginCoord = function() {
this._originX = NaN, this._originY = NaN
}, o.prototype.setPosition = function(t, e, i) {
this._subscribed || (this._model.mainSeries().onRestarted().subscribe(this, o.prototype
.clearMeasure), this._subscribed = !0), this.setLockedPosition(i), this
.visible = !0, this._tryToUpdateViews(t, e, i)
}, o.prototype.update = function() {
var t, e, i, o, n;
this.visible && (t = this._priceScaleByPane(this.pane), e = this._originX || this.x, i =
this._originY || this.y, o = this._model.timeScale().coordinateToIndex(e), n =
NaN, null !== t && (n = t.coordinateToPrice(i)), this._tryToUpdateViews(o, n,
this.pane))
}, o.prototype._priceScaleByPane = function(t) {
return t && !t.defaultPriceScale().isEmpty() ? t.defaultPriceScale() : null
}, o.prototype._tryToUpdateViews = function(t, e, i) {
this._tryToUpdateData(t, e, i) && (this.updateAllViews(), this._movedDelegate.fire({
time: this._model.timeScale().points().roughTime(this.index),
price: this.price
}))
}, o.prototype._tryToUpdateData = function(t, e, i) {
var o = this.x,
n = this.y,
r = this.price,
s = this.index,
a = this.pane,
l = this._priceScaleByPane(i);
return this.index = t, this.x = this._model.timeScale().indexToCoordinate(t), null !==
l ? (this.pane = i, this.price = e, this.y = l.priceToCoordinate(e)) : (this.pane =
null, this.price = NaN, this.y = NaN), o !== this.x || n !== this.y || s !==
this.index || r !== this.price || a !== this.pane
}, o.prototype.setLockedPosition = function(t) {
delete this.lockedIndex, delete this.lockedX, t !== this._measurePane && m
.lockTimeAxis().value() && (this.lockedIndex = this._model.timeScale().points()
.roughIndex(m.lockTimeAxisTime.value()), this.lockedX = this._model.timeScale()
.indexToCoordinate(this.lockedIndex))
}, o.prototype.clearPosition = function() {
this.visible = !1;
var t = this._model.mainSeries().bars().lastIndex();
this.index = null !== t ? t : NaN, this.price = NaN, this.x = NaN, this.y = NaN, this
.clearOriginCoord()
}, o.prototype.measureStartY = function() {
var t, e = this._startMeasurePoint.price,
i = this._measurePane;
return i.defaultPriceScale().isPercent() && (t = i.mainDataSource().firstValue(), e = i
.defaultPriceScale().priceRange().convertToPercent(e, t)), i.defaultPriceScale()
.priceToCoordinate(e)
}, o.prototype.measureStartX = function() {
return this._model.timeScale().indexToCoordinate(this._startMeasurePoint.index)
}, o.prototype.measureEndY = function() {
var t, e = this._endMeasurePoint.price,
i = this._measurePane;
return i.defaultPriceScale().isPercent() && (t = i.mainDataSource().firstValue(), e = i
.defaultPriceScale().priceRange().convertToPercent(e, t)), i.defaultPriceScale()
.priceToCoordinate(e)
}, o.prototype.measureEndX = function() {
return this._model.timeScale().indexToCoordinate(this._endMeasurePoint.index)
}, o.prototype.paneViews = function(t) {
var e = this._selectBarMode.value() && this._isOnHoveredChartWidget,
i = t === this.pane && !e,
o = [new r(this, t, i, this._mouseClickBoundedHandler)];
return t === this._measurePane && (this._measurePaneView || (this._measurePaneView =
new n(this, t)), this._measurePaneView.update(), o.push(this
._measurePaneView)), m.lockTimeAxis().value() && o.push(this._timeLockPaneView =
this._timeLockPaneView || new s(this, t)), o
}, o.prototype.dataWindowView = function() {
return this._dataWindowView
}, o.prototype.priceAxisViews = function(t, e) {
var i, o;
return this.visibleTrap && this.visible && this.pane === t && e === t
.defaultPriceScale() ? (i = [], o = this._selectBarMode.value() && this
._isOnHoveredChartWidget, o || i.push(this._priceAxisView), this
._startMeasurePoint && i.push(this._startMeasurePriceAxisView), this
._endMeasurePoint && i.push(this._endMeasurePriceAxisView), i) : null
}, o.prototype.timeAxisView = function() {
if (!this.visibleTrap || !this.visible && !m.lockTimeAxis().value()) return null;
var t = [this._timeAxisView];
return this._startMeasurePoint && t.push(this._startMeasureTimeAxisView), this
._endMeasurePoint && t.push(this._endMeasureTimeAxisView), t
}, o.prototype.updateAllViews = function() {
this._priceAxisView.update(), this._startMeasurePoint && (this
._startMeasurePriceAxisView.update(),
this._startMeasureTimeAxisView.update()), this._endMeasurePoint && (this
._endMeasurePriceAxisView.update(), this._endMeasureTimeAxisView.update()), this
._timeAxisView.update()
}, o.prototype.startMeasurePoint = function() {
return this._startMeasurePoint
}, o.prototype.startMeasuring = function(t, e) {
if (e.defaultPriceScale().isPercent()) {
var i = e.mainDataSource().firstValue();
t.price = e.defaultPriceScale().priceRange().convertFromPercent(t.price, i)
}
this._startMeasurePoint = t, this._measurePane = e
}, o.prototype.finishMeasure = function(t) {
var e, i = this._measurePane;
i.defaultPriceScale().isPercent() && (e = i.mainDataSource().firstValue(), t.price = i
.defaultPriceScale().priceRange().convertFromPercent(t.price, e)), this
._endMeasurePoint = t
}, o.prototype.endMeasurePoint = function() {
return this._endMeasurePoint
}, o.prototype.clearMeasure = function(t) {
delete this._measurePane, delete this._startMeasurePoint, delete this._endMeasurePoint,
delete this._lastValidMeasurePoint, this._model.invalidate(new b(b.LIGHT_UPDATE))
}, o.prototype.measurePoints = function() {
var t, e, i, o, n;
return this.updateAllViews(), t = [this._startMeasurePoint], this._endMeasurePoint ? t
.push(this._endMeasurePoint) : (this._measurePane === this.pane && (this
._lastValidMeasurePoint = {
x: this.x,
y: this.y,
rawPrice: this.price,
price: this.price,
index: this.index
}), e = this._lastValidMeasurePoint.rawPrice, i = this._measurePane, o = i
.defaultPriceScale(), o.isPercent() && !o.isEmpty() && (n = i.mainDataSource()
.firstValue(), this._lastValidMeasurePoint.price = o.priceRange()
.convertFromPercent(e, n)), t.push(this._lastValidMeasurePoint)), t
}, o.prototype.currentPoint = function() {
return new a(this.x, this.y)
}, o.prototype.appliedIndex = function() {
return isFinite(this.lockedIndex) && this.lockedIndex || this.index
}, o.prototype.appliedX = function() {
return isFinite(this.lockedX) && this.lockedX || this.x
}, o.prototype.selectBarMode = function() {
return this._selectBarMode
}, o.prototype.toggleSelectBarMode = function() {
this._setSelectBarModeState(!this._selectBarMode.value())
}, o.prototype.onBarSelected = function() {
return this._barSelectedDelegate
}, o.prototype._setSelectBarModeState = function(t) {
this._selectBarMode.setValue(t), this._model.invalidate(new b(b.LIGHT_UPDATE))
}, o.prototype._mouseClickHandler = function() {
var t;
this._model.mainSeries().bars().contains(this.index) && null !== (t = this._model
.timeScale().indexToTimePoint(this.index)) && (this._setSelectBarModeState(!1),
this._barSelectedDelegate.fire(t))
}, o.prototype.handleContextMenuEvent = function() {
this._selectBarMode.value() && this._setSelectBarModeState(!1)
}, o.prototype.setOnHoveredChartWidget = function(t) {
this._isOnHoveredChartWidget = t
}, o.prototype.isOnHoveredChartWidget = function() {
return this._isOnHoveredChartWidget
}, n.prototype.update = function() {
var t, e, i, o, n, r, s, l, c, h, u, d, p, _, f, m, g, v;
if (this._source._endMeasurePoint) t = this._source._endMeasurePoint.price, e = this
._source._endMeasurePoint.index;
else if (this._source._measurePane === this._source.pane) t = this._source.price, e =
this._source.index;
else {
if (!this._source._lastValidMeasurePoint) return;
t = this._source._lastValidMeasurePoint.rawPrice,
e = this._source._lastValidMeasurePoint.index
}
i = t - this._source._startMeasurePoint.price, o = e - this._source._startMeasurePoint
.index, n = this._source._startMeasurePoint.price, r = this._source._measurePane, r
.defaultPriceScale().isPercent() && (s = r.mainDataSource().firstValue(), this
._source._endMeasurePoint && (t = r.defaultPriceScale().priceRange()
.convertToPercent(t, s)), n = r.defaultPriceScale().priceRange()
.convertToPercent(n, s)), l = this._source._measurePane.defaultPriceScale()
.formatter().format(i), this._source._startMeasurePoint.price && (c = i / this
._source._startMeasurePoint.price, l += " (" + (new S).format(100 * c) + ")"),
this._label = l + "\n" + $.t("{0} bars").format(o), n = this._source._model._magnet
.align(n, this._source._startMeasurePoint.index, this._source._measurePane), t =
this._source._model._magnet.align(t, e, this._source._measurePane), h = this._source
._model.timeScale().indexToCoordinate(this._source._startMeasurePoint.index), u =
this._source._model.timeScale().indexToCoordinate(e), d = this._source._measurePane
.defaultPriceScale().priceToCoordinate(n), p = this._source._measurePane
.defaultPriceScale().priceToCoordinate(t), this._p1 = new a(h, d), this._p2 = new a(
u, p), _ = this._source._model.timeScale().indexToUserTime(this._source
._startMeasurePoint.index), f = this._source._model.timeScale().indexToUserTime(
e), m = this._pane.model().mainSeries().symbolInfo(), m && m !== this
._lastSymbolInfo && (this._pipFormatter = new T(m.pricescale, m.minmov, m.type, m
.minmove2), this._lastSymbolInfo = m), _ && f && (g = (f.valueOf() - _
.valueOf()) / 1e3, v = this._pipFormatter ? " , " + this._pipFormatter
.format(
i) : "", this._label = "" + l + v + "\n" + $.t("{0} bars").format(o) +
", " + (
new w).format(g))
}, n.prototype.renderer = function() {
var t, e, i, o, n, r, s, l, c, h, u, d, p = new y,
_ = {};
return _.points = [this._p1, this._p2], _.width = this._source._model.timeScale()
.width(), _.height = this._source._measurePane.defaultPriceScale().height(), _
.color = "#D3E7FF", _.linewidth = 0, _.fillBackground = !0, _.transparency = 60, _
.backcolor = "#BADAFF", this._bgRenderer.setData(_), p.append(this._bgRenderer), t =
this._p1.add(this._p2).scaled(.5), e = new a(this._p1.x, t.y), i = new a(this._p2.x,
t.y), o = {
points: [e, i],
width: _.width,
height: _.height,
color: "#363c4e",
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_DASHED,
extendleft: !1,
extendright: !1,
leftend: x.Normal,
rightend: x.Arrow
}, this._horzTrenRenderer.setData(o), p.append(this._horzTrenRenderer), e = new a(t
.x, this._p1.y), i = new a(t.x, this._p2.y), o = {
points: [e, i],
width: _.width,
height: _.height,
color: "#363c4e",
linewidth: 1,
linestyle: CanvasEx.LINESTYLE_DASHED,
extendleft: !1,
extendright: !1,
leftend: x.Normal,
rightend: x.Arrow
}, this._vertTrenRenderer.setData(o), p.append(this._vertTrenRenderer), n = {
x: 0,
y: 10
}, r = function(t, e) {
return {
points: [e],
text: t,
color: "#FFFFFF",
horzAlign: "left",
vertAlign: "middle",
font: "Arial",
offsetX: n.x,
offsetY: n.y,
bold: !1,
italic: !1,
fontsize: 12,
padding: 5,
highlightBorder: !1,
backgroundColor: C.generateColor("#5b85bf", 10),
backgroundTransparency: 10,
backgroundVertInflate: 5,
backgroundHorzInflate: 5,
backgroundRoundRect: 4
}
}, s = .5 * (this._p1.x + this._p2.x), l = this._p2.y, c = new a(s, l), h = r(this
._label, c), this._labelRenderer.setData(h),
u = this._labelRenderer.measure(), d = {
x: s + h.backgroundHorzInflate + u.textBgPadding - u.width / u.textBgPadding,
y: this._p1.y > this._p2.y ? c.y - u.height - 2 * u.textBgPadding - n.y > 0 ?
l - u.height - n.y + u.textBgPadding : n.y - 2 * u.textBgPadding : c.y + u
.height + u.textBgPadding + n.y > _.height ? _.height - u.height - n.y : l +
u.textBgPadding
}, this._labelRenderer.setPoints([new a(d.x, d.y)]), p.append(this._labelRenderer),
p
}, r.prototype.update = function() {}, r.prototype.renderer = function() {
var t, e, i, o, n, r, s = {},
a = this.source.visible && this.source.areLinesVisible,
c = m.lockTimeAxis().value();
return s.horzLinesVisible = a && this._horzVisible, s.vertLinesVisible = a || c, t =
this.pane._model.readOnly(), e = t ? defaults(
"chartproperties.paneProperties.crossHairProperties") : null, i = this.source
.selectBarMode().value() && this.source.isOnHoveredChartWidget(), o = TradingView
.isMobile.any() && l.isLineTool(this.source._model.currentTool()) && !i, n = o ?
"#a000a0" : t ? e.color : this.pane._model.properties().paneProperties
.crossHairProperties.color.value(), r = t ? e.transparency : this.pane._model
.properties().paneProperties.crossHairProperties.transparency.value(), !o && r >
0 && (n = C.generateColor(n, r)), s.color = n, s.lineWidth = t ? e.width : this.pane
._model.properties().paneProperties.crossHairProperties.width.value(), s.lineStyle =
t ? e.style : this.pane._model.properties().paneProperties.crossHairProperties.style
.value(), s.drawCenter = o && this.pane === this.source.pane, s.w = this.pane
.width(), s.h = this.pane.height(), s.x = isFinite(this.source.lockedX) && this
.source.lockedX || this.source.x, s.y = this.source.y, i && (s.x = Math.max(0, this
.source.x - 1), s.vertLinesVisible = !0, s.lineStyle = P.LINESTYLE_SOLID, s
.mouseClickHandler = this._mouseClickHandler, s.lineWidth = 2, s.color =
"#ff0000"), new g(s)
}, s.prototype.update = function() {}, s.prototype.renderer = function() {
var t, e, i, o, n = this.source.visible && this.source.areLinesVisible,
r = m.lockTimeAxis().value(),
s = n && this._horzVisible,
a = n || r;
if (("y" !== this._axis || s) && a) return t = 9, e = 11, i = "y" === this._axis ? this
.pane.width() - t / 2 : this.source.lockedX + 1, o = "y" === this._axis ? this
.source.y : this.pane.height() - e / 2 - 1, new v({
x: i,
y: o,
width: t,
height: e,
bodyHeight: 7
})
}, t.exports = o
}).call(e, i(10))
},
function(t, e, i) {
"use strict";
var o, n, r, s;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(67), r = i(28), s = function(t) {
function e(e) {
var i = t.call(this) || this;
return i._defaultFormatter = new r.PriceFormatter(100), i._background = "#585858", i
._source = e, i
}
return o.__extends(e, t), e.prototype._updateRendererData = function(t) {
var e, i, o, n;
t.visible = !1, null !== (e = this._source.pane) && (i = e.defaultPriceScale(), this
._source.visible && !i.isEmpty() && (n = i.mainSource(), o = n ? n.formatter() :
this._defaultFormatter, t.background = this._background, t.color = this
.generateTextColor(this._background), t.coordinate = this._source.y, t
.text = o.format(this._source.price), t.visible = !0))
}, e
}(n.PriceAxisView), e.CrossHairPriceAxisView = s
},
function(t, e, i) {
"use strict";
function o(t, e) {
r.call(this), this._header = null, this._crossHair = t, this._model = e, this._items.push(new s(
"Date", "")), this._items.push(new s("Time", "")), this._items.push(new s("Price", "")),
this._defaultFormatter = new a(100)
}
var n = i(157),
r = n.DataWindowView,
s = n.DataWindowItem,
a = i(28).PriceFormatter,
l = i(177).DateFormatter,
c = i(135).TimeFormatter;
inherit(o, r), o.prototype.update = function() {
var t, e, i, o, n, r, s = this._model.mainSeries().isDWM();
this._items[1].setVisible(!s), this._items[0].setValue("n/a"), this._items[1].setValue("n/a"),
this._items[2].setValue("n/a"), this._model.timeScale().isEmpty() || (t = this._crossHair
.appliedIndex(), e = this._model.timeScale().indexToUserTime(t), null === e ? (this
._items[0].setValue("n/a"), s || this._items[1].setValue("n/a")) : (this._items[0]
.setValue((new l).format(e)), s || this._items[1].setValue((new c).format(e))), (i =
this._crossHair.pane) && (o = i.defaultPriceScale(), o.isEmpty() || (n = o
.mainSource(), r = n ? n.formatter() : this._defaultFormatter, this._items[2]
.setValue(r.format(this._crossHair.price)))))
}, t.exports = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
n.call(this), this._invalidated = !0, this._crosshair = t, this._model = e, this._renderer = new r,
this._rendererData = {
visible: !1,
background: "#585858",
color: "white",
text: "",
width: 0
}
}
var n = i(222).TimeAxisView,
r = i(223),
s = i(127).DateTimeFormatter;
inherit(o, n), o.prototype.update = function() {
this._invalidated = !0
}, o.prototype._updateImpl = function() {
var t, e, i = this._rendererData;
i.visible = !1, t = this._model.timeScale(), t.isEmpty() || (i.width = t.width(), i.coordinate =
this._crosshair.appliedX(), (e = t.indexToUserTime(this._crosshair.appliedIndex())) && (
i.text = new s(this._model.mainSeries().isDWM()).format(e), i.visible = !0))
}, o.prototype.renderer = function() {
return this._invalidated && (this._updateImpl(), this._invalidated = !1), this._renderer
.setData(this._rendererData), this._renderer
}, t.exports = o
},
function(t, e, i) {
"use strict";
function o(t) {
this.data = t
}
var n = i(11);
o.prototype.draw = function(t) {
var e, i, o, n, r, s = this.data.vertLinesVisible,
a = this.data.horzLinesVisible;
(s || a) && this.data && (t.lineStyle = this.data.lineStyle, t.lineWidth = this.data.lineWidth,
t.strokeStyle = this.data.color, e = this.data.lineWidth % 2 == 0 ? .5 : 0, i = this
.data.x + 1 + e, o = this.data.y + e, n = this.data.w, r = this.data.h, s && i >= 0 &&
CanvasEx.drawLine(t, i, 0, i, r), a && o >= 0 && CanvasEx.drawLine(t, 0, o, n, o), this
.data.drawCenter && (t.beginPath(), t.arc(i, o, 3, 0, 2 * Math.PI, !0), t.fillStyle =
this.data.color, t.fill()))
}, o.prototype.hitTest = function(t) {
return this.data.mouseClickHandler ? new n(n.CUSTOM, {
mouseClickHandler: this.data.mouseClickHandler
}) : null
}, e.PaneRendererCrossHair = TradingView.PaneRendererCrossHair = o
},
function(t, e, i) {
"use strict";
function o(t) {
this._data = t
}
o.prototype._drawShackle = function(t) {
var e = this._data.width - 3,
i = e / 2,
o = this._data.height - this._data.bodyHeight;
t.moveTo(1.5, i), t.arc(this._data.width / 2, i, i, Math.PI, 2 * Math.PI), o > i && (t.moveTo(
1.5, i), t.lineTo(1.5, o), t.moveTo(this._data.width - 1.5, i), t.lineTo(this._data
.width - 1.5, o))
}, o.prototype.draw = function(t) {
var e, i, o, n;
t.translate(this._data.x - this._data.width / 2, this._data.y - this._data.height / 2), e =
"rgba(153,153,153,.3)", i = "rgba(153,153,153,.7)", o = "#777", n = "rgba(255,255,255,.7)",
t.strokeStyle = e, t.lineWidth = 2, t.beginPath(), this._drawShackle(t), t.stroke(), t
.closePath(), t.strokeStyle = i, t.lineWidth = 1, t.beginPath(),
t.rect(0, this._data.height - this._data.bodyHeight + .5, this._data.width, this._data
.bodyHeight), t.closePath(), t.stroke(), t.translate(0, -1), t.strokeStyle = o, t
.beginPath(), this._drawShackle(t), t.stroke(), t.closePath(), t.fillStyle = n, t
.beginPath(), t.rect(1, this._data.height - this._data.bodyHeight + 1.5, this._data.width -
2, this._data.bodyHeight - 2), t.fill(), t.beginPath(), t.rect(.5, this._data.height -
this._data.bodyHeight + 1, this._data.width - 1, this._data.bodyHeight - 1), t.stroke(),
t.closePath(), t.fillStyle = o, t.fillRect(this._data.width / 2 - .5, this._data.height -
this._data.bodyHeight / 2, 1, 2)
}, e.PaneRendererCrossHairLock = TradingView.PaneRendererCrossHairLock = o
},
function(t, e, i) {
"use strict";
(function(e) {
function o(t) {
function i(t, e) {
var i = t.font;
return a.hasOwnProperty(i) || (a[i] = {}), a[i].hasOwnProperty(e) || (a[i][e] = t
.measureText(e).width), a[i][e]
}
function o() {
var o = s.width(),
a = s.height();
return {
draw: function(s) {
var c, h, u, d, p, _, f, m = t.symbolInfo();
if (m && !e.enabled("fundamental_widget")) {
for (s.fillStyle = n.generateColor(l.color.value(), l.transparency
.value()), c = m.name, /QUANDL/.test(m.exchange) && (h = c
.split(/\//), h.length && (c = h[h.length - 1])), u = [{
text: c ? c + ", " + r(t.interval()) : "",
font: "96px Verdana, Arial, sans-serif",
lineHeight: 114,
baselineOffset: 87
}, {
text: m.description || "",
font: "48px Verdana, Arial, sans-serif",
lineHeight: 57,
baselineOffset: 43.5
}], d = 0, p = 0; p < u.length; p++) _ = u[p], _.text && (s.font = _
.font, f = i(s, _.text), f > o ? (_.zoom = o / f, f = o) : _
.zoom = 1, _.offsetLeft = (o - f) / 2, d += _.lineHeight * _
.zoom);
for (d = Math.max((a - d) / 2, 0), p = 0; p < u.length; p++) _ = u[p], _
.text && (s.save(), s.font = _.font, s.translate(_.offsetLeft, d), s
.scale(_.zoom, _.zoom), s.fillText(_.text, 0, _.baselineOffset),
s.restore(), d += _.lineHeight * _.zoom)
}
}
}
}
var s = null,
a = {},
l = t.model().properties().symbolWatermarkProperties,
c = {
renderer: o,
update: function() {}
};
this.paneViews = function(t) {
return t.containsMainSeries() ? (s = t, [c]) : []
}
}
var n = i(30),
r = i(162).translatedIntervalString;
t.exports = o
}).call(e, i(5))
},
function(t, e, i) {
"use strict";
function o() {
this.visible = !0, this.horzLinesVisible = !0, this.horzLinesColor = "white", this.horzLinesStyle =
"", this.vertLinesVisible = !0, this.vertLinesColor = "white", this.vertLinesStyle = ""
}
function n(t, e) {
this.source = t, this.pane = e, this._renderer = new r
}
function r() {
this.data = null
}
o.prototype.paneViews = function(t) {
return [new n(this, t)]
}, n.prototype.update = function() {}, n.prototype.renderer = function() {
var t = {};
return this.pane.defaultPriceScale().isEmpty() || this.pane.timeScale().isEmpty() ? null : (t
.horzLinesVisible = !0, t.vertLinesVisible = !0, t.horzLinesColor = this.pane._model
.properties().paneProperties.horzGridProperties.color.value(), t.vertLinesColor = this
.pane._model.properties().paneProperties.vertGridProperties.color.value(), t
.horzLineStyle = this.pane._model.properties().paneProperties.horzGridProperties.style
.value(), t.vertLineStyle = this.pane._model.properties().paneProperties
.vertGridProperties.style.value(), t.priceMarks = this.pane.defaultPriceScale().marks(),
t.timeMarks = this.pane.timeScale().marks(), t.w = this.pane.width(), t.h = this.pane
.height(), this._renderer.setData(t), this._renderer)
},
r.prototype.setData = function(t) {
this.data = t
}, r.prototype.draw = function(t) {
var e;
if (null !== this.data) {
if (t.lineWidth = 1, this.data.vertLinesVisible) {
for (t.strokeStyle = this.data.vertLinesColor, CanvasEx.setLineStyle(t, this.data
.vertLineStyle), t.beginPath(), e = 0; e < this.data.timeMarks.length; e++) t
.moveTo(this.data.timeMarks[e].coord + 1, 0), t.lineTo(this.data.timeMarks[e]
.coord + 1, this.data.h);
t.stroke()
}
if (this.data.horzLinesVisible) {
for (t.strokeStyle = this.data.horzLinesColor, CanvasEx.setLineStyle(t, this.data
.horzLineStyle), t.beginPath(), e = 0; e < this.data.priceMarks.length; e++) t
.moveTo(0, this.data.priceMarks[e].coord), t.lineTo(this.data.w, this.data
.priceMarks[e].coord);
t.stroke()
}
}
}, t.exports = o
},
function(t, e, i) {
"use strict";
function o(t, e, i) {
this._magnetProperty = t, this._timeScale = e
}
var n = i(77);
o.prototype.align = function(t, e, i) {
var o, r, s, a, l, c, h, u, d, p = 50,
_ = i.defaultPriceScale(),
f = _.priceToCoordinate(t),
m = t;
if (!this._magnetProperty.value()) return m;
for (o = _.dataSources(), r = null, s = 0; s < o.length; s++)
if (o[s] instanceof n) {
r = o[s];
break
} if (r && (a = r.bars(), a.contains(e) && (l = a.valueAt(e), c = [l[TradingView.OPEN_PLOT],
l[TradingView.HIGH_PLOT], l[TradingView.LOW_PLOT], l[TradingView.CLOSE_PLOT]
], _ = r.priceScale(), !_.isEmpty()))) {
if (h = [], _.isPercent())
for (u = r.firstValue(), s = 0; s < c.length; s++) c[s] = _.priceRange()
.convertToPercent(c[s], u);
for (s = 0; s < c.length; s++) h.push({
y: _.priceToCoordinate(c[s]),
price: c[s]
});
h.sort(function(t, e) {
return Math.abs(t.y - f) - Math.abs(e.y - f)
}), d = h[0], Math.abs(d.y - f) < p && (m = d.price)
}
return m
}, t.exports = o
},
function(t, e, i) {
"use strict";
(function(e) {
function o() {
return [$.t("Jan"), $.t("Feb"), $.t("Mar"), $.t("Apr"), $.t("May"), $.t("Jun"), $.t("Jul"),
$.t("Aug"), $.t("Sep"), $.t("Oct"), $.t("Nov"), $.t("Dec")
]
}
function n(t) {
this._model = t, this._scalesProperties = t.properties().scalesProperties, this.m_width = 0,
this._baseIndex = null, this._defaultRightOffsetProperty = new f(S), this
.m_rightOffset = S, this._defaultRightOffsetProperty.listeners().subscribe(this,
function(t) {
this.setRightOffset(t.value())
}), this.m_points = new u, this._barSpacingChanged = new e, this.m_barSpacing = b,
this.m_scrollStartPoint = null, this.m_scaleStartPoint = null, this
._commonTransitionStartState = null, this.m_tickmarks = new l, this._locked = !1, this
._formattedBySpan = {}, this._onScroll = new e, this._visibleBars = null, this
._visibleBarsInvalidated = !0, this._visibleBarsChanged = new e
}
var r = i(54).clamp,
s = i(344).BarsRange,
a = i(226),
l = i(911),
c = i(22),
h = i(28).numberToStringWithLeadingZero,
u = i(912).TimePoints,
d = i(350),
p = i(7).getLogger("Chart.TimeScale"),
_ = i(5),
f = i(25),
m = null,
g = 50,
v = _.enabled("high_density_bars") ? .025 : .5,
y = 5,
b = 6,
S = 5;
n.prototype.tickMarks = function() {
return this.m_tickmarks
}, n.prototype.reset = function() {
this._visibleBarsInvalidated = !0, this.m_points = new u, this.m_scrollStartPoint =
null, this.m_scaleStartPoint = null, this._clearCommonTransitionsStartState(), this
.m_tickmarks.reset()
}, n.prototype.restoreDefault = function() {
this._visibleBarsInvalidated = !0, this.setBarSpacing(b), this.resetRightOffset()
}, n.prototype.restoreRightOffsetPropertyToDefault = function() {
this._defaultRightOffsetProperty.setValue(S)
},
n.prototype.baseIndex = function() {
return this._baseIndex || 0
}, n.prototype.rightOffset = function() {
return this.m_rightOffset
}, n.prototype.defaultRightOffsetProperty = function() {
return this._defaultRightOffsetProperty
}, n.prototype.rightOffsetForTimePoint = function(t) {
var e = this.timeToCoordinate(t);
return null === e ? null : this._rightOffsetForCoordinate(e)
}, n.prototype._rightOffsetForCoordinate = function(t) {
return (this.m_width + 1 - t) / this.m_barSpacing
}, n.prototype.scrollToRealtime = function(t, e) {
var i, o, n, r, s = this._defaultRightOffsetProperty.value();
if (s < 0 && (s = S), t) return i = this, o = this.m_rightOffset, n = this
.maxRightOffset(), n > 0 && s > n && (s = n), r = this._model, void $({
offset: o
}).animate({
offset: s
}, {
duration: 1e3,
easing: "easeInOutQuint",
complete: e,
step: function(t) {
i._visibleBarsInvalidated = !0, i.m_rightOffset = t, r
.recalculateAllPanes(), r.invalidate(new c(c.LIGHT_UPDATE)),
r.recalcVisibleRangeStudy(r.dataSources())
}
});
this._visibleBarsInvalidated = !0, this.m_rightOffset = s, this._correctOffset(),
void 0 !== e && e()
}, n.prototype.points = function() {
return this.m_points
}, n.prototype.width = function() {
return this.m_width
}, n.prototype.setWidth = function(t) {
if (isFinite(t) && !(t <= 0) && this.m_width !== t) {
if (this._visibleBarsInvalidated = !0, this._locked && this.m_width) {
var e = this.m_barSpacing * t / this.m_width;
this._tryToUpdateBarSpacing(this.m_barSpacing, e)
}
this.m_width = t, this._correctOffset()
}
}, n.prototype.barSpacing = function() {
return this.m_barSpacing
}, n.prototype.setBarSpacing = function(t) {
if (void 0 === t) return void p.logDebug("setBarSpacing: invalid argument");
this._tryToUpdateBarSpacing(this.m_barSpacing, t) && this._correctOffset()
}, n.prototype._tryToUpdateBarSpacing = function(t, e) {
return t !== e && (this._visibleBarsInvalidated = !0, this.m_barSpacing = e, this
._barSpacingChanged.fire(t, e), !0)
}, n.prototype.barSpacingChanged = function() {
return this._barSpacingChanged
}, n.prototype.correctBarSpacing = function() {
this.isEmpty() || this.points().size() < this.width() / this.barSpacing() && (this
.setRightOffset(S), this.setBarSpacing(Math.min(this.width() / (this.points()
.size() + this.rightOffset()), g)))
}, n.prototype.visibleBars = function() {
return this._visibleBarsInvalidated && (this._visibleBarsInvalidated = !1, this
._updateVisibleBars()), this._visibleBars
}, n.prototype._updateVisibleBars = function() {
var t, e, i, o, n;
if (this.isEmpty()) return void(null !== this._visibleBars && (this._visibleBars = null,
this._visibleBarsChanged.fire()));
t = this.baseIndex(), e = Math.ceil(this.m_width / this.m_barSpacing) - 1, i = Math
.round(this.m_rightOffset + t), o = i - e, n = this._visibleBars, this
._visibleBars = new s(o, i), null !== n && this._visibleBars.equals(n) || this
._visibleBarsChanged.fire()
}, n.prototype.isEmpty = function() {
return 0 === this.m_width || 0 === this.m_points.size()
}, n.prototype.indexToCoordinate = function(t, e) {
var i, o, n;
return this.isEmpty() ? 0 : TradingView.isInteger(t) ? (i = this.baseIndex(), o = i +
this.m_rightOffset - t, n = this.m_width - (o + .5) * this.m_barSpacing, e ? n :
Math.round(n)) : 0
}, n.prototype.barIndexesToCoordinates = function(t) {
var e, i, o, n, r = this.baseIndex();
for (e = 0; e < t.length; e++) i = t[e].time, o = r + this.m_rightOffset - i,
n = this.m_width - (o + .5) * this.m_barSpacing, t[e].time = Math.round(n), t[e]
.exactTime = n
}, n.prototype.indexesToCoordinates = function(t) {
var e, i, o, n = this.baseIndex(),
r = n + this.m_rightOffset,
s = this.m_width - r * this.m_barSpacing - .5 * this.m_barSpacing;
for (e = 0; e < t.length; e++) i = t[e].x, o = s + i * this.m_barSpacing, t[e].x = Math
.round(o)
}, n.prototype.coordinateToIndex = function(t) {
var e = this._rightOffsetForCoordinate(t),
i = this.baseIndex(),
o = i + this.m_rightOffset - e,
n = Math.round(1e6 * o) / 1e6;
return Math.ceil(n)
}, n.prototype.timeToCoordinate = function(t) {
function e(t) {
return t <= 0 || t >= l.m_width
}
var i, o, n, r = this.m_points.closestIndexLeft(t),
s = this.m_points.valueAt(r),
a = this.indexToCoordinate(r, !0),
l = this;
return e(a) ? null : (i = this.barSpacing(), o = function() {
var t = this.baseIndex();
return this.m_points.valueAt(t) - this.m_points.valueAt(t - 1)
}.bind(this)(), n = Math.round(a + (t - s) / o * i) + 1, e(n) ? null : n)
}, n.prototype.alignCoordinate = function(t) {
if (this.isEmpty()) return t;
var e = this.coordinateToIndex(t);
return this.indexToCoordinate(e)
}, n.prototype.timePointToIndex = function(t) {
return this.m_points.indexOf(t, !0)
}, n.prototype.indexToTimePoint = function(t) {
return this.m_points.valueAt(t)
}, n.prototype.indexToUserTime = function(t) {
return this.m_tickmarks.indexToTime(t)
}, n.prototype.marks = function() {
var t, e, i, o, n, r, s, a, l, c, h, u;
if (this.isEmpty()) return null;
for (t = this.m_barSpacing, e = this._scalesProperties.fontSize.value() || 0, i = 5 * (
e + 4), o = Math.round(i / t), n = this.visibleBars(), r = Math.max(n
.firstBar(), n.firstBar() - o), s = Math.max(n.lastBar(), n.lastBar() - o), a =
this
.m_tickmarks.build(t, i), l = [], c = 0; c < a.length; ++c) h = a[c], r <= h
.index && h.index <= s && null !== (u = this.m_tickmarks.indexToTime(h.index)) && l
.push({
coord: this.indexToCoordinate(h.index),
label: this.formatLabel(u, h.span),
span: h.span,
major: h.label >= d.DAY_SPAN ? 1 : 0
});
return l
}, n.prototype.state = function(t) {
var e = {};
return e.m_barSpacing = this.barSpacing(), e.m_rightOffset = t ? this.m_rightOffset :
this._defaultRightOffsetProperty.value(), t && (e.points = this.m_points.state(), e
.tickmarks = this.m_tickmarks.state(), e.width = this.m_width), e
}, n.prototype.restoreState = function(t, e) {
var i, o, n;
return void 0 === t.m_barSpacing ? void p.logDebug("restoreState: invalid state") :
void 0 === t.m_rightOffset ? void p.logDebug("restoreState: invalid state") : (i = t
.m_barSpacing, o = t.m_rightOffset < 0 && !e ? S : t.m_rightOffset, n = o < 0 ?
S : Math.round(o), this._defaultRightOffsetProperty.setValue(n), this
.m_rightOffset = o, e && (this.m_points.restoreState(t.points), this.m_tickmarks
.restoreState(t.tickmarks), t.width && (this._locked = !0, this.m_width >
0 && (i *= this.m_width / t.width))), this._tryToUpdateBarSpacing(this
.m_barSpacing, i), void this._correctOffset())
}, n.prototype.setBaseIndex = function(t) {
if ("number" != typeof t) return void p.logDebug("setBaseIndex: invalid argument");
this._visibleBarsInvalidated = !0, this._baseIndex = t, this._correctOffset()
}, n.prototype.setRightOffset = function(t) {
if (void 0 === t) return void p.logDebug("setRightOffset: invalid argument");
this._visibleBarsInvalidated = !0, this.m_rightOffset = t, this._correctOffset()
}, n.prototype.resetRightOffset = function() {
this.setRightOffset(this._defaultRightOffsetProperty.value())
}, n.prototype._correctOffset = function() {
var t, e = this.maxRightOffset();
this.m_rightOffset > e && (this.m_rightOffset = e, this._visibleBarsInvalidated = !0),
null !== (t = this.minRightOffset()) && this.m_rightOffset < t && (this
.m_rightOffset = t, this._visibleBarsInvalidated = !0)
}, n.prototype.minRightOffset = function() {
var t = this.m_points.firstIndex(),
e = this._baseIndex;
return null === t || null === e ? null : t - e - 1 + y
}, n.prototype.maxRightOffset = function() {
return this.m_width / this.m_barSpacing - y
}, n.prototype.startScale = function(t) {
this.m_scrollStartPoint && this.endScroll(), null === this.m_scaleStartPoint && null ===
this._commonTransitionStartState && (this.isEmpty() || (this.m_scaleStartPoint = t,
this._saveCommonTransitionsStartState()))
}, n.prototype._saveCommonTransitionsStartState = function() {
this._commonTransitionStartState = {
barSpacing: this.barSpacing(),
rightOffset: this.rightOffset()
}
}, n.prototype._clearCommonTransitionsStartState = function() {
this._commonTransitionStartState = null
}, n.prototype.scaleTo = function(t) {
var e, i;
null !== this._commonTransitionStartState && (e = r(this.m_width - t, 0, this.m_width),
i = r(this.m_width - this.m_scaleStartPoint, 0, this.m_width), 0 !== e && 0 !==
i && this.setBarSpacing(this.getValidBarSpacing(this._commonTransitionStartState
.barSpacing * e / i)))
}, n.prototype.getValidBarSpacing = function(t) {
return void 0 === t && (t = this.barSpacing()), t < v ? v : t > g ? g : t
}, n.prototype.isValidBarSpacing = function(t) {
return t >= v && t <= g
}, n.prototype.endScale = function() {
null !== this.m_scaleStartPoint && (this.m_scaleStartPoint = null, this
._clearCommonTransitionsStartState())
}, n.prototype.startScroll = function(t) {
null === this.m_scrollStartPoint && null === this._commonTransitionStartState && (this
.isEmpty() || (this.m_scrollStartPoint = t, this
._saveCommonTransitionsStartState()))
}, n.prototype.scrollTo = function(t) {
if (this._visibleBarsInvalidated = !0, null !== this.m_scrollStartPoint) {
var e = (this.m_scrollStartPoint - t) / this.barSpacing();
this.m_rightOffset = this._commonTransitionStartState.rightOffset + e, this
._correctOffset(), this._onScroll.fire()
}
}, n.prototype.scrollToOffsetAnimated = function(t, e) {
var i, o, n, r;
if (!isFinite(t)) throw new RangeError("offset is required and must be finite number");
if (void 0 === e && (e = 400), !isFinite(e) || e <= 0) throw new RangeError(
"animationDuration (optional) must be finite positive number");
i = this, o = this.m_rightOffset, n = +new Date, r = this._model,
function s() {
i._visibleBarsInvalidated = !0;
var a = (new Date - n) / e;
if (a >= 1) return i.m_rightOffset = t, i._visibleBarsInvalidated = !0, r
.recalculateAllPanes(), void r.invalidate(new c(c.LIGHT_UPDATE));
i.m_rightOffset = o + (t - o) * a, r.recalculateAllPanes(), setTimeout(s, 20)
}()
}, n.prototype.endScroll = function() {
null !== this.m_scrollStartPoint && (this.m_scrollStartPoint = null, this
._clearCommonTransitionsStartState())
}, n.prototype.update = function(t, e, i, o) {
this._visibleBarsInvalidated = !0, i.length > 0 && this.m_points.merge(t, e, i), this
.m_tickmarks.merge(o), this._correctOffset()
}, n.prototype.addTail = function(t, e, i) {
var o, n, r;
for (this.m_tickmarks.removeTail(e), o = t.params, n = this.m_tickmarks.maxIndex + (i ?
0 : 1),
r = 0; r < o.marks.length; r++) o.marks[r].index = n + r;
this.m_tickmarks.addTail(o.marks), this.m_points.addTail(o.changes, i), this
.m_rightOffset -= o.changes.length
}, n.prototype.formatLabel = function(t, e) {
if (this._formattedBySpan[e]) return this._formattedBySpan[e].format(t.valueOf());
var i = this;
return this._formattedBySpan[e] = new a(function(t) {
return i.formatLabelImpl(new Date(t), e)
}), this._formattedBySpan[e].format(t)
}, n.prototype.formatLabelImpl = function(t, e) {
if (!(t && t instanceof Date)) return "incorrect time";
var i = this._model.mainSeries().isDWM();
return e < d.MINUTE_SPAN && !i ? h(t.getUTCHours(), 2) + ":" + h(t.getUTCMinutes(), 2) +
":" + h(t.getUTCSeconds(), 2) : e < d.DAY_SPAN && !i ? h(t.getUTCHours(), 2) + ":" +
h(t.getUTCMinutes(), 2) : e < d.WEEK_SPAN ? t.getUTCDate() : e < d.MONTH_SPAN ? t
.getUTCDate() : e < d.YEAR_SPAN ? (m || (m = o()), m[t.getUTCMonth()]) : t
.getUTCFullYear()
}, n.prototype.normalizeBarIndex = function(t) {
var e = 0,
i = 0,
o = this.baseIndex();
return t < this.m_points.firstIndex() ? (e = this.m_points.valueAt(this.m_points
.firstIndex()), i = t - this.m_points.firstIndex()) : t > o ? (e = this.m_points
.valueAt(o), i = t - o) : (e = this.m_points.valueAt(t), i = 0), {
time_t: e,
offset: i
}
}, n.prototype.denormalizeTimePoint = function(t) {
var e = this.m_points.indexOf(t.time_t);
if (null !== e) return e + t.offset
}, n.prototype.zoomToBarsRange = function(t, e) {
if (!(e <= t)) {
var i = this.baseIndex();
this.m_rightOffset = e - i, this.setBarSpacing(this.width() / (e - t + 1)), this
._visibleBarsInvalidated = !0
}
}, n.prototype.canZoomIn = function() {
return this.m_barSpacing < g
}, n.prototype.canZoomOut = function() {
return this.m_barSpacing > v
}, n.prototype.minBarSpacing = function() {
return v
}, n.prototype.maxBarSpacing = function() {
return g
}, n.prototype.onScroll = function() {
return this._onScroll
}, n.prototype.visibleBarsChanged = function() {
return this._visibleBarsChanged
}, t.exports = n
}).call(e, i(10))
},
function(t, e, i) {
"use strict";
(function(e) {
function i() {
this._marksByIndex = {}, this._marksBySpan = [], this.changed = new e
}
i.prototype.reset = function() {
this._marksByIndex = {}, this._marksBySpan = [], delete this.minIndex, delete this
.maxIndex, delete this._cache, this.changed.fire()
}, i.prototype.minIndex = void 0, i.prototype.maxIndex = void 0, i.prototype.merge =
function(t) {
var e, i, o, n, r, s = this._marksBySpan,
a = {};
for (e = 0; e < t.length; e++) {
if (i = t[e], o = i.index, n = i.span, r = this._marksByIndex[i.index]) {
if (r.index === i.index && r.span === i.span) {
r.time = i.time;
continue
}
this._removeTickmark(r)
}
this._marksByIndex[o] = i, this.minIndex <= o || (this.minIndex = o), this
.maxIndex >= o || (this.maxIndex = o), s[n] || (s[n] = []), s[n].push(i), a[
n] = !0
}
for (n = s.length; n--;) s[n] && (s[n].length || delete s[n], a[n] && s[n].sort(this
._sortByIndexAsc));
delete this._cache, this.changed.fire()
}, i.prototype._removeTickmark = function(t) {
var e, i, o = t.index;
this._marksByIndex[o] === t && (delete this._marksByIndex[o], o <= this.minIndex && this
.minIndex++, o >= this.maxIndex && this.maxIndex--, this.maxIndex < this
.minIndex && (delete this.minIndex, delete this.maxIndex), e = this
._marksBySpan[t.span], -1 !== (i = e.indexOf(t)) && e.splice(i, 1))
}, i.prototype._sortByIndexAsc = function(t, e) {
return t.index - e.index
}, i.prototype.removeTail = function(t) {
var e, i = {};
this.maxIndex = 0;
for (e in this._marksByIndex) this._marksByIndex[e].time < t && (i[e] = this
._marksByIndex[e], this.maxIndex = Math.max(this.maxIndex, e));
this._marksByIndex = i
}, i.prototype.addTail = function(t) {
for (var e = 0; e < t.length; e++) t[e].index = this.maxIndex + e + 1;
this.merge(t)
}, i.prototype.indexToTime = function(t) {
var e = this._marksByIndex[t];
return e ? new Date(1e3 * e.time) : null
}, i.prototype.density = function() {
var t, e = this.maxIndex - this.minIndex;
if (0 !== e) return t = this._marksByIndex[this.maxIndex].time - this._marksByIndex[this
.minIndex].time, 1e3 * t / e
}, i.prototype.estimateLeft = function(t) {
var e, i = this.density();
if (i) return e = 1e3 * this._marksByIndex[this.minIndex].time - t, e / i
}, i.prototype.nearestIndex = function(t) {
for (var e, i = this.minIndex, o = this.maxIndex; o - i > 2;) {
if (1e3 * this._marksByIndex[i].time === t) return i;
if (1e3 * this._marksByIndex[o].time === t) return o;
e = Math.round((i + o) / 2), 1e3 * this._marksByIndex[e].time > t ? o = e : i = e
}
return i
}, i.prototype.build = function(t, e) {
var i, o, n, r, s, a, l, c, h, u, d, p, _, f, m = Math.ceil(e / t);
if (this._maxbar === m && this._cache) return this._cache;
for (this._maxbar = m, i = [], o = this._marksBySpan.length; o--;)
if (this._marksBySpan[o]) {
for (n = i, i = [], r = n.length, s = 0, a = this._marksBySpan[o], l = a.length,
c = 1 / 0, h = -1 / 0, u = 0; u < l; u++) {
for (d = a[u], p = d.index; s < r;) {
if (_ = n[s], !((f = _.index) < p)) {
c = f;
break
}
s++, i.push(_), h = f, c = 1 / 0
}
c - p >= m && p - h >= m && (i.push(d), h = p)
}
for (; s < r; s++) i.push(n[s])
} return this._cache = i, this._cache
}, i.prototype.state = function() {
var t, e = [];
for (t = this._marksBySpan.length; t--;) this._marksBySpan[t] && (e = e.concat(this
._marksBySpan[t]));
return e = e.map(function(t) {
return [t.span, t.time, t.index]
}), {
marks: e,
version: 2
}
}, i.prototype.restoreState = function(t) {
if (this._marksByIndex = {}, this._marksBySpan = [], delete this.maxIndex, delete this
.minIndex, t && t.marks && t.marks.length)
if (2 === t.version) {
var e = t.marks.map(function(t) {
return {
span: t[0],
time: t[1],
index: t[2]
}
});
this.merge(e)
} else this.merge(t.marks)
}, t.exports = i
}).call(e, i(10))
},
function(t, e, i) {
"use strict";
var o, n, r;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(7), n = o.getLogger("Chart.TimePoints"), r = function() {
function t() {
this._zoffset = 0, this._items = []
}
return t.prototype.clear = function() {
this._zoffset = 0, this._items = []
}, t.prototype.size = function() {
return this._items.length
}, t.prototype.firstIndex = function() {
return this._offsetToIndex(0)
}, t.prototype.lastIndex = function() {
return this._offsetToIndex(this._items.length - 1)
}, t.prototype.merge = function(t, e, i) {
var o, r, s, a, l, c, h, u;
if (0 === i.length) return n.logError(
"merge: 'values' does not contain any time points"), [];
if (e > this._zoffset && t + e > 0) return n.logError(
"merge: when the first time point index is updated, we should fill the time points starting from the first one"
), [];
if (0 === this._items.length) return this._items = i, this._zoffset = e, [{
change: "rebuild",
index: this._validOffsetToIndex(0)
}];
if ((o = t + this._zoffset) < 0) {
if (r = Math.abs(o), i.length < r) return n.logError(
"merge: 'values' does not contain enough time points to fill in the new items. 'index': " +
t + ", previous 'zoffset': " + this._zoffset + ", new 'zoffset': " + e +
", 'values.length': " + i.length), [];
for (this._items = Array(r).concat(this._items), this._zoffset = e, s = 0; s < i
.length; ++s) this._items[t + s + e] = i[s];
return [{
change: "rebuild",
index: this._validOffsetToIndex(0)
}]
}
for (a = [], l = o; l < this._items.length && l - o < i.length; ++l) this._items[l] = i[
l - o], a.push({
change: "update",
index: this._validOffsetToIndex(l),
value: i[l - o]
});
if ((c = o + i.length) > this._items.length)
for (r = c - this._items.length, h = l; h < l + r; ++h) u = this._items.length, this
._items.push(i[h - o]), a.push({
change: "append",
index: this._validOffsetToIndex(u),
value: i[h - o]
});
return this._zoffset = e, a
}, t.prototype.addTail = function(t, e) {
for (var i = e ? 1 : 0; i < t.length; i++) this._items.push(t[i])
}, t.prototype.remove = function(t) {
var e, i, o, n = this._indexToOffset(t);
if (null === n) return [];
for (e = this._items.splice(n), i = [], o = 0; o < e.length; o++) i.push({
change: "remove",
index: t + o,
value: e[o]
});
return i
}, t.prototype.valueAt = function(t) {
var e = this._indexToOffset(t);
return null !== e ? this._items[e] : null
}, t.prototype.indexOf = function(t, e) {
if (this._items.length < 1) return null;
if (t > this._items[this._items.length - 1]) return e ? this._validOffsetToIndex(this
._items.length - 1) : null;
for (var i = 0; i < this._items.length; ++i) {
if (t === this._items[i]) return this._validOffsetToIndex(i);
if (t < this._items[i]) return e ? this._validOffsetToIndex(i) : null
}
return null
}, t.prototype.state = function() {
return {
items: this._items,
zoffset: this._zoffset
}
}, t.prototype.restoreState = function(t) {
null !== t && (this._items = t.items, this._zoffset = t.zoffset)
}, t.prototype.roughTime = function(t, e) {
var i, o, n, r, s, a, l, c, h, u, d, p;
return void 0 === e && (e = null), null !== (i = this.valueAt(t)) ? i : (o = this
._items, !o.length || o.length < 2 ? null : (n = 0, r = o.length - 1, s = this
._validOffsetToIndex(n), a = this._validOffsetToIndex(r), l = o[n], c = o[
r], h = (c - l) / (a - s), t < s ? (u = s - t, d = u * h, l - d) : (p =
500,
t > a ? (u = t - a) < p && null != e ? e(c, u) : (d = u * h, c + d) :
null)))
}, t.prototype.roughIndex = function(t, e) {
var i, o, n, r, s, a, l, c, h, u, d, p;
return void 0 === e && (e = null), i = this._items, !i.length || i.length < 2 ? null : (
o = 0, n = i.length - 1, r = this._validOffsetToIndex(o), s = this
._validOffsetToIndex(n), a = i[o], l = i[n], t >= a && t <= l ? this
.closestIndexLeft(t) : (c = (l - a) / (s - r), t < a ? (h = a - t, u = Math
.round(h / c), r - u) : (d = 500, t > l ? (h = t - l, u = Math.trunc(h /
c), u < d && null !== e && (p = e(l, t), p.success && (u = p
.result)), s + u) : null)))
}, t.prototype.closestIndexLeft = function(t) {
var e, i, o, n, r, s, a = this._items;
if (!a.length) return null;
if (t !== t) return null;
if (e = a.length - 1, i = a[e], t >= i) return this._validOffsetToIndex(e);
if (o = 0, n = a[o], t < n) return null;
if (t === n) return this._validOffsetToIndex(o);
for (; e > o + 1;)
if (r = o + e >> 1, (s = a[r]) > t) e = r;
else {
if (!(s < t)) return s === t ? this._validOffsetToIndex(r) : null;
o = r
} return this._validOffsetToIndex(o)
}, t.prototype._validOffsetToIndex = function(t) {
return t - this._zoffset
}, t.prototype._offsetToIndex = function(t) {
return 0 <= t && t < this.size() ? this._validOffsetToIndex(t) : null
}, t.prototype._indexToOffset = function(t) {
var e = t + this._zoffset;
return 0 <= e && e < this.size() ? e : null
}, t
}(), e.TimePoints = r
},
function(t, e, i) {
"use strict";
function o(t, e) {
this.tooltips = {}, this.tooltipFactory = t, this.source = e
}
function n(t, e) {
this.renderer = t, this._tooltip = e, this.visible = !1
}
o.prototype.findOrCreateTooltip = function(t) {
var e = this.tooltips[t.id];
return null == e && (t.hovered || t.pinned) && (e = this._createTooltip(), this.tooltips[t.id] =
e), e
}, o.prototype.showPlate = function(t, e) {
var i = this.findOrCreateTooltip(t);
null != i && (i._drawPlate(t, e), i.plateData = t)
}, o.prototype.draw = function(t, e) {
this.hoveredId = null;
for (var i = 0; i < t.length; i++) t[i].hovered && (this.hoveredId = t[i].id);
t.forEach(function(t) {
this.showPlate(t, e)
}.bind(this))
}, o.prototype.endDraw = function() {
var t, e, i = this;
for (t in this.tooltips) this.tooltips.hasOwnProperty(t) && (e = this.tooltips[t], e
.toggleVisibility(), i.hoveredId && e.plateData.id !== i.hoveredId && !e.plateData
.pinned && (e.remove(), delete this.tooltips[t]))
}, o.prototype.removeAll = function() {
var t, e;
for (t in this.tooltips) this.tooltips.hasOwnProperty(t) && (e = this.tooltips[t], e.remove());
this.tooltips = {}
}, o.prototype.removeTooltip = function(t) {
delete this.tooltips[t]
}, o.prototype._createTooltip = function() {
return new n(this, this.tooltipFactory())
}, n.prototype._drawPlate = function(t, e) {
var i = this;
this.visible = !0, this._tooltip.setSource(this.renderer.source), this._tooltip.showPlate(t, e),
t.hovered || t.pinned || this._tooltip.hide(function() {
i.renderer.removeTooltip(t.id)
})
}, n.prototype.remove = function() {
this._tooltip._removeLayout()
}, n.prototype.toggleVisibility = function() {
this._tooltip._toggleLayout(this.visible), this.visible = !1
}, e.TooltipRenderer = o
},
function(t, e, i) {
"use strict";
function o(t) {
return t && t.__esModule ? t : {
default: t
}
}
function n(t) {
var e, i;
if (t && t.__esModule) return t;
if (e = {}, null != t)
for (i in t) Object.prototype.hasOwnProperty.call(t, i) && (e[i] = t[i]);
return e.default = t, e
}
function r(t, e) {
if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
}
function s(t, e, i) {
var o, n = 2 * U,
r = document.createElement("canvas");
return r.width = e * n, r.height = i * n, r.style.width = e + "px", r.style.height = i + "px", o = r
.getContext("2d"), o.setTransform(n, 0, 0, n, 0, 0), o.drawImage(t, 0, 0, e, i), r
}
function a(t, e) {
return function() {
i.e(11).then(function() {
j = i(1191), t.call(e)
}.bind(null, i)).catch(i.oe)
}
}
function l(t) {
return !S || t > w
}
var c, h, u, d, p, _, f, m, g, v, y, b, S, w, T, C, x, P, L, I, k, A, M, E, D, V, O, R, B, z, F, N, W,
H, U, j, q, G;
Object.defineProperty(e, "__esModule", {
value: !0
}), e.Branding = void 0, c = function() {
function t(t, e) {
var i, o;
for (i = 0; i < e.length; i++) o = e[i], o.enumerable = o.enumerable || !1, o
.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key,
o)
}
return function(e, i, o) {
return i && t(e.prototype, i), o && t(e, o), e
}
}(), h = i(8), u = i(60), d = i(5), p = n(d), _ = i(11), f = o(_), m = i(321), g = o(m), v = i(31),
y = i(30), b = i(915), S = p.enabled("adaptive_logo"), w = 500, T = "TradingView", C =
"Ch{0}ar{1}t{2}by{3}{4}".format("", "", " ", " ", T), x = "po{0}wer{1}ed{2}by{3}{4}".format("", "",
" ", " ", T), P = "site_branding", L = "widget_branding", I = "widget_referral_branding", k =
"widget_custom_branding", A = "widget_custom_no_powered_branding", M = "fundamental_branding", E =
"fundamental_custom_branding", D = "fundamental_custom_no_powered_branding", V = "library_branding",
O = "library_custom_branding", R = "library_custom_no_powered_branding", B = .2,
z = navigator.userAgent.toLowerCase().indexOf("firefox") > -1, F = z && navigator.userAgent
.toLowerCase().indexOf("windows") > -1, N = navigator.userAgent.toLowerCase().indexOf("chrome") > -
1 && -1 === navigator.userAgent.toLowerCase().indexOf("edge"), W = function() {
var t, e = window.navigator.userAgent,
i = e.indexOf("MSIE ");
return i > 0 ? parseInt(e.substring(i + 5, e.indexOf(".", i)), 10) : e.indexOf("Trident/") >
0 && (t = e.indexOf("rv:"), parseInt(e.substring(t + 3, e.indexOf(".", t)), 10))
}(), H = window.urlParams || {}, window.initData, U = window.hidpiCanvasRatio || 1, j = null, q =
function() {
function t(e) {
var i = e.layout,
o = void 0 === i ? P : i,
n = e.symbol,
s = void 0 === n ? "" : n,
l = e.model,
c = e.onReadyCallback;
r(this, t), this._model = l, this._image = null, this._imageReady = !1, this
._needDisplay = !1, this._imageWidth = 22, this._imageHeight = 13, this.show = !0, this
.width = 100, this.height = 14, this._bottomShift = 0, this._brandCircleSize = 32, this
._layout = o, this._symbol = s, this._fillColor = v.color.brandNew, this._colorOldBlue =
v.color.brandDown, this._colorOldGray = v.color.black30, this._strokeColor = v.color
.black255, this._brandCircleColor = v.color.black255, this._brandCircleShadowColor = v
.color.black0, this._strokeWidth = 4, this._fontSize = 14, this._font =
'px "Trebuchet MS", Tahoma, Arial, sans-serif', this._txt = "TradingView", this
._onReadyCallback = c, this._upscaleRatio = N ? 1 : 2, this._strokeCanv = null, this
._fillCanv = null, W && (this._init = a(this._init, this)), this._init()
}
return c(t, [{
key: "_init",
value: function() {
this._checkLayout(), this.show && (this._loadImage(b, "tvLogo"), this
._updateStrokeColor(), this._model.properties().paneProperties
.background.subscribe(this, this._updateStrokeColor), this
._model.onChartThemeLoaded().subscribe(this, this
._updateStrokeColor))
}
}, {
key: "_updateStrokeColor",
value: function() {
var t = (0, y.getLuminance)(this._model.properties().paneProperties
.background.value());
this._strokeCanv = null, this._fillCanv = null, t > B ? (this
._brandCircleShadowopacity = .09, this._strokeOpacity = .8, this
._circleOpacity = 1) : (this._brandCircleShadowopacity = .16,
this._strokeOpacity = .1, this._circleOpacity = .1)
}
}, {
key: "_loadImage",
value: function(t, e) {
var i = this;
this._needDisplay && (this._image = new Image, this._image.src = W ? j
.fallbackImages[e] : "data:image/svg+xml;charset=utf-8," +
encodeURIComponent(t), this._image.addEventListener("load",
function() {
F && (i._image = s(i._image, i._imageWidth, i
._imageHeight)), i._imageReady = !0,
"function" == typeof i._onReadyCallback && i
._onReadyCallback()
}))
}
}, {
key: "_checkLayout",
value: function() {
switch (this._layout) {
case L:
case I:
case k:
case M:
case E:
case O:
case V:
this.show = !0;
break;
case P:
case A:
case D:
case R:
this.show = !1
}
switch (this._layout) {
case V:
this._needDisplay = !0, this._txt = $.t(C);
break;
case O:
this._txt = $.t(x)
}
}
}, {
key: "_drawTextStroke",
value: function(t) {
var e, i;
this._strokeCanv || (this._strokeCanv = document.createElement(
"canvas"), e = this._strokeCanv.getContext("2d"), i = Math
.round(this._strokeWidth * this._upscaleRatio), e.font = this
._fontSize * this._upscaleRatio + this._font, this._textWidth =
e.measureText(this._txt).width, this._strokeCanv.width = (this
._textWidth + 2 * i) * U, this._strokeCanv.height = (this
._fontSize + 2 * i) * this._upscaleRatio * U,
this._strokeCanv.width % 2 == 0 && (this._strokeCanv.width += 1,
this._strokeCanv.height += 1), e.textBaseline = "top", e
.textAlign = "start", e.font = this._fontSize * this
._upscaleRatio + this._font, e.strokeStyle = this._strokeColor,
e.lineWidth = this._strokeWidth * this._upscaleRatio * U, e
.lineJoin = "round", e.strokeText(this._txt, i, z ? 4 : 0)), t
.save(), t.globalAlpha = this._strokeOpacity, t.drawImage(this
._strokeCanv, 0, 0, this._strokeCanv.width, this._strokeCanv
.height, 0, 0, this._strokeCanv.width / this._upscaleRatio / U,
this._strokeCanv.height / this._upscaleRatio / U), t.restore()
}
}, {
key: "_drawTextFill",
value: function(t) {
var e, i;
this._fillCanv || (this._fillCanv = document.createElement("canvas"),
e = this._fillCanv.getContext("2d"), i = Math.round(this
._strokeWidth * this._upscaleRatio), this._fillCanv.width =
(this._textWidth + 2 * i) * U, this._fillCanv.height = (this
._fontSize + 2 * i) * this._upscaleRatio * U, this._fillCanv
.width % 2 == 0 && (this._fillCanv.width += 1, this._fillCanv
.height += 1), e.textBaseline = "top", e.textAlign =
"start", e.font = this._fontSize * this._upscaleRatio + this
._font, e.fillStyle = this._fillColor, e.fillText(this._txt, i,
z ? 4 : 0)), t.save(), t.drawImage(this._fillCanv, 0, 0,
this._fillCanv.width, this._fillCanv.height, 0, 0, this
._fillCanv.width / this._upscaleRatio / U, this._fillCanv
.height / this._upscaleRatio / U), t.restore()
}
}, {
key: "_drawBgCircle",
value: function(t) {
t.save(), t.beginPath(), t.fillStyle = this._brandCircleShadowColor, t
.globalAlpha = this._brandCircleShadowopacity, t.arc(this
._imageWidth / 2, this._imageHeight / 2, this._brandCircleSize /
2 + 1, 0, 2 * Math.PI), t.fill(), t.closePath(), t.restore(), t
.save(), t.beginPath(), t.globalAlpha = this._circleOpacity, t
.fillStyle = this._brandCircleColor, t.arc(this._imageWidth / 2,
this._imageHeight / 2, this._brandCircleSize / 2, 0, 2 * Math
.PI, !1), t.fill(), t.closePath(), t.restore()
}
}, {
key: "bottomShift",
value: function() {
return this._bottomShift
}
}, {
key: "draw",
value: function(t, e) {
var i, o, n, r, s, a;
this._layout === k || this._layout === E ? (i =
'12px "Trebuchet MS", Tahoma, Arial, sans-serif', t.font = i,
o = t.measureText(this._txt).width, this.width = o + t
.measureText("TradingView").width, t.save(), t.globalAlpha = .7,
t.fillStyle = this._colorOldGray, t.fillText(this._txt, 0, 12),
t.fillStyle = this._colorOldBlue, t.fillText("TradingView", o,
12), t.restore()) : this._needDisplay && this._imageReady ?
(t.save(), n = (this._brandCircleSize - this._imageWidth) / 2, t
.translate(n, 0), this._drawBgCircle(t), t.drawImage(this
._image, 0, -.5, this._imageWidth, this._imageHeight), r =
12 + (N ? -.5 : 0), t.translate(this._imageWidth + r, -.5), s =
l(e), s && (this._drawTextStroke(t), this._drawTextFill(t)), t
.restore(), this.width = this._imageWidth + n, this.width += s ?
r + this._strokeCanv.width / this._upscaleRatio / U : n, this
.height = this._brandCircleSize, this._bottomShift = this
._brandCircleSize - this._imageHeight) : (t.save(), t.translate(
0, 0), a = l(e), a && (this._drawTextStroke(t), this
._drawTextFill(t)), t.restore(), a && (this.width = this
._strokeCanv.width / this._upscaleRatio / U))
}
}]), t
}(), G = function() {
function t(e) {
var i = e.layout,
o = void 0 === i ? P : i,
n = e.src,
s = e.onReadyCallback;
r(this, t), this._img = new Image, this._ready = !1, this.show = !1, this.width = 0, this
.height = 0, this._layout = o, this._src = n,
this._onReadyCallback = s, W && (this._init = a(this._init, this)), this._init()
}
return c(t, [{
key: "_init",
value: function() {
var t, e, i = this;
this._checkLayout(), this.show && (t = this._src.match(/(\w+)\.svg/),
W && t && 2 === t.length ? (e = t[1], this._img.src = j
.fallbackImages[e], this._img.addEventListener("load",
function() {
var t = j.logoSizes;
e in t ? (i.width = t[e].width, i.height = t[e]
.height) : (i.width = 135, i.height = 25), i
._ready = !0, "function" == typeof i
._onReadyCallback && i._onReadyCallback()
})) : (this._img.src = this._src, this._img
.addEventListener("load", function() {
i.width = Math.round(i._img.width), i.height = Math
.round(i._img.height), F && (i._img = s(i._img,
i.width, i.height)), i._ready = !0,
"function" == typeof i._onReadyCallback && i
._onReadyCallback()
})))
}
}, {
key: "_checkLayout",
value: function() {
switch (this._layout) {
case k:
case A:
case E:
case D:
case O:
case R:
this.show = !0;
break;
case P:
case L:
case I:
case M:
case V:
this.show = !1
}
}
}, {
key: "draw",
value: function(t) {
this._ready && t.drawImage(this._img, 0, 0, this.width, this.height)
}
}]), t
}(), e.Branding = function() {
function t(e) {
var i, o = this;
r(this, t), this._model = e, this._mainSeries = this._model.mainSeries(), this
._canvasWidth = 0, this._paneHeight = 0, this._left = 13, this._bottom = 24, this
._layout = P, this._needToShow = !0, this._customLogoSrc = "", this._customLogoLink =
"", this._checkLayout(), this._layout !== k && this._layout !== E || (this._left = 8,
this._bottom = 5), i = function() {
o._needToShow ? o._layout === P ? o._showBranding = window.innerWidth >= 768 : o
._showBranding = !0 : o._showBranding = !1
}, this._resizeHandlerDelayed = (0, g.default)(i, 200), i(), window.addEventListener(
"resize", this._resizeHandlerDelayed), this._model.isSnapshot() ? this._init() :
this._mainSeries.onSymbolResolved().subscribe(this, this._init)
}
return c(t, [{
key: "destroy",
value: function() {
window.removeEventListener("resize", this._resizeHandlerDelayed)
}
}, {
key: "_init",
value: function() {
var t = this,
e = this._mainSeries.symbolInfo() || {};
this._powBy = new q({
layout: this._layout,
symbol: e.name,
model: this._model,
onReadyCallback: function() {
return t._model.fullUpdate()
}
}), this._custom = new G({
layout: this._layout,
src: this._customLogoSrc,
onReadyCallback: function() {
return t._model.fullUpdate()
}
})
}
}, {
key: "_checkLayout",
value: function() {
if (p.enabled("widget"));
else if (p.enabled("charting_library") || p.enabled("amp_terminal") || p
.enabled("cqg_terminal") || p.enabled("trading_terminal")) {
var t = JSON.parse(H.logo) || {};
t.image ? (this._customLogoSrc = t.image, this._customLogoLink = t
.link, this._needToShow = p.enabled("widget_logo"), p
.enabled("link_to_tradingview") ? this._layout = O : this
._layout = R) : (this._layout = V, this._needToShow = p
.enabled("widget_logo"))
} else this._layout = P
}
}, {
key: "updateAllViews",
value: function() {}
}, {
key: "priceScale",
value: function() {}
}, {
key: "priceAxisViews",
value: function() {}
}, {
key: "onClickOutside",
value: function() {}
}, {
key: "hasContextMenu",
value: function() {
return !1
}
}, {
key: "hitTest",
value: function(t) {
var e = this;
return !this._showBranding || p.enabled("logo_without_link") ? null :
this._powBy && this._layout !== P && this._layout !== A && this
._layout !== D && (0,
u.pointInRectangle)(t, new h.Point(this._left, this
._paneHeight - this._bottom + this._powBy.bottomShift() /
2 - Math.max(this._powBy.height, void 0 !== this._custom ?
this._custom.height : 0)), new h.Point(this._left + Math
.max(this._powBy.width, void 0 !== this._custom ? this
._custom.width : 0), this._paneHeight - this._bottom +
this._powBy.bottomShift() / 2)) ? new f.default(f.default
.CUSTOM, {
mouseUpHandler: function() {
window.open(e.tvUrl(), "_blank").opener = null
}
}) : null
}
}, {
key: "tvUrl",
value: function() {
var t, e = "https://www.tradingview.com/";
if (this._customLogoLink) return this._customLogoLink;
if (this._layout === V || this._layout === O) {
switch (t = void 0, !0) {
case p.enabled("charting_library"):
t = "library";
break;
case p.enabled("trading_terminal"):
case p.enabled("amp_terminal"):
case p.enabled("cqg_terminal"):
t = "trading-terminal"
}
return e += "/" === e[e.length - 1] ? "?" : "&", e +=
"utm_source=" + window.location.origin + "&utm_medium=library" +
(t ? "&utm_campaign=" + t : "")
}
return e
}
}, {
key: "draw",
value: function(t) {
if (this._showBranding) {
var e = 0;
this._powBy && this._powBy.show && (e = this._powBy.height - this
._powBy.bottomShift(), t.save(), t.translate(this._left,
this._paneHeight - this._bottom - e), this._powBy.draw(
t, this._canvasWidth), t.restore()), this._custom &&
this._custom.show && (t.save(), t.translate(this._left, this
._paneHeight - this._bottom - e - this._custom.height),
this._custom.draw(t), t.restore())
}
}
}, {
key: "renderer",
value: function(t, e) {
return this._paneHeight = this._pane.height(), this._canvasWidth = e, {
draw: this.draw.bind(this)
}
}
}, {
key: "paneViews",
value: function(t) {
var e = p.enabled("move_logo_to_main_pane");
return e && t.isMainPane() || !e && t.isLast() || t.isMaximized() ? (
this._pane = t, [{
renderer: this.renderer.bind(this)
}]) : []
}
}]), t
}()
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 13" width="22" height="13"><path fill="#37A6EF" fill-rule="nonzero" d="M19.354 4.932c.379.55.611 1.207.642 1.918A3.007 3.007 0 0 1 22 9.686a3.003 3.003 0 0 1-3 3.006H4a3.983 3.983 0 0 1-2.814-1.16l6.363-5.048a1.657 1.657 0 0 0 1.495.037l3.034 2.66a1.672 1.672 0 0 0 1.589 2.175 1.668 1.668 0 0 0 1.552-2.28l4.135-4.144zm-.942-.945L14.276 8.13a1.66 1.66 0 0 0-1.32.044l-3.034-2.66A1.672 1.672 0 0 0 8.333 3.34a1.668 1.668 0 0 0-1.611 2.097l-6.316 5.01A3.999 3.999 0 0 1 0 8.683a4.004 4.004 0 0 1 4.041-4.008A5.338 5.338 0 0 1 9.333 0a5.337 5.337 0 0 1 5.124 3.857 3.644 3.644 0 0 1 1.876-.517c.772 0 1.488.239 2.079.647z"/></svg>'
},
function(t, e, i) {
"use strict";
var o, n;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(10), n = function() {
function t(t) {
this._changed = new o, this._model = t
}
return t.prototype.getStepChangeValue = function() {
return .1
}, t.prototype.getMinValue = function() {
return 1e-7
}, t.prototype.getMaxValue = function() {
return 9999
}, t.prototype.value = function() {
return this._model.mainSeriesScaleRatio()
}, t.prototype.setValue = function(t, e) {
(t !== this.value() || e) && (this._model.setMainSeriesScaleRatio(t), this._onChanged())
}, t.prototype.state = function() {
return null
}, t.prototype.clone = function() {
return new t(this._model)
}, t.prototype.listeners = function() {
return this._changed
},
t.prototype.subscribe = function(t, e) {
this._changed.subscribe(t, e)
}, t.prototype.unsubscribe = function(t, e) {
this._changed.unsubscribe(t, e)
}, t.prototype.unsubscribeAll = function(t) {
this._changed.unsubscribeAll(t)
}, t.prototype._onChanged = function() {
this._changed.fire(this)
}, t
}(), e.MainSeriesScaleRatioProperty = n
},
function(t, e, i) {
"use strict";
function o(t) {
"LineToolGannComplex" !== t.type || void 0 !== t.version && 1 !== t.version || (t.type =
"LineToolGannFixed")
}
Object.defineProperty(e, "__esModule", {
value: !0
}), e.migrateState = o
},
function(t, e, i) {
"use strict";
function o(t) {
this._data = t
}
function n(t, e, i) {
if (i === CanvasEx.HHISTDIR_LEFTTORIGHT) return t + e;
if (i === CanvasEx.HHISTDIR_RIGHTTOLEFT) return e + t;
throw Error("Unknown direction value: " + i)
}
var r = i(8),
s = r.Point,
a = r.equalPoints,
l = i(60),
c = l.pointInRectangle,
h = l.pointInTriangle,
u = i(132).intersectRayAndRectangle,
d = i(166).TextRenderer,
p = i(94).HorizontalLineRenderer,
_ = i(110).TrendLineRenderer,
f = i(919).HorizHistogramRenderer,
m = i(920).HLinesPriceAxisView,
g = i(380),
v = TradingView.Study,
y = i(921),
b = i(11),
S = i(53).CompositeRenderer,
w = i(130).clearRect,
T = i(30),
C = i(32).shiftColor,
x = i(7).getLogger("Chart.StudyGraphicsPaneViews");
v.graphicsZOrderPriority = function(t) {
switch (t) {
case "polygons":
return -100;
case "trendchannels":
return -90;
default:
return 0
}
}, v.StudyPaneView_horizlines = function(t, e) {
this._study = t, this._model = e, this._data = []
}, v.StudyPaneView_horizlines.prototype.update = function() {
this._invalidated = !0
}, v.StudyPaneView_horizlines.prototype.renderer = function() {
var t, e, i;
for (this._invalidated && (this._updateViewInternal(), this._invalidated = !1), t = new S, e =
0; e < this._data.length; e++) i = new _, i.setData(this._data[e]), i.setHitTest(new b(b
.REGULAR)), t.append(i);
return t
}, v.StudyPaneView_horizlines.prototype._updateViewInternal = function() {
var t, e, i, o, n, r, a, l, c, h, u, d, p, _, f, m, g, v, y, b, S, w;
if (this._data = [], (t = this._study.graphics().horizlines) && (e = this._study.priceScale(),
i = this._study._model.timeScale(), e && !e.isEmpty() && i && !i.isEmpty()))
for (o = this._study.graphics().indexes, n = this._model.timeScale().visibleBars(), r = n
.firstBar(), a = n.lastBar(), l = 0; l < t.length; l++)
if (c = t[l], c.data && (h = this._study.properties().graphics.horizlines[c.styleId], h
.visible.value()))
for (u = 0; u < c.data.length; u++) d = c.data[u], p = o[d.startIndex], _ = o[d
.endIndex], !d.extendRight && Math.max(p, _) < r || !d.extendLeft && Math
.min(p, _) > a || (f = {}, m = i.indexToCoordinate(p), g = i.indexToCoordinate(
_), v = d.level, e.isPercent() && (y = this._study.firstValue(), v = e
.priceRange().convertToPercent(v, y)), b = e.priceToCoordinate(v), S =
new s(m, b), w = new s(g, b), f.points = [S, w], f.extendleft = d
.extendLeft, f.extendright = d.extendRight, f.width = i.width(), f.height =
e.height(), f.color = h.color.value(), f.linewidth = h.width.value(), f
.linestyle = h.style.value(), this._data.push(f))
}, v.StudyPaneView_vertlines = function(t, e) {
this._study = t, this._model = e, this._data = []
}, v.StudyPaneView_vertlines.prototype.update = function() {
this._invalidated = !0
}, v.StudyPaneView_vertlines.prototype.renderer = function() {
var t, e, i;
for (this._invalidated && (this._updateViewInternal(), this._invalidated = !1), t = new S,
e = 0; e < this._data.length; e++) i = new _, i.setData(this._data[e]), i.setHitTest(new b(b
.REGULAR)), t.append(i);
return t
}, v.StudyPaneView_vertlines.prototype._updateViewInternal = function() {
var t, e, i, o, n, r, a, l, c, h, u, d, p, _, f, m, g, v, y, b, S;
if (this._data = [], (t = this._study.graphics().vertlines) && (e = this._study.priceScale(),
i = this._study._model.timeScale(), e && !e.isEmpty() && i && !i.isEmpty()))
for (o = this._study.graphics().indexes, n = this._model.timeScale().visibleBars(), r = n
.firstBar(), a = n.lastBar(), l = 0; l < t.length; l++)
if (c = t[l], c.data && (h = this._study.properties().graphics.vertlines[c.styleId], h
.visible.value()))
for (u = 0; u < c.data.length; u++) d = c.data[u], p = {}, o[d.index] < r || o[d
.index] > a || (_ = i.indexToCoordinate(o[d.index]) + 1, f = null, d
.extendBottom ? m = e.height() : (v = d.startPrice, e.isPercent() && (f =
f || this._study.firstValue(), v = e.priceRange().convertToPercent(
v, f)), m = e.priceToCoordinate(v)), d.extendTop ? g = 0 : (y = d
.endPrice, e.isPercent() && (f = f || this._study.firstValue(), y = e
.priceRange().convertToPercent(y, f)), g = e.priceToCoordinate(y)),
b = new s(_, m), S = new s(_, g), p.points = [b, S], p.extendleft = d
.extendBottom, p.extendright = d.extendTop, p.width = i.width(), p.height =
e.height(), p.color = h.color.value(), p.linewidth = h.width.value(), p
.linestyle = h.style.value(), this._data.push(p))
}, v.StudyPaneView_lines = function(t, e) {
this._study = t, this._model = e, this._data = []
}, v.StudyPaneView_lines.prototype.update = function() {
this._invalidated = !0
}, v.StudyPaneView_lines.prototype.renderer = function() {
var t, e, i;
for (this._invalidated && (this._updateViewInternal(), this._invalidated = !1), t = new S, e =
0; e < this._data.length; e++) i = new _, i.setData(this._data[e]), i.setHitTest(new b(b
.REGULAR)), t.append(i);
return t
}, v.StudyPaneView_lines.prototype._updateViewInternal = function() {
var t, e, i, o, n, r, a, l, c, h, u, d, p, _, f, m, g, v, y, b, S, w, T, C, x, P;
if (this._data = [], (t = this._study.graphics().lines) && (e = this._study.priceScale(), i =
this._study._model.timeScale(), e && !e.isEmpty() && i && !i.isEmpty()))
for (o = this._study.graphics().indexes, n = this._model.timeScale().visibleBars(), r = n
.firstBar(), a = n.lastBar(), l = this._study.priceScale().height(), c = i.width(), h =
0; h < t.length; h++)
if (u = t[h], u.data && (d = this._study.properties().graphics.lines[u.styleId], d
.visible.value()))
for (p = 0; p < u.data.length; p++) _ = u.data[p], f = o[_.startIndex] + (_
.startOffset || 0), m = o[_.endIndex] + (_.endOffset || 0), !_
.extendRight && Math.max(f, m) < r || !_.extendLeft && Math.min(f, m) > a || (
g = {}, v = i.indexToCoordinate(f), y = i.indexToCoordinate(m), b = _
.startPrice, S = _.endPrice, e.isPercent() && (w = this._study.firstValue(),
b = e.priceRange().convertToPercent(b, w), S = e.priceRange()
.convertToPercent(S, w)), T = e.priceToCoordinate(b), C = e
.priceToCoordinate(S), x = new s(v, T), P = new s(y, C), g.points = [x, P],
g.width = c, g.height = l, g.color = d.color.value(), g.linewidth = d.width
.value(), g.linestyle = d.style.value(), this._data.push(g))
}, v.StudyPaneView_hlines = function(t, e) {
this._study = t, this._model = e, this._data = [], this._textData = []
}, v.StudyPaneView_hlines.prototype.update = function() {
this._invalidated = !0
}, v.StudyPaneView_hlines.prototype.renderer = function() {
var t, e, i;
for (this._invalidated && (this._updateViewInternal(),
this._invalidated = !1), t = new S, e = 0; e < this._data.length; e++) i = new p, i
.setData(this._data[e]), t.append(i);
for (e = 0; e < this._textData.length; e++) t.append(new d(this._textData[e], new b(b
.REGULAR)));
return t
}, v.StudyPaneView_hlines.prototype._updateViewInternal = function() {
this._calcHorzLinesData(), this._calcTextData()
}, v.StudyPaneView_hlines.prototype._calcTextData = function() {
var t, e, i, o, n, r, a, l, c, h, u, d, p, _, f;
if (this._textData = [], (t = this._study.graphics().hlines) && (e = this._study.priceScale(),
i = this._study._model.timeScale(), e && !e.isEmpty() && i && !i.isEmpty()))
for (o = 0; o < t.length; o++)
if (n = t[o], n.data && (r = this._study.properties().graphics.hlines[n.styleId], r
.enableText.value() && r.showText.value()))
for (a = 0; a < n.data.length; a++) l = n.data[a], c = {}, c.text = void 0 === l
.text ? "" : l.text, c.color = r.color.value(), c.font = "arial", c.fontsize = r
.fontSize.value(), h = l.level, e.isPercent() && (u = this._study.firstValue(),
h = e.priceRange().convertToPercent(h, u)), d = e.priceToCoordinate(h), p =
r.textPos.value(), p === CanvasEx.TEXTPOS_TOPLEFT || p === CanvasEx
.TEXTPOS_MIDDLELEFT || p === CanvasEx.TEXTPOS_BOTTOMLEFT ? (_ = 4, c.horzAlign =
"left") : p === CanvasEx.TEXTPOS_TOPCENTER || p === CanvasEx
.TEXTPOS_MIDDLECENTER || p === CanvasEx.TEXTPOS_BOTTOMCENTER ? (_ = i.width() /
2, c.horzAlign = "center") : p !== CanvasEx.TEXTPOS_TOPRIGHT && p !==
CanvasEx.TEXTPOS_MIDDLERIGHT && p !== CanvasEx.TEXTPOS_BOTTOMRIGHT || (_ = i
.width(), c.horzAlign = "right"), p === CanvasEx.TEXTPOS_TOPLEFT || p ===
CanvasEx.TEXTPOS_TOPCENTER || p === CanvasEx.TEXTPOS_TOPRIGHT ? (c.vertAlign =
"bottom", d -= 4) : p === CanvasEx.TEXTPOS_MIDDLELEFT || p === CanvasEx
.TEXTPOS_MIDDLECENTER || p === CanvasEx.TEXTPOS_MIDDLERIGHT ? (c.vertAlign =
"middle", d -= 2) : p !== CanvasEx.TEXTPOS_BOTTOMLEFT && p !== CanvasEx
.TEXTPOS_BOTTOMCENTER && p !== CanvasEx.TEXTPOS_BOTTOMRIGHT || (c.vertAlign =
"top"), f = new s(_, d), c.points = [f], c.offsetX = 0, c.offsetY = 0, this
._textData.push(c)
}, v.StudyPaneView_hlines.prototype._calcHorzLinesData = function() {
var t, e, i, o, n, r, a, l, c, h, u, d;
if (this._data = [], (t = this._study.graphics().hlines) && (e = this._study.priceScale()) && !e
.isEmpty())
for (i = 0; i < t.length; i++)
if (o = t[i], o.data && (n = this._study.properties().graphics.hlines[o.styleId], n
.visible.value()))
for (r = 0; r < o.data.length; r++) a = o.data[r], l = {}, c = 0, h = a.level, e
.isPercent() && (u = this._study.firstValue(), h = e.priceRange()
.convertToPercent(h, u)), d = e.priceToCoordinate(h), l.points = [new s(c,
d)], l.color = n.color.value(), l.linewidth = n.width.value(), l.linestyle =
n.style.value(), l.hitTestResult = b.REGULAR, this._data.push(l)
}, v.StudyPriceAxisView_hlines = m, TradingView.TriangleTextMarkRenderer = function(t, e) {
this._data = t, this._textCache = e
}, TradingView.TriangleTextMarkRenderer.prototype.fontStyle = function() {
return (this._data.bold ? "bold " : "") + (this._data.italic ? "italic " : "") + this._data
.fontSize + "px " + this._data.font
}, TradingView.TriangleTextMarkRenderer.prototype.draw = function(t) {
var e, i, o, n, r, s, a;
if (this._data) {
switch (e = "up" === this._data.direction ? 1 : -1, i = this._data.point.x, "left" === this
._data.halign ? i -= this._data.size : "right" === this._data.halign && (i += this._data
.size), o = this._data.point.y, t.font = this.fontStyle(), n = t.measureText(this
._data.text).width,
this._textCache.textWidth = n, r = this._data.fontSize, s = .65 * r, a = 1 * r, t
.save(), t.translate(i + .5, o + .5), t.beginPath(), t.moveTo(0, 0), this._data
.direction) {
case "up":
case "down":
t.lineTo(s, a * e), t.lineTo(.5 * n + s, a * e), t.lineTo(.5 * n + s, (a + 1.75 *
r) * e), t.lineTo(.5 * -n - s, (a + 1.75 * r) * e), t.lineTo(.5 * -n - s,
a * e), t.lineTo(-s, a * e), t.lineTo(0, 0), t.strokeStyle = this._data
.borderColor, t.stroke(), t.fillStyle = this._data.color, t.fill(), t
.fillStyle = this._data.fontColor, t.fillText(this._data.text, .5 * -n, e < 0 ?
e * a - .5 * r : a + 1.25 * r);
break;
default:
throw Error(this._data.direction +
" doesn't supported by TradingView.TriangleTextMarkRenderer")
}
t.restore()
}
}, TradingView.TriangleTextMarkRenderer.prototype.hitTest = function(t) {
var e, i, o, n, r, a, l, h, u, d, p, _ = this._textCache.textWidth,
f = this._data.fontSize;
switch (this._data.direction) {
case "up":
case "down":
if (e = "up" === this._data.direction ? 1 : -1, i = .65 * f, o = 1 * f, n = this._data
.point.x, "left" === this._data.halign ? n -= this._data.size : "right" === this
._data.halign && (n += this._data.size), r = this._data.point.y, a = n - .5 * _ - i,
l = n + .5 * _ + i, h = r + o * e, u = r + (o + 1.75 * f) * e, u < h && (r = h, h =
u, u = r), c(t, new s(a, h), new s(l, u))) return new b(b.REGULAR);
if (d = [], d[0] = {}, d[0].x = this._data.point.x, d[0].y = this._data.point.y, d[
1] = {}, d[1].x = this._data.point.x + .65 * f, d[1].y = this._data.point.y +
f * e,
d[2] = {}, d[2].x = this._data.point.x - .65 * f, d[2].y = this._data.point.y + f *
e, p = (t.x - d[0].x) * (d[1].y - d[0].y) - (t.y - d[0].y) * (d[1].x - d[0].x), ((t
.x - d[1].x) * (d[2].y - d[1].y) - (t.y - d[1].y) * (d[2].x - d[1].x)) * p >
0 && ((t.x - d[2].x) * (d[0].y - d[2].y) - (t.y - d[2].y) * (d[0].x - d[2].x)) * p >
0) return new b(b.REGULAR);
break;
default:
throw Error(this._data.direction +
" doesn't supported by TradingView.TriangleTextMarkRenderer")
}
return null
}, TradingView.RectangleTextMarkRenderer = function(t, e) {
this._data = t, this._textCache = e
}, TradingView.RectangleTextMarkRenderer.prototype.fontStyle = function() {
return (this._data.bold ? "bold " : "") + (this._data.italic ? "italic " : "") + this._data
.fontSize + "px " + this._data.font
}, TradingView.RectangleTextMarkRenderer.prototype.draw = function(t) {
var e, i, o, n, r;
if (this._data) {
switch (e = this._data.point.x, i = this._data.point.y, t.font = this.fontStyle(), o = t
.measureText(this._data.text).width, this._textCache.textWidth = o, t.save(), t
.translate(e + .5, i + .5), t.beginPath(), t.moveTo(0, 0), n = this._data.halign, r =
this._data.valign, t.textAlign = n, r) {
case "middle":
t.textBaseline = "middle";
break;
case "top":
t.textBaseline = "bottom";
break;
case "bottom":
t.textBaseline = "hanging"
}
t.fillStyle = this._data.fontColor, t.fillText(this._data.text, 0, 0), t.restore()
}
}, TradingView.RectangleTextMarkRenderer.prototype.hitTest = function(t) {
var e, i, o = this._data.point.x + .5,
n = this._data.point.y + .5,
r = this._textCache.textWidth,
a = this._data.fontSize,
l = this._data.halign;
switch (this._data.valign) {
case "middle":
n -= a / 2;
break;
case "bottom":
n -= a
}
switch (l) {
case "right":
o -= r;
break;
case "center":
o -= r / 2
}
return e = new s(o, n), i = new s(o + r, n + a), c(t, e, i) ? new b(b.REGULAR) : null
}, TradingView.CircleShapeMarkRenderer = function(t, e) {
this._data = t, this._textCache = e
}, TradingView.CircleShapeMarkRenderer.prototype.draw = function(t) {
var e, i, o;
this._data && (e = "down" === this._data.direction ? 1 : "up" === this._data.direction ? -1 : 0,
i = this._data.point.x, o = this._data.point.y, t.save(), t.fillStyle = this._data
.color, t.beginPath(), t.arc(i + 1, o + 2 * this._data.size * e + .5, this._data.size,
0, 2 * Math.PI), t.closePath(), t.fill(), t.stroke(), t.restore())
}, TradingView.CircleShapeMarkRenderer.prototype.hitTest = function(t) {
var e = "down" === this._data.direction ? 1 : "up" === this._data.direction ? -1 : 0;
return Math.pow(this._data.point.x + .5 - t.x, 2) + Math.pow(this._data.point.y + .5 + 2 * this
._data.size * e - t.y, 2) <= Math.pow(this._data.size, 2) ? new b(b.REGULAR) : null
}, TradingView.SquareShapeMarkRenderer = function(t, e) {
this._data = t, this._textCache = e
}, TradingView.SquareShapeMarkRenderer.prototype.draw = function(t) {
var e, i, o, n, r;
this._data && (e = "down" === this._data.direction ? 1 : "up" === this._data.direction ? -1 : 0,
i = parseInt(this._data.size), o = new s(this._data.point.x - i / 2, this._data.point
.y - i / 2 + e * i), n = new s(this._data.point.x + i / 2, this._data.point.y + i /
2 + e * i), r = n.subtract(o), t.beginPath(), t.fillStyle = this._data.color, t
.rect(o.x, o.y, r.x, r.y), t.stroke(), t.fill())
}, TradingView.SquareShapeMarkRenderer.prototype.hitTest = function(t) {
var e = "down" === this._data.direction ? 1 : "up" === this._data.direction ? -1 : 0,
i = parseInt(this._data.size),
o = new s(this._data.point.x - i / 2, this._data.point.y - i / 2 + e * i),
n = new s(this._data.point.x + i / 2, this._data.point.y + i / 2 + e * i),
r = new s(Math.min(o.x, n.x), Math.min(o.y, n.y)),
a = new s(Math.max(o.x, n.x), Math.max(o.y, n.y));
return c(t, r, a) ? new b(b.REGULAR) : null
}, TradingView.ArrowShapeMarkRenderer = function(t, e, i) {
this._data = t, this._textCache = e, this._arrowDirection = i
}, TradingView.ArrowShapeMarkRenderer.prototype.draw = function(t) {
var e, i, o, n, r, s, a, l, c, h, u;
if (this._data) {
switch (e = this._arrowDirection, i = 1 * this._data.size, o = this._data.color, n = this
._data.point.x + 1, r = this._data.point.y, s = 1.1 * i, e) {
case "up":
r -= s;
break;
case "down":
r += s
}
switch (a = i / 6, l = i / 4, c = i / 3, h = i / 2, u = .6666666 * i, t.save(), t
.fillStyle = o, t.beginPath(), e) {
case "up":
t.moveTo(n, r), t.lineTo(n - h, r + u), t.lineTo(n - l, r + u), t.lineTo(n, r + c),
t.lineTo(n + l, r + u), t.lineTo(n + h, r + u), t.lineTo(n, r);
break;
case "down":
t.moveTo(n, r + i), t.lineTo(n - h, r + c), t.lineTo(n - l, r + c), t.lineTo(n, r +
u), t.lineTo(n + l, r + c), t.lineTo(n + h, r + c), t.lineTo(n, r + i);
break;
case "right":
t.moveTo(n + a, r), t.lineTo(n - a, r - l), t.lineTo(n - a, r + l), t.lineTo(n + a,
r);
break;
case "left":
t.moveTo(n - a, r), t.lineTo(n + a, r - l), t.lineTo(n + a, r + l), t.lineTo(n - a,
r)
}
t.closePath(), t.fill(), t.stroke(), t.restore()
}
}, TradingView.ArrowShapeMarkRenderer.prototype.hitTest = function(t) {
var e, i, o, n, r, a, l, c = this._data.point.x,
u = this._data.point.y,
d = this._arrowDirection,
p = 1 * this._data.size,
_ = p / 2,
f = 1.1 * p;
switch (d) {
case "up":
u -= f;
break;
case "down":
u += f
}
switch (e = p / 6, i = p / 4, o = p / 3, _ = p / 2, n = .6666666 * p, d) {
case "up":
r = new s(c, u), a = new s(c + _, u + n), l = new s(c - _, u + n);
break;
case "down":
r = new s(c, u + p), a = new s(c + _, u + o), l = new s(c - _, u + o);
break;
case "right":
r = new s(c + e, u), a = new s(c - e, u - i), l = new s(c - e, u + i);
break;
case "left":
r = new s(c - e, u), a = new s(c + e, u - i), l = new s(c + e, u + i)
}
return h(t, r, a, l) ? new b(b.REGULAR) : null
}, v.StudyPaneView_textmarks = function(t, e) {
this._study = t, this._model = e, this._data = [],
this._textCache = []
}, inherit(v.StudyPaneView_textmarks, y), v.StudyPaneView_textmarks.prototype.update = function() {
this._invalidated = !0
}, v.StudyPaneView_textmarks.prototype.renderer = function() {
var t, e;
for (this._invalidated && (this._updateViewInternal(), this._invalidated = !1), t = new S, e =
0; e < this._data.length; e++) switch (this._data[e].shape) {
case "triangle":
t.append(new TradingView.TriangleTextMarkRenderer(this._data[e], this._textCache[
e]));
break;
case "rectangle":
t.append(new TradingView.RectangleTextMarkRenderer(this._data[e], this._textCache[
e]))
}
return t
}, v.StudyPaneView_textmarks.prototype._updateViewInternal = function() {
var t, e, i, o, n, r, a, l, c, h, u, d, p, _, f, m, g, v, y, b, S;
if (this._data = [], (t = this._study.graphics().textmarks) && (e = this._study.priceScale(),
i = this._model.timeScale(), e && !e.isEmpty() && i && !i.isEmpty()))
for (o = this._study.graphics().indexes, n = this._model.timeScale().visibleBars(), r = n
.firstBar(), a = n.lastBar(), l = 0; l < t.length; l++)
if (c = t[l], c.data && (h = this._study.properties().graphics.textmarks[c.styleId], h
.visible.value()))
for (u = c.data, d = 0; d < u.length; d++)
if (p = u[d], _ = {}, f = h.location.value(), m = h.shape.value(), !((g = o[p
.time]) < r || g > a) && null !== this._study.series().bars().valueAt(
g)) {
switch (g = o[p.time] + (p.offset || 0), _.font = h.fontFamily.value(), _
.color = T.generateColor(h.color.value(), h.transparency.value()), _
.bold = h.fontBold.value(), _.fontColor = T.generateColor(h.fontColor
.value(), h.transparency.value()), _.italic = h.fontItalic.value(),
_.fontSize = h.fontSize.value(), _.text = p.text ? p.text : "", _
.halign = h.halign.value(), _.valign = void 0 !== h.valign ? h.valign
.value() : "middle", _.shape = h.shape.value(), _.size = .5 * i
.barSpacing(), _.borderColor = "rgb(0, 0, 0)", v = 50, m) {
case "triangle":
S = this._calcCoordsForTriangleShape(f, g, v, p.price, e), _
.direction = S.direction, y = Math.round(i.indexToCoordinate(
g)), b = S.y;
break;
case "rectangle":
S = this._calcCoordsForRectangleShape(f, g, p.price, e, i), y = S.x,
b = S.y
}
_.point = new s(y, b), this._data.push(_), this._textCache.push({})
}
}, v.StudyPaneView_textmarks.prototype._calcCoordsForTriangleShape = function(t, e, i, o, n) {
var r, s, a;
switch (t) {
case CanvasEx.MARKLOC_TOP:
r = n.height() - i, s = "down";
break;
case CanvasEx.MARKLOC_BOTTOM:
r = i, s = "up";
break;
case CanvasEx.MARKLOC_ABSOLUTEDOWN:
n.isPercent() && (a = this._study.firstValue(), o = n.priceRange().convertToPercent(o,
a)), r = n.priceToCoordinate(o), s = "down";
break;
case CanvasEx.MARKLOC_ABSOLUTEUP:
n.isPercent() && (a = this._study.firstValue(), o = n.priceRange().convertToPercent(o,
a)), r = n.priceToCoordinate(o), s = "up";
break;
case CanvasEx.MARKLOC_ABOVEBAR:
r = this._locationToY(t, e), s = "down";
break;
case CanvasEx.MARKLOC_BELOWBAR:
default:
r = this._locationToY(t, e), s = "up"
}
return {
y: r,
direction: s
}
}, v.StudyPaneView_textmarks.prototype._calcCoordsForRectangleShape = function(t, e, i, o, n) {
var r, s, a = Math.round(n.indexToCoordinate(e));
switch (t) {
case CanvasEx.MARKLOC_ABSOLUTEDOWN:
case CanvasEx.MARKLOC_ABSOLUTEUP:
case CanvasEx.MARKLOC_ABSOLUTE:
o.isPercent() && (s = this._study.firstValue(), i = o.priceRange().convertToPercent(i,
s)), r = o.priceToCoordinate(i);
break;
case CanvasEx.MARKLOC_ABOVEBAR:
case CanvasEx.MARKLOC_BELOWBAR:
r = this._locationToY(t, e);
break;
case CanvasEx.MARKLOC_RIGHT:
case CanvasEx.MARKLOC_LEFT:
a = n.width(), o.isPercent() && (s = this._study.firstValue(), i = o.priceRange()
.convertToPercent(i, s)), r = o.priceToCoordinate(i);
break;
default:
r = this._locationToY(t, e)
}
return {
x: a,
y: r
}
}, v.StudyPaneView_shapemarks = function(t, e) {
this._study = t, this._model = e, this._data = [], this._textCache = []
}, inherit(v.StudyPaneView_shapemarks, y), v.StudyPaneView_shapemarks.prototype.update =
function() {
this._invalidated = !0
}, v.StudyPaneView_shapemarks.prototype.renderer = function() {
var t, e;
for (this._invalidated && (this._updateViewInternal(), this._invalidated = !1), t = new S, e =
0; e < this._data.length; e++) switch (this._data[e].shape) {
case "circle":
t.append(new TradingView.CircleShapeMarkRenderer(this._data[e], this._textCache[
e]));
break;
case "square":
t.append(new TradingView.SquareShapeMarkRenderer(this._data[e], this._textCache[
e]));
break;
case "arrowUp":
t.append(new TradingView.ArrowShapeMarkRenderer(this._data[e], this._textCache[e],
"up"));
break;
case "arrowDown":
t.append(new TradingView.ArrowShapeMarkRenderer(this._data[e], this._textCache[e],
"down"));
break;
case "arrowRight":
t.append(new TradingView.ArrowShapeMarkRenderer(this._data[e], this._textCache[e],
"right"));
break;
case "arrowLeft":
t.append(new TradingView.ArrowShapeMarkRenderer(this._data[e], this._textCache[e],
"left"))
}
return t
}, v.StudyPaneView_shapemarks.prototype._updateViewInternal = function() {
var t, e, i, o, n, r, a, l, c, h, u, d, p, _, f, m, g, v, y, b, S;
if (this._data = [], (t = this._study.graphics().shapemarks) && (e = this._study.priceScale(),
i = this._model.timeScale(), e && !e.isEmpty() && i && !i.isEmpty()))
for (o = this._study.graphics().indexes, n = this._model.timeScale().visibleBars(), r = n
.firstBar(), a = n.lastBar(), l = 0; l < t.length; l++)
if (c = t[l], c.data && (h = this._study.properties().graphics.shapemarks[c.styleId], h
.visible.value()))
for (u = c.data, d = 0; d < u.length; d++)
if (p = u[d], !((_ = o[p.time]) < r || _ > a) && (f = {}, null != p.time &&
null !== this._study.series().bars().valueAt(_))) {
switch (f.color = T.generateColor(h.color.value(), h.transparency.value()),
m = 0, "left" === h.halign.value() ? m -= i.barSpacing() / 2 + 1 :
"right" === h.halign.value() && (m += i.barSpacing() / 2 + 1), f.size =
h.size.value(), f.shape = h.shape.value(), g = Math.round(i
.indexToCoordinate(_)) + m, v = p.price, e.isPercent() && (y = this
._study.firstValue(), v = e.priceRange().convertToPercent(v, y)),
b = e.priceToCoordinate(v), S = h.location.value()) {
case CanvasEx.MARKLOC_ABSOLUTE:
f.direction = "";
break;
case CanvasEx.MARKLOC_ABSOLUTEDOWN:
f.direction = "down";
break;
case CanvasEx.MARKLOC_ABSOLUTEUP:
f.direction = "up";
break;
case CanvasEx.MARKLOC_ABOVEBAR:
b = this._locationToY(S, _, Math.floor(2 * f.size / i
.barSpacing()) + 1), f.direction = "up";
break;
case CanvasEx.MARKLOC_BELOWBAR:
b = this._locationToY(S, _, Math.floor(2 * f.size / i
.barSpacing()) + 1), f.direction = "down";
break;
default:
x.logWarn("Bad location value: " + S), b = this._locationToY(
CanvasEx.MARKLOC_ABSOLUTEUP, _), f.direction = "up"
}
f.point = new s(g, b), this._data.push(f), this._textCache.push({})
}
}, o.prototype.draw = function(t) {}, o.prototype.drawBackground = function(t) {
var e = this._data;
w(t, e.x1, e.y1, e.x2 - e.x1, e.y2 - e.y1, T.generateColor(this._data.color, this._data
.transparency))
}, o.prototype.hitTest = function(t) {
return null
}, v.StudyPaneView_backgrounds = function(t, e) {
this._study = t, this._model = e, this._data = []
}, v.StudyPaneView_backgrounds.prototype.update = function() {
this._invalidated = !0
}, v.StudyPaneView_backgrounds.prototype.renderer = function() {
var t, e;
for (this._invalidated && (this._updateViewInternal(), this._invalidated = !1), t = new S, e =
0; e < this._data.length; e++) t.append(new o(this._data[e]));
return t
}, v.StudyPaneView_backgrounds.prototype._hideExtendedHours = function(t) {
return ("inSession" === t || "outOfSession" === t) && !this._study._series.properties()
.extendedHours.value()
}, v.StudyPaneView_backgrounds.prototype._updateViewInternal = function() {
var t, e, i, o, n, r, s, a, l, c, h, u, d, p, _, f, m, g, v, y, b;
if (this._data = [], (t = this._study.graphics().backgrounds) && (e = this._model.timeScale(), (
i = this._study.priceScale()) && !i.isEmpty() && e && !e.isEmpty()))
for (o = this._study.graphics().indexes, n = this._model.timeScale().visibleBars(), r = n
.firstBar(), s = n.lastBar(), a = 0; a < t.length; a++)
if (l = t[a], c = l.styleId, h = l.data, u = this._study.properties().graphics
.backgrounds[c], !this._hideExtendedHours(c) && u.visible.value())
for (_ = 0; _ < h.length; _++) f = h[_], m = {}, g = o[f.start], (v = o[f.stop]) <
r || g > s || null != f.start && null != f.stop && (y = Math.ceil(e
.indexToCoordinate(g, !0) - .5 * e.barSpacing()), b = Math.ceil(e
.indexToCoordinate(v, !0) + .5 * e.barSpacing()), p === g - 1 && (y =
d), d = b, p = v, y < 0 && b < 0 || y > e.width() && b > e.width() || (m
.x1 = y, m.x2 = b, m.y1 = 0, m.y2 = i.height(), m.color = u.color
.value(), m.transparency = u.transparency.value(), this._data.push(m)))
}, v.StudyPaneView_polygons = function(t, e) {
this._study = t, this._model = e, this._data = []
}, v.StudyPaneView_polygons.prototype.update = function() {
this._invalidated = !0
}, v.StudyPaneView_polygons.prototype.renderer = function() {
var t, e, i;
for (this._invalidated && (this._updateViewInternal(), this._invalidated = !1), t = new S, e =
0; e < this._data.length; e++) i = new g(new b(b.REGULAR)), i.setData(this._data[e]), t
.append(i);
return t
}, v.StudyPaneView_polygons.prototype._updateViewInternal = function() {
var t, e, i, o, n, r, a, l, c, h, u, d, p, _, f, m, g, v, y, b, S, w, T;
if (this._data = [], (t = this._study.graphics().polygons) && (e = this._study.priceScale(), i =
this._study._model.timeScale(), e && !e.isEmpty() && i && !i.isEmpty()))
for (o = this._study.graphics().indexes, n = this._model.timeScale().visibleBars(), r = n
.firstBar(), a = n.lastBar(), l = 0; l < t.length; l++)
if (c = t[l], c.data && (h = this._study.properties().graphics.polygons[c.styleId],
100 !== h.transparency.value()))
for (u = 0; u < c.data.length; u++) {
for (d = c.data[u], p = 1 / 0, _ = -1 / 0, f = 0; d.points && f < d.points
.length; f++) m = o[d.points[f].index] + (d.points[f].offset || 0), p = Math
.min(p, m), _ = Math.max(_, m);
if (!(_ < r || p > a)) {
for (g = {}, g.points = [], f = 0; d.points && f < d.points.length; f++) v =
d.points[f], y = i.indexToCoordinate(o[v.index] + (v.offset || 0)), b =
v.level, e.isPercent() && (S = this._study.firstValue(), b = e
.priceRange().convertToPercent(b, S)), w = e.priceToCoordinate(b),
T = new s(y, w), T.data = f, g.points.push(T);
g.color = h.color.value(), g.backcolor = h.color.value(),
g.linewidth = void 0 !== h.showBorder && h.showBorder.value() ? 1 : 0, g
.linestyle = CanvasEx.LINESTYLE_SOLID, g.filled = !0, g
.fillBackground = !0, g.transparency = h.transparency.value(), g
.mouseTouchable = h.mouseTouchable.value(), this._data.push(g)
}
}
}, v.StudyPaneView_trendchannels = function(t, e) {
this._study = t, this._model = e, this._data = []
}, v.StudyPaneView_trendchannels.prototype.update = function() {
this._invalidated = !0
}, v.StudyPaneView_trendchannels.prototype.renderer = function() {
var t, e, i;
for (this._invalidated && (this._updateViewInternal(), this._invalidated = !1), t = new S, e =
0; e < this._data.length; e++) i = new g(new b(b.REGULAR)), i.setData(this._data[e]), t
.append(i);
return t
}, v.StudyPaneView_trendchannels.prototype._convertToYCoord = function(t) {
var e = this._study.priceScale(),
i = this._study.firstValue();
return e.isPercent() && (t = e.priceRange().convertToPercent(t, i)), e.priceToCoordinate(t)
}, v.StudyPaneView_trendchannels.prototype._updateViewInternal = function() {
var t, e, i, o, n, r, l, c, h, d, p, _, f, m, g, v, y, b, S, w, T, C, x, P, L, I, k, A, M, E;
if (this._data = [], (t = this._study.graphics().trendchannels) && (e = this._study
.priceScale(), i = this._study._model.timeScale(), e && !e.isEmpty() && i && !i
.isEmpty()))
for (o = function(t, e, i, o, n, r) {
var l, c, h, d;
return a(t, e) ? [t, e] : (l = new s(0, 0), c = new s(i, o), n && (h = t.subtract(
e), d = u(t, t.add(h), l, c), d ? t = d : e.x = i), r && (h = e
.subtract(t), d = u(e, e.add(h), l, c), d ? e = d : e.x = i), [t, e])
}, n = this._study.graphics().indexes, r = this._model.timeScale().visibleBars(), l = r
.firstBar(), c = r.lastBar(), h = 0; h < t.length; h++)
if (d = t[h], d.data)
for (p = this._study.properties().graphics.trendchannels[d.styleId], _ = 0; _ < d
.data.length; _++) f = d.data[_], m = n[f.startIndex], g = n[f.endIndex], Math
.max(m, g) < l && !f.extendRight || Math.min(m, g) > c && !f.extendLeft || (v =
this._convertToYCoord(f.startHighPrice), y = this._convertToYCoord(f
.startLowPrice), b = this._convertToYCoord(f.endHighPrice), S = v - y,
w = b - S, T = i.indexToCoordinate(m), C = i.indexToCoordinate(g), x =
new s(T, v), P = new s(T, y), L = new s(C, b), I = new s(C, w), k = o(x, L,
i.width(), e.height(), f.extendLeft, f.extendRight), A = o(P, I, i
.width(), e.height(), f.extendLeft, f.extendRight), x = k[0], L = k[1],
P = A[0], I = A[1], M = {}, M.points = [x, P, I, L], M.color = p.color
.value(), M.backcolor = p.color.value(), M.linewidth = void 0 !== p
.borderWidth ? p.borderWidth.value() : 0, M.linestyle = CanvasEx
.LINESTYLE_SOLID, M.filled = !0, M.fillBackground = !0, f.transparency ? (
E = f.transparency + p.transparency.value(), M.transparency = Math.min(
E, 100)) : M.transparency = p.transparency.value(), M
.mouseTouchable = !0, this._data.push(M))
}, v.StudyPaneView_hhists = function(t, e) {
this._study = t, this._model = e, this._rendererData = {
histsByLineWidth: {},
histsBySession: {}
}, this._textData = [], this._textRendererCache = {}, this._horizHistogramRenderer = new f(
this._rendererData)
}, v.StudyPaneView_hhists.prototype.update = function() {
this._invalidated = !0
}, v.StudyPaneView_hhists.prototype.renderer = function() {
var t, e;
for (this._invalidated && (this._updateViewInternal(), this._invalidated = !1), t = new S, t
.append(this._horizHistogramRenderer), e = 0; e < this._textData.length; e++) t.append(
new d(this._textData[e], new b(b.REGULAR)));
return t
},
v.StudyPaneView_hhists.prototype._resetRenderersData = function() {
this._rendererData.histsByLineWidth = {}, this._rendererData.histsBySession = {}, this
._textData = [], this._maxHistWidth = null
}, v.StudyPaneView_hhists.prototype._updateColors = function() {
var t = this._study.properties().graphics.hhists.histBars,
e = this._study.properties().graphics.hhists.vaBars,
i = T.generateColor(t.colors[0].value(), t.transparencies[0].value()),
o = T.generateColor(t.colors[1].value(), t.transparencies[1].value()),
n = e ? T.generateColor(e.colors[0].value(), e.transparencies[0].value()) :
"rgba(255, 0, 0, 1)",
r = e && e.colors[1] ? T.generateColor(e.colors[1].value(), e.transparencies[1].value()) :
n;
this._colors = {
histBars: [i, o],
vaBars: [T.blendColors(i, n), T.blendColors(o, r)]
}
}, v.StudyPaneView_hhists.prototype._updateViewInternal = function() {
var t, e, i, o, n, r, s, a, l, c, h, u, d, p, _, f, m, g, v;
if (this._resetRenderersData(), t = this._study.priceScale(), e = this._model.timeScale(), t &&
!t.isEmpty() && e && !e.isEmpty() && (i = this._study.graphics().hhists) && (o = this._study
.graphics().indexes, n = this._model.timeScale().visibleBars(), r = n.firstBar(), s = n
.lastBar(), a = i[0], l = this._study.properties().graphics.hhists[a.styleId], l.visible
.value())) {
this._updateColors(), c = a.shortDataObj, h = a.dataObj, u = c || h;
for (d in u) {
for (p = u[d], _ = 1 / 0, f = -1 / 0, m = p.length; m--;) g = p[m], _ = Math.min(_, o[g
.firstBarTime]), f = Math.max(f, o[g.lastBarTime]);
f < r || _ > s || (v = this._findMaxRate(p), this._updateDataForRenderers(p, l, t, e, o,
v, d))
}
}
}, v.StudyPaneView_hhists.prototype._updateDataForRenderers = function(t, e, i, o, r, a, l) {
var c, h, u, d, p, _, f, m, g, v, y, b, S, w, T, x, P, L, I, k, A, M, E = null,
D = null,
V = {},
O = {},
R = {},
B = {},
z = i.height(),
F = i.isPercent(),
N = e.percentWidth.value(),
W = e.showValues.value(),
$ = e.location.value(),
H = e.direction.value(),
U = $ === CanvasEx.HHISTLOC_ABSOLUTE,
j = $ === CanvasEx.HHISTLOC_RELATIVE,
q = H === CanvasEx.HHISTDIR_LEFTTORIGHT,
G = H === CanvasEx.HHISTDIR_RIGHTTOLEFT,
Y = this._rendererData.histsByLineWidth,
K = this._rendererData.histsBySession,
Z = {};
for (K[l] = Z, _ = 0; _ < t.length; _++) {
if (f = t[_], null == E && (E = this._findActualRateLength(f.rate)), null == this
._maxHistWidth && (m = Math.abs(o.indexToCoordinate(r[f.firstBarTime]) - o
.indexToCoordinate(r[f.lastBarTime])), this._maxHistWidth = Math.max(N * m /
100 - E, 0)), U && q) d = o.indexToCoordinate(r[f.firstBarTime]), u = 1, p = "left";
else if (U && G) d = o.indexToCoordinate(r[f.lastBarTime]), u = -1, p = "right";
else if (j && q) d = 0, u = 1, p = "left";
else {
if (!j || !G) throw Error("Unknown location/direction values: " + $ + "/" + H);
d = o.width(), u = -1, p = "right"
}
for (F ? (g = this._study.firstValue(), c = i.priceRange().convertToPercent(f.priceHigh, g),
h = i.priceRange().convertToPercent(f.priceLow, g)) : (c = f.priceHigh, h = f
.priceLow), y = 0; y < E; y++)
if (b = {}, b.y1 = i.priceToCoordinate(c) + 1, !(b.y1 < 0 || (b.y2 = i
.priceToCoordinate(h) - 1, b.y2 > z))) {
if (D || (D = .6 * (b.y2 - b.y1)), W && (void 0 === V[y] ? V[y] = f.rate[y] : V[
y] += f.rate[y]), W && y === E - 1 && D >= 7.5) {
for (S = {}, w = this._study.formatter(), S.text = "", T = 0; T < E; T++) S
.text = n(S.text, w.format(f.rate[T]), H), T !== E - 1 && (S.text = n(S
.text, "x", H));
if (S.color = e.valuesColor.value(), S.font = "arial", S.fontsize = D, S
.horzAlign = p, S.vertAlign = "middle", x = new s(d + 3 * u, b.y2 - .61 * (b
.y2 - b.y1)),
S.points = [x], S.offsetX = 0, S.offsetY = 0, this._textData.push(S), 0 ===
_ && (v = b.y2), _ === t.length - 1) {
for (P = d + 3 * u, L = v + .39 * (b.y2 - b.y1), I = {
text: "",
color: C(e.valuesColor.value(), 1.5),
font: "arial",
fontsize: D,
horzAlign: p,
vertAlign: "middle",
points: [new s(P, L)],
offsetX: 0,
offsetY: 0
}, T = 0; T < E; T++) I.text = n(I.text, w.format(V[T]), H), T !== E -
1 && (I.text = n(I.text, "x", H));
this._textData.push(I)
}
}
b.x1 = 0 === y ? d : d + u * (this._maxHistWidth * f.rate[y - 1] / a), b.x2 = b.x1 +
u * (this._maxHistWidth * f.rate[y] / a), Math.abs(b.y1 - O[y]) < 1 ? (R[y] ? R[
y].push(b.x1) : R[y] = [b.x1], B[y] ? B[y].push(b.x2) : B[y] = [b.x2]) : ((
R[y] || B[y]) && (R[y].push(b.x1), B[y].push(b.x2), b.x1 = Math.max
.apply(null, R[y]), b.x2 = Math.max.apply(null, B[y]), delete R[y],
delete B[y]), O[y] = b.y1, Math.abs(b.x2 - b.x1) < .5 || (b.x0 = d, k =
f.va ? this._colors.vaBars[y] : this._colors.histBars[y], A = Math
.round(b.y2 - b.y1), Y[A] || (Y[A] = {}), M = Y[A], M[k] ? M[k].push(
b) : M[k] = [b], Z[_] ? Z[_].x2 < b.x2 && (Z[_].x2 = b.x2) : Z[
_] = {
x1: d,
x2: b.x2,
y1: b.y1,
y2: b.y2
}))
}
}
}, v.StudyPaneView_hhists.prototype._findMaxRate = function(t) {
var e, i, o = 0,
n = 0;
for (e = 0; e < t.length; e++) {
for (n = 0, i = 0; i < t[e].rate.length; i++) n += t[e].rate[i];
o = Math.max(o, n)
}
return o
}, v.StudyPaneView_hhists.prototype._findActualRateLength = function(t) {
var e, i, o = 0;
for (e = 0; e < t.length && (null !== (i = t[e]) && void 0 !== i); ++e) o++;
return o
}, t.exports = v
},
function(t, e, i) {
"use strict";
function o(t, e) {
return t.y1 - 1 > e ? 1 : t.y2 + 1 < e ? -1 : 0
}
var n, r, s;
Object.defineProperty(e, "__esModule", {
value: !0
}), n = i(86), r = i(11), s = function() {
function t(t) {
this._data = null, this._data = t
}
return t.prototype.hitTest = function(t) {
var e, i, s, a, l, c, h, u, d, p = this._data;
if (null === p) return null;
if (e = Object.keys(p.histsBySession), 0 === e.length) return null;
for (i = e.length - 1; i >= 0; i--) {
s = p.histsBySession[parseInt(e[i], 10)], a = [];
for (l in s) s.hasOwnProperty(l) && a.push(s[l]);
if (-1 !== (c = n.bSearch(a, t.y, o)) && (h = a[c], u = Math.min(h.x1, h.x2), d =
Math.max(h.x1, h.x2), t.x >= u && t.x <= d)) return new r(r.REGULAR)
}
return null
}, t.prototype.draw = function(t) {
var e, i, o, n, r, s, a, l, c, h, u = this._data;
if (null !== u) {
t.save();
for (e in u.histsByLineWidth)
if (u.histsByLineWidth.hasOwnProperty(e)) {
i = parseInt(e, 10), o = u.histsByLineWidth[e], n = i % 2 == 0 ? .5 : 0, r =
Math.round(i / 2);
for (s in o)
if (o.hasOwnProperty(s)) {
for (t.strokeStyle = s, t.lineWidth = i * (window
.hidpiCanvasRatio || 1), t.beginPath(), a = o[s], l = 0, c =
a; l < c.length; l++) h = c[l], t.moveTo(h.x1 + n, h.y1 + r +
n), t.lineTo(h.x2 + n, h.y1 + r + n);
t.stroke()
}
} t.restore()
}
}, t
}(), e.HorizHistogramRenderer = s
},
function(t, e, i) {
"use strict";
var o, n, r, s, a;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(9), r = i(67), s = i(15), a = function(t) {
function e(e, i) {
var o = t.call(this) || this;
return o._source = e, o._data = i, o
}
return o.__extends(e, t), e.prototype._updateRendererData = function(t) {
var e, i, o, r, a, l;
if (t.visible = !1, e = this._source.priceScale(), i = this._source.properties().visible
.value(), e && !e.isEmpty() && i && (o = this._source.properties().graphics[this
._data.lineType][this._data.styleId], o.visible && o.visible.value() && o
.showPrice && o.showPrice.value())) {
if (r = this._data.line.level, e.isPercent()) {
if (a = this._source.firstValue(), !s.isNumber(a)) return;
r = n.ensureNotNull(e.priceRange()).convertToPercent(r, a)
}
l = o.color.value(), t.background = l, t.color = this.generateTextColor(l), t
.coordinate = e.priceToCoordinate(r), t.text = e.formatter().format(r), t
.visible = !0
}
}, e
}(r.PriceAxisView), e.HLinesPriceAxisView = a
},
function(t, e, i) {
"use strict";
function o() {}
var n = i(54),
r = n.min,
s = n.max;
o.prototype._locationToY = function(t, e, i) {
var o, n, a, l, c, h, u;
switch (i || (i = 0), o = [], n = this._study.priceScale(), t) {
case CanvasEx.MARKLOC_ABOVEBAR:
a = TradingView.HIGH_PLOT;
break;
case CanvasEx.MARKLOC_BELOWBAR:
a = TradingView.LOW_PLOT
}
for (l = this._study.firstValue(), i >= 1 && (i -= 1), c = -i; c <= i; c++) null !== (h = this
._study.series().bars().valueAt(e + c)) && (u = h[a], n.isPercent() && (u = n
.priceRange().convertToPercent(u, l)), o.push(n.priceToCoordinate(u)));
switch (t) {
case CanvasEx.MARKLOC_ABOVEBAR:
return r(o) - 15;
case CanvasEx.MARKLOC_BELOWBAR:
return s(o) + 15
}
}, t.exports = o
},
function(t, e, i) {
"use strict";
(function(e) {
function o(t, e, i) {
this._model = e, this._paneWidget = t, this._chart = t._chart, this._mainDiv = i, this.$el =
$(document.createElement("div")).addClass("pane-legend"), this._itemsBinding = [], this
._chart.properties().paneProperties.legendProperties.showStudyTitles.listeners()
.subscribe(this, this.updateLayout), this._chart.properties().paneProperties
.legendProperties.showSeriesTitle.listeners().subscribe(this, this.updateLayout), this
._chart.properties().paneProperties.legendProperties.showSeriesOHLC.listeners()
.subscribe(this, this.updateLayout), this._chart.properties().paneProperties
.legendProperties.showStudyValues.listeners().subscribe(this, this.updateLayout);
var o = this._chart.properties().scalesProperties.textColor;
o.listeners().subscribe(this, function(t) {
this.$el.css("color", t.value())
}), this.$el.css("color", o.value()), this.updateLayout()
}
var n = (i(35).Study, i(40).trackEvent),
r = (i(7).getLogger("Chart.LegendWidget"), i(30)),
s = i(136).showEditObjectDialog,
a = i(107).setMouseEventHandler;
o.prototype.destroy = function() {}, o.prototype.contextMenuEvent = function(t, i) {
if (!this._model.chartModel().readOnly() && e.enabled("legend_context_menu")) {
var o = i.source;
this._paneWidget.showContextMenuForSource(o, t)
}
}, o.prototype.updateLayout = function() {
var t, o, n, r, s, l, c, h, u, d, p;
if (this._itemsBinding.length = 0, this.$el.find(".apply-common-tooltip").trigger(
"mouseleave"), this.$el.empty(), (t = this._paneWidget.state()) && this
._model) {
for (o = {
showStudyTitles: this._model.model().properties().paneProperties
.legendProperties.showStudyTitles.value(),
showSeriesTitle: this._chart.properties().paneProperties.legendProperties
.showSeriesTitle.value(),
showSeriesOHLC: this._chart.properties().paneProperties.legendProperties
.showSeriesOHLC.value(),
showStudyValues: this._chart.properties().paneProperties.legendProperties
.showStudyValues.value(),
showLegend: this._model.model().properties().paneProperties.legendProperties
.showLegend.value()
}, n = this._model.mainSeries(), r = t.orderedSources().slice(), s = r.indexOf(
n), s > -1 && (r.splice(s, 1), r.push(n)), l = r.length - 1; l >= 0; l--)
c = r[l],
(h = c.statusView()) && (!(u = c === n) || o.showSeriesTitle || o
.showSeriesOHLC || o.showStudyTitles || o.showStudyValues) && (u && e
.enabled("fundamental_widget") || (o.showLegend || !u ? (u || o
.showStudyTitles || o.showStudyValues) && o.showLegend && (d = $(
"<div>").addClass("pane-legend-line pane-legend-wrap").appendTo(
this.$el), d.source = c, u ? (p = $(
'<a class="pane-legend-minbtn apply-common-tooltip apply" title="' +
$.t("Hide") + '"></a>').append($(i(924)).attr({
class: "expand"
})), d.addClass("main").append(p.on("click touchend", this
.toggleTitles.bind(this)))) : d.addClass("study"), c
.properties().visible.value() || d.addClass("disabled"), this
._generateItemsForRow(d, h, o), a(d, this, !0)) : this.$el.find(
".expand-line").length || (d = $("<div>").addClass(
"pane-legend-line pane-legend-wrap main expand-line").appendTo(
this.$el), p = $(
'<a class="pane-legend-minbtn apply-common-tooltip apply" title="' +
$.t("Show") + '"></a>').append($(i(923)).attr({
class: "expand closed"
})), d.append(p.on("click touchend", this.toggleTitles.bind(this))),
d.source = c, o = {
showStudyTitles: !1,
showSeriesTitle: !1,
showSeriesOHLC: o.showSeriesOHLC,
showStudyValues: !1
}, this._generateItemsForRow(d, h, o), a(d, this, !0), this.update()
)));
this.update()
}
}, o.prototype._generateItemsForRow = function(t, o, n) {
var r, s, a, l, c, h, u, d, p, _, f, m = t.source,
g = this,
v = m === this._model.mainSeries();
// console.log(m.properties())
if ((v && n.showSeriesTitle || !v && n.showStudyTitles) && (r = $("<span>"), r.addClass(
"pane-legend-line apply-overflow-tooltip"), e.enabled(
"legend_context_menu") && !this._chart.readOnly() || r.addClass(
"no-context-menu"), v && r.addClass("main"), m.properties().visible
.value() || r.addClass("disabled"), r.css({
"font-weight": o.bold() ? "bold" : "normal",
"font-size": o.size()
}), r.click(function(e) {
g.contextMenuEvent(e, t)
}),
r.appendTo(t),
this._itemsBinding.push({
value: o,
cell: r,
source: t.source
}), !this._chart.readOnly() && m.userEditEnabled() && e.enabled(
"edit_buttons_in_legend") && (s = $(
'<span class="pane-legend-icon-container">').appendTo(t), e.enabled(
"show_hide_button_in_legend") && $(
'<a class="pane-legend-icon apply-common-tooltip icon-hide" title="' + $
.t("Show/Hide") + '">').append($(i(925)).attr({
width: 14,
height: 14
})).appendTo(s).on("click touchend", this._generateItemsForRow
._onShowhideClick.bind(this, m)), e.enabled("property_pages") && (!v ||
e.enabled("show_chart_property_page") && !this._chart.onWidget()) && e
.enabled("format_button_in_legend") && $(
'<a class="pane-legend-icon apply-common-tooltip format" title="' + $.t(
"Format") + '">').append($(i(926)).attr({
width: 14,
height: 14
})).appendTo(s).on("click touchend", this._generateItemsForRow
._onFormatClick.bind(this, m)), !v && e.enabled(
"delete_button_in_legend") && $(
'<a class="pane-legend-icon apply-common-tooltip delete" title="' + $.t(
"Delete") + '">').append($(i(352)).attr({
width: 14,
height: 14
})).appendTo(s).on("click touchend", this._generateItemsForRow
._onDeleteClick.bind(this, m)))), a = m.dataWindowView(), this
.isDataWindowValuesVisible(a) && (v && n.showSeriesOHLC || !v && n.showStudyValues)
) {
for (l = [], c = [], h = $('<div class="pane-legend-item-value-container">'), e
.enabled("legend_context_menu") || h.addClass("no-context-menu"),
u = 0; u < a.items().length; u++) d = $(
"<span class='pane-legend-item-value-wrap'>").appendTo(h), p = v ? $(
"<span class='pane-legend-item-value-title pane-legend-line'>").appendTo(
d) : null, _ = $("<span class='pane-legend-item-value pane-legend-line'>")
.appendTo(d), v && (p.addClass("pane-legend-item-value-title__main"), _
.addClass("pane-legend-item-value__main")), m.properties().visible
.value() || (_.addClass("disabled"), p && p.addClass("disabled")), l.push(_),
p && c
.push(p);
f = $("<span class='pane-legend-item-additional pane-legend-line'>").appendTo(h
.appendTo(t)), this._itemsBinding.push({
value: a,
cell: l,
titleCells: c.length ? c : null,
source: m,
additional: f
})
}
}, o.prototype.isDataWindowValuesVisible = function(t) {
return this._chart.onWidget() ? !!t && !this._chart.isSmall() : !!t
}, o.prototype._generateItemsForRow._onShowhideClick = function(t) {
this._model.setProperty(t.properties().visible, !t.properties().visible.value(),
"Show/Hide " + t.title())
}, o.prototype._generateItemsForRow._onFormatClick = function(t, e) {
t.userEditEnabled() && (TVSettings.setValue("properties_dialog.active_tab.chart", $.t(
"Style")), s(t, this._model))
}, o.prototype._generateItemsForRow._onDeleteClick = function(t) {
t.isUserDeletable() && (t.hasChildren() ? showDeleteStudyTreeConfirm(this._model
.removeSource.bind(this._model, t)).open() : this._model.removeSource(t))
}, o.prototype._generateItemsForRow._onAddChildSourceClick = function(t) {
var e, i, o = this._chart.showIndicators(t);
o && (e = function() {
n("SOS", "Apply SOS", "Apply by Plus SOS")
}, i = this._model.model().studyInserted(), i.subscribe(this, e), o
.visibilityChanged.subscribe(this, function(t) {
t || i.unsubscribe(this, e)
}, !0))
}, o.prototype._generateItemsForRow._onViewSorceClick = function(t) {
var e = t.metaInfo();
this._getPineSourceCode(e).done(function(t) {
TradingView.bottomWidgetBar && TradingView.bottomWidgetBar
.activateScriptEditorTab(t)
})
}, o.prototype._getPineSourceCode = function(t) {
return $.Deferred()
}, o.prototype.setItemEnabled = function(t, e) {
var i = !t.hasClass("disabled"),
o = t.closest(".pane-legend-wrap");
e && !i ? (t.removeClass("disabled"), o.removeClass("disabled")) : !e && i && (t
.addClass("disabled"), o.addClass("disabled"))
}, o.prototype.valueChanged = function(t, e, i) {
return t[e] !== i && (t[e] = i, !0)
}, o.prototype.firstTitle = function() {
return this.$el.find(".pane-legend-line.pane-legend-wrap:first-child")
}, o.prototype.updateTitle = function() {
var t, i, o, n, r, s, a, l, c, h;
for (o = this._itemsBinding.length; o--;) i = this._itemsBinding[o], Array.isArray(i
.cell) || (i.last || (i.last = {}), n = i.last, r = i.source, t = r.properties()
.visible.value(), this.valueChanged(n, "sourceVisible", t) && this
.setItemEnabled(i.cell, t), s = i.value.color(), a = r !== this._model
.mainSeries() && r === this._model.selectedSource() ? "bold" : "normal", l = i
.value.text(), e.enabled("fundamental_widget") && (c = this._model.mainSeries(),
h = c.symbolInfo(), l = (h ? h.name : c.actualSymbol()) + " " + l), (this
.valueChanged(n, "color", s) || this.valueChanged(n, "fontWeight", a) ||
this.valueChanged(n, "text", l)) && i.cell.text(TradingView.clean(l, !0))
.css({
color: s,
"border-color": s,
"font-weight": a
}));
this._chart.resizeIndicator()
}, o.prototype.update = function(t) {
var e, i, o, n, s, a, l, c, h, u;
for (this.updateTitle(), c = this._itemsBinding.length; c--;)
if (n = this._itemsBinding[c], e = n.cell, i = n.titleCells, o = n.source
.properties().visible.value(), Array.isArray(e)) {
for (n.last || (n.last = {}, n.last.dwView || (n.last.dwView = {})), h = n.last,
s = n.value.items(), u = this.valueChanged(h, "sourceVisible", o), a =
0; a < e.length; a++) l = s[a], h[a] || (h[a] = {}), u && this
.setItemEnabled(e[a], o), this.valueChanged(h[a], "text", l.text()) && (e[a]
[0].textContent = l.text()), l.color() && this.valueChanged(h[a],
"color", l.color()) && e[a].css("color", r.resetTransparency(l
.color())), i && (this.valueChanged(h, "sourceVisible", o) && this
.setItemEnabled(i[a], o), this.valueChanged(h[a], "title", l.title()) &&
(i[a][0].textContent = l.title()));
n.additional && n.value.additional && this.valueChanged(h, "additional", n.value
.additional()) && n.additional.text(n.value.additional() || "")
} this._chart.resizeIndicator()
}, o.prototype.dataSourceAtPoint = function(t, e) {
return null
}, o.prototype.renderTo = function(t, e, i) {
var o, n, r, s, a, l, c;
for (t.save(), t.fillStyle = this._chart.properties().scalesProperties.textColor
.value(), t.textBaseline = "middle", o = 0, n = 0; n < this._itemsBinding.length; ++
n)
r = this._itemsBinding[n], s = r.value, a = r.source === this._model.mainSeries(),
l = a ? 12 : 8, c = a ? 25 : 17, Array.isArray(r.cell) || (t.font = s.size() +
" Verdana, Arial", t.fillText(s.text(), e, i + o + l), o += c);
t.restore()
}, o.prototype.toggleTitles = function(t) {
this._model.model().properties().paneProperties.legendProperties.showLegend.setValue(!
this._chart.properties().paneProperties.legendProperties.showLegend.value());
for (var e = this._chart._paneWidgets.length - 1; e >= 0; e--) this._chart._paneWidgets[
e].legendWidget.updateLayout()
}, t.exports = o
}).call(e, i(5))
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 13 13" width="13" height="13"><path d="M1 0v1h11V0H1zm11 1v11h1V1h-1zm0 11H1v1h11v-1zM1 12V1H0v11h1zM6 2v4H2v1h4v4h1V7h4V6H7V2H6z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 13 13" width="13" height="13"><path d="M1 0v1h11V0H1zm11 1v11h1V1h-1zm0 11H1v1h11v-1zM1 12V1H0v11h1zm1-6v1h9V6H2z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 14 14" width="14" height="14"><path d="M0 0v14h14V0zm7 2.69c3.018 0 5.172 3.232 5.172 4.31 0 1.077-2.154 4.31-5.172 4.31S1.828 8.08 1.828 7c0-1.077 2.154-4.31 5.172-4.31zm0 1.508C5.49 4.198 4.198 5.49 4.198 7S5.49 9.802 7 9.802 9.802 8.51 9.802 7 8.51 4.198 7 4.198zm0 1.68c.646 0 1.12.476 1.12 1.122 0 .646-.473 1.12-1.12 1.12-.646 0-1.12-.473-1.12-1.12 0-.646.473-1.12 1.12-1.12z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="-2.4 120.9 14 14" width="14" height="14" enable-background="new -2.4 120.9 600 600"><path d="M-2.4 120.9v14h14v-14zm6.086 1.803H5.52v1.332c.416.1.805.258 1.166.48l.944-.935 1.297 1.297-.943.943c.215.35.38.748.48 1.164H9.8v1.837H8.463c-.1.417-.257.806-.48 1.167l.935.944-1.296 1.298-.944-.943c-.35.215-.747.38-1.164.48v1.332H3.677v-1.33c-.415-.102-.804-.258-1.165-.482l-.943.936-1.298-1.296.94-.945c-.216-.35-.38-.748-.482-1.165H-.597v-1.835H.737c.1-.416.257-.805.48-1.166l-.935-.944 1.296-1.297.944.943c.35-.215.747-.38 1.164-.48zm.912 3.053c-1.188 0-2.143.963-2.143 2.143 0 1.187.963 2.143 2.143 2.143 1.18 0 2.14-.963 2.145-2.145 0-1.188-.966-2.144-2.145-2.144z"/></svg>'
},
function(t, e) {},
function(t, e, i) {
"use strict";
function o(t) {
return null == t._parentMenu ? null : n(t._parentMenu)
}
function n(t) {
return null == t._parentMenuItem ? t : o(t._parentMenuItem)
}
function r(t, e) {
this.action = t, this._parentMenu = e
}
function s(t, e) {
this.action = t, this._parentMenu = e
}
var a = i(354),
l = i(231);
r.prototype._createIconTag = function() {
var t = this._iconTagAttributes();
return this.jqIcon = l.create(a.ICON_CELL_TAG, t), this.jqIcon.addClass("context-menu"), this
.jqIcon
}, r.prototype._createDeleteButton = function() {
var t, e, i;
if (!this.action.deleteButton) return null;
t = this, e = this.action.deleteButton.action, i = l.create("span", {
class: "context-menu-delete-button"
}), e && i.click(function() {
return e.call(t), !1
}), this.jqSubmenu.addClass("delete-spacer"), this.jqSubmenu.append(i)
}, r.prototype._createTextTag = function() {
var t = this._textTagAttributes();
return this.jqText = l.create(a.TEXT_CELL_TAG, t), this.jqIcon.addClass("context-menu"), this
.jqText
}, r.prototype._createRightTag = function() {
var t = this._rightTagAttributes();
return this.jqRight = l.create(a.RIGHT_CELL_TAG, t), this.jqIcon.addClass("context-menu"), this
.jqRight
}, r.prototype._createSubmenuTag = function() {
var t = this._submenuTagAttributes();
return this.jqSubmenu = l.create(a.SUBMENU_CELL_TAG, t), this.jqIcon.addClass("context-menu"),
this.jqSubmenu
}, r.prototype._iconTagAttributes = function() {
var t = {},
e = [];
return this.action && (this.action.icon ? (e.push("icon"), e.push(this.action.icon.replace(/\./,
"_"))) : this.action.checkable ? (e.push("icon"), this.action.checked ? (e.push(
"checked-icon"), t.html = i(146)) : e.push("unchecked-icon")) : e.push("spacer")), t
.class = e.join(" "), t
}, r.prototype._textTagAttributes = function() {
return {
class: "text",
html: this.action ? this.action.text : ""
}
}, r.prototype.highlight = function(t) {
t ? (this.jqRow.addClass("context-menu-hover"), this.jqIcon.addClass("context-menu-hover")) : (
this.jqRow.removeClass("context-menu-hover"), this.jqIcon.removeClass(
"context-menu-hover")), this.action && this.action.hasSubActions() && (t ? this
.jqSubmenu.addClass("expanded") : this.jqSubmenu.removeClass("expanded"))
}, r.prototype._rightTagAttributes = function() {
var t = {},
e = ["right"];
return this.action && this.action.shortcut && (e.push("shortcut"), t.class = e.join(" "), t
.html = this.action.shortcut), t
}, r.prototype._submenuTagAttributes = function() {
var t = {};
return this.action && this.action.hasSubActions() ? t.class = "submenu-arrow" : t.class =
"context-menu spacer", t
}, r.prototype.render = function() {
this._createRow(), this.jqRow.append(this._createIconTag()), this.jqRow.append(this
._createTextTag()), this.jqRow.append(this._createRightTag()), this.jqRow.append(this
._createSubmenuTag()), this._createDeleteButton(), this.appendCallback();
var t = this;
return this.jqRow.mouseenter(function(e) {
t.showSubmenu(e), t.highlight(!0), t._parentMenu && t._parentMenu._parentMenuItem &&
t._parentMenu._parentMenuItem.highlight(!0)
}), this.jqRow.mouseleave(function() {
t.highlight(!1)
}), this.jqRow
}, r.prototype._createRow = function() {
var t, e, i = this._rowTagAttributes();
this.jqRow = l.create(a.ITEM_ROW_TAG, i), this.jqRow.addClass("context-menu"), t = this, this
.action && !this.action.hasSubActions() && (e = function(t) {
t.destroy(), t._parentMenuItem && e(t._parentMenuItem._parentMenu)
}, this.jqRow.click(function(i) {
e(t._parentMenu)
}))
}, r.prototype.showSubmenu = function(t) {
var e, o;
this._parentMenu.closeOtherSubmenus(this), this.action && !this.action.hasSubActions() || (this
._menu || (e = i(108), o = {}, this._menu = e.createMenu(this.action.subActions, o,
this)), t.pageX = this._parentMenu.jqMenu.width() - 2, t.pageY = this.jqSubmenu
.offset().top - this._parentMenu.jqMenu.offset().top - 1, this._menu.show(t, this
._parentMenu.jqMenu))
}, r.prototype._rowTagAttributes = function() {
var t = [];
return this.action && (!1 === this.action.enabled && t.push("disabled"), !1 === this.action
.visible && t.push("hidden"), this.action.font && t.push("font_" + this.action.font),
this.action.hasSubActions() && t.push("has_submenu"), this.action.htmlclass && t.push(
this.action.htmlclass)), {
class: t.join(" ")
}
}, r.prototype.appendCallback = function() {
var t = this;
this.jqRow.click(function(e) {
t.action.enabled && t.action.executeCallback(e)
})
}, r.prototype.getTopLevelMenu = function() {
return o(this)
}, s.prototype.render = function(t) {
this._createRow();
var e = this;
return this.action.deferred.then(function(o) {
var n, r, s, a = i(353);
for (n in o) r = o[n], s = e._parentMenu.addItem(r), a.renderItem(t, s)
}).always(function() {
e.jqRow.hide()
}), this.jqRow
}, s.prototype._createIconTag = function() {
var t = this._iconTagAttributes();
return this.jqIcon = l.create(a.ICON_CELL_TAG, t), this.jqIcon.addClass("context-menu"), this
.jqIcon
}, s.prototype._createRow = function() {
var t = this._rowTagAttributes();
this.jqRow = l.create(a.ITEM_ROW_TAG, t), this.jqRow.append(this._createIconTag()), this.jqRow
.addClass("context-menu")
}, s.prototype._rowTagAttributes = function() {
var t = [];
return this.action && t.push("spinner"), {
class: t.join(" ")
}
}, s.prototype.highlight = function(t) {}, s.prototype._iconTagAttributes = function() {
var t = {},
e = [];
return e.push("spacer"), t.class = e.join(" "), t.colspan = "10", t
}, e.Item = r, e.ItemPlaceholder = s
},
function(t, e, i) {
"use strict";
var o = i(231),
n = i(107).setMouseEventHandler,
r = {};
r.createLabel = function(t, e, i) {
return o.create("label", $.extend(i, {
html: e,
for: t
}))
}, r.unbindContextMenu = function(t) {
t.contextMenu(function(t) {
return !1
})
}, r.offsetX = function(t, e) {
return t.width() + e.pageX
}, r.offsetY = function(t, e) {
return t.height() + e.pageY
}, r.isElementInViewport = function(t) {
"function" == typeof jQuery && t instanceof jQuery && (t = t[0]);
var e = t.getBoundingClientRect();
return e.top >= 0 && e.left >= 0 && e.bottom <= (window.innerHeight || document.documentElement
.clientHeight) && e.right <= (window.innerWidth || document.documentElement.clientWidth)
}, r.isVisible = function(t, e, i) {
var o, n, r;
for ("function" == typeof jQuery && t instanceof jQuery && (t = t[0]), o = .01, e || (e = 1),
i || (i = 1), n = t.getBoundingClientRect(), r = []; t.parentElement;) r.push(t
.parentElement.getBoundingClientRect()), t = t.parentElement;
return r.every(function(t) {
var r = Math.min(n.right, t.right) - Math.max(n.left, t.left),
s = Math.min(n.bottom, t.bottom) - Math.max(n.top, t.top),
a = r / n.width * 100,
l = s / n.height * 100;
return a + o > e && l + o > i
})
}, r.checkObjIsOutOfWindowX = function(t, e) {
var i, o = $(window).width() - r.offsetX(t, e);
return o < 0 ? (i = e.pageX + o, i > 0 ? i : 0) : e.pageX
}, r.checkObjIsOutOfWindowY = function(t, e) {
var i, o = $(window).height() - r.offsetY(t, e);
return o < 0 ? (i = e.pageY + o, i > 0 ? i : 0) : e.pageY
}, r.checkObjIsOutOfWindow = function(t, e) {
return {
left: r.checkObjIsOutOfWindowX(t, e),
top: r.checkObjIsOutOfWindowY(t, e)
}
}, r.setAttr = function(t, e, i) {
return t.attr ? t.attr(e, i) : t[e] = i, t
}, r.removeAttr = function(t, e) {
return t.removeAttr ? t.removeAttr(e) : t.removeAttribute(e), t
}, r.notNull = function(t) {
return -1 === $.inArray(t, [null, void 0, "false", "null", "undefined", 0])
}, r.hideControl = function(t) {
return t.css({
position: "absolute",
top: -1e3,
left: -1e3
})
}, r.createPopup = function(t, e, i) {
return new r.Popup(t, e, i).render()
}, r.Popup = function(t, e, i) {
if (void 0 !== t.selector ? this.jqDiv = t : t.nodeType ? this.jqDiv = $(t) : this.jqDiv = o
.create("div", t), i) {
var r = this;
$.each(i, function(t, e) {
r[t] = e
})
}
n(this.jqDiv, this), this._callback = e
}, r.Popup.prototype.render = function() {
return this.jqDiv
}, r.Popup.prototype.show = function() {
this.jqDiv.show()
}, r.Popup.prototype.hide = function() {
this.jqDiv.hide()
}, r.Popup.prototype.setVisible = function(t) {
t ? this.show() : this.hide()
}, r.Popup.prototype.isVisible = function() {
return this.jqDiv.is(":visible")
}, r.Popup.prototype.contextMenuEvent = function(t) {
return !1
}, r.Popup.prototype.mouseDownOutsideEvent = function(t) {
if (this.isVisible()) {
if (this._callback && !this._callback()) return;
this.hide()
}
}, t.exports = r
},
function(t, e, i) {
"use strict";
(function(e) {
function o(t, e, i, o) {
this.reset(t, e, i, o)
}
var n = i(156).makeFont,
r = i(155),
s = e.enabled("charting_library_debug_mode");
o.prototype.maxCount = 200, o.prototype.reset = function(t, e, i, o) {
this._textWidthCache = new r(this.maxCount), this._fontSize = t, this._color = o, this
._font = n(t, e, i), this._keys = [], this._hash = {}
}, o.prototype.paintTo = function(t, e, i, o, n) {
var r = this.getLabelImage(t, e);
"left" !== n && (i -= r.textWidth), o -= Math.floor(r.height / 2), t.drawImage(r.canvas,
i, o)
}, o.prototype.getLabelImage = function(t, e) {
var i, o, n, r, a;
return Object.prototype.hasOwnProperty.call(this._hash, e) ? i = this._hash[e] : (this
._keys.length >= this.maxCount && (o = this._keys.shift(), delete this._hash[
o]), i = {
text: e,
textWidth: 0,
width: 0,
height: 0,
canvas: document.createElement("canvas")
}, n = Math.ceil(this._fontSize / 4.5), r = Math.round(this._fontSize / 10), a =
Math.ceil(this._textWidthCache.measureText(t, e)), i.textWidth = Math.round(Math
.max(1, a)),
i.width = Math.round(a + 2 * n), i.height = this._fontSize + 2 * n, 0 !== a ? (
this._keys.push(i.text), this._hash[i.text] = i) : s && console.log(
'Canvas 2d context measureText return zero width for "' + e + '" text'), i
.canvas.width = i.width, i.canvas.height = i.height, t = i.canvas.getContext(
"2d"), t.font = this._font, t.fillStyle = this._color, t.fillText(e, 0, i
.height - n - r)), i
}, t.exports = o
}).call(e, i(5))
},
function(t, e, i) {
"use strict";
function o(t, e, i) {
this._model = e, this._paneWidget = t, this._chart = t._chart, this._mainDiv = i, this.jqDiv = $(
'<div class="pane-controls">'), this._initVisibility(), this.update(), this.jqDiv.appendTo(
i)
}
var n = i(248);
o.prototype.update = function() {
var t, e, o, n, r, s, a, l;
if (!this._visible || !this._chart.isActive()) return void this.jqDiv[0].classList.add(
"pane-controls--hidden");
if (this.jqDiv[0].classList.remove("pane-controls--hidden"), t = this, e = t._model, o = t
._paneWidget.state(), n = e.panes().indexOf(o), this.jqDiv.toggleClass("toppane", 0 === n ||
this._chart.isMaximizedPane()), r = !1, !o.containsMainSeries() && !this._chart
.isMaximizedPane()) {
for (s = 0, a = o.dataSources(), l = a.length; l--;)
if (a[l] instanceof TradingView.Study && ++s > 1) {
r = !0;
break
} a = null
}
n > 0 && !this._chart.isMaximizedPane() ? (this._$upButton || (this._$upButton = $(document
.createElement("a")).addClass("pane-legend-icon up").append($(i(932)).attr({
width: 14,
height: 14
})).attr("title", $.t("Move Up")).on("click", function() {
t._model.rearrangePanes(t._chart, t._model.panes().indexOf(t._paneWidget
.state()), "up")
})), this._$upButton.appendTo(this.jqDiv)) : this._$upButton && this._$upButton.detach(),
n < this._model.panes().length - 1 && !this._chart.isMaximizedPane() ? (this._$downButton ||
(this._$downButton = $(document.createElement("a")).addClass("pane-legend-icon down")
.append($(i(933)).attr({
width: 14,
height: 14
})).attr("title", $.t("Move Down")).on("click", function() {
t._model.rearrangePanes(t._chart, t._model.panes().indexOf(t._paneWidget
.state()), "down")
})), this._$downButton.appendTo(this.jqDiv)) : this._$downButton && this
._$downButton.detach(), r ? (this._$closeButton || (this._$closeButton = $(document
.createElement("a")).addClass("pane-legend-icon delete").append($(i(352)).attr({
width: 14,
height: 14
})).attr("title", $.t("Delete")).on("click", function() {
t._model.removePane(t._chart, t._model.panes().indexOf(t._paneWidget
.state()))
})), this._$closeButton.appendTo(this.jqDiv)) : this._$closeButton && this._$closeButton
.detach(), this._model.panes().length > 1 && !this._chart.isMaximizedPane() ? (this
._$maximizeButton || (this._$maximizeButton = $(document.createElement("a")).addClass(
"pane-legend-icon maximize").append($(i(934)).attr({
width: 14,
height: 14
})).attr("title", $.t("Toggle Maximize Pane")).on("click", function() {
t._chart.toggleMaximizePane(t._paneWidget)
})), this._$maximizeButton.appendTo(this.jqDiv)) : this._$maximizeButton && this
._$maximizeButton.detach(), this._model.panes().length > 1 && this._chart
.isMaximizedPane() ? (this._$restoreButton || (this._$restoreButton = $(document
.createElement(
"a")).addClass("pane-legend-icon restore").append($(i(935)).attr({
width: 14,
height: 14
})).attr("title", $.t("Toggle Maximize Pane")).on("click", function() {
t._chart.toggleMaximizePane(t._paneWidget)
})), this._$restoreButton.appendTo(this.jqDiv)) : this._$restoreButton && this
._$restoreButton.detach()
}, o.prototype.destroy = function() {
this._visibilityProperty && (this._visibilityProperty.unsubscribe(this, this
._onVisibilityPropertyChange), this._visibilityProperty = null), this
._boundMouseHandler && (this._mainDiv[0].removeEventListener("mouseenter", this
._boundMouseHandler, !1), this._mainDiv[0].removeEventListener("mouseleave", this
._boundMouseHandler, !1), this._boundMouseHandler = null), this.jqDiv.remove()
}, o.prototype._initVisibility = function() {
this._visible = !0, this._visibilityProperty = n.actualBehavior(), this._visibilityProperty
.subscribe(this, this._onVisibilityPropertyChange), this._onVisibilityPropertyChange()
}, o.prototype._onVisibilityPropertyChange = function() {
var t = this._visibilityProperty.value();
"alwaysOn" === t || "alwaysOff" === t ? (this._visible = "alwaysOn" === t, this
._boundMouseHandler && (this._mainDiv[0].removeEventListener("mouseenter", this
._boundMouseHandler), this._mainDiv[0].removeEventListener("mouseleave", this
._boundMouseHandler), this._boundMouseHandler = null)) : (this._boundMouseHandler ||
(this._boundMouseHandler = this._visibilityMouseHandler.bind(this), this._mainDiv[0]
.addEventListener("mouseenter", this._boundMouseHandler), this._mainDiv[0]
.addEventListener("mouseleave", this._boundMouseHandler)), this._visible = !1), this
.update()
}, o.prototype._visibilityMouseHandler = function(t) {
this._visible = "mouseenter" === t.type, this.update()
}, t.exports = o
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 14 14" width="14" height="14"><path d="M0 0v14h14V0zm7 2l2.8 3H8v6H6V5H4.2z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 14 14" width="14" height="14"><path d="M14 14V0H0v14zm-7-2L4.2 9H6V3h2v6h1.8z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 14 14" width="14" height="14"><path d="M0 0v14h14V0zm7 1l2.8 3H8v2.5H6V4H4.2zM6 7.5h2V10h1.8L7 13l-2.8-3H6z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 14 14" width="14" height="14"><path d="M0 0v14h14V0H0zm6 1.5h2V4h1.8L7 7l2.8 3H8v2.5H6V10H4.2L7 7 4.2 4H6V1.5z"/></svg>'
},
function(t, e, i) {
"use strict";
function o(t, e, i) {
this.chart = t, this.paneA = t.paneWidgets()[e], this.paneB = t.paneWidgets()[i], this.jqRow = $(
document.createElement("tr")), this.jqRow.height(o.HEIGHT), this.jqCell = $(document
.createElement("td")), this.jqCell.appendTo(this.jqRow), this.jqCell.addClass(
"pane-separator"), this.jqCell.attr("colspan", "3"), this.jqCell.css("background", this
.chart.properties().scalesProperties.lineColor.value()), this.jqCell.click(function() {}),
this.handle = $('<div class="handle">').appendTo(this.jqCell), r(this.handle, this)
}
var n, r;
i(937), n = i(54).clamp, r = i(107).setMouseEventHandler, o.HEIGHT = 1, o.prototype.hide = function() {
this.jqRow.addClass("js-hidden")
}, o.prototype.show = function() {
this.jqRow.removeClass("js-hidden")
}, o.prototype.mouseDownEvent = function(t) {
(0 === t.button || Modernizr.touch) && (this.startY = t.pageY, this.deltaY = 0,
this.totalHeight = this.paneA.size.h + this.paneB.size.h, this.totalStretch = this.paneA
.stretchFactor() + this.paneB.stretchFactor(), this.prevStretchA = this.paneA
.stretchFactor(), this.minPaneHeight = 30, this.maxPaneHeight = this.totalHeight - this
.minPaneHeight, this.pixelStretchFactor = this.totalStretch / this.totalHeight)
}, o.prototype.pressedMouseMoveEvent = function(t) {
var e, i, o, r;
(0 === t.button || Modernizr.touch) && (t.preventDefault(), this.deltaY = t.pageY - this.startY,
e = this.paneA.size.h, i = n(e + this.deltaY, this.minPaneHeight, this.maxPaneHeight), o =
i * this.pixelStretchFactor, r = this.totalStretch - o, this.paneA.setStretchFactor(o), this
.paneB.setStretchFactor(r), this.chart._adjustSize(), this.paneA.size.h !== e && (this
.startY = t.pageY), this.chart.paint())
}, o.prototype.mouseUpEvent = function(t) {
(0 === t.button || Modernizr.touch) && (this.chart._model.addPaneStretchFactorUndoCommand(this
.paneA._state, this.paneB._state, this.prevStretchA, this.paneA.stretchFactor()), this
.startY = 0, this.deltaY = 0, this.totalHeight = 0, this.totalStretch = 0, this
.minPaneHeight = 0, this.maxPaneHeight = 0, this.pixelStretchFactor = 0)
}, o.prototype.update = function() {
this.jqCell.css("background", this.chart.properties().scalesProperties.lineColor.value())
}, o.prototype.paint = function() {}, o.prototype.image = function() {
var t = {},
e = o.HEIGHT,
i = this.paneA.lhsPriceAxisWidget.size.w,
n = this.paneA.size.w,
r = this.paneA.rhsPriceAxisWidget.size.w,
s = $('<canvas width="' + i + '" height="' + e + '">')[0],
a = s.getContext("2d");
return a.fillStyle = this.chart.properties().scalesProperties.lineColor.value(), a.fillRect(0,
0, i, e), t.leftAxis = {
content: s.toDataURL(),
contentWidth: i,
contentHeight: e
}, s = $('<canvas width="' + n + '" height="' + e + '">')[0], a = s.getContext("2d"), a
.fillStyle = this.chart.properties().scalesProperties.lineColor.value(), a.fillRect(0, 0, n,
e), t.content = s.toDataURL(), t.contentWidth = n, t.contentHeight = e, s = $(
'<canvas width="' + r + '" height="' + e + '">')[0], a = s.getContext("2d"), a
.fillStyle = this.chart.properties().scalesProperties.lineColor.value(), a.fillRect(0, 0, r,
e), t.rightAxis = {
content: s.toDataURL(),
contentWidth: r,
contentHeight: e
}, t
}, t.exports = o
},
function(t, e) {},
function(t, e, i) {
"use strict";
function o(t, e, o, r, s, a, l, c, h, u) {
var d = i(939).ChartUndoModel,
p = new d(t, e, o, r, s, a, l, c, h, u);
return p.model().invalidate(new n(n.FULL_UPDATE)), p
}
var n = i(22),
r = i(33);
TradingView.MAMetaInfo = function() {
return new r({
id: "MASimple",
inputs: [{
id: "length",
type: "integer",
defval: 10
}, {
id: "source",
type: "text",
defval: "close"
}],
plots: [{
id: "MovAvg",
type: "line"
}],
properties: [{
id: "is_price_study",
type: "bool",
value: "true"
}],
palettes: {}
})
}, TradingView.VolumeMetaInfo = function() {
var t = {
id: "Volume",
inputs: [],
plots: [{
id: "Volume",
type: "histogram"
}, {
id: "Color",
type: "colorer",
palette: "volumePalette",
target: "Volume"
}],
properties: [{
id: "is_price_study",
type: "bool",
value: "false"
}],
palettes: {
volumePalette: {
colors: {
0: {
color: "#007F0E",
width: 1,
style: CanvasEx.LINESTYLE_SOLID,
name: "Up Volume"
},
1: {
color: "#872323",
width: 1,
style: CanvasEx.LINESTYLE_SOLID,
name: "Down Volume"
}
}
}
}
};
return new r(t)
}, TradingView.DMMetaInfo = function() {
return new r({
id: "DM",
inputs: [{
id: "ADX smoothing",
max: 50,
min: 1,
type: "integer",
defval: 14
}, {
id: "DI Length",
max: 500,
min: 1,
type: "integer",
defval: 14
}],
plots: [{
id: "ADX",
type: "line"
}, {
id: "DI_P",
type: "line"
}, {
id: "DI_N",
type: "line"
}],
properties: [{
id: "is_price_study",
type: "bool",
value: "false"
}],
palettes: {}
})
}, TradingView.RSIMetaInfo = function() {
return new r({
id: "RSI",
inputs: [{
id: "length",
type: "integer",
defval: 14
}],
plots: [{
id: "RelativeStrengthIndex",
type: "line"
}],
properties: [{
id: "is_price_study",
type: "bool",
value: "false"
}],
palettes: {}
})
}, t.exports = o
},
function(t, e, i) {
"use strict";
(function(t) {
function o(e, i, o, n, r, s, a, l, c, h) {
this._chartWidget = l, this.m_model = new q(e, i, o, n, r, s, a, this, !!l._containsData,
h), this.m_zoomStack = new st, this.undoHistory = c, this._onRearrangePanes = new t,
this._onSimpleZoomIn = new t, this._onSimpleZoomOut = new t, this
._currentCustomMoveSource = null, this.beginUndoMacro = c.beginUndoMacro.bind(c), this
.endUndoMacro = c.endUndoMacro.bind(c), this.createUndoCheckpoint = c
.createUndoCheckpoint.bind(c), this.undoToCheckpoint = c.undoToCheckpoint.bind(c)
}
function n(t, e, i, o) {
at.call(this, i), this._targetObj = t, this._newValue = e, this._model = o
}
function r(t, e, i, o, n) {
at.call(this, o), this._property = t, this._priceScale = i, this._newValue = e, this
._model = n
}
function s(t, e, i, o, n) {
at.call(this, o), this._percentage = t, this._priceScale = i, this._newValue = e, this
._model = n
}
function a(t, e, i, o, n) {
at.call(this, o), this._log = t, this._priceScale = i, this._newValue = e, this._model = n
}
function l(t, e, i, o, n, r) {
at.call(this, o), this._style = t, this._mainSeries = i, this._priceAxisProperties = i
.properties().priceAxisProperties, this._newValue = e, this._model = n, this
._chartWidget = r
}
function c(t, e, i, o, n, r) {
at.call(this, o), this._property = t, this._mainSeries = i, this._priceScale = i
.priceScale(), this._newValue = e, this._model = n, this._invalidateType = r
}
function h(t, e, i, o) {
at.call(this, "scale price", !1), this.m_model = t, this.m_pane = e, this.m_priceScale = i,
this.m_state = o, this.m_newPriceScaleState = null
}
function u(t, e, i) {
at.call(this, i, !1), this.setCustomFlag("doesnt_affect_save", !0), this.m_model = t, this
.m_state = e, this.m_newTimeScaleState = null
}
function d(t, e, i, o) {
this._model = t, this._series = e, this._oldSymbol = e.symbol(), this._oldInterval = e
.interval(), this._symbol = i, this._interval = o
}
function p(t, e, i, o, n) {
at.call(this, "Insert " + e.id), this._model = t, this._studyMetaInfo = e, this._props = i,
this._isOverlay = o, this._parentSource = n, this._oldShowLeftScale = t
.isLeftPriceScaleVisible(), this._oldShowRightScale = t.isRightPriceScaleVisible()
}
function _(t, e) {
at.call(this, "Remove Source"), this._model = t, this._sourceId = e.id()
}
function f(t, e) {
at.call(this, "Remove Drawing(s)"), this._model = t, this._linetools = e, this
._statesByPaneIndexes = {}
}
function m(t, e, i, o) {
this._model = t, this._oldPane = this._model.paneForSource(e), at.call(this, this
._oldPane === i ? "Change Price Scale" : "Move Source"), this._sourceId = e.id(),
this._oldPaneIndex = t.panes().indexOf(this._oldPane), this._oldScaleName = this
._oldPane.priceScaleName(e.priceScale()), this._oldShowLeftScale = t
.isLeftPriceScaleVisible(), this._oldShowRightScale = t.isRightPriceScaleVisible(), this
._pane = i, this._paneIndex = t.panes().indexOf(i),
this._pane ? this._scaleName = this._pane.priceScaleName(o) : this._paneIndex = t
.panes().length
}
function g(t, e, i) {
this._model = t, this._sourceId = e.id(), this._oldShowLeftScale = t
.isLeftPriceScaleVisible(), this._oldShowRightScale = t.isRightPriceScaleVisible(), at
.call(this, i)
}
function v(t, e) {
g.call(this, t, e, "Merge Up"), this._mergeRedoFn = this._model.mergeSourceUp, this
._mergeUndoFn = this._model.unmergeSourceDown
}
function y(t, e) {
g.call(this, t, e, "Merge Down"), this._mergeRedoFn = this._model.mergeSourceDown, this
._mergeUndoFn = this._model.unmergeSourceUp
}
function b(t, e) {
g.call(this, t, e, "Unmerge Up"), this._mergeRedoFn = this._model.unmergeSourceUp, this
._mergeUndoFn = this._model.mergeSourceDown
}
function S(t, e) {
g.call(this, t, e, "Unmerge Down"), this._mergeRedoFn = this._model.unmergeSourceDown, this
._mergeUndoFn = this._model.mergeSourceUp
}
function w(t, e, i) {
at.call(this, "Create line " + i, !1), this._model = t, this._paneIndex = t.panes().indexOf(
e), this._lineTool = i
}
function T(t, e, i, o) {
at.call(this, "Move Drawing", !1), this._model = t, this._sourceId = e.id(), this
._origPoint = i instanceof W ? i.clone() : TradingView.clone(i), this._pointIndex = o
}
function C(t, e, i) {
at.call(this, "Change %1 Z order (%2)".format(e.title(), i > 0 ? "Forward" : "Backward")),
this._model = t, this._sourceId = e.id(), this._shift = i
}
function x(t, e) {
at.call(this, "Send " + e.title() + " to back"), this._model = t, this._sourceId = e.id()
}
function P(t, e) {
at.call(this, "Bring " + e.title() + " to front"), this._model = t, this._sourceId = e.id()
}
function L(t, e, i) {
at.call(this, "Remove pane"), this._model = t, this._index = e, this._pane = this._model
.panes()[e], this._chart = i
}
function I(t, e, i, o) {
at.call(this, "Rearrange panes"), this._model = t, this._index = e, this._direction = i,
this._chart = o
}
function k(t, e, i, o, n, r) {
at.call(this, "Zoom"), this._model = t, this._startBar = e, this._endBar = i, this
._startPrice = o, this._endPrice = n, this._pane = r
}
function A(t, e, i) {
at.call(this, "Zoom"), this._baseCmd = t, this._zoomStack = e, this._inOut = i
}
function M(t, e, i, o, n) {
at.call(this, "", !1), this._model = t, this._paneA = e, this._paneB = i, this
._prevStretchA = o, this._currStretchA = n
}
function E(t, e) {
at.call(this, "Apply Chart Theme"), this._model = t, this._newChartProps = TradingView
.factoryDefaults("chartproperties"), this._newSeriesProps = TradingView.factoryDefaults(
"chartproperties.mainSeriesProperties"), ["candleStyle", "hollowCandleStyle",
"haStyle"
].forEach(function(t) {
e.mainSourceProperties[t].wickUpColor = e.mainSourceProperties[t].wickUpColor ||
e.mainSourceProperties[t].wickColor, e.mainSourceProperties[t]
.wickDownColor = e.mainSourceProperties[t].wickDownColor || e
.mainSourceProperties[t].wickColor
}), e.chartProperties.paneProperties.vertGridProperties = e.chartProperties
.paneProperties.vertGridProperties || e.chartProperties.paneProperties.gridProperties, e
.chartProperties.paneProperties.horzGridProperties = e.chartProperties.paneProperties
.horzGridProperties || e.chartProperties.paneProperties.gridProperties, e
.chartProperties.paneProperties.legendProperties = this._model.properties().state()
.paneProperties.legendProperties, this._newChartProps = $.extend(!0, {}, this
._newChartProps, e.chartProperties),
delete this._newChartProps.scalesProperties.showLeftScale, delete this._newChartProps
.scalesProperties.showRightScale, delete this._newChartProps.scalesProperties
.scaleSeriesOnly, delete this._newChartProps.scalesProperties.showSeriesLastValue,
delete this._newChartProps.scalesProperties.showStudyLastValue, delete this
._newChartProps.scalesProperties.showSymbolLabels, delete this._newChartProps
.scalesProperties.showStudyPlotLabels, this._newSeriesProps = $.extend(!0, {}, this
._newSeriesProps, e.mainSourceProperties), this._newChartProps
.symbolWatermarkProperties || (this._newChartProps.symbolWatermarkProperties = defaults(
"chartproperties.symbolWatermarkProperties"), this._newChartProps
.symbolWatermarkProperties.color = this._newChartProps.scalesProperties.textColor),
this._oldChartProps = t.properties().state(), delete this._oldChartProps.paneProperties
.topMargin, delete this._oldChartProps.paneProperties.bottomMargin, this
._oldSeriesProps = t.properties().state().mainSeriesProperties
}
function D(t, e, i, o) {
var n;
o = o || "", n = o + " Study template", at.call(this, n), this._model = t, this._oldProps =
e, this._newProps = i, this._oldShowLeftScale = t.model().isLeftPriceScaleVisible(),
this._oldShowRightScale = t.model().isRightPriceScaleVisible(), this
._newSourcesPriceScalesNames = []
}
function V(t, e, i, o, n) {
at.call(this, t), this._property = e, this._value = i, this._forceSetProperty = n, this
._prevValue = e.value(), this._cw = o
}
function O(t, e) {
var i, o, n, r, s, a = e.priceScale(),
l = [];
for (a.isPercent() && (i = e.firstValue()), o = 0; o < t.length; o++) n = {
offset: t[o].offset,
time_t: t[o].time_t
}, r = t[o].price, a.isPercent() && (r = a.priceRange().convertToPercent(r, i)), s = a
.priceToCoordinate(r), s -= 40, r = a.coordinateToPrice(s), a.isPercent() && (r = a
.priceRange().convertFromPercent(r, i)), n.price = r, l.push(n);
return l
}
function R(t, e, i) {
at.call(this, "clone " + e.title()), this._model = t, this._originalSource = e, this
._withoutShift = i
}
function B(t, e) {
at.call(this, "Stop Sincing Drawing"), this._model = t, this._sourceId = e.id(), this
._linkKey = e.linkKey
}
function z(t, e, i) {
at.call(this, "Paste Drawing"), this._model = t, this._clipboardData = e, this._paneIndex =
this._model.panes().indexOf(i || this._model.paneForSource(this._model.mainSeries()))
}
function F(t, e) {
at.call(this, "Paste Indicator"), this._model = t, this._clipboardData = e
}
function N(t, e) {
at.call(this, "Move", !1), this._origPoint = t.clone(), this._point = null, this._handler =
e
}
var W = i(8).Point,
H = i(220),
U = i(1).LineDataSource,
j = i(5),
q = i(158),
G = i(26),
Y = i(22),
K = i(150).doAnimate,
Z = i(91),
X = i(6),
J = X.saveDefaultProperties,
Q = i(233),
tt = i(77),
et = i(35),
it = et.Study,
ot = i(163),
nt = i(61),
rt = i(355).createTooManyStudiesNotice,
st = i(356).UndoStack,
at = i(72).UndoCommand,
lt = i(940).SaveLineToolStateUndoCommand,
ct = i(941).ApplyLineToolTemplateUndoCommand,
ht = i(357).RestoreFactoryDefaultsUndoCommand,
ut = i(357).RestoreUserDefaultsUndoCommand,
dt = i(7).getLogger("Chart.ChartUndoModel");
inherit(o, Z), o.prototype.version = function() {
return this.m_model._version
}, o.prototype.onData = function(t) {
switch (t.method) {
case "timescale_update":
var e = t.params;
this.m_model.updateTimeScale(e.index, e.zoffset, e.changes, e.index_diff, e
.marks, e.clear)
}
},
o.prototype.paneForSource = function(t) {
return this.m_model.paneForSource(t)
}, o.prototype.createPane = function(t) {
return this.m_model.createPane(t)
}, o.prototype.dumpViews = function() {
return this.m_model.dumpViews()
}, o.prototype.readOnly = function() {
return this.m_model.readOnly()
}, o.prototype.restart = function() {
this.m_model.restart()
}, o.prototype.disconnect = function() {
this.m_model.disconnect()
}, o.prototype.studiesMetaData = function() {
return this.m_model.studiesMetaData()
}, o.prototype.studyVersioning = function() {
return this.m_model.studyVersioning()
}, o.prototype.chartModel = function() {
return this.m_model
}, o.prototype.pushUndoCommand = function(t) {
this.undoHistory.pushUndoCommand(t)
}, o.prototype.startScalePrice = function(t, e, i) {
this.pushUndoCommand(new h(this.m_model, t, e, e.state())), this.chartModel()
.startScalePrice(t, e, i)
}, o.prototype.scalePriceTo = function(t, e, i) {
this.chartModel().scalePriceTo(t, e, i)
}, o.prototype.endScalePrice = function(t, e) {
this.chartModel().endScalePrice(t, e)
}, o.prototype.startScrollPrice = function(t, e, i) {
e.isAutoScale() || (this._initialPriceScrollState = e.state(), this
._initialPriceScrollPos = i, this.chartModel().startScrollPrice(t, e, i))
}, o.prototype.scrollPriceTo = function(t, e, i) {
e.isAutoScale() || (this._initialPriceScrollPos && Math.abs(this
._initialPriceScrollPos - i) > 20 && (this.pushUndoCommand(new h(this
.m_model, t, e, this._initialPriceScrollState)), delete this
._initialPriceScrollState, delete this._initialPriceScrollPos), this
.chartModel().scrollPriceTo(t, e, i))
}, o.prototype.endScrollPrice = function(t, e) {
e.isAutoScale() || (delete this._initialPriceScrollState, delete this
._initialPriceScrollPos, this.chartModel().endScrollPrice(t, e))
}, o.prototype.setPriceAutoScale = function(t, e, i) {
this.pushUndoCommand(new h(this.m_model, t, e, e.state())), this.chartModel()
.setPriceAutoScale(t, e, i)
}, o.prototype.resetPriceScale = function(t, e) {
this.pushUndoCommand(new h(this.m_model, t, e, e.state())), this.chartModel()
.resetPriceScale(t, e)
}, o.prototype.startScaleTime = function(t) {
this.pushUndoCommand(new u(this.m_model, this.m_model.timeScale().state(),
"scale time")), this.chartModel().startScaleTime(t)
}, o.prototype.scaleTimeTo = function(t) {
this.chartModel().scaleTimeTo(t)
}, o.prototype.endScaleTime = function() {
this.chartModel().endScaleTime()
}, o.prototype.startScrollTime = function(t) {
this._initialTimeScrollState = this.m_model.timeScale().state(), this
._initialTimeScrollPos = t, this.chartModel().startScrollTime(t)
}, o.prototype.scrollTimeTo = function(t) {
this._initialTimeScrollPos && Math.abs(t - this._initialTimeScrollPos) > 20 && (this
.pushUndoCommand(new u(this.m_model, this._initialTimeScrollState,
"scroll time")), delete this._initialTimeScrollPos, delete this
._initialTimeScrollState), this.chartModel().scrollTimeTo(t)
}, o.prototype.gotoTime = function(t, e) {
var i, o, n = this.timeScale().visibleBars();
if (null === n) return $.Deferred().reject().promise();
i = n.firstBar(), o = this.m_model.timeScale().state(), this.chartModel().gotoTime(t,
e), i !== this.timeScale().visibleBars().firstBar() && this.pushUndoCommand(
new u(
this.m_model, o, "scroll time"))
}, o.prototype.endScrollTime = function() {
this.chartModel().endScrollTime(), delete this._initialTimeScrollPos, delete this
._initialTimeScrollState
}, o.prototype.resetTimeScale = function() {
this.pushUndoCommand(new u(this.m_model, this.m_model.timeScale().state())), this
.chartModel().resetTimeScale()
}, o.prototype.canZoomIn = function() {
return this.chartModel().canZoomIn()
}, o.prototype.canZoomOut = function() {
return this.chartModel().canZoomOut()
}, o.prototype.setWidth = function(t) {
this.m_model.setWidth(t)
}, o.prototype.setPaneHeight = function(t, e) {
this.m_model.setPaneHeight(t, e)
}, o.prototype.gridSource = function() {
return this.m_model.gridSource()
}, o.prototype.watermarkSource = function() {
return this.m_model.watermarkSource()
}, o.prototype.brandingSource = function() {
return this.m_model.brandingSource()
}, o.prototype.addAlertsSource = function(t) {
return this.m_model.addAlertsSource(t)
}, o.prototype.alertsSources = function() {
return this.m_model.alertsSources()
}, o.prototype.barsMarksSources = function() {
return this.m_model.barsMarksSources()
}, o.prototype.crossHairSource = function() {
return this.m_model.crossHairSource()
}, o.prototype.model = function() {
return this.m_model
}, o.prototype.mainSeries = function() {
return this.m_model.m_mainSeries
}, o.prototype.mainSeriesScaleRatioProperty = function() {
return this.m_model.mainSeriesScaleRatioProperty()
}, o.prototype.panes = function() {
return this.m_model.m_panes
}, o.prototype.timeScale = function() {
return this.m_model.timeScale()
}, o.prototype.setSelectedSource = function(t, e) {
this.m_model.setSelectedSource(t, e)
}, o.prototype.setHoveredSource = function(t, e) {
this.m_model.setHoveredSource(t, e)
}, o.prototype.selectedSource = function() {
return this.m_model.selectedSource()
}, o.prototype.onSelectedSourceChanged = function() {
return this.m_model.onSelectedSourceChanged()
}, o.prototype.hoveredSource = function() {
return this.m_model.hoveredSource()
}, o.prototype.activeStrategySource = function() {
return this.m_model.activeStrategySource()
}, o.prototype.invalidate = function(t) {
this.m_model.invalidate(t)
}, o.prototype.setCurrentPosition = function(t, e, i, o) {
this.m_model.setCurrentPosition(t, e, i, o)
}, o.prototype.setAndSaveCurrentPosition = function(t, e, i, o) {
this.m_model.setAndSaveCurrentPosition(t, e, i, o)
}, o.prototype.modifySeries = function(t, e, i) {
var o = new d(this.m_model, t, e, i);
this.pushUndoCommand(o)
}, o.prototype.canCreateStudy = function(t) {
return this.model().chartApi().chartApi().isCanCreateStudy(t)
}, o.prototype.checkIfFeatureAvailable = function(t, e) {
var i = this.canCreateStudy(),
o = e && e instanceof it;
return !this.readOnly() && o && (i = this.canCreateStudy(!0)), !!i || void(o || rt()
.open())
}, o.prototype._insertStudy = function(t, e, i, o) {
var n = new p(this.m_model, t, e, i, o);
return this.pushUndoCommand(n), n.insertedStudy()
}, o.prototype.insertStudyWithoutCheck = function() {
return this._insertStudy.apply(this, arguments)
}, o.prototype.insertStudy = function(t, e, i, o) {
if (this.checkIfFeatureAvailable(t, o)) return this._insertStudy(t, e, i, o)
}, o.prototype.setProperty = function(t, e, i) {
if (t && t.value() !== e) {
var o = new n(t, e, i, this.m_model);
this.pushUndoCommand(o), this.emitEvent("setProperty")
}
},
o.prototype.setPercentProperty = function(t, e, i, o) {
if (t.value() !== e) {
var n = new s(t, e, i, o, this.m_model);
this.pushUndoCommand(n)
}
}, o.prototype.setLogProperty = function(t, e, i, o) {
if (t.value() !== e) {
var n = new a(t, e, i, o, this.m_model);
this.pushUndoCommand(n)
}
}, o.prototype.setAutoScaleProperty = function(t, e, i, o) {
if (t.value() !== e) {
var n = new r(t, e, i, o, this.m_model);
this.pushUndoCommand(n)
}
}, o.prototype.setChartStyleProperty = function(t, e, i) {
if (t.value() !== e) {
var o = new l(t, e, this.mainSeries(), i, this.m_model, this._chartWidget);
this.pushUndoCommand(o), this.emitEvent("setChartStyleProperty")
}
}, o.prototype.setLockScaleProperty = function(t, e, i, o) {
if (t.value() !== e) {
var n = new c(t, e, i, o, this.m_model, Y.LIGHT_UPDATE);
this.pushUndoCommand(n)
}
}, o.prototype.setScaleRatioProperty = function(t, e, i, o) {
if (t.value() !== e) {
var n = new c(t, e, i, o, this.m_model, Y.FULL_UPDATE);
this.pushUndoCommand(n)
}
}, o.prototype.setScreenChartProperty = function(t, e, i, o, n) {
if (n || t.value() !== e) {
var r = new V(o, t, e, i, n);
this.pushUndoCommand(r)
}
}, o.prototype._getSourcesTree = function(t) {
var e, i = [],
o = this.m_model.children(t);
for (e = 0; e < o.length; e++) i = i.concat(this._getSourcesTree(o[e]));
return i.push(t), i
}, o.prototype.removeSource = function(t, e) {
var i, o, n;
if (t.isUserDeletable()) {
if (i = this._getSourcesTree(t), this.lineBeingCreated() === t) this
.cancelCreatingLine();
else {
for (this.beginUndoMacro("Remove source"), o = 0; o < i.length; ++o) n = new _(
this.m_model, i[o]), this.pushUndoCommand(n);
this.endUndoMacro()
}
e || (1 === i.length ? this.emitEvent("removeSource", [i[0]]) : this.emitEvent(
"removeSources", [i]))
}
}, o.prototype.removeSelectedSource = function() {
var t, e = this.m_model.selectedSource();
e && e.isUserDeletable() && (this.setSelectedSource(null), t = new _(this.m_model, e),
this.pushUndoCommand(t), this.emitEvent("removeSource", [e]))
}, o.prototype.removeLineTools = function(t) {
var e, i, o = this.lineBeingCreated();
o && -1 !== (e = t.indexOf(o)) && (this.cancelCreatingLine(), t.splice(e, 1)), i =
new f(this.m_model, t), this.pushUndoCommand(i), this.emitEvent("removeSources", [
t
])
}, o.prototype.move = function(t, e, i) {
var o = new m(this.m_model, t, e, i);
this.pushUndoCommand(o), this.emitEvent("moveSource", [t])
}, o.prototype.mergeSourceUp = function(t) {
var e = new v(this.m_model, t);
this.pushUndoCommand(e), this.emitEvent("mergeSourceUp", [t])
}, o.prototype.mergeSourceDown = function(t) {
var e = new y(this.m_model, t);
this.pushUndoCommand(e), this.emitEvent("mergeSourceDown", [t])
}, o.prototype.unmergeSourceUp = function(t) {
var e = new b(this.m_model, t);
this.pushUndoCommand(e), this.emitEvent("unmergeSourceUp", [t])
}, o.prototype.unmergeSourceDown = function(t) {
var e = new S(this.m_model, t);
this.pushUndoCommand(e), this.emitEvent("unmergeSourceDown", [t])
}, o.prototype.createLineTool = function(t, e, i, o, n) {
var r, s;
return "LineToolRegressionTrend" !== i || this.canCreateStudy() ? (this
._createLineCommand = new w(this.m_model, t, i), r = this._createLineCommand
.startCreatingLine(e, o, n), s = this._createLineCommand.line(), r && (this
.pushUndoCommand(this._createLineCommand), delete this._createLineCommand),
s) : void rt().open()
}, o.prototype.lineBeingCreated = function() {
return this.m_model.lineBeingCreated()
},
o.prototype.paneBeingCreatedLineOn = function() {
return this.m_model.paneBeingCreatedLineOn()
}, o.prototype.coninueCreatingLine = function(t, e, i) {
var o = this._createLineCommand.continueCreatingLine(t, e, i);
return o && (this.pushUndoCommand(this._createLineCommand), delete this
._createLineCommand), o
}, o.prototype.finishLineTool = function(t) {
this.m_model.finishLineTool(t)
}, o.prototype.cancelCreatingLine = function() {
this.m_model.cancelCreatingLine()
}, o.prototype.lineCancelled = function() {
return this.m_model.lineCancelled()
}, o.prototype.startChangingLinetool = function(t, e, i, o) {
this._currentLineChangeCommand = new lt(this.m_model, t, "Change " + i + "point", !1),
this.m_model.startChangingLinetool(t, e, i, o)
}, o.prototype.lineBeingEdited = function() {
return this.m_model.lineBeingEdited()
}, o.prototype.changeLinePoint = function(t, e) {
this.m_model.changeLinePoint(t, e)
}, o.prototype.endChangingLinetool = function(t) {
this.m_model.endChangingLinetool(t), this.pushUndoCommand(this
._currentLineChangeCommand), this._currentLineChangeCommand = null
}, o.prototype.startMovingSource = function(t, e, i) {
this._currentLineMoveCommand = new T(this.m_model, t, e, i), this.m_model
.startMovingSource(t, e, i)
}, o.prototype.sourceBeingMoved = function() {
return this.m_model.sourceBeingMoved()
}, o.prototype.moveSource = function(t) {
this._currentLineMoveCommand.setPoint(t), this.m_model.moveSource(t)
}, o.prototype.endMovingSource = function(t) {
this.m_model.endMovingSource(t), this._currentLineMoveCommand._point && (this
.pushUndoCommand(this._currentLineMoveCommand), this._currentLineChangeCommand =
null)
}, o.prototype.dataSources = function() {
return this.m_model.dataSources()
}, o.prototype.orderedDataSources = function(t) {
return this.m_model.orderedDataSources(t)
}, o.prototype.dataSourceForId = function(t) {
return this.m_model.dataSourceForId(t)
}, o.prototype.state = function(t, e) {
return this.m_model.state(t, e)
}, o.prototype.asyncState = function(t) {
return this.m_model.asyncState(t)
}, o.prototype.restoreState = function(t, e) {
return this.m_model.restoreState(t, e)
}, o.prototype.calculateDefaultTags = function() {
return this.m_model.calculateDefaultTags()
}, o.prototype.onTagsChanged = function() {
return this.m_model.onTagsChanged()
}, o.prototype.changeZOrder = function(t, e) {
var i = new C(this.m_model, t, e);
this.pushUndoCommand(i), this.emitEvent("changeZOrder", [t, e])
}, o.prototype.sendToBack = function(t) {
var e = new x(this.m_model, t);
this.pushUndoCommand(e), this.emitEvent("changeZOrder", [t])
}, o.prototype.bringToFront = function(t) {
var e = new P(this.m_model, t);
this.pushUndoCommand(e), this.emitEvent("changeZOrder", [t])
}, o.prototype.removeAllStudies = function() {
var t, e, i;
for (this.beginUndoMacro("remove all studies"), t = this.m_model.dataSources(), e =
0; e < t.length; e++) i = t[e], (TradingView.isInherited(i.constructor, it) && !i
.isChildStudy() && i.removeByRemoveAllStudies() || TradingView.isInherited(i
.constructor, ot)) && this.removeSource(i);
this.endUndoMacro()
}, o.prototype.removeAllDrawingTools = function(t) {
var e, i, o;
for (this.beginUndoMacro("remove all drawing tools"), this.lineBeingCreated() && this
.cancelCreatingLine(), e = this.m_model.dataSources(), i = 0; i < e.length; i++) o =
e[i],
TradingView.isInherited(o.constructor, U) && o.isActualSymbol() && o
.isUserDeletable() && (t && t !== o._constructor || this.removeSource(o));
this.endUndoMacro()
}, o.prototype.unlinkLine = function(t) {
var e = new B(this.m_model, t);
this.pushUndoCommand(e)
}, o.prototype.copyToOtherCharts = function(t) {
this.m_model.copyToOtherCharts(t)
}, o.prototype.moveDown = function() {
var t, e, i, o, n;
try {
this.beginUndoMacro("Move Down")
} catch (t) {
return
}
t = this, e = this.m_model.mainSeries(), i = this.m_model.paneForSource(e), o = i
.priceScaleForSource(e), o.setAutoScale(!1), n = o.height(), K({
to: n / 5,
onStep: function(e) {
t.startScrollPrice(i, o, 0), t.scrollPriceTo(i, o, e), t
.endScrollPrice(i, o)
},
onComplete: function() {
t.endUndoMacro()
}
})
}, o.prototype.moveUp = function() {
var t, e, i, o, n;
try {
this.beginUndoMacro("Move Up")
} catch (t) {
return
}
t = this, e = this.m_model.mainSeries(), i = this.m_model.paneForSource(e), o = i
.priceScaleForSource(e), o.setAutoScale(!1), n = o.height(), K({
to: n / 5,
onStep: function(e) {
t.startScrollPrice(i, o, e), t.scrollPriceTo(i, o, 0), t
.endScrollPrice(i, o)
},
onComplete: function() {
t.endUndoMacro()
}
})
}, o.prototype.moveLeft = function() {
var t, e;
try {
this.beginUndoMacro("Move Left")
} catch (t) {
return
}
t = this.m_model.timeScale().width(), e = this, K({
to: t / 5,
onStep: function(t) {
e.startScrollTime(t), e.scrollTimeTo(0), e.endScrollTime()
},
onComplete: function() {
e.endUndoMacro()
}
})
}, o.prototype.moveRight = function() {
var t, e;
try {
this.beginUndoMacro("Move Right")
} catch (t) {
return
}
t = this.m_model.timeScale().width(), e = this, K({
to: t / 5,
onStep: function(t) {
e.startScrollTime(0), e.scrollTimeTo(t), e.endScrollTime()
},
onComplete: function() {
e.endUndoMacro()
}
})
}, o.prototype.scrollChart = function(t) {
//滑动网页滚动K线
j.enabled("chart_scroll") && (this.startScrollTime(0), this.scrollTimeTo(t), this
.endScrollTime())
}, o.prototype.scrollChartByBar = function(t) {
if (j.enabled("chart_scroll")) {
var e = t * this.m_model.timeScale().barSpacing();
this.startScrollTime(0), this.scrollTimeTo(e), this.endScrollTime()
}
}, o.prototype.zoomIn = function(t, e) {
var i, o, n = this.m_model.timeScale().width(),
r = this;
if (e = e || 1, this.canZoomIn())
if (t) i = e * n / 10, o = i * ((t + 1) / 2), this.startScaleTime(i), this
.scaleTimeTo(0), this.endScaleTime(), this.startScrollTime(0), this
.scrollTimeTo(i - o), this.endScrollTime(), this._onSimpleZoomIn.fire();
else {
try {
this.beginUndoMacro("Zoom In")
} catch (t) {
return
}
K({
to: n / 5,
onStep: function(t) {
r.startScaleTime(t), r.scaleTimeTo(0), r.endScaleTime()
},
onComplete: function() {
r.endUndoMacro(), r._onSimpleZoomIn.fire()
}
})
}
}, o.prototype.zoomOut = function(t, e) {
var i = this.m_model.timeScale().width(),
o = this;
if (e = e || 1, this.canZoomOut())
if (t) this.startScaleTime(0), this.scaleTimeTo(e * i / 10), this.endScaleTime(),
this.startScrollTime(e * (i / 20 - i / 20 * t)), this.scrollTimeTo(0), this
.endScrollTime(), this._onSimpleZoomOut.fire();
else {
try {
this.beginUndoMacro("Zoom Out")
} catch (t) {
return
}
K({
to: i / 5,
onStep: function(t) {
o.startScaleTime(0), o.scaleTimeTo(t), o.endScaleTime()
},
onComplete: function() {
o.endUndoMacro(), o._onSimpleZoomOut.fire()
}
})
}
}, o.prototype.resetScales = function() {
var t, e;
for (this.beginUndoMacro("Reset scales"), this.resetTimeScale(), t = 0; t < this.panes()
.length; t++) e = this.panes()[t],
this.resetPriceScale(e, e.leftPriceScale()), this.resetPriceScale(e, e
.rightPriceScale());
this.endUndoMacro(), this.m_model.recalculateAllPanes()
}, o.prototype.zoomToViewport = function(t, e, i, o, n) {
var r = new k(this.m_model, t, e, i, o, n),
s = new A(r, this.m_zoomStack, !0);
this.pushUndoCommand(s)
}, o.prototype.zoomFromViewport = function() {
var t = new A(this.m_zoomStack.head(), this.m_zoomStack, !1);
this.pushUndoCommand(t)
}, o.prototype.zoomStack = function() {
return this.m_zoomStack
}, o.prototype.addPaneStretchFactorUndoCommand = function(t, e, i, o) {
var n = new M(this.m_model, t, e, i, o);
this.pushUndoCommand(n)
}, o.prototype.restoreFactoryDefaults = function(t) {
var e = new ht(this.m_model, t);
this.pushUndoCommand(e)
}, o.prototype.restoreDefaults = function(t) {
var e = new ut(this.m_model, t);
this.pushUndoCommand(e)
}, o.prototype.chartLoadTheme = function(t, e) {
var i = new E(t, e);
this.pushUndoCommand(i)
}, o.prototype.applyLineToolTemplate = function(t, e, i) {
this.beginUndoMacro(i), this.saveLineToolState(t, i);
var o = new ct(t, e, i);
this.pushUndoCommand(o), this.saveLineToolState(t, i), this.endUndoMacro(), this.model()
.updateSource(t)
}, o.prototype.restoreLineToolFactoryDefaults = function(t, e) {
this.beginUndoMacro(e), this.saveLineToolState(t, e), t.restoreFactoryDefaults(), this
.saveLineToolState(t, e), this.endUndoMacro()
}, o.prototype.studyLoadTemplate = function(t, e, i, o) {
var n = new D(t, e, i, o);
this.pushUndoCommand(n)
}, o.prototype.onRearrangePanes = function() {
return this._onRearrangePanes
}, o.prototype.onSimpleZoomIn = function() {
return this._onSimpleZoomIn
}, o.prototype.onSimpleZoomOut = function() {
return this._onSimpleZoomOut
}, o.prototype.loadRange = function(t) {
t.res !== this.m_model.mainSeries().properties().interval.value() ? (this.m_model
.mainSeries().setDefaultTimeframe(t.val), this.setProperty(this.m_model
.mainSeries().properties().interval, t.res, "Change date range")) : this
.m_model.mainSeries().loadDataTo(t.val)
}, o.prototype.cloneLineTool = function(t, e) {
var i = new R(this.m_model, t, e);
return this.pushUndoCommand(i), this.emitEvent("cloneLineTool"), i.clonedLineToolId()
}, o.prototype._preparePriceAxisProperties = function(t, e) {
var i = e.lockScale.value(),
o = t.style.value() === tt.STYLE_PNF;
(o || i) && (e.log.setValue(!1), e.percentage.setValue(!1)), e.logDisabled.setValue(!(!
o && !i)), e.percentageDisabled.setValue(!(!o && !i))
}, o.prototype.alertsList = function() {
return this.m_model.alertsList()
}, o.prototype.alertsListChanged = function() {
return this.m_model.alertsListChanged()
}, o.prototype.insertStudyStub = function(t) {
return this.m_model.insertStudyStub(t)
}, o.prototype.removeStudyStub = function(t) {
return this.m_model.removeStudyStub(t)
}, o.prototype.isJustClonedChart = function() {
return this._chartWidget.isJustClonedChart()
}, o.prototype.copySourceToClip = function(t) {
if (t && !t.properties().blockCopying) {
var e = {};
if (t instanceof U) e.type = "drawing", e.geometry = t.geometry();
else {
if (!(t instanceof it)) return !1;
e.type = "study"
}
return e.source = t.state && t.state(), (delete e.source.alertId, delete e.source
.linkKey, e.source) ? (e.title = t.title && t.title(), e.modelId = this
.m_model._id, Q.set(e), !0) : !1
}
}, o.prototype.cutSourceToClip = function(t) {
if (!this.copySourceToClip(t)) return !1;
this.removeSource(t)
}, o.prototype.pasteLineTool = function(t, e) {
var i = new z(this.m_model, e, t);
this.pushUndoCommand(i)
}, o.prototype.pasteStudy = function(t) {
var e = new F(this.m_model, t);
this.pushUndoCommand(e)
}, o.prototype.pasteSourceFromClip = function(t, e) {
var i = Q.get();
if (!i) return !1;
"drawing" === i.type && this.pasteLineTool(t, i), "study" === i.type && this
.checkIfFeatureAvailable(i.state) && this.pasteStudy(i)
}, o.prototype.trackTime = function() {
return this._chartWidget.trackTime()
}, o.prototype.startCustomMoving = function(t, e, i) {
this._currentCustomMoveCommand = new N(e, i), this._currentCustomMoveSource = t
}, o.prototype.customMoveBeingProcessed = function() {
return null !== this._currentCustomMoveSource
}, o.prototype.processCustomMove = function(t) {
this._currentCustomMoveCommand.setPoint(t)
}, o.prototype.endCustomMoving = function() {
null !== this._currentCustomMoveCommand.point() && (this.pushUndoCommand(this
._currentCustomMoveCommand), this._currentCustomMoveCommand = null, this
._currentCustomMoveSource = null)
}, o.prototype.saveLineToolState = function(t, e) {
this.pushUndoCommand(new lt(this.m_model, t, e))
}, inherit(n, at), n.prototype.redo = function() {
this._oldValue = this._targetObj.value(), J(!0), this._targetObj.setValue(this
._newValue), J(!1), this._model && (this._model.recalculateAllPanes(), this
._model.invalidate(new Y(Y.LIGHT_UPDATE)))
}, n.prototype.undo = function() {
J(!0), this._targetObj.setValue(this._oldValue), J(!1), this._oldValue = null, this
._model && (this._model.recalculateAllPanes(), this._model.invalidate(new Y(Y
.LIGHT_UPDATE)))
}, inherit(r, at), r.prototype.redo = function() {
this._oldValue = this._property.value(), this._oldLockScaleValue = this._priceScale
.mainSource() instanceof tt ? this._priceScale.isLockScale() : void 0, J(!0), this
._property.setValue(this._newValue), this._oldLockScaleValue && this._newValue &&
this._priceScale.properties().lockScale.setValue(!1), J(!1), this._model && (this
._model.recalculateAllPanes(), this._model.invalidate(new Y(Y.LIGHT_UPDATE)))
}, r.prototype.undo = function() {
J(!0), this._property.setValue(this._oldValue), this._oldLockScaleValue && this
._newValue && this._priceScale.properties().lockScale.setValue(this
._oldLockScaleValue), J(!1), this._oldValue = null, this._model && (this._model
.recalculateAllPanes(), this._model.invalidate(new Y(Y.LIGHT_UPDATE)))
}, inherit(s, at), s.prototype.redo = function() {
this._oldValue = this._percentage.value(), this._oldAutoScaleValue = this._priceScale
.properties().autoScale.value(), this._oldLogValue = this._priceScale.properties()
.log.value(), this._oldLogDisabled = this._priceScale.properties().logDisabled
.value(), J(!0), this._percentage.setValue(this._newValue), this._priceScale
.properties().autoScaleDisabled.setValue(this._newValue), this._priceScale
.properties().log.setValue(!1), J(!1), this._model && (this._model
.recalculateAllPanes(), this._model.invalidate(new Y(Y.LIGHT_UPDATE)))
}, s.prototype.undo = function() {
if (J(!0), this._percentage.setValue(this._oldValue), this._priceScale.properties()
.autoScale.setValue(this._oldAutoScaleValue), this._priceScale.properties()
.autoScaleDisabled.setValue(this._oldValue),
this._priceScale.properties().log.setValue(this._oldLogValue), !this
._oldAutoScaleValue && !this._priceScale.isLockScale()) {
var t = this._model.timeScale().visibleBars();
this._priceScale.setPriceRange(this._priceScale.priceRange().convertFromPercents(
this._priceScale.mainSource().close(t.firstBar())))
}
J(!1), this._oldValue = null, this._model && (this._model.recalculateAllPanes(), this
._model.invalidate(new Y(Y.LIGHT_UPDATE)))
}, inherit(a, at), a.prototype.redo = function() {
this._oldValue = this._log.value(), this._oldPercValue = this._priceScale.properties()
.percentage.value(), this._oldPercDisabled = this._priceScale.properties()
.percentageDisabled.value(), J(!0), this._log.setValue(this._newValue), this
._priceScale.properties().percentage.setValue(!1), this._priceScale.properties()
.autoScaleDisabled.setValue(this._priceScale.properties().percentage.value()), J(!
1), this._model && (this._model.recalculateAllPanes(), this._model.invalidate(
new Y(
Y.LIGHT_UPDATE)))
}, a.prototype.undo = function() {
J(!0), this._log.setValue(this._oldValue), this._priceScale.properties().percentage
.setValue(this._oldPercValue), J(!1), this._oldValue = null, this._model && (this
._model.recalculateAllPanes(), this._model.invalidate(new Y(Y.LIGHT_UPDATE)))
}, inherit(l, at), l.prototype.redo = function() {
var t = $.Deferred().resolve();
this._mainSeries._properties.style === this._style && this._model.mainSeries()
.isNeedRestart(this._newValue) && (t = this._chartWidget.screen.show()), t.done(
function() {
this._oldValue = this._style.value(), this._oldAutoScale = this
._priceAxisProperties.autoScale.value(), this._oldLogValue = this
._priceAxisProperties.log.value(), this._oldLogDisabled = this
._priceAxisProperties.logDisabled.value(), this._oldPercentageValue =
this._priceAxisProperties.percentage.value(), this
._oldPercentageDisabled = this._priceAxisProperties.percentageDisabled
.value(), J(!0), this._style.setValue(this._newValue), this._chartWidget
.model()._preparePriceAxisProperties(this._mainSeries.properties(), this
._priceAxisProperties), J(!1), this._model && (this._model
.recalculateAllPanes(), this._model.invalidate(new Y(Y
.LIGHT_UPDATE)))
}.bind(this))
}, l.prototype.undo = function() {
var t = $.Deferred().resolve();
this._mainSeries._properties.style === this._style && this._model.mainSeries()
.isNeedRestart(this._newValue) && (t = this._chartWidget.screen.show()), t.done(
function() {
J(!0), this._style.setValue(this._oldValue), this._priceAxisProperties.log
.setValue(this._oldLogValue), this._priceAxisProperties.logDisabled
.setValue(this._oldLogDisabled), this._priceAxisProperties.percentage
.setValue(this._oldPercentageValue), this._priceAxisProperties
.percentageDisabled.setValue(this._oldPercentageDisabled), this
._priceAxisProperties.autoScale.setValue(this._oldAutoScale), J(!1),
this._oldValue = null, this._model && (this._model
.recalculateAllPanes(), this._model.invalidate(new Y(Y
.LIGHT_UPDATE)))
}.bind(this))
}, inherit(c, at), c.prototype.redo = function() {
if (this._oldValue = this._property.value(), this._oldAutoScale = this._priceScale
.properties().autoScale.value(), this._oldPercentage = this._priceScale.properties()
.percentage.value(),
this._oldLog = this._priceScale.properties().log.value(), J(!0), this._newValue && (
this._priceScale.properties().percentage.setValue(!1), this._priceScale
.properties().log.setValue(!1), this._priceScale.properties().autoScale
.setValue(!1), this._oldPercentage)) {
var t = this._model.timeScale().visibleBars();
this._priceScale.setPriceRange(this._priceScale.priceRange().convertFromPercents(
this._priceScale.mainSource().close(t.firstBar())))
}
this._property.setValue(this._newValue), J(!1), this._model && (this._model
.recalculateAllPanes(), this._model.invalidate(new Y(this._invalidateType)))
}, c.prototype.undo = function() {
J(!0), this._priceScale.properties().percentage.setValue(this._oldPercentage), this
._priceScale.properties().log.setValue(this._oldLog), this._priceScale.properties()
.autoScale.setValue(this._oldAutoScale), this._property.setValue(this._oldValue), J(
!1), this._oldValue = null, this._model && (this._model.recalculateAllPanes(),
this._model.invalidate(new Y(this._invalidateType)))
}, inherit(h, at), h.prototype.undo = function() {
if (null !== this.m_newPriceScaleState) return void dt.logDebug(
"PriceScaleChangeUndoCommand.undo: Command is already undone");
this.m_newPriceScaleState = this.m_priceScale.state(), this.m_model
.restorePriceScaleState(this.m_pane, this.m_priceScale, this.m_state)
}, h.prototype.redo = function() {
if (null === this.m_newPriceScaleState) return void dt.logDebug(
"PriceScaleChangeUndoCommand.redo: Command is not undone");
this.m_model.restorePriceScaleState(this.m_pane, this.m_priceScale, this
.m_newPriceScaleState), this.m_newPriceScaleState = null
}, inherit(u, at), u.prototype.undo = function() {
if (null !== this.m_newTimeScaleState) return void dt.logDebug(
"TimeScaleChangeUndoCommand.undo: Command is already undone");
this.m_newTimeScaleState = this.m_model.timeScale().state(), this.m_model
.restoreTimeScaleState(this.m_state)
}, u.prototype.redo = function() {
if (null === this.m_newTimeScaleState) return void dt.logDebug(
"TimeScaleChangeUndoCommand.redo: Command is not undone");
this.m_model.restoreTimeScaleState(this.m_newTimeScaleState), this.m_newTimeScaleState =
null
}, inherit(d, at), d.prototype.redo = function() {
this._model.modifySeries(this._series, this._symbol, this._interval)
}, d.prototype.undo = function() {
this._model.modifySeries(this._series, this._oldSymbol, this._oldInterval)
}, inherit(p, at), p.prototype.redo = function() {
var t, e, i = null;
return this._studyState ? (i = this._model.restoreSource(this._restorePane, this
._paneIndex, this._paneState, this._studyState, this._priceScaleName), this
._studyId !== i.id() && dt.logError(
"Study was restored improperly - study ids does not match"), delete this
._studyState) : (i = this._model.insertStudy(this._studyMetaInfo, this._props,
this._isOverlay, this._parentSource), this._studyId = i.id()), t = this._model
.paneForSource(i), e = t.priceScaleName(i.priceScale()), this._model
.setPriceScaleVisibility(e, !0), i
}, p.prototype.insertedStudy = function() {
return this._model.dataSourceForId(this._studyId)
}, p.prototype.undo = function() {
var t, e = this.insertedStudy();
this._studyState = e.state(), t = this._model.paneForSource(e), this._paneIndex = this
._model.panes().indexOf(t),
this._paneState = t.state(), this._restorePane = this._model.removeSource(e), this
._model.setLeftPriceScaleVisible(this._oldShowLeftScale), this._model
.setRightPriceScaleVisible(this._oldShowRightScale)
}, inherit(_, at), _.prototype.redo = function() {
var t, e = this._model.dataSourceForId(this._sourceId);
this._sourceState = e.state(), t = this._model.paneForSource(e), this._paneIndex = this
._model.panes().indexOf(t), this._priceScaleName = t.priceScaleName(e.priceScale()),
this._paneState = t.state(), this._restorePane = this._model.removeSource(e)
}, _.prototype.undo = function() {
var t = this._model.restoreSource(this._restorePane, this._paneIndex, this._paneState,
this._sourceState, this._priceScaleName);
this._sourceId !== t.id() && dt.logError(
"Source was restored improperly - source ids does not match")
}, inherit(f, at), f.prototype.redo = function() {
var t, e, i;
for (t = 0; t < this._linetools.length; t++) e = this._model.paneForSource(this
._linetools[t]), i = this._model.panes().indexOf(e), this._statesByPaneIndexes[
i] = this._statesByPaneIndexes[i] || [], this._statesByPaneIndexes[i].push({
state: this._linetools[t].state(),
owner: this._linetools[t].ownerSource().id()
}), e.removeDataSource(this._linetools[t]);
delete this._linetools
}, f.prototype.undo = function() {
var t, e, i, o, n, r, s;
this._linetools = [];
for (t in this._statesByPaneIndexes)
for (e = this._model.panes()[t], i = this._statesByPaneIndexes[t], o = 0; o < i
.length; o++) n = i[o], r = this._model.dataSourceForId(n.owner), s = e
._restoreLineTool(n.state), s.setOwnerSource(r), s.updateAllViews(), this
._linetools.push(s);
this._model.invalidate(new Y(Y.LIGHT_UPDATE))
}, inherit(m, at), m.prototype.redo = function() {
var t, e; - 1 === this._model.panes().indexOf(this._pane) && (this._pane = this._model
.createPane(this._paneIndex)), t = this._model.dataSourceForId(this._sourceId),
this._model.move(t, this._pane, this._pane.priceScaleByName(this._scaleName)), e =
this._pane.priceScaleName(t.priceScale()), this._model.setPriceScaleVisibility(e, !
0)
}, m.prototype.undo = function() {
-1 === this._model.panes().indexOf(this._oldPane) && (this._oldPane = this._model
.createPane(this._oldPaneIndex)), this._model.move(this._model.dataSourceForId(
this._sourceId), this._oldPane, this._oldPane.priceScaleByName(this
._oldScaleName)), this._model.setLeftPriceScaleVisible(this._oldShowLeftScale),
this._model.setRightPriceScaleVisible(this._oldShowRightScale)
}, inherit(g, at), g.prototype.redo = function() {
var t, e, i = this._model.dataSourceForId(this._sourceId);
this._mergeRedoFn.call(this._model, i), t = this._model.paneForSource(i), e = t
.priceScaleName(i.priceScale()), this._model.setPriceScaleVisibility(e, !0)
}, g.prototype.undo = function() {
var t = this._model.dataSourceForId(this._sourceId);
this._mergeUndoFn.call(this._model, t), this._model.setLeftPriceScaleVisible(this
._oldShowLeftScale), this._model.setRightPriceScaleVisible(this
._oldShowRightScale)
}, inherit(v, g), inherit(y, g), inherit(b, g), inherit(S, g), inherit(w, at), w.prototype
.startCreatingLine = function(t, e, i) {
var o, n;
return this._points = [{
point: t
}], o = this._model.panes()[this._paneIndex], n = this._model.createLineTool(o, t,
this._lineTool, e, i), this._lineId = n.id(),
!this._model.lineBeingCreated()
}, w.prototype.continueCreatingLine = function(t, e, i) {
return this._points || dt.logError(
"continueCreatingLine is called before startCreatingLine"), this._points.push({
point: t,
envState: e
}), this._model.coninueCreatingLine(t, e, i)
}, w.prototype.line = function() {
return this._lineId ? this._model.dataSourceForId(this._lineId) : null
}, w.prototype.undo = function() {
var t = this.line();
t && (this._lineState = t.state(), this._model.removeSource(t), delete this._lineId)
};
w.prototype.redo = function() {
this._lineState || dt.logError("This command was never undone - nothing to redo");
var t = this._model.restoreSource(!1, this._paneIndex, null, this._lineState, null);
this._lineId = t.id(), delete this._lineState
}, inherit(T, at), T.prototype.setPoint = function(t) {
this._point = t instanceof W ? t.clone() : TradingView.clone(t)
}, T.prototype.undo = function() {
var t = this._model.dataSourceForId(this._sourceId);
this._model.startMovingSource(t, this._point, this._pointIndex), this._model.moveSource(
this._origPoint), this._model.endMovingSource()
}, T.prototype.redo = function() {
var t = this._model.dataSourceForId(this._sourceId);
this._model.startMovingSource(t, this._origPoint, this._pointIndex), this._model
.moveSource(this._point), this._model.endMovingSource()
}, inherit(C, at), C.prototype.undo = function() {
var t = this._model.dataSourceForId(this._sourceId);
this._model.changeZOrder(t, -this._shift)
}, C.prototype.redo = function() {
var t = this._model.dataSourceForId(this._sourceId);
this._model.changeZOrder(t, this._shift)
}, inherit(x, at), x.prototype.undo = function() {
var t = this._model.dataSourceForId(this._sourceId);
this._model.bringToFront(t)
}, x.prototype.redo = function() {
var t = this._model.dataSourceForId(this._sourceId);
this._model.sendToBack(t)
}, inherit(P, at), P.prototype.undo = function() {
var t = this._model.dataSourceForId(this._sourceId);
this._model.sendToBack(t)
}, P.prototype.redo = function() {
var t = this._model.dataSourceForId(this._sourceId);
this._model.bringToFront(t)
}, o.prototype.removePane = function(t, e) {
var i = new L(this, e, t);
this.pushUndoCommand(i)
}, inherit(L, at), L.prototype.redo = function() {
this._model.panes().splice(this._index, 1), this._chart._updateGui()
}, L.prototype.undo = function() {
this._model.panes().splice(this._index, 0, this._pane), this._chart._updateGui()
}, o.prototype.rearrangePanes = function(t, e, i) {
var o = new I(this, e, i, t);
this.pushUndoCommand(o), this._onRearrangePanes.fire()
}, inherit(I, at), I.prototype.redo = function() {
var t = this._model.panes()[this._index];
"up" === this._direction && this._index > 0 && (this._model.panes().splice(this._index,
1), this._model.panes().splice(this._index - 1, 0, t)), "down" === this
._direction && this._index < this._model.panes().length - 1 && (this._model.panes()
.splice(this._index, 1), this._model.panes().splice(this._index + 1, 0, t)),
this._model.invalidate(new Y(Y.FULL_UPDATE))
}, I.prototype.undo = function() {
var t;
"up" === this._direction && (t = this._model.panes()[this._index - 1], this._model
.panes().splice(this._index - 1, 1), this._model.panes().splice(this._index, 0,
t)), "down" === this._direction && (t = this._model.panes()[this._index +
1], this._model.panes().splice(this._index + 1, 1),
this._model.panes().splice(this._index, 0, t)), this._model.invalidate(new Y(Y
.FULL_UPDATE))
}, inherit(k, at), k.prototype.redo = function() {
this._timeScaleState = this._model.timeScale().state(), this._priceScaleState = this
._pane.defaultPriceScale().state(), this._model.zoomToViewport(this._startBar, this
._endBar, this._startPrice, this._endPrice, this._pane)
}, k.prototype.undo = function() {
this._model.timeScale().restoreState(this._timeScaleState), this._pane
.defaultPriceScale().restoreState(this._priceScaleState), this._model
.recalculateAllPanes(), this._model.invalidate(new Y(Y.LIGHT_UPDATE))
}, inherit(A, at), A.prototype.undo = function() {
if (this._inOut) {
if (this._baseCmd !== this._zoomStack.head()) return void dt.logDebug(
"zoom stack inconsistency");
this._baseCmd.undo(), this._zoomStack.pop()
} else this._baseCmd.redo(), this._zoomStack.push(this._baseCmd)
}, A.prototype.redo = function() {
if (this._inOut) this._baseCmd.redo(), this._zoomStack.push(this._baseCmd);
else {
if (this._baseCmd !== this._zoomStack.head()) return void dt.logDebug(
"zoom stack inconsistency");
this._baseCmd.undo(), this._zoomStack.pop()
}
}, inherit(M, at), M.prototype.redo = function() {
var t = this._paneA._stretchFactor + this._paneB._stretchFactor;
this._paneA._stretchFactor = this._currStretchA, this._paneB._stretchFactor = t - this
._currStretchA, this._model.invalidate(new Y(Y.FULL_UPDATE))
}, M.prototype.undo = function() {
var t = this._paneA._stretchFactor + this._paneB._stretchFactor;
this._paneA._stretchFactor = this._prevStretchA, this._paneB._stretchFactor = t - this
._prevStretchA, this._model.invalidate(new Y(Y.FULL_UPDATE))
}, inherit(E, at), E.prototype._merge = function(t, e) {
var i = this._model;
J(!0), t && (i.properties().paneProperties.merge(t.paneProperties), i.properties()
.scalesProperties.merge(t.scalesProperties), i.properties()
.symbolWatermarkProperties.merge(t.symbolWatermarkProperties)), i.mainSeries()
.properties().merge(e), i.mainSeries().properties().saveDefaults(), i.mainSeries()
.createPaneView(), i.mainSeries().invalidateBarStylesCache(), i._version = e
.version, i.recalculateAllPanes(), i.invalidate(new Y(Y.FULL_UPDATE)), i
.properties().saveDefaults(), i.properties().listeners().fire(this._properties), i
.properties().scalesProperties.textColor.listeners().fire(i.properties()
.scalesProperties.textColor), i.properties().paneProperties.background
.listeners().fire(i.properties().paneProperties.background), J(!1)
}, E.prototype.undo = function() {
this._merge(this._oldChartProps, this._oldSeriesProps), this._model.mainSeries()
.onChartStyleChanged(), this._model.updateScales(), this._model.chartThemeLoaded()
}, E.prototype.redo = function() {
this._merge(this._newChartProps, this._newSeriesProps), this._model.mainSeries()
.onChartStyleChanged(), this._model.updateScales(), this._model.chartThemeLoaded()
}, inherit(D, at), D.prototype._merge = function(t) {
var e, i, o, n, r, s, a, l, c, h, u, d, p = this._model.model(),
_ = p.mainSeries();
for (_.priceScale().properties().lockScale.setValue(!1), t.interval && _.properties()
.interval.setValue(t.interval), e = [], i = p.panes(), o = i.length; o--;)
for (n = i[o], r = n.containsMainSeries(), s = n.dataSources(), a = s.length; a--;)
l = s[a],
(!r || l instanceof it) && (l.isRemovedByStudyTemplates() || e.push(l), p
.removeSource(l));
for (c = t.panes, function(t, e) {
return t.dataSources().some(function(t) {
return t.alert && t.alert().id === e.alert.id
})
}, o = 0; o < c.length; o++) {
for (h = !1, u = c[o], a = 0; a < u.sources.length; a++) l = u.sources[a],
"MainSeries" === l.type && (delete l.state, h = !0), -1 !== u.leftAxisSources
.indexOf(l.id) && -1 === this._newSourcesPriceScalesNames.indexOf("left") &&
this._newSourcesPriceScalesNames.push("left"), -1 !== u.rightAxisSources
.indexOf(l.id) && -1 === this._newSourcesPriceScalesNames.indexOf("right") &&
this._newSourcesPriceScalesNames.push("right");
if (n = null, n = h ? i[o] : p.createPane(o), n.restoreState(c[o], !1, t.version),
h)
for (d = 0; d < e.length; d++) e[d].restore && e[d].restore()
}
_.priceScale().setAutoScale(!0), p._version = t.version, p.startNotStartedStudies(), p
.recalculateAllPanes(), p.invalidate(new Y(Y.FULL_UPDATE))
}, D.prototype.redo = function() {
var t, e, i, o;
for (this._merge(this._newProps), t = this._model.model(), t.mainSeries()
.onChartStyleChanged(), e = this._model.model().mainSeries().properties(), i = this
._model.model().mainSeries().properties().priceAxisProperties, this._model
._preparePriceAxisProperties(e, i), t._recalcVisibleRangeStudy(t.dataSources(), !0),
o = 0; o < this._newSourcesPriceScalesNames.length; o++) t.setPriceScaleVisibility(
this._newSourcesPriceScalesNames[o], !0)
}, D.prototype.undo = function() {
this._merge(this._oldProps), this._model.model().mainSeries().onChartStyleChanged(),
this._model.model().setLeftPriceScaleVisible(this._oldShowLeftScale), this._model
.model().setRightPriceScaleVisible(this._oldShowRightScale)
}, inherit(V, at), V.prototype.redo = function() {
this._cw.screen.show().done(function() {
this._property.setValue(this._value, this._forceSetProperty)
}.bind(this))
}, V.prototype.undo = function() {
this._cw.screen.show().done(function() {
this._property.setValue(this._prevValue, this._forceSetProperty)
}.bind(this))
}, inherit(R, at), R.prototype.redo = function() {
var t, e, i, o, n, r, s, a, l, c, h;
if (this._lineState) r = this._model.restoreSource(!1, this._paneIndex, null, this
._lineState, null);
else {
for (t = this._originalSource, e = t.priceScale(), i = this._model.paneForSource(t),
o = TradingView.className(t.constructor), n = t.properties().clone(), r = H
.create(o, this._model, n, null, t.ownerSource()), r.setOwnerSource(t
.ownerSource()), r.properties().visible._value = !0, r._fixedPoints = r
._fixedPoints.concat(t._fixedPoints), s = 0; s < r._fixedPoints.length; s++) r
._fixedPoints[s] = r._fixedPoints[s].add(new W(20, 20));
a = t._timePoint, l = this._withoutShift ? TradingView.clone(a) : O(a, t
.ownerSource()), c = t._points, h = c, r.restorePoints(l, h), r.cloneData &&
r.cloneData(t), i.addDataSource(r, e), this._model.updateSource(r), r
.checkAlert && r.checkAlert(), this._paneIndex = this._model.panes().indexOf(i),
G.drawOnAllCharts().value() && this._model.copyToOtherCharts(r), this
._lineState = r.state()
}
}, R.prototype.undo = function() {
this._lineState || dt.logError("This command was never executed - nothing to undo");
var t = this._model.dataSourceForId(this._lineState.id);
this._model.removeSource(t)
}, R.prototype.clonedLineToolId = function() {
return this._lineState.id
}, inherit(B, at),
B.prototype.redo = function() {
delete this._model.dataSourceForId(this._sourceId).linkKey
}, B.prototype.undo = function() {
this._model.dataSourceForId(this._sourceId).linkKey = this._linkKey
}, inherit(z, at), z.prototype.redo = function() {
var t, e, i, o, n, r, s, a, l, c = this._model.panes()[this._paneIndex],
h = c.dataSourceForId(this._clipboardData.source.ownerSource) || c.mainDataSource();
this._sourceState || (t = !0, e = this._clipboardData.source.state.symbol, i = c
.mainDataSource(), o = i.symbol ? i.symbol() : "", n = e === o, n && (
h instanceof tt && (t = !1), h instanceof it && (t = !h.metaInfo()
.is_price_study)), r = TradingView.clone(this._clipboardData.source),
delete r.state.symbol, t ? (s = this._model, a = function(t) {
var e = t.x * s.timeScale().width(),
i = t.y * h.priceScale().height();
return new W(e, i)
}, r.points = this._clipboardData.geometry.map(function(t) {
var e, i = a(t),
o = s.timeScale().coordinateToIndex(i.x),
n = s.timeScale().normalizeBarIndex(o);
return n.price = h.priceScale().coordinateToPrice(i.y), h
.priceScale().isPercent() && (e = h.firstValue(), n.price = h
.priceScale().priceRange().convertFromPercent(n.price, e)),
n
})) : this._model._id === this._clipboardData.modelId && h.id() === this
._clipboardData.source.ownerSource && (r.points = O(this._clipboardData.source
.points, h)), r.id = nt.guid(), this._sourceState = r), l = c
._restoreLineTool(this._sourceState, null, !1), l.calcIsActualSymbol(), l
.setOwnerSource(h), l.setPriceScale(h.priceScale()), h.priceScale().addDataSource(
l), l.createServerPoints(), this._model.invalidate(new Y(Y.LIGHT_UPDATE, !0))
}, z.prototype.undo = function() {
var t, e;
this._sourceState || dt.logError("This command was never executed - nothing to undo"),
t = this._model.panes()[this._paneIndex], e = t.dataSourceForId(this._sourceState
.id), this._model.removeSource(e)
}, inherit(F, at), F.prototype.redo = function() {
var t, e, i, o;
this._sourceState || (t = TradingView.clone(this._clipboardData.source), t.id = nt
.guid(), this._sourceState = t), e = null, i = null, this._sourceState.metaInfo
.is_price_study ? (e = this._model.paneForSource(this._model.mainSeries()), i = this
._model.mainSeries().priceScale()) : (e = this._model.createPane(), i = e
.defaultPriceScale()), o = e._restoreStudy(this._sourceState), o.start(), o
.setPriceScale(i), e.move(o, i)
}, F.prototype.undo = function() {
this._sourceState || dt.logError("This command was never executed - nothing to undo");
var t = this._model.dataSourceForId(this._sourceState.id);
this._model.removeSource(t)
}, inherit(N, at), N.prototype.setPoint = function(t) {
this._point = t.clone(), this._handler(t)
}, N.prototype.point = function() {
return this._point
}, N.prototype.undo = function() {
this._handler(this._origPoint)
}, N.prototype.redo = function() {
this._handler(this._point)
}, e.ChartUndoModel = o
}).call(e, i(10))
},
function(t, e, i) {
"use strict";
var o, n, r, s;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(9), r = i(72), s = function(t) {
function e(e, i, o, n) {
void 0 === n && (n = !0);
var r = t.call(this, o, n) || this;
return r._model = e, r._savedState = i.state(!0), r
}
return o.__extends(e, t), e.prototype.redo = function() {
this._toggleState()
}, e.prototype.undo = function() {
this._toggleState()
}, e.prototype._getSource = function() {
return n.ensureNotNull(this._model.dataSourceForId(this._savedState.id))
}, e.prototype._toggleState = function() {
var t = this._getSource(),
e = this._savedState;
this._savedState = t.state(!0), this._model.restoreLineToolState(t, e)
}, e
}(r.UndoCommand), e.SaveLineToolStateUndoCommand = s
},
function(t, e, i) {
"use strict";
var o, n, r;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(72), r = function(t) {
function e(e, i, o) {
var n = t.call(this, o) || this;
return n._source = e, n._newState = i, n._oldState = e.properties().state(), n
}
return o.__extends(e, t), e.prototype.redo = function() {
this._source.applyTemplate(this._newState)
}, e.prototype.undo = function() {
this._source.applyTemplate(this._oldState)
}, e
}(n.UndoCommand), e.ApplyLineToolTemplateUndoCommand = r
},
function(t, e, i) {
"use strict";
(function(e) {
function o(t, e) {
this.chart = t, this._properties = t.properties().scalesProperties, this.contextMenu = null,
this._disableContextMenu = !!e, this.jqRow = $(document.createElement("tr")), this
.jqLhsTimeAxisStub = $(document.createElement("td")), this.jqLhsTimeAxisStub.addClass(
"chart-markup-table"), this.jqLhsTimeAxisStub.appendTo(this.jqRow), this.jqLhsStub =
$("<div>"), this.jqLhsStub.css("width", "100%"), this.jqLhsStub.css("height", "100%"),
this.jqLhsStub.css("position", "relative"), this.jqLhsStub.css("overflow", "hidden"),
this.jqLhsStub.appendTo(this.jqLhsTimeAxisStub), this.lhsCanvas = f(this.jqLhsStub,
new m(16, 16)), $(this.lhsCanvas).css("position", "absolute"), $(this.lhsCanvas)
.css("z-order", "2"), $(this.lhsCanvas).css("left", 0), $(this.lhsCanvas).css("top", 0),
this.lhsCtx = this.lhsCanvas.getContext("2d"), this.jqCell = $(document.createElement(
"td")), this.jqCell.appendTo(this.jqRow), this.jqCell.addClass(
"chart-markup-table"), this.jqCell.addClass("time-axis"), this.jqCell.height(25),
this
._dv = $("<div>"), this._dv.css("width", "100%"), this._dv.css("height", "100%"), this
._dv.css("position", "relative"), this._dv.css("overflow", "hidden"), this._dv.appendTo(
this.jqCell), this.canvas = f(this._dv, new m(16, 16)), $(this.canvas).css(
"position", "absolute"), $(this.canvas).css("z-order", "2"), $(this.canvas).css(
"left", 0), $(this.canvas).css("top", 0), this.ctx = this.canvas.getContext("2d"),
this.top_canvas = f(this._dv, new m(16, 16)), $(this.top_canvas).css("position",
"absolute"), $(this.top_canvas).css("z-order", "1"), $(this.top_canvas).css("left",
0), $(this.top_canvas).css("top", 0), this.top_ctx = this.top_canvas.getContext(
"2d"), this.jqRhsTimeAxisStub = $(document.createElement("td")), this
.jqRhsTimeAxisStub.addClass("chart-markup-table"), this.jqRhsTimeAxisStub.appendTo(this
.jqRow), this.jqRhsStub = $("<div>"), this.jqRhsStub.css("width", "100%"), this
.jqRhsStub.css("height", "100%"), this.jqRhsStub.css("position", "relative"), this
.jqRhsStub.css("overflow", "hidden"), this.jqRhsStub.appendTo(this.jqRhsTimeAxisStub),
this.rhsCanvas = f(this.jqRhsStub, new m(16, 16)), $(this.rhsCanvas).css("position",
"absolute"), $(this.rhsCanvas).css("z-order", "2"), $(this.rhsCanvas).css("left",
0), $(this.rhsCanvas).css("top", 0), this.rhsCtx = this.rhsCanvas.getContext("2d"),
this
.restoreDefaultCursor(), this.update(), this._minVisibleSpan = b.MINUTE_SPAN,
g(this.jqCell, this, !0), this.updatePriceScalesVisibility()
}
var n, r, s, a, l, c, h, u, d, p, _, f, m, g, v, y, b;
i(943), n = i(164).PriceAxisWidget, r = i(1).LineDataSource, s = i(155), a = i(52), l = a
.ActionSeparator, c = i(108), h = i(22), u = i(130), d = u.resizeCanvas, p = u
.hardResizeCanvas, _ = u.clearRect, f = u.addCanvasTo, m = u.Size, g = i(107)
.setMouseEventHandler, v = i(40).trackEvent, y = i(156).makeFont, b = i(350), o.prototype
._BORDER_SIZE = 1, o.prototype._OFFSET_SIZE = 1, o.prototype._TICK_LENGTH = 3, o.prototype
.backgroundColor = function() {
return this.chart.properties().paneProperties.background.value()
}, o.prototype.lineColor = function() {
return this._properties.lineColor.value()
}, o.prototype.textColor = function() {
return this._properties.textColor.value()
}, o.prototype.fontSize = function() {
return this._properties.fontSize.value()
}, o.prototype.baseFont = function() {
return y(this.fontSize(), "Arial", "")
}, o.prototype.baseBoldFont = function() {
return y(this.fontSize(), "Arial", "bold")
}, o.prototype.rendererOptions = function() {
var t, e;
return this._rendererOptions || (this._rendererOptions = {
borderSize: this._BORDER_SIZE,
offsetSize: this._OFFSET_SIZE,
tickLength: this._TICK_LENGTH,
fontSize: NaN,
font: "",
widthCache: new s
}), t = this._rendererOptions, t.fontSize !== this.fontSize() && (e = this
.fontSize(), t.fontSize = e, t.font = this.baseFont(), t.paddingTop = Math.ceil(
Math.max(e / 4.5 - t.tickLength / 2, 0)), t.paddingBottom = Math.ceil(e /
4.5), t.paddingHorizontal = Math.ceil(e / 3), t.baselineOffset = Math.round(
this.fontSize() / 10), t.widthCache.reset()), this._rendererOptions
}, o.prototype.updatePriceScalesVisibility = function() {
var t = this.chart.properties().scalesProperties;
t.showLeftScale.value() ? this.jqLhsTimeAxisStub.css("display", "table-cell") : this
.jqLhsTimeAxisStub.css("display", "none"), t.showRightScale.value() ? this
.jqRhsTimeAxisStub.css("display", "table-cell") : this.jqRhsTimeAxisStub.css(
"display", "none")
}, o.prototype.mouseDownEvent = function(t) {
if (this._mousedown || !e.enabled("chart_zoom")) return !0;
this._mousedown = !0;
var i = this.chart.model();
i.timeScale().isEmpty() || (this.setCursor("ew-resize"), i.startScaleTime(t.localX))
}, o.prototype.mouseDownOutsideEvent = function(t) {
var e = this.chart.model();
!e.timeScale().isEmpty() && this._mousedown && (this._mousedown = !1, e.endScaleTime(),
this.restoreDefaultCursor())
}, o.prototype.pressedMouseMoveEvent = function(t) {
var e, i, o = this.chart.model();
o.timeScale().isEmpty() || (e = !1, i = (new Date).valueOf(), this
._lastScrollScaleTime && i - this._lastScrollScaleTime < 100 && (e = !0), e || (
o.scaleTimeTo(t.localX), this._lastScrollScaleTime = i))
}, o.prototype.mouseUpEvent = function(t) {
this._mousedown = !1;
var e = this.chart.model();
e.timeScale().isEmpty() || (e.endScaleTime(), this.restoreDefaultCursor())
}, o.prototype.contextMenuEvent = function(t, i) {
!this._disableContextMenu && e.enabled("scales_context_menu") && this
._createContextMenu().show(t)
}, o.prototype._createContextMenu = function() {
return c.createMenu(this.getContextMenuActions(), {
statName: "TimeScaleContextMenu"
})
}, o.prototype.getContextMenuActions = function() {
var t, i, o = this.chart;
return o.model().mainSeries().createSessStudy(), o.updateActions(), t = o.actions(),
i = e.enabled("charting_library_base") ? [t.timeScaleReset, new l, t.applyTimeZone,
t.sessionBreaks
] : [t.timeScaleReset, new l, t.applyTimeZone, t.sessionBreaks, t.extendedHours], e
.enabled("timezone_menu") || i.splice(2, 1), e.enabled(
"show_chart_property_page") && e.enabled(
"chart_property_page_timezone_sessions") &&
t.tmzProperties && i.push(new l, t.tmzProperties), i
}, o.prototype.mouseClickEvent = function(t) {}, o.prototype.mouseDoubleClickEvent =
function(t) {
v("GUI", "Double click time scale"), this.chart.model().resetTimeScale()
}, o.prototype.optimalHeight = function() {
var t = this.rendererOptions();
return Math.ceil(t.offsetSize + t.borderSize + t.tickLength + t.fontSize + t
.paddingTop + t.paddingBottom)
}, o.prototype.setSize = function(t, e, i) {
this.size && this.size.equals(t) || (this.lhsStubSize = e, d(this.lhsCanvas, e), this
.jqLhsTimeAxisStub.width(e.w), this.jqLhsTimeAxisStub.height(e.h), this
.rhsStubSize = i, d(this.rhsCanvas, i), this.jqRhsTimeAxisStub.width(i.w), this
.jqRhsTimeAxisStub.height(i.h), this.size = t, d(this.canvas, t), d(this
.top_canvas, t), this.lhsCanvas.getContext("2d"), this.rhsCanvas.getContext(
"2d"), this.canvas.getContext("2d"), this.top_canvas.getContext("2d"), this
.jqCell.width(t.w), this.jqCell.height(t.h))
}, o.prototype._spanIndex = function(t) {
for (var e = [b.MINUTE_SPAN, b.HOUR_SPAN, b.DAY_SPAN, b.MONTH_SPAN, b.YEAR_SPAN], i = e
.length - 1; i > 0;) {
if (e[i] <= t) return i;
i--
}
return i
}, o.prototype._spanOffset = function(t, e) {
if (e < t) throw Error("actual span cuold not be less then base");
return this._spanIndex(e) - this._spanIndex(t)
}, o.prototype.update = function() {
var t, e;
this.chart.model() && (t = this.chart.model().timeScale().marks()) && (e = this, this
._minVisibleSpan = b.YEAR_SPAN, $.each(t, function() {
e._minVisibleSpan = Math.min(this.span, e._minVisibleSpan)
}))
}, o.prototype._hightlightBackground = function(t, e) {
var i, o, n, r, s = this.chart.model(),
a = s.timeScale(),
l = e[0].index,
c = e[0].index;
for (i = 1; i < e.length; i++) l = Math.min(l, e[i].index), c = Math.max(c, e[i].index);
o = a.indexToCoordinate(l), n = a.indexToCoordinate(c), r = "rgba(109, 158, 235, 0.3)",
_(t, o, 1, n - o, this.size.h - 1, r)
}, o.prototype.drawBackground = function(t) {
var e, i, o, n, s;
if (_(t, 0, 0, this.size.w, this.size.h, this.backgroundColor()), e = this.chart
.model()) {
if (i = e.timeScale(), (o = e.model().selectedSource()) && o instanceof r && !i
.isEmpty()) {
if (n = o.axisPoints(), 0 === n.length) return;
this._hightlightBackground(t, n)
}
s = e.model().crossHairSource(), s.startMeasurePoint() && this
._hightlightBackground(t, s.measurePoints())
}
}, o.prototype.drawBorder = function(t) {
t.save(), t.fillStyle = this.lineColor(), t.fillRect(-.5, .5, this.size.w + .5, this
._BORDER_SIZE), t.restore()
}, o.prototype.drawStubs = function() {
var t, e = this._BORDER_SIZE,
i = 2 * this._BORDER_SIZE,
o = this.lhsCtx;
_(o, 0, 0, this.lhsStubSize.w, this.lhsStubSize.h, this.backgroundColor()), o
.fillStyle = this.lineColor(), o.fillRect(this.lhsStubSize.w - i - .5, .5, i, e), o
.fillRect(this.lhsStubSize.w - i - .5, -.5, e, e), t = this.rhsCtx, _(t, 0, 0, this
.rhsStubSize.w, this.rhsStubSize.h, this.backgroundColor()), t.fillStyle = this
.lineColor(), t.fillRect(-.5, .5, i, e), t.fillRect(.5, -.5, e, e)
}, o.prototype.drawTickMarks = function(t) {
var e, i, o, n, r, s, a, l, c, h, u, d = this.chart.model().timeScale().marks();
if (d && 0 !== d.length) {
for (e = d.reduce(function(t, e) {
return t.span > e.span ? t : e
}, d[0]).span, e > 30 && e < 40 && (e = 30), t.save(), t.strokeStyle = this
.lineColor(), i = this.rendererOptions(), o = i.borderSize + i.tickLength + i
.paddingTop + i.fontSize - i.baselineOffset, t.textAlign = "center", t
.translate(.5, .5), t.fillStyle = this.lineColor(), t.beginPath(), n = d
.length; n--;) t.rect(d[n].coord, i.borderSize, 1, i.tickLength);
for (t.fill(), t.fillStyle = this.textColor(), r = {}, s = this.baseFont(), a = this
.baseBoldFont(), n = 0; n < d.length; n++) l = d[n].span >= e ? a : s, c = r[
l] || [], c.push(d[n]), r[l] = c;
for (h in r)
for (t.setFont(h), u = r[h], n = 0; n < u.length; n++) t.fillText(u[n].label, u[
n].coord, o);
t.restore()
}
}, o.prototype.drawBackLabels = function(t) {
var e, i, o, n, r, s, a, l;
for (t.save(), e = this.chart.model().dataSources(), i = this.chart.model(), o = i
.sourceBeingMoved() || i.lineBeingEdited() || i.lineBeingCreated(), n = this
.rendererOptions(), r = 0; r < e.length; r++)
if ((s = e[r]) !== this.chart.model().crossHairSource() && s !== o && s
.timeAxisViews && (a = s.timeAxisViews()))
for (l = 0; l < a.length; l++) a[l].renderer().draw(t, n);
t.restore()
}, o.prototype.drawCrossHairLabel = function(t) {
var e, i, o, n, r;
if (this.top_ctx.clearRect(-.5, -.5, this.size.w, this.size.h), e = this.chart.model(),
i = e.sourceBeingMoved() || e.lineBeingEdited() || e.lineBeingCreated(), o = this
.rendererOptions(), i) {
if (t.save(), i.timeAxisViews && (n = i.timeAxisViews()))
for (r = 0; r < n.length; r++) n[r].renderer().draw(t, o);
return void t.restore()
}
if (t.save(), n = this.chart.model().crossHairSource().timeAxisView())
for (r = 0; r < n.length; r++) n[r].renderer().draw(t, o);
t.restore()
}, n.prototype.hardResetCanvas = function() {
this.size && (p(this.canvas, this.size), p(this.top_canvas, this.size))
}, o.prototype.paint = function(t) {
if (0 !== t)
if (t === h.UPDATE_CURSOR_ONLY) this.drawCrossHairLabel(this.top_ctx);
else {
var e = this.ctx;
this.drawBackground(e), this.drawBorder(e), this.drawStubs(), this.chart
.model() && (this.drawTickMarks(e), this.drawBackLabels(e), this
.drawCrossHairLabel(this.top_ctx))
}
}, o.prototype.setStubVisible = function(t, e) {
var i = n.isLeft(t) ? this.jqLhsTimeAxisStub : this.jqRhsTimeAxisStub;
e ? i.css("display", "table-cell") : i.css("display", "none")
}, o.prototype.restoreDefaultCursor = function() {
this.setCursor("")
}, o.prototype.setCursor = function(t) {
var e = "";
"grabbing" !== t && "ew-resize" !== t || (e = "time-axis--cursor-" + t), this
._currentCursorClassName !== e && (this._currentCursorClassName && this.jqCell
.removeClass(this._currentCursorClassName), e && this.jqCell.addClass(e), this
._currentCursorClassName = e, this.jqCell.css("cursor"))
}, o.prototype.image = function() {
var t = {};
return t.content = this.canvas.toDataURL(), t.contentWidth = this.size.w, t
.contentHeight = this.size.h, t.lhsStub = {}, t.lhsStub.content = this.lhsCanvas
.toDataURL(), t.lhsStub.contentWidth = this.lhsStubSize.w, t.lhsStub.contentHeight =
this.lhsStubSize.h, t.rhsStub = {}, t.rhsStub.content = this.rhsCanvas.toDataURL(),
t.rhsStub.contentWidth = this.rhsStubSize.w, t.rhsStub.contentHeight = this
.rhsStubSize.h, t
}, t.exports = o
}).call(e, i(5))
},
function(t, e) {},
function(t, e, i) {
"use strict";
function o(t, e, i) {
this._chart = t, this._parent = e,
this.zoom_active = !1, this._real = i, this._state = "stop", this._controlBarVisible = !1, this
._boundMouseHandler = null, this._pressedKey = {}, this._checkIntId = 0, this.init(), i && this
.initToRealChart(), this.initHandlers()
}
var n = i(22),
r = i(248);
o.prototype.init = function() {
this._widget = $('<div class="control-bar-wrapper">'), this._controlBar = $(
'<div class="control-bar control-bar--hidden">').append($(i(214)).attr("class",
"move-left-button-control-bar")).append($(i(945)).attr("class",
"zoom-out-right-button-control-bar")).append($(i(946)).attr("class",
"turn-button-control-bar")).append($(i(947)).attr("class",
"zoom-in-button-control-bar")).append($(i(359)).attr("class",
"move-right-button-control-bar")).appendTo(this._widget), this._buttons = {
zoomIn: this._widget.find(".zoom-in-button-control-bar"),
zoomOut: this._widget.find(".zoom-out-right-button-control-bar"),
moveLeft: this._widget.find(".move-left-button-control-bar"),
moveRight: this._widget.find(".move-right-button-control-bar"),
turn: this._widget.find(".turn-button-control-bar")
}, this._initVisibility(), this._widget.appendTo(this._parent)
}, o.prototype.destroy = function() {
this._visibilityTypeProperty && (this._visibilityTypeProperty.unsubscribe(this, this
._onVisibilityTypeChange), this._visibilityTypeProperty = null), this
._boundMouseHandler && (this._parent[0].removeEventListener("mousemove", this
._boundMouseHandler, !1), this._parent[0].removeEventListener("mouseleave", this
._boundMouseHandler, !1), this._boundMouseHandler = null), this._boundKeydownHandler &&
(this._parent[0].ownerDocument.removeEventListener("keydown", this._boundKeydownHandler),
this._boundKeydownHandler = null), this._boundKeyupHandler && (this._parent[0]
.ownerDocument.removeEventListener("keyup", this._boundKeyupHandler), this
._boundKeyupHandler = null), clearTimeout(this._movingTimeout), this
._onRHSPriceAxisWidth && (this._chart.rhsPriceAxisWidthChanged.unsubscribe(this, this
._onRHSPriceAxisWidth), this._onRHSPriceAxisWidth = null), this._chart && this._chart
.model() && this._chart.model().model().clearInterval(this._checkIntId), this._chart = null
}, o.prototype._initVisibility = function() {
this._visibilityTypeProperty = r.actualBehavior(), this._visibilityTypeProperty.subscribe(this,
this._onVisibilityTypeChange), this._onVisibilityTypeChange()
}, o.prototype._onVisibilityTypeChange = function() {
var t = this._visibilityTypeProperty.value();
"alwaysOn" === t || "alwaysOff" === t ? (this._controlBarVisible = "alwaysOn" === t, this
._boundMouseHandler && (this._parent[0].removeEventListener("mousemove", this
._boundMouseHandler, !1), this._parent[0].removeEventListener("mouseleave", this
._boundMouseHandler, !1), this._boundMouseHandler = null)) : (this
._controlBarVisible = !1, this._boundMouseHandler || (this._boundMouseHandler = this
._visibilityMouseHandler.bind(this), this._parent[0].addEventListener("mousemove",
this._boundMouseHandler, !1), this._parent[0].addEventListener("mouseleave",
this._boundMouseHandler, !1))), this._updateControlBarVisibility()
}, o.prototype._visibilityMouseHandler = function(t) {
var e, i, o, n;
t.buttons || (e = this._chart.model()) && e.lineBeingCreated() || (i = !1, o = 100,
"mousemove" === t.type && (n = this._widget[0].getBoundingClientRect(), i = t.clientX >=
n.left - o && t.clientX <= n.right + o && t.clientY >= n.top - o && t.clientY <= n
.bottom + o), this._controlBarVisible !== i && (this._controlBarVisible = i, this
._rafId || (this._rafId = this._controlBar[0].ownerDocument.defaultView
.requestAnimationFrame(this._updateControlBarVisibility.bind(this)))))
}, o.prototype._updateControlBarVisibility = function() {
this._rafId = void 0, this._controlBar[0].classList.toggle("control-bar--hidden", !this
._controlBarVisible)
}, o.prototype.initToRealChart = function() {
var t = this;
this._back = $(i(948)).attr({
class: "back-to-present js-hidden"
}).appendTo(this._parent), this._backButtonVisible = !1, this._back.on("click", function() {
t._chart.model().timeScale().scrollToRealtime(!0), t._chart.model().model()
._invalidateHandler(new n(n.FULL_UPDATE))
}), this._onRHSPriceAxisWidth = function() {
var e = t._chart.maxRhsPriceAxisWidth + 4;
e && t._back.css("marginRight", e)
}, this._chart.rhsPriceAxisWidthChanged.subscribe(this, this._onRHSPriceAxisWidth), this
._onRHSPriceAxisWidth(), this._chart.withModel(this, function() {
this._chart && (this._checkIntId = this._chart.model().model().setInterval(
function() {
t.check()
}, 1e3))
})
}, o.prototype.check = function() {
var t = this._chart.model(),
e = !!t && t.timeScale().rightOffset() < 0;
e !== this._backButtonVisible && (this._backButtonVisible = e, this._backButtonVisible ? this
._back.attr("class", "back-to-present") : this._back.attr("class",
"back-to-present js-hidden"))
}, o.prototype._move = function(t) {
var e, i;
"stop" === this._state && this._chart.model().beginUndoMacro(1 === t ? "Move Left" :
"Move Right"), this._state = "moving", this._moveType = "animated", this
._deferredFinishTimeout && (clearTimeout(this._deferredFinishTimeout), this
._deferredFinishTimeout = 0), this._finishingTimeout && (clearTimeout(this
._finishingTimeout), this._finishingTimeout = 0), this._startTime = +new Date, this
._movingTimeout || (e = this._startTime, i = 10, this._movingTimeout = setTimeout(
function o() {
this._moveStep.call(this, e, 0, 50 * t, 1e3), this._movingTimeout = setTimeout(o
.bind(this), i)
}.bind(this), i))
}, o.prototype._moveStep = function(t, e, i, o) {
var n, r, s;
if (!this._chart.model().timeScale().isEmpty()) return n = Date.now(), n < t && (t = n), r = (
n - t) / o, (r > 1 || !isFinite(r)) && (r = 1), s = 1 - Math.pow(1 - r, 3), this
.currentDistance = (i - e) * s + e, this._chart.model().scrollChart(this
.currentDistance), r
}, o.prototype._finishMove = function(t) {
var e, i;
clearTimeout(this._movingTimeout), this._movingTimeout = 0, this._deferredFinishTimeout = 0, e =
this.currentDistance, i = +new Date, this._finishingTimeout = setTimeout(function t() {
this._moveStep.call(this, i, e, 0, 700) < 1 ? this._finishingTimeout = setTimeout(t
.bind(this), 10) : (this._state = "stop", this._moveType = "", this
._movingTimeout = 0, this.currentDistance = 0, this._chart.model()
.endUndoMacro())
}.bind(this), 10)
}, o.prototype._stopMove = function(t) {
"moving" === this._state && (this._state = "wait_finishing", (new Date).getTime() - this
._startTime < 200 ? this._deferredFinishTimeout = setTimeout(this._finishMove.bind(
this), 200 - ((new Date).getTime() - this._startTime)) : this._finishMove())
}, o.prototype._moveByBar = function(t) {
var e, i, o, n, r = this._chart.model().timeScale();
r.isEmpty() || ("stop" === this._state && this._chart.model().beginUndoMacro(1 === t ?
"Move Left" : "Move Right"), e = r.indexToCoordinate(r.visibleBars().lastBar()) + r
.barSpacing() / 2, Math.abs(r.width() - e) > r.barSpacing() / 6 && this._chart.model()
.scrollChart(r.width() - e), this._state = "moving", this._moveType = "by_bar", this
._startTime = +new Date, this._movingTimeout || (i = 400, o = 150, n = 0, this
._movingTimeout = setTimeout(function e() {
this._moveByBarStep(t), n++, o > 100 && (o -= n / 5 * 20), this
._movingTimeout = setTimeout(e.bind(this), o)
}.bind(this), i), this._moveByBarStep(t)))
}, o.prototype._moveByBarStep = function(t) {
this._chart.model().timeScale().isEmpty() || this._chart.model().scrollChartByBar(t)
}, o.prototype._stopMoveByBar = function(t) {
"moving" === this._state && (clearTimeout(this._movingTimeout), this._movingTimeout = 0, this
._state = "stop", this._moveType = "", this._movingTimeout = 0, this.currentDistance =
0, this._chart.model().endUndoMacro())
}, o.prototype._keydownHandler = function(t) {
if (!t.metaKey && !(37 !== t.which && 39 !== t.which || this._pressedKey[t.which] || (this
._pressedKey[t.which] = !0, $(t.target).closest("input, textarea").length))) {
var e = 37 === t.which ? 1 : -1;
t.ctrlKey || t.altKey ? this._move(e) : this._moveByBar(e), t.preventDefault()
}
}, o.prototype._keyupHandler = function(t) {
37 !== t.which && 39 !== t.which || $(t.target).closest("input, textarea").length || (this
._pressedKey[t.which] = !1, "by_bar" === this._moveType ? this._stopMoveByBar() : this
._stopMove())
}, o.prototype.initHandlers = function() {
var t = this._chart,
e = Modernizr.touch ? "touchstart" : "mousedown",
i = Modernizr.touch ? "touchend" : "mouseup mouseout";
this._buttons.moveLeft.on(e, this._moveByBar.bind(this, 1)), this._buttons.moveLeft.on(i, this
._stopMoveByBar.bind(this, 1)), this._buttons.moveRight.on(e, this._moveByBar.bind(this,
-1)), this._buttons.moveRight.on(i, this._stopMoveByBar.bind(this, -1)), this._buttons
.moveLeft.on("click", function(t) {
t.preventDefault()
}), this._buttons.moveRight.on("click", function(t) {
t.preventDefault()
}), this._buttons.turn.on("click", function(e) {
e.preventDefault(), t.GUIResetScales()
}), this._buttons.zoomOut.on("click", function(e) {
e.preventDefault(), t.model() && t.model().zoomOut()
}), this._buttons.zoomIn.on("click", function(e) {
e.preventDefault(), t.model() && t.model().zoomIn()
}), this._boundKeydownHandler = this._keydownHandler.bind(this), this._parent[0]
.ownerDocument.addEventListener("keydown", this._boundKeydownHandler), this
._boundKeyupHandler = this._keyupHandler.bind(this), this._parent[0].ownerDocument
.addEventListener("keyup", this._boundKeyupHandler)
}, t.exports = o
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 120 120" width="16" height="16"><path d="M28 50h65v17H28z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="-58 -18 120 120" width="16" height="16"><path d="M31 13C23.4 5.3 12.8.5 1.1.5c-23.3 0-42.3 19-42.3 42.5s18.9 42.5 42.3 42.5c13.8 0 26-6.6 33.7-16.9l-16.5-1.8C13.5 70.4 7.5 72.5 1 72.5c-16.2 0-29.3-13.2-29.3-29.4S-15.2 13.7 1 13.7c8.1 0 15.4 3.3 20.7 8.6l-10.9 11h32.5V.5L31 13z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 140 140" width="16" height="16"><path d="M112 60H78V26H61v34H27v17h34v34h17V77h34z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 14.8 13.4" enable-background="new 0 0 14.8 13.4"><path d="M8 6.7L1.7 0 .1 1.7l4.7 4.9-4.8 5 1.7 1.8L8 6.7zm6.8 0L8.4 0 6.8 1.7l4.7 4.9-4.8 5 1.7 1.8 6.4-6.7z"/></svg>'
},
function(t, e, i) {
"use strict";
(function(e) {
function o(t) {
var i, o, n, a, l, h = this,
d = this._chartWidget = t.chartWidget;
this.$parent = t.parent, this._dateRangesPopupList = [], this._goToPopupBtn = [], this
._iterativeHide = [], this._timeFormatter = new r, this._currentRange = window
.urlParams && window.urlParams.range || "", this._$seriesControls = $(document
.createElement("div")).attr("class",
"chart-controls-bar-buttons chart-series-controls").appendTo(t.parent), this
._$timezoneButton = $('<a class="apply-common-tooltip" title="' + $.t("Timezone") +
'"><span class="chart-controls-clock"></span><span class="chart-controls-tz"></span></a>'
), e.enabled("fundamental_widget") || this._$timezoneButton.appendTo(this
._$seriesControls), !d.onWidget() && e.enabled("timezone_menu") ? c(h
._$timezoneButton,
function() {
var t, e, i, o, n;
if (d.updateActions(), t = [], !(e = d.actions()) || !e.applyTimeZone || !e
.applyTimeZone.subActions) return t;
for (i = e.applyTimeZone.subActions, o = 0; o < i.length; ++o) n = i[o], t
.push({
action: n.enabled ? n.executeCallback.bind(n) : null,
addClass: n.enabled ? "" : "special",
disabled: !n.enabled,
iconClass: n.checkable && n.checked ? "icon checked-icon" :
"unchecked-icon",
svg: n.checkable && n.checked ? u : "",
title: n.text
});
return t
}, {
direction: "up",
addClass: "context-menu",
svg: !0,
wrapIcon: !0
}) : this._$timezoneButton.addClass("disabled"), this._$timezoneClock = this
._$timezoneButton.find(".chart-controls-clock"), this._$timezoneName = this
._$timezoneButton.find(".chart-controls-tz"), d.onWidget() || e.enabled(
"charting_library_base") ? this._$extendedHoursButton = null : (this
._$extendedHoursButton = $(document.createElement("a")).text($.t("ext")).attr(
"title", $.t(
"The Extended Trading Hours feature is available only for intraday charts"))
.addClass("apply-common-tooltip").appendTo(this._$seriesControls), this
._iterativeHide.push(this._$extendedHoursButton)), this._$percButton = $(document
.createElement("a")).text("%").attr("title", $.t("Toggle Percentage")).addClass(
"apply-common-tooltip").appendTo(this._$seriesControls), e.enabled(
"fundamental_widget") && (this._$percButton.css("display", "inline-block"),
urlParams.percentage && this._$percButton.addClass("active")), this._iterativeHide
.push(this._$percButton), this._$logButton = $(document.createElement("a")).text($.t(
"log")).attr("title", $.t("Toggle Log Scale")).addClass("apply-common-tooltip"), e
.enabled("fundamental_widget") || this._$logButton.appendTo(this._$seriesControls), this
._iterativeHide.push(this._$logButton), this._$autoScaleButton = $(document
.createElement("a")).text($.t("auto", {
context: "scale"
})).attr("title", $.t("Toggle Auto Scale")).addClass("apply-common-tooltip"), e.enabled(
"fundamental_widget") || this._$autoScaleButton.appendTo(this._$seriesControls),
this._iterativeHide.push(this._$autoScaleButton), i = null, e.enabled(
"main_series_scale_menu") && !e.enabled("fundamental_widget") && (i = $(document
.createElement("a")).attr("title", $.t("Scales Properties")).addClass(
"apply-common-tooltip").appendTo(this._$seriesControls)), this
._$fullscreenChartButton = $(document.createElement("a")).attr("title", $.t(
"Toggle Maximize Chart")).addClass("apply-common-tooltip").appendTo(this
._$seriesControls), this._iterativeHide.push(this._$timezoneButton), o =
"http://www.w3.org/2000/svg", n = $(document.createElementNS(o, "svg")).attr({
width: 12,
height: 12
}).css({
fill: "currentColor",
stroke: "none",
margin: "1px"
}), $(document.createElementNS(o, "desc")).text("SP").appendTo(n), $(document
.createElementNS(o, "path")).attr({
d: "M 11.896733,5.4401 C 11.201602,5.2497118 10.287185,5.3844905 9.8529668,4.6739798 9.3680407,3.9899631 9.7713075,3.1150758 10.335646,2.6255445 10.81759,2.1397596 10.086625,1.2464141 9.5348331,1.5679918 9.0096065,2.0197899 8.3586515,2.5915907 7.6081884,2.2860159 6.8487054,2.0572252 6.6657258,1.2214292 6.6611579,0.52971682 6.6904416,-0.14270317 5.5547878,-0.19920111 5.3509206,0.33932112 5.3495604,1.0614071 5.216111,1.980668 4.4411277,2.2733721 3.718985,2.58432 3.0421913,2.0835985 2.5447076,1.6132218 2.019086,1.2075468 1.1733117,2.0525503 1.6258135,2.5522279 2.1291674,3.0522349 2.6067846,3.7947509 2.23627,4.5142319 1.9382627,5.2487851 1.0997484,5.3013165 0.42629601,5.3591295 -0.18586111,5.4121559 -0.1726988,6.614951 0.4382476,6.6606553 1.1701866,6.6354301 2.0901088,6.8653212 2.3114865,7.6677973 2.5690397,8.4182506 1.9757702,9.0009969 1.5707544,9.5375753 1.260194,10.111116 2.1887088,10.863746 2.6392394,10.30714 3.1282414,9.7691412 3.9518015,9.3917137 4.6315605,9.8249999 5.3287279,10.186762 5.2619381,11.018963 5.3869987,11.672161 5.5440075,12.215504 6.7794125,12.12358 6.6535582,11.446999 6.6654072,10.746236 6.9028479,9.8947057 7.6677558,9.6885901 8.4182253,9.4312024 9.000933,10.024446 9.5375381,10.429439 10.111007,10.739871 10.863873,9.8114259 10.307197,9.360908 9.7691358,8.8719351 9.3913098,8.0483184 9.8250144,7.3685614 10.18688,6.6714752 11.018948,6.7380091 11.672226,6.6131264 12.162952,6.4957229 11.998177,5.7860369 11.896733,5.4401 z M 5.999918,8.8061 C 4.4052236,8.8574703 3.0094365,7.3092614 3.2012542,5.7303585 3.3197775,4.2414555 4.7798203,3.0282413 6.2655218,3.2004993 7.7296227,3.3187202 8.9364572,4.7279379 8.805387,6.1941362 8.7186344,7.6148699 7.4347334,8.84471 5.999918,8.8061 z"
}).appendTo(n), i && i.append(n), a = $(document.createElementNS(o, "svg")).attr({
width: 12,
height: 12
}).css({
fill: "currentColor",
stroke: "none",
margin: "1px"
}), a.get(0).setAttribute("viewBox", "0 0 24 24"), $(document.createElementNS(o,
"desc")).text("FS").appendTo(a), $(document.createElementNS(o, "path")).attr({
d: "M0 0v9l3.5-3.5 4.5 4.5h2v-2l-4.5-4.5 3.5-3.5h-9zm15 0l3.5 3.5-4.5 4.5v2h2l4.5-4.5 3.5 3.5v-9h-9zm-7 14l-4.5 4.5-3.5-3.5v9h9l-3.5-3.5 4.5-4.5v-2h-2zm6 0v2l4.5 4.5-3.5 3.5h9v-9l-3.5 3.5-4.5-4.5h-2z"
}).appendTo(a), this._$fullscreenChartButton.append(a), this._$percButton.on("click",
function(t) {
var e, i, o, n;
t.preventDefault(), e = d.model(), i = e.mainSeries(), o = i.priceScale(), n = o
.properties(), i.priceScale().isLockScale() || (e.beginUndoMacro($.t(
"Toggle Percentage")), n.log.value() && e.setLogProperty(n.log, !1,
o, $.t("Toggle Log Scale")), e.setPercentProperty(n.percentage, !n
.percentage.value(), o, $.t("Toggle Percentage")), e.endUndoMacro())
}), this._$logButton.on("click", function(t) {
var e, i, o, n;
t.preventDefault(), e = d.model(), i = e.mainSeries(), o = i.priceScale(), n = o
.properties(), i.priceScale().isLockScale() || (e.beginUndoMacro($.t(
"Toggle Log Scale")), n.percentage.value() && e.setPercentProperty(n
.percentage, !1, o, $.t("Toggle Percentage")), e.setLogProperty(n
.log, !n.log.value(), o, $.t("Toggle Log Scale")), e.endUndoMacro())
}), this._$autoScaleButton.on("click", function(t) {
var e, i, o, n;
t.preventDefault(), e = d.model(), i = e.mainSeries(), o = i.priceScale(), n = o
.properties(), e.beginUndoMacro($.t("Toggle Auto Scale")), n.autoScale
.value() && n.percentage.value() && e.setPercentProperty(n.percentage, !1,
o, $.t("Toggle Percentage")), e.setAutoScaleProperty(n.autoScale, !n
.autoScale.value(), o, $.t("Toggle Auto Scale")), e.endUndoMacro()
}), i && c(i, function() {
var t, e, i, o, n, r, a, l = d.paneWidgets();
for (t = 0; t < l.length; ++t)
if (e = l[t], e.containsMainSeries()) {
if (i = [], !(o = e.getDefaultPriceAxisWidget())) return i;
for (n = o.getContextMenuActions(), r = 0; r < n.length; ++r) a = n[r],
a instanceof s ? i.push({
separator: !0
}) : i.push({
action: a.enabled ? a.executeCallback.bind(a) : null,
addClass: a.enabled ? "" : "special",
disabled: !a.enabled,
iconClass: a.checkable && a.checked ? "icon checked-icon" :
"unchecked-icon",
svg: a.checkable && a.checked ? u : "",
title: a.text
});
return i
} return []
}, {
direction: "up",
addClass: "context-menu",
reverse: !0,
svg: !0,
wrapIcon: !0
}), this._$extendedHoursButton && this._$extendedHoursButton.on("click", function(t) {
var e, i;
t.preventDefault(), e = d.model(), i = e.mainSeries().properties()
.extendedHours, e.setProperty(i, !i.value(), "Extended Hours")
}), this._$dateRangesWrap = $(document.createElement("div")).addClass(
"chart-controls-bar-buttons date-range-wrapper").appendTo(t.parent), this
._$dateRangesBtn = $(document.createElement("a")).addClass("date-range-btn").text($.t(
"Date Range")).appendTo(this._$dateRangesWrap), this._$dateRanges = $(document
.createElement("div")).addClass("date-range-list").appendTo(this._$dateRangesWrap),
d.withModel(null, function() {
var t = d.model(),
i = t.mainSeries(),
o = i.priceScale();
this.updateScaleButtons(), i.priceScaleChanged.subscribe(this, this
.updateScaleButtons), o.properties().autoScale.subscribe(this, this
.updateScaleButtons), this.updateDateRangeButtons(), i.onStatusChanged()
.subscribe(this, this.updateDateRangeButtons), e.enabled(
"update_timeframes_set_on_symbol_resolve") && i.onSymbolResolved()
.subscribe(this, this.updateDateRangeButtons), i.priceScale().properties()
.lockScale.subscribe(this, this.updateDateRangeButtons), !TradingView
.onWidget() && e.enabled("go_to_date") && (this.gotoDateButton(), i
.onStatusChanged().subscribe(this, this.gotoDateButton)), this
.updateExtendedHoursButton(), i.properties().extendedHours.subscribe(this,
this.updateExtendedHoursButton),
i.properties().interval.subscribe(this, this.updateExtendedHoursButton), t
.model().mainSeries().onSymbolResolved().subscribe(null, this
.updateTimezonesButton.bind(this)), t.model().properties().timezone
.subscribe(null, this.updateTimezonesButton.bind(this))
}.bind(this)), this.updateFullscreenChartButton(), l = this._chartWidget
._chartWidgetCollection, l && (l.layout.subscribe(this.updateFullscreenChartButton.bind(
this)), l.maximizeCurrentChart.subscribe(this.updateFullscreenChartButton.bind(
this)), this._$fullscreenChartButton.on("click", function() {
l.activeChartWidget.setValue(d), l.maximizeCurrentChart.setValue(!l
.maximizeCurrentChart.value())
}), this.checkTimezonesButton(l.activeChartWidget.value()), l.activeChartWidget
.subscribe(this.checkTimezonesButton.bind(this))), d.onScroll().subscribe(this, this
._resetCurrentRange), d.withModel(null, function() {
d.model().model().onResetScales().subscribe(h, h._resetCurrentRange), d.model()
.mainSeries().onSymbolResolved().subscribe(h, h._resetCurrentRange), d
.model().mainSeries().properties().extendedHours.subscribe(h, h
._resetCurrentRange), d.model().mainSeries().onIntervalChanged()
.subscribe(null, function(t, e) {
e && h._currentRange === e.timeframe || h._resetCurrentRange()
})
})
}
var n = i(358).showGoToDateDialog,
r = i(135).TimeFormatter,
s = i(52).ActionSeparator,
a = i(332).parseTzOffset,
l = i(133),
c = l.bindPopupMenu,
h = l.unbindPopupMenu,
u = i(146);
o.prototype._resetCurrentRange = function() {
this._currentRange && (this._$dateRanges.find(".date-range-preset-btn").removeClass(
"active"), this._currentRange = null)
}, o.prototype.updateScaleButtons = function() {
var t = this._chartWidget.model().mainSeries(),
e = t.priceScale().properties(),
i = e.log.value(),
o = e.percentage.value(),
n = e.autoScale.value();
this._$logButton.toggleClass("active", i), this._$percButton.toggleClass("active", o),
this._$autoScaleButton.toggleClass("active", n)
}, o.prototype.updateDateRangeButtons = function() {
var t, e, i, o, n, r, s = this._chartWidget,
a = s.model().mainSeries().status();
if (a !== TradingView.Series.STATUS_LOADING && a !== TradingView.Series
.STATUS_RESOLVING) {
if (t = s._dateRangeResolutions(), e = function(t, e) {
this._$dateRanges.find(".date-range-preset-btn").removeClass("active"), e
.addClass("active"), this._currentRange = e.data("value"), s.model()
.loadRange(t)
}, this._dateRangesPopupList = [], t.length)
for (this._$dateRanges.empty(), i = 0; i < t.length; i++) o = t[i], n = $(
document.createElement("a")).text(o.text).attr("title", o.description ||
o.text).addClass("date-range-preset-btn apply-common-tooltip").data(
"value", o.value), o.value === this._currentRange && n.addClass(
"active"), r = e.bind(this, {
val: o.value,
res: o.targetResolution
}, n), n.appendTo(this._$dateRanges).click(r), this._dateRangesPopupList
.push({
title: o.description || o.text,
action: r
});
this.updateTimeframePopupMenu()
}
}, o.prototype.gotoDateButton = function() {
var t, e;
this._goToPopupBtn = [], this._chartWidget._dateRangeResolutions().length > 0 && (
t = $
.t("Go to..."), e = function() {
n(this._chartWidget.model())
}.bind(this),
$(document.createElement("a")).text(t).addClass(
"js-goto-date-btn apply-common-tooltip").attr("title", "Alt+G")
.appendTo(
this._$dateRanges).click(e), this._goToPopupBtn.push({
title: t,
action: e
})), this.updateTimeframePopupMenu()
}, o.prototype.updateTimeframePopupMenu = function() {
this._$dateRangesBtn.toggleClass("i-hidden", !(this._dateRangesPopupList.length || this
._goToPopupBtn.length)), h(this._$dateRangesBtn), c(this._$dateRangesBtn, this
._dateRangesPopupList.concat(this._goToPopupBtn), {
direction: "up",
addClass: "date-range-popupmenu"
}), this.resizeUI()
}, o.prototype.updateTimezonesButton = function() {
var t, e, i;
null !== this._chartWidget.model().mainSeries().symbolInfo() && (t = this._chartWidget
.model().model().timezone(), "exchange" === t && (e = this._chartWidget.model()
.mainSeries().symbolInfo().timezone) && (t = e), i = a(t), this.tzOffset = i
.offset, this._$timezoneName.text("(" + i.string + ")"), this.tickClock(), this
.resizeUI())
}, o.prototype.checkTimezonesButton = function(t) {
this._$timezoneButton.toggleClass("i-invisible", t !== this._chartWidget), this
.resizeUI()
}, o.prototype.tickClock = function() {
void 0 !== this.tzOffset && this._$timezoneClock.text(this._timeFormatter.format(
new Date(Date.now() + this.tzOffset + 1e3 * ChartApiInstance
.serverTimeOffset())))
}, o.prototype.updateExtendedHoursButton = function() {
if (this._$extendedHoursButton) {
this._chartWidget.model().mainSeries().properties().extendedHours.value() ? this
._$extendedHoursButton.addClass("active") : this._$extendedHoursButton
.removeClass("active"), this.resizeUI()
}
}, o.prototype.updateFullscreenChartButton = function() {
var t = this._chartWidget._chartWidgetCollection;
if (!t || "s" === t.layout.value()) return void this._$fullscreenChartButton.addClass(
"i-hidden");
this._$fullscreenChartButton.removeClass("i-hidden"), this._$fullscreenChartButton
.toggleClass("active", t.maximizeCurrentChart.value()), this.resizeUI()
}, o.prototype.updateUI = function() {
this.updateScaleButtons(), this.resizeUI()
}, o.prototype.resizeUI = function() {
var t, e, i, o, n, r, s;
if (this._$seriesControls && this._$dateRanges) {
for (this.$parent.addClass("i-measure"), t = this.$parent.width(), e = this
._$dateRanges.width(), i = this._$dateRangesBtn.outerWidth(), o = 0, this
._$seriesControls.find("a").each(function() {
var t = $(this);
t.hasClass("i-hidden") || (o += t.outerWidth())
}), n = o, r = 0; r < this._iterativeHide.length; r++) this._iterativeHide[r]
.hasClass("i-hidden") || (s = this._iterativeHide[r].outerWidth(), this
._iterativeHide[r].toggleClass("i-compact", t - i < n), n -= s);
this._$dateRangesWrap.toggleClass("i-compact", e > t - o), this.$parent.removeClass(
"i-measure")
}
}, t.exports = o
}).call(e, i(5))
},
function(t, e, i) {
"use strict";
function o(t, e) {
i.e(5).then(function(o) {
i(414).showSymbolInfoDialog(t, e)
}.bind(null, i)).catch(i.oe)
}
Object.defineProperty(e, "__esModule", {
value: !0
}), e.showSymbolInfoDialog = o
},
function(t, e, i) {
"use strict";
(function(t, o) {
function n(t) {
return t && t.__esModule ? t : {
default: t
}
}
function r(t, e) {
if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
}
var s, a, l, c, h, u, d;
Object.defineProperty(e, "__esModule", {
value: !0
}), e.CompareTab = void 0, s = function() {
function t(t, e) {
var i, o;
for (i = 0; i < e.length; i++) o = e[i], o.enumerable = o.enumerable || !1, o
.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t,
o.key, o)
}
return function(e, i, o) {
return i && t(e.prototype, i), o && t(e, o), e
}
}(), a = i(71), l = n(a), c = i(40), i(361), i(296), i(952), h =
'\n\t<div class="tv-compare-tab">\n\t\t<input type="text" class="tv-control-input js-compare-tab-input" placeholder="' +
$.t("Company Comparison") + '" autocomplete="off">\n\t</div>', u =
'<div class="tv-compare-tab__predefines js-compare-tab-predefines"></div>', d =
'\n\t<div class="tv-compare-tab__predefine-cell">\n\t\t<label for="{{symbolId}}">\n\t\t\t<span class="tv-control-checkbox">\n\t\t\t\t<input class="tv-control-checkbox__input js-predefine-checkbox" type="checkbox" id="{{symbolId}}">\n\t\t\t<span class="tv-control-checkbox__box tv-compare-tab__checkbox-box">' +
i(146) +
'</span>\n\t\t\t<span class="tv-control-checkbox__ripple js-ripple"></span>\n\t\t\t</span>\n\t\t\t<span class="tv-control-checkbox__label tv-compare-tab__checkbox-label">{{label}}</span>\n\t\t</label>\n\t</div>',
e.CompareTab = function() {
function e(t, i) {
r(this, e), this._chartWidgetCollection = t, this._dialog = i, this._$popup = null,
this._predefines = {}, this._symbolAlias = {}, this.init()
}
return s(e, [{
key: "addCompareSymbol",
value: function(t, e, i) {
var o, n, r, s, a, l, h = this._chartWidgetCollection
.activeChartWidget.value();
if (h && (o = h.model())) {
for (n = o.mainSeries().interval(), r = o.studiesMetaData(),
s = void 0, a = 0; a < r.length; a++)
"Compare@tv-basicstudies" === r[a].id && (s = r[a]);
return l = {
exchange: i,
inputs: {
symbol: t,
resolution: n
}
}, (0, c.trackEvent)("GUI", "Add Compare"), o
.insertStudy(s, l)
}
}
}, {
key: "removeCompareSymbol",
value: function(t) {
var e, i = this,
o = this._chartWidgetCollection.activeChartWidget.value();
o && (e = o.model()) && e.dataSources().forEach(function(o) {
if (o._metaInfo && "Compare@tv-basicstudies" === o
._metaInfo.id) {
var n = o.properties().inputs.symbol.value();
(n === t || i._symbolAlias[n] && i._symbolAlias[
n] === t) && e.removeSource(o)
}
})
}
}, {
key: "init",
value: function() {
var e, i, o, n = this,
r = this._chartWidgetCollection.activeChartWidget.value();
r && (e = r.model()) && (i = e.dataSources(), this.$tab = $(h),
this._initSymbolSearch(), t.enabled(
"charting_library_base") || (this
._createPredefinesList(), o = this.$tab.find(
".js-compare-tab-predefines"), o.find(
".js-predefine-checkbox").attr("checked", !1),
Object.keys(this._predefines).forEach(function(t) {
var e = n._symbolToId(t),
r = o.find("#" + e);
i.forEach(function(e) {
if (e._metaInfo &&
"Compare@tv-basicstudies" ===
e._metaInfo.id) {
var i = e.properties()
.inputs.symbol.value();
(i === t || n._symbolAlias[
i] && n
._symbolAlias[i] === t
) && r.attr("checked", !
0)
}
})
})))
}
}, {
key: "_initSymbolSearch",
value: function() {
var t = this;
this._$input = this.$tab.find(".js-compare-tab-input"), l
.default.bindToInput(this._$input, {
callback: function(e) {
return t.addCompareSymbol(e)
},
onPopupOpen: function(e) {
e.css("z-index", t._dialog.getZIndex()), t
._$popup = e
},
onPopupClose: function() {
t._$popup = null
},
keepFocus: !0,
clearAfterAccept: !0
})
}
}, {
key: "_createPredefinesList",
value: function() {
function t(t) {
var e = this;
setTimeout(function() {
if ($(e).is(":checked")) {
i.addCompareSymbol(t.data.symbol) || $(e)
.attr("checked", !1)
} else i.removeCompareSymbol(t.data.symbol)
})
}
var e = this,
i = this,
n = $(u);
Object.keys(this._predefines).forEach(function(i) {
var r = $(o.render(d, {
symbolId: e._symbolToId(i),
label: e._predefines[i]
}));
r.find(".js-predefine-checkbox").change({
symbol: i
}, t), r.appendTo(n)
}), n.appendTo(this.$tab)
}
}, {
key: "_symbolToId",
value: function(t) {
return t.replace(/[^a-z0-9]/gi, "_")
}
}, {
key: "focus",
value: function() {
Modernizr.touch || this._$input.focus()
}
}, {
key: "isClickOnTab",
value: function(t) {
return !!this._$popup && !(this._$popup[0] !== t.target && !this
._$popup[0].contains(t.target))
}
}]), e
}()
}).call(e, i(5), i(41))
},
function(t, e) {},
function(t, e, i) {
"use strict";
function o(t) {
return t && t.__esModule ? t : {
default: t
}
}
function n(t, e) {
if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
}
var r, s, a, l, c;
Object.defineProperty(e, "__esModule", {
value: !0
}), e.AddSymbolTab = void 0, r = function() {
function t(t, e) {
var i, o;
for (i = 0; i < e.length; i++) o = e[i], o.enumerable = o.enumerable || !1, o
.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(t, o.key,
o)
}
return function(e, i, o) {
return i && t(e.prototype, i), o && t(e, o), e
}
}(), s = i(71), a = o(s), l = i(318), i(361), i(954), c =
'\n\t<div class="tv-add-symbol-tab">\n\t\t<input type="text" class="tv-control-input js-add-symbol-tab-input" placeholder="' +
$.t("Symbol") +
'" autocomplete="off">\n\t\t<div class="tv-add-symbol-tab__add-symbol-overlay js-add-symbol-tab-checkbox"></div>\n\t</div>',
e.AddSymbolTab = function() {
function t(e, i) {
n(this, t), this._chartWidgetCollection = e, this._dialog = i, this._$popup = null, this
.init()
}
return r(t, [{
key: "init",
value: function() {
var t = this;
this.$tab = $(c), this._$input = this.$tab.find(
".js-add-symbol-tab-input"), this._checkbox = new l
.AddSymbolCheckbox({
labelRight: $.t("Overlay the main chart"),
labelAddClass: "tv-add-symbol-tab__checkbox-label",
boxAddClass: "tv-add-symbol-tab__checkbox-box"
}), this.$tab.find(".js-add-symbol-tab-checkbox").append(this
._checkbox.$el), a.default.bindToInput(this._$input, {
callback: function(e) {
var i = t._chartWidgetCollection.activeChartWidget
.value();
i && i.addSymbol(e, t._checkbox.checked)
},
onPopupOpen: function(e) {
e.css("z-index", t._dialog.getZIndex()), t._$popup =
e
},
onPopupClose: function() {
t._$popup = null
},
keepFocus: !0,
clearAfterAccept: !0
})
}
}, {
key: "focus",
value: function() {
Modernizr.touch || this._$input.focus()
}
}, {
key: "isClickOnTab",
value: function(t) {
return !!this._$popup && !(this._$popup[0] !== t.target && !this
._$popup[0].contains(t.target))
}
}]), t
}()
},
function(t, e) {},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c, h, u, d, p;
Object.defineProperty(e, "__esModule", {
value: !0
}), i(956), o = i(243), i(43), n = i(31), r = i(957), s = i(10), a = i(214), l = i(359), c = i(24),
function(t) {
t[t.Left = 0] = "Left", t[t.Right = 1] = "Right"
}(h || (h = {})), u = {
saveTab: "",
noSlider: !1,
onTabClick: !1,
loadedClass: "i-loaded",
tabsContainerClass: "tv-tabs",
tabClass: "tv-tabs__tab",
tabDisabledClass: "disabled",
activeTabClass: "i-active",
activePageClass: "active",
sliderClass: "tv-tabs__slider",
scrollBoxClass: "tv-tabs__scroll-box",
scrollWrapClass: "tv-tabs__scroll-wrap",
lArrowClass: "tv-tabs__left-arrow",
rArrowClass: "tv-tabs__right-arrow"
}, d = {
leftArrow: a,
rightArrow: l
}, p = function() {
function t(t, e, i) {
void 0 === i && (i = {}), this._animating = !1, this._prevWidth = -1, this._bindings = [],
this._options = r.deepExtend({}, u, i), this.tabChanged = new s, this._elTabs = t, this
._elPages = e, this._elScrollWrap = this._findOrCreateElement(this._options
.scrollWrapClass || "", this._elTabs, "wrapInner"), this._elScrollBox = this
._findOrCreateElement(this._options.scrollBoxClass || "", this._elScrollWrap,
"wrapInner"), this._elArrowLeft = this._findOrCreateElement(this._options
.lArrowClass || "", this._elTabs, "append", '<div class="' + (this._options
.lArrowClass || "") + ' i-slided">' + d.leftArrow + "</div>"), this
._elArrowRight = this._findOrCreateElement(this._options.rArrowClass || "", this
._elTabs, "append", '<div class="' + (this._options.rArrowClass || "") +
' i-slided">' + d.rightArrow + "</div>"), this._options.noSlider || (this
._elSlider = this._findOrCreateElement(this._options.sliderClass || "", this
._elScrollBox, "append")), this._addClass(this._elArrowLeft, this._options
.addLeftArrowsClass), this._addClass(this._elArrowRight, this._options
.addRightArrowsClass), this._addClass(this._elScrollBox, this._options
.addScrollBoxClass), this._addClass(this._elTabs, this._options.tabsContainerClass),
this._addClass(this.getTabsArray(), this._options.tabClass), this._addClass(this
._elTabs, this._options.loadedClass), "string" == typeof this._options.sliderMod &&
this._addClass(this._elSlider, this._options.sliderClass + "--" + this._options
.sliderMod), this.checkScrollArrows(!0), this._initActivePage(), this._bindEvents()
}
return t.prototype.getTabsArray = function() {
var t, e, i, o = this._elScrollBox.children;
if (!this._options.sliderClass) return Array.prototype.slice.call(o);
for (t = [], e = 0; e < o.length; e++) i = o[e], i.classList.contains(this._options
.sliderClass) || t.push(i);
return t
}, t.prototype.getPagesArray = function() {
return this._elPages ? Array.prototype.slice.call(this._elPages.children) : []
}, t.prototype.getElTabs = function() {
return this._elTabs
}, t.prototype.getElPages = function() {
return this._elPages
}, t.prototype.checkScrollArrows = function(t) {
function e(t) {
t.classList.remove("i-slided"), $.Velocity && $.Velocity.animate(t, {
translateX: "0%"
}, {
duration: n.dur / 2,
easing: "easeOutCubic",
queue: !1
})
}
function i(e, i) {
if (t) return e.classList.add("i-slided"), void e.setAttribute("style", "");
var r = i === h.Left ? "-100%" : "100%";
o.lazyVelocity().then(function() {
$.Velocity.animate(e, {
translateX: r
}, {
complete: function() {
return e.classList.add("i-slided")
},
duration: n.dur / 2,
easing: "easeOutCubic",
queue: !1
})
})
}
var r, s, a, l;
void 0 === t && (t = !1), r = Math.ceil(this._elScrollWrap.scrollLeft), s = this
._getElWidth(this._elScrollWrap), a = 10, l = this._elScrollWrap.scrollWidth - s,
r >= a ? e(this._elArrowLeft) : (r <= a || this._elScrollWrap.scrollWidth <= s) &&
i(this._elArrowLeft, h.Left), l - r > 1 ? e(this._elArrowRight) : (r >= l || this
._elScrollWrap.scrollWidth <= s) && i(this._elArrowRight, h.Right)
}, t.prototype.index = function() {
var t = this.getElActiveTab();
return t ? this.getTabsArray().indexOf(t) : -1
}, t.prototype.getElActiveTab = function() {
return this._getActiveElement(this.getTabsArray(), this._options.activeTabClass || "",
this._options.inactiveTabClass)
}, t.prototype.getElActivePage = function() {
return this._getActiveElement(this.getPagesArray(), this._options.activePageClass || "",
this._options.inactivePageClass)
}, t.prototype.setActivePage = function(t, e, i) {
function o(e, i, o) {
e.forEach(function(e, n) {
var r = t === n,
s = e.classList;
i && s.toggle(i, r), o && s.toggle(o, !r)
})
}
if (-1 !== t && (t !== this.index() || i)) {
var n = this.index();
o(this.getTabsArray(), this._options.activeTabClass, this._options
.inactiveTabClass), o(this.getPagesArray(), this._options.activePageClass,
this
._options.inactivePageClass), this._options.noSlider || this.updateSlider(n,
t, e), this._options.saveTab && c.setValue(this._options.saveTab, t), this
.tabChanged.fire(t)
}
}, t.prototype.updateSlider = function(t, e, i) {
var r, s, a, l, c, h, u = this;
this._options.noSlider || (r = this.getTabsArray()[e], 0 === r.clientWidth || 0 === r
.clientHeight || "none" === window.getComputedStyle(r).getPropertyValue(
"display") || (s = window.getComputedStyle(r), a = r.offsetLeft + parseInt(s
.getPropertyValue("padding-left")), l = this._getElWidth(r), c = r
.querySelector(".js-tabs__slider-pos"), c && (h = window.getComputedStyle(
c), a += parseInt(h.getPropertyValue("padding-left")) + c
.offsetLeft,
l -= l - this._getElWidth(c)), i = i || -1 === t || document.all && !
window.atob, i ? (this._elSlider.style.left = a + "px", this._elSlider.style
.width = l + "px") : (this._animating = !0, o.lazyVelocity().then(
function() {
$.Velocity.animate(u._elSlider, {
left: a
}, {
duration: n.dur,
easing: "easeOutCubic",
queue: !1
}), $.Velocity.animate(u._elSlider, {
width: l
}, {
complete: function() {
u._animating = !1
},
duration: n.dur,
easing: "easeOutCubic",
queue: !1
})
}))))
}, t.prototype.onTabClick = function(t) {
var e = t.currentTarget || t.target,
i = this.getTabsArray().indexOf(e); - 1 === i || this._isTabDisabled(e) || this
.setActivePage(i), document.activeElement.blur(), t.preventDefault()
}, t.prototype.resizeSlider = function() {
var t, e;
this._options.noSlider || (t = this._elTabs.offsetWidth) !== this._prevWidth && (this
._prevWidth = t, e = this.index(), this.updateSlider(e, e, !0))
}, t.prototype.count = function() {
return this.getTabsArray().length
}, t.prototype.add = function(t, e) {
this._elScrollBox.appendChild(t), this._elPages && e && this._elPages.appendChild(e),
this._bindTabEvents(t), this.checkScrollArrows(!0)
}, t.prototype.remove = function(t) {
function e(t) {
t.parentElement && t.parentElement.removeChild(t)
}
var i, o, n = this.tabAt(t);
n && (this._unbindTabEvents(n), e(n)), i = this.pageAt(t), i && e(i), o = t - 1 >= 0 ?
t - 1 : 0, this.setActivePage(o), this.checkScrollArrows(!0)
}, t.prototype.indexOfTab = function(t) {
return this.getTabsArray().indexOf(t)
}, t.prototype.indexOfPage = function(t) {
return this.getPagesArray().indexOf(t)
}, t.prototype.pageAt = function(t) {
return this.getPagesArray()[t] || null
}, t.prototype.tabAt = function(t) {
return this.getTabsArray()[t] || null
}, t.prototype.deselect = function(t) {
var e, i = this.getElActiveTab();
return this._options.activeTabClass && i && i.classList.remove(this._options
.activeTabClass), e = this.getElActivePage(), this._options.activePageClass &&
e && e.classList.remove(this._options.activePageClass),
this._elSlider && (this._elSlider.style.left = "", this._elSlider.style.width = ""),
this
}, t.prototype.stop = function() {
this._unbindEvents({})
}, t.prototype._getElWidth = function(t) {
if (0 === t.offsetWidth) return 0;
var e = window.getComputedStyle(t);
return t.offsetWidth - parseFloat(e.getPropertyValue("padding-left")) - parseFloat(e
.getPropertyValue("padding-right")) - parseFloat(e.getPropertyValue(
"border-left-width")) - parseFloat(e.getPropertyValue("border-right-width"))
}, t.prototype._findOrCreateElement = function(t, e, i, o) {
var n, r, s, a = e.querySelector("." + t);
if (!a)
if (n = document.createElement("div"), n.innerHTML = o || '<div class="' + t +
'"></div>', a = n.firstElementChild, "append" === i) e.appendChild(a);
else {
if ("wrapInner" !== i) throw Error("Unknown insertMethod");
for (r = Array.prototype.slice.call(e.childNodes), s = 0; s < r.length; s++) a
.appendChild(r[s]);
e.appendChild(a)
} return a
}, t.prototype._addClass = function(t, e) {
if ("string" == typeof e) {
Array.isArray(t) || (t = [t]);
var i = e.split(/\s+/);
t.forEach(function(t) {
i.forEach(function(e) {
t.classList.add(e)
})
})
}
}, t.prototype._initActivePage = function() {
var t, e = 0;
this._options.saveTab && (e = c.getInt(this._options.saveTab, 0)), t = this.index(), -
1 !== t && (e = t), void 0 !== this._options.activeTab && (e = this._options
.activeTab), this.setActivePage(e, !0, !0)
}, t.prototype._bindEvents = function() {
var t, e = this;
this.getTabsArray().forEach(this._bindTabEvents.bind(this)), this._bindOneEvent({
eventName: "scroll",
listener: this.checkScrollArrows.bind(this, !1),
target: this._elScrollWrap
}), this._bindOneEvent({
eventName: "touchstart",
listener: function(t) {
var i = e._elScrollWrap.scrollLeft,
o = t.touches[0].clientX,
n = function(t) {
var n = o - t.touches[0].clientX;
e._elScrollWrap.scrollLeft = i + n
},
r = function(t) {
e._elScrollWrap.removeEventListener("touchmove", n), e
._elScrollWrap.removeEventListener("touchend", r)
};
e._elScrollWrap.addEventListener("touchmove", n), e._elScrollWrap
.addEventListener("touchend", r)
},
target: this._elScrollWrap
}), this._bindOneEvent({
eventName: "click",
listener: function(t) {
var i = e.getTabsArray(),
r = 0,
s = !1,
a = e._elScrollWrap.scrollLeft;
i.forEach(function(t) {
if (!s) {
var e = t.offsetLeft + t.offsetWidth;
e > a ? s = !0 : r = e
}
}), o.lazyVelocity().then(function() {
$.Velocity.animate(e._elScrollWrap, "scroll", {
axis: "x",
container: $(e._elScrollWrap),
duration: n.dur / 2,
easing: "easeInOutCubic",
offset: Math.floor(r - a - e._getElWidth(e
._elArrowLeft)),
queue: !1
})
})
},
target: this._elArrowLeft
}), this._bindOneEvent({
eventName: "click",
listener: function(t) {
var i = e.getTabsArray(),
r = 0,
s = e._elScrollWrap.scrollLeft + e._getElWidth(e._elScrollWrap);
i.forEach(function(t) {
if (0 === r) {
var e = t.offsetLeft + t.offsetWidth;
e > s && (r = e)
}
}), o.lazyVelocity().then(function() {
$.Velocity.animate(e._elScrollWrap, "scroll", {
axis: "x",
container: $(e._elScrollWrap),
duration: n.dur / 2,
easing: "easeInOutCubic",
offset: Math.ceil(r - s + e._getElWidth(e
._elArrowRight)),
queue: !1
})
})
},
target: this._elArrowRight
}), t = Array.prototype.slice.call(this._elTabs.querySelectorAll(
".js-tabs__slider-hover") || []), t.length && t.forEach(function(t) {
return e._bindOneEvent({
eventName: "mouseenter",
listener: function(t) {
if (!e._animating) {
var i = t.currentTarget;
i && e._options.activeTabClass && i.classList && i
.classList.contains(e._options
.activeTabClass) && e._hoverSlider(i)
}
},
target: t
})
}), this._bindOneEvent({
eventName: "resize",
listener: function() {
e.checkScrollArrows(!0), e._options.noSlider || e.resizeSlider()
},
target: window
})
}, t.prototype._bindTabEvents = function(t) {
var e = this;
this._bindOneEvent({
eventName: Modernizr.touch ? "touchend" : "click",
listener: function(t) {
"function" == typeof e._options.onTabClick ? e._options.onTabClick(
t) : e.onTabClick(t)
},
target: t
})
}, t.prototype._unbindTabEvents = function(t) {
this._unbindEvents({
target: t
})
}, t.prototype._bindOneEvent = function(t) {
t.target.addEventListener(t.eventName, t.listener), this._bindings.push(t)
}, t.prototype._unbindEvents = function(t) {
var e = function(e) {
return !(void 0 !== e.eventName && e.eventName !== t.eventName || void 0 !== e
.target && e.target !== t.target || void 0 !== e.listener && e
.listener !== t.listener)
};
this._bindings.filter(e).forEach(function(t) {
return t.target.removeEventListener(t.eventName, t.listener)
}), this._bindings = this._bindings.filter(function(t) {
return !e(t)
})
}, t.prototype._getActiveElement = function(t, e, i) {
var o = function(t, o, n) {
return e ? t.classList.contains(e) : !!i && !t.classList.contains(i)
};
return t.filter(o)[0] || null
}, t.prototype._isTabDisabled = function(t) {
return t.classList.contains("i-disabled") || this._options.tabDisabledClass && t
.classList.contains(this._options.tabDisabledClass) || t.hasAttribute("disabled")
}, t.prototype._hoverSlider = function(t) {
var e, i = this,
r = this._getElWidth(t),
s = window.getComputedStyle(t),
a = t.offsetLeft + parseInt(s.getPropertyValue("padding-left")) + parseInt(s
.getPropertyValue("margin-left")),
l = {
duration: n.dur / 4,
easing: "easeOutCubic",
queue: !1
};
o.lazyVelocity().then(function() {
$.Velocity.animate(i._elSlider, {
left: a
}, l), $.Velocity.animate(i._elSlider, {
width: r
}, l)
}), e = function() {
i.getElActiveTab() === t && i._unhoverSlider(t), t.removeEventListener(
"mousleave", e)
}, t.addEventListener("mouseleave", e)
}, t.prototype._unhoverSlider = function(t) {
var e = this,
i = window.getComputedStyle(t),
r = t.querySelector(".js-tabs__slider-pos"),
s = window.getComputedStyle(r),
a = t.offsetLeft + parseInt(i.getPropertyValue("padding-left")) + parseInt(i
.getPropertyValue("margin-left")) + parseInt(s.getPropertyValue(
"padding-left")) + r.offsetLeft,
l = this._getElWidth(t),
c = l - (l - this._getElWidth(r)),
h = {
duration: n.dur / 2,
easing: "easeInSine",
queue: !1
};
o.lazyVelocity().then(function() {
$.Velocity.animate(e._elSlider, {
left: a
}, h), $.Velocity.animate(e._elSlider, {
width: c
}, h)
})
}, t
}(), e.Tabs = p
},
function(t, e) {},
function(t, e, i) {
"use strict";
function o(t) {
var e, i = [];
for (e = 1; e < arguments.length; e++) i[e - 1] = arguments[e];
return t && "object" == typeof t ? 0 === i.length ? t : (i.forEach(function(e) {
void 0 !== e && null !== e && "object" == typeof e && Object.keys(e).forEach(
function(i) {
var r, s, a = t[i],
l = e[i];
l === t || (r = Array.isArray(l), l && (n(l) || r) ? (s = void 0, s =
r ? a && Array.isArray(a) ? a : [] : a && n(a) ? a : {}, t[
i] = o(s, l)) : void 0 !== l && (t[i] = l))
})
}), t) : t
}
function n(t) {
var e, i, o;
return !(!t || "[object Object]" !== Object.prototype.toString.call(t)) && (!(e = Object
.getPrototypeOf(t)) || (i = Object.hasOwnProperty.toString,
"function" == typeof(o = e.hasOwnProperty("constructor") && e.constructor) && i.call(
o) === i.call(Object)))
}
Object.defineProperty(e, "__esModule", {
value: !0
}), e.deepExtend = o
},
function(t, e) {},
function(t, e) {},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), i(12), i(961), n = i(362), r = {
invalid: "tv-market-status--invalid",
market: "tv-market-status--market",
out_of_session: "tv-market-status--out-of-session",
post_market: "tv-market-status--post-market",
pre_market: "tv-market-status--pre-market",
loading: "tv-market-status--loading",
replay: "tv-market-status--replay"
}, s = {
invalid: $.t("Invalid Symbol"),
market: $.t("Market Open"),
out_of_session: $.t("Market Closed"),
post_market: $.t("Post Market"),
pre_market: $.t("Pre Market"),
loading: $.t("Loading"),
replay: ""
}, a = {
classMap: r,
classSuffix: "",
data: {},
extraTitle: "",
labelMap: s,
short: !1,
showTooltip: !0
}, l = function(t) {
function e(e) {
var i = t.call(this) || this;
return i._quoteSessionPrefix = "market-status-indicator", i._componentClass =
"tv-market-status", i._extraTitle = "", i._init(e), i
}
return o.__extends(e, t), e.prototype.setStatus = function(t, e) {
var i = {
values: {
current_session: t
}
};
this.update(i, e)
}, e.prototype.getTooltipText = function() {
var e = t.prototype.getTooltipText.call(this);
return "" === e ? e : ("" !== this._extraTitle && (e = e + ", " + this._extraTitle), e)
}, e.prototype.setExtraTitle = function(t) {
this._extraTitle = t
}, e.prototype.reset = function() {
this._clearClasses(), this._labelEl.textContent = "", this._extraTitle = "", this._el
.setAttribute("title", ""), this._value = ""
}, e.prototype.enableShortMode = function(e) {
void 0 === e && (e = !0), void 0 !== this._labelEl && this._labelEl.classList.add(
"i-hidden"), t.prototype.enableShortMode.call(this)
}, e.prototype.disableShortMode = function() {
void 0 !== this._labelEl && this._labelEl.classList.remove("i-hidden"), t.prototype
.disableShortMode.call(this)
}, e.prototype._renderLabel = function() {
this._labelEl.textContent = this.getLabel()
}, e.prototype._getValueFromData = function(t) {
return void 0 !== t.values && void 0 !== t.values.current_session ? t.values
.current_session : this.getValue()
}, e.prototype._render = function() {
this._renderLabelElement(), this._renderDotElement(), t.prototype._render.call(this)
}, e.prototype._init = function(e) {
var i = Object.assign({}, a, e);
t.prototype._init.call(this, i), this.setExtraTitle(i.extraTitle), this._render()
}, e.prototype._renderLabelElement = function() {
void 0 === this._labelEl && (this._labelEl = document.createElement("span"), this
._labelEl.classList.add(this._componentClass + "__label"), this._labelEl
.classList.add(this._componentClass + "__label" + this._classSuffix), this._el
.appendChild(this._labelEl))
}, e.prototype._renderDotElement = function() {
void 0 === this._dotEl && (this._dotEl = document.createElement("span"), this._dotEl
.classList.add(this._componentClass + "__dot"), this._dotEl.classList.add(this
._componentClass + "__dot" + this._classSuffix), this._el.appendChild(this
._dotEl))
}, e
}(n.AbstractIndicator), e.MarketStatusIndicator = l
},
function(t, e) {},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c, h, u;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), i(12), i(102), i(963),
n = i(362), r = {
connecting: "tv-data-mode--connecting",
delayed: "tv-data-mode--delayed",
delayed_streaming: "tv-data-mode--delayed",
endofday: "tv-data-mode--endofday",
forbidden: "tv-data-mode--forbidden",
realtime: "tv-data-mode--realtime",
snapshot: "tv-data-mode--snapshot",
loading: "tv-data-mode--loading",
replay: "tv-data-mode--replay"
}, s = {
connecting: $.t("Connecting"),
delayed: $.t("Delayed"),
delayed_streaming: $.t("Delayed"),
endofday: $.t("End of Day"),
forbidden: $.t("Instrument is not allowed"),
realtime: $.t("Realtime"),
snapshot: $.t("Snapshot"),
loading: "",
replay: $.t("Replay Mode")
}, a = {
connecting: $.t("C", {
context: "data_mode_connecting_letter"
}),
delayed: $.t("D", {
context: "data_mode_delayed_letter"
}),
delayed_streaming: $.t("D", {
context: "data_mode_delayed_streaming_letter"
}),
endofday: $.t("E", {
context: "data_mode_end_of_day_letter"
}),
forbidden: $.t("F", {
context: "data_mode_forbidden_letter"
}),
realtime: $.t("R", {
context: "data_mode_realtime_letter"
}),
snapshot: $.t("S", {
context: "data_mode_snapshot_letter"
}),
loading: "",
replay: $.t("R", {
context: "data_mode_replay_letter"
})
}, l = 600, c = {
streaming: "realtime"
}, h = {
classMap: r,
classSuffix: "",
data: {
values: {
update_mode: "connecting"
}
},
labelMap: s,
modeInterval: l,
short: !1,
shortLabelMap: a,
showTooltip: !0
}, u = function(t) {
function e(e) {
var i = t.call(this) || this;
return i._quoteSessionPrefix = "data-mode-indicator", i._componentClass = "tv-data-mode", i
._init(e), i
}
return o.__extends(e, t), e.prototype.getLabel = function() {
return !0 === this._shortMode ? this._shortLabelMap[this._value] || "" : t.prototype
.getLabel.call(this)
}, e.prototype.setMode = function(t, e) {
this.update({
values: {
update_mode: t,
update_mode_seconds: e
}
})
}, e.prototype.hide = function() {
this._el.classList.add("i-hidden")
}, e.prototype.show = function() {
this._el.classList.remove("i-hidden")
}, e.prototype.getTooltipText = function() {
var t = "",
e = this.getValue();
if ("" === e) return t;
switch (e) {
case "delayed":
t = $.t("Quotes are delayed by {0} min and updated every 30 seconds");
break;
case "delayed_streaming":
t = $.t("Quotes are delayed by {0} min");
break;
default:
t = this._labelMap[e] || t
}
return ["delayed", "delayed_streaming"].includes(e) && (t = t.format(Math.round(this
._modeInterval / 60))), t
}, e.prototype._init = function(e) {
void 0 === e && (e = {});
var i = Object.assign({}, h, e);
this._modeInterval = i.modeInterval || l, this._shortLabelMap = i.shortLabelMap || a, t
.prototype._init.call(this, i), this._render()
}, e.prototype._getValueFromData = function(t) {
var e;
return e = void 0 !== t.values && void 0 !== t.values.update_mode ? t.values
.update_mode : this.getValue(), c[e] || e
}, e.prototype._updateValue = function(e, i) {
void 0 !== e.values && void 0 !== e.values.update_mode_seconds && (this._modeInterval =
e.values.update_mode_seconds), t.prototype._updateValue.call(this, e, i)
}, e
}(n.AbstractIndicator), e.DataModeIndicator = u
},
function(t, e) {},
function(t, e, i) {
"use strict";
function o() {
function t(t) {
return f && e(), f = new r.UndoMacroCommand(t)
}
function e() {
if (f) {
var t = f;
f = null, t.isEmpty() || a(t)
}
}
function i() {
if (m.isEmpty()) return !1;
var t = m.pop();
return !!t && (t.undo(), g.push(t), l.logNormal("UNDO: " + t.text()), !0)
}
function o() {
if (g.isEmpty()) return !1;
var t = g.pop();
return !!t && (t.redo(), m.push(t), l.logNormal("REDO: " + t.text()), !0)
}
function a(t) {
var e, i, o;
f ? f.addCommand(t) : (g.clear(), e = m.head(), i = e && e.text(), m.push(t), "" !== (o = t
.text()) && o !== i && l.logNormal("DO: " + o)), t.executeOnPush() && t.redo()
}
function c() {
return {
lastActualCommand: m.isEmpty() ? null : m.head()
}
}
function h(t) {
for (; !m.isEmpty() && t.lastActualCommand !== m.head();) m.pop().undo();
g.clear()
}
function u() {
return m
}
function d() {
return g
}
function p() {
m.clear(), g.clear()
}
function _(t, e, i) {
if (t.value() !== e) {
var o = new s.SetWatchedValueCommand(t, e, i);
a(o), o.redo()
}
}
var f = null,
m = new n.UndoStack,
g = new n.UndoStack;
return {
beginUndoMacro: t,
clearStack: p,
createUndoCheckpoint: c,
endUndoMacro: e,
pushUndoCommand: a,
redo: o,
redoStack: d,
setWatchedValue: _,
undo: i,
undoStack: u,
undoToCheckpoint: h
}
}
var n, r, s, a, l;
Object.defineProperty(e, "__esModule", {
value: !0
}), n = i(356), r = i(323), s = i(965), a = i(7), l = a.getLogger("Common.UndoHistory"), e
.createUndoHistory = o
},
function(t, e, i) {
"use strict";
var o, n, r;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(72), r = function(t) {
function e(e, i, o) {
var n = t.call(this, o) || this;
return n._wv = e, n._newValue = i, n._oldValue = e.value(), n
}
return o.__extends(e, t), e.prototype.redo = function() {
this._wv.setValue(this._newValue)
}, e.prototype.undo = function() {
this._wv.setValue(this._oldValue)
}, e
}(n.UndoCommand), e.SetWatchedValueCommand = r
},
function(t, e, i) {
"use strict";
function o(t, e, o) {
void 0 === e && (e = {}), i.e(2).then(function(n) {
i(178).getImageOfChart(t, e, o)
}.bind(null, i)).catch(i.oe)
}
function n(t, e, o) {
void 0 === e && (e = {}), i.e(2).then(function(n) {
i(178).getImageOfChartSilently(t, e, o)
}.bind(null, i)).catch(i.oe)
}
Object.defineProperty(e, "__esModule", {
value: !0
}), e.getImageOfChart = o, e.getImageOfChartSilently = n
},
function(t, e, i) {
"use strict";
var o, n, r, s;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(72), r = i(216), s = function(t) {
function e(e, i) {
var o = this,
n = "Change Chart Layout to " + r.layouts[i].title;
return o = t.call(this, n) || this, o._chartWidgetCollection = e, o._newLayoutType = i, o
._oldLayoutType = e.layout.value(), o
}
return o.__extends(e, t), e.prototype.redo = function() {
this._chartWidgetCollection.layout.setValue(this._newLayoutType)
}, e.prototype.undo = function() {
this._chartWidgetCollection.layout.setValue(this._oldLayoutType)
}, e
}(n.UndoCommand), e.SetChartLayoutCommand = s
},
function(t, e, i) {
"use strict";
function o(t) {
return new Promise(function(e, i) {
t.subscribe(null, e, !0)
})
}
Object.defineProperty(e, "__esModule", {
value: !0
}), e.delegateToPromise = o
},
function(t, e, i) {
"use strict";
function o(t) {
r.call(this, t);
var e = this;
a.hideMarksOnBars().subscribe(this, function() {
e._properties.visible.setValue(!a.hideMarksOnBars().value())
})
}
function n(t) {
s.call(this)
}
var r = i(106).BarsMarksContainer,
s = i(230).BarMarkTooltip,
a = i(26);
inherit(o, r), o.prototype._initialize = function(t) {
this._properties.visible.setValue(!0)
}, o.prototype.userEditEnabled = function() {
return !1
}, o.prototype._constructor = "UserDefinedBarsMarks", o.prototype._plateViewData = function(t) {
var e = {
text: t.text
};
return "object" == typeof t.color && (e.theme = "user_defined_theme", e.overridedTheme = {},
e.overridedTheme.border = t.color.border, e.overridedTheme.background = t.color
.background), e
}, o.prototype.onClicked = function() {
var t = this._model.lastHittestData().id;
this._marks[t].onClicked()
}, o.prototype.clearMarks = function() {
r.prototype.clearMarks.call(this), this.onNeedRepaint.fire()
}, o.prototype._getData = function(t) {
var e, i, o, n = this._model.mainSeries().symbolInfo();
n && (e = this.roundRange(this._rangeDifference(t)), i = this, o = this._model.mainSeries()
.properties().interval.value(), ChartApiInstance.getMarks(n, e.start, e.end, function(
e) {
e.forEach(function(t) {
i._marks[t.id] = t
}, i), i._loadedRange = i._rangeUnion(t, i._loadedRange), i.onNeedRepaint
.fire()
}, o))
}, o.prototype._createTooltip = function() {
return new n
}, o.prototype.updatePlateData = function(t, e) {
return e.barWidth = this.barWidth(), e.text = t.text, e.tooltipMargin = -1 * Math.max(t
.minSize / 2, .4 * this.barWidth()), e
}, o.prototype.hasContextMenu = function() {
return !1
}, inherit(n, s), n.prototype._createLayout = function() {
this._layout = $('<div class="bar-mark-tooltip"></div>'), this._layout_text = $(
'<div class="text"></div>').appendTo(this._layout)
}, n.prototype._updatePlate = function(t) {
this._currentId = t.id, this._layout.css("border-color", t.theme.border), this._layout.css(
"margin-top", t.tooltipMargin + "px"), this._layout_text.html(t.text), this._layout
.append(this._layout_text)
}, t.exports = o
},
function(t, e, i) {
"use strict";
function o(t) {
a.call(this, t);
var e = this;
l.hideMarksOnBars().subscribe(this, function() {
e._properties.visible.setValue(!l.hideMarksOnBars().value())
}), this._paneView = new n(this)
}
function n(t, e) {
this.source = t, this._rendererFactory = e, this.stylesCache = {}, this.templatesCache = {}, this
._lollipops = {}, this._createLollipops()
}
var r = i(8).Point,
s = i(971).ESDPaneView,
a = i(106).BarsMarksContainer,
l = i(26),
c = i(23),
h = i(363).Tooltip;
inherit(o, a), o.prototype._initialize = function(t) {
this._properties.visible.setValue(!0)
}, o.prototype.userEditEnabled = function() {
return !1
}, o.prototype._constructor = "UserDefinedTimescaleMarks", o.prototype._plateViewData = function(
t) {
return {
text: t.text
}
}, o.prototype.onClicked = function() {
var t = this._model.lastHittestData().id;
c.emit("onTimescaleMarkClick", t)
}, o.prototype.clearMarks = function() {
a.prototype.clearMarks.call(this), this._paneView.clearCaches(), this.onNeedRepaint.fire()
}, o.prototype._getData = function(t) {
var e, i, o, n = this._model.mainSeries().symbolInfo();
n && (e = this.roundRange(this._rangeDifference(t)), i = this, o = this._model.mainSeries()
.properties().interval.value(), ChartApiInstance.getTimescaleMarks(n, e.start, e.end,
function(e) {
e.forEach(function(t) {
i._marks[t.id] = t
}, i), i._loadedRange = i._rangeUnion(t, i._loadedRange), i.onNeedRepaint
.fire()
}, o))
}, o.prototype.updatePlateData = function(t, e) {
return e.barWidth = this.barWidth(), e.text = t.text, e.tooltipMargin = -1 * Math.max(t
.minSize / 2, .4 * this.barWidth()), e
}, o.prototype.hasContextMenu = function() {
return !1
}, o.prototype.paneViews = function(t) {
return this._properties.visible.value() ? [this._paneView] : []
}, o.prototype.onClickOutside = function(t) {
this._paneView.onClickOutside(t)
}, inherit(n, s), n.prototype._createLollipops = function() {
var t = this.source._model.timeScale(),
e = s.prototype._getY.call(this.source),
i = this.source._model.lastHittestData(),
o = this;
$.each(this.source._marks, function(n, s) {
var a = s.id;
o._lollipops[a] = {
id: a,
basePoint: new r(t.indexToCoordinate(t.timePointToIndex(s.tickmark)) + 1,
e),
hovered: i && i.id === a || a === o.getLastClickedLollipopId(),
barY: null,
label: s.label,
color: s.color,
items: s.tooltip,
tooltip: o._lollipops.hasOwnProperty(a) ? o._lollipops[a].tooltip : new h,
visible: !0
}
})
}, n.prototype.clearCaches = function() {
this._lollipops = {}
}, n.prototype.update = function() {
this._createLollipops()
}, n.prototype.renderer = function() {
return this.update(), s.prototype.renderer.call(this)
}, n.prototype._generateTemplateStyle = function(t, e, i) {
var o, n, r = t + e + i;
return r in this.stylesCache || (o = {
strokeStyle: e,
lineWidth: 1,
fillStyle: "white",
barLine: {
lineStyle: CanvasEx.LINESTYLE_DASHED
},
lollipop: {
width: 32,
height: 96,
circleHeight: 16,
radius: 12,
lineWidth: 1.5,
fillStyle: "white",
strokeStyle: "#E2745B",
text: {
label: i,
strokeStyle: e,
font: "normal 12px Verdana, Arial, sans-serif"
}
}
}, n = {
strokeStyle: e,
lollipop: {
fillStyle: e,
fillCircle: !0,
text: {
strokeStyle: "white"
}
}
}, this.stylesCache[r] = "default" === t ? o : $.extend(!0, {}, o, n)), this.stylesCache[r]
}, n.prototype.getTemplate = function(t, e) {
var i = t + e.color + e.label;
return i in this.templatesCache || (this.templatesCache[i] = this.createTemplate(this
._generateTemplateStyle(t, e.color, e.label))), this.templatesCache[i]
}, n.prototype.getStyle = function(t, e) {
return this._generateTemplateStyle(t, e.color, e.label)
}, n.prototype.createText = function(t, e) {
"string" == typeof t.items ? e.addTextLine(t.items) : Array.isArray(t.items) && t.items.forEach(
function(t) {
e.addTextLine(t)
})
}, n.prototype.hasTooltip = function(t) {
return !!t.tooltip && t.tooltip.length
}, t.exports = o
},
function(t, e, i) {
"use strict";
function o(t, e) {
this._lastClickedId = null, this._model = t, this._study = e, this._metaInfo = e.metaInfo(), this
._lollipops = {}, this._textCache = {}, this.templatesCache = {}, this._invalidated = !0, this
.templatesCache.hovered = this.createTemplate(this.hoveredStyle), this.templatesCache.default =
this.createTemplate(this.defaultStyle), t.properties().paneProperties.background.subscribe(this,
this.onPaneBgChange)
}
function n(t) {
this.data = t
}
function r(t) {
this.data = t, this._hittest = new c(c.CUSTOM, t)
}
function s(t, e) {
this._data = t, this._paneView = e, this.textRenderer = new s.TextRenderer(t.style.lollipop
.importance)
}
var a = i(8).Point,
l = i(60).pointInCircle,
c = i(11),
h = i(53).CompositeRenderer,
u = i(363).Tooltip;
o.prototype.onPaneBgChange = function() {
this.defaultStyle.lollipop.fillStyle = this._model.properties().paneProperties.background
.value(), this._stylesCache = null, Object.keys(this.templatesCache).forEach(function(t) {
0 === t.indexOf("default") && (this.templatesCache[t] = null)
}, this)
}, o.prototype.onClickOutside = function() {
this._lastClickedId = null
}, o.prototype.closeTooltips = function() {
var t, e;
for (t in this._lollipops) this._lollipops.hasOwnProperty(t) && (e = this._lollipops[t], e
.visible && (e.tooltip.isOpened() && e.tooltip.hide(), e.visible = !1))
}, o.prototype.getLastClickedLollipopId = function() {
return this._lastClickedId
},
o.prototype._setStackStudies = function() {
this._stackStudies = []
}, o.prototype._getY = function() {
var t, e, i = 0,
o = this._model.panes();
for (t = o.length; t--;) e = o[t], e.containsMainSeries() && (i += e.height());
return i
}, o.prototype.update = function() {
this._invalidated = !0
}, o.prototype.updateImpl = function() {
var t, e, i, o, n, r, s, a, l, c, h, u;
this._setStackStudies(), t = this, e = this._study.data(), i = this._model.timeScale(), o = i
.visibleBars(), n = this._model.mainSeries().bars(), r = this._study.priceScale(), s = this
._model.mainSeries(), a = s.firstBar(), r && !r.isEmpty() && !i.isEmpty() && a && e && (this
.closeTooltips(), l = this._getY(), c = o.firstBar(), h = o.lastBar(), u = e.range(c,
h), u.each(function(e, o) {
var s, a = 0;
for (s = 0; s < t._stackStudies.length; ++s) t._stackStudies[s].data().contains(
e) && ++a;
e > c && e < h && t.addLollipop(l, n, i, r, e, o, a)
}), this.afterUpdate(l, n, i, r))
}, o.prototype.addLollipop = function(t, e, i, o, n, r, s) {
var l, c, h, d, p, _, f, m, g = r[0],
v = this._model.mainSeries().symbolInfo();
v && (l = v.name, c = null, h = this._study.metaInfo().id + "_" + g + "_" + l, d = this._model
.lastHittestData(), p = d && d.id === h, p && null !== (_ = e.valueAt(n)) && (f = _[
TradingView.LOW_PLOT], o.isPercent() && (m = this._model.mainSeries()
.firstValue(), f = o.priceRange().convertToPercent(f, m)), c = o
.priceToCoordinate(f)), this._lollipops[h] = $.extend({
id: h,
visible: !0,
basePoint: new a(i.indexToCoordinate(n) + 1, t),
hovered: p || h === this.getLastClickedLollipopId(),
barY: c,
stack: s,
tooltip: this._lollipops.hasOwnProperty(h) ? this._lollipops[h].tooltip : new u
}, this.extraData(r)))
}, o.prototype.afterUpdate = function(t, e, i) {}, o.prototype.extraData = function(t) {
throw Error("Not Implemented")
}, o.prototype.createText = function(t, e) {
throw Error("Not Implemented")
}, o.prototype.showBarLine = function() {
return !0
}, o.prototype.getStyle = function(t, e) {
var i, o = t;
return e.stack && (o += "_stack:" + e.stack), "hovered" === o ? this.hoveredStyle :
"default" === o ? this.defaultStyle : (this._stylesCache || (this._stylesCache = {}), this
._stylesCache[o] || (i = TradingView.clone("hovered" === t ? this.hoveredStyle : this
.defaultStyle), e.stack && (i.lollipop.incHeight = 24 * e.stack), this
._stylesCache[o] = i), this._stylesCache[o])
}, o.prototype.hasTooltip = function(t) {
return !0
}, o.prototype.renderer = function() {
var t, e, i, o, l, c, u, d, p;
this._invalidated && (this.updateImpl(), this._invalidated = !1), t = new h;
for (e in this._lollipops) this._lollipops.hasOwnProperty(e) && (i = this._lollipops[e], o = 15,
l = this.getStyle(i.hovered ? "hovered" : "default", i), i.visible && (c = $.extend({
tooltipPoint: new a(i.basePoint.x, i.basePoint.y - l.lollipop.circleHeight -
o - (l.lollipop.incHeight || 0)),
style: l,
createText: this.createText.bind(this)
}, i), u = this.getTemplate(i.hovered ? "hovered" : "default", i), d = {
circlePoint: new a(i.basePoint.x, i.basePoint.y - l.lollipop.circleHeight - (l
.lollipop.incHeight || 0)),
style: l,
template: u,
basePoint: i.basePoint,
id: i.id,
mouseClickHandler: this._lollipopMouseClickHandler.bind(this, i.id)
}, t.append(new r(d)), i.hovered && this.hasTooltip(i) && i.barY && this
.showBarLine() && (p = {
style: {
lineStyle: l.barLine.lineStyle,
strokeStyle: l.strokeStyle,
lineWidth: l.lineWidth
},
startPoint: new a(i.basePoint.x, i.basePoint.y - l.lollipop.circleHeight),
endPoint: new a(i.basePoint.x, i.barY)
}, t.append(new n(p))), t.append(new s(c, this))));
return t
}, o.prototype.getTemplate = function(t, e) {
var i = t;
return e.stack && (i += "_stack:" + e.stack), this.templatesCache[i] || (this.templatesCache[
i] = this.createTemplate(this.getStyle(t, e))), this.templatesCache[i]
}, o.prototype.createTemplate = function(t) {
var e = document.createElement("canvas"),
i = e.getContext("2d"),
o = new a(t.lollipop.width / 2, t.lollipop.height - t.lollipop.circleHeight - (t.lollipop
.incHeight || 0));
return this.drawCircle(i, t, o), this.drawLabel(i, t, o), e
}, o.prototype.drawCircle = function(t, e, i) {
t.strokeStyle = e.strokeStyle, t.fillStyle = e.lollipop.fillStyle, t.lineWidth = e.lollipop
.lineWidth, CanvasEx.setLineStyle(t, CanvasEx.LINESTYLE_SOLID), t.beginPath(), t.arc(i.x, i
.y, e.lollipop.radius, 0, 2 * Math.PI, !1), t.closePath(), t.stroke(), e.lollipop
.fillCircle && t.fill()
}, o.prototype.drawLabel = function(t, e, i) {
t.textAlign = "center", t.textBaseline = "middle", t.fillStyle = e.lollipop.text.strokeStyle, t
.font = e.lollipop.text.font, t.fillText(e.lollipop.text.label, i.x, i.y)
}, o.prototype._lollipopMouseClickHandler = function(t) {
this._lastClickedId = this._lastClickedId === t ? null : t
}, n.prototype.draw = function(t) {
t.strokeStyle = this.data.style.strokeStyle, t.lineWidth = this.data.style.lineWidth, CanvasEx
.setLineStyle(t, this.data.style.lineStyle), CanvasEx.drawLine(t, this.data.startPoint.x,
this.data.startPoint.y, this.data.endPoint.x, this.data.endPoint.y)
}, n.prototype.hitTest = function(t) {
return null
}, r.prototype.hitTest = function(t) {
return l(t, this.data.circlePoint, this.data.style.lollipop.radius) ? this._hittest : null
}, r.prototype.draw = function(t) {
var e = this.data.template;
t.drawImage(e, this.data.basePoint.x - (.5 + this.data.style.lollipop.width / 2 << 0) + .5, this
.data.basePoint.y - this.data.style.lollipop.height + .5)
}, s.prototype.draw = function(t) {
this._data.createText(this._data, this.textRenderer), this._paneView
.getLastClickedLollipopId() === this._data.id ? this._data.tooltip.show({
items: [this.textRenderer],
x: this._data.basePoint.x,
y: this._data.basePoint.y - this._data.style.lollipop.circleHeight - 10 - 2 * this
._data.style.lollipop.radius * (this._data.stack ? this._data.stack : 0),
wrapElement: t.canvas.parentNode,
leftBorderColor: this._data.color
}) : this._data.tooltip.hide()
}, s.prototype.hitTest = function(t) {
return null
}, s.TextRenderer = function(t) {
this.lines = [], this.fontHeight = 12, this.font = this.fontHeight + "px Arial, sans-serif",
this.lineSpacing = 8, this.fillStyle = "black", t && (this.importance = t)
}, s.TextRenderer.prototype.draw = function(t, e) {
var i, o, n = e.y;
for (i = 0; i < this.lines.length; i++) o = this.lines[i], t.font = this.font, o.options
.fontWeight && (t.font = o.options.fontWeight + " " + this.font), t.fillStyle = this
.fillStyle, o.renderer(t, o.line, {
x: e.x,
y: n
}), n += this.lineSpacing + this.fontHeight
}, s.TextRenderer.prototype.measure = function() {
return this.lines.length * (this.fontHeight + this.lineSpacing) - this.lineSpacing
}, s.TextRenderer.prototype.basicRenderer = function(t, e, i) {
t.fillText(e, i.x, i.y)
}, s.TextRenderer.prototype.addMulticolorTextLine = function(t, e) {
this.addTextLine(t, e, this.multicolorRenderer)
},
s.TextRenderer.prototype.addTextLine = function(t, e, i) {
i || (i = this.basicRenderer), e || (e = {}), this.lines.push({
line: t,
renderer: i,
options: e
})
}, s.TextRenderer.prototype.multicolorRenderer = function(t, e, i) {
var o, n, r = i.x;
for (o = 0; o < e.length; ++o) n = e[o], t.fillStyle = n.color, t.fillText(n.text, r, i.y), r +=
t.measureText(n.text).width
}, e.ESDPaneView = o
},
function(t, e) {},
function(t, e, i) {
"use strict";
(function(t) {
var o, n, r, s, a, l, c, h, u, d, p;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), i(13), i(41), i(43), i(12), n = i(364), r = i(309), s = i(52), a = i(108), l =
i(26), c = i(66), h = i(24), u = i(17), i(975), d =
'<span class="tv-favorited-drawings-toolbar__widget {{#isActive}}i-active{{/isActive}} apply-common-tooltip" title="{{title}}">{{{icon}}}</span>',
p = function(e) {
function i(t) {
var i = e.call(this, {
allowSortable: !Modernizr.touch,
defaultPosition: t,
positionSettingsKey: "chart.favoriteDrawingsPosition"
}) || this;
return i._linetoolsWidgets = {}, i._canBeShownValue = new u(!1), i
._attachHandlers(), i._loadVisibilityState(), i
}
return o.__extends(i, e), i.prototype.show = function() {
this._canBeShownValue.value() && (h.setValue(i._visibilitySettingsKey, !0), this
.isVisible() || this._renderAllLinetools(), e.prototype.show.call(this))
}, i.prototype.hide = function() {
h.setValue(i._visibilitySettingsKey, !1), e.prototype.hide.call(this)
}, i.prototype.canBeShown = function() {
return this._canBeShownValue.readonly()
}, i.prototype._onFavoriteAdded = function(t) {
this._canBeShownValue.setValue(!0), this.addWidget(this._createLinetoolWidget(
t)), this.show()
}, i.prototype._onFavoriteRemoved = function(t) {
this.removeWidget(this._linetoolsWidgets[t]), delete this._linetoolsWidgets[t],
0 === r.LinetoolsFavoritesStore.favoritesCount() && (this._canBeShownValue
.setValue(!1), this.hide())
}, i.prototype._onFavoriteMoved = function() {
this._renderAllLinetools()
}, i.prototype._onSelectedLinetoolChanged = function(t) {
var e = this;
Object.keys(this._linetoolsWidgets).forEach(function(i) {
e._linetoolsWidgets[i].classList.toggle("i-active", t === i)
})
}, i.prototype._createLinetoolWidget = function(e) {
var i = $(t.render(d, {
icon: c.lineToolsInfo[e].icon,
isActive: e === l.tool.value(),
title: c.lineToolsInfo[e].localizedName
}))[0];
return i.addEventListener("click", function(t) {
t.preventDefault(), l.tool.value() === e ? l.resetToCursor() : l
.tool.setValue(e)
}), this._linetoolsWidgets[e] = i, i
}, i.prototype._renderAllLinetools = function() {
var t = this;
this._linetoolsWidgets = {}, this.removeWidgets(), r.LinetoolsFavoritesStore
.favorites().forEach(function(e) {
t.addWidget(t._createLinetoolWidget(e))
})
}, i.prototype._attachHandlers = function() {
var t = this;
r.LinetoolsFavoritesStore.favoriteAdded.subscribe(this, this._onFavoriteAdded),
r.LinetoolsFavoritesStore.favoriteRemoved.subscribe(this, this
._onFavoriteRemoved), r.LinetoolsFavoritesStore.favoriteMoved.subscribe(
this, this._onFavoriteMoved), r.LinetoolsFavoritesStore.favoritesSynced
.subscribe(null, function() {
t._loadVisibilityState(), t._renderAllLinetools()
}), this.onWidgetsReordered().subscribe(this, function(e, i) {
if (r.LinetoolsFavoritesStore.favoriteMoved.unsubscribe(t, t
._onFavoriteMoved),
!r.LinetoolsFavoritesStore.moveFavorite(r
.LinetoolsFavoritesStore.favorite(e), i)) throw Error(
"Something went wrong");
r.LinetoolsFavoritesStore.favoriteMoved.subscribe(t, t
._onFavoriteMoved)
}), this.onContextMenu(function(e) {
e.preventDefault();
var i = new s.Action({
text: $.t("Hide Favorite Drawings Toolbar")
});
i.callbacks().subscribe(null, function() {
t.hide()
}), a.createMenu([i]).show(e)
}), l.tool.subscribe(this._onSelectedLinetoolChanged.bind(this))
}, i.prototype._loadVisibilityState = function() {
var t, e = r.LinetoolsFavoritesStore.favoritesCount() > 0;
this._canBeShownValue.setValue(e), t = h.getBool(i._visibilitySettingsKey, !0),
t && e ? this.show() : this.hide()
}, i._visibilitySettingsKey = "ChartFavoriteDrawingToolbarWidget.visible", i
}(n.FloatingToolbar), e.FavoriteDrawingToolbar = p
}).call(e, i(41))
},
function(t, e) {},
function(t, e) {},
function(t, e, i) {
"use strict";
(function(e, o) {
function n(t) {
this._chartWidgetCollection = t, this._bindings = [], this._hasAlertWathcedValue = null,
this._$templatesButton = null, this._currentProperties = null, this
._toolbarWidgets = [], this._clearProeprtiesOnHideTimeoutId = null, this._init(), this
.attachHandlers()
}
function r(t, e) {
t.push({
id: e,
widget: $('<div class="tv-linetool-properties-toolbar__text">' + e + "</div>")[
0]
})
}
function s(t, e) {
t.push({
id: e.value,
widget: $(e.iconSvgCode)[0]
})
}
function a(t, e) {
return $("<div>").addClass("tv-linetool-properties-toolbar__icon").addClass(e).append(t)[0]
}
function l(t) {
return a(t, "tv-linetool-properties-toolbar__icon--line-props")
}
var c, h, u, d, p, _, f, m, g, v, y, b, S, w, T, C = i(238),
x = C.PropertyPage,
P = C.ColorBinding,
L = i(106).BarsMarksContainer,
I = i(1).LineDataSource,
k = i(26),
A = i(385),
M = i(133).bindPopupMenu,
E = i(6).DefaultProperty,
D = i(977).GroupButtonFloatingToolbar,
V = i(136).showEditObjectDialog,
O = i(74).LineEnd;
i(175), i(979), n.prototype.activeChartWidget = function() {
return this._chartWidgetCollection.activeChartWidget.value()
}, n.prototype.selectedSource = function() {
return this._chartWidgetCollection.selectedSource.value()
}, n.prototype._init = function() {
this._floatingToolbar = new D({
addClass: "tv-linetool-properties-toolbar",
defaultPosition: {
top: window.headerChartPanel.outerHeight() + 15,
left: window.innerWidth / 2
},
positionSettingsKey: "properties_toolbar.position"
}), this._floatingToolbar.onWidgetStateChanged().subscribe(this, this
._onPropertyChangedInToolbar), this._sourceActions = this
._createSourceActions(), this._sourceActions.forEach(function(t) {
this._floatingToolbar.addWidget(t.button)
}, this)
}, n.prototype._bindPopupMenuDirection = function() {
return this._floatingToolbar.isVertical() ? "right" : "down"
}, n.prototype._onPropertyChangedInToolbar = function(t, e) {
this._currentProperties && this.activeChartWidget().model().setProperty(this
._currentProperties[t], e)
}, n.prototype._onPropertyChanged = function(t, e) {
this._floatingToolbar.setGroupedWidgetState(t, e.value())
}, n.prototype._hideAllSourceActions = function() {
this._sourceActions.forEach(function(t) {
this._floatingToolbar.hideWidget(t.button)
}, this), this._sourceActionsVisible = !1
}, n.prototype._updateSourceActionsVisibility = function(t) {
this._sourceActionsVisible = !1,
this._sourceActions.forEach(function(e) {
!e.isVisibleForSource || e.isVisibleForSource(t) ? (this._floatingToolbar
.showWidget(e.button), this._sourceActionsVisible = !0) : this
._floatingToolbar.hideWidget(e.button)
}, this)
}, n.prototype.attachHandlers = function() {
k.tool.subscribe(this.onToolChanged.bind(this), {
callWithLast: !0
}), this._chartWidgetCollection.selectedSource.subscribe(this.onSourceChanged.bind(
this))
}, n.prototype.onToolChanged = function(t, e) {
if (t && -1 !== t.toLowerCase().indexOf("linetool")) {
var e = e instanceof E ? e : new E(t.toLowerCase());
this._hideAllSourceActions(), this.showPropertiesOf(t, e), this.showTemplatesOf({
tool: t,
properties: e
}), this._updateVisibility()
} else this.selectedSource() ? this.onSourceChanged(this.selectedSource()) : this.hide()
}, n.prototype.findSourceOnWidget = function(t) {
var e, i, o, n;
for (e = 0; e < this.activeChartWidget().model().panes().length; e++)
for (i = this.activeChartWidget().model().panes()[e], o = i.orderedSources(), n =
0; n < o.length; n++)
if (o[n] === t) return o[n]
}, n.prototype.onSourceChanged = function(t) {
if (this._hasAlertWathcedValue && (this._hasAlertWathcedValue.destroy(), this
._hasAlertWathcedValue = null), !t) return void this.hide();
t instanceof I && !(t instanceof L) && this.findSourceOnWidget(t) ? (!t
.userEditEnabled() || "LineToolBrush" !== t.toolname && this.activeChartWidget()
.model().lineBeingCreated() ? this._hideAllSourceActions() : (this
._updateSourceActionsVisibility(t), t.canHasAlert() && (this
._hasAlertWathcedValue = t.hasAlert.spawn(), this._hasAlertWathcedValue
.subscribe(this._updateSourceActionsVisibility.bind(this, t)))), this
.showPropertiesOf(t.getConstructor(), t.properties()), this.showTemplatesOf({
source: t
}), this._setupToggleLockButton(t), this._updateVisibility()) : this.hide()
}, n.prototype.showTemplatesOf = function(t) {
var o, n, r, s, a;
e.enabled("line_tool_templates") && (o = t.source, o ? (n = o.getConstructor(), r = o
.properties()) : (n = t.tool, r = t.properties), this._$templatesButton && (
this._floatingToolbar.removeWidget(this._$templatesButton[0]), this
._$templatesButton = null), s = this, a = function(t) {
if (o) {
s.activeChartWidget().model().applyLineToolTemplate(o, t,
"Apply Drawing Template"), s.onSourceChanged(o)
} else r.merge(t), r.listeners().fire(this), r.saveDefaults(), s
.onToolChanged(n, r)
}, TradingView.onWidget() && !window.is_authenticated || !e.enabled(
"linetoolpropertieswidget_template_button") || (this._templatesList = new A(
n, a, {
buttonInner: '<div class="tv-linetool-properties-toolbar__icon">' +
i(980) +
'</div><span class="tv-caret tv-caret--small tv-caret--colored tv-linetool-properties-toolbar__caret"></span>',
buttonClass: "tv-linetool-properties-toolbar__button apply-common-tooltip",
defaultsCallback: function() {
if (void 0 !== o) {
s.activeChartWidget().model()
.restoreLineToolFactoryDefaults(o,
"Load default drawing template")
} else r.restoreFactoryDefaults();
s.showPropertiesOf(n, r)
},
saveAsText: $.t("Save Drawing Template As..."),
applyDefaultText: $.t("Apply Default Drawing Template"),
getDataForSaveAs: o ? function() {
return o.template()
} : null,
popupActiveClass: "i-dropped",
popupDirection: this._bindPopupMenuDirection.bind(this)
}),
this._$templatesButton = this._templatesList.createButton().attr("title", $
.t("Templates")), this._floatingToolbar.addWidget(this
._$templatesButton[0], {
index: 0
})), this._templatesVisible = !0)
}, n.prototype.templatesList = function() {
return this._templatesList
}, n.prototype._createButton = function(t) {
var e, i, o;
return t = t || {}, e = document.createElement("div"), e.setAttribute("title", t.title),
e.className += "tv-linetool-properties-toolbar__button apply-common-tooltip", e
.addEventListener("click", t.callback), t.svgIcon && (i = document.createElement(
"div"), i.classList.add("tv-linetool-properties-toolbar__icon"), i
.appendChild(t.svgIcon), e.appendChild(i)), t.addCaret && (o = document
.createElement("div"), o.className =
"tv-caret tv-caret--small tv-caret--colored tv-linetool-properties-toolbar__caret",
e.appendChild(o)), e
}, n.prototype._createSettingsButton = function() {
var t = this;
return this._createButton({
title: $.t("Settings"),
callback: function() {
V(t.selectedSource(), t.activeChartWidget().model(), {
onWidget: t.activeChartWidget()._options.onWidget
})
},
svgIcon: $(i(981))[0]
})
}, n.prototype._createZOrderButton = function() {
var t = this._createButton({
title: $.t("Visual Order"),
callback: function() {
t.classList.contains("i-dropped") || $(t).trigger("button-popup", [
this._getZOrderActions()
])
}.bind(this),
svgIcon: $(i(982))[0],
addCaret: !0
});
return M($(t), null, {
direction: this._bindPopupMenuDirection.bind(this),
event: "button-popup",
reverse: !1,
notCloseOnButtons: !0,
activeClass: "i-dropped"
}), t
}, n.prototype._createCloneButton = function() {
var t, o = $.t("Clone");
return e.enabled("datasource_copypaste") && (o += ", " + $.t("Copy")), e.enabled(
"support_multicharts") && (o += ", " + $.t("Sync")), t = this._createButton({
title: o,
callback: function() {
t.classList.contains("i-dropped") || $(t).trigger("button-popup", [
this._getCloneActions()
])
}.bind(this),
svgIcon: $(i(983))[0],
addCaret: !0
}), M($(t), null, {
direction: this._bindPopupMenuDirection.bind(this),
event: "button-popup",
reverse: !1,
notCloseOnButtons: !0,
activeClass: "i-dropped"
}), t
}, n.prototype._createLockButton = function() {
var t = this._createButton({
title: $.t("Lock"),
callback: function() {
this.activeChartWidget().toggleLockSelectedObject()
}.bind(this),
svgIcon: $(i(417))[0]
});
return this._lockChangeListener = function(e) {
t.classList.toggle("i-active", !!e.value())
}, t
}, n.prototype._createHideButton = function() {
return this._createButton({
title: $.t("Hide"),
callback: function() {
this.activeChartWidget().hideSelectedObject()
}.bind(this),
svgIcon: $(i(984))[0]
})
}, n.prototype._createRemoveButton = function() {
return this._createButton({
title: $.t("Remove"),
callback: function() {
this.activeChartWidget().removeSelectedSource()
}.bind(this),
svgIcon: $(i(985))[0]
})
}, n.prototype._createSourceActions = function() {
var t = [];
return e.enabled("property_pages") && t.push({
button: this._createSettingsButton()
}), t.push({
button: this._createZOrderButton()
}, {
button: this._createCloneButton(),
isVisibleForSource: function(t) {
var e = TradingView.className(t.constructor);
return !this.activeChartWidget().model().model()
.isSingleInstanceLineTool(e)
}.bind(this)
}, {
button: this._createLockButton()
}, {
button: this._createHideButton()
}, {
button: this._createRemoveButton()
}), t
}, n.prototype._getCloneActions = function() {
var t = this.activeChartWidget().model(),
i = this.selectedSource(),
o = [];
return i.properties().clonable.value() && o.push({
title: $.t("Clone"),
action: function() {
t.cloneLineTool(i)
}
}), e.enabled("datasource_copypaste") ? (o.push({
title: $.t("Copy"),
shortcut: "Ctrl-C",
action: function() {
t.copySourceToClip(i)
}
}), e.enabled("support_multicharts") ? (i.linkKey ? o.push({
title: $.t("Stop syncing"),
action: function() {
t.unlinkLine(i)
}
}) : o.push({
title: $.t("Sync to all charts"),
action: function() {
t.copyToOtherCharts(i)
}
}), o) : o) : o
}, n.prototype._getZOrderActions = function() {
var t = [],
e = this.selectedSource(),
i = this.activeChartWidget().model(),
o = {
title: $.t("Bring to Front"),
action: function() {
i.bringToFront(e)
}
},
n = {
title: $.t("Send to Back"),
action: function() {
i.sendToBack(e)
}
},
r = {
title: $.t("Bring Forward"),
action: function() {
i.changeZOrder(e, 1)
}
},
s = {
title: $.t("Send Backward"),
action: function() {
i.changeZOrder(e, -1)
}
},
a = i.paneForSource(this.selectedSource()),
l = a.getZOrderMinMax();
return e.zorder() === l.minZOrder && (n.disabled = !0, s.disabled = !0), e.zorder() ===
l.maxZOrder && (r.disabled = !0, o.disabled = !0), t.push(o, n, r, s), t
}, n.prototype._getPossibleProperty = function(t) {
var e, i, o = [],
r = this._defaultToolProperties();
for (e = 0; e < r.length; e++) i = r[e], i.name in t && o.push(i);
return t.extendLeft || (o = o.map(function(t) {
return "leftEnd" === t.name && (t.comboboxOptions = t.comboboxOptions
.filter(function(t) {
return t.value !== n.LINE_EXTEND
})), t
})), t.extendRight || (o = o.map(function(t) {
return "rightEnd" === t.name && (t.comboboxOptions = t.comboboxOptions
.filter(function(t) {
return t.value !== n.LINE_EXTEND
})), t
})), o
}, n.prototype.showPropertiesOf = function(t, e) {
var i, o, n, a, l, c, h, u;
if (this._toolExceptionCases || (this._toolExceptionCases = this
._createToolExceptionCases()), i = this._toolExceptionCases[t] || this
._getPossibleProperty(e), this._clearProperties(), this._propertiesVisible = !1, i
.length) {
for (o = {}, n = i.length - 1; n >= 0; --n)
if (a = i[n], l = e[a.name], "function" != typeof(c = a.showIf) || c(l, e)) {
if (!l) continue;
if (this._propertiesVisible = !0, h = [], "combobox" !== a.inputType) {
u = this.colorPropertyControl(l, a, e), this._floatingToolbar.addWidget(
u[0], {
index: this._$templatesButton ? 1 : 0
}), this._toolbarWidgets.push(u[0]);
continue
}
a.simple ? a.comboboxOptions.forEach(r.bind(null, h)) : a.comboboxOptions
.forEach(s.bind(null, h)), a.propertyProxy && (l = a.propertyProxy(e,
this.activeChartWidget().model())), o[a.name] = l, l.subscribe(this,
this._onPropertyChanged.bind(this, a.name, l)), this
._floatingToolbar.addGroupedWidget({
id: a.name,
currentStateId: l.value(),
stateWidgetAddClass: "tv-linetool-properties-toolbar__sub-widget",
states: h,
widgetAddClass: "tv-linetool-properties-toolbar__grouped-button",
tooltip: a.title
}, {
index: this._$templatesButton ? 1 : 0
})
} this._currentProperties = o
}
}, n.prototype._updateVisibility = function() {
this._propertiesVisible || this._sourceActionsVisible || this._templatesVisible ? this
._show() : this.hide()
}, n.prototype._clearProperties = function() {
this._currentProperties && (this._clearProeprtiesOnHideTimeoutId && (clearTimeout(this
._clearProeprtiesOnHideTimeoutId), this
._clearProeprtiesOnHideTimeoutId = null), Object.keys(this
._currentProperties).forEach(function(t) {
this._currentProperties[t].unsubscribeAll(this), this._floatingToolbar
.removeGroupedWidget(t)
}, this), this._currentProperties = null, this._toolbarWidgets.forEach(function(
t) {
this._floatingToolbar.removeWidget(t)
}, this), this._toolbarWidgets = [], this.clearBindings())
}, n.prototype.hide = function() {
this._floatingToolbar.hide(), this._clearProeprtiesOnHideTimeoutId = setTimeout(this
._clearProperties.bind(this), this._floatingToolbar.hideDuration())
}, n.prototype._show = function() {
this._floatingToolbar.show()
}, n.prototype.refresh = function() {
this.onSourceChanged(this.selectedSource())
}, n.prototype._setupToggleLockButton = function(t) {
t !== this._selectedSourceBk && (this._selectedSourceBk && this._selectedSourceBk
.properties().frozen && this._selectedSourceBk.properties().frozen.unsubscribe(
this, this._lockChangeListener), t && t.properties().frozen && (t
.properties().frozen.subscribe(this, this._lockChangeListener), this
._lockChangeListener(t.properties().frozen)), this._selectedSourceBk = t)
}, n.prototype.bindControl = function(t) {
this._bindings.push(t)
}, n.prototype.clearBindings = function(t) {
for (var e = this._bindings.length; e--;) this._bindings[e].destroy();
this._bindings.length = 0
}, n.prototype.colorPropertyControl = function(t, e, i) {
var o, r, s = x.prototype.createColorPicker({
addClass: "tv-linetool-properties-toolbar__color-picker apply-common-tooltip",
direction: this._bindPopupMenuDirection.bind(this)
});
return s.attr("title", e.title), o = s.find("input"), r = $(e.iconSvgCode), r.on(
"click",
function(t) {
o.data("tvcolorpicker") || o.focus()
}), $(document).on("click", function(t) {
o.data("tvcolorpicker") ? o.addClass("i-active") : o.removeClass("i-active")
}), o.after(r), this.bindControl(new P(s, t, !0, this.activeChartWidget().model(),
null, n.getTransparency(e, i))), "string" == typeof e.addClass && s.addClass(e
.addClass), s
}, n.getTransparency = function(t, e) {
if (t.transparency) return t.transparencyField ? e[t.transparencyField].value() : e
.transparency.value()
}, n.prototype.createLineEndPropertyProxy = function(t, e) {
return function(i, r) {
var s, a;
return s = i[e] && i[e].value() ? n.LINE_EXTEND : i[t].value(), a = new o(s), a
.subscribe(this, function(o) {
var n = o.value();
n < 2 ? (r.beginUndoMacro(""), i[t].setValue(n), i[e] && i[e]
.setValue(!1), r.endUndoMacro()) : (r.beginUndoMacro(""), i[
t].setValue(O.Normal), i[e] && i[e].setValue(!0), r
.endUndoMacro())
}), a
}
}, n.LINE_EXTEND = 42, c = l(i(986)), h = l(i(987)), u = l(i(988)), d = l(i(989)), p = l(i(
990)), _ = l(i(991)), f = l(i(992)), m = l(i(993)), g = l(i(994)), v = l(i(995)), y = l(
i(996)), b = l(i(997)), S = i(998), w = i(999), T = i(1e3), n.prototype
._defaultToolProperties = function() {
return [{
name: "color",
inputType: "colorPicker",
iconSvgCode: S,
title: $.t("Color")
}, {
name: "linecolor",
inputType: "colorPicker",
iconSvgCode: S,
title: $.t("Color")
}, {
name: "backgroundColor",
inputType: "colorPicker",
iconSvgCode: w,
title: $.t("Background Color"),
transparency: !0
}, {
name: "linewidth",
inputType: "combobox",
comboboxOptions: [{
value: 1,
iconSvgCode: c
}, {
value: 2,
iconSvgCode: h
}, {
value: 3,
iconSvgCode: u
}, {
value: 4,
iconSvgCode: d
}],
title: $.t("Width")
}, {
name: "linestyle",
title: $.t("Style"),
inputType: "combobox",
comboboxOptions: [{
value: 0,
iconSvgCode: c
}, {
value: 1,
iconSvgCode: p
}, {
value: 2,
iconSvgCode: _
}]
}, {
name: "leftEnd",
title: $.t("Left End"),
inputType: "combobox",
comboboxOptions: [{
value: O.Normal,
iconSvgCode: f
}, {
value: O.Arrow,
iconSvgCode: m
}, {
value: n.LINE_EXTEND,
iconSvgCode: g
}],
propertyProxy: this.createLineEndPropertyProxy("leftEnd", "extendLeft")
}, {
name: "rightEnd",
title: $.t("Right End"),
inputType: "combobox",
comboboxOptions: [{
value: O.Normal,
iconSvgCode: v
}, {
value: O.Arrow,
iconSvgCode: y
}, {
value: n.LINE_EXTEND,
iconSvgCode: b
}],
propertyProxy: this.createLineEndPropertyProxy("rightEnd", "extendRight")
}]
}, n.prototype._riskPropertiesExceptionCases = function() {
return [{
name: "textcolor",
title: $.t("Text color"),
inputType: "colorPicker",
iconSvgCode: T
}, {
name: "profitBackground",
title: $.t("Profit Background Color"),
inputType: "colorPicker",
iconSvgCode: w,
transparency: !0,
transparencyField: "profitBackgroundTransparency"
}, {
name: "stopBackground",
title: $.t("Stop Background Color"),
inputType: "colorPicker",
iconSvgCode: w,
transparency: !0,
transparencyField: "stopBackgroundTransparency"
}, {
name: "linecolor",
title: $.t("Border color"),
inputType: "colorPicker",
iconSvgCode: S
}]
}, n.prototype._elliottPropertiesExceptionCases = function() {
return [{
name: "color",
title: $.t("Color"),
inputType: "colorPicker",
iconSvgCode: S
}]
}, n.prototype._rangeExceptionCases = function() {
return [{
name: "linecolor",
inputType: "colorPicker",
iconSvgCode: S,
title: $.t("Color")
}, {
name: "backgroundColor",
inputType: "colorPicker",
iconSvgCode: w,
title: $.t("Background Color"),
transparency: !0,
transparencyField: "backgroundTransparency"
}, {
name: "linewidth",
inputType: "combobox",
comboboxOptions: [{
value: 1,
iconSvgCode: c
}, {
value: 2,
iconSvgCode: h
}, {
value: 3,
iconSvgCode: u
}, {
value: 4,
iconSvgCode: d
}],
title: "Width"
}]
}, n.prototype._textPropertiesExceptionCases = function() {
return [{
name: "color",
title: $.t("Text color"),
inputType: "colorPicker",
iconSvgCode: T
}, {
name: "backgroundColor",
title: $.t("Background Color"),
inputType: "colorPicker",
iconSvgCode: w,
showIf: function(t, e) {
return !e || !e.fillBackground || !!e.fillBackground.value()
}
}, {
name: "borderColor",
title: $.t("Border Color"),
inputType: "colorPicker",
iconSvgCode: S
}, {
name: "bordercolor",
title: $.t("Border Color"),
inputType: "colorPicker",
iconSvgCode: S
}, {
name: "fontsize",
title: $.t("Font Size"),
inputType: "combobox",
simple: !0,
addClass: "simple fontsize-dropdown",
comboboxOptions: [10, 11, 12, 14, 16, 20, 24, 28, 32, 40]
}]
}, n.prototype._notePropertiesExceptionCases = function() {
return [{
name: "markerColor",
title: $.t("Marker Color"),
inputType: "colorPicker",
iconSvgCode: S
}, {
name: "textColor",
title: $.t("Text color"),
inputType: "colorPicker",
iconSvgCode: T
}, {
name: "fontSize",
title: $.t("Font Size"),
inputType: "combobox",
simple: !0,
addClass: "simple fontsize-dropdown",
comboboxOptions: [10, 11, 12, 14, 16, 20, 24, 28, 32, 40]
}]
}, n.prototype._brushPropertiesExceptionCases = function() {
return [{
name: "linecolor",
inputType: "colorPicker",
iconSvgCode: S,
title: $.t("Color")
}, {
name: "backgroundColor",
inputType: "colorPicker",
iconSvgCode: w,
transparency: !0,
showIf: function(t, e) {
return e.fillBackground.value()
},
title: $.t("Background Color")
}, {
name: "linewidth",
inputType: "combobox",
comboboxOptions: [{
value: 1,
iconSvgCode: c
}, {
value: 2,
iconSvgCode: h
}, {
value: 3,
iconSvgCode: u
}, {
value: 4,
iconSvgCode: d
}],
title: $.t("Line Width")
}, {
name: "leftEnd",
title: $.t("Left End"),
inputType: "combobox",
comboboxOptions: [{
value: O.Normal,
iconSvgCode: f
}, {
value: O.Arrow,
iconSvgCode: m
}],
propertyProxy: this.createLineEndPropertyProxy("leftEnd", "extendLeft")
}, {
name: "rightEnd",
title: $.t("Right End"),
inputType: "combobox",
comboboxOptions: [{
value: O.Normal,
iconSvgCode: v
}, {
value: O.Arrow,
iconSvgCode: y
}],
propertyProxy: this.createLineEndPropertyProxy("rightEnd", "extendRight")
}]
}, n.prototype._oneColorForAllLines = function() {
return [{
name: "collectibleColors",
inputType: "colorPicker",
iconSvgCode: S,
title: $.t("One color for all lines")
}]
}, n.prototype._createToolExceptionCases = function() {
return {
LineToolRegressionTrend: [],
LineToolGannSquare: n.prototype._oneColorForAllLines(),
LineToolFibTimeZone: n.prototype._oneColorForAllLines(),
LineToolBrush: n.prototype._brushPropertiesExceptionCases(),
LineToolPolyline: n.prototype._brushPropertiesExceptionCases(),
LineToolText: n.prototype._textPropertiesExceptionCases(),
LineToolTextAbsolute: n.prototype._textPropertiesExceptionCases(),
LineToolBalloon: n.prototype._textPropertiesExceptionCases(),
LineToolCallout: n.prototype._textPropertiesExceptionCases(),
LineToolPriceLabel: n.prototype._textPropertiesExceptionCases(),
LineToolArrowMarkLeft: [],
LineToolArrowMarkRight: [],
LineToolArrowMarkUp: [],
LineToolArrowMarkDown: [],
LineToolFlagMark: [],
LineToolThumbUp: [],
LineToolThumbDown: [],
LineToolElliottCircle: n.prototype._elliottPropertiesExceptionCases(),
LineToolElliottSubminuette: n.prototype._elliottPropertiesExceptionCases(),
LineToolElliottMinor: n.prototype._elliottPropertiesExceptionCases(),
LineToolElliottMinorRetr: n.prototype._elliottPropertiesExceptionCases(),
LineToolElliottMajorRetr: n.prototype._elliottPropertiesExceptionCases(),
LineToolDateRange: n.prototype._rangeExceptionCases(),
LineToolPriceRange: n.prototype._rangeExceptionCases(),
LineToolDateAndPriceRange: n.prototype._rangeExceptionCases(),
LineToolIcon: [{
name: "color",
title: $.t("Color"),
inputType: "colorPicker",
iconSvgCode: w
}],
LineToolNote: n.prototype._notePropertiesExceptionCases(),
LineToolNoteAbsolute: n.prototype._notePropertiesExceptionCases(),
LineToolThreeDrivers: [{
name: "color",
title: $.t("Text color"),
inputType: "colorPicker",
iconSvgCode: S
}],
LineToolRiskRewardLong: n.prototype._riskPropertiesExceptionCases(),
LineToolRiskRewardShort: n.prototype._riskPropertiesExceptionCases(),
LineToolBarsPattern: [{
name: "color",
title: $.t("Color"),
inputType: "colorPicker",
iconSvgCode: w
}],
LineToolProjection: [{
name: "color1",
title: $.t("Background color 1"),
inputType: "colorPicker",
iconSvgCode: w,
transparency: !0
}, {
name: "color2",
title: $.t("Background color 2"),
inputType: "colorPicker",
iconSvgCode: w,
transparency: !0
}, {
name: "linewidth",
inputType: "combobox",
comboboxOptions: [{
value: 1,
iconSvgCode: c
}, {
value: 2,
iconSvgCode: h
}, {
value: 3,
iconSvgCode: u
}, {
value: 4,
iconSvgCode: d
}]
}],
LineToolFibCircles: n.prototype._oneColorForAllLines(),
LineToolFibChannel: n.prototype._oneColorForAllLines(),
LineToolFibSpeedResistanceArcs: n.prototype._oneColorForAllLines(),
LineToolFibRetracement: n.prototype._oneColorForAllLines(),
LineToolFibSpeedResistanceFan: n.prototype._oneColorForAllLines(),
LineToolTrendBasedFibTime: n.prototype._oneColorForAllLines(),
LineToolFibWedge: n.prototype._oneColorForAllLines(),
LineToolGannComplex: n.prototype._oneColorForAllLines(),
LineToolGannFixed: n.prototype._oneColorForAllLines(),
LineToolGannFan: n.prototype._oneColorForAllLines(),
LineToolPitchfan: n.prototype._oneColorForAllLines(),
LineToolPitchfork: n.prototype._oneColorForAllLines(),
LineToolSchiffPitchfork2: n.prototype._oneColorForAllLines(),
LineToolSchiffPitchfork: n.prototype._oneColorForAllLines(),
LineToolInsidePitchfork: n.prototype._oneColorForAllLines(),
LineToolTrendBasedFibExtension: n.prototype._oneColorForAllLines()
}
}, t.exports = n
}).call(e, i(5), i(25))
},
function(t, e, i) {
"use strict";
var o, n, r, s, a;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(9), r = i(364), s = i(10), i(175), i(978), a = function(t) {
function e(i) {
var o = t.call(this, e._prepareOptions(i)) || this;
return o._onWidgetStateChangedDelegate = new s, o._statedWidgets = [], o._currentPopup =
null, o._onWindowClickedListener = o._onWindowClicked.bind(o), o
}
return o.__extends(e, t), e.prototype.show = function() {
t.prototype.show.call(this), document.addEventListener("mousedown", this
._onWindowClickedListener)
}, e.prototype.hide = function() {
t.prototype.hide.call(this), document.removeEventListener("mousedown", this
._onWindowClickedListener)
}, e.prototype.destroy = function() {
this._closePopup(), t.prototype.destroy.call(this)
}, e.prototype.addGroupedWidget = function(t, i) {
var o, r, s;
void 0 === i && (i = {}), n.assert(t.states.length > 0 && -1 !== e._getStateIndexById(t,
t.currentStateId), "Argument is invalid (count: " + t.states.length +
", state: " + t.currentStateId + ")"), o = document.createElement("div"), o
.className = "tv-grouped-floating-toolbar__widget-wrapper apply-common-tooltip", t
.widgetAddClass && o.classList.add(t.widgetAddClass), o.setAttribute("title", t
.tooltip), r = {
isEnabled: !0,
statedWidget: t,
toolbarWidget: o
}, s = this._onWidgetClicked.bind(this, r), r.clickListener = s, o.addEventListener(
"click", s), this._updateWidgetPreview(r), this.addWidget(o, i), this
._statedWidgets.push(r)
}, e.prototype.removeGroupedWidget = function(t) {
var e, i, o = this._statedWidgets.length;
for (e = 0; e < o; ++e)
if (i = this._statedWidgets[e], i.statedWidget.id === t) return this
._isPopupCreatedForWidget(t) && this._closePopup(), void 0 !== i
.clickListener && i.toolbarWidget.removeEventListener("click", i
.clickListener), this.removeWidget(i.toolbarWidget), this._statedWidgets
.splice(e, 1), void this._updatePopupPosition();
n.assert(!1, "Unknown groupId(" + t + ")")
}, e.prototype.updateGroupedWidget = function(t, e) {
this._closePopup();
var i = this._ensuredGetWidgetDataForId(t);
i.statedWidget.currentStateId = e.currentStateId, i.statedWidget.states = e.states, this
._updateWidgetPreview(i)
}, e.prototype.setGroupedWidgetEnabled = function(t, e) {
var i = this._ensuredGetWidgetDataForId(t);
i.isEnabled = e, i.toolbarWidget.classList.toggle("i-disabled", !e)
}, e.prototype.setGroupedWidgetState = function(t, i) {
var o = this._ensuredGetWidgetDataForId(t);
n.assert(-1 !== e._getStateIndexById(o.statedWidget, i), "Unknown stateId (" + i + ")"),
o.statedWidget.currentStateId = i, this._updateSubWidgetsState(o.statedWidget), this
._updateWidgetPreview(o)
}, e.prototype.onWidgetStateChanged = function() {
return this._onWidgetStateChangedDelegate
}, e.prototype._onVerticalChanged = function(t, e) {
this._updatePopupPosition()
}, e.prototype._ensuredGetWidgetDataForId = function(t) {
var e, i, o;
for (e = 0, i = this._statedWidgets; e < i.length; e++)
if (o = i[e], o.statedWidget.id === t) return o;
throw Error("Unknown groupId(" + t + ")")
}, e.prototype._onWidgetClicked = function(t, e) {
var i = this._currentPopup && this._isPopupCreatedForWidget(t.statedWidget.id);
this._closePopup(), !i && t.isEnabled && this._createPopup(t)
}, e.prototype._createPopup = function(t) {
var e, i = this,
o = {
createdFor: t.toolbarWidget,
element: document.createElement("div"),
stateWidgetId: t.statedWidget.id,
widgets: []
};
o.element.className += "tv-grouped-floating-toolbar__popup js-popup", e = t.statedWidget
.states.length, t.statedWidget.states.forEach(function(n, r) {
var s = i._createSubWidget(t, n),
a = i._onSubWidgetClicked.bind(i, t, n.id);
s.addEventListener("click", a), o.widgets.push({
clickListener: a,
stateWidget: n,
widget: s
}), s.classList.add(
"tv-grouped-floating-toolbar__sub-widget--slide-right-" + r), s
.classList.add("tv-grouped-floating-toolbar__sub-widget--slide-left-" +
(e - r + 1)), o.element.appendChild(s)
}), this._currentPopup = o, this._updateSubWidgetsState(t.statedWidget), t
.toolbarWidget.classList.add("i-dropped"), this._getWidget().appendChild(this
._currentPopup.element), Promise.resolve().then(function() {
i._currentPopup && i._currentPopup.element.classList.add("i-opened")
}), this._updatePopupPosition()
}, e.prototype._closePopup = function() {
var t, e, i = this;
this._statedWidgets.forEach(function(t) {
t.toolbarWidget.classList.remove("i-dropped")
}), this._currentPopup && (t = this._currentPopup.widgets, e = this._currentPopup
.element, this._currentPopup = null, t.forEach(function(t) {
t.widget.removeEventListener("click", t.clickListener)
}), e.classList.remove("i-opened"), e.addEventListener("transitionend",
function(t) {
t.target === e && i._getWidget().removeChild(e)
}))
}, e.prototype._updateWidgetPreview = function(t) {
var i, o = e._getStateIndexById(t.statedWidget, t.statedWidget.currentStateId);
n.assert(-1 !== o, "Unknown state id: " + t.statedWidget.currentStateId), i = t
.statedWidget.states[o].widget.cloneNode(!0), t.toolbarWidget.firstChild ? t
.toolbarWidget.replaceChild(i, t.toolbarWidget.firstChild) : (t.toolbarWidget
.appendChild(i), t.toolbarWidget.appendChild(e._createCaret()))
}, e.prototype._updateSubWidgetsState = function(t) {
this._currentPopup && this._isPopupCreatedForWidget(t.id) && this._currentPopup.widgets
.forEach(function(i) {
i.widget.classList.toggle(e._activeSubWidgetClass, i.stateWidget.id === t
.currentStateId)
})
}, e.prototype._updatePopupPosition = function() {
var t, e, i, o, n, r, s, a;
if (this._currentPopup) {
if (t = this._currentPopup.createdFor,
e = this._getWidget().getBoundingClientRect(), !(i = this._findWrapperForWidget(
t)) || !this._currentPopup) throw Error(
"Toolbar has no wrapper for preview's widget or there is no popup");
o = i.getBoundingClientRect(), n = this._currentPopup.element
.getBoundingClientRect(), r = this._currentPopup.element, this.isVertical() ? (r
.classList.remove("tv-grouped-floating-toolbar__popup--at-top"), r.style
.top = o.top - e.top + 1 + "px", r.style.left = "", e.left > window
.innerWidth - e.right ? r.classList.add(
"tv-grouped-floating-toolbar__popup--at-left") : r.classList.remove(
"tv-grouped-floating-toolbar__popup--at-left")) : (r.classList.remove(
"tv-grouped-floating-toolbar__popup--at-left"), s = o.left + n.width,
a = 0, s > window.innerWidth ? e.left + n.width > window.innerWidth && (a =
e.width - n.width) : a = o.left - e.left + 1, r.style.left = a + "px", e
.bottom + n.height > window.innerHeight ? r.classList.add(
"tv-grouped-floating-toolbar__popup--at-top") : (r.classList.remove(
"tv-grouped-floating-toolbar__popup--at-top"), r.style.top = ""))
}
}, e.prototype._isPopupCreatedForWidget = function(t) {
return !(!this._currentPopup || this._currentPopup.stateWidgetId !== t)
}, e.prototype._createSubWidget = function(t, e) {
var i = document.createElement("div");
return i.className += "tv-grouped-floating-toolbar__sub-widget", t.statedWidget
.stateWidgetAddClass && i.classList.add(t.statedWidget.stateWidgetAddClass), i
.appendChild(e.widget), i
}, e.prototype._onSubWidgetClicked = function(t, e) {
this._closePopup(), t.statedWidget.currentStateId !== e && (this.setGroupedWidgetState(t
.statedWidget.id, e), this._onWidgetStateChangedDelegate.fire(t.statedWidget
.id, e))
}, e.prototype._onWindowClicked = function(t) {
if (this.isVisible() && this._currentPopup && !e._isEventInElement(t, this._currentPopup
.element)) {
for (var i = 0; i < this._statedWidgets.length; ++i)
if (e._isEventInElement(t, this._statedWidgets[i].toolbarWidget)) return;
this._closePopup()
}
}, e._getStateIndexById = function(t, e) {
for (var i = 0; i < t.states.length; ++i)
if (t.states[i].id === e) return i;
return -1
}, e._createCaret = function() {
var t = document.createElement("div");
return t.className =
"tv-caret tv-caret--small tv-caret--colored tv-grouped-floating-toolbar__caret", t
}, e._prepareOptions = function(t) {
var e = " tv-grouped-floating-toolbar";
return t.addClass ? t.addClass += e : t.addClass = e, t
}, e._isEventInElement = function(t, e) {
return t.target === e || e.contains(t.target)
}, e._activeSubWidgetClass = "tv-grouped-floating-toolbar__sub-widget--current", e
}(r.FloatingToolbar), e.GroupButtonFloatingToolbar = a
},
function(t, e) {},
function(t, e) {},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path d="M2 0a2 2 0 0 0-2 2v14h14a2 2 0 0 0 2-2H2zm2 0v2h3V0zm5 0v2h3V0zm5 0v2h2a2 2 0 0 0-2-2zm0 4v3h2V4zm0 5v3h2V9z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 17 16"><path d="M15.09 6.857s-.571 0-.724-.533c-.114-.457-.305-.876-.533-1.295-.229-.495.152-.876.152-.876l.571-.571c.229-.229.229-.61 0-.876l-.762-.762c-.229-.229-.61-.229-.876 0l-.571.571s-.381.381-.876.152c-.419-.229-.838-.419-1.295-.533-.533-.152-.533-.724-.533-.724v-.8a.602.602 0 0 0-.61-.61H7.966a.602.602 0 0 0-.61.61v.8s0 .571-.533.724c-.457.114-.876.305-1.295.533-.495.229-.876-.152-.876-.152l-.571-.571c-.229-.229-.61-.229-.876 0l-.762.762c-.229.229-.229.61 0 .876l.571.571s.381.381.152.876c-.229.419-.419.838-.533 1.295-.152.495-.724.533-.724.533h-.8a.602.602 0 0 0-.61.61v1.067c0 .343.267.61.61.61h.8s.571 0 .724.533c.114.457.305.876.533 1.295.229.495-.152.876-.152.876l-.571.571c-.229.229-.229.61 0 .876l.762.762c.229.229.61.229.876 0l.571-.571s.381-.381.876-.152c.419.229.838.419 1.295.533.495.152.533.724.533.724v.8c0 .343.267.61.61.61h1.067c.343 0 .61-.267.61-.61v-.8s0-.571.533-.724c.457-.114.876-.305 1.295-.533.495-.229.876.152.876.152l.571.571c.229.229.61.229.876 0l.762-.762c.229-.229.229-.61 0-.876l-.571-.571s-.381-.381-.152-.876c.229-.419.419-.838.533-1.295.152-.495.724-.533.724-.533h.8c.343 0 .61-.267.61-.61V7.467a.602.602 0 0 0-.61-.61h-.8zM8.5 11.555a3.541 3.541 0 0 1-3.556-3.556A3.541 3.541 0 0 1 8.5 4.443a3.541 3.541 0 0 1 3.556 3.556A3.561 3.561 0 0 1 8.5 11.555z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M1.5 2H0v12c0 .825.675 1.5 1.5 1.5h12V14h-12V2zm13.056-2H4.445c-.794 0-1.444.65-1.444 1.444v10.111c0 .794.65 1.444 1.444 1.444h10.111c.794 0 1.444-.65 1.444-1.444V1.444C16 .65 15.35 0 14.556 0z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 13 15"><path d="M1 0C.45 0 0 .45 0 1v11h1V1h9V0H1zm2.467 2C2.66 2 2 2.65 2 3.444v10.111c0 .794.66 1.444 1.467 1.444h8.067c.807 0 1.467-.65 1.467-1.444V3.444c0-.794-.66-1.444-1.467-1.444H3.467zM3 3h9v11H3V3z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 17 12"><path d="M8.25 0C4.5 0 1.297 2.332 0 5.625c1.297 3.292 4.5 5.625 8.25 5.625s6.953-2.333 8.25-5.625C15.203 2.332 12 0 8.25 0zm0 9.375c-2.07 0-3.75-1.68-3.75-3.75 0-2.07 1.68-3.75 3.75-3.75 2.07 0 3.75 1.68 3.75 3.75 0 2.07-1.68 3.75-3.75 3.75zm0-6C7.005 3.375 6 4.38 6 5.625s1.005 2.25 2.25 2.25 2.25-1.005 2.25-2.25-1.005-2.25-2.25-2.25z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 13"><path d="M1 11.571C1 12.357 1.6 13 2.333 13h5.333c.733 0 1.333-.643 1.333-1.429V3h-8v8.571zM8.5 1L6.786 0H3.215L1.501 1h-1.5v1h10V1h-1.5z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 6" width="22" height="6"><path d="M1.5 2a.5.5 0 0 0 0 1h19a.5.5 0 0 0 0-1h-19z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 6" width="22" height="6"><path d="M2 2a1 1 0 0 0 0 2h18a1 1 0 0 0 0-2H2z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 6" width="22" height="6"><path d="M2 1a1.5 1.5 0 0 0 0 3h18a1.5 1.5 0 0 0 0-3H2z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 6" width="22" height="6"><path d="M2 1a2 2 0 0 0 0 4h18a2 2 0 0 0 0-4H2z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 6" width="22" height="6"><path d="M1.5 2a.5.5 0 0 0 0 1H3V2H1.5zM4 2v1h2V2H4zm3 0v1h2V2H7zm3 0v1h2V2h-2zm3 0v1h2V2h-2zm3 0v1h2V2h-2zm3 0v1h1.5a.5.5 0 0 0 0-1H19z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 6" width="22" height="6"><path d="M1.5 2a.5.5 0 0 0 0 1H5V2zM7 2v1h3V2zm5 0v1h3V2zm5 0v1h3.5a.5.5 0 0 0 0-1z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 6" width="22" height="6"><path d="M20 2.5a.5.5 0 1 1 1 0 .5.5 0 1 1-1 0zm-19 0a2 2 0 1 1 4 0 2 2 0 1 1-4 0z"/><path d="M20.5 3H3V2h17.5z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 6" width="22" height="6"><path d="M0 2.5L8 0v5zm20 0a.5.5 0 1 1 1 0 .5.5 0 1 1-1 0z"/><path d="M20.5 3H7V2h13.5z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 6" width="22" height="6"><path d="M0 2.5a.5.5 0 1 1 1 0 .5.5 0 1 1-1 0zm18 0a2 2 0 1 1 4 0 2 2 0 1 1-4 0zm-9 0a2 2 0 1 1 4 0 2 2 0 1 1-4 0z"/><path d="M19 3H.5V2H19z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 6" width="22" height="6"><path d="M2 2.5a.5.5 0 1 1-1 0 .5.5 0 1 1 1 0zM21 2.5a2 2 0 1 1-4 0 2 2 0 1 1 4 0z"/><path d="M1.5 2H19v1H1.5z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 6" width="22" height="6"><path d="M22 2.5L14 5V0zM2 2.5a.5.5 0 1 1-1 0 .5.5 0 1 1 1 0z"/><path d="M1.5 2H15v1H1.5z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 6" width="22" height="6"><path d="M22 2.5a.5.5 0 1 1-1 0 .5.5 0 1 1 1 0zM4 2.5a2 2 0 1 1-4 0 2 2 0 1 1 4 0zM13 2.5a2 2 0 1 1-4 0 2 2 0 1 1 4 0z"/><path d="M3 2h18.5v1H3z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 38 38"><path d="M0 0v38h38V0H0zm7 29h24v4H7v-4z" class="bg"/><path d="M24.748 16l-3.75-3.748-9.998 10V26h3.75l9.998-10zm2.96-2.96a.996.996 0 0 0 0-1.408l-2.34-2.34a.996.996 0 0 0-1.41 0l-1.96 1.96 3.75 3.75 1.96-1.96z" class="icon"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 38 38"><path d="M0 0v38h38V0H0zm7 29h24v4H7v-4z" class="bg"/><path d="M24.06 17.94L15.123 9l-1.41 1.41 2.38 2.38-5.15 5.15a1.49 1.49 0 0 0 0 2.12l5.5 5.5c.29.29.68.44 1.06.44s.77-.15 1.06-.44l5.5-5.5c.59-.58.59-1.53 0-2.12zM12.713 19l4.79-4.79L22.29 19h-9.58zM26.5 20.5s-2 2.17-2 3.5c0 1.1.9 2 2 2s2-.9 2-2c0-1.33-2-3.5-2-3.5z" class="icon"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 38 38"><path d="M0 0v38h38V0H0zm7 29h24v4H7v-4z" class="bg"/><path d="M23.094 25.5L22 22.17h-5.904l-1.17 3.33H12.5l6.446-16h.574l5.98 16h-2.405zM19.13 13.637l-2.46 6.95h4.712l-2.252-6.95z" class="icon"/></svg>'
},
function(t, e, i) {
"use strict";
var o = i(212).TimePointIndexSearchMode,
n = i(58),
r = i(48),
s = i(1002),
a = i(365),
l = i(330),
c = l.ChartApiInterface,
h = l.HandlerInfo,
u = i(15).requireFullInterfaceImplementation,
d = i(7).getLogger("Chart.ChartApiLocal"),
p = i(49),
_ = i(34).Interval;
TradingView.STUDY_COUNT_LIMIT = 120, JSServer.ChartApi = function(t) {
this._notificationHandlers = {}, this._sessions = {}, this.studyCounter = 0, this._connected = !
1, this._enabled = !1, this._studyEngine = new s(t), this._callbacks = {}, this
._symbolIdCache = {}, this._seriesIdCache = {}, this._recentSeriesId = {}, this
._enableLogging = !1, this._enabledMoreBarsRequest = !0, this._serverTimeOffset = 0;
var e = this;
this._studyEngine.on("configuration_received", function() {
e._fireEvent("configuration_received")
}), this._studyEngine.on("realtime_tick", function(t) {
var i = {
time: t.value[0] / 1e3,
open: t.value[1],
high: t.value[2],
low: t.value[3],
close: t.value[4],
volume: t.value[5]
};
e._fireEvent("realtime_tick", i, !0)
})
}, JSServer.ChartApi.prototype._makeSymbolKey = function(t, e) {
if (!t || !e) throw Error("incorrect identifiers");
return t + "_" + e
}, JSServer.ChartApi.prototype._makeSeriesKey = function(t, e) {
if (!t || !e) throw Error("incorrect identifiers");
return t + "_" + e
}, JSServer.ChartApi.prototype.destroy = function() {
this._studyEngine.destroy(), this._studyEngine = null
}, JSServer.ChartApi.prototype.purgeCache = function(t) {
this._symbolIdCache = {}, this._studyEngine.purgeCache(), this._studyEngine
.purgeRangeExtensionData(), this._studyEngine.purgeDataCache()
}, JSServer.ChartApi.prototype.setAdditionalBarsRequestEnabled = function(t) {
this._enabledMoreBarsRequest = t
}, JSServer.ChartApi.prototype.setTimeFramesList = function(t) {
var e, i, o, n, s, a, l, c;
for (this._timeframes = [], e = /(\d+)(\w+)/, i = 0; i < t.length; ++i) o = t[i], n = e.exec(o
.text), s = n[2].toLowerCase(), a = parseInt(n[1]), l = "y" === s ? 12 * a + "m" : a +
s, c = r.Symbol.parsePeriod(o.resolution), this._timeframes.push({
text: $.t(o.title) || a + $.t(s, {
context: "dates",
count: a
}),
description: o.description || "",
value: l,
targetResolution: o.resolution,
requiresIntraday: c.isIntraday
})
}, JSServer.ChartApi.prototype.defaultWatchlistSymbols = function() {
return this._watchlistSettings.default_symbols
}, JSServer.ChartApi.prototype.availableTimeFrames = function(t, e) {
return t ? e !== p.STATUS_DELAYED && e !== p.STATUS_DELAYED_STREAMING && e !== p.STATUS_READY ?
[] : this._timeframes.filter(function(e) {
return !(e.requiresIntraday && !t.has_intraday) && !(t.supported_resolutions && t
.supported_resolutions.indexOf(_.normalize(e.targetResolution)) < 0)
}) : []
}, JSServer.ChartApi.prototype.defaultResolutions = function() {
return this._studyEngine.supportedResolutions() || {
1: 1,
3: 1,
5: 1,
15: 1,
30: 1,
45: 1,
60: 1,
120: 1,
180: 1,
240: 1,
D: 1,
W: 1,
M: 1
}
}, JSServer.ChartApi.prototype.supportedSymbolsTypes = function() {
return this._studyEngine.supportedSymbolsTypes()
}, JSServer.ChartApi.prototype.supportedExchangesList = function() {
return this._studyEngine.supportedExchangesList()
}, JSServer.ChartApi.prototype.futuresRegex = function() {
return this._studyEngine.futuresRegex()
}, JSServer.ChartApi.prototype.start = function() {
this._enabled = !0, this._fireEvent("start_enabled")
}, JSServer.ChartApi.prototype._logMessage = function(t) {
this._enableLogging && console.log(t)
}, JSServer.ChartApi.prototype.unsubscribe = function(t, e) {
var i = this._callbacks[t];
i && i.splice(i.indexOf(e), 1)
}, JSServer.ChartApi.prototype.on = function(t, e) {
return this._callbacks.hasOwnProperty(t) || (this._callbacks[t] = []), this._callbacks[t].push(
e), this
}, JSServer.ChartApi.prototype._fireEvent = function(t, e, i) {
var o, n;
if (this._callbacks.hasOwnProperty(t))
for (o = this._callbacks[t].slice(0), i || (this._callbacks[t] = []), n = 0; n < o
.length; ++n) o[n](e)
}, JSServer.ChartApi.prototype.chartCreateSession = function(t, e) {}, JSServer.ChartApi.prototype
.chartDeleteSession = function(t) {}, JSServer.ChartApi.prototype.createSession = function(t, e) {
TradingView.ChartapiMessagerInstances[t] = new a(this, t), this._sessions[t] = e, this
._notificationHandlers[t] = {}, this.connected() && e.onMessage({
method: "connected",
params: []
})
}, JSServer.ChartApi.prototype.removeSession = function(t) {
delete this._sessions[t], delete this._notificationHandlers[t], this._studyEngine.stopSources(t)
}, JSServer.ChartApi.prototype.connected = function() {
return this._connected
}, JSServer.ChartApi.prototype.connect = function() {
if (!this._enabled) {
var t = this;
return void this.on("start_enabled", function() {
t.connect()
})
}
this.connected() || (this._connected = !0, this.sessionid = "dummy session id", this
._notifySessions({
method: "connected",
params: []
}))
}, JSServer.ChartApi.prototype.disconnect = function() {
this._connected = !1, this._notifySessions({
method: "disconnected",
params: []
})
}, JSServer.ChartApi.prototype.switchTimezone = function(t, e) {
if (TradingView.ChartapiMessagerInstances[t].timezone() !== e && (TradingView
.ChartapiMessagerInstances[t].setTimezone(e), this._recentSeriesId[t])) {
var i = this;
this._doWhenSeriesSymbolIdIsReady(t, this._recentSeriesId[t], function(e) {
var o = i._seriesIdCache[i._makeSeriesKey(t, i._recentSeriesId[t])].resolution;
i._studyEngine.recreateSources(e.name, o, t, !0), i._doWhenSeriesDataReceived(t,
function() {
var o = i._seriesIdCache[i._makeSeriesKey(t, i._recentSeriesId[t])]
.resolution,
n = TradingView.ChartapiMessagerInstances[t].lastBarTime(i
._recentSeriesId[t]);
n && i._studyEngine.rebuildExtrapolatedData(t, e.name, o, e.info,
1e3 * n)
})
})
}
}, JSServer.ChartApi.prototype.receiveLocalResponse = function(t) {
this._logMessage("< " + t.method), this._dispathNotification(t), this._fireEvent("message_" + t
.method, void 0, !0)
}, JSServer.ChartApi.prototype.getMarks = function(t, e, i, o, n) {
this._studyEngine.getMarks(t, e, i, o, n)
}, JSServer.ChartApi.prototype.getTimescaleMarks = function(t, e, i, o, n) {
this._studyEngine.getTimescaleMarks(t, e, i, o, n)
}, JSServer.ChartApi.prototype.resolveSymbol = function(t, e, i, o, n) {
function r(e, o) {
TradingView.ChartapiMessagerInstances[t].onSymbolError(e, o), s._symbolIdCache[s
._makeSymbolKey(t, e)] = {
name: i,
status: "invalid_symbol"
}, s._fireEvent("resolve_fail", {
session: t,
symbolId: e
}, !0),
s._fireEvent(s._makeSymbolKey(t, e) + "_resolve_fail")
}
this._notificationHandlers[t][e] = new h(o, e), this._symbolIdCache[this._makeSymbolKey(t, e)] =
null;
var s = this;
this._studyEngine.resolveSymbol(i, function(o) {
if (o.errmsg) return void r(e, o.errmsg);
s._symbolIdCache[s._makeSymbolKey(t, e)] = {
name: i,
info: o,
status: "ok"
}, s._fireEvent("symbol_resolved", {
symbolInfo: o,
symbolId: e,
session: t
}, !0), s._fireEvent(s._makeSymbolKey(t, e) + "_resolved", o), TradingView
.ChartapiMessagerInstances[t].onSymbolResolved(e, o)
}, function(t) {
r(e, t)
})
}, JSServer.ChartApi.prototype._doWhenSymbolIdIsReady = function(t, e, i) {
function o() {
return {
name: r._symbolIdCache[r._makeSymbolKey(t, e)].name,
info: r._symbolIdCache[r._makeSymbolKey(t, e)].info
}
}
function n() {
s && (i(o()), s = !1, r.unsubscribe(r._makeSymbolKey(t, e) + "_resolved", n), r.unsubscribe(
r._makeSymbolKey(t, e) + "_resolve_fail", n))
}
var r = this,
s = !0;
this._symbolIdCache[this._makeSymbolKey(t, e)] ? n() : (this.on(this._makeSymbolKey(t, e) +
"_resolved", n), this.on(this._makeSymbolKey(t, e) + "_resolve_fail", n))
}, JSServer.ChartApi.prototype._doWhenSeriesDataReceived = function(t, e) {
TradingView.ChartapiMessagerInstances[t].seriesCompleted.subscribe(null, e, !0)
}, JSServer.ChartApi.prototype._doWhenSeriesSymbolIdIsReady = function(t, e, i, o) {
function n() {
var e = c._symbolIdCache[c._makeSymbolKey(t, h)];
return {
name: e.name,
info: e.info
}
}
function r() {
i(n())
}
function s() {
c.unsubscribe("symbol_resolved", l), c.unsubscribe("resolve_fail", a)
}
function a(e) {
e.symbolId === h && e.session === t && (s(), o && o())
}
function l(e) {
e.symbolId === h && e.session === t && (s(), r())
}
var c = this,
h = this._seriesIdCache[t + "_" + e].symbolId;
this._symbolIdCache[this._makeSymbolKey(t, h)] ? r() : (this.on("symbol_resolved", l), this.on(
"resolve_fail", a))
}, JSServer.ChartApi.prototype.createSeries = function(t, e, i, o, n, s, a) {
i = i || "";
var l = this;
this._notificationHandlers[t][e] = new h(function(s) {
if ("series_completed" === s.method) {
var c = r.Symbol.parsePeriod(n);
c.range && l._applyRange(t, o, e, i, c.range)
}
a(s)
}, e), this._recentSeriesId[t] = e, TradingView.ChartapiMessagerInstances[t].setResolution(r
.Symbol.parsePeriod(n).pureResolution), this._seriesIdCache[t + "_" + e] = {
symbolId: o,
resolution: n,
turnaround: i
}, this._studyEngine.updateSeriesTurnaround(t, e, i), this._doWhenSeriesSymbolIdIsReady(t,
e,
function(o) {
l._studyEngine.seriesTurnaround(t, e) === i && l._studyEngine.createSeries(o.name,
n, t, e, i)
})
}, JSServer.ChartApi.prototype.removeSeries = function(t, e, i) {
this._notificationHandlers[t][e] = new h(i, e), this._studyEngine.removeSeries(t, e)
}, JSServer.ChartApi.prototype.setVisibleTimeRange = function(t, e, i, n, r) {
function s() {
var s, l;
a = t.data(), s = [a.plotValueToTimePointIndex(i, TradingView.TIME_PLOT, o.FromLeft), a
.plotValueToTimePointIndex(n, TradingView.TIME_PLOT, o.FromRight)
], a.valueAt(s[1])[0] < n && t.syncModel() && (l = t.syncModel().distance(a.valueAt(s[
1])[0], n), l.success && (s[1] += l.result)), TradingView.ChartapiMessagerInstances[
e].onSeriesTimeframeUpdate(c, h._seriesIdCache[e + "_" + c].turnaround, s[0], s[1],
!0), t.requestMoreData(), r && r()
}
var a = t.data(),
l = !!a.plotValueToTimePointIndex(i, TradingView.TIME_PLOT, o.FromLeft),
c = this._recentSeriesId[e],
h = this;
l ? s() : (this._studyEngine.ensureExtendedTo(c, e, i), this._doWhenSeriesDataReceived(e, s))
}, JSServer.ChartApi.prototype._exactBarsCountOfTimeFrame = function(t, e) {
var i, o = chartWidget.model().mainSeries().bars(),
r = chartWidget.model().mainSeries().symbolInfo().session,
s = o._valueAt(o.size() - 1)[0],
a = n.alignPeriodsBack(r, t.resolution, t.interval, 1, 1e3 * s),
l = o.size();
for (a /= 1e3, i = 0, i = 0; i < l && !(o._valueAt(i)[0] > a); ++i);
return l - i
}, JSServer.ChartApi.prototype._applyRange = function(t, e, i, o, n) {
var r, s, a, l = chartWidget.model().mainSeries().bars().size();
0 !== l && (r = this._exactBarsCountOfTimeFrame(n, this._symbolIdCache[this._makeSymbolKey(t,
e)].info), s = Math.max(0, l - 1 - r), a = Math.max(s, l - 1), TradingView
.ChartapiMessagerInstances[t].onSeriesTimeframeUpdate(i, o, s, a))
}, JSServer.ChartApi.prototype.modifySeries = function(t, e, i, o, n, s, a) {
var l, c;
i = i || "", l = this._seriesIdCache[t + "_" + e] ? this._seriesIdCache[t + "_" + e]
.resolution : void 0, TradingView.ChartapiMessagerInstances[t].setResolution(r.Symbol
.parsePeriod(n).pureResolution), c = this, this._notificationHandlers[t][e] = new h(
function(a) {
var h, u;
"series_completed" === a.method && (h = r.Symbol.parsePeriod(l), u = r.Symbol
.parsePeriod(n), u.range && h.range !== u.range && c._applyRange(t, o, e, i,
u.range)), s(a)
}, e), this._recentSeriesId[t] = e, this._studyEngine.updateSeriesTurnaround(t, e, i),
a && (this._seriesIdCache[this._makeSeriesKey(t, a)] = null), this._seriesIdCache[this
._makeSymbolKey(t, e)] = {
symbolId: o,
resolution: n,
turnaround: i
}, this._doWhenSeriesSymbolIdIsReady(t, e, function(e) {
c._studyEngine.purgeRangeExtensionData(t), c._studyEngine.recreateSources(e.name, n,
t, !0)
})
}, JSServer.ChartApi.prototype.requestMoreData = function(t, e, i, o) {
if (this._enabledMoreBarsRequest) {
var n = this;
setTimeout(function() {
n._notificationHandlers[t][e] = new h(o, e), n._studyEngine.extendSeriesRange(e,
t, i)
})
}
}, JSServer.ChartApi.prototype.setStudiesAccessController = function(t) {
this.studiesAccessController = t
}, JSServer.ChartApi.prototype.setWatchlistSettings = function(t) {
this._watchlistSettings = t
}, JSServer.ChartApi.prototype.allStudiesMetadata = function() {
return this._studyEngine.studiesMetadata()
}, JSServer.ChartApi.prototype.requestMetadata = function(t, e, i) {
this._notificationHandlers[t][e] = new h(i, e);
var o = this.studiesAccessController.getEnabledTools();
TradingView.ChartapiMessagerInstances[t].onRequestMetadata(e, o)
}, JSServer.ChartApi.prototype.isCanCreateStudy = function() {
return this.studyCounter < TradingView.STUDY_COUNT_LIMIT
}, JSServer.ChartApi.prototype.createStudy = function(t, e, i, o, n, r, s) {
var a, l, c;
if (!this.isCanCreateStudy()) throw Error("Exceeded the limit of studies");
a = this, i = i || "", this._notificationHandlers[t][e] = new h(s, e), l = this._seriesIdCache[
this._makeSeriesKey(t, o)].symbolId, c = this._seriesIdCache[this._makeSeriesKey(t, o)]
.resolution, this._doWhenSymbolIdIsReady(t, l, function(o) {
a._studyEngine.createStudy(o.name, c, t, e, i, n, r), a.studyCounter++
})
}, JSServer.ChartApi.prototype.rebindStudy = function(t, e, i, o, n, r, s, a) {
throw Error("Not implemented")
}, JSServer.ChartApi.prototype.removeStudy = function(t, e) {
this._notificationHandlers[t][e] = null, this._studyEngine.removeStudy(t, e),
this.studyCounter--
}, JSServer.ChartApi.prototype.modifyStudy = function(t, e, i, o, n) {
var r = this;
setTimeout(function() {
i = i || "", r._notificationHandlers[t][e] = new h(n, e), r._studyEngine
.recomputeStudy(e, o, t, i)
}, 0)
}, JSServer.ChartApi.prototype.createPointset = function(t, e, i, o, n, r, s) {
i = i || "", this._notificationHandlers[t][e] = new h(s, e);
var a = this;
this._doWhenSymbolIdIsReady(t, o, function(i) {
a._studyEngine.createPointset(t, e, i.info.full_name, i.info, n, r)
})
}, JSServer.ChartApi.prototype.modifyPointset = function(t, e, i, o, n) {
throw Error("This call is not implemented")
}, JSServer.ChartApi.prototype.removePointset = function(t, e, i) {
this._notificationHandlers[t][e] = null, this._studyEngine.removePointset(e)
}, JSServer.ChartApi.prototype.requestMoreTickmarks = function(t, e, i, o) {
this._notificationHandlers[t][e] = new h(o, e);
var n = this;
this._doWhenSeriesSymbolIdIsReady(t, e, function(o) {
var r = n._seriesIdCache[n._makeSeriesKey(t, e)].resolution;
n._studyEngine.onMoreTickmarksRequested(t, o.name, o.info, r, i)
})
}, JSServer.ChartApi.prototype.requestFirstBarTime = function(t, e, i, o) {
this._notificationHandlers[t][e] = new h(o, e)
}, JSServer.ChartApi.prototype._invokeHandler = function(t, e) {
t && t(e)
}, JSServer.ChartApi.prototype._sendRequest = function(t, e) {
throw Error("This method is not implemented")
}, JSServer.ChartApi.prototype._onMessage = function(t) {
throw Error("This method is not implemented")
}, JSServer.ChartApi.prototype._convertTimescaleResponse = function(t) {
var e, i = t.marks;
for (e = 0; e < i.length; ++e) i[e] = {
span: i[e][0],
time: i[e][1],
index: i[e][2]
};
return t
}, JSServer.ChartApi.prototype._dispathNotification = function(t) {
var e, i, o, n, r, s, a, l, c, h, u = t.params.shift();
if (this._notificationHandlers[u]) switch (t.method) {
case "timescale_update":
e = t.params[0], i = t.params[1], o = this._convertTimescaleResponse(i), o.clear =
0 === i.changes.length && 0 === i.marks.length, this._sessions[u].onMessage({
method: "timescale_update",
params: o
});
for (n in e) r = {}, r.customId = n, r.plots = e[n].series, e[n].ns && (r
.nonseries = e[n].ns), r.turnaround = e[n].turnaround, s = {
method: "data_update",
params: r
}, this._invokeNotificationHandler(u, n, s);
break;
case "tickmark_update":
o = this._convertTimescaleResponse(t.params[0]), o.changes = [], this._sessions[u]
.onMessage({
method: "timescale_update",
params: o
});
break;
case "data_update":
for (n in t.params[0]) {
a = t.params[0][n], r = {}, r.customId = n, r.plots = a.series ? a.series : a
.plots, r.turnaround = a.turnaround, "s" in a && "ns" in a && (r.plots = a
.s, r.nonseries = a.ns);
for (l = 0; l < r.plots.length; l++)
for (c in r.plots[l].value) 1e100 === r.plots[l].value[c] && (r.plots[l]
.value[c] = void 0);
s = {
method: "data_update",
params: r
}, this._invokeNotificationHandler(u, n, s)
}
break;
case "index_update":
for (n in t.params[0]) s = {
method: "index_update",
params: t.params[0][n]
}, this._invokeNotificationHandler(u, n, s);
break;
case "critical_error":
d.logNormal(new Date + " critical_error session:" + this.sessionid + " reason:" + t
.params[0]), this._sessions[u].onMessage({
method: "critical_error",
params: t.params
});
break;
case "quote_symbol_data":
case "quote_list_fields":
case "depth_symbol_error":
case "depth_symbol_success":
case "dd":
case "dpu":
case "depth_bar_last_value":
this._sessions[u].onMessage({
method: t.method,
params: t.params
});
break;
default:
h = t.params[0], this._invokeNotificationHandler(u, h, t)
}
}, JSServer.ChartApi.prototype._invokeNotificationHandler = function(t, e, i) {
if (void 0 !== e) {
var o = this._notificationHandlers[t][e];
void 0 !== o && o && this._invokeHandler(o.handler, i), "series_deleted" !== i.method &&
"study_deleted" !== i.method || delete this._notificationHandlers[t][e]
}
}, JSServer.ChartApi.prototype.searchSymbols = function(t, e, i, o, n, r, s, a, l) {
0 === t.length && 0 === e.length && 0 === i.length && l([]), this._studyEngine.searchSymbols(t,
e, i, l)
}, JSServer.ChartApi.prototype._notifySessions = function(t) {
var e, i;
for (e in this._sessions) {
if (!this._sessions.hasOwnProperty(e)) return;
i = this._sessions[e], "function" == typeof i.onMessage && i.onMessage(t)
}
}, JSServer.ChartApi.prototype.unpack = function(t) {
throw Error("This method is not implemented")
}, JSServer.ChartApi.prototype.quoteCreateSession = function(t) {
return this._studyEngine.quoteCreateSession(t)
}, JSServer.ChartApi.prototype.quoteDeleteSession = function(t) {
return this._studyEngine.quoteDeleteSession(t)
}, JSServer.ChartApi.prototype.quoteSetFields = function(t, e) {
return this._studyEngine.quoteSetFields(t, e)
}, JSServer.ChartApi.prototype.quoteAddSymbols = function(t, e) {
return -1 !== e.indexOf(void 0) && (console.warn("Got undefined in quoteAddSymbols"), e = e
.filter(function(t) {
return !!t
})), this._studyEngine.quoteAddSymbols(t, e)
}, JSServer.ChartApi.prototype.quoteRemoveSymbols = function(t, e) {
return this._studyEngine.quoteRemoveSymbols(t, e)
}, JSServer.ChartApi.prototype.quoteFastSymbols = function(t, e) {
return this._studyEngine.quoteFastSymbols(t, e)
}, JSServer.ChartApi.prototype.quoteHibernateAll = function(t) {
return this._studyEngine.quoteHibernateAll(t)
}, JSServer.ChartApi.prototype.depthCreateSession = function(t) {
return this._studyEngine.depthCreateSession(t)
}, JSServer.ChartApi.prototype.depthDeleteSession = function(t) {
return this._studyEngine.depthDeleteSession(t)
}, JSServer.ChartApi.prototype.depthSetSymbol = function(t, e) {
return this._studyEngine.depthSetSymbol(t, e)
}, JSServer.ChartApi.prototype.depthClearSymbol = function(t) {}, JSServer.ChartApi.prototype
.depthSetScale = function(t, e) {}, JSServer.ChartApi.prototype.createStudiesAccessController =
function(t, e, i) {
return new this.StudiesAccessController(this._studyEngine, t && JSON.parse(t) || {
type: "black",
tools: []
})
}, JSServer.ChartApi.prototype.StudiesAccessController = function(t, e) {
this._studyEngine = t, this._studiesAccess = e
}, JSServer.ChartApi.prototype.StudiesAccessController.prototype._findTool = function(t) {
var e, i, o = null;
for (e = 0; e < this._studiesAccess.tools.length; ++e)
if (i = this._studiesAccess.tools[e], i.name === t || i === t) {
o = i;
break
} return o
}, JSServer.ChartApi.prototype.StudiesAccessController.prototype.getEnabledTools = function() {
return this._studyEngine.studiesMetadata().filter(function(t) {
var e = this._findTool(t.description);
return "black" === this._studiesAccess.type ? !e || e.grayed : !!e
}, this)
}, JSServer.ChartApi.prototype.StudiesAccessController.prototype.isToolGrayed = function(t) {
var e = this._findTool(t);
return e && e.grayed
},
JSServer.ChartApi.prototype.serverTimeOffset = function() {
return this._studyEngine.serverTimeOffset()
}, JSServer.ChartApi.prototype.alignTimePoint = function(t, e, i) {
return this._studyEngine.alignTimePoint(t, e, i)
}, JSServer.ChartApi.prototype.disconnectCount = function() {
return 0
}, u(JSServer.ChartApi, "JSServer.ChartApi", c, "ChartApiInterface"), t.exports = JSServer.ChartApi
},
function(t, e, i) {
"use strict";
(function(e, o) {
function n(t, i) {
var o = e.get_timezone(i.timezone),
n = new y.Session;
return n.init(o, i.session), f.Symbol.newBarBuilder(t, n, n)
}
function r(t) {
function e(t) {
console.warn("SymbolInfo validation: " + t)
}
var i, o;
if ((void 0 === t.minmov || t.minmov <= 0) && e("minmov must be positive"), (void 0 === t
.pricescale || t.pricescale <= 0) && e("pricescale must be positive"), void 0 !== t
.name && 0 !== t.name.length || e("name must be non-empty string"), void 0 !== t
.session && 0 !== t.session.length || e("session must be non-empty string"), void 0 ===
t.timezone || 0 === t.timezone.length ? e("timezone must be non-empty string") :
"exchange" !== t.timezone && d(t.timezone) || "UTC" !== t.timezone && e(
'unsupported timezone "{0}"'.format(t.timezone)), void 0 !== t.intraday_multipliers)
if (i = t.intraday_multipliers, Array.isArray(i))
for (o = 0; o < i.length; ++o) "string" != typeof i[o] && e(
'intraday_multipliers[{0}] = "{1}" must be string (now: {2})'.format(o + 1,
i[o], typeof i[o]));
else e("intraday_multipliers must be array");
(t.supported_resolutions || []).filter(function(t) {
return !b.isValid(t)
}).forEach(function(t) {
e("supported_resolutions field contains invalid value: " + t)
})
}
function s(t) {
var e, i;
if (t.base_name || (t.base_name = [t.name]), t.legs || (t.legs = [t.name]), t.exchange || (t
.exchange = t["exchange-listed"]), t.full_name || (t.full_name = t.symbol || (t
.exchange ? t.exchange + ":" + t.name : t.name)), t.pro_name || (t.pro_name = t
.full_name), t.data_status || (t.data_status = "streaming"), t.ticker || (t.ticker =
t.symbol || t.name), !t.session && t["session-regular"] && (t.session = t[
"session-regular"]), !t.minmov && t.minmovement && (t.minmov = t.minmovement), t
.supported_resolutions)
for (e = 0; e < t.supported_resolutions.length; e++) i = b.parse(t
.supported_resolutions[e]), i.isValid() && (t.supported_resolutions[e] = i
.value())
}
function a(t, e) {
null != t.graphicsCmds && null != t.graphicsCmds.create && null != t.graphicsCmds.create
.vertlines && t.graphicsCmds.create.vertlines.forEach(function(t) {
t.data.forEach(e)
})
}
function l(t, e) {
var i, o, n = t.length,
r = e.length,
s = 0;
for (i = 0; i < n; ++i) {
for (o = t[i]; s < r && e[s].value[0] < o;) ++s;
s >= r ? t[i] = e[r - 1].index : t[i] = e[s].index
}
}
function c(t, e) {
var i, o;
null !== e && 0 !== e.length && (i = {}, w(t, function(t) {
T(t) && Object.keys(t).forEach(function(e) {
e.endsWith("__t") && (i[t[e]] = !0)
})
}, {
visitInstances: !0
}), o = Object.keys(i).map(Number).sort(function(t, e) {
return t - e
}), o.forEach(function(t, e) {
i[t] = e
}), Object.assign(t, w(t, function(t) {
return T(t) && Object.keys(t).forEach(function(e) {
e.endsWith("__t") && (t[e.slice(0, -3)] = i[t[e]])
}), t
}, {
visitInstances: !0
})), l(o, e), t.indexes = o)
}
function h(t, e) {
var i, o;
null !== e && 0 !== e.length && (i = {}, a(t.data, function(t) {
i[t.time] = !0
}), o = Object.keys(i).map(Number).sort(function(t, e) {
return t - e
}), o.forEach(function(t, e) {
i[t] = e
}),
a(t.data, function(t) {
t.index = i[t.time]
}), l(o, e), t.indexes = o)
}
var u, d, p, _ = i(1003),
f = i(48),
m = i(1004),
g = i(1006),
v = i(1007),
y = i(58),
b = i(34).Interval,
S = i(23),
w = i(1008).visitObject,
T = i(15).isObject;
i(234), i(365), u = i(1009).DatafeedRequestsCachedProcessor, d = i(171).timezoneIsAvailable, p =
function(t) {
function e(t, e, i) {
return function(o) {
var r, a;
o && o.count() && (r = n(e, t), a = 1e3 * s.getCurrentUTCTime(), r.moveTo(
a), r.indexOfBar(a) >= 0 && o.setLastBarClosed(!1)), i(o)
}
}
function i(t, i, o, n, r) {
return s._cachedDatafeed.subscribe(t, i, o, e(t, i, n), r)
}
function o(t) {
return s._cachedDatafeed.unsubscribe(t)
}
function r(t, e, i) {
s.resolveSymbol(t, e, i)
}
var s = this;
this._studiesCache = {}, this._sessionsLastDataCache = {}, this._metainfoCache = [],
this._barsCoefficientsCache = {}, this._extrapolationManager = g, this
._externalDatafeed = t, this._datafeedConfiguration = null, this
._marketStatusWatchers = {}, this._resolveRequests = {}, this._callbacks = {}, this
._serverTimeOffset = 0, s._logMessage("Datafeed settings received: {0}".format(JSON
.stringify(window.configurationData))), s._datafeedConfiguration = s
._adoptConfigurationData(window.configurationData), s._fireEvent(
"configuration_received"), s._externalDatafeed.getServerTime && s
._externalDatafeed.getServerTime(function(t) {
s._serverTimeOffset = t - (new Date).valueOf() / 1e3
}), this._pointsetsManager = v, this._rangeExtensionData = {}, this
._quotesInfo = [], this._depthInfo = [], this._fullNameSymbolInfoMap = {}, this
._endOfData = {}, this._computeStudyCounter = 0, this._cachedDatafeed = new u(t, p
.createDWMAligner), this._extendedRange = function(t) {
return s._rangeExtensionData[t] && s._rangeExtensionData[t].summary
}, this._extendedTime = function(t) {
return s._rangeExtensionData[t] && s._rangeExtensionData[t].time
}, m.setupFeed({
resolve: r,
subscribe: i,
unsubscribe: o,
calculateHistoryDepth: this._externalDatafeed.calculateHistoryDepth ? this
._externalDatafeed.calculateHistoryDepth.bind(this._externalDatafeed) :
void 0
})
}, p.createDWMAligner = function(t, i, n) {
var r, s, a;
return o.enabled("disable_resolution_rebuild") || !b.isDWM(t) ? null : (r = new y
.Session, r.init("Etc/UTC", "0000-0000:1234567"), s = e.get_timezone(i), a =
new y.Session, a.init(s, n), f.Symbol.newBarBuilder(t, a, r))
}, p.prototype._barsCoefficients = function(t, e) {
if (0 !== t.indexOf("=")) return {};
var i = t + e;
return this._barsCoefficientsCache[i] || (this._barsCoefficientsCache[i] = {}), this
._barsCoefficientsCache[i]
}, p.prototype.destroy = function() {
this._cachedDatafeed.destroy(), this._externalDatafeed = null
}, p.prototype.purgeCache = function() {
this._endOfData = {}, this._resolveRequests = {}
}, p.prototype.purgeDataCache = function() {
this._cachedDatafeed.purgeCache()
}, p.prototype._logMessage = function(t) {
o.enabled("charting_library_debug_mode") && console.log(t)
}, p.prototype._extendRange = function(t, e) {
this._rangeExtensionData[t] || (this._rangeExtensionData[t] = {}), void 0 === this
._rangeExtensionData[t].summary && (this._rangeExtensionData[t].summary = 0), this
._rangeExtensionData[t].summary += e
}, p.prototype.on = function(t, e) {
return this._callbacks.hasOwnProperty(t) || (this._callbacks[t] = []), this._callbacks[
t].push(e), this
}, p.prototype._fireEvent = function(t, e, i) {
var o, n;
if (this._callbacks.hasOwnProperty(t)) {
for (o = this._callbacks[t], n = 0; n < o.length; ++n) o[n](e);
i || (this._callbacks[t] = [])
}
}, p.prototype._adoptConfigurationData = function(t) {
var e, i, o, n, r, s = TradingView.merge({}, t),
a = s.supported_resolutions;
if (!a || 0 === a.length) return s.supported_resolutions = void 0, s;
for (e = {}, i = 0; i < a.length; i++) o = a[i], n = b.parse(o), r = n.value(), n
.isValid() ? e.hasOwnProperty(r) ? console.warn(
"Duplicating resolution in the configuration data: `" + o + "`") : e[r] = 1 :
console.warn("Invalid resolution in the configuration data: `" + o + "`");
return s.supported_resolutions = e, s
}, p.prototype.supportedResolutions = function() {
return this._datafeedConfiguration.supported_resolutions
}, p.prototype.supportedSymbolsTypes = function() {
return this._datafeedConfiguration.symbols_types || []
}, p.prototype.supportedExchangesList = function() {
return this._datafeedConfiguration.exchanges || []
}, p.prototype.futuresRegex = function() {
return this._datafeedConfiguration.futures_regex || /$a/
}, p.prototype._findStudyObject = function(t) {
var e = t.split("@")[0],
i = JSServer.studyLibrary.filter(function(i) {
return i.metainfo.id === t || i.metainfo.shortDescription === e
});
if (0 === i.length) throw Error("Study `" + t + "` not found");
return i[0]
}, p.prototype.getMarks = function(t, e, i, o, n) {
var r, s = {
red: 6,
green: 5,
blue: 4,
yellow: 3
};
this._externalDatafeed.getMarks && this._datafeedConfiguration.supports_marks && (this
._logMessage(
"Requesting bars marks: symbol {0}, resolution {1}, range [{2} ... {3}]"
.format(t.full_name, n, new Date(1e3 * e).toUTCString(), new Date(1e3 * i)
.toUTCString())), r = this, this._externalDatafeed.getMarks(t, e, i,
function(e) {
var i, a, l = e.map(function(t) {
return t.time = parseInt(t.time), t
});
r._logMessage(
"Received bars marks: symbol {0}, resolution {1}, marks {2}"
.format(t.full_name, n, JSON.stringify(l))), i = p
.createDWMAligner(n, t.timezone, t.session), a = l.map(function(t) {
return t.tickmark = null !== i ? i.tradingDayToSessionStart(
1e3 * t.time) / 1e3 : t.time, t.direction = s[t
.color], t.onClicked = function() {
S.emit("onMarkClick", t.id)
}, t.label = !!t.label && t.label[0], t
}), o(a)
}, n))
}, p.prototype.getTimescaleMarks = function(t, e, i, o, n) {
if (this._externalDatafeed.getTimescaleMarks && this._datafeedConfiguration
.supports_timescale_marks) {
this._logMessage(
"Requesting timescale marks: symbol {0}, resolution {1}, range [{2} ... {3}]"
.format(t.full_name, n, new Date(1e3 * e).toUTCString(), new Date(1e3 * i)
.toUTCString()));
var r = this;
this._externalDatafeed.getTimescaleMarks(t, e, i, function(e) {
var i, s;
r._logMessage(
"Received timescale marks: symbol {0}, resolution {1}, marks {2}"
.format(t.full_name, n, JSON.stringify(e))), i = p
.createDWMAligner(n, t.timezone, t.session), s = e.map(function(t) {
return t.tickmark = null !== i ? i.tradingDayToSessionStart(
1e3 * t.time) / 1e3 : t.time, t
}), o(s)
}, n)
}
}, p.prototype._computeStudy = function(t, e, i, o, n, r, s, a, l, c) {
function h(t, e, i) {
var o, n, r, s, l = t.time,
c = "number" == typeof e ? [e] : e;
for (o = 0; o < c.length; ++o) n = c[o], n && "object" == typeof n && (_["plot_" +
o] = n.offset, n = n.value, m++), "number" == typeof n && isNaN(n) && (n =
void 0), c[o] = n;
r = p.length - 1, s = r < 0 || l > p[r].value[0], s ? p.push({
index: p.length,
value: [l].concat(c)
}) : p[r].value = [l].concat(c), u || a([p[p.length - 1]], s, p.length, _, i)
}
var u = !0,
d = this._computeStudyCounter++,
p = [],
_ = {},
m = 0,
g = !1,
v = !1,
y = this,
b = function(a) {
var d;
if (f.Symbol.parsePeriod(o).isIntraday && !a.has_intraday) return void l(
"Unsupported resolution. Did you forget to set has_intraday to true?"
);
if (d = new f.StudyEngine({
tickerid: i,
symbolInfo: a,
period: o,
body: e,
sessionId: t,
onErrorCallback: l,
rangeExtension: {
getRangeExtensionCount: y._extendedRange.bind(this, t),
getRangeExtensionTime: y._extendedTime.bind(this, t)
},
input: function(t) {
return r[t]
},
out: function(t, e) {
h(t, e, a)
},
nonseriesOut: function(t, e) {
v = !0, c(e, a)
},
setNoMoreData: function() {
g = !0
},
recalc: function(t, e) {
u = !1, p.endOfData = g, (!v || p.length > 0) && s(p, m >
0 ? _ : void 0, a, e)
}
}), !y._studiesCache[t] || !y._studiesCache[t][n]) throw Error(
"This should never happen");
y._studiesCache[t][n].engine = d
},
S = function(t) {
l(t)
},
w = function() {
return y._studiesCache[t] && y._studiesCache[t][n] && y._studiesCache[t][n]
.activeResolve === d
};
y._studiesCache[t][n].activeResolve = d, this.resolveSymbol(i, function() {
w() && b.apply(y, arguments)
}, function() {
w() && S.apply(y, arguments)
})
}, p.prototype._createStudy = function(t, e, i, o, n, r, s) {
function a(t) {
var e, i, r;
if (Array.isArray(t)) return t;
for (e = [], i = u._studiesCache[o][n].metainfo.inputs, r = 0; r < i.length; r++) e[
r] = t[i[r].id];
return e
}
function l(i, s, a) {
TradingView.ChartapiMessagerInstances[o].onDataUpdate(n, r, u
._convertBarsTimeToUnix(i), s, a, u._extendedRange(t, e)), TradingView
.ChartapiMessagerInstances[o].onStudyCompleted(n, r)
}
var u = this;
s = a(s), TradingView.ChartapiMessagerInstances[o].onStudyLoading(n, r), u
._computeStudy(o, i, t, e, n, s, function(t, e, i) {
l(t, e ? {
data: {
offsets: e
}
} : null, i)
}, function(i, s, a, l, c) {
var h = l ? {
data: {
offsets: l
}
} : null;
TradingView.ChartapiMessagerInstances[o].onDataUpdate(n, r, u
._convertBarsTimeToUnix(i), h, c, u._extendedRange(t, e))
}, function(t) {
TradingView.ChartapiMessagerInstances[o].onStudyError(n, t)
}, function(t, e) {
var i;
switch (t.type) {
case "projection":
this._updateProjectionData(o, n, r, t);
break;
case "study_graphics":
i = {
data: t.data,
indexes: []
}, h(i, u._sessionsLastDataCache[o]), l([], i, e);
break;
case "non_series_data":
i = {
data: t.data,
indexes: []
}, c(i, u._sessionsLastDataCache[o]), l([], i, e);
break;
default:
console.warn("unsupported non-series data type for study " + t.type)
}
}.bind(this))
}, p.prototype.stopSources = function(t) {
var e, i;
for (e in this._studiesCache[t])(i = this._studiesCache[t][e]) && (i.engine && i.engine
.stop(), i.activeResolve = -1);
m.unsubscribeUnused()
}, p.prototype.recreateSources = function(t, e, i, o) {
var n, r;
this.stopSources(i);
for (n in this._studiesCache[i])(r = this._studiesCache[i][n]) && (r.symbol = t, r
.resolution = e, "series" === r.type && this.createSeries(t, e, i, n, r
.turnaround, o));
for (n in this._studiesCache[i])(r = this._studiesCache[i][n]) && "study" === r.type &&
this._createStudy(t, e, r.studyObject, i, n, r.turnaround, r.inputs)
}, p.prototype.removeStudy = function(t, e) {
this._studiesCache[t] && this._studiesCache[t][e] && this._studiesCache[t][e].engine &&
(this._studiesCache[t][e].engine.stop(), m.unsubscribeUnused()), this._studiesCache[
t][e] = null
}, p.prototype.removeSeries = function(t, e) {
this.removeStudy(t, e)
}, p.prototype.recomputeStudy = function(t, e, i, o) {
var n = this._studiesCache[i][t];
if (!n) throw Error("This should never happen");
n.inputs = e, n.turnaround = o, n.engine && n.engine.stop(), this._createStudy(n.symbol,
n.resolution, n.studyObject, i, t, o, e)
}, p.prototype._convertBarsTimeToUnix = function(t) {
var e, i, o = [];
for (e = 0; e < t.length; ++e) i = {
index: t[e].index,
value: [].concat(t[e].value)
}, i.value[0] /= 1e3, o.push(i);
return o.endOfData = t.endOfData, o
}, p.prototype.createStudy = function(t, e, i, o, n, r, s) {
var a = this._findStudyObject(r),
l = new a.constructor;
this._studiesCache[i] = this._studiesCache[i] || {}, this._studiesCache[i][o] = {
studyObject: l,
symbol: t,
resolution: e,
guid: o,
type: "study",
inputs: s,
metainfo: a.metainfo,
turnaround: n
}, this._createStudy(t, e, l, i, o, n, s)
}, p.prototype.purgeRangeExtensionData = function(t) {
t ? this._rangeExtensionData[t] = {
summary: 0
} : this._rangeExtensionData = {}
}, p.prototype.ensureExtendedTo = function(t, e, i) {
var o, n = this._studiesCache[e][t];
if (!n) throw Error("This should never happen");
this.purgeRangeExtensionData(e), this._rangeExtensionData[e] || (this
._rangeExtensionData[e] = {}), this._rangeExtensionData[e].time = i, o = this,
setTimeout(function() {
o.recreateSources(n.symbol, n.resolution, e, !0)
}, 0)
}, p.prototype.extendSeriesRange = function(t, e, i) {
var o, n, r, s, a = this._studiesCache[e][t];
if (!a) throw Error("This should never happen");
if (this._isEndOfData(e, t, a.turnaround)) return o = a.engine.runner.host.symbolInfo
.data_status, void setTimeout(function() {
TradingView.ChartapiMessagerInstances[e].onSeriesCompleted(t, a
.turnaround, o)
}, 0);
i += 10, n = this._barsCoefficients(a.symbol, a.resolution), r = n.barsCoefficient || 1,
this._extendRange(e, i * r), n.barsCoefficient || (n.expectedBarsCount = this
._extendedRange(e)), s = this, setTimeout(function() {
s.recreateSources(a.symbol, a.resolution, e, !0)
}, 0)
}, p.prototype._updateProjectionData = function(t, e, i, o) {
var n = o.barsetSize ? this._convertBarsTimeToUnix([{
index: o.barsetSize - 1,
exTime: o.lastBar ? o.lastBar[0] / 1e3 : 0,
value: o.lastBar
}]) : null;
TradingView.ChartapiMessagerInstances[t].onProjectionUpdate(e, i, o, n)
}, p.prototype.updateSeriesTurnaround = function(t, e, i) {
this._studiesCache[t] || (this._studiesCache[t] = {}), this._studiesCache[t][e] || (this
._studiesCache[t][e] = {}), this._studiesCache[t][e].type = "series", this
._studiesCache[t][e].turnaround = i
}, p.prototype.seriesTurnaround = function(t, e) {
return this._studiesCache[t] && this._studiesCache[t][e] && this._studiesCache[t][e]
.turnaround
}, p.prototype.createSeries = function(t, e, i, n, r, s) {
function a(t, o, n) {
l._extrapolationManager.storage(i, t.full_name, e).setLastBarTime(o, n)
}
var l, c = t,
h = new f.OHLCV;
this._studiesCache[i] = this._studiesCache[i] || {}, this._sessionsLastDataCache[i] =
null, this._studiesCache[i][n] = {
symbol: t,
resolution: e,
studyObject: h,
guid: n,
type: "series",
turnaround: r
}, TradingView.ChartapiMessagerInstances[i].onSeriesLoading(n, r), l = this, this
._computeStudy(i, h, c, e, n, [], function(o, c, h, u) {
var d, p, _, f, m, g;
if (!l._studiesCache[i][n]) throw Error("This should never happen");
if (l._sessionsLastDataCache[i] = o, d = l._convertBarsTimeToUnix(o), p = d
.length > 0 ? 1e3 * d[0].value[0] : void 0,
u.nextTime && (!p || u.nextTime < p / 1e3)) return void l
.ensureExtendedTo(n, i, u.nextTime);
0 !== d.length && (_ = l._barsCoefficients(t, e), _.expectedBarsCount && _
.barsCount && (_.barsCoefficient = Math.min(Math.max(_
.barsCoefficient || 1, parseInt(_.expectedBarsCount / (d
.length - _.barsCount) + .5)), 100)), _.barsCount = d
.length, f = d[d.length - 1], a(h, d.length - 1, 1e3 * f.value[0]),
l.rebuildExtrapolatedData(i, t.name, e, h, 1e3 * f.value[0]), s &&
TradingView.ChartapiMessagerInstances[i].onSeriesClearData(n, r),
TradingView.ChartapiMessagerInstances[i].onTimescaleUpdate(n, r, d,
h, 0), m = l._extrapolationManager.storage(i, h.full_name, e),
Promise.resolve().then(function() {
l._pointsetsManager.broadcastPointsetsUpdates(h.full_name,
e, o, m, h,
function(t, e) {
TradingView.ChartapiMessagerInstances[i]
.onPointsetDataUpdate(t, r, e, h)
})
})), g = 0 === d.length || u && u.endOfData, g && (l._logMessage(
"Series has no more data on server: {0}".format(h.full_name)), l
._setEndOfData(i, n, r), 0 === d.length && TradingView
.ChartapiMessagerInstances[i].onSeriesClearData(n, r)), TradingView
.ChartapiMessagerInstances[i].onSeriesCompleted(n, r, h.data_status)
}, function(t, o, s, c, h) {
var u, d = l._convertBarsTimeToUnix(t),
p = d[d.length - 1];
if (o) {
if (!l._studiesCache[i][n]) throw Error("This should never happen");
u = s - 1, l._logMessage("New bar arrived: symbol {0}, bar {1}".format(h
.full_name, JSON.stringify(p))), TradingView
.ChartapiMessagerInstances[i].onTimescaleUpdate(n, r, [p], h, u), a(
h, u, 1e3 * p.value[0]), l.rebuildExtrapolatedData(i, h
.full_name, e, h, 1e3 * p.value[0])
} else l._logMessage("Last bar update: symbol {0}, bar {1}".format(h
.full_name, JSON.stringify(p))), TradingView
.ChartapiMessagerInstances[i].onDataUpdate(n, r, d, null, h);
l._fireEvent("realtime_tick", t[t.length - 1], !0)
}, function(t) {
l._logMessage("Series error: {0}".format(t)), TradingView
.ChartapiMessagerInstances[i].onSeriesError(n, t), o.enabled(
"clear_bars_on_series_error") && TradingView
.ChartapiMessagerInstances[i].onSeriesClearData(n, r)
}, function(t, o) {
var s, c, h, u, d, p, _, f;
if ("projection" !== t.type) throw Error(
"unexpected non-series data type for series " + t.type);
if (s = t.projectionTime / 1e3, c = -1, (t.data || []).forEach(function(t) {
c = Math.max(c, t[0] || 0)
}), c = Math.min(c, 100), h = t.barsetSize, s && c >= 0 && h && t
.lastBar) {
for (u = [], d = 0; d <= c; d++) u.push(s + .001 * d);
p = t.lastBar.slice(0), p[0] = p[0] / 1e3, TradingView
.ChartapiMessagerInstances[i].onTimescaleUpdate(n, r, [{
index: h - 1,
value: p
}], o, h - 1, u), _ = h + c, f = 1e3 * Math.trunc(u[c]), a(o, _, f),
l.rebuildExtrapolatedData(i, o.full_name, e, o, f)
}
l._updateProjectionData(i, n, r, t)
})
}, p.prototype.onMoreTickmarksRequested = function(t, e, i, o, n) {
this._extrapolationManager.storage(t, i.full_name, o).onTickmarksNeeded(i, n)
}, p.prototype.removePointset = function(t) {
this._pointsetsManager.removePointset(t)
}, p.prototype.rebuildExtrapolatedData = function(t, e, i, o, n) {
this._extrapolationManager.storage(t, o.full_name, i).rebuild(n, o)
}, p.prototype.createPointset = function(t, e, i, o, n, r) {
var s = this._extrapolationManager.storage(t, o.full_name, n);
this._pointsetsManager.createPointset(e, i, n, r, s, o)
}, p.prototype.studiesMetadata = function() {
return 0 === this._metainfoCache.length && (this._metainfoCache = JSServer.studyLibrary
.map(function(t) {
return t.metainfo
})), this._metainfoCache
}, p.prototype.searchSymbols = function(t, e, i, o) {
function n(t) {
r._logMessage("Symbol search response: {0}".format(JSON.stringify(t))), o(t)
}
this._logMessage(
"Symbol search requested: search string `{0}`, exchange: `{1}`, type `{2}`"
.format(t, e, i));
var r = this;
this._externalDatafeed.searchSymbols(t, e, i, n)
}, p.prototype.resolveSymbol = function(t, e, i) {
var o, n = m.parseSymbol(t).symbol;
this._resolveRequests[n] ? o = this._resolveRequests[n] : (o = this
.resolveSymbolInternal(n), this._resolveRequests[n] = o), o.done(e).fail(i)
}, p.prototype.resolveSymbolInternal = function(t) {
var e, i = this,
o = $.Deferred();
return this._logMessage("Symbol resolve requested: `{0}` ".format(t)), e = !0, this
._externalDatafeed.resolveSymbol(t, function(n) {
e && console.warn(
"`resolveSymbol` should return result asynchronously. Use `setTimeout` with 0 interval to execute the callback function."
), i._logMessage(
"Symbol resolved: `{0}`, SymbolInfo in server response {1}".format(
t, JSON.stringify(n))), s(n), r(n), i._logMessage(
"Symbol info after post-processing: `{0}`, SymbolInfo {1}".format(t,
JSON.stringify(n))), i._fullNameSymbolInfoMap[n.full_name] = n,
o.resolve(n)
}, function(e) {
i._logMessage("Symbol resolve failed: `{0}`, reason: `{1}`".format(t, e)), o
.reject(e)
}), e = !1, o.promise()
}, p.prototype._createMarketStatusWatchers = function(t, e) {
void 0 === this._marketStatusWatchers[t] && (this._marketStatusWatchers[t] = {});
var i = this;
e.forEach(function(e) {
void 0 === i._marketStatusWatchers[t][e] && (i._marketStatusWatchers[t][e] =
new _(i, t, e))
})
}, p.prototype._removeMarketStatusWatchers = function(t) {
var e = this;
Object.keys(this._marketStatusWatchers[t] || {}).forEach(function(i) {
e._marketStatusWatchers[t][i].stop()
}), this._marketStatusWatchers[t] = {}
}, p.prototype._stopQuotesSubscription = function(t) {
this._quotesInfo[t].listenerGUID && (this._externalDatafeed.unsubscribeQuotes(this
._quotesInfo[t].listenerGUID), this._quotesInfo[t].listenerGUID = void 0), this
._removeMarketStatusWatchers(t)
}, p.prototype._startQuotesSubscription = function(t) {
function e(e, i) {
var o = r._marketStatusWatchers[t][e.n];
e.symbolname = e.n, e.status = e.s, e.values = e.v, e.values.change = e.v.ch, e
.values.last_price = e.v.lp, e.values.change_percent = e.v.chp, e.values
.current_session = e.v.cs || o && o.marketStatus(), e.values.pricescale = i
.pricescale, e.values.minmov = i.minmov, e.values.minmove2 = i.minmove2 || 0, e
.values.fractional = i.fractional || !1, o && e.v.cs && o.stop(), TradingView
.ChartapiMessagerInstances[t].onQuotesData([t].concat([e]))
}
function i(t) {
t.forEach(function(t) {
void 0 !== n[t.n] ? null !== n[t.n] && e(t, n[t.n]) : r.resolveSymbol(t
.n,
function(i) {
n[t.n] = i, e(t, i)
},
function() {
n[t.n] = null
})
})
}
var n = {},
r = this,
s = this._quotesInfo[t].symbols;
0 !== s.length && (this._externalDatafeed.getQuotes && !o.enabled("charting_library") ?
this._externalDatafeed.getQuotes(s, function(e) {
r._quotesInfo[t] && (i(e), r._quotesInfo[t].listenerGUID = t, r
._externalDatafeed.subscribeQuotes(s, r._quotesInfo[t]
.fastSymbols, i, r._quotesInfo[t].listenerGUID))
}, function(t) {}) : !this._externalDatafeed.getQuotes && o.enabled(
"trading_terminal") && setTimeout(function() {
i(s.map(function(t) {
return {
n: t,
s: "ok",
v: {}
}
}))
}), this._createMarketStatusWatchers(t, s))
}, p.prototype._restartQuotesSubscription = function(t) {
this._stopQuotesSubscription(t), this._startQuotesSubscription(t)
}, p.prototype.quoteCreateSession = function(t) {
this._quotesInfo[t] = {
symbols: [],
fastSymbols: [],
listenerGUID: void 0
}
}, p.prototype.quoteDeleteSession = function(t) {
this._stopQuotesSubscription(t), this._quotesInfo[t] = null
}, p.prototype.quoteSetFields = function(t, e) {}, p.prototype.quoteAddSymbols = function(t,
e) {
this._quotesInfo[t].symbols = this._filteredSymbols(this._quotesInfo[t].symbols.concat(
e)), this._restartQuotesSubscription(t)
}, p.prototype.quoteRemoveSymbols = function(t, e) {
this._quotesInfo[t].symbols = this._quotesInfo[t].symbols.filter(function(t) {
return e.indexOf(t) < 0
}), this._restartQuotesSubscription(t)
}, p.prototype.quoteFastSymbols = function(t, e) {
this._quotesInfo[t].fastSymbols = this._filteredSymbols(e), this
._restartQuotesSubscription(t)
}, p.prototype.quoteHibernateAll = function(t) {}, p.prototype._stopDepthSubscription =
function(t) {
this._depthInfo[t].listenerGUID && (this._externalDatafeed.unsubscribeDepth(this
._depthInfo[t].listenerGUID), this._depthInfo[t].listenerGUID = void 0)
}, p.prototype._startDepthSubscription = function(t) {
function e(t) {
return t.map(function(t) {
return {
p: t.price,
v: t.volume
}
})
}
function i(t) {
var i = {};
return i.s = r, i.bids = e(t.bids), i.asks = e(t.asks), i
}
function o(e) {
e.snapshot ? TradingView.ChartapiMessagerInstances[t].onDepthData([t].concat([i(
e)])) : TradingView.ChartapiMessagerInstances[t].onDepthUpdate([t].concat([
i(e)
]))
}
var n = this,
r = this._depthInfo[t].symbol;
r && this._fullNameSymbolInfoMap[r] && this._externalDatafeed.subscribeDepth && (n
._depthInfo[t].listenerGUID = this._externalDatafeed.subscribeDepth(r, function(
e) {
n._depthInfo[t] && o(e)
}))
}, p.prototype._restartDepthSubscription = function(t) {
this._stopDepthSubscription(t), this._startDepthSubscription(t)
}, p.prototype.depthCreateSession = function(t) {
this._depthInfo[t] = {
symbol: null,
listenerGUID: void 0
}
}, p.prototype.depthDeleteSession = function(t) {
this._depthInfo[t].symbol = null, this._stopDepthSubscription(t), delete this
._depthInfo[t]
}, p.prototype.depthSetSymbol = function(t, e) {
this._depthInfo[t].symbol = e, this._restartDepthSubscription(t)
}, p.prototype._filteredSymbols = function(t) {
var e = [];
return t.forEach(function(t) {
t instanceof Object || e.indexOf(t) < 0 && e.push(t)
}), e
}, p.prototype._isEndOfData = function(t, e, i) {
var o = t + "!" + e + "@" + i;
return !!this._endOfData[o]
}, p.prototype._setEndOfData = function(t, e, i) {
var o = t + "!" + e + "@" + i;
this._endOfData[o] = !0
}, p.prototype.alignTimePoint = function(t, e, i) {
return o.enabled("disable_resolution_rebuild") ? t : n(e, i).alignTimeIfPossible(1e3 *
t) / 1e3
}, p.prototype.serverTimeOffset = function() {
return this._serverTimeOffset
}, p.prototype.getCurrentUTCTime = function() {
return (new Date).valueOf() / 1e3 + this._serverTimeOffset
}, t.exports = p
}).call(e, i(50), i(5))
},
function(t, e, i) {
"use strict";
(function(e) {
var o = i(58),
n = {},
r = function(t, i, r) {
function s() {
var t = {};
t.symbolname = _,
t.status = "ok", t.values = {}, t.values.current_session = d, n[_] = d,
TradingView.ChartapiMessagerInstances[f].onQuotesData([f].concat([t]))
}
function a(t, i, n) {
var r = e.get_timezone(i);
c = (new o.Session).init(r, t), h = n, m = setTimeout(l, 6e4), l(), s()
}
function l() {
var t, e;
if (c) {
if (h) return void(d = "out_of_session");
t = o.isTradingNow(new Date, c), e = t ? "market" : "out_of_session", e !== d &&
(d = e, s())
}
}
var c, h, u = {},
d = n[r] || "out_of_session",
p = !1,
_ = r,
f = i,
m = null;
return t.resolveSymbol(r, function(t) {
p || a(t.session, t.timezone, t.expired)
}, function() {}), u.stop = function() {
p = !0, m && clearTimeout(m)
}, u.marketStatus = function() {
return d
}, u
};
t.exports = r
}).call(e, i(50))
},
function(t, e, i) {
"use strict";
(function(e) {
var o = i(1005).HeikenAshi,
n = i(34).Interval,
r = function() {
function t(t) {
this.host = t, this.cache = {}
}
function r(t) {
var e = t.indexOf(",");
return -1 === e ? t : t.slice(0, e)
}
function s(t, e, i, o, n, r) {
return n + t + e + i + (a(o) ? "_" : "") + r
}
function a(t) {
return t.has_empty_bars || t.force_session_rebuild
}
function l(t) {
if (0 !== t.indexOf("=")) return {
symbol: t
};
var e;
try {
e = JSON.parse(t.slice(1))
} catch (e) {
return {
symbol: t
}
}
return e.type && (0 === e.type.indexOf("BarSetHeikenAshi@tv-basicstudies-") ? e
.builder = new o : console.error("unknown builder type: " + e.type)),
"string" != typeof e.symbol && (e.session = e.symbol.session || e.session, e
.symbol = e.symbol.symbol), e
}
function c(e) {
t.instance = new t(e), p.setupFeed(t.instance)
}
var h, u, d, p = i(48),
_ = i(58),
f = p.Symbol,
m = p.StudyEngine,
g = p.BarBuilder,
v = p.BarSet;
return t.prototype.getCache = function(t) {
return this.cache[t]
}, t.prototype.putCache = function(t, e) {
this.cache[t] = e
}, t.prototype.subscribe = function(t, e, i, o, n, r, a, l, c) {
var h = s(t, e, i, a, l, o),
u = this.getCache(h);
return u || (u = this.createItem(t, e, i, a, c, l, o), this.putCache(h, u)), u
.listeners.addListener(n, r), {
key: h,
listener: n
}
}, t.prototype.unsubscribe = function(t) {
var e = this.getCache(t.key);
e && e.listeners.removeListener(t.listener)
}, t.prototype.removeUnused = function() {
var t, e, i, o, n, r = [];
for (t in this.cache) this.cache[t] && (e = this.cache[t], 0 === e.listeners
.listenersCount() && r.push(t));
if (0 !== r.length) {
for (i = 0; i < r.length; i++) o = r[i], n = this.cache[o], this.cache[o] =
null, n.stop();
this.removeUnused()
}
}, t.prototype.rebuildFrom = function(t, e, i) {
var o, n, r, s, a = f.parsePeriod(t),
l = f.parsePeriod(e);
if ("" !== a.resolution && !a.isSeconds) {
if (i.has_weekly_and_monthly) return a.resolution;
if (void 0 === i.has_daily || i.has_daily) return "D";
"" !== l.resolution && (l.resolution = "", l.interval = i
.intraday_multipliers ? i.intraday_multipliers[0] : 1)
}
if (a.isIntraday && void 0 !== i.has_intraday && !i.has_intraday) return "";
if (a.isSeconds && !i.has_seconds) return "";
if (o = "" !== a.resolution ? l.interval : "" === l.resolution ? Math.min(a
.interval, l.interval) : a.interval, (n = a.isIntraday ? i
.intraday_multipliers : i.seconds_multipliers) && -1 === n.indexOf(o)) {
for (r = n.length - 1; r >= 0; r--)
if (s = +n[r], o % s == 0) return s + (a.isSeconds ? "S" : "");
return ""
}
return o + (a.isSeconds ? "S" : "")
}, t.prototype.createItem = function(t, e, i, o, s, c, p) {
var _, f, m, v, y, b, S = new d,
w = l(t);
return w.builder ? new u(S, w.symbol, e, i, w.builder, o, s, c) : (_ = r(e), f =
this.rebuildFrom(_, r(i), o), m = a(o), !n.isEqual(_, f) || m ? (v = o
.has_empty_bars, y = $.extend({}, o),
m && (y.has_empty_bars = !1, y.force_session_rebuild = !1), new u(S,
w.symbol, e, f, new g(e, v), y, s, c, p)) : (b = w.session &&
"extended" !== w.session, new h(S, w.symbol, e, i, b, this.host, o,
s, p)))
}, h = function(t, e, i, o, n, s, a, l, c) {
this.listeners = t, this.host = s;
var h = this;
this.host.resolve(e, function(t) {
n && t.regular_session && (t.session = t.regular_session);
var s = h.calculateFromTo(t, c || o || i, e, l);
h.subs = h.host.subscribe(t, r(i), s, function(t) {
h.listeners.fire(t)
}, function(t) {
h.listeners.onError(t)
})
}, function(t) {
h.listeners.onError(t)
})
}, h.prototype._createDWMAligner = function(t, i) {
var o = e.get_timezone(i.timezone),
n = new _.Session;
return n.init(o, i.session), f.newBarBuilder(t, n, n)
}, h.prototype.stop = function() {
this.subs && this.host.unsubscribe(this.subs)
}, h.prototype.calculateFromTo = function(t, i, o, n) {
var r, s, a, l, c, h, u, d, p = f.parsePeriod(i),
m = (new Date).valueOf(),
g = t.expired ? e.cal_to_utc(e.get_timezone(t.timezone), new Date(1e3 * t
.expiration_date)) || m : m;
return "" === p.resolution ? (s = p.interval, a = "D") : "S" === p.resolution ?
(s = 10 * p.interval, a = "") : (l = "D" === p.resolution ? 1 : "W" === p
.resolution ? 5 : 30, s = 12 * l * p.interval, a = "M"), p.range ? (s =
p.range.interval, a = p.range.resolution) : this.host
.calculateHistoryDepth && (c = this.host.calculateHistoryDepth(i, a, s)) &&
(s = c.intervalBack || s, a = void 0 === c.resolutionBack ? a : c
.resolutionBack), h = t.sessionString || t.session, r = _
.alignPeriodsBack(h, a, s, 1, g), n && n.getRangeExtensionTime && (u = n
.getRangeExtensionTime()) && (r = Math.min(1e3 * u, r)), n && n
.getRangeExtensionCount && (d = n.getRangeExtensionCount()) > 0 && (r = _
.alignPeriodsBack(h, p.resolution, p.interval, d, r)), {
from: r,
to: g + 6e4
}
}, u = function(t, e, i, o, n, r, s, a, l) {
if (this.listeners = t, this.isRecalculated = !1, "" === o) return console
.error("unsupported resolution for rebuild: " + i), void this.listeners
.onError("unsupported resolution for rebuild: " + i);
this.symbolInfo = r;
var c = this;
this.engine = new m({
tickerid: e,
period: o,
periodBase: i,
body: n,
sessionId: a,
symbolInfo: r,
rangeExtension: s,
periodForInitialRange: l,
recalc: function(t, e) {
c._recalc(e)
},
out: function(t, e) {
c._out(t, e)
},
nonseriesOut: function(t, e) {
c._nonseriesOut(t, e)
},
setNoMoreData: function() {
c.barset && (c.barset.endOfData = !0)
},
onErrorCallback: function(t) {
c.listeners.onError(t)
}
})
}, u.prototype.stop = function() {
this.engine ? this.engine.stop() : console.error("Internal library error 0x1")
}, u.prototype._recalc = function(t) {
this.isRecalculated && console.error("recalc called twice!"), this.barset || (
this.barset = new v(this.symbolInfo)), t && (this.barset.nextTime = t
.nextTime, this.barset.endOfData = t.endOfData), this.listeners.fire(
this.barset), this.isRecalculated = !0
}, u.prototype._nonseriesOut = function(t, e) {
var i = Object.assign({}, e);
i.nonseries = !0, i.data = e.bars, delete i.bars, i.barsetSize = this.barset ?
this.barset.count() : 0, i.lastBar = this.barset ? this.barset.bar(this
.barset.count() - 1) : null, this.listeners.fire(i, !0)
}, u.prototype._out = function(t, e) {
var i, o, n, r, s, a, l, c = e[0];
if (!isNaN(c)) {
if (i = {
time: c,
open: e[1],
high: e[2],
low: e[3],
close: e[4],
volume: e[5],
updatetime: e[6]
}, o = e[7], this.barset || (this.barset = new v(t.info)), (n = e[
8]) instanceof Array)
for (r = 0; r < n.length; r++) s = e[9], a = n[r], l = {
time: a,
open: s,
high: s,
low: s,
close: s,
volume: 0,
updatetime: a
}, this.barset.add(l, !0), this.isRecalculated && this.listeners
.fire(this.barset);
this.barset.add(i, o), this.barset.isBarClosed = o, this.isRecalculated &&
this.listeners.fire(this.barset)
}
}, d = function() {
this.listeners = []
}, d.prototype.listenersCount = function() {
return this.listeners.reduce(function(t, e) {
return t + (e ? 1 : 0)
}, 0)
}, d.prototype.addListener = function(t, e) {
this.listeners.push({
dataListener: t,
onErrorCallback: e
}), this.barset && t(this.barset), this.errorMsg && e(this.errorMsg)
}, d.prototype.removeListener = function(t) {
var e, i = this.listeners.filter(function(e) {
return e.dataListener === t
});
0 !== i.length && (e = this.listeners.indexOf(i[0]), delete this.listeners[e])
}, d.prototype.onError = function(t) {
var e, i, o, n;
for (this.errorMsg = t || "unspecified error", e = this.listeners, i = e.length,
o = 0; o < i; o++)(n = e[o]) && n.onErrorCallback && n.onErrorCallback(t)
}, d.prototype.fire = function(t, e) {
var i, o, n, r;
for (e || (this.barset = t), i = this.listeners, o = i.length, n = 0; n <
o; n++)(r = i[n]) && r.dataListener(t)
}, {
setupFeed: c,
parseSymbol: l,
unsubscribeUnused: function() {
t.instance.removeUnused()
}
}
}();
t.exports = r
}).call(e, i(50))
},
function(t, e, i) {
"use strict";
var o, n;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(48), n = function() {
function t() {}
return t.prototype.main = function(t) {
var e, i, n, r, s = t.new_var(o.Std.open(t)),
a = t.new_var(o.Std.close(t)),
l = s.get(1),
c = a.get(1),
h = o.Std.ohlc4(t),
u = o.Std.na(s.get(1)) ? (o.Std.open(t) + o.Std.close(t)) / 2 : (l + c) / 2;
return s.set(u), a.set(h), e = o.Std.max(o.Std.high(t), o.Std.max(u, h)), i = o.Std.min(
o.Std.low(t), o.Std.min(u, h)), n = o.Std.volume(t), r = t.symbol, [r.time, u,
e, i, h, n, r.updatetime, r.isBarClosed
]
}, t
}(), e.HeikenAshi = n
},
function(t, e, i) {
"use strict";
var o = function() {
function t(t, e, i) {
return t + "," + e + "," + i
}
function e(e, i, o) {
delete n[t(e, i, o)]
}
function o(e, i, o) {
function s(t) {
return "undefined" != typeof TradingView && TradingView.ChartapiMessagerInstances ? n[
t] = new a(TradingView.ChartapiMessagerInstances[e], l.pureResolution) : n[t] =
new a(null, l.pureResolution), n[t]
}
var l = r.Symbol.parsePeriod(o),
c = t(e, i, l.pureResolution);
return n[c] ? n[c] : s(c)
}
var n = {},
r = i(48),
s = i(58),
a = function(t, e, i) {
this._chartApiMessager = t, this._lastRealBarTime = null, this._lastRealBarIndex = null,
this._resolution = e, this._extrapolatedBarsCache = [], this._onReadyCallbacks = [],
this._requestedAmountOfBars = 0, this._maxDepth = i || 100
};
return a.prototype.ready = function() {
return null !== this._lastRealBarIndex
}, a.prototype.rebuild = function(t, e) {
this._lastRealBarTime = t;
var i = Math.max(this._extrapolatedBarsCache.length, this._requestedAmountOfBars);
this._extrapolatedBarsCache = [], this.ensureExtrapolatedToBar(e, i)
}, a.prototype.historyExtrapolator = function() {
return void 0 === this._historyExtrapolator && (this._historyExtrapolator = new a(null,
this._resolution, Math.max(this._maxDepth, 1500))), this._historyExtrapolator
}, a.prototype.getPointTimeUTC = function(t, e, i) {
var o, n;
return 0 === e ? t : !this.ready() || t < this._lastRealBarTime / 1e3 ? (this
.historyExtrapolator().setLastBarTime(0, 1e3 * t), this.historyExtrapolator()
.getPointTimeUTC(t, e, i)) : (o = 0 === this._extrapolatedBarsCache.length ||
t === this._lastRealBarTime / 1e3,
n = o ? -1 : this.indexOfBar(t, i) - this._lastRealBarIndex - 1, this
.ensureExtrapolatedToBar(i, n + e + 1), this._extrapolatedBarsCache[n + e])
}, a.prototype.findDistanceInBars = function(t, e, i) {
return t === e ? 0 : (this.historyExtrapolator().setLastBarTime(0, 1e3 * t), this
.historyExtrapolator().indexOfBar(e, i))
}, a.prototype.indexOfBar = function(t, e) {
this._ensureExtrapolatedToTime(e, 1e3 * t);
var i = s.lower_bound(this._extrapolatedBarsCache, t, function(t, e) {
return t > e ? 1 : t < e ? -1 : 0
});
return -1 === i ? i : this._lastRealBarIndex + i + 1
}, a.prototype._extrapolateData = function(t, e) {
var i, o, n;
if (!this._lastRealBarTime) throw Error(
"No real bars known, so cannot extrapolate anything");
if (!(i = e(this._lastRealBarTime)) || 0 === i.length) return void(null !== this
._lastRealBarIndex && null !== this._chartApiMessager && this
._chartApiMessager.onTickmarksUpdated(this._lastRealBarIndex + 1, this
._extrapolatedBarsCache, t, this._resolution));
for (o = 0; o < i.length; ++o) i[o] = i[o] / 1e3;
for (i[0] === this._lastRealBarTime / 1e3 && (i = i.slice(1)), this
._extrapolatedBarsCache = i, n = i.slice(0), n.sort(), o = 0; o < n.length - 1; ++o)
n[o] === n[o + 1] && console.error("Duplicating extrapolated bars: duplicated " +
new Date(1e3 * n[o]));
null !== this._lastRealBarIndex && null !== this._chartApiMessager && this
._chartApiMessager.onTickmarksUpdated(this._lastRealBarIndex + 1, i, t, this
._resolution)
}, a.prototype.onTickmarksNeeded = function(t, e) {
if (this.ready()) this.ensureExtrapolatedToBar(t, e);
else {
var i = this;
this._onReadyCallbacks.push(function() {
i.ensureExtrapolatedToBar(t, e)
})
}
}, a.prototype.ensureExtrapolatedToBar = function(t, e) {
var i = this;
return this._requestedAmountOfBars = e, this._extrapolateData(t, function(o) {
return i._extrapolatedBarsCache.length >= e || !i._shouldExtrapolateMore() ?
null : s.extrapolateBarsFrontByCount(i.newBarBuilder(t), o, e)
})
}, a.prototype._ensureExtrapolatedToTime = function(t, e) {
var i = this;
return this._extrapolateData(t, function(o) {
var n, r;
return o >= e || !i._shouldExtrapolateMore() ? null : (n = 2e3, r = s
.extrapolateBarsFrontToTime(i.newBarBuilder(t), o, e, n), r[r
.length - 1] < e && console.warn(
"Extrapolation error: not enough data created"), r)
})
}, a.prototype.newBarBuilder = function(t) {
var e = r.Symbol.newSession(t.timezone, t.session);
return r.Symbol.newBarBuilder(this._resolution, e)
}, a.prototype._shouldExtrapolateMore = function() {
return this._extrapolatedBarsCache.length < this._maxDepth
}, a.prototype.setLastBarTime = function(t, e) {
(null === this._lastRealBarIndex || this._lastRealBarIndex === t && this
._lastRealBarTime !== e) && (this._extrapolatedBarsCache = []), this
._extrapolatedBarsCache && this._extrapolatedBarsCache.length && this
._lastRealBarIndex !== t && (this._lastRealBarIndex > t ? this
._extrapolatedBarsCache = [] : this._lastRealBarTime !== e && this
._extrapolatedBarsCache.shift(t - this._lastRealBarIndex)), this
._lastRealBarIndex = t, this._lastRealBarTime = e;
for (var i = 0; i < this._onReadyCallbacks.length; ++i) this._onReadyCallbacks[i]();
this._onReadyCallbacks = []
}, {
remove: e,
storage: o
}
}();
t.exports = o
},
function(t, e, i) {
"use strict";
(function(e) {
var o = i(58),
n = i(34).Interval,
r = function() {
function t(t, e) {
return t
}
function r(t, e) {
var i = m.get_timezone(t.timezone),
n = new o.Session;
return n.init(i, t.session), f.Symbol.newBarBuilder(e, n, n)
}
function s(e, i, o, n, r, s) {
var a, l, c, h, u = t(i, o);
for (p.hasOwnProperty(u) || (p[u] = []), a = [], l = 0; l < n.length; ++l) n[l][1] <
0 && (n[l][1] = 0), 0 !== n[l][1] ? (c = r.getPointTimeUTC(n[l][0], n[l][1], s),
a.push(c)) : n[l][0] && a.push(n[l][0]);
h = {
guid: e,
points: a
}, p[u].push(h)
}
function a(t) {
var e, i, o;
for (e in p)
for (i = p[e], o = 0; o < i.length; ++o)
if (i[o].guid === t) return void i.splice(o, 1)
}
function l(t, e, i, o, n) {
var r, s, a, l = [];
for (r = 0; r < t.points.length; ++r) {
if (null == (s = t.points[r])) return null;
if (null === (a = h(e, s, i, o, n))) return null;
l.push({
index: r,
value: [a, s]
})
}
return l
}
function c(e, i, o, n, r, s) {
var a, c, h, u, d = t(e, i);
if (p.hasOwnProperty(d))
for (a = p[d].length, c = 0; c < a; ++c) h = p[d][c], null !== (u = l(h, o, n,
r, i)) && s(h.guid, u)
}
function h(t, e, i, n, s) {
var a, l;
return 1e3 * (e = r(n, s).alignTimeIfPossible(1e3 * e) / 1e3) < t[0].value[0] ? -d(
n, s, e, t[0].value[0] / 1e3, i) : (a = o.lower_bound(t, 1e3 * e, function(
t, e) {
return t.value[0] > e ? 1 : t.value[0] < e ? -1 : 0
})) >= 0 && e < t[t.length - 1].value[0] ? (t[a].value[0] / 1e3 !== e && 0 !==
a && a--, t[a].index) : (l = i.indexOfBar(e, n), -1 === l ? null : l)
}
function u(t, e, i, o, r) {
function s(t, e) {
var i = new Date(1e3 * t),
o = new Date(1e3 * e),
n = 12 * (o.getFullYear() - i.getFullYear());
return n -= i.getMonth() + 1, n += o.getMonth(), n <= 0 ? 0 : n
}
var a, l, c, h, u, d, p, _, f, g, v, y, b, S, w;
if (e.kind() === n.MONTHS) a = s(o, r) / e.multiplier();
else if (e.kind() === n.WEEKS) l = Math.ceil((r - o) / 604800), a = Math.ceil(l / e
.multiplier());
else {
if (c = m.utc_to_cal(i.timezone, +new Date(1e3 * o)), h = m.utc_to_cal(i
.timezone, +new Date(1e3 * r)), (u = (r - o) / 86400) > 4 * (7 - i.spec
.weekEndsCount())) p = u / 7, d = p * (7 - i.spec.weekEndsCount());
else {
for (_ = 0, f = {}, g = c; g.valueOf() <= h.valueOf(); g = m
.add_days_considering_dst(i.timezone, g, 1)) v = m.get_day_of_week(g),
void 0 === f[v] && (f[v] = i.spec.isWeekEnd(v)), f[v] && _++;
d = u - _
}
if (e.kind() === n.DAYS) a = Math.ceil(d / e.multiplier());
else {
if (y = e.kind() === n.HOURS ? 60 * e.multiplier() * 60 : e.kind() === n
.SECONDS ? e.multiplier() : 60 * e.multiplier(), u < 1 && (b = i.spec
.findSessionEntry(m.get_day_of_week(c), m.get_minutes_from_midnight(
c)), S = i.spec.findSessionEntry(m.get_day_of_week(h), m
.get_minutes_from_midnight(h)), b === S)) return Math.ceil((r -
o) / y);
v = i.spec.entries()[0].dayOfWeek(), w = 60 * i.spec.entries().reduce(
function(t, e) {
return t + (e.dayOfWeek() === v ? e.length() : 0)
}, 0), a = Math.ceil(d * w / y)
}
}
return a
}
function d(t, e, i, s, a) {
var l, c, h = new n(e),
d = m.get_timezone(t.timezone),
p = new o.Session;
return p.init(d, t.session), l = r(t, e), i = l.alignTimeIfPossible(1e3 * i) / 1e3,
s = l.alignTimeIfPossible(1e3 * s) / 1e3, i >= s ? 0 : (c = u(t, h, p, i, s),
c >= 1e3 ? c : a.findDistanceInBars(i, s, t))
}
var p = {},
_ = "undefined" != typeof window ? window : e,
f = i(48),
m = _.PineJsCalendar ? _.PineJsCalendar : i(50);
return {
createPointset: s,
removePointset: a,
broadcastPointsetsUpdates: c,
tests: {
approxBarsInterval: u,
indexOfTime: h
}
}
}();
t.exports = r
}).call(e, i(78))
},
function(t, e, i) {
"use strict";
function o(t, e, i) {
return a.isArray(t) ? n(t, e, i) : a.isObject(t) && (a.isHashObject(t) || i && i.visitInstances) ?
r(t, e, i) : t
}
function n(t, e, i) {
return t.map(function(t) {
var n = o(t, e, i),
r = e(n);
return void 0 !== r ? r : n
})
}
function r(t, e, i) {
var n = {};
return Object.keys(t).forEach(function(r) {
var s = o(t[r], e, i),
a = e(s);
n[r] = void 0 !== a ? a : s
}), n
}
function s(t, e, i) {
var n = o(t, e, i),
r = e(n);
return void 0 !== r ? r : n
}
Object.defineProperty(e, "__esModule", {
value: !0
});
var a = i(15);
e.visitObject = s
},
function(t, e, i) {
"use strict";
function o(t, e) {
return t.ticker + "_" + e
}
function n(t) {
return new Date(t).toISOString()
}
var r, s, a, l, c, h;
Object.defineProperty(e, "__esModule", {
value: !0
}), r = i(34), s = i(86), a = i(48), l = i(5), i(102), c = function() {
function t(t, e, i, o) {
this._cache = {
bars: []
}, this._nextSubscriptionId = 0, this._pendingSubscribers = [], this._subscribers = [],
this._requesting = !1, this._leftDate = null, this._gaps = [], this._needPurgeCache = !
1, this._realtimeOn = !1, this._endOfData = !1, this._resetCacheTimeout = null, this
._errorMessage = null, this._datafeed = t, this._symbolInfo = e, this._resolution = i,
this._dwmAligner = o
}
return t.prototype.destroy = function() {
0 !== this._subscribers.length && console.warn("Destroying with not-empty state"), this
._clearResetCacheTimeout(), this._unsubscribeRealtime(), this._purgeCache(),
delete this._datafeed
}, t.prototype.addSubscription = function(t, e, i) {
var o = this,
n = this._getNextSubscriptionId(),
r = Math.floor(t.from / 1e3),
s = Math.floor(t.to / 1e3);
return this._pendingSubscribers.push({
key: n,
range: {
from: r,
to: s
},
onHistoryCallback: e,
onErrorCallback: i
}), this._clearResetCacheTimeout(), setTimeout(function() {
return o._processNextPendingSubscriber()
}, 0), n
}, t.prototype.removeSubscription = function(t) {
var e, i = this,
o = this._pendingSubscribers.find(function(e) {
return e.key === t
});
return o ? void this._pendingSubscribers.splice(this._pendingSubscribers.indexOf(o),
1) : (e = this._subscribers.find(function(e) {
return e.key === t
})) ? (this._subscribers.splice(this._subscribers.indexOf(e), 1), void(this
._subscribers.length || (this._symbolInfo.expired || this._symbolInfo
.expiration_date ? this._unsubscribeRealtime() : this
._resetCacheTimeout = setTimeout(function() {
i._purgeCacheDelayed(), i._unsubscribeRealtime()
})))) : void console.warn(
"Unknown subscription symbol={0}, resolution={1}, key={2}".format(this
._symbolInfo.name, this._resolution, t))
}, t.prototype._purgeCacheDelayed = function() {
this._logMessage("Reset cache"), this._needPurgeCache = !0, this
._clearResetCacheTimeout()
}, t.prototype._logMessage = function(t, e) {
(l.enabled("charting_library_debug_mode") || e) && console.log("FEED [{0}|{1}]: {2}"
.format(this._symbolInfo.name, this._resolution, t))
}, t.prototype._clearResetCacheTimeout = function() {
null !== this._resetCacheTimeout && (clearTimeout(this._resetCacheTimeout), this
._resetCacheTimeout = null)
}, t.prototype._purgeCache = function() {
this._cache = {
bars: []
}, this._gaps = [], this._errorMessage = null, this._needPurgeCache = !1, this
._leftDate = null, this._endOfData = !1
}, t.prototype._processNextPendingSubscriber = function() {
var t, e, i, o, s, a;
if (this._pendingSubscribers.length && !this._requesting) {
if (this._needPurgeCache && this._purgeCache(), t = this._pendingSubscribers.pop(),
this._logMessage("Processing bars request {0} from {1} to {2} ".format(t.key, n(
1e3 * t.range.from), n(1e3 * t.range.to))), this._errorMessage) return this
._logMessage("Return error:" + this._errorMessage), t.onErrorCallback(this
._errorMessage), void this._processNextPendingSubscriber();
if ((!this._leftDate || t.range.from < this._leftDate) && (e = new r.Interval(this
._resolution), i = (e.inMilliseconds(Date.now()) || 0) / 1e3, o = !this
._leftDate, s = !o && !!this._cache.bars.length && this._cache.bars[0]
.time / 1e3 - t.range.from < i, (o || !s) && !this._endOfData)) return this
._pendingSubscribers.push(t), void this._ensureRequestedTo(t.range.from);
a = this._moveSubscriberToRealtime(t), this._returnHistoryDataToSubscriber(t, a),
this._subscribeRealtimeIfNeeded(), this._processNextPendingSubscriber()
}
}, t.prototype._moveSubscriberToRealtime = function(t) {
var e = {
key: t.key,
onHistoryCallback: t.onHistoryCallback,
barset: null
};
return this._subscribers.push(e), e
}, t.prototype._subscribeRealtimeIfNeeded = function() {
!this._subscribers.length || this._realtimeOn || this._symbolInfo.expired || this
._symbolInfo.expiration_date || this._subscribeRealtime()
}, t.prototype._subscribeRealtime = function() {
var t, e, i = this;
this._symbolInfo.expired || this._realtimeOn || (t = function(t) {
i._dwmAligner && (t.time = i._dwmAligner.tradingDayToSessionStart(t.time)),
i._putToCacheNewBar(t), i._subscribers.forEach(function(e) {
var i = e.barset;
if (null === i) throw Error("subscirber.barset is null");
i.add(t), e.onHistoryCallback(i)
})
}, e = function() {
i._unsubscribeRealtime();
var t = i._leftDate;
i._purgeCache(), t && i._ensureRequestedTo(t)
}, this._realtimeOn = !0, this._datafeed.subscribeBars(this._symbolInfo, this
._resolution, t, o(this._symbolInfo, this._resolution), e), this
._logMessage("Subscribed to realtime"))
}, t.prototype._unsubscribeRealtime = function() {
!this._symbolInfo.expired && this._realtimeOn && (this._datafeed.unsubscribeBars(o(this
._symbolInfo, this._resolution)), this._logMessage(
"Unsubscribed from realtime"), this._realtimeOn = !1)
}, t.prototype._returnHistoryDataToSubscriber = function(t, e) {
var i, o, r = t.range,
s = l.enabled("cl_feed_return_all_data") ? this._createBarset(this._leftDate || r
.from) : this._createBarset(r.from);
s.count() > 0 ? this._logMessage(
"Bars to return for request {0}: total {1} bars in [{2} ... {3}] ".format(t.key,
s.count(), n(s.bars[0].time), n(s.bars[s.count() - 1].time))) : this
._logMessage("Request {0}. Nothing to return.".format(t.key)), e.barset = s, i =
this._inGapNextTime(r.from), i ? (this._logMessage(
"Request {0} is in gap, nextTime = {1}".format(t.key, n(1e3 * i))), s
.nextTime = i) : 0 === s.count() && (o = this._cache.bars.length && this._cache
.bars[this._cache.bars.length - 1].time / 1e3) && r.from > o && (this
._logMessage("Request {0} is in gap, nextTime = {1}".format(t.key, n(1e3 * o))),
s.nextTime = o || void 0), this._endOfData && null !== this._leftDate && t.range
.from <= this._leftDate && (s.endOfData = !0), t.onHistoryCallback(s)
}, t.prototype._createBarset = function(t) {
var e = s.lowerbound(this._cache.bars, 1e3 * t, function(t, e) {
return t.time < e
});
return new a.BarSet(this._symbolInfo, this._cache.bars.slice(e))
}, t.prototype._ensureRequestedTo = function(e) {
var i, o, r, s = this;
if (this._leftDate && this._leftDate < e) return void this
._processNextPendingSubscriber();
i = !this._leftDate, this._requesting = !0, o = e, r = this._leftDate ? this._leftDate -
1 : this._symbolInfo.expiration_date || Math.floor(t._now() / 1e3), this._leftDate =
e,
this._logMessage("Requesting data: [{0} ... {1}] ".format(n(1e3 * o), n(1e3 * r))),
this._datafeed.getBars(this._symbolInfo, this._resolution, o, r, function(t, e) {
s._requesting = !1, s._processBars(t, e)
}, function(t) {
s._requesting = !1, s._errorMessage = t || null, s
._processNextPendingSubscriber()
}, i)
}, t.prototype._processBars = function(t, e) {
this._checkBars(t), this._alignBarsTime(t), t.length > 0 ? this._processFullBarset(t,
e) : this._processEmptyBarset(e), this._processNextPendingSubscriber()
}, t.prototype._processEmptyBarset = function(e) {
this._logMessage("Receiving bars: barset is empty"), e && e.nextTime ? (this
._logMessage("Next time received: `{0}`".format(n(1e3 * e.nextTime))), this
._addGap(e.nextTime), this._leftDate = Math.min(this._leftDate || t._now() /
1e3, e.nextTime + 1)) : e && e.noData ? (this._logMessage("EOD received"),
this._endOfData = !0, this._cache.bars.length && (this._leftDate = this._cache
.bars[0].time / 1e3)) : this._logMessage(
"nextTime or noData should present in metainfo when empty barset is returned")
}, t.prototype._processFullBarset = function(t, e) {
var i = t[0].time,
o = t[t.length - 1].time;
this._logMessage("Receiving bars: total {0} bars in [{1} ... {2}] ".format(t.length, n(
i), n(o))), null !== this._leftDate && i < 1e3 * this._leftDate && !l.enabled(
"cl_feed_return_all_data") && this._logMessage(
"Returned more data than needed"), this._putToCache(t) ? null !== this
._leftDate &&
this._cache.bars.length && this._leftDate > this._cache.bars[0].time / 1e3 && (this
._leftDate = this._cache.bars[0].time / 1e3) : this._logMessage(
"Incremental update failed. Starting full update. Returned data should be in the requested range.",
!0), e && e.nextTime ? console.warn(
"nextTime should be set when there is no data in the requested period only") :
e && e.noData && console.warn(
"noData should be set when there is no data in the requested period and earlier only"
)
}, t.prototype._addGap = function(e) {
var i;
this._gaps.find(function(t) {
return t.from === e
}) || (i = (this._cache.bars.length ? this._cache.bars[0].time : t._now()) / 1e3,
this._gaps.push({
from: e,
to: i
}))
}, t.prototype._inGapNextTime = function(t) {
var e = this._gaps.find(function(e) {
return e.from < t && e.to > t
});
return e ? e.from : null
}, t.prototype._getNextSubscriptionId = function() {
return this._nextSubscriptionId++
}, t.prototype._checkBars = function(t, e) {
var i, o;
if (void 0 === e && (e = !1), l.enabled("charting_library_debug_mode"))
for (i = 1; i < t.length; i++) t[i].time <= t[i - 1].time && (o =
"Wrong bars time: time {0} of bar {1} should be more than time {2} of bar {3}"
.format(t[i].time, i, t[i - 1].time, i - 1), e && this._dwmAligner && (o +=
"\nCheck that you provide DWM bars without time part, i.e. 00:00 GMT"),
console.error(o))
}, t.prototype._putToCache = function(t) {
if (0 === t.length) return !0;
if (this._cache.bars.length === t.length && this._cache.bars[0].time === t[0].time &&
this._cache.bars[this._cache.bars.length - 1].time === t[t.length - 1].time)
return this._logMessage(
"Time range of received data is the same as cached one. Skip the update."),
!0;
if (0 !== this._cache.bars.length && t[t.length - 1].time === this._cache.bars[0]
.time && this._cache.bars.splice(0, 1), 0 !== this._cache.bars.length && t[t
.length - 1].time >= this._cache.bars[0].time) {
var e = this._cache.bars[this._cache.bars.length - 1].time === t[t.length - 1].time;
if (this._cache.bars = [], !e) return this._leftDate = null, !1;
this._logMessage(
"Received history up to now instead of incremental update. Return exactly what is requested."
)
}
return this._cache.bars = t.concat(this._cache.bars), this._checkBars(this._cache.bars,
!0), !0
}, t.prototype._putToCacheNewBar = function(t) {
var e = this._cache.bars.length,
i = t.time,
o = 0 === e ? NaN : this._cache.bars[e - 1].time;
0 === e || o < i ? this._cache.bars.push(t) : o === i ? this._cache.bars[e - 1] = t :
console.error("putToCacheNewBar: time violation, previous bar time: " + n(o) +
" should be less or equal to new time: " + n(i))
}, t.prototype._alignBarsTime = function(t) {
if (this._dwmAligner)
for (var e = 0; e < t.length; e++) t[e].time = this._dwmAligner
.tradingDayToSessionStart(t[e].time)
}, t._now = function() {
return Date.now() + 6e4
}, t
}(), h = function() {
function t(t, e) {
this._threads = {}, this._datafeed = t, this._dwmAlignerCreator = e
}
return t.prototype.destroy = function() {
this._forEachThread(function(t, e) {
return e.destroy()
}), this._threads = {}, delete this._datafeed
}, t.prototype.purgeCache = function() {
this._forEachThread(function(t, e) {
return e.destroy()
}), this._threads = {}
}, t.prototype.subscribe = function(t, e, i, n, r) {
var s, a = o(t, e);
return this._threads[a] || (this._threads[a] = this._createThread(t, e)), s = this
._threads[a].addSubscription(i, n, r), a + '"' + s
}, t.prototype.unsubscribe = function(t) {
var e, i, o = t.split('"');
if (2 !== o.length) return void console.warn("Wrong guid format");
e = o[0], i = parseInt(o[1]), this._threads.hasOwnProperty(e) ? this._threads[e]
.removeSubscription(i) : console.warn("Data thread doesnt exist: " + t)
}, t.prototype._createThread = function(t, e) {
return new c(this._datafeed, t, e, this._dwmAlignerCreator(e, t.timezone, t.session))
}, t.prototype._forEachThread = function(t) {
var e = this;
Object.keys(this._threads).forEach(function(i) {
return t(i, e._threads[i])
})
}, t
}(), e.DatafeedRequestsCachedProcessor = h
},
function(t, e, i) {
"use strict";
(function(e, o) {
function n(t, i, o, n) {
this._chartWidgetCollection = t, this._chartSaverInstance = i, this._chartApiInstance = o,
this._saveLoad = n, this._proxyWatchListChangedDelegate = null, this
._lockDrawingsWatchedValue = null, this._activeChangedChangedDelegate = new e, this
._chartWidgetCollection.activeChartWidget.subscribe(function() {
this._activeChangedChangedDelegate.fire()
}.bind(this)), this._chartWidgets = new WeakMap
}
var r = i(76),
s = i(1011),
a = i(216).layouts,
l = i(23),
c = i(108),
h = i(202).closeAllDialogs,
u = i(26),
d = i(122),
p = i(92),
_ = i(7),
f = i(145).createNoticeDialog,
m = i(112).createConfirmDialog,
g = i(366),
v = i(1017).ThemesApi;
n.prototype.subscribe = function(t, e) {
l.subscribe(t, e)
}, n.prototype.unsubscribe = function(t, e) {
l.unsubscribe(t, e)
}, n.prototype.onContextMenu = function(t) {
l.subscribe("onContextMenu", function(e) {
e.callback(t(e.unixtime, e.price))
})
}, n.prototype.onGrayedObjectClicked = function(t) {
l.subscribe("onGrayedObjectClicked", t)
}, n.prototype.activeChart = function() {
return this._getChartWidgetApi(this._chartWidgetCollection.activeChartWidget.value())
}, n.prototype._getChartWidgetApi = function(t) {
var e = this._chartWidgets.get(t);
return void 0 === e && (e = new s(t),
this._chartWidgets.set(t, e)), e
}, n.prototype.onActiveChartChanged = function() {
return this._activeChangedChangedDelegate
}, n.prototype.changeSymbol = function(t, e, i) {
r.interval.setValue(e), r.symbol.setValue(t), i && this.activeChart().onDataLoaded()
.subscribe(null, i, !0)
}, n.prototype.setLayout = function(t) {
this._chartWidgetCollection.layout.setValue(t)
}, n.prototype.layout = function() {
return this._chartWidgetCollection.layout.value()
}, n.prototype.chartsCount = function() {
return a[this.layout()].count
}, n.prototype.chart = function(t) {
if (void 0 === t && (t = 0), t < 0 || t > this.chartsCount()) throw Error(
"Incorrect index: " + t);
return this._getChartWidgetApi(this._chartWidgetCollection.getAll()[t])
}, n.prototype.getSymbolInterval = function(t) {
var e = {
symbol: r.symbol.value(),
interval: r.interval.value()
};
return t && t(e), e
}, n.prototype.saveChart = function(t) {
var e = this;
this._chartSaverInstance.whenReadyToSave(function() {
var i = e._chartSaverInstance.saveToJSON();
return t && t(JSON.parse(i.content))
})
}, n.prototype.loadChart = function(t) {
this._chartApiInstance.purgeCache(), this._chartApiInstance._studyEngine.stopSources(),
this._chartWidgetCollection.loadContent(t.json), this._chartWidgetCollection
.purgeUnusedWidgets(), t.extendedData && (this._chartWidgetCollection.metaInfo.id
.setValue(t.extendedData.uid), this._chartWidgetCollection.metaInfo.uid
.setValue(t.extendedData.uid), this._chartWidgetCollection.metaInfo.name
.setValue(t.extendedData.name)), r.symbol.setValue(this.activeChart().symbol()),
l.emit("chart_loaded")
}, n.prototype.getStudiesList = function() {
return this._chartApiInstance.allStudiesMetadata().filter(function(t) {
return !t.is_hidden_study
}).map(function(t) {
return t.name || t.description
})
}, n.prototype.getSavedCharts = function(t) {
p.getCharts(t)
}, n.prototype.loadChartFromServer = function(t) {
p.loadChart(t)
}, n.prototype.saveChartToServer = function(t, e, i, o) {
this._chartSaverInstance.saveChartSilently(t, i, e, o)
}, n.prototype.removeChartFromServer = function(t, e) {
p.removeChart(t, e)
}, n.prototype.getIntervals = function() {
var t;
return null !== this._chartApiInstance && (t = Object.keys(this._chartApiInstance
.defaultResolutions())), d.getIntervals(t)
}, n.prototype.closePopupsAndDialogs = function() {
var t, e = document.querySelectorAll("._tv-dialog-title-close");
for (t = 0; t < e.length; t++) e[t].click();
h(), c.hideAll()
}, n.prototype.selectLineTool = function(t) {
g.supportedLineTools[t] && (t = g.supportedLineTools[t].name, u.tool.value() !== t && u
.tool.setValue(t))
}, n.prototype.selectedLineTool = function() {
var t, e = Object.keys(g.supportedLineTools),
i = u.tool.value();
for (t = 0; t < e.length; ++t)
if (g.supportedLineTools[e[t]].name === i) return e[t];
return ""
}, n.prototype.lockAllDrawingTools = function() {
return null === this._lockDrawingsWatchedValue && (this._lockDrawingsWatchedValue =
new o(u.lockDrawings().value()), this._lockDrawingsWatchedValue.subscribe(
function(t) {
u.lockDrawings().setValue(t)
}), u.lockDrawings().subscribe(this, function() {
this._lockDrawingsWatchedValue.setValue(u.lockDrawings().value())
})), this._lockDrawingsWatchedValue
}, n.prototype.mainSeriesPriceFormatter = function() {
return this._chartWidgetCollection.activeChartWidget.value().model().mainSeries()
.priceScale().formatter()
}, n.prototype.showNoticeDialog = function(t) {
function e() {
i && (i(), i = null)
}
var i, o;
t = t || {}, i = t.callback, o = f({
title: t.title,
content: t.body || ""
}), o.on("action:ok", e), o.on("afterClose", e), o.open()
}, n.prototype.showConfirmDialog = function(t) {
function e(t) {
i && (i(t), i = null)
}
var i, o;
if (t = t || {}, !t.callback) throw Error("callback must be exist");
i = t.callback, o = m({
title: t.title,
content: t.body || ""
}), o.on("action:yes", e.bind(null, !0)), o.on("action:no", e.bind(null, !1)), o.on(
"afterClose", e.bind(null, !1)), o.open()
}, n.prototype.logs = function() {
return {
getLogHistory: _.getLogHistory,
enable: _.loggingOn,
disable: _.loggingOff
}
}, n.prototype.showLoadChartDialog = function() {
this._saveLoad && this._saveLoad.signInOrLoadChart()
}, n.prototype.showSaveAsChartDialog = function() {
this._saveLoad && this._saveLoad.signInOrSaveAs()
}, n.prototype.themes = function() {
return new v({
chartWidgetCollection: this._chartWidgetCollection
})
}, n.prototype.takeScreenshot = function() {
this._chartWidgetCollection.takeScreenshot()
}, t.exports = n
}).call(e, i(10), i(17))
},
function(t, e, i) {
"use strict";
(function(e) {
function o(t) {
var e, i, o = Object.keys(g),
n = o.length;
for (e = 0; e < n; ++e)
if (i = o[e], g[i].name === t) return i;
return null
}
function n(t) {
return "LineToolRiskRewardLong" === t || "LineToolRiskRewardShort" === t
}
var r = i(9).ensureNotNull,
s = i(1012),
a = i(206).applyOverridesToStudy,
l = i(33),
c = i(1013).LineDataSourceApi,
h = i(1014).StudyApi,
u = i(1015).PaneApi,
d = i(6).DefaultProperty,
p = i(308).availableIcons,
_ = i(58),
f = i(34).Interval,
m = i(50),
g = i(366).supportedLineTools,
v = i(355).createTooManyStudiesNotice,
y = function(t) {
this._chartWidget = t, this._panes = new WeakMap, this._studies = new WeakMap, this
._lineDataSources = new WeakMap
};
y.prototype._getPaneApi = function(t) {
var e = this._panes.get(t);
return void 0 === e && (e = new u(t), this._panes.set(t, e)), e
}, y.prototype._getStudyApi = function(t) {
var e = this._studies.get(t);
return void 0 === e && (e = new h(t, this._chartWidget.model().model()), this._studies
.set(t, e)), e
}, y.prototype._getLineDataSourceApi = function(t) {
var e = this._lineDataSources.get(t);
return void 0 === e && (e = new c(t, this._chartWidget.model().model(), {
apiPointsToDataSource: this._convertUserPointsToDataSource.bind(this),
dataSourcePointsToPriced: function(t) {
var e = this._chartWidget.model().mainSeries().syncModel(),
i = this._chartWidget.model().timeScale();
return t.map(function(t) {
var o = i.normalizeBarIndex(t.index);
return {
price: t.price,
time: e.projectTime(o.time_t, o.offset)
}
})
}.bind(this)
}), this._lineDataSources.set(t, e)), e
}, y.prototype._makeSubscriptionFromDelegate = function(t) {
var e = $.extend({}, t);
return delete e.fire, e
}, y.prototype.executeActionById = function(t) {
this._chartWidget.executeActionById(t)
}, y.prototype.getCheckableActionState = function(t) {
return this._chartWidget.getCheckableActionState(t)
}, y.prototype.refreshMarks = function() {
this._chartWidget.refreshMarks()
}, y.prototype.clearMarks = function() {
this._chartWidget.clearMarks()
}, y.prototype.symbol = function() {
return this._chartWidget.getSymbol()
}, y.prototype.symbolExt = function() {
var t = this._chartWidget.model().mainSeries().symbolInfo();
return t ? {
symbol: t.name,
full_name: t.full_name,
exchange: t.exchange,
description: t.description,
type: t.type
} : null
}, y.prototype.resolution = function() {
return this._chartWidget.model().mainSeries().properties().interval.value()
}, y.prototype.setSymbol = function(t, i) {
function o() {
n._chartWidget.model().mainSeries().onDataLoaded().unsubscribe(null, o), i && i()
}
if (t !== this.symbol() || e.enabled("same_data_requery")) {
var n = this;
return this._chartWidget.model().mainSeries().onDataLoaded().subscribe(null, o),
this._chartWidget.setSymbol(t)
}
}, y.prototype.resetData = function() {
this._chartWidget.model().mainSeries().rerequestData()
}, y.prototype.setResolution = function(t, e) {
function i() {
o._chartWidget.model().mainSeries().onDataLoaded().unsubscribe(null, i), e && e()
}
if ((t = t.toUpperCase()) !== this.resolution()) {
var o = this;
return this._chartWidget.model().mainSeries().onDataLoaded().subscribe(null, i),
this._chartWidget.setResolution(t)
}
}, y.prototype.setEntityVisibility = function(t, e) {
var i, o;
console.warn("`setEntityVisibility` is deprecated. Use shape/study API instead"), (i =
this._chartWidget.model().model().dataSourceForId(t)) && (o = i.properties()) &&
o.visible && o.visible.setValue(e)
}, y.prototype.getAllStudies = function() {
return this._chartWidget.model().model().allStudies().map(function(t) {
return {
id: t.id(),
name: t._metaInfo.description
}
})
}, y.prototype.getAllShapes = function() {
return this._chartWidget.model().model().allLineTools().map(function(t) {
return {
id: t.id(),
name: o(t.toolname)
}
}).filter(function(t) {
return null !== t.name
})
}, y.prototype.removeAllShapes = function() {
this._chartWidget.removeAllDrawingTools()
}, y.prototype.removeAllStudies = function() {
this._chartWidget.removeAllStudies()
}, y.prototype.removeEntity = function(t) {
var e = this._chartWidget.model().chartModel().dataSourceForId(t);
if (!e) return void console.warn("Can't find a source with id: " + t);
this._chartWidget.model().chartModel().removeSource(e, !0)
}, y.prototype.createStudyTemplate = function(t) {
return this._chartWidget.model().model().studyTemplate(t.saveInterval)
}, y.prototype.applyStudyTemplate = function(t) {
this._chartWidget.model().model().restoreStudyTemplate(t, "" + 1e3 * Math.random())
}, y.prototype.setVisibleRange = function(t, i) {
var o, n, r, s;
if (void 0 === t || !t.from || !t.to || isNaN(t.from) || isNaN(t.to))
return void console.warn("Wrong time range: " + JSON.stringify(t) +
'. Expected an object with "from" and "to" numeric values.');
o = this._chartWidget.model().model(), n = o.mainSeries(), r = [parseInt(t.from),
parseInt(t.to)
], s = f.isDWM(n.interval()) && !e.enabled("disable_resolution_rebuild") ? this
._alignPoints(r) : r, t.from = s[0], t.to = s[1], this._chartWidget
.setVisibleTimeRange(t.from, t.to, i)
}, y.prototype.getVisibleRange = function() {
var t, e = this._chartWidget.model().timeScale(),
i = e.visibleBars();
return null === i ? {
from: 0,
to: 0
} : (t = {
from: e.indexToUserTime(i.firstBar() < 0 ? 0 : i.firstBar()),
to: e.indexToUserTime(i.lastBar())
}, {
from: (+t.from || 0) / 1e3,
to: (+t.to || 0) / 1e3
})
}, y.prototype.getVisiblePriceRange = function() {
return this._chartWidget.model().mainSeries() ? this._chartWidget.model().mainSeries()
.priceScale().priceRangeInPrice() : null
}, y.prototype._createTradingPrimitive = function(t, e) {
function i() {
var t = TradingView.CLOSE_PLOT,
e = r(o._chartWidget.model().mainSeries().bars().last());
return {
index: e.index,
price: e.value[t]
}
}
var o = this,
n = this._chartWidget.model().model(),
s = n.paneForSource(n.mainSeries());
return (e ? n : this._chartWidget.model()).createLineTool(s, i(), t)._adapter
}, y.prototype.createOrderLine = function(t) {
var t = t || {};
return this._createTradingPrimitive("LineToolOrder", t.disableUndo)
}, y.prototype.createPositionLine = function(t) {
var t = t || {};
return this._createTradingPrimitive("LineToolPosition", t.disableUndo)
}, y.prototype.createExecutionShape = function(t) {
var t = t || {};
return this._createTradingPrimitive("LineToolExecution", t.disableUndo)
}, y.prototype.createShape = function(t, e) {
return this.createMultipointShape([t], e)
}, y.prototype._alignPoints = function(t) {
var e, i = this._chartWidget.model().model(),
o = i.mainSeries(),
n = o.symbolInfo(),
r = m.get_timezone(n.timezone);
return i.timeScale().isEmpty() ? t : (e = (new _.Session).init(r, n.session), t.map(
function(t) {
return t ? _.alignExchangeTimeToSessionStartAndReturnUTC(e.timezone, e
.spec, new Date(1e3 * t)) / 1e3 : t
}))
}, y.prototype._convertUserPointsToDataSource = function(t) {
function i(t, e, i) {
var o, n, r, s = h.closestIndexLeft(t) || 0,
a = {
index: s
},
l = h.valueAt(s);
return t > l && (o = c.syncModel().distance(l, t), o.success && (a.index = a.index +
o.result)), e ? a.price = e : (n = ["open", "high", "low", "close"], r = i ?
n.indexOf(i) + 1 : 1, r <= 0 && (r = 1), a.price = u.valueAt(s)[r]), a
}
var o, n, r, s, a, l = this._chartWidget.model().model(),
c = l.mainSeries(),
h = l.timeScale().points(),
u = c.data();
if (l.timeScale().isEmpty()) return null;
for (o = t.map(function(t) {
return t.time
}), n = f.isDWM(c.interval()) && !e.enabled("disable_resolution_rebuild") ? this
._alignPoints(o) : o, r = [], s = 0; s < t.length; s++) a = t[s], r.push(i(n[s], a
.price, a.channel));
return r
}, y.prototype.createMultipointShape = function(t, e, i) {
var o, r, s, a, l, c, h, u = e.disableUndo ? this._chartWidget.model().model() : this
._chartWidget.model(),
_ = this._chartWidget.model().model(),
f = _.mainSeries();
if (!_.timeScale().isEmpty()) {
if (o = _.paneForSource(f), r = this._convertUserPointsToDataSource(t), s = g[e
.shape] || g.flag, s.onlySelectable) throw Error('Cannot create "' + e
.shape + '" shape');
if ("LineToolPolyline" === s.name) r[0].price === r[r.length - 1].price && r[0]
.index === r[r.length - 1].index || r.push(r[0]);
else if ("LineToolIcon" === s.name) {
if (e.icon = e.icon || e.overrides && e.overrides.icon, !e.hasOwnProperty(
"icon")) throw Error("icon must be specified in options");
if (-1 === p.indexOf(e.icon)) throw Error("icon value must be valid");
e.overrides = e.overrides || {}, e.overrides.icon = e.icon
}
if (a = new d(s.name.toLowerCase()), e.overrides)
for (l in e.overrides) a[l] ? a[l].setValue(e.overrides[l]) : n(s.name) && -
1 !== ["profitLevel", "stopLevel"].indexOf(l) && a.addProperty(l, e
.overrides[l]);
if (s.supportsText && e.text && a.text.setValue(e.text), c = u.createLineTool(o, r[
0], s.name, a),
c.pointsCount() !== r.length && -1 !== c.pointsCount()) throw Error(
"Wrong points count for " + e.shape + ". Required " + c.pointsCount());
for (h = 1; h < r.length && this._chartWidget.model().lineBeingCreated(); h++) u
.coninueCreatingLine(r[h], {}, h < r.length - 1);
return e.lock && c.setUserEditEnabled(!1), e.disableSelection && (c.customization
.disableSelection = !0), e.disableSave && (c.customization.disableSave = !
0), e.hasOwnProperty("showInObjectsTree") && (c.customization
.showInObjectsTree = e.showInObjectsTree), e.zOrder && ("top" === e.zOrder ?
u.bringToFront(c) : "bottom" === e.zOrder && u.sendToBack(c)), c.id()
}
}, y.prototype.getShapeById = function(t) {
var e = this._chartWidget.model().model().getLineToolById(t);
if (null === e) throw Error("There is no such shape");
return this._getLineDataSourceApi(e)
}, y.prototype.createStudy = function(t, e, i, o, n, c, h) {
var u, d, p, _, f, m;
return h = h || {}, h.checkLimit && !this._chartWidget.model().canCreateStudy() ? (v()
.open(), null) : (t = t.toLowerCase(), u = this._chartWidget.model()
.chartModel(), d = l.findStudyMetaInfoByDescription(u.studiesMetaData(), t), d =
$.extend({}, d), delete d.state, d ? (p = {}, o && (p.inputs = s
.getStudyRecordFromArray([t].concat(o), this._chartWidget).inputs), _ =
u.insertStudy(d, p, e, null, h.priceScale), c && a(_, c), f = r(u
.paneForSource(_)), m = f.priceScaleName(_.priceScale()), u
.setPriceScaleVisibility(m, !0), i && _.setUserEditEnabled(!1), n && n(_
.id()), _.id()) : (console.warn("Study `" + t + "` not found."), null))
}, y.prototype.getStudyById = function(t) {
var e = this._chartWidget.model().model().getStudyById(t);
if (null === e) throw Error("There is no such study");
return this._getStudyApi(e)
}, y.prototype.chartType = function() {
return this._chartWidget.model().mainSeries().properties().style.value()
}, y.prototype.setChartType = function(t) {
this._chartWidget.model().mainSeries().properties().style.setValue(t)
}, y.prototype.priceFormatter = function() {
return this._chartWidget.model().mainSeries().priceScale().formatter()
}, y.prototype.onDataLoaded = function() {
return this._makeSubscriptionFromDelegate(this._chartWidget.model().mainSeries()
.onCompleted())
}, y.prototype.onSymbolChanged = function() {
return this._makeSubscriptionFromDelegate(this._chartWidget.model().mainSeries()
.onSymbolResolved())
}, y.prototype.onIntervalChanged = function() {
return this._makeSubscriptionFromDelegate(this._chartWidget.model().mainSeries()
.onIntervalChanged())
}, y.prototype.onVisibleRangeChanged = function() {
return this._makeSubscriptionFromDelegate(this._chartWidget.model().timeScale()
.visibleBarsChanged())
}, y.prototype.dataReady = function(t) {
var e = !this._chartWidget.model() || !this._chartWidget.model().mainSeries() || this
._chartWidget.model().mainSeries().data().isEmpty();
return t && (e ? this.onDataLoaded().subscribe(null, t, !0) : t()), !e
}, y.prototype.crossHairMoved = function(t) {
this._makeSubscriptionFromDelegate(this._chartWidget.model().chartModel()
.crossHairMoved()).subscribe(null, t)
}, y.prototype.setTimezone = function(t) {
this._chartWidget.setTimezone(t)
}, y.prototype.getPanes = function() {
return this._chartWidget.model().chartModel().panes().map(function(t) {
return this._getPaneApi(t)
}, this)
}, t.exports = y
}).call(e, i(5))
},
function(t, e, i) {
"use strict";
var o = function() {
function t(t) {
return t.is_price_study
}
function e(t, e) {
var i, o = e.slice(0).toLowerCase();
if (t) {
for (i = 0; i < t.length; ++i)
if (t[i].description.toLowerCase() === o || t[i].shortDescription.toLowerCase() ===
o) return t[i];
throw Error("Can't find metainfo for `" + e + "`")
}
throw Error("There is no studies metainfo at all")
}
function i(t) {
return t.inputs.map(function(t) {
return {
id: t.id,
type: t.type,
name: t.name
}
})
}
function o(o, n) {
var r, a, l, c, h, u, d, p, _;
if (!Array.isArray(o)) return r = e(n.model().studiesMetaData(), o), {
id: r.id,
overlay: t(r)
};
for (a = o.slice(0), l = a[0], r = e(n.model().studiesMetaData(), l), c = t(r), h = i(r),
d = a.splice(1), p = 0; p < d.length; ++p) u || (u = {}), _ = s[h[p].type] || s.string,
u[h[p].id] = _(d[p]);
return {
id: r.id,
name: l,
overlay: c,
inputs: u
}
}
function n(t, o, n) {
function r(t) {
return t.name.toLowerCase() === a
}
var s, a, l, c = e(n.model().studiesMetaData(), t),
h = i(c),
u = {};
for (s in o) a = s.toLowerCase(), l = h.filter(r), 0 !== l.length ? (l = l[0], u[l.id] = o[
s]) : console.warn("Uknown input `" + s + "` of `" + t + "`");
return {
id: c.id,
name: t,
inputs: u
}
}
var r = {},
s = {
bool: function(t) {
return !!t
},
integer: function(t) {
return parseInt(t)
},
float: function(t) {
return parseFloat(t)
},
string: function(t) {
return t
}
};
return r.getStudyRecordFromArray = function(t, e) {
return e = e || chartWidget, o(t, e)
}, r.getStudyRecordFromObject = function(t, e, i) {
return i = i || chartWidget, n(t, e, i)
}, r
}();
t.exports = o
},
function(t, e, i) {
"use strict";
var o, n, r;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(15), n = ["alwaysShowStats", "clonable", "entryPrice", "interval", "lastUpdateTime",
"points", "singleChartOnly", "snapTo45Degrees", "stopPrice", "symbol", "targetPrice"
], r = function() {
function t(t, e, i) {
this._source = t, this._model = e, this._pointsConverter = i
}
return t.prototype.isSelectionEnabled = function() {
return this._source.isSelectionEnabled()
}, t.prototype.setSelectionEnabled = function(t) {
this._source.setSelectionEnabled(t)
}, t.prototype.isSavingEnabled = function() {
return this._source.isSavedInChart()
}, t.prototype.setSavingEnabled = function(t) {
this._source.setSavingInChartEnabled(t)
}, t.prototype.isShowInObjectsTreeEnabled = function() {
return this._source.showInObjectTree()
}, t.prototype.setShowInObjectsTreeEnabled = function(t) {
this._source.setShowInObjectsTreeEnabled(t)
}, t.prototype.isUserEditEnabled = function() {
return this._source.userEditEnabled()
}, t.prototype.setUserEditEnabled = function(t) {
this._source.setUserEditEnabled(t)
}, t.prototype.bringToFront = function() {
this._model.bringToFront(this._source)
}, t.prototype.sendToBack = function() {
this._model.sendToBack(this._source)
}, t.prototype.getProperties = function() {
return this._source.properties().state(n, !0)
}, t.prototype.setProperties = function(t) {
this._setProps(this._source.properties(), t, "")
}, t.prototype.getPoints = function() {
return this._pointsConverter.dataSourcePointsToPriced(this._source.points())
}, t.prototype.setPoints = function(t) {
var e, i, o = this._source.pointsCount(),
n = -1 === o ? this._source.points().length : o;
if (n !== t.length) throw Error("Wrong points count. Required=" + n);
for (e = this._pointsConverter.apiPointsToDataSource(t),
i = 0; i < e.length; ++i) this._source.setPoint(i, e[i])
}, t.prototype._setProps = function(t, e, i) {
var n, r, s;
for (n in e) e.hasOwnProperty(n) && (r = 0 === i.length ? n : i + "." + n, t
.hasOwnProperty(n) ? (s = e[n], o.isHashObject(s) ? this._setProps(t[n], s, r) :
t[n].setValue(s)) : console.warn('Unknown property "' + r + '"'))
}, t
}(), e.LineDataSourceApi = r
},
function(t, e, i) {
"use strict";
var o, n, r, s;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), i(12), n = i(9), r = i(206), s = function() {
function t(t, e) {
this._study = t, this._model = e
}
return t.prototype.isUserEditEnabled = function() {
return this._study.userEditEnabled()
}, t.prototype.setUserEditEnabled = function(t) {
this._study.setUserEditEnabled(t)
}, t.prototype.getInputsInfo = function() {
return this._study.metaInfo().inputs.map(function(t) {
return o.__assign({}, t, {
localizedName: void 0 !== t.name ? window.t(t.name, {
context: "input"
}) : ""
})
})
}, t.prototype.getInputValues = function() {
var t = this._study.inputs();
return Object.keys(t).map(function(e) {
return {
id: e,
value: t[e]
}
})
}, t.prototype.setInputValues = function(t) {
var e, i, o, n = this.getInputValues(),
r = function(t) {
void 0 !== n.find(function(e) {
return e.id === t.id
}) ? s._study.properties().inputs[t.id].setValue(t.value) : console.warn(
'There is no such input: "' + t.id + '"')
},
s = this;
for (e = 0, i = t; e < i.length; e++) o = i[e], r(o)
}, t.prototype.mergeUp = function() {
this._model.mergeSourceUp(this._study), this._showStudyPriceScale()
}, t.prototype.mergeDown = function() {
this._model.mergeSourceDown(this._study), this._showStudyPriceScale()
}, t.prototype.unmergeUp = function() {
this._model.unmergeSourceUp(this._study), this._showStudyPriceScale()
}, t.prototype.unmergeDown = function() {
this._model.unmergeSourceDown(this._study), this._showStudyPriceScale()
}, t.prototype.changePriceScale = function(t) {
var e, i, o, r = n.ensureNotNull(this._model.paneForSource(this._study)),
s = null;
switch (t) {
case "left":
s = r.priceScaleByName("left");
break;
case "right":
s = r.priceScaleByName("right");
break;
case "no-scale":
s = r.priceScaleByName("");
break;
case "as-series":
if (e = this._model.mainSeries(), (i = n.ensureNotNull(this._model
.paneForSource(e))) !== r) return void console.warn(
'BEWARE: Attempt to change price scale to "as-series", but series and study are on different panes'
);
o = i.priceScaleName(i.priceScaleForSource(e)), s = r.priceScaleByName(o);
break;
default:
throw Error("Cannot change study's price scale to unknown price scale (\"" + t +
'")')
}
this._model.move(this._study, r, s), this._showStudyPriceScale()
}, t.prototype.isVisible = function() {
return this._study.properties().visible.value()
}, t.prototype.setVisible = function(t) {
this._study.properties().visible.setValue(t)
}, t.prototype.bringToFront = function() {
this._model.bringToFront(this._study)
}, t.prototype.sendToBack = function() {
this._model.sendToBack(this._study)
}, t.prototype.applyOverrides = function(t) {
r.applyOverridesToStudy(this._study, t)
}, t.prototype._showStudyPriceScale = function() {
var t = n.ensureNotNull(this._model.paneForSource(this._study)),
e = t.priceScaleName(this._study.priceScale());
this._model.setPriceScaleVisibility(e, !0)
}, t
}(), e.StudyApi = s
},
function(t, e, i) {
"use strict";
var o, n;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(1016), n = function() {
function t(t) {
this._priceScales = new WeakMap, this._pane = t
}
return t.prototype.hasMainSeries = function() {
return this._pane.containsMainSeries()
}, t.prototype.getLeftPriceScale = function() {
return this._getPriceScaleApi(this._pane.leftPriceScale())
}, t.prototype.getRightPriceScale = function() {
return this._getPriceScaleApi(this._pane.rightPriceScale())
}, t.prototype.getMainSourcePriceScale = function() {
var t, e = this._pane.mainDataSource();
return null === e ? null : (t = this._pane.priceScaleForSource(e), null === t ? null :
this._getPriceScaleApi(t))
}, t.prototype._getPriceScaleApi = function(t) {
var e = this._priceScales.get(t);
return void 0 === e && (e = new o.PriceScaleApi(t), this._priceScales.set(t, e)), e
}, t
}(), e.PaneApi = n
},
function(t, e, i) {
"use strict";
Object.defineProperty(e, "__esModule", {
value: !0
});
var o = function() {
function t(t) {
this._priceScale = t
}
return t.prototype.getMode = function() {
var t = this._priceScale.properties();
return t.percentage.value() ? 2 : t.log.value() ? 1 : 0
}, t.prototype.setMode = function(t) {
var e = this._priceScale.properties();
e.percentage.setValue(2 === t), e.log.setValue(1 === t)
}, t
}();
e.PriceScaleApi = o
},
function(t, e, i) {
"use strict";
var o, n;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(310), n = function() {
function t(t) {
this._opts = t
}
return t.prototype.isStdTheme = function() {
return o.isStdTheme(o.extractThemeFromModel(this._getActiveChartModel()))
}, t.prototype.setStdTheme = function(t) {
var e = this;
return o.getStdTheme(t).then(function(i) {
e._opts.chartWidgetCollection.applyTheme(i.content), o.setTheme(t), o
.syncTheme()
})
}, t.prototype.setStdThemeForLayout = function(t) {
o.setTheme(t), o.syncTheme()
}, t.prototype.getCurrentThemeName = function() {
return o.getCurrentTheme().name
}, t.prototype._getActiveChartModel = function() {
return this._getActiveChartWidget().model()
}, t.prototype._getActiveChartWidget = function() {
return this._opts.chartWidgetCollection.activeChartWidget.value()
}, t
}(), e.ThemesApi = n
},
function(t, e, i) {
"use strict";
var o, n, r, s = i(48);
i(234), o = i(1019).pivotPointsStandardStudyItem, n = i(1020).spreadStudyItem, r = i(1021)
.ratioStudyItem, JSServer.studyLibrary = JSServer.studyLibrary.concat([{
name: "Compare",
metainfo: {
_metainfoVersion: 15,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !0,
defaults: {
styles: {
compare: {
linestyle: 0,
linewidth: 2,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#800080"
}
},
precision: 4,
inputs: {
source: "close",
symbol: ""
}
},
plots: [{
id: "compare",
type: "line"
}],
styles: {
compare: {
title: "Plot",
histogramBase: 0
}
},
description: "Compare",
shortDescription: "Compare",
is_price_study: !0,
inputs: [{
defval: "close",
id: "source",
name: "Source",
options: ["open", "high", "low", "close", "hl2", "hlc3", "ohlc4"],
type: "text"
}, {
id: "symbol",
name: "Symbol",
type: "symbol"
}],
id: "Compare@tv-basicstudies-1"
},
constructor: function() {
this.init = function(t, e) {
this._context = t, this._context.new_sym(e(1), s.Std.period(this
._context), s.Std.period(this._context))
}, this.main = function(t, e) {
var i, o, n, r, a;
return this._context = t, i = this._context.new_var(this._context.symbol
.time), this._context.select_sym(1), o = this._context.new_var(
this._context.symbol.time),
n = s.Std[e(0)](this._context), r = this._context.new_var(n), this
._context.select_sym(0), a = r.adopt(o, i, 0), [a]
}
}
}, {
name: "Overlay",
metainfo: {
_metainfoVersion: 15,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !0,
defaults: {
styles: {},
precision: 4,
inputs: {
symbol: ""
}
},
plots: [{
id: "open",
type: "line"
}, {
id: "high",
type: "line"
}, {
id: "low",
type: "line"
}, {
id: "close",
type: "line"
}],
styles: {
open: {
title: "open"
},
high: {
title: "high"
},
low: {
title: "low"
},
close: {
title: "close"
}
},
description: "Overlay",
shortDescription: "Overlay",
is_price_study: !1,
inputs: [{
id: "symbol",
name: "symbol",
defval: "",
type: "symbol",
isHidden: !0
}],
id: "Overlay@tv-basicstudies-1"
},
constructor: function() {
this.init = function(t, e) {
this._context = t, this._context.new_sym(e(0), s.Std.period(this
._context), s.Std.period(this._context))
}, this.main = function(t, e) {
var i, o, n, r, a, l;
return this._context = t, i = this._context.new_var(this._context.symbol
.time), this._context.select_sym(1), o = this._context.new_var(
this._context.symbol.time), n = this._context.new_var(s.Std
.open(this._context)), r = this._context.new_var(s.Std.high(this
._context)), a = this._context.new_var(s.Std.low(this
._context)), l = this._context.new_var(s.Std.close(this
._context)),
this._context.select_sym(0), [n.adopt(o, i, 1), r.adopt(o, i, 1), a
.adopt(o, i, 1), l.adopt(o, i, 1)
]
}
}
}, {
name: "Volume",
metainfo: {
_metainfoVersion: 15,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
transparency: 65,
defaults: {
styles: {
vol: {
linestyle: 0,
linewidth: 1,
plottype: 5,
trackPrice: !1,
transparency: 65,
visible: !0,
color: "#000080"
},
vol_ma: {
linestyle: 0,
linewidth: 1,
plottype: 4,
trackPrice: !1,
transparency: 65,
visible: !0,
color: "#0496FF"
}
},
precision: 0,
palettes: {
volumePalette: {
colors: {
0: {
color: "#eb4d5c",
width: 1,
style: 0
},
1: {
color: "#53b987",
width: 1,
style: 0
}
}
}
},
inputs: {
showMA: !1,
maLength: 20
}
},
plots: [{
id: "vol",
type: "line"
}, {
id: "volumePalette",
palette: "volumePalette",
target: "vol",
type: "colorer"
}, {
id: "vol_ma",
type: "line"
}],
styles: {
vol: {
title: "Volume",
histogramBase: 0
},
vol_ma: {
title: "Volume MA",
histogramBase: 0
}
},
description: "Volume",
shortDescription: "Volume",
is_price_study: !1,
palettes: {
volumePalette: {
colors: {
0: {
name: "Color 0"
},
1: {
name: "Color 1"
}
}
}
},
inputs: [{
id: "showMA",
name: "show MA",
defval: !1,
type: "bool"
}, {
id: "maLength",
name: "MA Length",
defval: 20,
type: "integer",
min: 1,
max: 2e3
}],
id: "Volume@tv-basicstudies-1"
},
constructor: function() {
this.f_0 = function(t, e) {
return s.Std.gt(t, e) ? 0 : 1
}, this.f_1 = function(t, e) {
return t ? e : s.Std.na()
}, this.main = function(t, e) {
var i, o, n, r, a, l, c;
return this._context = t, this._input = e, i = this._input(0), o = s.Std
.volume(this._context), n = this.f_0(s.Std.open(this._context), s
.Std.close(this._context)), r = s.Std.volume(this._context), a =
this._context.new_var(r), l = s.Std.sma(a, this._input(1), this
._context), c = this.f_1(i, l), [o, n, c]
}
}
}, {
name: "ZigZag",
metainfo: {
_metainfoVersion: 23,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 2,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#008000"
}
},
precision: 4,
inputs: {
in_0: 5,
in_1: 10
}
},
plots: [{
id: "plot_0",
type: "line"
}, {
id: "plot_1",
target: "plot_0",
type: "dataoffset"
}],
styles: {
plot_0: {
title: "Plot",
histogramBase: 0,
joinPoints: !1
}
},
description: "Zig Zag",
shortDescription: "ZigZag",
is_price_study: !0,
classId: "ScriptWithDataOffset",
inputs: [{
id: "in_0",
name: "deviation",
defval: 5,
type: "integer",
min: 1,
max: 100
}, {
id: "in_1",
name: "depth",
defval: 10,
type: "integer",
min: 2,
max: 1e3
}],
id: "ZigZag@tv-basicstudies-1"
},
constructor: function() {
this.main = function(t, e) {
var i, o, n, r, a, l, c, h;
return this._context = t, this._input = e, i = this._input(0), o = this
._input(1), n = i / 100, r = o / 2, a = s.Std.zigzag(n, r, this
._context), l = s.Std.zigzagbars(n, r, this._context), c = a,
h = l, [c, h]
}
}
}, {
name: "Sessions",
metainfo: {
_metainfoVersion: 44,
defaults: {
graphics: {
vertlines: {
sessBreaks: {
color: "#4985e7",
style: 2,
visible: !1,
width: 1
}
}
},
linkedToSeries: !0,
precision: 4
},
description: "Sessions",
graphics: {
vertlines: {
sessBreaks: {
name: "Session Break"
}
}
},
id: "Sessions@tv-basicstudies-1",
inputs: [],
is_hidden_study: !0,
is_price_study: !0,
name: "Sessions@tv-basicstudies",
palettes: {},
plots: [],
shortDescription: "Sessions"
},
constructor: function() {
function t(t, e) {
return {
id: t,
time: t,
extendBottom: !0,
extendTop: !0
}
}
this.init = function() {
this._times = []
}, this._getVerticalLineData = function(e) {
return s.Std.selectSessionBreaks(e, this._times).map(t)
}, this.main = function(t, e) {
var i, o, n;
return s.Std.isdwm(t) ? null : (i = s.Std.time(t), isNaN(i) ? null : (
o = this._times.length, 0 !== o && this._times[o - 1] ===
i || this._times.push(i), t.symbol.isLastBar && t.symbol
.isNewBar ? (n = this._getVerticalLineData(t), 0 === n
.length ? null : {
nonseries: !0,
type: "study_graphics",
data: {
graphicsCmds: {
create: {
vertlines: [{
styleId: "sessBreaks",
data: n
}]
},
erase: [{
action: "all"
}]
}
}
}) : null))
}
}
}, {
name: "SuperTrend",
metainfo: {
_metainfoVersion: 39,
isTVScript: !1,
isTVScriptStub: !1,
is_hidden_study: !1,
defaults: {
styles: {
plot_0: {
linestyle: 0,
linewidth: 3,
plottype: 0,
trackPrice: !1,
transparency: 35,
visible: !0,
color: "#000080"
},
plot_2: {
linestyle: 0,
linewidth: 3,
plottype: "shape_arrow_up",
trackPrice: !1,
location: "BelowBar",
transparency: 35,
visible: !0,
color: "#00FF00"
},
plot_3: {
linestyle: 0,
linewidth: 3,
plottype: "shape_arrow_down",
trackPrice: !1,
location: "AboveBar",
transparency: 35,
visible: !0,
color: "#FF0000"
}
},
precision: 4,
palettes: {
palette_0: {
colors: {
0: {
color: "#008000",
width: 3,
style: 0
},
1: {
color: "#800000",
width: 3,
style: 0
}
}
}
},
inputs: {
in_0: 10,
in_1: 3
}
},
plots: [{
id: "plot_0",
type: "line"
}, {
id: "plot_1",
palette: "palette_0",
target: "plot_0",
type: "colorer"
}, {
id: "plot_2",
type: "shapes"
}, {
id: "plot_3",
type: "shapes"
}],
styles: {
plot_0: {
title: "SuperTrend",
histogramBase: 0,
joinPoints: !1,
isHidden: !1
},
plot_2: {
title: "Up Arrow",
histogramBase: 0,
joinPoints: !1,
isHidden: !1
},
plot_3: {
title: "Down Arrow",
histogramBase: 0,
joinPoints: !1,
isHidden: !1
}
},
description: "SuperTrend",
shortDescription: "SuperTrend",
is_price_study: !0,
palettes: {
palette_0: {
colors: {
0: {
name: "Color 0"
},
1: {
name: "Color 1"
}
},
valToIndex: {
0: 0,
1: 1
}
}
},
inputs: [{
id: "in_0",
name: "Length",
defval: 10,
type: "integer",
min: 1,
max: 100
}, {
id: "in_1",
name: "Factor",
defval: 3,
type: "float",
min: 1,
max: 100
}],
id: "SuperTrend@tv-basicstudies-1",
scriptIdPart: "",
name: "SuperTrend",
isCustomIndicator: !0
},
constructor: function() {
this.f_0 = function() {
var t, e, i, o, n, r = this._input(0),
a = this._input(1),
l = s.Std.atr(r, this._context);
return r = s.Std.hl2(this._context) + l * a, l = s.Std.hl2(this
._context) - l * a, t = this._context.new_var(s.Std.close(this
._context)), a = this._context.new_var(), e = s.Std.max(l, a
.get(1)), a.set(s.Std.gt(t.get(1), a.get(1)) ? e : l), l = this
._context.new_var(), e = s.Std.min(r, l.get(1)), l.set(s.Std.lt(t
.get(1), l.get(1)) ? e : r), r = this._context.new_var(), t = s
.Std.nz(r.get(1), 1), t = s.Std.lt(s.Std.close(this._context), a
.get(1)) ? -1 : t, r.set(s.Std.gt(s.Std.close(this._context), l
.get(1)) ? 1 : t), a = s.Std.eq(r.get(0), 1) ? a.get(0) : l.get(
0), i = s.Std.eq(r.get(0), 1) ? 0 : 1, o = 1 === r.get(0) && -
1 === r.get(1), n = -1 === r.get(0) && 1 === r.get(1), [a, i, o, n]
}, this.main = function(t, e) {
this._context = t, this._input = e;
var i = this.f_0();
return [i[0], i[1], i[2], i[3]]
}
}
}, o, n, r])
},
function(t, e, i) {
"use strict";
function o(t) {
switch (t) {
case "Traditional":
return 0;
case "Fibonacci":
return 1;
case "Woodie":
return 2;
case "Classic":
return 3;
case "DeMark":
return 4;
case "Camarilla":
return 5;
default:
throw Error("Unknown kind " + t)
}
}
function n(t, e) {
t.setUTCMonth(t.getUTCMonth() + e)
}
function r(t, e) {
return new Date(e, t, 0).getDate()
}
function s(t, e) {
var i, o, s;
return u.Std.ismonthly(t) ? (i = new Date(e), o = i.getUTCDay(), s = r(i.getUTCMonth(), i
.getUTCFullYear()), o < s ? (n(i, u.Std.interval(t)), i = u.Std
.add_days_considering_dst("Etc/UTC", i, 1 - i.getUTCDay())) : (i = u.Std
.add_days_considering_dst("Etc/UTC", i, 1), n(i, u.Std.interval(t))), i.valueOf()) : e + d
.Interval.parse(t.symbol.resolution).inMilliseconds(e)
}
function a(t, e, i, o, n, r, s, a) {
var l, c = new p,
h = NaN,
d = i - o;
switch (a) {
case 0:
h = (i + o + n) / 3, c.p = h, c.r1 = 2 * h - o, c.s1 = 2 * h - i, c.r2 = h + (i - o), c.s2 =
h - (i - o), c.r3 = 2 * h + (i - 2 * o), c.s3 = 2 * h - (2 * i - o), c.r4 = 3 * h + (i -
3 * o), c.s4 = 3 * h - (3 * i - o), c.r5 = 4 * h + (i - 4 * o), c.s5 = 4 * h - (4 *
i - o);
break;
case 1:
h = (i + o + n) / 3, c.p = h, c.r1 = h + .382 * d, c.s1 = h - .382 * d, c.r2 = h + .618 * d,
c.s2 = h - .618 * d, c.r3 = h + d, c.s3 = h - d;
break;
case 2:
h = (i + o + 2 * t) / 4, c.p = h, c.r1 = 2 * h - o, c.s1 = 2 * h - i, c.r2 = h + d, c.s2 =
h - d, c.r3 = i + 2 * (h - o), c.s3 = o - 2 * (i - h), c.r4 = c.r3 + d, c.s4 = c.s3 - d;
break;
case 3:
h = (i + o + n) / 3, c.p = h, c.r1 = 2 * h - o, c.s1 = 2 * h - i, c.r2 = h + d, c.s2 = h -
d, c.r3 = h + 2 * d, c.s3 = h - 2 * d, c.r4 = h + 3 * d, c.s4 = h - 3 * d;
break;
case 4:
l = NaN, l = u.Std.equal(e, n) ? i + o + 2 * n : u.Std.greater(n, e) ? 2 * i + o + n : 2 *
o + i + n, h = l / 4, c.p = h, c.r1 = l / 2 - o, c.s1 = l / 2 - i;
break;
case 5:
h = (i + o + n) / 3, c.p = h, c.r1 = n + 1.1 * d / 12, c.s1 = n - 1.1 * d / 12, c.r2 = n +
1.1 * d / 6, c.s2 = n - 1.1 * d / 6, c.r3 = n + 1.1 * d / 4, c.s3 = n - 1.1 * d / 4, c
.r4 = n + 1.1 * d / 2, c.s4 = n - 1.1 * d / 2;
break;
default:
throw Error("Unknown kind")
}
return c.startIndex__t = r, c.endIndex__t = s, c
}
function l(t, e) {
return (!u.Std.isdaily(t) || "Daily" !== e) && ((!u.Std.isweekly(t) || "Daily" !== e && "Weekly" !==
e) && (!u.Std.ismonthly(t) || "Daily" !== e && "Weekly" !== e && "Monthly" !== e))
}
function c(t) {
if (u.Std.isweekly(t) || u.Std.ismonthly(t)) return "12M";
if (u.Std.isdaily(t)) return "1M";
if (u.Std.isintraday(t)) {
var e = u.Std.interval(t);
return e >= 1 && e <= 15 ? "1D" : "1W"
}
throw Error("Unexpected resolution type: " + t.symbol.resolution)
}
function h(t, e) {
switch (e) {
case "Auto":
return c(t);
case "Daily":
return "1D";
case "Weekly":
return "1W";
case "Monthly":
return "1M";
case "Yearly":
return "12M";
default:
throw Error("No such pivTimeFrame: " + e)
}
}
var u, d, p, _, f;
Object.defineProperty(e, "__esModule", {
value: !0
}), u = i(48), d = i(34), p = function() {
function t() {
this.p = NaN, this.r1 = NaN, this.s1 = NaN, this.r2 = NaN, this.s2 = NaN, this.r3 = NaN,
this.s3 = NaN, this.r4 = NaN, this.s4 = NaN, this.r5 = NaN, this.s5 = NaN, this
.startIndex__t = NaN, this.endIndex__t = NaN
}
return t
}(), _ = function() {
function t() {
this.pivots = []
}
return t
}(), f = function() {
function t() {
this._secondaryRes = "1D", this._firstMainSeriesBarTime = NaN
}
return t.prototype.init = function(t, e) {
var i, n = e(0),
r = e(1),
s = e(2),
a = e(3);
this._data = new _, this._firstMainSeriesBarTime = NaN, this._kindPP = o(n), this
._showHistoricalPivots = r, this._historicalPivotsToKeep = a, this._pivTimeFrame =
s, this._isValidResolution = l(t, this._pivTimeFrame), this._isValidResolution && (
this._secondaryRes = h(t, this._pivTimeFrame)), i = "" === t.symbol.resolution ?
Math.max(30, 2 * parseInt(t.symbol.interval)) + "" : t.symbol.period, t.new_sym(t
.symbol.tickerid, this._secondaryRes, this._secondaryRes, i)
}, t.prototype.main = function(t) {
var e, i, o, n, r, l, c, h, d, p, _, f, m, g, v;
return this._isValidResolution ? t.symbol.time ? (isNaN(this._firstMainSeriesBarTime) &&
(this._firstMainSeriesBarTime = t.symbol.time, this._removeUnusedPivots()), t
.symbol.isLastBar && t.symbol.isNewBar ? this._createResponse() : null) : (t
.select_sym(1), e = t.new_var(u.Std.open(t)), i = t.new_var(u.Std.high(t)), o =
t.new_var(u.Std.low(t)), n = t.new_var(u.Std.close(t)), r = t.new_var(u.Std
.time(t)), l = this._data, c = e.get(0), h = r.get(0), d = e.get(1), p = i
.get(1), _ = o.get(1), f = n.get(1), m = t.symbol.isLastBar, 0 !== l.pivots
.length && t.symbol.isNewBar && (g = l.pivots[l.pivots.length - 1], g
.endIndex__t !== h && (g.endIndex__t = h)), 0 !== t.symbol.index && t.symbol
.isNewBar ? (v = a(c, d, p, _, f, h, s(t, h), this._kindPP), t.select_sym(0),
this._showHistoricalPivots || (l.pivots = []), l.pivots.push(v), l.pivots
.length > this._historicalPivotsToKeep && l.pivots.shift(), m ? this
._createResponse() : null) : (t.select_sym(0), null)) : null
}, t.prototype._createResponse = function() {
return 0 === this._data.pivots.length ? null : {
nonseries: !0,
type: "non_series_data",
data: {
data: this._data
}
}
}, t.prototype._removeUnusedPivots = function() {
var t = this,
e = Math.max(this._data.pivots.findIndex(function(e) {
return e.startIndex__t > t._firstMainSeriesBarTime
}) - 1, 0);
e > 0 && this._data.pivots.splice(0, e)
}, t
}(), e.pivotPointsStandardStudyItem = {
name: "Pivot Points Standard",
metainfo: {
_metainfoVersion: 44,
defaults: {
inputs: {
kind: "Traditional",
lookBack: 15,
pivTimeFrame: "Auto",
showHistoricalPivots: !0
},
precision: "4"
},
description: "Pivot Points Standard",
id: "PivotPointsStandard@tv-basicstudies-80",
inputs: [{
defval: "Traditional",
id: "kind",
name: "Type",
options: ["Traditional", "Fibonacci", "Woodie", "Classic", "DeMark",
"Camarilla"
],
type: "text"
}, {
defval: !0,
id: "showHistoricalPivots",
name: "Show historical pivots",
type: "bool"
}, {
defval: "Auto",
id: "pivTimeFrame",
name: "Pivots Timeframe",
options: ["Auto", "Daily", "Weekly", "Monthly", "Yearly"],
type: "text"
}, {
defval: 15,
id: "lookBack",
max: 5e3,
min: 2,
name: "Number of Pivots Back",
type: "integer"
}],
is_price_study: !0,
linkedToSeries: !0,
shortDescription: "Pivots"
},
constructor: f
}
},
function(t, e, i) {
"use strict";
var o, n, r;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(367),
r = function(t) {
function e() {
return null !== t && t.apply(this, arguments) || this
}
return o.__extends(e, t), e.prototype._doCalculation = function(t, e, i, o) {
return t * e - i * o
}, e
}(n.SpreadRatioBase), e.spreadStudyItem = {
name: "Spread",
metainfo: {
_metainfoVersion: 15,
defaults: n.spreadRatioDefaults,
plots: n.spreadRatioPlots,
styles: n.spreadRatioStyles,
description: "Spread",
shortDescription: "Spread",
is_price_study: !1,
inputs: n.spreadRatioInputs,
id: "Spread@tv-basicstudies-1"
},
constructor: r
}
},
function(t, e, i) {
"use strict";
var o, n, r;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(367), r = function(t) {
function e() {
return null !== t && t.apply(this, arguments) || this
}
return o.__extends(e, t), e.prototype._doCalculation = function(t, e, i, o) {
return t * e / (i * o)
}, e
}(n.SpreadRatioBase), e.ratioStudyItem = {
name: "Ratio",
metainfo: {
_metainfoVersion: 15,
defaults: n.spreadRatioDefaults,
plots: n.spreadRatioPlots,
styles: n.spreadRatioStyles,
description: "Ratio",
shortDescription: "Ratio",
is_price_study: !1,
inputs: n.spreadRatioInputs,
id: "Ratio@tv-basicstudies-1"
},
constructor: r
}
},
function(t, e, i) {
"use strict";
function o() {
return {
Bars: n.enabled("header_chart_type") ? r.ToolWidgetChartStyles : void 0,
Compare: n.enabled("header_compare") ? s.ToolWidgetCompare : void 0,
Custom: g.ToolWidgetCustom,
Fullscreen: n.enabled("header_fullscreen_button") ? a.ToolWidgetFullscreen : void 0,
Indicators: n.enabled("header_indicators") ? l.ToolWidgetIndicators : void 0,
Intervals: n.enabled("header_resolutions") ? c.ToolWidgetIntervals : void 0,
OpenPopup: h.ToolWidgetOpenPopup,
Properties: n.enabled("header_settings") && n.enabled("show_chart_property_page") ? u
.ToolWidgetProperties : void 0,
SaveLoad: n.enabled("header_saveload") ? d.ToolWidgetSaveLoad : void 0,
Screenshot: n.enabled("header_screenshot") ? p.ToolWidgetScreenshot : void 0,
SymbolSearch: n.enabled("header_symbol_search") ? _.ToolWidgetSymbolSearch : void 0,
Templates: n.enabled("study_templates") ? f.ToolWidgetTemplates : void 0,
UndoRedo: n.enabled("header_undo_redo") ? m.ToolWidgetUndoRedo : void 0
}
}
var n, r, s, a, l, c, h, u, d, p, _, f, m, g;
Object.defineProperty(e, "__esModule", {
value: !0
}), n = i(5), r = i(1023), s = i(1029), a = i(1032), l = i(1035), c = i(1037), h = i(1046), u = i(
1049), d = i(1051), p = i(1057), _ = i(1060), f = i(1062), m = i(1071), g = i(1075), e
.getRestrictedToolSet = o
},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c, h, u, d, p, _, f, m, g, v;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(2), r = i(27), s = i(49), a = i(348), l = i(153), c = i(59), h = i(70), u = i(
235), d = i(109), p = i(369), _ = i(1028), v = {}, v[s.STYLE_BARS] = window.t("Bars"), v[s
.STYLE_CANDLES] = window.t("Candles"), v[s.STYLE_HOLLOW_CANDLES] = window.t("Hollow Candles"),
v[s.STYLE_HEIKEN_ASHI] = window.t("Heikin Ashi"), v[s.STYLE_LINE] = window.t("Line"), v[s
.STYLE_AREA] = window.t("Area"), v[s.STYLE_BASELINE] = window.t("Baseline"), f = v, m = {
barsStyle: window.t("Bar's Style"),
labels: f
}, g = function(t) {
function e(e, i) {
var o, n, r, a, l = t.call(this, e, i) || this;
return l._handleChangeStyle = function(t) {
var e = l.state,
i = e.favorites,
o = e.lastSelectedNotFavorite,
n = e.activeStyle;
l.setState({
activeStyle: t,
lastSelectedNotFavorite: i.includes(n) ? o : n
})
}, l._handleSelectStyle = function(t) {
var e = l.context.chartWidgetCollection;
t !== e.activeChartStyle.value() && e.trySetChartStyleToActiveWidget(t)
}, l._handleClickFavorite = function(t) {
l._isStyleFavorited(t) ? l._handleRemoveFavorite(t) : l._handleAddFavorite(t)
}, o = i.chartWidgetCollection, n = i.favoriteChartStylesService, r = o.activeChartStyle
.value(), a = n.get(), l.state = {
activeStyle: r,
favorites: a,
styles: [s.STYLE_BARS, s.STYLE_CANDLES, s.STYLE_HOLLOW_CANDLES, s.STYLE_HEIKEN_ASHI,
s.STYLE_LINE, s.STYLE_AREA, s.STYLE_BASELINE
]
}, l
}
return o.__extends(e, t), e.prototype.componentDidMount = function() {
var t = this.context,
e = t.chartWidgetCollection,
i = t.favoriteChartStylesService;
e.activeChartStyle.subscribe(this._handleChangeStyle), i.getOnChange().subscribe(this,
this._handleChangeSettings)
}, e.prototype.componentWillUnmount = function() {
var t = this.context,
e = t.chartWidgetCollection,
i = t.favoriteChartStylesService;
e.activeChartStyle.unsubscribe(this._handleChangeStyle), i.getOnChange().unsubscribe(
this, this._handleChangeSettings)
}, e.prototype.render = function() {
var t, e, i = this,
o = this.props,
r = o.isShownQuicks,
s = o.displayMode,
l = void 0 === s ? "full" : s,
h = o.id,
f = this.state,
g = f.activeStyle,
v = f.favorites,
y = f.styles,
b = f.lastSelectedNotFavorite,
S = "small" !== l && r && 0 !== v.length,
w = v.slice();
return w.includes(g) ? void 0 !== b && w.push(b) : w.push(g), t = S && w.length > 1, e =
y.map(function(t) {
return i._renderPopupMenuItem(t, t === g)
}), n.createElement(d.ToolWidgetRowWrap, {
id: h
}, t && w.map(function(t, e) {
return n.createElement(p.ToolWidgetQuickButton, {
icon: a[t],
isActive: S && g === t,
key: e,
hint: m.labels[t],
isFirst: 0 === e,
isLast: e === w.length - 1,
onClick: S ? i._handleSelectStyle : void 0,
onClickArg: t
})
}), n.createElement(u.ToolWidgetMenu, {
arrow: !!t,
content: t ? void 0 : n.createElement(d.ToolWidgetRowWrap, null, n
.createElement(c.Icon, {
icon: a[g]
})),
title: t ? m.barsStyle : m.labels[g],
className: _.menu
}, e))
}, e.prototype._renderPopupMenuItem = function(t, e) {
var i = this.props.isFavoritingAllowed,
o = this._isStyleFavorited(t);
return n.createElement(h.PopupMenuItem, {
key: t,
icon: a[t],
isActive: e,
label: m.labels[t] || "",
onClick: this._handleSelectStyle,
onClickArg: t,
showToolboxOnHover: !o,
toolbox: i && n.createElement(l.FavoriteButton, {
isFilled: o,
onClick: this._handleClickFavorite,
onClickArg: t
})
})
}, e.prototype._handleChangeSettings = function(t) {
this.setState({
lastSelectedNotFavorite: void 0,
favorites: t
})
}, e.prototype._isStyleFavorited = function(t) {
return -1 !== this.state.favorites.indexOf(t)
}, e.prototype._handleAddFavorite = function(t) {
var e = this.state.favorites;
this.context.favoriteChartStylesService.set(e.concat([t]))
}, e.prototype._handleRemoveFavorite = function(t) {
var e = this.state.favorites;
this.context.favoriteChartStylesService.set(e.filter(function(e) {
return e !== t
}))
}, e.contextTypes = {
chartWidgetCollection: r.object.isRequired,
favoriteChartStylesService: r.object.isRequired
}, e
}(n.PureComponent), e.ToolWidgetChartStyles = g
},
function(t, e) {
t.exports = {
icon: "icon-16JOogW_-",
dropped: "dropped-1WSGLaYJ-"
}
},
function(t, e) {
t.exports = {
button: "button-13wlLwhJ-",
hovered: "hovered-FUo4RNOC-",
arrow: "arrow-2pXEy7ej-",
arrowWrap: "arrowWrap-r5l5nQXU-",
isOpened: "isOpened-1939ai3F-"
}
},
function(t, e) {
t.exports = {
wrap: "wrap-18oKCBRc-"
}
},
function(t, e) {
t.exports = {
button: "button-1IIz2ju4-",
first: "first-bfrNico9-",
last: "last-3h-LFsOr-"
}
},
function(t, e) {
t.exports = {
menu: "menu-16FRUKka-"
}
},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c, h;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), i(12), n = i(2), r = i(27), s = i(360), a = i(165), l = i(1031), c = {
compare: window.t("Compare"),
compareOrAddSymbol: window.t("Compare or Add Symbol")
}, h = function(t) {
function e(e, i) {
var o = t.call(this, e, i) || this;
return o._handleClick = function() {
var t = o.context.chartWidgetCollection,
e = new s.AddCompareDialog(t),
i = e.show();
o.setState({
isActive: !0
}), i.on("afterOpen", function() {
return o.setState({
isActive: !0
})
}), i.on("beforeClose", function() {
return o.setState({
isActive: !1
})
})
}, o.state = {
isActive: !1
}, o
}
return o.__extends(e, t), e.prototype.render = function() {
var t = this.state.isActive;
return n.createElement(a.ToolWidgetCollapsibleButton, o.__assign({}, this.props, {
icon: l,
isOpened: t,
onClick: this._handleClick,
text: c.compare,
title: c.compareOrAddSymbol
}))
}, e.contextTypes = {
chartWidgetCollection: r.object.isRequired
}, e
}(n.PureComponent), e.ToolWidgetCompare = h
},
function(t, e) {
t.exports = {
button: "button-YsN2vRuA-",
withText: "withText-JhQdRoPu-",
withoutText: "withoutText-f6SoijeW-"
}
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill="none" stroke="currentColor" transform="translate(2 4)"><path d="M16.5 14.5c0 1.657 0 4 3 4s3-2.343 3-4"/><path stroke-linejoin="round" d="M19.5 9.5l-3 5h6z"/><path d="M.5 14.5c0 1.657 0 4 3 4s3-2.343 3-4"/><path stroke-linejoin="round" d="M3.5 9.5l-3 5h6z"/><path d="M3.5 9.5h6m10 0h-6"/><circle cx="11.5" cy="9.5" r="2"/><path d="M11.5 4.5v3"/><rect width="2" height="4" rx="1" x="10.5" y=".5"/></g></svg>'
},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c, h;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(2), r = i(27), s = i(14), a = i(236), l = i(1034), c = {
hint: window.t("Fullscreen mode")
}, h = function(t) {
function e() {
var e = null !== t && t.apply(this, arguments) || this;
return e._handleClick = function() {
e.context.chartWidgetCollection.startFullscreen()
}, e
}
return o.__extends(e, t), e.prototype.render = function() {
var t = this.props.className;
return n.createElement(a.ToolWidgetIconButton, {
icon: l,
onClick: this._handleClick,
title: c.hint,
className: s(t)
})
}, e.contextTypes = {
chartWidgetCollection: r.object.isRequired
}, e
}(n.PureComponent), e.ToolWidgetFullscreen = h
},
function(t, e) {
t.exports = {
button: "button-2-lC3gh4-"
}
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill="currentColor"><path d="M21 7v4h1V6h-5v1z"/><path d="M16.854 11.854l5-5-.708-.708-5 5zM7 7v4H6V6h5v1z"/><path d="M11.146 11.854l-5-5 .708-.708 5 5zM21 21v-4h1v5h-5v-1z"/><path d="M16.854 16.146l5 5-.708.708-5-5z"/><g><path d="M7 21v-4H6v5h5v-1z"/><path d="M11.146 16.146l-5 5 .708.708 5-5z"/></g></g></svg>'
},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), i(12), n = i(2), r = i(5), s = i(165), a = i(1036), l = {
text: window.t("Indicators"),
hint: r.enabled("study_dialog_fundamentals_economy_addons") ? window.t(
"Indicators, Fundamentals, Economy and Add-ons") : window.t("Indicators")
}, c = function(t) {
function e(e) {
var i = t.call(this, e) || this;
return i._handleClick = function() {
var t = i.props.studyMarket;
i.setState({
isActive: !0
}, function() {
t.isVisible() ? t.hide() : t.show()
})
}, i.state = {
isActive: !1
}, i
}
return o.__extends(e, t), e.prototype.componentDidMount = function() {
this.props.studyMarket.visibilityChanged.subscribe(this, this._setActiveState)
}, e.prototype.componentWillUnmount = function() {
this.props.studyMarket.visibilityChanged.unsubscribe(this, this._setActiveState)
}, e.prototype.render = function() {
var t = this.state.isActive,
e = this.props,
i = e.className,
o = e.displayMode,
r = e.id;
return n.createElement(s.ToolWidgetCollapsibleButton, {
id: r,
displayMode: o,
className: i,
icon: a,
isOpened: t,
onClick: this._handleClick,
text: l.text,
title: l.hint
})
}, e.prototype._setActiveState = function(t) {
this.setState({
isActive: t
})
}, e
}(n.PureComponent), e.ToolWidgetIndicators = c
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><path d="M5.5 18.207l4.65-4.65a1.906 1.906 0 0 1 2.7 0l2.593 2.593a2.906 2.906 0 0 0 4.114 0l4.65-4.65-.707-.707-4.65 4.65a1.906 1.906 0 0 1-2.7 0l-2.593-2.593a2.906 2.906 0 0 0-4.114 0l-4.65 4.65.707.707z"/></svg>'
},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c, h, u, d, p, _, f, m, g, v, y, b, S, w, T;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), i(12), n = i(2), r = i(27), s = i(14), a = i(5), l = i(76), c = i(122), h = i(34), u =
i(369), d = i(235), p = i(109), _ = i(1038), f = i(152), m = i(1040), g = i(1042), v = i(9), y = i(
1045), b = {
openDialog: window.t("Open Interval Dialog"),
timeInterval: window.t("Time Interval")
}, S = function(t) {
var e, i = {
name: c.groupTranslations[h.Interval.SECONDS],
items: []
},
o = {
name: c.groupTranslations[h.Interval.MINUTES],
items: []
},
n = {
name: c.groupTranslations[h.Interval.HOURS],
items: []
},
r = {
name: c.groupTranslations[h.Interval.DAYS],
items: [],
mayOmitSeparator: !0
},
s = {
name: c.groupTranslations[h.Interval.WEEKS],
items: [],
mayOmitSeparator: !0
},
a = {
name: c.groupTranslations[h.Interval.MONTHS],
items: [],
mayOmitSeparator: !0
};
return t.forEach(function(t) {
var e = new h.Interval(t);
e.kind() === h.Interval.HOURS ? n.items.push(t) : e.kind() === h.Interval.MINUTES ?
c.isHour(+e.multiplier()) ? n.items.push(t) : o.items.push(t) : e.kind() === h
.Interval.SECONDS ? i.items.push(t) : e.kind() === h.Interval.DAYS ? r.items
.push(t) : e.kind() === h.Interval.WEEKS ? s.items.push(t) : e.kind() === h
.Interval.MONTHS && a.items.push(t)
}), e = [i, o, n, r, s, a], e.filter(function(t) {
return 0 !== t.items.length
})
}, w = function(t) {
var e = !1;
return t.filter(function(t, i, o) {
var n = !0;
return t.type === f.PopupMenuSeparator && (0 !== i && i !== o.length - 1 || (n = !
1), e && (n = !1)), e = t.type === f.PopupMenuSeparator, n
})
}, T = function(t) {
function e(e, i) {
var o, r, s, h, u, d, p, _ = t.call(this, e, i) || this;
return _._renderIntervalGroup = function(t) {
var e = t.items.map(function(t) {
return _._renderPopupMenuItem(t)
});
return (!t.mayOmitSeparator || t.items.length > 1) && (e.unshift(n.createElement(f
.PopupMenuSeparator, {
key: "begin-" + t.name
})), e.push(n.createElement(f.PopupMenuSeparator, {
key: "end-" + t.name
}))), e
}, _._handleChangeInterval = function(t) {
var e = _.state,
i = e.activeInterval,
o = e.lastNotQuicked,
n = _._getQuicks();
_.setState({
activeInterval: c.normalizeIntervalString(t),
lastNotQuicked: void 0 === i || n.includes(i) ? o : i
})
}, _._handleCloseMenu = function() {
_.setState({
isOpenedFormMenu: !1
})
}, _._handleOpenMenu = function() {
_.setState({
isOpenedFormMenu: !0
})
}, _._bindedForceUpdate = function() {
_.forceUpdate()
}, _._handleSelectInterval = function(t) {
t !== l.interval.value() && l.interval.setValue(t)
}, _._handleClickFavorite = function(t) {
t = v.ensureDefined(t), _._isIntervalFavorite(t) ? _._handleRemoveFavorite(t) : _
._handleAddFavorite(t)
}, _._handleAddFavorite = function(t) {
var e = _.state.favorites;
_.context.favoriteIntervalsService.set(e.concat([t]))
}, _._handleRemoveFavorite = function(t) {
var e = _.state.favorites;
_.context.favoriteIntervalsService.set(e.filter(function(e) {
return e !== t
}))
}, _._handleAddInterval = function(t) {}, _._handleRemoveInterval = function(t) {}, o =
i.chartApiInstance, r = i.favoriteIntervalsService, s = i.customIntervalsService, _
._customIntervals = a.enabled("custom_resolutions_box"), h = l.interval.value(), u =
h && c.normalizeIntervalString(h), d = r.get(), p = void 0 !== s ? s.get() : [], _
._defaultsIntervals = Object.keys(o.defaultResolutions()).map(c
.normalizeIntervalString), _.state = {
isOpenedFormMenu: !1,
activeInterval: u,
favorites: d,
customs: p
}, _
}
return o.__extends(e, t), e.prototype.componentDidMount = function() {
var t = this.context,
e = t.favoriteIntervalsService,
i = t.customIntervalsService;
e.getOnChange().subscribe(this, this._handleChangeFavorites), void 0 !== i && i
.getOnChange().subscribe(this, this._handleChangeCustoms), l.interval.subscribe(this
._handleChangeInterval), l.intraday.subscribe(this._bindedForceUpdate), l
.supportedResolutions.subscribe(this._bindedForceUpdate)
}, e.prototype.componentWillUnmount = function() {
var t = this.context,
e = t.favoriteIntervalsService,
i = t.customIntervalsService;
e.getOnChange().unsubscribe(this, this._handleChangeFavorites), i && i.getOnChange()
.unsubscribe(this, this._handleChangeCustoms), l.interval.unsubscribe(this
._handleChangeInterval), l.intraday.unsubscribe(this._bindedForceUpdate), l
.supportedResolutions.unsubscribe(this._bindedForceUpdate)
}, e.prototype.componentDidUpdate = function(t, e) {
var i = this;
this.state.lastAddedInterval && setTimeout(function() {
return i.setState({
lastAddedInterval: void 0
})
}, 400)
}, e.prototype.render = function() {
var t, e, i, o, r, a, l = this,
h = this.props,
f = h.isShownQuicks,
m = h.id,
g = this.state,
v = g.activeInterval,
S = g.customs,
w = g.isOpenedFormMenu,
T = g.lastNotQuicked,
C = this._defaultsIntervals,
x = this._getQuicks(),
P = c.sortIntervals(x.slice());
return void 0 !== v && P.includes(v) ? void 0 !== T && P.push(T) : void 0 !== v && P
.push(v), t = !(!f || 0 === x.length) || void 0, e = t && P.length > 1, i = {}, o =
c.sortIntervals(C.concat(S).filter(function(t, e, i) {
return i.indexOf(t) === e
})), (void 0 !== v ? o.concat(v) : o).filter(function(t) {
return c.isIntervalAvailable(t)
}).forEach(function(t) {
return i[t] = !0
}), r = this._createMenuItems(o).concat(this._createIntervalForm()), a = void 0 !==
v ? c.getTranslatedModel(v) : null, n.createElement(p.ToolWidgetRowWrap, {
id: m
}, e && P.map(function(t, e) {
var o, r = c.getTranslatedModel(t);
return n.createElement(u.ToolWidgetQuickButton, {
key: e,
className: s(y.button, (o = {}, o[y.first] = 0 === e, o[y
.last] = e === P.length - 1, o)),
text: n.createElement(_.IntervalLabel, {
value: r.mayOmitMultiplier ? void 0 : r
.multiplier,
metric: r.shortKind
}),
hint: r.hint,
isActive: v === t,
isDisabled: !i[t],
onClick: l._handleSelectInterval,
onClickArg: t
})
}), n.createElement(d.ToolWidgetMenu, {
arrow: !!e,
closeOnClickOutside: !w,
content: e || null === a ? void 0 : n.createElement(p
.ToolWidgetRowWrap, {
className: y.menuContent
}, n.createElement(_.IntervalLabel, {
value: a.mayOmitMultiplier ? void 0 : a.multiplier,
metric: a.shortKind
})),
title: e || null === a ? b.timeInterval : a.hint,
className: y.menu
}, n.createElement("div", {
className: y.dropdown
}, r)))
}, e.prototype._createMenuItems = function(t) {
var e, i = S(t).map(this._renderIntervalGroup),
o = (e = []).concat.apply(e, i);
return w(o)
}, e.prototype._createIntervalForm = function() {
return this._customIntervals ? [n.createElement(f.PopupMenuSeparator, {
key: "custom-interval-separator"
}), n.createElement(m.ToolWidgetIntervalsAddForm, {
key: "add-form",
onAdd: this._handleAddInterval,
onCloseMenu: this._handleCloseMenu,
onOpenMenu: this._handleOpenMenu
})] : []
}, e.prototype._handleChangeFavorites = function(t) {
this.setState({
lastNotQuicked: void 0,
favorites: t
})
}, e.prototype._handleChangeCustoms = function(t) {
this.setState({
customs: t
})
}, e.prototype._renderPopupMenuItem = function(t) {
var e = this.props.isFavoritingAllowed,
i = this.state,
o = i.activeInterval,
r = i.lastAddedInterval,
s = t === o,
a = c.isIntervalAvailable(t),
l = this._isIntervalFavorite(t),
h = this._isIntervalDefault(t),
u = c.getTranslatedModel(t);
return n.createElement(g.IntervalMenuItem, {
key: t,
interval: t,
hint: u.hint,
isSignaling: r === t,
isFavoritingAllowed: e,
isDisabled: !a,
isFavorite: l,
isRemovable: !h,
isActive: s,
onClick: this._handleSelectInterval,
onClickRemove: this._handleRemoveInterval,
onClickFavorite: this._handleClickFavorite
})
}, e.prototype._isIntervalDefault = function(t) {
return this._defaultsIntervals.includes(t)
}, e.prototype._isIntervalFavorite = function(t) {
return this.state.favorites.includes(t)
}, e.prototype._getQuicks = function(t) {
var e, i = this;
return this.props.isShownQuicks && "small" !== this.props.displayMode ? (e = void 0 ===
t ? this.state.favorites : t, e.filter(function(t) {
return i._isIntervalDefault(t)
})) : []
}, e.contextTypes = {
chartApiInstance: r.object.isRequired,
favoriteIntervalsService: r.object.isRequired,
customIntervalsService: r.object
}, e
}(n.PureComponent), e.ToolWidgetIntervals = T
},
function(t, e, i) {
"use strict";
function o(t) {
var e, i = t.metric.charAt(0),
o = i.toUpperCase() === i;
return n.createElement("div", {
className: r(s.value, (e = {}, e[s.selected] = t.isSelected, e))
}, t.value, n.createElement("span", {
className: r(s.metric, o && s.capitalized)
}, t.metric))
}
var n, r, s;
Object.defineProperty(e, "__esModule", {
value: !0
}), n = i(2), r = i(14), s = i(1039), e.IntervalLabel = o
},
function(t, e) {
t.exports = {
value: "value-DWZXOdoK-",
selected: "selected-2V87KUXm-",
metric: "metric-uxyW5qk0-",
capitalized: "capitalized-OlFzHeUi-"
}
},
function(t, e, i) {
"use strict";
function o(t, e) {
return Math.max(1, Math.min(t, _[e]))
}
var n, r, s, a, l, c, h, u, d, p, _, f;
Object.defineProperty(e, "__esModule", {
value: !0
}), n = i(0), i(12), r = i(2), s = i(14), a = i(9), l = i(85), c = i(70), h = i(368), u = i(1041),
d = {
add: window.t("Add")
}, p = [{
name: "1",
label: window.t("minutes", {
context: "interval"
})
}, {
name: "60",
label: window.t("hours", {
context: "interval"
})
}, {
name: "D",
label: window.t("days", {
context: "interval"
})
}, {
name: "W",
label: window.t("weeks", {
context: "interval"
})
}, {
name: "M",
label: window.t("months", {
context: "interval"
})
}], _ = {
1: 1440,
60: 24,
D: 364,
W: 52,
M: 12
}, f = function(t) {
function e(e) {
var i = t.call(this, e) || this;
return i._timeMenu = null, i._setMenuRef = function(t) {
i._timeMenu = t
}, i._handleChangeInput = function(t) {
var e = t.currentTarget.value;
/^[0-9]*$/.test(e) && i.setState({
inputValue: e
})
}, i._handleSelectTime = function(t) {
i.setState({
selectedTime: t
}), i._closeMenu()
}, i._handleClickAdd = function() {
var t = i.state,
e = t.inputValue,
n = t.selectedTime,
r = parseInt(e);
r === o(r, n) && i.props.onAdd(isNaN(parseInt(n)) ? r + "" + n : r * +n + "")
}, i._toggleMenu = function() {
i.state.isOpenedMenu ? i._closeMenu() : i._openMenu()
}, i._closeMenu = function() {
i.props.onCloseMenu(), i.setState({
isOpenedMenu: !1
})
}, i._openMenu = function() {
i.props.onOpenMenu(), i.setState({
isOpenedMenu: !0
})
}, i._getMenuPosition = function() {
var t = a.ensureNotNull(i._timeMenu),
e = t.getBoundingClientRect();
return {
overrideWidth: e.width,
x: e.left,
y: e.bottom + 1
}
}, i.state = {
inputValue: "1",
isOpenedMenu: !1,
selectedTime: p[0].name
}, i
}
return n.__extends(e, t), e.prototype.render = function() {
var t, e = this,
i = this.state,
o = i.inputValue,
n = i.isOpenedMenu,
a = i.menuWidth,
_ = i.selectedTime;
return r.createElement("div", {
className: s(u.form, (t = {}, t[u.interacting] = n, t))
}, r.createElement("input", {
className: u.input,
maxLength: 4,
onChange: this._handleChangeInput,
value: o
}), r.createElement("div", {
className: u.menu,
onClick: this._toggleMenu,
ref: this._setMenuRef
}, p.find(function(t) {
return t.name === _
}).label, r.createElement(h.ToolWidgetCaret, {
dropped: n
})), r.createElement("div", {
className: u.add,
onClick: this._handleClickAdd
}, d.add), r.createElement(l.PopupMenu, {
directionHorz: l.DirectionHorz.None,
doNotCloseOn: this,
isOpened: n,
minWidth: a,
onClose: this._closeMenu,
position: this._getMenuPosition
}, p.map(function(t) {
return r.createElement(c.PopupMenuItem, {
dontClosePopup: !0,
key: t.name,
label: t.label,
onClick: e._handleSelectTime,
onClickArg: t.name
})
})))
}, e
}(r.PureComponent), e.ToolWidgetIntervalsAddForm = f
},
function(t, e) {
t.exports = {
form: "form-2itceCqS-",
interacting: "interacting-3joY26dg-",
input: "input-z46tLQgj-",
menu: "menu-35lWsSKr-",
add: "add-1NrfSAvb-",
hovered: "hovered-1nwOcWv8-",
wrap: "wrap-1oB2WI2R-"
}
},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), i(43), n = i(2), r = i(70), s = i(370), a = i(153), l = function(t) {
function e(e) {
var i = t.call(this, e) || this;
return i._handleMouseEnter = function() {
i.setState({
isHovered: !0
})
}, i._handleMouseLeave = function() {
i.setState({
isHovered: !1
})
}, i.state = {
isHovered: !1
}, i
}
return o.__extends(e, t), e.prototype.render = function() {
var t = this.props,
e = t.interval,
i = t.hint,
o = t.isActive,
s = t.isDisabled,
a = t.isFavorite,
l = t.isSignaling,
c = t.onClick;
return n.createElement("div", {
onMouseEnter: this._handleMouseEnter,
onMouseLeave: this._handleMouseLeave
}, n.createElement(r.PopupMenuItem, {
isActive: o,
isDisabled: s,
isHovered: l,
onClick: c,
onClickArg: e,
toolbox: this._toolbox(),
showToolboxOnHover: !a,
label: i
}))
}, e.prototype._toolbox = function() {
var t = this.props,
e = t.interval,
i = t.isDisabled,
o = t.isFavorite,
r = t.isRemovable,
l = t.isFavoritingAllowed,
c = t.onClickFavorite,
h = t.onClickRemove,
u = this.state.isHovered,
d = n.createElement(s.RemoveButton, {
key: "remove",
hidden: !Modernizr.touch && !u,
onClick: h,
onClickArg: e
}),
p = n.createElement(a.FavoriteButton, {
key: "favorite",
isFilled: o,
onClick: c,
onClickArg: e
});
return [r && d, !i && l && p]
}, e
}(n.PureComponent), e.IntervalMenuItem = l
},
function(t, e) {
t.exports = {
button: "button-1scLo53s-",
hidden: "hidden-2GRQzIQ1-"
}
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 11 11" width="11" height="11"><path fill="none" stroke="currentColor" d="M1 1l9 9m0-9l-9 9"/></svg>'
},
function(t, e) {
t.exports = {
interval: "interval-1GDsfL5i-",
showGroup: "showGroup-1N6m7h-N-",
button: "button-1XkSWU32-",
first: "first-2UbSFGzF-",
last: "last-1rdUnwE6-",
menu: "menu-1fA401bY-",
dropdown: "dropdown-1zOBoqnG-",
menuContent: "menuContent-1vyIDg3J-"
}
},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c, h, u;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), i(12), n = i(2), r = i(27), s = i(14), a = i(236), l = i(1047), c = i(1048), h = {
hint: window.t("Open chart in popup")
}, u = function(t) {
function e() {
var e = null !== t && t.apply(this, arguments) || this;
return e._handleClick = function() {
var t = e.context,
i = t.chartWidgetCollection,
o = t.windowMessageService,
n = t.isFundamental,
r = i.activeChartWidget.value();
r.withModel(null, function() {
o.post(parent, "openChartInPopup", {
symbol: r.model().mainSeries().actualSymbol(),
interval: r.model().mainSeries().interval(),
fundamental: n
})
})
}, e
}
return o.__extends(e, t), e.prototype.render = function() {
var t = this.props.className;
return n.createElement(a.ToolWidgetIconButton, {
className: s(t, l.button),
icon: c,
onClick: this._handleClick,
title: h.hint
})
}, e.contextTypes = {
isFundamental: r.bool,
chartWidgetCollection: r.object.isRequired,
windowMessageService: r.object.isRequired
}, e
}(n.PureComponent), e.ToolWidgetOpenPopup = u
},
function(t, e) {
t.exports = {
button: "button-3wAyKO3i-"
}
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 21 21" width="21" height="21"><g fill="none" stroke="currentColor"><path d="M18.5 11v5.5a2 2 0 0 1-2 2h-13a2 2 0 0 1-2-2v-13a2 2 0 0 1 2-2H9"/><path stroke-linecap="square" d="M18 2l-8.5 8.5m4-9h5v5"/></g></svg>'
},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(2), r = i(27), s = i(236), a = i(1050), l = {
hint: window.t("Chart Properties")
}, c = function(t) {
function e(e) {
var i = t.call(this, e) || this;
return i._handleClick = function() {
var t = i.context.chartWidgetCollection;
i.setState({
isActive: !0
}), setTimeout(function() {
return t.activeChartWidget.value().showChartProperties().then(i
._resolveDialogState)
}, 0)
}, i._resolveDialogState = function(t) {
null !== t ? (i.setState({
isActive: !0
}), t.on("destroy", function() {
return i.setState({
isActive: !1
})
})) : i.setState({
isActive: !1
})
}, i.state = {
isActive: !1
}, i
}
return o.__extends(e, t), e.prototype.render = function() {
var t = this.state.isActive;
return n.createElement(s.ToolWidgetIconButton, o.__assign({}, this.props, {
icon: a,
title: l.hint,
onClick: this._handleClick,
isOpened: t
}))
}, e.contextTypes = {
chartWidgetCollection: r.object.isRequired
}, e
}(n.PureComponent), e.ToolWidgetProperties = c
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><g fill="currentColor" fill-rule="evenodd"><path fill-rule="nonzero" d="M14 17a3 3 0 1 1 0-6 3 3 0 0 1 0 6zm0-1a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"/><path d="M5.005 16A1.003 1.003 0 0 1 4 14.992v-1.984A.998.998 0 0 1 5 12h1.252a7.87 7.87 0 0 1 .853-2.06l-.919-.925c-.356-.397-.348-1 .03-1.379l1.42-1.42a1 1 0 0 1 1.416.007l.889.882A7.96 7.96 0 0 1 12 6.253V5c0-.514.46-1 1-1h2c.557 0 1 .44 1 1v1.253a7.96 7.96 0 0 1 2.06.852l.888-.882a1 1 0 0 1 1.416-.006l1.42 1.42a.999.999 0 0 1 .029 1.377s-.4.406-.918.926a7.87 7.87 0 0 1 .853 2.06H23c.557 0 1 .447 1 1.008v1.984A.998.998 0 0 1 23 16h-1.252a7.87 7.87 0 0 1-.853 2.06l.882.888a1 1 0 0 1 .006 1.416l-1.42 1.42a1 1 0 0 1-1.415-.007l-.889-.882a7.96 7.96 0 0 1-2.059.852v1.248c0 .56-.45 1.005-1.008 1.005h-1.984A1.004 1.004 0 0 1 12 22.995v-1.248a7.96 7.96 0 0 1-2.06-.852l-.888.882a1 1 0 0 1-1.416.006l-1.42-1.42a1 1 0 0 1 .007-1.415l.882-.888A7.87 7.87 0 0 1 6.252 16H5.005zm3.378-6.193l-.227.34A6.884 6.884 0 0 0 7.14 12.6l-.082.4H5.005C5.002 13 5 13.664 5 14.992c0 .005.686.008 2.058.008l.082.4c.18.883.52 1.71 1.016 2.453l.227.34-1.45 1.46c-.004.003.466.477 1.41 1.422l1.464-1.458.34.227a6.959 6.959 0 0 0 2.454 1.016l.399.083v2.052c0 .003.664.005 1.992.005.005 0 .008-.686.008-2.057l.399-.083a6.959 6.959 0 0 0 2.454-1.016l.34-.227 1.46 1.45c.003.004.477-.466 1.422-1.41l-1.458-1.464.227-.34A6.884 6.884 0 0 0 20.86 15.4l.082-.4h2.053c.003 0 .005-.664.005-1.992 0-.005-.686-.008-2.058-.008l-.082-.4a6.884 6.884 0 0 0-1.016-2.453l-.227-.34 1.376-1.384.081-.082-1.416-1.416-1.465 1.458-.34-.227a6.959 6.959 0 0 0-2.454-1.016L15 7.057V5c0-.003-.664-.003-1.992 0-.005 0-.008.686-.008 2.057l-.399.083a6.959 6.959 0 0 0-2.454 1.016l-.34.227-1.46-1.45c-.003-.004-.477.466-1.421 1.408l1.457 1.466z"/></g></svg>'
},
function(t, e, i) {
"use strict";
function o(t, e) {
a.enabled("saveload_requires_authentication") ? window.runOrSignIn(t, e) : t()
}
var n, r, s, a, l, c, h, u;
Object.defineProperty(e, "__esModule", {
value: !0
}), n = i(0), i(13), r = i(2), s = i(27), a = i(5), l = i(121), c = i(1052), h = 6e4, u = function(
e) {
function u(r, s) {
var a, l, c = e.call(this, r, s) || this;
return c._syncState = function(t) {
c.setState(t)
}, c._onChangeHasChanges = function(t) {
c.setState({
wasChanges: t
}), t ? c._restartAutosave() : c._stopAutosave()
}, c._onChangeTitle = function(t) {
c.setState({
title: t
})
}, c._onChangeId = function(t) {
c.setState({
id: t
})
}, c._onChartAboutToBeSaved = function() {
c.setState({
isProcessing: !0
})
}, c._onChartSaved = function() {
c.setState({
isProcessing: !1
})
}, c._handleClickSave = function() {
var t = c.state,
e = t.wasChanges,
i = t.isProcessing,
n = t.isAuthenticated,
r = t.id;
n && (i || !e && r) || o(r ? c._saveExistentChart : c._saveNewChart, {
source: "Save chart",
sourceMeta: "Chart"
})
}, c._handleClickClone = function() {
c._cloneChart()
}, c._handleClickSaveAs = function() {
o(c._cloneChart, {
source: "Clone chart"
})
}, c._handleClickLoad = function() {
o(c._loadChart, {
source: "Load chart",
sourceMeta: "Chart"
})
}, c._loadChart = function() {
i.e(10).then(function(e) {
(function(t) {
new(i(1193).LoadChartService)(c.context.chartWidgetCollection)
.showLoadDialog()
}).call(this, i(42)(t))
}.bind(null, i)).catch(i.oe)
}, c._handleHotkey = function(t) {
return !t.ctrlKey && (!(46 !== t.which || !$(t.target).is("body")) && (c
._loadChart(), t.preventDefault(), t.stopPropagation(), !0))
}, c._handleClickRename = function() {
o(c._renameChart, {
source: "Rename chart"
})
}, c._renameChart = function() {
return n.__awaiter(c, void 0, void 0, function() {
var t;
return n.__generator(this, function(e) {
switch (e.label) {
case 0:
return [4, this._createSaveService()];
case 1:
return t = e.sent(), t.tryRenameChart(), [2]
}
})
})
}, c._cloneChart = function() {
return n.__awaiter(c, void 0, void 0, function() {
var t;
return n.__generator(this, function(e) {
switch (e.label) {
case 0:
return [4, this._createSaveService()];
case 1:
return t = e.sent(), t.tryCloneChart(), [2]
}
})
})
}, c._saveExistentChart = function() {
return n.__awaiter(c, void 0, void 0, function() {
var t;
return n.__generator(this, function(e) {
switch (e.label) {
case 0:
return [4, this._createSaveService()];
case 1:
return t = e.sent(), t.trySaveExistentChart(), [2]
}
})
})
}, c._saveNewChart = function() {
return n.__awaiter(c, void 0, void 0, function() {
var t;
return n.__generator(this, function(e) {
switch (e.label) {
case 0:
return [4, this._createSaveService()];
case 1:
return t = e.sent(), t.trySaveNewChart(), [2]
}
})
})
}, a = s.chartWidgetCollection, l = s.chartChangesWatcher, c.state = {
isAuthenticated: window.is_authenticated,
isProcessing: !1,
id: a.metaInfo.id.value(),
title: a.metaInfo.name.value(),
wasChanges: l.hasChanges(),
iconHovered: !1
}, c
}
return n.__extends(u, e), u.prototype.componentDidMount = function() {
var t = this.props,
e = t.chartSaver,
i = t.isFake,
o = t.stateSyncEmitter,
n = this.context,
r = n.chartWidgetCollection,
s = n.chartChangesWatcher;
i ? o.on("change", this._syncState) : (s.getOnChange().subscribe(this, this
._onChangeHasChanges), r.metaInfo.name.subscribe(this._onChangeTitle), r
.metaInfo.id.subscribe(this._onChangeId), l.registerListener(
"LoadChartDialogHotkey", this._handleHotkey), e.chartSaved().subscribe(this,
this._onChartSaved), e.chartAboutToBeSaved().subscribe(this, this
._onChartAboutToBeSaved), window.loginStateChange.subscribe(this, this
._onLoginStateChange))
}, u.prototype.componentDidUpdate = function(t, e) {
this.props.isFake || e !== this.state && this.props.stateSyncEmitter.emit("change", this
.state)
}, u.prototype.componentWillUnmount = function() {
var t = this.props,
e = t.chartSaver,
i = t.isFake,
o = t.stateSyncEmitter,
n = this.context,
r = n.chartWidgetCollection,
s = n.chartChangesWatcher;
i ? o.off("change", this._syncState) : (s.getOnChange().unsubscribe(this, this
._onChangeHasChanges), r.metaInfo.name.unsubscribe(this._onChangeTitle), r
.metaInfo.id.unsubscribe(this._onChangeId), l.removeListener(
"LoadChartDialogHotkey"), e.chartSaved().unsubscribe(this, this
._onChartSaved),
e.chartAboutToBeSaved().unsubscribe(this, this._onChartAboutToBeSaved), window
.loginStateChange.unsubscribe(this, this._onLoginStateChange))
}, u.prototype.render = function() {
var t = this.props,
e = t.isReadOnly,
i = t.displayMode,
o = t.id,
s = this.state,
a = s.isProcessing,
l = s.isAuthenticated,
h = s.title,
u = s.id,
d = s.wasChanges,
p = {
onCloneChart: this._handleClickClone,
onSaveChart: this._handleClickSave,
onRenameChart: this._handleClickRename,
onSaveAsChart: this._handleClickSaveAs,
onLoadChart: this._handleClickLoad
};
return r.createElement(c.ToolWidgetSaveLoadView, n.__assign({
displayMode: i,
isReadOnly: e,
isAuthenticated: l,
isProcessing: a,
wasChanges: d,
title: h,
id: o,
chartId: u
}, p))
}, u.prototype._onLoginStateChange = function() {
this.setState({
isAuthenticated: window.is_authenticated
})
}, u.prototype._stopAutosave = function() {
this._autosaveTimer && (clearTimeout(this._autosaveTimer), this._autosaveTimer = 0)
}, u.prototype._restartAutosave = function() {
var t, e = this;
a.enabled("charts_auto_save") && (this._stopAutosave(), t = this.context
.chartWidgetCollection, this._autosaveTimer = setTimeout(function() {
t.metaInfo.id.value() && e._saveExistentChart()
}, h))
}, u.prototype._createSaveService = function() {
var e = this;
return new Promise(function(o) {
i.e(13).then(function(n) {
(function(t) {
var t = i(1194);
o(new t.SaveAsService(e.context.chartWidgetCollection, e
.props.chartSaver))
}).call(this, i(42)(t))
}.bind(null, i)).catch(i.oe)
})
}, u.contextTypes = {
chartWidgetCollection: s.object.isRequired,
chartChangesWatcher: s.object.isRequired
}, u
}(r.PureComponent), e.ToolWidgetSaveLoad = u
},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c, h, u, d, p, _, f, m, g, v, y, b;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), i(12), n = i(2), r = i(14), s = i(70), a = i(152), l = i(109), c = i(235), h = i(165),
u = i(1053), d = i(1055), p = i(149), _ = i(1056), f = i(237), m = f.weakComposeClasses(p, _), g = o
.__assign({}, p, m), v = {
copy: window.t("Copy"),
makeCopy: window.t("Make a Copy"),
newChartLayout: window.t("New Chart Layout"),
loadChartLayout: window.t("Load Chart Layout..."),
rename: window.t("Rename..."),
renameChartLayout: window.t("Rename Chart Layout"),
saveAs: window.t("Make a Copy..."),
saveChartLayout: window.t("Save"),
saveChartLayoutLong: window.t(
"Save Chart Layout saves not just some particular chart, it saves all charts for all symbols and intervals which you are modifying while working with this Layout"
)
}, y = [], b = function(t) {
function e(e) {
var i = t.call(this, e) || this;
return i._handleSaveHoverBegin = function() {
i.setState({
iconHovered: !0
})
}, i._handleSaveHoverEnd = function() {
i.setState({
iconHovered: !1
})
}, i.state = {
iconHovered: !1
}, i
}
return o.__extends(e, t), e.prototype.render = function() {
var t = this.props,
e = t.id,
i = t.isReadOnly,
o = t.displayMode,
s = t.isProcessing,
a = t.title,
p = t.chartId,
_ = t.wasChanges,
f = t.onCloneChart,
m = t.onSaveChart,
b = t.hideMenu,
S = this.state.iconHovered,
w = !i && !b,
T = "saved";
return !_ && a || (T = "unsaved"), s && (T = "saving"), n.createElement(l
.ToolWidgetRowWrap, null, i ? n.createElement(l.ToolWidgetRowWrap, null, n
.createElement(h.ToolWidgetCollapsibleButton, {
id: e,
displayMode: o,
icon: n.createElement(u.CloudSpinner, {
size: 28,
state: "unsaved",
isHovered: S
}),
isDisabled: s,
onClick: f,
text: v.copy,
title: v.makeCopy,
onMouseEnter: this._handleSaveHoverBegin,
onMouseLeave: this._handleSaveHoverEnd,
collapseWhen: y
})) : n.createElement(l.ToolWidgetRowWrap, null, n.createElement(h
.ToolWidgetCollapsibleButton, {
id: e,
displayMode: o,
icon: n.createElement(u.CloudSpinner, {
size: 28,
state: T,
isHovered: S
}),
isDisabled: p && !_ || s,
onClick: m,
text: a || v.saveChartLayout,
title: v.saveChartLayoutLong,
onMouseEnter: this._handleSaveHoverBegin,
onMouseLeave: this._handleSaveHoverEnd,
theme: g,
collapseWhen: y
}), w && n.createElement(c.ToolWidgetMenu, {
className: r(d.menu, "js-save-load-menu-open-button"),
arrow: !0
}, this._renderMenuItems())))
}, e.prototype._renderMenuItems = function() {
var t = this.props,
e = t.wasChanges,
i = t.isProcessing,
o = t.chartId,
r = t.onSaveChart,
l = t.onRenameChart,
c = t.onSaveAsChart,
h = t.onLoadChart,
u = [n.createElement(s.PopupMenuItem, {
key: "save",
isDisabled: !!(i || !e && o),
label: v.saveChartLayout,
onClick: r
})];
return o && u.push.apply(u, [n.createElement(a.PopupMenuSeparator, {
key: "existing-chart-section-begin"
}), n.createElement(s.PopupMenuItem, {
key: "rename",
label: v.rename,
onClick: l
}), n.createElement(s.PopupMenuItem, {
key: "save-as",
label: v.saveAs,
onClick: c
})]), u.push.apply(u, [n.createElement(a.PopupMenuSeparator, {
key: "platform-section-begin"
}), n.createElement(s.PopupMenuItem, {
key: "load-chart",
className: "js-save-load-menu-item-load-chart",
label: v.loadChartLayout,
onClick: h
})]), u
}, e
}(n.PureComponent), e.ToolWidgetSaveLoadView = b
},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c, h, u, d, p, _, f, m;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(2), r = i(150), s = i(31), a = i(14), l = i(1054), c =
"M21.5 21.5h-14a5 5 0 1 1 .42-9.983 7.5 7.5 0 0 1 14.57 2.106 4.002 4.002 0 0 1-.99 7.877z", h =
62.332908630371094, u = .8 * h, d = .21 * h, p = .79 * h, _ = {
strokeDashOffset: p,
strokeDash: u,
strokeGap: d,
strokeDashCheck: 0
}, f = {
strokeDashOffset: d + u,
strokeGap: 0,
strokeDash: u + d,
strokeDashCheck: 200
}, m = function(t) {
function e(e) {
var i = t.call(this, e) || this;
return i.state = _, i
}
return o.__extends(e, t), e.prototype.componentDidMount = function() {
"saved" === this.props.state ? this.setState(f) : this._goToNextState(this.props.state)
}, e.prototype.componentWillReceiveProps = function(t) {
this.props.state !== t.state && this._goToNextState(t.state)
}, e.prototype.render = function() {
var t, e = this.state,
i = e.strokeDashOffset,
o = e.strokeDash,
r = e.strokeGap,
s = e.strokeDashCheck,
h = this.props,
u = h.className,
d = h.size,
p = h.onClick,
_ = h.state,
f = h.isHovered,
m = void 0 !== f && f,
g = a(l.container, u, m && l.hovered, (t = {}, t[l.unsaved] = "unsaved" === _, t[l
.saving] = "saving" === _, t[l.saved] = "saved" === _, t));
return n.createElement("svg", {
xmlns: "http://www.w3.org/2000/svg",
className: g,
version: "1.1",
width: d,
height: d,
viewBox: "0 0 28 28",
onClick: p
}, n.createElement("g", {
fill: "none"
}, n.createElement("path", {
className: l.dottedCloud,
stroke: "currentColor",
strokeDasharray: "3.5,2.5",
d: c
}), n.createElement("path", {
className: l.spinningCloud,
stroke: "currentColor",
strokeDasharray: o + " " + r,
strokeDashoffset: i,
d: c
}), n.createElement("path", {
className: l.arrowGap,
d: "M11 20h6v5h-6z"
}), n.createElement("g", {
className: l.arrow,
stroke: "currentColor"
}, n.createElement("path", {
strokeLinecap: "square",
d: "M14.5 14.5v10"
}), n.createElement("path", {
d: "M11 17l3.5-3.5L18 17"
})), n.createElement("g", {
className: l.check,
stroke: "currentColor"
}, n.createElement("path", {
strokeDasharray: s + "% " + (200 - s) + "%",
d: "M10 15l2.5 2.5L18 12"
}))))
}, e.prototype._goToNextState = function(t) {
var e = this;
switch (t) {
case "unsaved":
this.setState(_);
break;
case "saving":
"unsaved" !== this.props.state && this.setState(_), this._currentAnimation =
Promise.resolve(this._currentAnimation).then(function() {
return e._createSpinAnimationWhile(function() {
return "saving" === e.props.state
})
});
break;
case "saved":
this._currentAnimation = Promise.resolve(this._currentAnimation).then(this
._createFillGapAnimation.bind(this)).then(this._createCheckAnimation
.bind(this))
}
}, e.prototype._createSpinAnimationWhile = function(t) {
var e = this;
return this._createSpinAnimation().then(function() {
return t() ? e._createSpinAnimationWhile(t) : Promise.resolve()
})
}, e.prototype._createSpinAnimation = function() {
var t = this;
return new Promise(function(e) {
r.doAnimate({
onStep: function(e, i) {
t.setState({
strokeDashOffset: i
})
},
onComplete: function() {
return e()
},
from: p,
to: p + h,
easing: s.easingFunc.linear,
duration: 1e3
})
})
}, e.prototype._createCheckAnimation = function() {
var t = this;
return new Promise(function(e) {
r.doAnimate({
onStep: function(e, i) {
t.setState({
strokeDashCheck: Math.round(i)
})
},
onComplete: function() {
return e()
},
from: 0,
to: 200,
easing: s.easingFunc.linear,
duration: 1e3
})
})
}, e.prototype._createFillGapAnimation = function() {
var t = this;
return new Promise(function(e) {
r.doAnimate({
onStep: function(e, i) {
t.setState({
strokeDashOffset: d + u - i,
strokeGap: i,
strokeDash: u + d - i
})
},
onComplete: function() {
return e()
},
from: d,
to: 0,
easing: s.easingFunc.linear,
duration: 200
})
})
}, e
}(n.PureComponent), e.CloudSpinner = m
},
function(t, e) {
t.exports = {
dottedCloud: "dottedCloud-1Vw3lVny-",
check: "check-3V48_rMp-",
spinningCloud: "spinningCloud-2fkbB-rw-",
arrow: "arrow-1zkKEROH-",
arrowGap: "arrowGap-gjAe6jEn-",
container: "container-riYIb01a-",
unsaved: "unsaved-2Kg_w3Vw-",
hovered: "hovered-18DzoW0E-",
saving: "saving-31YVVfHU-",
saved: "saved-2kLd4nmd-"
}
},
function(t, e) {
t.exports = {
menu: "menu-92vrwS4x-",
opened: "opened-GQFVkrpV-"
}
},
function(t, e) {
t.exports = {
button: "button-1EU5-JL7-",
isDisabled: "isDisabled-1RjJSnJ7-",
text: "text-1HWeUAzA-"
}
},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c, h, u, d, p, _, f, m, g;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(2), r = i(27), s = i(14), a = i(5), l = i(23), c = i(103), h = i(149), u = i(
1058), d = i(1059), p = i(237), _ = p.weakComposeClasses(h, u), f = o.__assign({}, h, _), m = {
takeSnapshot: window.t(
"Take instant snapshot of your chart. No more Paint or other editors to save screenshots – simply click the button and copy the link of the picture."
)
}, g = function(t) {
function e(e, i) {
var o = t.call(this, e, i) || this;
return o._handleClick = function() {
if (!a.enabled("show_dialog_on_snapshot_ready")) {
if (o.state.isProcessing) return;
o.setState({
isProcessing: !0
}), l.subscribe("onScreenshotReady", function() {
return o.setState({
isProcessing: !1
})
}, null, !0)
}
o.context.chartWidgetCollection.takeScreenshot()
}, o.state = {
isProcessing: !1
}, o
}
return o.__extends(e, t), e.prototype.render = function() {
var t = this.props,
e = t.className,
i = t.color;
return n.createElement(c.ToolWidgetButton, {
icon: d,
isDisabled: this.state.isProcessing,
onClick: this._handleClick,
title: m.takeSnapshot,
theme: f,
className: s(e, i && f[i])
})
}, e.contextTypes = {
chartWidgetCollection: r.object.isRequired
}, e
}(n.PureComponent), e.ToolWidgetScreenshot = g
},
function(t, e) {
t.exports = {
button: "button-3zsRYmii-",
blue: "blue-pwiZpV6t-",
green: "green-3Nv9iVIZ-",
isInteractive: "isInteractive-12fBlRGf-",
hovered: "hovered-Kk1N76Nt-"
}
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 21 17" width="21" height="17"><g fill="none" stroke="currentColor"><path d="M2.5 2.5h3.691a.5.5 0 0 0 .447-.276l.586-1.171A1 1 0 0 1 8.118.5h4.764a1 1 0 0 1 .894.553l.586 1.17a.5.5 0 0 0 .447.277H18.5a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-16a2 2 0 0 1-2-2v-10a2 2 0 0 1 2-2z"/><circle cx="10.5" cy="9.5" r="4"/></g></svg>'
},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(2), r = i(14), s = i(71), a = i(9), l = i(1061), c = function(t) {
function e() {
var e = null !== t && t.apply(this, arguments) || this;
return e._actions = null, e._input = null, e._preventDefault = function(t) {
t.preventDefault()
}, e
}
return o.__extends(e, t), e.prototype.componentDidMount = function() {
var t = a.ensureNotNull(this._input);
s.bindToInput(t, {
spreadActions: this._actions || void 0,
syncWithChartWidget: !0,
syncOnBlur: !0
}), null !== this._actions && Array.from(this._actions.querySelectorAll("button"))
.forEach(function(t) {
return t.tabIndex = -1
})
}, e.prototype.render = function() {
var t, e = this,
i = this.props,
o = i.isActionsVisible,
a = i.isExpanded,
c = i.onFocus,
h = i.onBlur,
u = i.id;
return n.createElement("div", {
id: u,
className: l.wrap
}, n.createElement("div", {
className: r(l.inner, (t = {}, t[l.isExpanded] = a, t))
}, n.createElement("input", {
className: l.input,
maxLength: 1e3,
onBlur: h,
onFocus: c,
ref: function(t) {
return e._input = t
},
type: "text",
tabIndex: -1
}), s.canShowSpreadActions() && o && n.createElement("div", {
className: l.actions,
onMouseDown: this._preventDefault,
ref: function(t) {
return e._actions = t
}
})))
}, e
}(n.PureComponent), e.ToolWidgetSymbolSearch = c
},
function(t, e) {
t.exports = {
wrap: "wrap-CUt4Mg1V-",
inner: "inner-32OP7ejC-",
actions: "actions-1cGPn1dW-",
input: "input-3lfOzLDc-",
isExpanded: "isExpanded-1pdStI5Z-"
}
},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c, h, u, d, p, _, f, m, g, v;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(2), r = i(27), s = i(39), a = i(14), l = i(85), c = i(152), h = i(1063), u = i(
1066), d = i(1067), p = i(109), _ = i(165), f = i(1069), m = i(1070), g = {
title: window.t("Templates"),
tooltip: window.t("Study Templates")
}, v = function(t) {
function e(e, i) {
var o, n, r, a, l = t.call(this, e) || this;
return l._handleFavorTemplate = function(t) {
if (l.props.isShownQuicks) {
var e = t.name;
l._isTemplateFavorite(e) ? l._removeFavoriteTemplate(e) : l
._addFavoriteTemplate(e)
}
}, l._handleSaveTemplate = function() {
l.context.studyTemplates.showSaveAsDialog()
}, l._handleApplyTemplate = function(t) {
l._handleClose(), l.context.studyTemplates.applyTemplate(t.name)
}, l._handleRemoveTemplate = function(t) {
l._handleClose(), l.context.studyTemplates.deleteStudyTemplate(t.name)
},
l._handleClose = function() {
l._handleToggleDropdown(!1)
}, l._handleClick = function(t) {
t.stopPropagation(), l._handleToggleDropdown()
}, l._handleToggleDropdown = function(t) {
var e = l.state.isActive,
i = "boolean" == typeof t ? t : !e;
l.setState({
isActive: i
})
}, l._getDropdownPosition = function() {
var t = s.findDOMNode(l._wrapControl).getBoundingClientRect();
return {
x: t.left,
y: t.bottom + 2
}
}, l._getWrapRef = function(t) {
return l._wrapControl = t
}, l._syncStateChange = function(t) {
l.setState(t)
}, o = i.favoriteStudyTemplatesService, n = i.studyTemplates, r = void 0 !== o ? o
.get() : [], a = n.list(), l.state = {
isActive: !1,
studyTemplatesList: a,
favorites: r
}, l
}
return o.__extends(e, t), e.prototype.componentDidMount = function() {
if (this.props.isFake) this.props.stateSyncEmitter.on("change", this._syncStateChange);
else {
var t = this.context,
e = t.favoriteStudyTemplatesService,
i = t.studyTemplates;
i.getOnChange().subscribe(this, this._handleTemplatesChange), i
.refreshStudyTemplateList(), void 0 !== e && e.getOnChange().subscribe(this,
this._handleFavoritesChange)
}
}, e.prototype.componentWillUnmount = function() {
if (this.props.isFake) this.props.stateSyncEmitter.off("change", this._syncStateChange);
else {
var t = this.context,
e = t.favoriteStudyTemplatesService;
t.studyTemplates.getOnChange().unsubscribe(this, this._handleTemplatesChange),
void 0 !== e && e.getOnChange().unsubscribe(this, this._handleFavoritesChange)
}
}, e.prototype.componentDidUpdate = function(t, e) {
this.props.isFake || e === this.state || this.props.stateSyncEmitter.emit("change", {
favorites: this.state.favorites,
studyTemplatesList: this.state.studyTemplatesList
})
}, e.prototype.render = function() {
var t, e = this.state,
i = e.isActive,
o = e.studyTemplatesList,
r = e.favorites,
s = this.props,
u = s.isShownQuicks,
d = s.className,
v = s.displayMode,
y = s.id,
b = o.filter(function(t) {
return r.includes(t.name)
}),
S = "small" !== v && u && b.length > 0,
w = a(d, m.wrap, i && m.opened, (t = {}, t[m.full] = "full" === v, t[m.medium] =
"medium" === v, t));
return n.createElement(p.ToolWidgetRowWrap, {
id: y,
className: w,
onClick: this._handleClick,
ref: this._getWrapRef
}, n.createElement(_.ToolWidgetCollapsibleButton, {
displayMode: v,
icon: f,
text: g.title,
title: g.tooltip,
onClick: this._handleClick
}), S && this._renderQuicks(b), n.createElement(l.PopupMenu, {
closeOnClickOutside: !0,
doNotCloseOn: this,
isOpened: i,
onClose: this._handleClose,
position: this._getDropdownPosition
}, n.createElement(h.SaveIndicatorMenuItem, {
onClick: this._handleSaveTemplate
}), o.length > 0 && n.createElement(c.PopupMenuSeparator, null), this
._renderMenuItems()))
}, e.prototype._renderQuicks = function(t) {
var e = this;
return t.map(function(t, i, o) {
return n.createElement(d.FavoriteStudyTemplateItem, {
key: t.name,
item: t,
onApply: e._handleApplyTemplate,
className: a((r = {}, r[m.first] = 0 === i, r[m.last] = i === o
.length - 1, r))
});
var r
})
}, e.prototype._renderMenuItems = function() {
var t = this,
e = this.state.studyTemplatesList,
i = this.props.isFavoritingAllowed;
return e.map(function(e) {
return n.createElement(u.StudyTemplateListItem, {
key: e.name,
item: e,
isFavoritingAllowed: i,
favorite: t._isTemplateFavorite(e.name),
onApply: t._handleApplyTemplate,
onFavor: t._handleFavorTemplate,
onRemove: t._handleRemoveTemplate
})
})
},
e.prototype._handleTemplatesChange = function() {
this.setState({
studyTemplatesList: this.context.studyTemplates.list()
})
}, e.prototype._handleFavoritesChange = function(t) {
this.props.isShownQuicks && this.setState({
favorites: t
})
}, e.prototype._removeFavoriteTemplate = function(t) {
var e, i = this.context.favoriteStudyTemplatesService;
void 0 !== i && (e = this.state.favorites, i.set(e.filter(function(e) {
return e !== t
})))
}, e.prototype._addFavoriteTemplate = function(t) {
var e, i = this.context.favoriteStudyTemplatesService;
void 0 !== i && (e = this.state.favorites, i.set(e.concat([t])))
}, e.prototype._isTemplateFavorite = function(t) {
return this.state.favorites.includes(t)
}, e.contextTypes = {
favoriteStudyTemplatesService: r.object,
studyTemplates: r.object.isRequired
}, e
}(n.PureComponent), e.ToolWidgetTemplates = v
},
function(t, e, i) {
"use strict";
function o(t) {
return n.createElement(r.PopupMenuItem, {
label: n.createElement("div", {
className: a.label
}, n.createElement(s.Icon, {
className: a.icon,
icon: l
}), n.createElement("div", {
className: a.text
}, c.text)),
onClick: t.onClick
})
}
var n, r, s, a, l, c;
Object.defineProperty(e, "__esModule", {
value: !0
}), n = i(2), r = i(70), s = i(59), a = i(1064), l = i(1065), c = {
text: window.t("Save Indicator Template...")
}, e.SaveIndicatorMenuItem = o
},
function(t, e) {
t.exports = {
label: "label-1LxfyrID-",
icon: "icon-3bTRbX0U-",
text: "text-2BJe_3ce-"
}
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 17 14" width="17" height="14"><path d="M1 9v1.5A2.5 2.5 0 0 0 3.5 13h10a2.5 2.5 0 0 0 2.5-2.5V9h-1v1.5a1.5 1.5 0 0 1-1.5 1.5h-10A1.5 1.5 0 0 1 2 10.5V9H1z"/><path fill-rule="evenodd" d="M8 1h1v8H8z"/><path d="M5.354 5.646l-.708.708L8.5 10.207l3.854-3.853-.708-.708L8.5 8.793z"/></svg>'
},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), i(43), n = i(2), r = i(153), s = i(370), a = i(70), l = function(t) {
function e(e) {
var i = t.call(this, e) || this;
return i._handleMouseEnter = function() {
i.setState({
isHovered: !0
})
}, i._handleMouseLeave = function() {
i.setState({
isHovered: !1
})
}, i._handleApply = function() {
var t = i.props,
e = t.item;
(0, t.onApply)(e)
}, i._handleRemove = function() {
var t = i.props,
e = t.item;
(0, t.onRemove)(e)
}, i._handleFavor = function() {
var t = i.props,
e = t.item,
o = t.onFavor;
o && o(e)
}, i.state = {
isHovered: !1
}, i
}
return o.__extends(e, t), e.prototype.render = function() {
var t = this.props,
e = t.item,
i = t.onFavor,
o = t.favorite,
l = t.isFavoritingAllowed,
c = this.state.isHovered;
return n.createElement("div", {
onMouseEnter: this._handleMouseEnter,
onMouseLeave: this._handleMouseLeave
}, n.createElement(a.PopupMenuItem, {
label: e.name,
showToolboxOnHover: !o,
onClick: this._handleApply,
toolbox: [n.createElement(s.RemoveButton, {
key: "remove",
hidden: !Modernizr.touch && !c,
onClick: this._handleRemove
}), !!i && l && n.createElement(r.FavoriteButton, {
key: "favorite",
isFilled: !!o,
onClick: this._handleFavor
})]
}))
}, e
}(n.PureComponent), e.StudyTemplateListItem = l
},
function(t, e, i) {
"use strict";
var o, n, r, s, a;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), n = i(2), r = i(14), s = i(1068), a = function(t) {
function e() {
var e = null !== t && t.apply(this, arguments) || this;
return e._handleClick = function(t) {
t.stopPropagation();
var i = e.props;
(0, i.onApply)(i.item)
}, e
}
return o.__extends(e, t), e.prototype.render = function() {
var t = this.props,
e = t.className,
i = t.item;
return n.createElement("div", {
className: r(e, s.item, "apply-common-tooltip"),
onClick: this._handleClick,
title: i.name
}, i.name.length > 0 ? i.name[0].toUpperCase() : " ")
}, e
}(n.PureComponent), e.FavoriteStudyTemplateItem = a
},
function(t, e) {
t.exports = {
item: "item-b8AKccvl-",
hovered: "hovered-2SpHqnXp-"
}
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><path d="M12 22v-6h-1v6zm3 0v-4h-1v4zm3 0v-2h-1v2zm3 0v-4h-1v4zm3 0v-7h-1v7zM9 22v-4H8v4zm-3 0v-1H5v1z"/><path d="M5.5 17.207l4.65-4.65a1.906 1.906 0 0 1 2.7 0l2.593 2.593a2.906 2.906 0 0 0 4.114 0l4.65-4.65-.707-.707-4.65 4.65a1.906 1.906 0 0 1-2.7 0l-2.593-2.593a2.906 2.906 0 0 0-4.114 0l-4.65 4.65.707.707z"/><path d="M5.5 12.207l4.65-4.65a1.906 1.906 0 0 1 2.7 0l2.593 2.593a2.906 2.906 0 0 0 4.114 0l4.65-4.65-.707-.707-4.65 4.65a1.906 1.906 0 0 1-2.7 0L13.557 6.85a2.906 2.906 0 0 0-4.114 0l-4.65 4.65.707.707z"/></svg>'
},
function(t, e) {
t.exports = {
wrap: "wrap-15BhAobm-",
opened: "opened-1yAGeGGi-",
full: "full-2VMT2UlC-",
first: "first-1vAzGgSq-",
last: "last-xMjAcadb-",
medium: "medium-1BEsHMFf-",
loader: "loader-1uURoPBh-"
}
},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c, h, u, d, p, _, f, m, g, v;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), i(12), n = i(2), i(102), r = i(40), s = i(103), a = i(109), l = i(1072), c = i(149),
h = i(1073), u = i(1074), d = i(237), p = i(27), _ = {
undoHint: window.t("Undo {0}"),
redoHint: window.t("Redo {0}")
}, f = d.weakComposeClasses(c, l, {
buttonUndo: "button",
buttonRedo: "button"
}), m = o.__assign({}, c, {
button: f.buttonUndo
}), g = o.__assign({}, c, {
button: f.buttonRedo
}), v = function(t) {
function e(e, i) {
var o = t.call(this, e, i) || this;
return o._handleClickUndo = function() {
r.trackEvent("GUI", "Undo"), o.context.chartWidgetCollection.undoHistory.undo()
}, o._handleClickRedo = function() {
r.trackEvent("GUI", "Redo"), o.context.chartWidgetCollection.undoHistory.redo()
}, o.state = o._getStateFromUndoHistory(), o
}
return o.__extends(e, t), e.prototype.componentDidMount = function() {
var t = this.context.chartWidgetCollection;
t.undoHistory.redoStack().onChange().subscribe(this, this._onChangeStack), t.undoHistory
.undoStack().onChange().subscribe(this, this._onChangeStack)
}, e.prototype.componentWillUnmount = function() {
var t = this.context.chartWidgetCollection;
t.undoHistory.redoStack().onChange().unsubscribe(this, this._onChangeStack), t
.undoHistory.undoStack().onChange().unsubscribe(this, this._onChangeStack)
}, e.prototype.render = function() {
var t = this.props.id,
e = this.state,
i = e.isEnabledRedo,
o = e.isEnabledUndo,
r = e.redoStack,
l = e.undoStack;
return n.createElement(a.ToolWidgetRowWrap, {
id: t
}, n.createElement(s.ToolWidgetButton, {
icon: h,
isDisabled: !o,
onClick: this._handleClickUndo,
title: o ? _.undoHint.format(l) : void 0,
theme: m
}), n.createElement(s.ToolWidgetButton, {
icon: u,
isDisabled: !i,
onClick: this._handleClickRedo,
title: i ? _.redoHint.format(r) : void 0,
theme: g
}))
}, e.prototype._onChangeStack = function() {
var t = this._getStateFromUndoHistory();
this.setState(t)
},
e.prototype._getStateFromUndoHistory = function() {
var t = this.context.chartWidgetCollection,
e = t.undoHistory.undoStack(),
i = t.undoHistory.redoStack(),
o = i.head(),
n = e.head();
return {
isEnabledRedo: !i.isEmpty(),
isEnabledUndo: !e.isEmpty(),
redoStack: o ? o.text() : "",
undoStack: n ? n.text() : ""
}
}, e.contextTypes = {
chartWidgetCollection: p.object.isRequired
}, e
}(n.PureComponent), e.ToolWidgetUndoRedo = v
},
function(t, e) {
t.exports = {
buttonUndo: "buttonUndo-342XpPC1-",
buttonRedo: "buttonRedo-3o_XdU_J-"
}
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><path d="M20 19v-1.5a5.5 5.5 0 0 0-5.5-5.5h-6v1h6a4.5 4.5 0 0 1 4.5 4.5V19h1z"/><path d="M12.354 8.854l-.708-.708L7.293 12.5l4.353 4.354.708-.708L8.707 12.5z"/></svg>'
},
function(t, e) {
t.exports =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><path d="M9 19v-1.5a4.5 4.5 0 0 1 4.5-4.5h6v-1h-6A5.5 5.5 0 0 0 8 17.5V19h1z"/><path d="M15.646 16.146l.708.708 4.353-4.354-4.353-4.354-.708.708 3.647 3.646z"/></svg>'
},
function(t, e, i) {
"use strict";
var o, n, r, s, a, l, c;
Object.defineProperty(e, "__esModule", {
value: !0
}), o = i(0), i(13), n = i(2), r = i(39), s = i(83), a = i(9), l = i(109), c = function(t) {
function e() {
var e = null !== t && t.apply(this, arguments) || this;
return e._ref = null, e._update = function() {
e.forceUpdate()
}, e._setRef = function(t) {
e._ref = t
}, e._handleMeasure = function(t) {
var i = t.width;
e.props.width.setValue(i)
}, e
}
return o.__extends(e, t), e.prototype.componentDidMount = function() {
var t, e = this.props,
i = e.jquery,
o = e.isFake,
n = e.width;
o ? n.subscribe(this._update) : (t = a.ensureNotNull(this._ref), $(r.findDOMNode(t))
.append(i))
}, e.prototype.componentWillUnmount = function() {
var t = this.props,
e = t.width;
t.isFake && e.unsubscribe(this._update)
}, e.prototype.render = function() {
var t = this.props,
e = t.isFake,
i = void 0 !== e && e,
o = t.width;
return n.createElement(s, {
shouldMeasure: !i,
whitelist: ["width"],
onMeasure: this._handleMeasure
}, n.createElement(l.ToolWidgetRowWrap, {
ref: this._setRef,
style: i ? {
width: o.value()
} : void 0
}))
}, e
}(n.PureComponent), e.ToolWidgetCustom = c
}
], [568]);