3271 lines
141 KiB
JavaScript
3271 lines
141 KiB
JavaScript
/*
|
||
* (c) Copyright Ascensio System SIA 2010-2024
|
||
*
|
||
* This program is a free software product. You can redistribute it and/or
|
||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||
* version 3 as published by the Free Software Foundation. In accordance with
|
||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||
* of any third-party rights.
|
||
*
|
||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||
*
|
||
* You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish
|
||
* street, Riga, Latvia, EU, LV-1050.
|
||
*
|
||
* The interactive user interfaces in modified source and object code versions
|
||
* of the Program must display Appropriate Legal Notices, as required under
|
||
* Section 5 of the GNU AGPL version 3.
|
||
*
|
||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||
* grant you any rights under trademark law for use of our trademarks.
|
||
*
|
||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||
* well as technical writing content are licensed under the terms of the
|
||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||
*
|
||
*/
|
||
|
||
"use strict";
|
||
|
||
(function (window, undefined) {
|
||
/*
|
||
* Import
|
||
* -----------------------------------------------------------------------------
|
||
*/
|
||
var FT_Common = AscFonts.FT_Common;
|
||
var CellValueType = AscCommon.CellValueType;
|
||
var EIconSetType = Asc.EIconSetType;
|
||
var asc_error = Asc.c_oAscError.ID;
|
||
|
||
/**
|
||
* Отвечает за условное форматирование
|
||
* -----------------------------------------------------------------------------
|
||
*
|
||
* @constructor
|
||
* @memberOf Asc
|
||
*/
|
||
function CConditionalFormatting() {
|
||
this.pivot = false;
|
||
this.ranges = null;
|
||
this.aRules = [];
|
||
|
||
return this;
|
||
}
|
||
|
||
CConditionalFormatting.prototype.setSqRef = function (sqRef) {
|
||
this.ranges = AscCommonExcel.g_oRangeCache.getRangesFromSqRef(sqRef);
|
||
};
|
||
CConditionalFormatting.prototype.isValid = function () {
|
||
//todo more checks
|
||
return this.ranges && this.ranges.length > 0;
|
||
};
|
||
CConditionalFormatting.prototype.initRules = function () {
|
||
for (var i = 0; i < this.aRules.length; ++i) {
|
||
this.aRules[i].updateConditionalFormatting(this);
|
||
}
|
||
};
|
||
|
||
//todo need another approach
|
||
function CConditionalFormattingFormulaParent(ws, rule, isDefName) {
|
||
this.ws = ws;
|
||
this.rule = rule;
|
||
this.isDefName = isDefName;
|
||
}
|
||
|
||
CConditionalFormattingFormulaParent.prototype.onFormulaEvent = function (type, eventData) {
|
||
if (AscCommon.c_oNotifyParentType.IsDefName === type && this.isDefName) {
|
||
return {bbox: this.rule.getBBox(), ranges: this.rule.ranges};
|
||
} else if (AscCommon.c_oNotifyParentType.Change === type) {
|
||
this.ws.setDirtyConditionalFormatting(new AscCommonExcel.MultiplyRange(this.rule.ranges));
|
||
}
|
||
};
|
||
CConditionalFormattingFormulaParent.prototype.clone = function () {
|
||
return new CConditionalFormattingFormulaParent(this.ws, this.rule, this.isDefName);
|
||
};
|
||
|
||
function CConditionalFormattingRule() {
|
||
this.aboveAverage = true;
|
||
this.activePresent = false;
|
||
this.bottom = false;
|
||
this.dxf = null;
|
||
this.equalAverage = false;
|
||
this.id = AscCommon.g_oIdCounter.Get_NewId();
|
||
this.operator = null;
|
||
this.percent = false;
|
||
this.priority = null;
|
||
this.rank = null;
|
||
this.stdDev = null;
|
||
this.stopIfTrue = false;
|
||
this.text = null;
|
||
this.timePeriod = null;
|
||
this.type = null;
|
||
|
||
this.aRuleElements = [];
|
||
|
||
// from CConditionalFormatting
|
||
// Combined all the rules into one array to sort the priorities,
|
||
// so they transferred these properties to the rule
|
||
this.pivot = false;
|
||
this.ranges = null;
|
||
|
||
this.isLock = null;
|
||
|
||
return this;
|
||
}
|
||
|
||
CConditionalFormattingRule.prototype.Get_Id = function () {
|
||
return this.id;
|
||
};
|
||
|
||
CConditionalFormattingRule.prototype.getType = function () {
|
||
return AscCommonExcel.UndoRedoDataTypes.CFDataInner;
|
||
};
|
||
|
||
CConditionalFormattingRule.prototype.clone = function () {
|
||
var i, res = new CConditionalFormattingRule();
|
||
res.aboveAverage = this.aboveAverage;
|
||
res.bottom = this.bottom;
|
||
if (this.dxf) {
|
||
res.dxf = this.dxf.clone();
|
||
}
|
||
res.equalAverage = this.equalAverage;
|
||
res.operator = this.operator;
|
||
res.percent = this.percent;
|
||
res.priority = this.priority;
|
||
res.rank = this.rank;
|
||
res.stdDev = this.stdDev;
|
||
res.stopIfTrue = this.stopIfTrue;
|
||
res.text = this.text;
|
||
res.timePeriod = this.timePeriod;
|
||
res.type = this.type;
|
||
|
||
res.updateConditionalFormatting(this);
|
||
|
||
for (i = 0; i < this.aRuleElements.length; ++i) {
|
||
res.aRuleElements.push(this.aRuleElements[i].clone());
|
||
}
|
||
return res;
|
||
};
|
||
|
||
CConditionalFormattingRule.prototype.combineRangesToSingle = function () {
|
||
let ranges = this.ranges;
|
||
if (!ranges || !ranges.length) {
|
||
return null;
|
||
}
|
||
if (ranges.length === 1) {
|
||
return ranges[0];
|
||
}
|
||
|
||
// Sort ranges by position
|
||
let sortedRanges = ranges.slice().sort(function(a, b) {
|
||
// First compare by rows
|
||
if (a.r1 !== b.r1) {
|
||
return a.r1 - b.r1;
|
||
}
|
||
// Then by columns if rows are equal
|
||
return a.c1 - b.c1;
|
||
});
|
||
|
||
let result = sortedRanges[0].clone();
|
||
let canCombine = true;
|
||
|
||
for (let i = 1; i < sortedRanges.length; i++) {
|
||
let current = sortedRanges[i];
|
||
|
||
// Check if ranges can be combined horizontally (same rows)
|
||
if (current.r1 === result.r1 && current.r2 === result.r2 && current.c1 <= result.c2 + 1) {
|
||
// Extend range horizontally
|
||
result.c2 = Math.max(result.c2, current.c2);
|
||
continue;
|
||
}
|
||
|
||
// Check if ranges can be combined vertically (same columns)
|
||
if (current.c1 === result.c1 && current.c2 === result.c2 && current.r1 <= result.r2 + 1) {
|
||
// Extend range vertically
|
||
result.r2 = Math.max(result.r2, current.r2);
|
||
continue;
|
||
}
|
||
|
||
// Cannot combine - ranges are not continuous
|
||
canCombine = false;
|
||
break;
|
||
}
|
||
|
||
if (canCombine) {
|
||
this.ranges = [result];
|
||
}
|
||
};
|
||
|
||
CConditionalFormattingRule.prototype.merge = function (oRule) {
|
||
if (this.aboveAverage === true) {
|
||
this.aboveAverage = oRule.aboveAverage;
|
||
}
|
||
if (this.activePresent === false) {
|
||
this.activePresent = oRule.activePresent;
|
||
}
|
||
if (this.bottom === false) {
|
||
this.bottom = oRule.bottom;
|
||
}
|
||
//TODO merge
|
||
if (this.dxf === null) {
|
||
this.dxf = oRule.dxf;
|
||
}
|
||
if (this.equalAverage === false) {
|
||
this.equalAverage = oRule.equalAverage;
|
||
}
|
||
if (this.operator === null) {
|
||
this.operator = oRule.operator;
|
||
}
|
||
if (this.percent === false) {
|
||
this.percent = oRule.percent;
|
||
}
|
||
if (this.priority === null) {
|
||
this.priority = oRule.priority;
|
||
}
|
||
if (this.rank === null) {
|
||
this.rank = oRule.rank;
|
||
}
|
||
if (this.stdDev === null) {
|
||
this.stdDev = oRule.stdDev;
|
||
}
|
||
if (this.stopIfTrue === false) {
|
||
this.stopIfTrue = oRule.stopIfTrue;
|
||
}
|
||
if (this.text === null) {
|
||
this.text = oRule.text;
|
||
}
|
||
if (this.timePeriod === null) {
|
||
this.timePeriod = oRule.timePeriod;
|
||
}
|
||
if (this.type === null) {
|
||
this.type = oRule.type;
|
||
}
|
||
|
||
if (this.aRuleElements && this.aRuleElements.length === 0) {
|
||
this.aRuleElements = oRule.aRuleElements;
|
||
} else if (this.aRuleElements && oRule.aRuleElements && this.aRuleElements.length === oRule.aRuleElements.length) {
|
||
for (var i = 0; i < this.aRuleElements.length; i++) {
|
||
this.aRuleElements[i].merge(oRule.aRuleElements[i]);
|
||
}
|
||
}
|
||
|
||
//this.aRuleElements = [];
|
||
|
||
if (this.pivot === false) {
|
||
this.pivot = oRule.pivot;
|
||
}
|
||
if (this.ranges === null) {
|
||
this.ranges = oRule.ranges;
|
||
}
|
||
if (this.isLock === null) {
|
||
this.isLock = oRule.isLock;
|
||
}
|
||
};
|
||
CConditionalFormattingRule.prototype.recalcInterfaceFormula = function (ws, toInterface) {
|
||
for (var i = 0; i < this.aRuleElements.length; i++) {
|
||
this.aRuleElements[i].recalcFormula && this.aRuleElements[i].recalcFormula(ws, toInterface);
|
||
}
|
||
};
|
||
CConditionalFormattingRule.prototype.Write_ToBinary2 = function (writer) {
|
||
//for wrapper
|
||
//writer.WriteLong(this.getObjectType());
|
||
|
||
writer.WriteBool(this.aboveAverage);
|
||
writer.WriteBool(this.activePresent);
|
||
writer.WriteBool(this.bottom);
|
||
|
||
if (null != this.dxf) {
|
||
var dxf = this.dxf;
|
||
writer.WriteBool(true);
|
||
var oBinaryStylesTableWriter = new AscCommonExcel.BinaryStylesTableWriter(writer);
|
||
oBinaryStylesTableWriter.bs.WriteItem(0, function () {
|
||
oBinaryStylesTableWriter.WriteDxf(dxf);
|
||
});
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
|
||
writer.WriteBool(this.equalAverage);
|
||
|
||
if (null != this.operator) {
|
||
writer.WriteBool(true);
|
||
writer.WriteLong(this.operator);
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
|
||
writer.WriteBool(this.percent);
|
||
|
||
if (null != this.priority) {
|
||
writer.WriteBool(true);
|
||
writer.WriteLong(this.priority);
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
|
||
if (null != this.rank) {
|
||
writer.WriteBool(true);
|
||
writer.WriteLong(this.rank);
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
|
||
if (null != this.stdDev) {
|
||
writer.WriteBool(true);
|
||
writer.WriteLong(this.stdDev);
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
|
||
writer.WriteBool(this.stopIfTrue);
|
||
|
||
if (null != this.text) {
|
||
writer.WriteBool(true);
|
||
writer.WriteString2(this.text);
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
|
||
if (null != this.timePeriod) {
|
||
writer.WriteBool(true);
|
||
writer.WriteString2(this.timePeriod);
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
|
||
if (null != this.type) {
|
||
writer.WriteBool(true);
|
||
writer.WriteLong(this.type);
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
|
||
var i;
|
||
if (null != this.aRuleElements) {
|
||
writer.WriteBool(true);
|
||
writer.WriteLong(this.aRuleElements.length);
|
||
for (i = 0; i < this.aRuleElements.length; i++) {
|
||
writer.WriteLong(this.aRuleElements[i].type);
|
||
this.aRuleElements[i].Write_ToBinary2(writer);
|
||
}
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
|
||
writer.WriteBool(this.pivot);
|
||
|
||
if (null != this.ranges) {
|
||
writer.WriteBool(true);
|
||
writer.WriteLong(this.ranges.length);
|
||
for (i = 0; i < this.ranges.length; i++) {
|
||
writer.WriteLong(this.ranges[i].r1);
|
||
writer.WriteLong(this.ranges[i].c1);
|
||
writer.WriteLong(this.ranges[i].r2);
|
||
writer.WriteLong(this.ranges[i].c2);
|
||
}
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
};
|
||
|
||
CConditionalFormattingRule.prototype.Read_FromBinary2 = function (reader) {
|
||
this.aboveAverage = reader.GetBool();
|
||
this.activePresent = reader.GetBool();
|
||
this.bottom = reader.GetBool();
|
||
|
||
var length, i;
|
||
if (reader.GetBool()) {
|
||
var api_sheet = Asc['editor'];
|
||
var wb = api_sheet.wbModel;
|
||
var bsr = new AscCommonExcel.Binary_StylesTableReader(reader, wb);
|
||
var bcr = new AscCommon.Binary_CommonReader(reader);
|
||
var oDxf = new AscCommonExcel.CellXfs();
|
||
reader.GetUChar();
|
||
length = reader.GetULongLE();
|
||
bcr.Read1(length, function (t, l) {
|
||
return bsr.ReadDxf(t, l, oDxf);
|
||
});
|
||
this.dxf = oDxf;
|
||
}
|
||
|
||
this.equalAverage = reader.GetBool();
|
||
|
||
if (reader.GetBool()) {
|
||
this.operator = reader.GetLong();
|
||
}
|
||
|
||
this.percent = reader.GetBool();
|
||
|
||
if (reader.GetBool()) {
|
||
this.priority = reader.GetLong();
|
||
}
|
||
|
||
if (reader.GetBool()) {
|
||
this.rank = reader.GetLong();
|
||
}
|
||
|
||
if (reader.GetBool()) {
|
||
this.stdDev = reader.GetLong();
|
||
}
|
||
|
||
this.stopIfTrue = reader.GetBool();
|
||
|
||
if (reader.GetBool()) {
|
||
this.text = reader.GetString2();
|
||
}
|
||
|
||
if (reader.GetBool()) {
|
||
this.timePeriod = reader.GetString2();
|
||
}
|
||
|
||
if (reader.GetBool()) {
|
||
this.type = reader.GetLong();
|
||
}
|
||
|
||
if (reader.GetBool()) {
|
||
length = reader.GetULong();
|
||
for (i = 0; i < length; ++i) {
|
||
if (!this.aRuleElements) {
|
||
this.aRuleElements = [];
|
||
}
|
||
var type = reader.GetLong();
|
||
var elem;
|
||
switch (type) {
|
||
case Asc.ECfType.colorScale:
|
||
elem = new CColorScale();
|
||
break;
|
||
case Asc.ECfType.dataBar:
|
||
elem = new CDataBar();
|
||
break;
|
||
case Asc.ECfType.iconSet:
|
||
elem = new CIconSet();
|
||
break;
|
||
default:
|
||
elem = new CFormulaCF();
|
||
break;
|
||
//TODO ?CFormulaCF
|
||
}
|
||
elem.Read_FromBinary2(reader);
|
||
this.aRuleElements.push(elem);
|
||
}
|
||
}
|
||
|
||
this.pivot = reader.GetBool();
|
||
|
||
if (reader.GetBool()) {
|
||
length = reader.GetULong();
|
||
for (i = 0; i < length; ++i) {
|
||
if (!this.ranges) {
|
||
this.ranges = [];
|
||
}
|
||
var r1 = reader.GetLong();
|
||
var c1 = reader.GetLong();
|
||
var r2 = reader.GetLong();
|
||
var c2 = reader.GetLong();
|
||
this.ranges.push(new Asc.Range(c1, r1, c2, r2));
|
||
}
|
||
}
|
||
};
|
||
|
||
CConditionalFormattingRule.prototype.set = function (val, addToHistory, ws) {
|
||
|
||
this.aboveAverage = this.checkProperty(this.aboveAverage, val.aboveAverage, AscCH.historyitem_CFRule_SetAboveAverage, ws, addToHistory);
|
||
this.activePresent = this.checkProperty(this.activePresent, val.activePresent, AscCH.historyitem_CFRule_SetActivePresent, ws, addToHistory);
|
||
this.bottom = this.checkProperty(this.bottom, val.bottom, AscCH.historyitem_CFRule_SetBottom, ws, addToHistory);
|
||
|
||
this.equalAverage = this.checkProperty(this.equalAverage, val.equalAverage, AscCH.historyitem_CFRule_SetEqualAverage, ws, addToHistory);
|
||
|
||
this.operator = this.checkProperty(this.operator, val.operator, AscCH.historyitem_CFRule_SetOperator, ws, addToHistory);
|
||
this.percent = this.checkProperty(this.percent, val.percent, AscCH.historyitem_CFRule_SetPercent, ws, addToHistory);
|
||
this.priority = this.checkProperty(this.priority, val.priority, AscCH.historyitem_CFRule_SetPriority, ws, addToHistory);
|
||
this.rank = this.checkProperty(this.rank, val.rank, AscCH.historyitem_CFRule_SetRank, ws, addToHistory);
|
||
this.stdDev = this.checkProperty(this.stdDev, val.stdDev, AscCH.historyitem_CFRule_SetStdDev, ws, addToHistory);
|
||
this.stopIfTrue = this.checkProperty(this.stopIfTrue, val.stopIfTrue, AscCH.historyitem_CFRule_SetStopIfTrue, ws, addToHistory);
|
||
this.text = this.checkProperty(this.text, val.text, AscCH.historyitem_CFRule_SetText, ws, addToHistory);
|
||
this.timePeriod = this.checkProperty(this.timePeriod, val.timePeriod, AscCH.historyitem_CFRule_SetTimePeriod, ws, addToHistory);
|
||
this.type = this.checkProperty(this.type, val.type, AscCH.historyitem_CFRule_SetType, ws, addToHistory);
|
||
this.pivot = this.checkProperty(this.pivot, val.pivot, AscCH.historyitem_CFRule_SetPivot, ws, addToHistory);
|
||
|
||
var compareElements = function (_elem1, _elem2) {
|
||
if (_elem1.length === _elem2.length) {
|
||
for (var i = 0; i < _elem1.length; i++) {
|
||
if (!_elem1[i].isEqual(_elem2[i])) {
|
||
return false;
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
return false;
|
||
};
|
||
|
||
|
||
if (!compareElements(this.aRuleElements, val.aRuleElements)) {
|
||
if (addToHistory) {
|
||
History.Add(AscCommonExcel.g_oUndoRedoCF, AscCH.historyitem_CFRule_SetRuleElements,
|
||
ws.getId(), this.getUnionRange(), new AscCommonExcel.UndoRedoData_CF(this.id, this.aRuleElements, val.aRuleElements));
|
||
}
|
||
|
||
this.aRuleElements = val.aRuleElements;
|
||
}
|
||
|
||
if ((this.dxf && val.dxf && !this.dxf.isEqual(val.dxf)) || (this.dxf && !val.dxf) || (!this.dxf && val.dxf)) {
|
||
var elem = val.dxf ? val.dxf.clone() : null;
|
||
if (addToHistory) {
|
||
History.Add(AscCommonExcel.g_oUndoRedoCF, AscCH.historyitem_CFRule_SetDxf,
|
||
ws.getId(), this.getUnionRange(), new AscCommonExcel.UndoRedoData_CF(this.id, this.dxf, elem));
|
||
}
|
||
|
||
this.dxf = elem;
|
||
}
|
||
|
||
if (this.ranges && val.ranges && !compareElements(this.ranges, val.ranges)) {
|
||
this.setLocation(val.ranges, ws, true);
|
||
}
|
||
};
|
||
|
||
CConditionalFormattingRule.prototype.setLocation = function (location, ws, addToHistory) {
|
||
if (addToHistory && !History.TurnOffHistory) {
|
||
var getUndoRedoRange = function (_ranges) {
|
||
var needRanges = [];
|
||
for (var i = 0; i < _ranges.length; i++) {
|
||
needRanges.push(new AscCommonExcel.UndoRedoData_BBox(_ranges[i]));
|
||
}
|
||
return needRanges;
|
||
};
|
||
|
||
History.Add(AscCommonExcel.g_oUndoRedoCF, AscCH.historyitem_CFRule_SetRanges,
|
||
ws.getId(), this.getUnionRange(location), new AscCommonExcel.UndoRedoData_CF(this.id, getUndoRedoRange(this.ranges), getUndoRedoRange(location)));
|
||
}
|
||
this.ranges = location;
|
||
if (ws) {
|
||
ws.cleanConditionalFormattingRangeIterator();
|
||
}
|
||
};
|
||
|
||
CConditionalFormattingRule.prototype.checkProperty = function (propOld, propNew, type, ws, addToHistory) {
|
||
if (propOld !== propNew) {
|
||
if (addToHistory) {
|
||
History.Add(AscCommonExcel.g_oUndoRedoCF, type, ws.getId(), this.getUnionRange(),
|
||
new AscCommonExcel.UndoRedoData_CF(this.id, propOld, propNew));
|
||
}
|
||
return propNew;
|
||
}
|
||
return propOld;
|
||
};
|
||
|
||
CConditionalFormattingRule.prototype.setOffset = function (offset, range, ws, addToHistory) {
|
||
var newRanges = [];
|
||
var isChange = false;
|
||
|
||
var _setDiff = function (_range) {
|
||
//TODO объединть в одну функцию с dataValidation(.shift)
|
||
var _newRanges, _offset, tempRange, intersection, otherPart, diff;
|
||
|
||
if (range && range.getType() === Asc.c_oAscSelectionType.RangeCells) {
|
||
if (offset.row !== 0) {
|
||
//c_oAscInsertOptions.InsertCellsAndShiftDown
|
||
tempRange = new Asc.Range(range.c1, range.r1, range.c2, AscCommon.gc_nMaxRow0);
|
||
intersection = tempRange.intersection(_range);
|
||
if (intersection) {
|
||
diff = range.r2 - range.r1 + 1;
|
||
|
||
_newRanges = [];
|
||
//добавляем сдвинутую часть диапазона
|
||
_newRanges.push(intersection);
|
||
_offset = new AscCommon.CellBase(offset.row > 0 ? diff : -diff, 0);
|
||
otherPart = _newRanges[0].difference(_range);
|
||
_newRanges[0].setOffset(_offset);
|
||
//исключаем сдвинутую часть из диапазона
|
||
_newRanges = _newRanges.concat(otherPart);
|
||
|
||
}
|
||
} else if (offset.col !== 0) {
|
||
//c_oAscInsertOptions.InsertCellsAndShiftRight
|
||
tempRange = new Asc.Range(range.c1, range.r1, AscCommon.gc_nMaxCol0, range.r2);
|
||
intersection = tempRange.intersection(_range);
|
||
if (intersection) {
|
||
diff = range.c2 - range.c1 + 1;
|
||
_newRanges = [];
|
||
//добавляем сдвинутую часть диапазона
|
||
_newRanges.push(intersection);
|
||
_offset = new AscCommon.CellBase(0, offset.col > 0 ? diff : -diff, 0);
|
||
otherPart = _newRanges[0].difference(_range);
|
||
_newRanges[0].setOffset(_offset);
|
||
//исключаем сдвинутую часть из диапазона
|
||
_newRanges = _newRanges.concat(otherPart);
|
||
}
|
||
}
|
||
}
|
||
|
||
return _newRanges;
|
||
};
|
||
|
||
for (var i = 0; i < this.ranges.length; i++) {
|
||
var newRange = this.ranges[i].clone();
|
||
if (range.isIntersectForShift(newRange, offset)) {
|
||
if (newRange.forShift(range, offset)) {
|
||
if (ws.autoFilters.isAddTotalRow && newRange.containsRange(this.ranges[i])) {
|
||
newRange = this.ranges[i].clone();
|
||
} else {
|
||
isChange = true;
|
||
}
|
||
}
|
||
newRanges.push(newRange);
|
||
} else {
|
||
if (ws.autoFilters.isAddTotalRow && newRange.containsRange(this.ranges[i])) {
|
||
newRange = this.ranges[i].clone();
|
||
} else {
|
||
var changedRanges = _setDiff(this.ranges[i]);
|
||
if (changedRanges) {
|
||
newRanges = newRanges.concat(changedRanges);
|
||
isChange = true;
|
||
} else {
|
||
newRanges = newRanges.concat(this.ranges[i].clone());
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (isChange) {
|
||
this.setLocation(newRanges, ws, addToHistory);
|
||
if (ws) {
|
||
ws.setDirtyConditionalFormatting(new AscCommonExcel.MultiplyRange(newRanges))
|
||
}
|
||
}
|
||
};
|
||
|
||
CConditionalFormattingRule.prototype.updateFormulas = function (ws) {
|
||
if (this.aRuleElements && this.aRuleElements.length) {
|
||
for (let i = 0; i < this.aRuleElements.length; i++) {
|
||
let _formula = this.aRuleElements[i] && this.aRuleElements[i]._f && this.aRuleElements[i].getFormula && this.aRuleElements[i].getFormula(ws);
|
||
if (_formula && _formula.Formula && this.aRuleElements[i] && this.aRuleElements[i].Text && this.aRuleElements[i].Text !== _formula.Formula) {
|
||
this.aRuleElements[i].Text = this.aRuleElements[i].getFormulaStr();
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
CConditionalFormattingRule.prototype.getUnionRange = function (opt_ranges) {
|
||
var res = null;
|
||
|
||
var _getUnionRanges = function (_ranges) {
|
||
if (!_ranges) {
|
||
return null;
|
||
}
|
||
|
||
var _res = null;
|
||
for (var i = 0; i < _ranges.length; i++) {
|
||
if (!_res) {
|
||
_res = _ranges[i].clone();
|
||
} else {
|
||
_res.union2(_ranges[i]);
|
||
}
|
||
}
|
||
return _res;
|
||
};
|
||
|
||
if (opt_ranges) {
|
||
res = _getUnionRanges(opt_ranges);
|
||
}
|
||
if (this.ranges) {
|
||
var tempRange = _getUnionRanges(this.ranges);
|
||
if (tempRange) {
|
||
if (res) {
|
||
res.union2(tempRange)
|
||
} else {
|
||
res = tempRange;
|
||
}
|
||
}
|
||
}
|
||
|
||
return res;
|
||
};
|
||
|
||
CConditionalFormattingRule.prototype.getTimePeriod = function () {
|
||
var start, end;
|
||
var now = new Asc.cDate();
|
||
now.setUTCHours(0, 0, 0, 0);
|
||
switch (this.timePeriod) {
|
||
case AscCommonExcel.ST_TimePeriod.last7Days:
|
||
now.setUTCDate(now.getUTCDate() + 1);
|
||
end = now.getExcelDate();
|
||
now.setUTCDate(now.getUTCDate() - 7);
|
||
start = now.getExcelDate();
|
||
break;
|
||
case AscCommonExcel.ST_TimePeriod.lastMonth:
|
||
now.setUTCDate(1);
|
||
end = now.getExcelDate();
|
||
now.setUTCMonth(now.getUTCMonth() - 1);
|
||
start = now.getExcelDate();
|
||
break;
|
||
case AscCommonExcel.ST_TimePeriod.thisMonth:
|
||
now.setUTCDate(1);
|
||
start = now.getExcelDate();
|
||
now.setUTCMonth(now.getUTCMonth() + 1);
|
||
end = now.getExcelDate();
|
||
break;
|
||
case AscCommonExcel.ST_TimePeriod.nextMonth:
|
||
now.setUTCDate(1);
|
||
now.setUTCMonth(now.getUTCMonth() + 1);
|
||
start = now.getExcelDate();
|
||
now.setUTCMonth(now.getUTCMonth() + 1);
|
||
end = now.getExcelDate();
|
||
break;
|
||
case AscCommonExcel.ST_TimePeriod.lastWeek:
|
||
now.setUTCDate(now.getUTCDate() - now.getUTCDay());
|
||
end = now.getExcelDate();
|
||
now.setUTCDate(now.getUTCDate() - 7);
|
||
start = now.getExcelDate();
|
||
break;
|
||
case AscCommonExcel.ST_TimePeriod.thisWeek:
|
||
now.setUTCDate(now.getUTCDate() - now.getUTCDay());
|
||
start = now.getExcelDate();
|
||
now.setUTCDate(now.getUTCDate() + 7);
|
||
end = now.getExcelDate();
|
||
break;
|
||
case AscCommonExcel.ST_TimePeriod.nextWeek:
|
||
now.setUTCDate(now.getUTCDate() - now.getUTCDay() + 7);
|
||
start = now.getExcelDate();
|
||
now.setUTCDate(now.getUTCDate() + 7);
|
||
end = now.getExcelDate();
|
||
break;
|
||
case AscCommonExcel.ST_TimePeriod.yesterday:
|
||
end = now.getExcelDate();
|
||
now.setUTCDate(now.getUTCDate() - 1);
|
||
start = now.getExcelDate();
|
||
break;
|
||
case AscCommonExcel.ST_TimePeriod.today:
|
||
start = now.getExcelDate();
|
||
now.setUTCDate(now.getUTCDate() + 1);
|
||
end = now.getExcelDate();
|
||
break;
|
||
case AscCommonExcel.ST_TimePeriod.tomorrow:
|
||
now.setUTCDate(now.getUTCDate() + 1);
|
||
start = now.getExcelDate();
|
||
now.setUTCDate(now.getUTCDate() + 1);
|
||
end = now.getExcelDate();
|
||
break;
|
||
}
|
||
return {start: start, end: end};
|
||
};
|
||
CConditionalFormattingRule.prototype.getValueCellIs = function (ws, opt_parent, opt_bbox, opt_offset, opt_returnRaw) {
|
||
var res;
|
||
if (null !== this.text) {
|
||
res = new AscCommonExcel.cString(this.text);
|
||
} else if (this.aRuleElements[0] && (this.type === Asc.ECfType.notContainsText || this.type === Asc.ECfType.containsText)) {
|
||
//ms see on bool result of first formula
|
||
//formula1/formula2: true/false -> true, false/true -> false, false/false -> false
|
||
res = this.aRuleElements[0].getValue(ws, opt_parent, opt_bbox, opt_offset, opt_returnRaw);
|
||
} else if (this.aRuleElements[1]) {
|
||
res = this.aRuleElements[1].getValue(ws, opt_parent, opt_bbox, opt_offset, opt_returnRaw);
|
||
}
|
||
return res;
|
||
};
|
||
CConditionalFormattingRule.prototype.getFormulaCellIs = function (opt_getFirstRule) {
|
||
return null === this.text && this.aRuleElements[opt_getFirstRule ? 0 : 1];
|
||
};
|
||
CConditionalFormattingRule.prototype.cellIs = function (operator, cell, v1, v2) {
|
||
if (operator === AscCommonExcel.ECfOperator.Operator_beginsWith ||
|
||
operator === AscCommonExcel.ECfOperator.Operator_endsWith ||
|
||
operator === AscCommonExcel.ECfOperator.Operator_containsText ||
|
||
operator === AscCommonExcel.ECfOperator.Operator_notContains) {
|
||
//ms see on bool result of first formula
|
||
//formula1/formula2: true/false -> true, false/true -> false, false/false -> false
|
||
if (v1 && v1.tocBool) {
|
||
let boolVal = v1.tocBool();
|
||
if (boolVal && (boolVal.value === false || boolVal.value === true)){
|
||
return boolVal.value;
|
||
}
|
||
}
|
||
return this._cellIsText(operator, cell, v1);
|
||
} else {
|
||
return this._cellIsNumber(operator, cell, v1, v2);
|
||
}
|
||
};
|
||
CConditionalFormattingRule.prototype._cellIsText = function (operator, cell, v1) {
|
||
if (!v1 || AscCommonExcel.cElementType.empty === v1.type) {
|
||
v1 = new AscCommonExcel.cString("");
|
||
}
|
||
if (AscCommonExcel.ECfOperator.Operator_notContains === operator) {
|
||
return !this._cellIsText(AscCommonExcel.ECfOperator.Operator_containsText, cell, v1);
|
||
}
|
||
var cellType = cell ? cell.type : null;
|
||
if (cellType === CellValueType.Error || AscCommonExcel.cElementType.error === v1.type) {
|
||
return false;
|
||
}
|
||
var res = false;
|
||
var cellVal = cell ? cell.getValueWithoutFormat().toLowerCase() : "";
|
||
var v1Val = v1.toLocaleString().toLowerCase();
|
||
switch (operator) {
|
||
case AscCommonExcel.ECfOperator.Operator_beginsWith:
|
||
case AscCommonExcel.ECfOperator.Operator_endsWith:
|
||
if (AscCommonExcel.cElementType.string === v1.type && (cellType === CellValueType.String || "" === v1Val)) {
|
||
if (AscCommonExcel.ECfOperator.Operator_beginsWith === operator) {
|
||
res = cellVal.startsWith(v1Val);
|
||
} else {
|
||
res = cellVal.endsWith(v1Val);
|
||
}
|
||
} else {
|
||
res = false;
|
||
}
|
||
break;
|
||
case AscCommonExcel.ECfOperator.Operator_containsText:
|
||
if ("" === cellVal) {
|
||
res = false;
|
||
} else {
|
||
res = -1 !== cellVal.indexOf(v1Val);
|
||
}
|
||
break;
|
||
}
|
||
return res;
|
||
};
|
||
CConditionalFormattingRule.prototype._cellIsNumber = function (operator, cell, v1, v2) {
|
||
if (!v1 || AscCommonExcel.cElementType.empty === v1.type) {
|
||
v1 = new AscCommonExcel.cNumber(0);
|
||
}
|
||
if ((cell && cell.type === CellValueType.Error) || AscCommonExcel.cElementType.error === v1.type) {
|
||
return false;
|
||
}
|
||
var cellVal;
|
||
var res = false;
|
||
switch (operator) {
|
||
case AscCommonExcel.ECfOperator.Operator_equal:
|
||
if (AscCommonExcel.cElementType.number === v1.type) {
|
||
if (!cell || cell.isNullTextString()) {
|
||
res = 0 === v1.getValue();
|
||
} else if (cell.type === CellValueType.Number) {
|
||
res = cell.getNumberValue() === v1.getValue();
|
||
} else {
|
||
res = false;
|
||
}
|
||
} else if (AscCommonExcel.cElementType.string === v1.type) {
|
||
if (!cell || cell.isNullTextString()) {
|
||
res = "" === v1.getValue().toLowerCase();
|
||
} else if (cell.type === CellValueType.String) {
|
||
cellVal = cell.getValueWithoutFormat().toLowerCase();
|
||
res = cellVal === v1.getValue().toLowerCase();
|
||
} else {
|
||
res = false;
|
||
}
|
||
} else if (AscCommonExcel.cElementType.bool === v1.type) {
|
||
if (cell && cell.type === CellValueType.Bool) {
|
||
res = cell.getBoolValue() === v1.toBool();
|
||
} else {
|
||
res = false;
|
||
}
|
||
}
|
||
break;
|
||
case AscCommonExcel.ECfOperator.Operator_notEqual:
|
||
res = !this._cellIsNumber(AscCommonExcel.ECfOperator.Operator_equal, cell, v1);
|
||
break;
|
||
case AscCommonExcel.ECfOperator.Operator_greaterThan:
|
||
if (AscCommonExcel.cElementType.number === v1.type) {
|
||
if (!cell || cell.isNullTextString()) {
|
||
res = 0 > v1.getValue();
|
||
} else if (cell.type === CellValueType.Number) {
|
||
res = cell.getNumberValue() > v1.getValue();
|
||
} else {
|
||
res = true;
|
||
}
|
||
} else if (AscCommonExcel.cElementType.string === v1.type) {
|
||
if (!cell || cell.isNullTextString()) {
|
||
res = "" > v1.getValue().toLowerCase();
|
||
} else if (cell.type === CellValueType.Number) {
|
||
res = false;
|
||
} else if (cell.type === CellValueType.String) {
|
||
cellVal = cell.getValueWithoutFormat().toLowerCase();
|
||
//todo Excel uses different string compare function
|
||
res = cellVal > v1.getValue().toLowerCase();
|
||
} else if (cell.type === CellValueType.Bool) {
|
||
res = true;
|
||
}
|
||
} else if (AscCommonExcel.cElementType.bool === v1.type) {
|
||
if (cell && cell.type === CellValueType.Bool) {
|
||
res = cell.getBoolValue() > v1.toBool();
|
||
} else {
|
||
res = false;
|
||
}
|
||
}
|
||
break;
|
||
case AscCommonExcel.ECfOperator.Operator_greaterThanOrEqual:
|
||
res = this._cellIsNumber(AscCommonExcel.ECfOperator.Operator_greaterThan, cell, v1) ||
|
||
this._cellIsNumber(AscCommonExcel.ECfOperator.Operator_equal, cell, v1);
|
||
break;
|
||
case AscCommonExcel.ECfOperator.Operator_lessThan:
|
||
res = !this._cellIsNumber(AscCommonExcel.ECfOperator.Operator_greaterThanOrEqual, cell, v1);
|
||
break;
|
||
case AscCommonExcel.ECfOperator.Operator_lessThanOrEqual:
|
||
res = !this._cellIsNumber(AscCommonExcel.ECfOperator.Operator_greaterThan, cell, v1);
|
||
break;
|
||
case AscCommonExcel.ECfOperator.Operator_between:
|
||
res = this._cellIsNumber(AscCommonExcel.ECfOperator.Operator_greaterThanOrEqual, cell, v1) &&
|
||
this._cellIsNumber(AscCommonExcel.ECfOperator.Operator_lessThanOrEqual, cell, v2);
|
||
break;
|
||
case AscCommonExcel.ECfOperator.Operator_notBetween:
|
||
res = !this._cellIsNumber(AscCommonExcel.ECfOperator.Operator_between, cell, v1, v2);
|
||
break;
|
||
}
|
||
return res;
|
||
};
|
||
CConditionalFormattingRule.prototype.getAverage = function (val, average, stdDev) {
|
||
var res = false;
|
||
if (this.stdDev && stdDev) {
|
||
average += ((this.aboveAverage ? 1 : -1) * this.stdDev) * stdDev;
|
||
}
|
||
if (this.aboveAverage) {
|
||
res = val > average;
|
||
} else {
|
||
res = val < average;
|
||
}
|
||
res = res || (this.equalAverage && val == average);
|
||
return res;
|
||
};
|
||
CConditionalFormattingRule.prototype.hasStdDev = function () {
|
||
return null !== this.stdDev;
|
||
};
|
||
CConditionalFormattingRule.prototype.updateConditionalFormatting = function (cf) {
|
||
var i;
|
||
this.pivot = cf.pivot;
|
||
if (cf.ranges) {
|
||
this.ranges = [];
|
||
for (i = 0; i < cf.ranges.length; ++i) {
|
||
this.ranges.push(cf.ranges[i].clone());
|
||
}
|
||
}
|
||
};
|
||
CConditionalFormattingRule.prototype.getBBox = function () {
|
||
var bbox = null;
|
||
if (this.ranges && this.ranges.length > 0) {
|
||
bbox = this.ranges[0].clone();
|
||
for (var i = 1; i < this.ranges.length; ++i) {
|
||
bbox.union2(this.ranges[i]);
|
||
}
|
||
}
|
||
return bbox;
|
||
};
|
||
CConditionalFormattingRule.prototype.containsIntoRange = function (range) {
|
||
var res = null;
|
||
if (this.ranges && this.ranges.length > 0) {
|
||
res = true;
|
||
for (var i = 0; i < this.ranges.length; ++i) {
|
||
if (!range.containsRange(this.ranges[i])) {
|
||
res = false;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
return res;
|
||
};
|
||
CConditionalFormattingRule.prototype.containsIntoRange = function (range) {
|
||
var res = null;
|
||
if (this.ranges && this.ranges.length > 0) {
|
||
res = true;
|
||
for (var i = 0; i < this.ranges.length; ++i) {
|
||
if (!range.containsRange(this.ranges[i])) {
|
||
res = false;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
return res;
|
||
};
|
||
CConditionalFormattingRule.prototype.getIntersections = function (range) {
|
||
var res = [];
|
||
if (this.ranges) {
|
||
for (var i = 0; i < this.ranges.length; ++i) {
|
||
var intersection = this.ranges[i].intersection(range);
|
||
if (intersection) {
|
||
res.push(intersection);
|
||
}
|
||
}
|
||
}
|
||
return res.length ? res : null;
|
||
};
|
||
CConditionalFormattingRule.prototype.getIndexRule = function (values, ws, value) {
|
||
var valueCFVO;
|
||
var aCFVOs = this._getCFVOs();
|
||
var bReverse = this.aRuleElements && this.aRuleElements[0] && this.aRuleElements[0].Reverse;
|
||
for (var i = aCFVOs.length - 1; i >= 0; --i) {
|
||
valueCFVO = this._getValue(values, aCFVOs[i], ws);
|
||
if (value > valueCFVO || (aCFVOs[i].Gte && value === valueCFVO)) {
|
||
return bReverse ? aCFVOs.length - 1 - i : i;
|
||
}
|
||
}
|
||
return 0;
|
||
};
|
||
CConditionalFormattingRule.prototype.getMin = function (values, ws) {
|
||
var aCFVOs = this._getCFVOs();
|
||
var oCFVO = (aCFVOs && 0 < aCFVOs.length) ? aCFVOs[0] : null;
|
||
return this._getValue(values, oCFVO, ws);
|
||
};
|
||
CConditionalFormattingRule.prototype.getMid = function (values, ws) {
|
||
var aCFVOs = this._getCFVOs();
|
||
var oCFVO = (aCFVOs && 2 < aCFVOs.length) ? aCFVOs[1] : null;
|
||
return this._getValue(values, oCFVO, ws);
|
||
};
|
||
CConditionalFormattingRule.prototype.getMax = function (values, ws) {
|
||
var aCFVOs = this._getCFVOs();
|
||
var oCFVO = (aCFVOs && 2 === aCFVOs.length) ? aCFVOs[1] : ((aCFVOs && 2 < aCFVOs.length) ? aCFVOs[2] : null);
|
||
return this._getValue(values, oCFVO, ws);
|
||
};
|
||
CConditionalFormattingRule.prototype._getCFVOs = function () {
|
||
var oRuleElement = this.aRuleElements[0];
|
||
return oRuleElement && oRuleElement.aCFVOs;
|
||
};
|
||
CConditionalFormattingRule.prototype._getValue = function (values, oCFVO, ws) {
|
||
var res, min;
|
||
if (oCFVO) {
|
||
if (oCFVO.Val) {
|
||
res = 0;
|
||
if (null === oCFVO.formula) {
|
||
oCFVO.formulaParent = new CConditionalFormattingFormulaParent(ws, this, false);
|
||
oCFVO.formula = new CFormulaCF();
|
||
oCFVO.formula.Text = oCFVO.Val;
|
||
}
|
||
var calcRes = oCFVO.formula.getValue(ws, oCFVO.formulaParent, null, null, true);
|
||
if (calcRes && calcRes.tocNumber) {
|
||
calcRes = calcRes.tocNumber();
|
||
if (calcRes && calcRes.toNumber) {
|
||
res = calcRes.toNumber();
|
||
}
|
||
}
|
||
}
|
||
switch (oCFVO.Type) {
|
||
case AscCommonExcel.ECfvoType.Minimum:
|
||
res = AscCommonExcel.getArrayMin(values);
|
||
break;
|
||
case AscCommonExcel.ECfvoType.Maximum:
|
||
res = AscCommonExcel.getArrayMax(values);
|
||
break;
|
||
case AscCommonExcel.ECfvoType.Number:
|
||
break;
|
||
case AscCommonExcel.ECfvoType.Percent:
|
||
min = AscCommonExcel.getArrayMin(values);
|
||
res = min + (AscCommonExcel.getArrayMax(values) - min) * res / 100;
|
||
break;
|
||
case AscCommonExcel.ECfvoType.Percentile:
|
||
res = AscCommonExcel.getPercentile(values, res / 100.0);
|
||
if (AscCommonExcel.cElementType.number === res.type) {
|
||
res = res.getValue();
|
||
} else {
|
||
res = AscCommonExcel.getArrayMin(values);
|
||
}
|
||
break;
|
||
case AscCommonExcel.ECfvoType.Formula:
|
||
break;
|
||
case AscCommonExcel.ECfvoType.AutoMin:
|
||
res = Math.min(0, AscCommonExcel.getArrayMin(values));
|
||
break;
|
||
case AscCommonExcel.ECfvoType.AutoMax:
|
||
res = Math.max(0, AscCommonExcel.getArrayMax(values));
|
||
break;
|
||
default:
|
||
res = -Number.MAX_VALUE;
|
||
break;
|
||
}
|
||
}
|
||
return res;
|
||
};
|
||
|
||
CConditionalFormattingRule.prototype.applyPreset = function (presetId) {
|
||
var presetType = presetId[0];
|
||
var styleIndex = presetId[1];
|
||
|
||
var elem;
|
||
switch (presetType) {
|
||
case Asc.c_oAscCFRuleTypeSettings.dataBar:
|
||
elem = new CDataBar();
|
||
elem.applyPreset(styleIndex);
|
||
this.type = Asc.ECfType.dataBar;
|
||
break;
|
||
case Asc.c_oAscCFRuleTypeSettings.colorScale:
|
||
elem = new CColorScale();
|
||
elem.applyPreset(styleIndex);
|
||
this.type = Asc.ECfType.colorScale;
|
||
break;
|
||
case Asc.c_oAscCFRuleTypeSettings.icons:
|
||
elem = new CIconSet();
|
||
elem.applyPreset(styleIndex);
|
||
this.type = Asc.ECfType.iconSet;
|
||
break;
|
||
}
|
||
if (elem) {
|
||
this.aRuleElements.push(elem);
|
||
}
|
||
};
|
||
|
||
CConditionalFormattingRule.prototype.asc_getType = function () {
|
||
return this.type;
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_getDxf = function () {
|
||
return this.dxf;
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_getLocation = function () {
|
||
var arrResult = [];
|
||
var t = this;
|
||
|
||
if (this.ranges) {
|
||
var wb = Asc['editor'].wbModel;
|
||
var isActive = true, sheet;
|
||
for (var i = 0; i < wb.aWorksheets.length; i++) {
|
||
if (i !== wb.nActive) {
|
||
if (wb.aWorksheets[i].getCFRuleById(t.id)) {
|
||
isActive = false;
|
||
}
|
||
if (!isActive) {
|
||
sheet = wb.aWorksheets[i];
|
||
return true;
|
||
}
|
||
}
|
||
}
|
||
|
||
this.ranges.forEach(function (item) {
|
||
arrResult.push((sheet ? sheet.sName + "!" : "") + item.getAbsName());
|
||
});
|
||
}
|
||
return [isActive, "=" + arrResult.join(AscCommon.FormulaSeparators.functionArgumentSeparator)];
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_getContainsText = function () {
|
||
if (null !== this.text) {
|
||
return this.text;
|
||
}
|
||
var ruleElement = this.aRuleElements[1];
|
||
return ruleElement && ruleElement.getFormula ? "=" + ruleElement.Text : null;
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_getTimePeriod = function () {
|
||
return this.timePeriod;
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_getOperator = function () {
|
||
return this.operator;
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_getPriority = function () {
|
||
return this.priority;
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_getRank = function () {
|
||
return this.rank;
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_getBottom = function () {
|
||
return this.bottom;
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_getPercent = function () {
|
||
return this.percent;
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_getAboveAverage = function () {
|
||
return this.aboveAverage;
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_getEqualAverage = function () {
|
||
return this.equalAverage;
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_getStdDev = function () {
|
||
return this.stdDev;
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_getStopIfTrue = function () {
|
||
return this.stopIfTrue;
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_getText = function () {
|
||
return this.text;
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_getValue1 = function () {
|
||
var ruleElement = this.aRuleElements[0];
|
||
return ruleElement && ruleElement.getFormula ? "=" + ruleElement.getFormulaStr(true) : null;
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_getValue2 = function () {
|
||
var ruleElement = this.aRuleElements[1];
|
||
return ruleElement && ruleElement.getFormula ? "=" + ruleElement.getFormulaStr(true) : null;
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_getColorScaleOrDataBarOrIconSetRule = function () {
|
||
if ((Asc.ECfType.dataBar === this.type || Asc.ECfType.iconSet === this.type ||
|
||
Asc.ECfType.colorScale === this.type) && 1 === this.aRuleElements.length) {
|
||
var res = this.aRuleElements[0];
|
||
if (res && this.type === res.type) {
|
||
return res;
|
||
}
|
||
}
|
||
return null;
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_getId = function () {
|
||
return this.id;
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_getIsLock = function () {
|
||
return this.isLock;
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_getPreview = function (id, text) {
|
||
var api_sheet = Asc['editor'];
|
||
var res;
|
||
if (Asc.ECfType.colorScale === this.type && 1 === this.aRuleElements.length) {
|
||
res = this.aRuleElements[0].asc_getPreview(api_sheet, id, text);
|
||
} else if (Asc.ECfType.dataBar === this.type && 1 === this.aRuleElements.length) {
|
||
res = this.aRuleElements[0].asc_getPreview(api_sheet, id);
|
||
} else if (Asc.ECfType.iconSet === this.type && 1 === this.aRuleElements.length) {
|
||
res = this.aRuleElements[0].asc_getPreview(api_sheet, id);
|
||
} else {
|
||
if (this.dxf) {
|
||
res = this.dxf.asc_getPreview2(api_sheet, id, text);
|
||
} else {
|
||
var tempXfs = new AscCommonExcel.CellXfs();
|
||
res = tempXfs.asc_getPreview2(api_sheet, id, text);
|
||
}
|
||
}
|
||
return res;
|
||
};
|
||
|
||
CConditionalFormattingRule.prototype.asc_setType = function (val) {
|
||
this.type = val;
|
||
this._cleanAfterChangeType();
|
||
var formula = this.getFormulaByType(this.text);
|
||
if (formula) {
|
||
this.aRuleElements = [];
|
||
this.aRuleElements[0] = new CFormulaCF();
|
||
this.aRuleElements[0].Text = formula;
|
||
}
|
||
};
|
||
CConditionalFormattingRule.prototype._cleanAfterChangeType = function () {
|
||
switch (this.type) {
|
||
case Asc.ECfType.notContainsErrors:
|
||
case Asc.ECfType.containsErrors:
|
||
case Asc.ECfType.notContainsBlanks:
|
||
case Asc.ECfType.containsBlanks:
|
||
case Asc.ECfType.timePeriod:
|
||
this.aRuleElements = [];
|
||
this.percent = null;
|
||
this.text = null;
|
||
this.rank = null;
|
||
break;
|
||
case Asc.ECfType.colorScale:
|
||
this.dxf = null;
|
||
break;
|
||
}
|
||
if (this.type !== Asc.ECfType.top10) {
|
||
this.rank = null;
|
||
}
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_setDxf = function (val) {
|
||
this.dxf = val;
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_setLocation = function (val) {
|
||
let t = this;
|
||
if (val) {
|
||
if (val[0] === "=") {
|
||
val = val.slice(1);
|
||
}
|
||
this.ranges = [];
|
||
|
||
let wb = Asc.editor && Asc.editor.wbModel;
|
||
let _ranges;
|
||
if (wb) {
|
||
let ws = wb.getActiveWs();
|
||
_ranges = AscCommonExcel.getRangeByRef(val, ws, true);
|
||
}
|
||
|
||
if (_ranges) {
|
||
for (let i = 0; i < _ranges.length; i++) {
|
||
if (_ranges[i].bbox) {
|
||
t.ranges.push(_ranges[i].bbox);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
CConditionalFormattingRule.prototype.asc_setContainsText = function (val) {
|
||
if (val[0] === "=") {
|
||
val = val.slice(1);
|
||
//генерируем массив
|
||
this.aRuleElements = [];
|
||
this.aRuleElements[0] = new CFormulaCF();
|
||
this.aRuleElements[0].Text = this.getFormulaByType(val, true);
|
||
this.aRuleElements[1] = new CFormulaCF();
|
||
this.aRuleElements[1].Text = val;
|
||
this.text = null;
|
||
} else {
|
||
this.aRuleElements = [];
|
||
this.aRuleElements[0] = new CFormulaCF();
|
||
this.aRuleElements[0].Text = this.getFormulaByType(val);
|
||
this.text = val;
|
||
}
|
||
};
|
||
|
||
CConditionalFormattingRule.prototype.getFormulaByType = function (val, isFormulaVal) {
|
||
var t = this;
|
||
var _generateTimePeriodFunction = function () {
|
||
switch (t.timePeriod) {
|
||
case AscCommonExcel.ST_TimePeriod.yesterday:
|
||
res = "FLOOR(" + firstCellInRange + ",1)" + "=TODAY()-1";
|
||
break;
|
||
case AscCommonExcel.ST_TimePeriod.today:
|
||
res = "FLOOR(" + firstCellInRange + ",1)" + "=TODAY()";
|
||
break;
|
||
case AscCommonExcel.ST_TimePeriod.tomorrow:
|
||
res = "FLOOR(" + firstCellInRange + ",1)" + "=TODAY()+1";
|
||
break;
|
||
case AscCommonExcel.ST_TimePeriod.last7Days:
|
||
res = "AND(TODAY()-FLOOR(" + firstCellInRange + ",1)<=6,FLOOR(" + firstCellInRange + ",1)<=TODAY())";
|
||
break;
|
||
case AscCommonExcel.ST_TimePeriod.lastWeek:
|
||
res = "AND(TODAY()-ROUNDDOWN(" + firstCellInRange + ",0)>=(WEEKDAY(TODAY())),TODAY()-ROUNDDOWN(" + firstCellInRange + ",0)<(WEEKDAY(TODAY())+7))";
|
||
break;
|
||
case AscCommonExcel.ST_TimePeriod.thisWeek:
|
||
res = "AND(TODAY()-ROUNDDOWN(" + firstCellInRange + ",0)<=WEEKDAY(TODAY())-1,ROUNDDOWN(" + firstCellInRange + ",0)-TODAY()<=7-WEEKDAY(TODAY()))";
|
||
break;
|
||
case AscCommonExcel.ST_TimePeriod.nextWeek:
|
||
res = "AND(ROUNDDOWN(" + firstCellInRange + ",0)-TODAY()>(7-WEEKDAY(TODAY())),ROUNDDOWN(" + firstCellInRange + ",0)-TODAY()<(15-WEEKDAY(TODAY())))";
|
||
break;
|
||
case AscCommonExcel.ST_TimePeriod.lastMonth:
|
||
res = "AND(MONTH(" + firstCellInRange + ")=MONTH(EDATE(TODAY(),0-1)),YEAR(" + firstCellInRange + ")=YEAR(EDATE(TODAY(),0-1)))";
|
||
break;
|
||
case AscCommonExcel.ST_TimePeriod.thisMonth:
|
||
res = "AND(MONTH(" + firstCellInRange + ")=MONTH(TODAY()),YEAR(" + firstCellInRange + ")=YEAR(TODAY()))";
|
||
break;
|
||
case AscCommonExcel.ST_TimePeriod.nextMonth:
|
||
res = "AND(MONTH(" + firstCellInRange + ")=MONTH(EDATE(TODAY(),0+1)),YEAR(" + firstCellInRange + ")=YEAR(EDATE(TODAY(),0+1)))";
|
||
break;
|
||
}
|
||
};
|
||
|
||
var res = null;
|
||
var range;
|
||
if (val !== null && val !== undefined && !isFormulaVal) {
|
||
val = addQuotes(val);
|
||
}
|
||
if (this.ranges && this.ranges[0]) {
|
||
range = this.ranges[0];
|
||
} else {
|
||
var api_sheet = Asc['editor'];
|
||
var wb = api_sheet.wbModel;
|
||
var sheet = wb.getActiveWs();
|
||
range = sheet && sheet.selectionRange && sheet.selectionRange.ranges && sheet.selectionRange.ranges[0];
|
||
}
|
||
|
||
if (range) {
|
||
var firstCellInRange = new Asc.Range(range.c1, range.r1, range.c1, range.r1);
|
||
|
||
AscCommonExcel.executeInR1C1Mode(false, function () {
|
||
firstCellInRange = firstCellInRange.getName();
|
||
});
|
||
|
||
switch (this.type) {
|
||
case Asc.ECfType.notContainsText:
|
||
if (val !== null && val !== undefined) {
|
||
res = "ISERROR(SEARCH(" + val + "," + firstCellInRange + "))";
|
||
}
|
||
break;
|
||
case Asc.ECfType.containsText:
|
||
if (val !== null && val !== undefined) {
|
||
res = "NOT(ISERROR(SEARCH(" + val + "," + firstCellInRange + ")))";
|
||
}
|
||
break;
|
||
case Asc.ECfType.endsWith:
|
||
if (val !== null && val !== undefined) {
|
||
res = "RIGHT(" + firstCellInRange + ",LEN(" + val + "))" + "=" + val;
|
||
}
|
||
break;
|
||
case Asc.ECfType.beginsWith:
|
||
if (val !== null && val !== undefined) {
|
||
res = "LEFT(" + firstCellInRange + ",LEN(" + val + "))" + "=" + val;
|
||
}
|
||
break;
|
||
case Asc.ECfType.notContainsErrors:
|
||
res = "NOT(ISERROR(" + firstCellInRange + "))";
|
||
break;
|
||
case Asc.ECfType.containsErrors:
|
||
res = "ISERROR(" + firstCellInRange + ")";
|
||
break;
|
||
case Asc.ECfType.notContainsBlanks:
|
||
res = "LEN(TRIM(" + firstCellInRange + "))>0";
|
||
break;
|
||
case Asc.ECfType.containsBlanks:
|
||
res = "LEN(TRIM(" + firstCellInRange + "))=0";
|
||
break;
|
||
case Asc.ECfType.timePeriod:
|
||
res = _generateTimePeriodFunction();
|
||
break;
|
||
}
|
||
}
|
||
return res;
|
||
};
|
||
|
||
CConditionalFormattingRule.prototype.asc_setTimePeriod = function (val) {
|
||
this.timePeriod = val;
|
||
var formula = this.getFormulaByType();
|
||
if (formula) {
|
||
this.aRuleElements = [];
|
||
this.aRuleElements[0] = new CFormulaCF();
|
||
this.aRuleElements[0].Text = formula;
|
||
}
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_setOperator = function (val) {
|
||
this.operator = val;
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_setPriority = function (val) {
|
||
this.priority = val;
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_setRank = function (val) {
|
||
this.rank = val;
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_setBottom = function (val) {
|
||
this.bottom = val;
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_setPercent = function (val) {
|
||
this.percent = val;
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_setAboveAverage = function (val) {
|
||
this.aboveAverage = val;
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_setEqualAverage = function (val) {
|
||
this.equalAverage = val;
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_setStdDev = function (val) {
|
||
this.stdDev = val;
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_setStopIfTrue = function (val) {
|
||
this.stopIfTrue = val;
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_setText = function (val) {
|
||
this.text = val;
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_setValue1 = function (val) {
|
||
//чищу всегда, поскольку от интерфейса всегда заново выставляются оба значения
|
||
this.aRuleElements = [];
|
||
val = correctFromInterface(val);
|
||
|
||
|
||
this.aRuleElements[0] = new CFormulaCF();
|
||
this.aRuleElements[0].Text = val;
|
||
};
|
||
CConditionalFormattingRule.prototype.asc_setValue2 = function (val) {
|
||
if (!this.aRuleElements) {
|
||
this.aRuleElements = [];
|
||
}
|
||
|
||
val = correctFromInterface(val);
|
||
|
||
this.aRuleElements[1] = new CFormulaCF();
|
||
this.aRuleElements[1].Text = val;
|
||
};
|
||
|
||
CConditionalFormattingRule.prototype.asc_setColorScaleOrDataBarOrIconSetRule = function (val) {
|
||
this.aRuleElements = [];
|
||
this.aRuleElements.push(val);
|
||
};
|
||
|
||
CConditionalFormattingRule.prototype.asc_checkScope = function (type, tableId) {
|
||
var sheet, range;
|
||
var api_sheet = Asc['editor'];
|
||
var wb = api_sheet.wbModel;
|
||
|
||
switch (type) {
|
||
case Asc.c_oAscSelectionForCFType.selection:
|
||
sheet = wb.getActiveWs();
|
||
// ToDo multiselect
|
||
range = sheet.selectionRange.getLast();
|
||
break;
|
||
case Asc.c_oAscSelectionForCFType.worksheet:
|
||
break;
|
||
case Asc.c_oAscSelectionForCFType.table:
|
||
var oTable;
|
||
if (tableId) {
|
||
oTable = wb.getTableByName(tableId, true);
|
||
if (oTable) {
|
||
sheet = wb.aWorksheets[oTable.index];
|
||
range = oTable.table.Ref;
|
||
}
|
||
} else {
|
||
//this table
|
||
sheet = wb.getActiveWs();
|
||
var thisTableIndex = sheet.autoFilters.searchRangeInTableParts(sheet.selectionRange.getLast());
|
||
if (thisTableIndex >= 0) {
|
||
range = sheet.TableParts[thisTableIndex].Ref;
|
||
} else {
|
||
sheet = null;
|
||
}
|
||
}
|
||
break;
|
||
case Asc.c_oAscSelectionForCFType.pivot:
|
||
sheet = wb.getActiveWs();
|
||
var _activeCell = sheet.selectionRange.activeCell;
|
||
var _pivot = sheet.getPivotTable(_activeCell.col, _activeCell.row);
|
||
if (_pivot) {
|
||
range = _pivot.location && _pivot.location.ref;
|
||
}
|
||
|
||
if (!range) {
|
||
sheet = null;
|
||
}
|
||
|
||
break;
|
||
}
|
||
|
||
if (range) {
|
||
var multiplyRange = new AscCommonExcel.MultiplyRange(this.ranges);
|
||
if (multiplyRange.isIntersect(range)) {
|
||
return true;
|
||
}
|
||
}
|
||
|
||
return false;
|
||
};
|
||
CConditionalFormattingRule.sStartLockCFId = 'cfrule_';
|
||
|
||
function CColorScale() {
|
||
this.aCFVOs = [];
|
||
this.aColors = [];
|
||
|
||
return this;
|
||
}
|
||
|
||
CColorScale.prototype.type = Asc.ECfType.colorScale;
|
||
CColorScale.prototype.clone = function () {
|
||
var i, res = new CColorScale();
|
||
for (i = 0; i < this.aCFVOs.length; ++i) {
|
||
res.aCFVOs.push(this.aCFVOs[i].clone());
|
||
}
|
||
for (i = 0; i < this.aColors.length; ++i) {
|
||
res.aColors.push(this.aColors[i].clone());
|
||
}
|
||
return res;
|
||
};
|
||
CColorScale.prototype.merge = function (obj) {
|
||
if (this.aCFVOs.length === 0) {
|
||
this.aCFVOs = obj.aCFVOs;
|
||
} else if (this.aCFVOs.length === obj.aCFVOs.length) {
|
||
for (var i = 0; i < this.aCFVOs.length; i++) {
|
||
this.aCFVOs[i].merge(obj.aCFVOs[i]);
|
||
}
|
||
}
|
||
|
||
if (this.aColors && this.aColors.length === 0) {
|
||
this.aColors = obj.aColors;
|
||
} else if (this.aColors && obj.aColors && this.aColors.length === obj.aColors.length) {
|
||
for (var i = 0; i < this.aColors.length; i++) {
|
||
//TODO
|
||
//this.aCFVOs[i].merge(obj.aCFVOs[i]);
|
||
}
|
||
}
|
||
};
|
||
CColorScale.prototype.applyPreset = function (styleIndex) {
|
||
var presetStyles = conditionalFormattingPresets[Asc.c_oAscCFRuleTypeSettings.colorScale][styleIndex];
|
||
for (var i = 0; i < presetStyles.length; i++) {
|
||
var formatValueObject = new CConditionalFormatValueObject();
|
||
formatValueObject.Type = presetStyles[i][0] ? presetStyles[i][0] : null;
|
||
formatValueObject.Val = presetStyles[i][1] ? presetStyles[i][1] + "" : null;
|
||
var colorObject = new AscCommonExcel.RgbColor(presetStyles[i][2] ? presetStyles[i][2] : 0);
|
||
this.aCFVOs.push(formatValueObject);
|
||
this.aColors.push(colorObject);
|
||
}
|
||
};
|
||
CColorScale.prototype.Write_ToBinary2 = function (writer) {
|
||
//CConditionalFormatValueObject
|
||
var i;
|
||
if (null != this.aCFVOs) {
|
||
writer.WriteBool(true);
|
||
writer.WriteLong(this.aCFVOs.length);
|
||
for (i = 0; i < this.aCFVOs.length; i++) {
|
||
this.aCFVOs[i].Write_ToBinary2(writer);
|
||
}
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
//rgbcolor,...
|
||
if (null != this.aColors) {
|
||
writer.WriteBool(true);
|
||
writer.WriteLong(this.aColors.length);
|
||
for (i = 0; i < this.aColors.length; i++) {
|
||
writer.WriteLong(this.aColors[i].getType());
|
||
this.aColors[i].Write_ToBinary2(writer);
|
||
}
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
};
|
||
CColorScale.prototype.Read_FromBinary2 = function (reader) {
|
||
var i, length, elem;
|
||
if (reader.GetBool()) {
|
||
length = reader.GetULong();
|
||
for (i = 0; i < length; ++i) {
|
||
if (!this.aCFVOs) {
|
||
this.aCFVOs = [];
|
||
}
|
||
elem = new CConditionalFormatValueObject();
|
||
elem.Read_FromBinary2(reader);
|
||
this.aCFVOs.push(elem);
|
||
}
|
||
}
|
||
|
||
if (reader.GetBool()) {
|
||
length = reader.GetULong();
|
||
for (i = 0; i < length; ++i) {
|
||
if (!this.aColors) {
|
||
this.aColors = [];
|
||
}
|
||
//TODO colors!!!
|
||
var type = reader.GetLong();
|
||
switch (type) {
|
||
case AscCommonExcel.UndoRedoDataTypes.RgbColor:
|
||
elem = new AscCommonExcel.RgbColor();
|
||
break;
|
||
case AscCommonExcel.UndoRedoDataTypes.ThemeColor:
|
||
elem = new AscCommonExcel.ThemeColor();
|
||
break;
|
||
}
|
||
if (null != elem.Read_FromBinary2) {
|
||
elem.Read_FromBinary2(reader);
|
||
} else if (null != elem.Read_FromBinary2AndReplace) {
|
||
elem = elem.Read_FromBinary2AndReplace(reader);
|
||
}
|
||
this.aColors.push(elem);
|
||
}
|
||
}
|
||
};
|
||
CColorScale.prototype.asc_getCFVOs = function () {
|
||
return this.aCFVOs;
|
||
};
|
||
CColorScale.prototype.asc_getColors = function () {
|
||
var res = [];
|
||
for (var i = 0; i < this.aColors.length; ++i) {
|
||
res.push(Asc.colorObjToAscColor(this.aColors[i]));
|
||
}
|
||
return res;
|
||
};
|
||
CColorScale.prototype.asc_getPreview = function (api, id) {
|
||
return AscCommonExcel.drawGradientPreview(id, api.wb, this.aColors);
|
||
};
|
||
CColorScale.prototype.asc_setCFVOs = function (val) {
|
||
this.aCFVOs = val;
|
||
};
|
||
CColorScale.prototype.asc_setColors = function (val) {
|
||
var newArr = [];
|
||
for (var i = 0; i < val.length; ++i) {
|
||
if (this.aColors[i] && this.aColors[i].getR() === val[i].asc_getR() && this.aColors[i].getG() === val[i].asc_getG() && this.aColors[i].getB() === val[i].asc_getB()) {
|
||
newArr.push(this.aColors[i]);
|
||
} else {
|
||
newArr.push(AscCommonExcel.CorrectAscColor(val[i]));
|
||
}
|
||
}
|
||
this.aColors = newArr;
|
||
};
|
||
CColorScale.prototype.isEqual = function (elem) {
|
||
if ((elem.aCFVOs && elem.aCFVOs.length === this.aCFVOs.length) || (!elem.aCFVOs && !this.aCFVOs)) {
|
||
var i;
|
||
if (elem.aCFVOs) {
|
||
for (i = 0; i < elem.aCFVOs.length; i++) {
|
||
if (!elem.aCFVOs[i].isEqual(this.aCFVOs[i])) {
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
if ((elem.aColors && elem.aColors.length === this.aColors.length) || (!elem.aColors && !this.aColors)) {
|
||
if (elem.aColors) {
|
||
for (i = 0; i < elem.aColors.length; i++) {
|
||
if (!elem.aColors[i].isEqual(this.aColors[i])) {
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
}
|
||
|
||
return false;
|
||
};
|
||
CColorScale.prototype.getType = function () {
|
||
return window['AscCommonExcel'].UndoRedoDataTypes.ColorScale;
|
||
};
|
||
|
||
function CDataBar() {
|
||
this.MaxLength = 90;
|
||
this.MinLength = 10;
|
||
this.ShowValue = true;
|
||
this.AxisPosition = AscCommonExcel.EDataBarAxisPosition.automatic;
|
||
this.Gradient = true;
|
||
this.Direction = AscCommonExcel.EDataBarDirection.context;
|
||
this.NegativeBarColorSameAsPositive = false;
|
||
this.NegativeBarBorderColorSameAsPositive = true;
|
||
|
||
this.aCFVOs = [];
|
||
this.Color = null;
|
||
this.NegativeColor = null;
|
||
this.BorderColor = null;
|
||
this.NegativeBorderColor = null;
|
||
this.AxisColor = null;
|
||
return this;
|
||
}
|
||
|
||
CDataBar.prototype.type = Asc.ECfType.dataBar;
|
||
CDataBar.prototype.clone = function () {
|
||
var i, res = new CDataBar();
|
||
res.MaxLength = this.MaxLength;
|
||
res.MinLength = this.MinLength;
|
||
res.ShowValue = this.ShowValue;
|
||
res.AxisPosition = this.AxisPosition;
|
||
res.Gradient = this.Gradient;
|
||
res.Direction = this.Direction;
|
||
res.NegativeBarColorSameAsPositive = this.NegativeBarColorSameAsPositive;
|
||
res.NegativeBarBorderColorSameAsPositive = this.NegativeBarBorderColorSameAsPositive;
|
||
for (i = 0; i < this.aCFVOs.length; ++i) {
|
||
res.aCFVOs.push(this.aCFVOs[i].clone());
|
||
}
|
||
if (this.Color) {
|
||
res.Color = this.Color.clone();
|
||
}
|
||
if (this.NegativeColor) {
|
||
res.NegativeColor = this.NegativeColor.clone();
|
||
}
|
||
if (this.BorderColor) {
|
||
res.BorderColor = this.BorderColor.clone();
|
||
}
|
||
if (this.NegativeBorderColor) {
|
||
res.NegativeBorderColor = this.NegativeBorderColor.clone();
|
||
}
|
||
if (this.AxisColor) {
|
||
res.AxisColor = this.AxisColor.clone();
|
||
}
|
||
return res;
|
||
};
|
||
CDataBar.prototype.merge = function (obj) {
|
||
//сравниваю по дефолтовым величинам
|
||
if (this.MaxLength === 90) {
|
||
this.MaxLength = obj.MaxLength;
|
||
}
|
||
if (this.MinLength === 10) {
|
||
this.MinLength = obj.MinLength;
|
||
}
|
||
if (this.ShowValue === true) {
|
||
this.ShowValue = obj.ShowValue;
|
||
}
|
||
if (this.AxisPosition === AscCommonExcel.EDataBarAxisPosition.automatic) {
|
||
this.AxisPosition = obj.AxisPosition;
|
||
}
|
||
if (this.Gradient === true) {
|
||
this.Gradient = obj.Gradient;
|
||
}
|
||
if (this.Direction === AscCommonExcel.EDataBarDirection.context) {
|
||
this.Direction = obj.Direction;
|
||
}
|
||
if (this.NegativeBarColorSameAsPositive === false) {
|
||
this.NegativeBarColorSameAsPositive = obj.NegativeBarColorSameAsPositive;
|
||
}
|
||
if (this.NegativeBarBorderColorSameAsPositive === true) {
|
||
this.NegativeBarBorderColorSameAsPositive = obj.NegativeBarBorderColorSameAsPositive;
|
||
}
|
||
|
||
if (this.aCFVOs.length === 0) {
|
||
this.aCFVOs = obj.aCFVOs;
|
||
} else if (this.aCFVOs.length === obj.aCFVOs.length) {
|
||
for (var i = 0; i < this.aCFVOs.length; i++) {
|
||
this.aCFVOs[i].merge(obj.aCFVOs[i]);
|
||
}
|
||
}
|
||
|
||
if (this.Color === null) {
|
||
this.Color = obj.Color;
|
||
}
|
||
if (this.NegativeColor === null) {
|
||
this.NegativeColor = obj.NegativeColor;
|
||
}
|
||
if (this.BorderColor === null) {
|
||
this.BorderColor = obj.BorderColor;
|
||
}
|
||
if (this.NegativeBorderColor === null) {
|
||
this.NegativeBorderColor = obj.NegativeBorderColor;
|
||
}
|
||
if (this.AxisColor === null) {
|
||
this.AxisColor = obj.AxisColor;
|
||
}
|
||
};
|
||
CDataBar.prototype.isEqual = function (elem) {
|
||
var _compareColors = function (_color1, _color2) {
|
||
if (!_color1 && !_color2) {
|
||
return true;
|
||
}
|
||
if (_color1 && _color2 && _color1.isEqual(_color2)) {
|
||
return true;
|
||
}
|
||
return false;
|
||
};
|
||
|
||
if (this.MaxLength === elem.MaxLength && this.MinLength === elem.MinLength &&
|
||
this.ShowValue === elem.ShowValue && this.AxisPosition === elem.AxisPosition &&
|
||
this.Gradient === elem.Gradient && this.Direction === elem.Direction &&
|
||
this.NegativeBarColorSameAsPositive === elem.NegativeBarColorSameAsPositive &&
|
||
this.NegativeBarBorderColorSameAsPositive === elem.NegativeBarBorderColorSameAsPositive) {
|
||
if (elem.aCFVOs && elem.aCFVOs.length === this.aCFVOs.length) {
|
||
var i;
|
||
for (i = 0; i < elem.aCFVOs.length; i++) {
|
||
if (!elem.aCFVOs[i].isEqual(this.aCFVOs[i])) {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
if (_compareColors(this.Color, elem.Color) && _compareColors(this.NegativeColor, elem.NegativeColor) &&
|
||
_compareColors(this.BorderColor, elem.BorderColor) &&
|
||
_compareColors(this.NegativeBorderColor, elem.NegativeBorderColor) &&
|
||
_compareColors(this.AxisColor, elem.AxisColor)) {
|
||
return true;
|
||
}
|
||
}
|
||
}
|
||
|
||
return false;
|
||
};
|
||
CDataBar.prototype.applyPreset = function (styleIndex) {
|
||
var _generateRgbColor = function (_color) {
|
||
if (_color === undefined || _color === null) {
|
||
return null;
|
||
}
|
||
|
||
return new AscCommonExcel.RgbColor(_color);
|
||
};
|
||
|
||
var presetStyles = conditionalFormattingPresets[Asc.c_oAscCFRuleTypeSettings.dataBar][styleIndex];
|
||
|
||
this.AxisColor = _generateRgbColor(presetStyles[0]);
|
||
this.AxisPosition = 0;
|
||
this.BorderColor = _generateRgbColor(presetStyles[1]);
|
||
this.Color = _generateRgbColor(presetStyles[2]);
|
||
this.Direction = 0;
|
||
this.Gradient = presetStyles[3];
|
||
this.MaxLength = 100;
|
||
this.MinLength = 0;
|
||
this.NegativeBarBorderColorSameAsPositive = false;
|
||
this.NegativeBarColorSameAsPositive = false;
|
||
this.NegativeBorderColor = _generateRgbColor(presetStyles[4]);
|
||
this.NegativeColor = _generateRgbColor(presetStyles[5]);
|
||
this.ShowValue = true;
|
||
|
||
var formatValueObject1 = new CConditionalFormatValueObject();
|
||
formatValueObject1.Type = AscCommonExcel.ECfvoType.AutoMin;
|
||
this.aCFVOs.push(formatValueObject1);
|
||
var formatValueObject2 = new CConditionalFormatValueObject();
|
||
formatValueObject2.Type = AscCommonExcel.ECfvoType.AutoMax;
|
||
this.aCFVOs.push(formatValueObject2);
|
||
};
|
||
CDataBar.prototype.Write_ToBinary2 = function (writer) {
|
||
if (null != this.MaxLength) {
|
||
writer.WriteBool(true);
|
||
writer.WriteLong(this.MaxLength);
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
if (null != this.MinLength) {
|
||
writer.WriteBool(true);
|
||
writer.WriteLong(this.MinLength);
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
if (null != this.ShowValue) {
|
||
writer.WriteBool(true);
|
||
writer.WriteBool(this.ShowValue);
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
if (null != this.AxisPosition) {
|
||
writer.WriteBool(true);
|
||
writer.WriteLong(this.AxisPosition);
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
if (null != this.Gradient) {
|
||
writer.WriteBool(true);
|
||
writer.WriteBool(this.Gradient);
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
if (null != this.Direction) {
|
||
writer.WriteBool(true);
|
||
writer.WriteLong(this.Direction);
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
if (null != this.NegativeBarColorSameAsPositive) {
|
||
writer.WriteBool(true);
|
||
writer.WriteBool(this.NegativeBarColorSameAsPositive);
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
if (null != this.NegativeBarBorderColorSameAsPositive) {
|
||
writer.WriteBool(true);
|
||
writer.WriteBool(this.NegativeBarBorderColorSameAsPositive);
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
|
||
//CConditionalFormatValueObject
|
||
if (null != this.aCFVOs) {
|
||
writer.WriteBool(true);
|
||
writer.WriteLong(this.aCFVOs.length);
|
||
for (var i = 0; i < this.aCFVOs.length; i++) {
|
||
this.aCFVOs[i].Write_ToBinary2(writer);
|
||
}
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
|
||
if (null != this.Color) {
|
||
writer.WriteBool(true);
|
||
writer.WriteLong(this.Color.getType());
|
||
this.Color.Write_ToBinary2(writer);
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
if (null != this.NegativeColor) {
|
||
writer.WriteBool(true);
|
||
writer.WriteLong(this.NegativeColor.getType());
|
||
this.NegativeColor.Write_ToBinary2(writer);
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
if (null != this.BorderColor) {
|
||
writer.WriteBool(true);
|
||
writer.WriteLong(this.BorderColor.getType());
|
||
this.BorderColor.Write_ToBinary2(writer);
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
if (null != this.NegativeBorderColor) {
|
||
writer.WriteBool(true);
|
||
writer.WriteLong(this.NegativeBorderColor.getType());
|
||
this.NegativeBorderColor.Write_ToBinary2(writer);
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
if (null != this.AxisColor) {
|
||
writer.WriteBool(true);
|
||
writer.WriteLong(this.AxisColor.getType());
|
||
this.AxisColor.Write_ToBinary2(writer);
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
};
|
||
CDataBar.prototype.Read_FromBinary2 = function (reader) {
|
||
if (reader.GetBool()) {
|
||
this.MaxLength = reader.GetLong();
|
||
}
|
||
if (reader.GetBool()) {
|
||
this.MinLength = reader.GetLong();
|
||
}
|
||
if (reader.GetBool()) {
|
||
this.ShowValue = reader.GetBool();
|
||
}
|
||
if (reader.GetBool()) {
|
||
this.AxisPosition = reader.GetLong();
|
||
}
|
||
if (reader.GetBool()) {
|
||
this.Gradient = reader.GetBool();
|
||
}
|
||
if (reader.GetBool()) {
|
||
this.Direction = reader.GetLong();
|
||
}
|
||
if (reader.GetBool()) {
|
||
this.NegativeBarColorSameAsPositive = reader.GetBool();
|
||
}
|
||
if (reader.GetBool()) {
|
||
this.NegativeBarBorderColorSameAsPositive = reader.GetBool();
|
||
}
|
||
|
||
var i, length, type, elem;
|
||
if (reader.GetBool()) {
|
||
length = reader.GetULong();
|
||
for (i = 0; i < length; ++i) {
|
||
if (!this.aCFVOs) {
|
||
this.aCFVOs = [];
|
||
}
|
||
elem = new CConditionalFormatValueObject();
|
||
elem.Read_FromBinary2(reader);
|
||
this.aCFVOs.push(elem);
|
||
}
|
||
}
|
||
|
||
var readColor = function () {
|
||
var type = reader.GetLong();
|
||
var _color;
|
||
switch (type) {
|
||
case AscCommonExcel.UndoRedoDataTypes.RgbColor:
|
||
_color = new AscCommonExcel.RgbColor();
|
||
break;
|
||
case AscCommonExcel.UndoRedoDataTypes.ThemeColor:
|
||
_color = new AscCommonExcel.ThemeColor();
|
||
break;
|
||
}
|
||
if (null != _color.Read_FromBinary2) {
|
||
_color.Read_FromBinary2(reader);
|
||
} else if (null != _color.Read_FromBinary2AndReplace) {
|
||
_color = _color.Read_FromBinary2AndReplace(reader);
|
||
}
|
||
return _color;
|
||
};
|
||
|
||
if (reader.GetBool()) {
|
||
this.Color = readColor();
|
||
}
|
||
if (reader.GetBool()) {
|
||
this.NegativeColor = readColor();
|
||
}
|
||
if (reader.GetBool()) {
|
||
this.BorderColor = readColor();
|
||
}
|
||
if (reader.GetBool()) {
|
||
this.NegativeBorderColor = readColor();
|
||
}
|
||
if (reader.GetBool()) {
|
||
this.AxisColor = readColor();
|
||
}
|
||
};
|
||
CDataBar.prototype.asc_setInterfaceDefault = function () {
|
||
//ms всегда создаёт правило с такими настройками, хотя в документации други дефолтовые значения
|
||
//дёргаем этот метод при создании нового правила из интерфейса
|
||
this.MinLength = 0;
|
||
this.MaxLength = 100;
|
||
};
|
||
CDataBar.prototype.asc_getPreview = function (api, id) {
|
||
var color = this.Color;
|
||
var aColors = [];
|
||
var isReverse = this.Direction === AscCommonExcel.EDataBarDirection.rightToLeft;
|
||
if (color) {
|
||
if (this.Gradient) {
|
||
var endColor = getDataBarGradientColor(color);
|
||
if (isReverse) {
|
||
aColors = [endColor, color];
|
||
} else {
|
||
aColors = [color, endColor];
|
||
}
|
||
} else {
|
||
aColors = [color];
|
||
}
|
||
}
|
||
|
||
AscCommonExcel.drawGradientPreview(id, api.wb, aColors, new AscCommon.CColor(202, 202, 202)/*this.settings.cells.defaultState.border*/, this.BorderColor, isReverse ? -0.75 : 0.75, 2);
|
||
};
|
||
CDataBar.prototype.asc_getShowValue = function () {
|
||
return this.ShowValue;
|
||
};
|
||
CDataBar.prototype.asc_getAxisPosition = function () {
|
||
//TODO после открытия менять значения для условного формтирования без ext
|
||
if (this.AxisPosition === AscCommonExcel.EDataBarAxisPosition.automatic && !this.AxisColor) {
|
||
this.AxisPosition = AscCommonExcel.EDataBarAxisPosition.none;
|
||
}
|
||
return this.AxisPosition;
|
||
};
|
||
CDataBar.prototype.asc_getGradient = function () {
|
||
return this.Gradient;
|
||
};
|
||
CDataBar.prototype.asc_getDirection = function () {
|
||
return this.Direction;
|
||
};
|
||
CDataBar.prototype.asc_getNegativeBarColorSameAsPositive = function () {
|
||
//TODO после открытия менять значения для условного формтирования без ext
|
||
//в старом формате эта опция не используется
|
||
//буду ориентироваться что если не задан NegativeColor, то эта опция выставляется в true
|
||
if (!this.NegativeColor) {
|
||
this.NegativeBarColorSameAsPositive = true;
|
||
}
|
||
return this.NegativeBarColorSameAsPositive;
|
||
};
|
||
CDataBar.prototype.asc_getNegativeBarBorderColorSameAsPositive = function () {
|
||
return this.NegativeBarBorderColorSameAsPositive;
|
||
};
|
||
CDataBar.prototype.asc_getCFVOs = function () {
|
||
return this.aCFVOs;
|
||
};
|
||
CDataBar.prototype.asc_getColor = function () {
|
||
return this.Color ? Asc.colorObjToAscColor(this.Color) : null;
|
||
};
|
||
CDataBar.prototype.asc_getNegativeColor = function () {
|
||
return this.NegativeColor ? Asc.colorObjToAscColor(this.NegativeColor) : null;
|
||
};
|
||
CDataBar.prototype.asc_getBorderColor = function () {
|
||
return this.BorderColor ? Asc.colorObjToAscColor(this.BorderColor) : null;
|
||
};
|
||
CDataBar.prototype.asc_getNegativeBorderColor = function () {
|
||
return this.NegativeBorderColor ? Asc.colorObjToAscColor(this.NegativeBorderColor) : null;
|
||
};
|
||
CDataBar.prototype.asc_getAxisColor = function () {
|
||
return this.AxisColor ? Asc.colorObjToAscColor(this.AxisColor) : null;
|
||
};
|
||
|
||
CDataBar.prototype.asc_setShowValue = function (val) {
|
||
this.ShowValue = val;
|
||
};
|
||
CDataBar.prototype.asc_setAxisPosition = function (val) {
|
||
this.AxisPosition = val;
|
||
};
|
||
CDataBar.prototype.asc_setGradient = function (val) {
|
||
this.Gradient = val;
|
||
};
|
||
CDataBar.prototype.asc_setDirection = function (val) {
|
||
this.Direction = val;
|
||
};
|
||
CDataBar.prototype.asc_setNegativeBarColorSameAsPositive = function (val) {
|
||
this.NegativeBarColorSameAsPositive = val;
|
||
};
|
||
CDataBar.prototype.asc_setNegativeBarBorderColorSameAsPositive = function (val) {
|
||
this.NegativeBarBorderColorSameAsPositive = val;
|
||
};
|
||
CDataBar.prototype.asc_setCFVOs = function (val) {
|
||
this.aCFVOs = val;
|
||
};
|
||
CDataBar.prototype.asc_setColor = function (val) {
|
||
this.Color = AscCommonExcel.CorrectAscColor(val);
|
||
};
|
||
CDataBar.prototype.asc_setNegativeColor = function (val) {
|
||
this.NegativeColor = AscCommonExcel.CorrectAscColor(val);
|
||
};
|
||
CDataBar.prototype.asc_setBorderColor = function (val) {
|
||
this.BorderColor = AscCommonExcel.CorrectAscColor(val);
|
||
if (val === null) {
|
||
this.asc_setNegativeBorderColor(val);
|
||
}
|
||
};
|
||
CDataBar.prototype.asc_setNegativeBorderColor = function (val) {
|
||
this.NegativeBorderColor = AscCommonExcel.CorrectAscColor(val);
|
||
};
|
||
CDataBar.prototype.asc_setAxisColor = function (val) {
|
||
this.AxisColor = AscCommonExcel.CorrectAscColor(val);
|
||
};
|
||
CDataBar.prototype.getType = function () {
|
||
return window['AscCommonExcel'].UndoRedoDataTypes.DataBar;
|
||
};
|
||
|
||
function CFormulaCF() {
|
||
this.Text = null;
|
||
this._f = null;
|
||
|
||
return this;
|
||
}
|
||
|
||
CFormulaCF.prototype.getType = function () {
|
||
return AscCommonExcel.UndoRedoDataTypes.CFormulaCF;
|
||
};
|
||
|
||
CFormulaCF.prototype.clone = function () {
|
||
var res = new CFormulaCF();
|
||
res.Text = this.Text;
|
||
return res;
|
||
};
|
||
CFormulaCF.prototype.Write_ToBinary2 = function (writer) {
|
||
if (null != this.Text) {
|
||
writer.WriteBool(true);
|
||
writer.WriteString2(this.Text);
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
};
|
||
CFormulaCF.prototype.Read_FromBinary2 = function (reader) {
|
||
if (reader.GetBool()) {
|
||
this.Text = reader.GetString2();
|
||
}
|
||
};
|
||
CFormulaCF.prototype.isEqual = function (val) {
|
||
return val.Text === this.Text;
|
||
};
|
||
CFormulaCF.prototype.init = function (ws, opt_parent) {
|
||
if (!this._f) {
|
||
this._f = new AscCommonExcel.parserFormula(this.Text, opt_parent, ws);
|
||
this._f.parse();
|
||
if (opt_parent) {
|
||
//todo realize removeDependencies
|
||
this._f.buildDependencies();
|
||
}
|
||
}
|
||
};
|
||
CFormulaCF.prototype.recalcFormula = function (ws, toInterface) {
|
||
var f = new AscCommonExcel.parserFormula(this.Text, null, ws);
|
||
if (f.parse(!toInterface)) {
|
||
this.Text = toInterface ? f.assembleLocale(AscCommonExcel.cFormulaFunctionToLocale, true) : f.assemble();
|
||
}
|
||
};
|
||
CFormulaCF.prototype.getFormula = function (ws, opt_parent) {
|
||
this.init(ws, opt_parent);
|
||
return this._f;
|
||
};
|
||
CFormulaCF.prototype.getValue = function (ws, opt_parent, opt_bbox, opt_offset, opt_returnRaw) {
|
||
this.init(ws, opt_parent);
|
||
var res = this._f.calculate(null, opt_bbox, opt_offset);
|
||
if (!opt_returnRaw) {
|
||
res = this._f.simplifyRefType(res);
|
||
}
|
||
return res;
|
||
};
|
||
CFormulaCF.prototype.asc_getText = function () {
|
||
return this.Text;
|
||
};
|
||
CFormulaCF.prototype.asc_setText = function (val) {
|
||
this.Text = val;
|
||
};
|
||
CFormulaCF.prototype.isExtended = function () {
|
||
//if ((m_arrFormula[i].IsInit()) && m_arrFormula[i]->isExtended())
|
||
//TODO в x2t условие, которое в нашем случае не получится использовать, мы не храним этот флаг
|
||
//m_arrFormula[i]->isExtended() -> return (m_sNodeName == L"xm:f");
|
||
return true;
|
||
};
|
||
CFormulaCF.prototype.getFormulaStr = function (needBuild) {
|
||
var res = null;
|
||
if (this._f) {
|
||
res = this._f.assembleLocale(AscCommonExcel.cFormulaFunctionToLocale, true);
|
||
} else if (needBuild) {
|
||
var oWB = Asc.editor && Asc.editor.wbModel;
|
||
if (oWB) {
|
||
var ws = oWB.getActiveWs();
|
||
if (ws) {
|
||
var _f = new AscCommonExcel.parserFormula(this.Text, null, ws);
|
||
_f.parse(true, true);
|
||
res = _f.assembleLocale(AscCommonExcel.cFormulaFunctionToLocale, true);
|
||
}
|
||
}
|
||
}
|
||
return res ? res : this.Text;
|
||
};
|
||
|
||
|
||
function CIconSet() {
|
||
this.IconSet = EIconSetType.Traffic3Lights1;
|
||
this.Percent = true;
|
||
this.Reverse = false;
|
||
this.ShowValue = true;
|
||
|
||
this.aCFVOs = [];
|
||
this.aIconSets = [];
|
||
|
||
return this;
|
||
}
|
||
|
||
CIconSet.prototype.type = Asc.ECfType.iconSet;
|
||
CIconSet.prototype.clone = function () {
|
||
var i, res = new CIconSet();
|
||
res.IconSet = this.IconSet;
|
||
res.Percent = this.Percent;
|
||
res.Reverse = this.Reverse;
|
||
res.ShowValue = this.ShowValue;
|
||
if (this.aCFVOs) {
|
||
for (i = 0; i < this.aCFVOs.length; ++i) {
|
||
res.aCFVOs.push(this.aCFVOs[i].clone());
|
||
}
|
||
}
|
||
if (this.aIconSets) {
|
||
for (i = 0; i < this.aIconSets.length; ++i) {
|
||
res.aIconSets.push(this.aIconSets[i].clone());
|
||
}
|
||
}
|
||
return res;
|
||
};
|
||
CIconSet.prototype.merge = function (obj) {
|
||
//сравниваю по дефолтовым величинам
|
||
if (this.IconSet === EIconSetType.Traffic3Lights1) {
|
||
this.IconSet = obj.IconSet;
|
||
}
|
||
if (this.Percent === true) {
|
||
this.Percent = obj.Percent;
|
||
}
|
||
if (this.Reverse === false) {
|
||
this.Reverse = obj.Reverse;
|
||
}
|
||
if (this.ShowValue === true) {
|
||
this.ShowValue = obj.ShowValue;
|
||
}
|
||
|
||
if (this.aCFVOs && this.aCFVOs.length === 0) {
|
||
this.aCFVOs = obj.aCFVOs;
|
||
} else if (this.aCFVOs && obj.aCFVOs && this.aCFVOs.length === obj.aCFVOs.length) {
|
||
for (var i = 0; i < this.aCFVOs.length; i++) {
|
||
this.aCFVOs[i].merge(obj.aCFVOs[i]);
|
||
}
|
||
}
|
||
|
||
if (this.aIconSets.length === 0) {
|
||
this.aIconSets = obj.aIconSets;
|
||
} else if (this.aIconSets.length === obj.aIconSets.length) {
|
||
for (var i = 0; i < this.aIconSets.length; i++) {
|
||
this.aIconSets[i].merge(obj.aIconSets[i]);
|
||
}
|
||
}
|
||
|
||
};
|
||
CIconSet.prototype.isEqual = function (elem) {
|
||
if (this.IconSet === elem.IconSet && this.Percent === elem.Percent && this.Reverse === elem.Reverse &&
|
||
this.ShowValue === elem.ShowValue) {
|
||
if ((elem.aCFVOs && elem.aCFVOs.length === this.aCFVOs.length) || (!elem.aCFVOs && !this.aCFVOs)) {
|
||
var i;
|
||
if (elem.aCFVOs) {
|
||
for (i = 0; i < elem.aCFVOs.length; i++) {
|
||
if (!elem.aCFVOs[i].isEqual(this.aCFVOs[i])) {
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
if (elem.aIconSets && elem.aIconSets.length === this.aIconSets.length) {
|
||
for (i = 0; i < elem.aIconSets.length; i++) {
|
||
if (!elem.aIconSets[i].isEqual(this.aIconSets[i])) {
|
||
return false;
|
||
}
|
||
}
|
||
return true;
|
||
} else if (!elem.aIconSets && !this.aIconSets) {
|
||
return true;
|
||
}
|
||
}
|
||
}
|
||
return false;
|
||
};
|
||
|
||
CIconSet.prototype.applyPreset = function (styleIndex) {
|
||
var presetStyles = conditionalFormattingPresets[Asc.c_oAscCFRuleTypeSettings.icons][styleIndex];
|
||
|
||
this.IconSet = styleIndex;
|
||
for (var i = 0; i < presetStyles.length; i++) {
|
||
var formatValueObject = new CConditionalFormatValueObject();
|
||
formatValueObject.Type = presetStyles[i][0];
|
||
formatValueObject.Val = presetStyles[i][1];
|
||
if (presetStyles[i][2]) {
|
||
formatValueObject.formula = new CFormulaCF();
|
||
formatValueObject.formula.Text = presetStyles[i][2];
|
||
}
|
||
this.aCFVOs.push(formatValueObject);
|
||
}
|
||
};
|
||
CIconSet.prototype.Write_ToBinary2 = function (writer) {
|
||
if (null != this.IconSet) {
|
||
writer.WriteBool(true);
|
||
writer.WriteLong(this.IconSet);
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
if (null != this.Percent) {
|
||
writer.WriteBool(true);
|
||
writer.WriteBool(this.Percent);
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
if (null != this.Reverse) {
|
||
writer.WriteBool(true);
|
||
writer.WriteBool(this.Reverse);
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
if (null != this.ShowValue) {
|
||
writer.WriteBool(true);
|
||
writer.WriteBool(this.ShowValue);
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
|
||
//CConditionalFormatValueObject
|
||
var i;
|
||
if (null != this.aCFVOs) {
|
||
writer.WriteBool(true);
|
||
writer.WriteLong(this.aCFVOs.length);
|
||
for (i = 0; i < this.aCFVOs.length; i++) {
|
||
this.aCFVOs[i].Write_ToBinary2(writer);
|
||
}
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
|
||
//new AscCommonExcel.CConditionalFormatIconSet()
|
||
if (null != this.aIconSets) {
|
||
writer.WriteBool(true);
|
||
writer.WriteLong(this.aIconSets.length);
|
||
for (i = 0; i < this.aIconSets.length; i++) {
|
||
this.aIconSets[i].Write_ToBinary2(writer);
|
||
}
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
};
|
||
CIconSet.prototype.Read_FromBinary2 = function (reader) {
|
||
if (reader.GetBool()) {
|
||
this.IconSet = reader.GetLong();
|
||
}
|
||
if (reader.GetBool()) {
|
||
this.Percent = reader.GetBool();
|
||
}
|
||
if (reader.GetBool()) {
|
||
this.Reverse = reader.GetBool();
|
||
}
|
||
if (reader.GetBool()) {
|
||
this.ShowValue = reader.GetBool();
|
||
}
|
||
|
||
|
||
var i, length, elem;
|
||
if (reader.GetBool()) {
|
||
length = reader.GetULong();
|
||
for (i = 0; i < length; ++i) {
|
||
if (!this.aCFVOs) {
|
||
this.aCFVOs = [];
|
||
}
|
||
elem = new CConditionalFormatValueObject();
|
||
elem.Read_FromBinary2(reader);
|
||
this.aCFVOs.push(elem);
|
||
}
|
||
}
|
||
|
||
if (reader.GetBool()) {
|
||
length = reader.GetULong();
|
||
for (i = 0; i < length; ++i) {
|
||
if (!this.aIconSets) {
|
||
this.aIconSets = [];
|
||
}
|
||
elem = new CConditionalFormatIconSet();
|
||
elem.Read_FromBinary2(reader);
|
||
this.aIconSets.push(elem);
|
||
}
|
||
}
|
||
};
|
||
CIconSet.prototype.asc_getPreview = function (api, id) {
|
||
var i, aIconImgs = [];
|
||
if (!this.Reverse) {
|
||
for (i = this.aCFVOs.length - 1; i >= 0; i--) {
|
||
aIconImgs.push(getCFIcon(this, i));
|
||
}
|
||
} else {
|
||
for (i = 0; i < this.aCFVOs.length; i++) {
|
||
aIconImgs.push(getCFIcon(this, i));
|
||
}
|
||
}
|
||
AscCommonExcel.drawIconSetPreview(id, api.wb, aIconImgs);
|
||
};
|
||
CIconSet.prototype.asc_getIconSet = function () {
|
||
return this.IconSet;
|
||
};
|
||
CIconSet.prototype.asc_getReverse = function () {
|
||
return this.Reverse;
|
||
};
|
||
CIconSet.prototype.asc_getShowValue = function () {
|
||
return this.ShowValue;
|
||
};
|
||
CIconSet.prototype.asc_getCFVOs = function () {
|
||
return this.aCFVOs;
|
||
};
|
||
CIconSet.prototype.asc_getIconSets = function () {
|
||
return this.aIconSets;
|
||
};
|
||
|
||
CIconSet.prototype.asc_setIconSet = function (val) {
|
||
this.IconSet = val;
|
||
};
|
||
CIconSet.prototype.asc_setReverse = function (val) {
|
||
this.Reverse = val;
|
||
};
|
||
CIconSet.prototype.asc_setShowValue = function (val) {
|
||
this.ShowValue = val;
|
||
};
|
||
CIconSet.prototype.asc_setCFVOs = function (val) {
|
||
this.aCFVOs = val;
|
||
};
|
||
CIconSet.prototype.asc_setIconSets = function (val) {
|
||
this.aIconSets = val == null ? [] : val;
|
||
};
|
||
CIconSet.prototype.getType = function () {
|
||
return window['AscCommonExcel'].UndoRedoDataTypes.IconSet;
|
||
};
|
||
|
||
function CConditionalFormatValueObject() {
|
||
this.Gte = true;
|
||
this.Type = null;
|
||
this.Val = null;
|
||
this.formulaParent = null;
|
||
this.formula = null;
|
||
|
||
return this;
|
||
}
|
||
|
||
CConditionalFormatValueObject.prototype.clone = function () {
|
||
var res = new CConditionalFormatValueObject();
|
||
res.Gte = this.Gte;
|
||
res.Type = this.Type;
|
||
res.Val = this.Val;
|
||
res.formulaParent = this.formulaParent ? this.formulaParent.clone() : null;
|
||
res.formula = this.formula ? this.formula.clone() : null;
|
||
return res;
|
||
};
|
||
CConditionalFormatValueObject.prototype.merge = function (obj) {
|
||
//сравниваю по дефолтовым величинам
|
||
if (this.Gte === true) {
|
||
this.Gte = obj.Gte;
|
||
}
|
||
if (obj.Type !== null) {
|
||
this.Type = obj.Type;
|
||
}
|
||
if (this.Val === null) {
|
||
this.Val = obj.Val;
|
||
}
|
||
if (this.formulaParent === null) {
|
||
this.formulaParent = obj.formulaParent;
|
||
}
|
||
if (this.formula === null) {
|
||
this.formula = obj.formula;
|
||
}
|
||
};
|
||
CConditionalFormatValueObject.prototype.Write_ToBinary2 = function (writer) {
|
||
if (null != this.Gte) {
|
||
writer.WriteBool(true);
|
||
writer.WriteBool(this.Gte);
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
if (null != this.Type) {
|
||
writer.WriteBool(true);
|
||
writer.WriteLong(this.Type);
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
if (null != this.Val) {
|
||
writer.WriteBool(true);
|
||
writer.WriteString2(this.Val);
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
};
|
||
CConditionalFormatValueObject.prototype.Read_FromBinary2 = function (reader) {
|
||
if (reader.GetBool()) {
|
||
this.Gte = reader.GetBool();
|
||
}
|
||
if (reader.GetBool()) {
|
||
this.Type = reader.GetLong();
|
||
}
|
||
if (reader.GetBool()) {
|
||
this.Val = reader.GetString2();
|
||
}
|
||
};
|
||
CConditionalFormatValueObject.prototype.asc_getGte = function () {
|
||
return this.Gte;
|
||
};
|
||
CConditionalFormatValueObject.prototype.asc_getType = function () {
|
||
return this.Type;
|
||
};
|
||
CConditionalFormatValueObject.prototype.asc_getVal = function () {
|
||
return !isNumeric(this.Val) ? "=" + this.Val : this.Val;
|
||
};
|
||
CConditionalFormatValueObject.prototype.asc_setGte = function (val) {
|
||
this.Gte = val;
|
||
};
|
||
CConditionalFormatValueObject.prototype.asc_setType = function (val) {
|
||
this.Type = val;
|
||
};
|
||
CConditionalFormatValueObject.prototype.asc_setVal = function (val) {
|
||
val = correctFromInterface(val);
|
||
this.Val = (val !== undefined && val !== null) ? val + "" : val;
|
||
};
|
||
CConditionalFormatValueObject.prototype.isEqual = function (elem) {
|
||
if (this.Gte === elem.Gte && this.Type === elem.Type && this.Val === elem.Val && this.Type === elem.Type) {
|
||
return true;
|
||
}
|
||
return false;
|
||
};
|
||
|
||
function CConditionalFormatIconSet() {
|
||
this.IconSet = null;
|
||
this.IconId = null;
|
||
|
||
return this;
|
||
}
|
||
|
||
CConditionalFormatIconSet.prototype.clone = function () {
|
||
var res = new CConditionalFormatIconSet();
|
||
res.IconSet = this.IconSet;
|
||
res.IconId = this.IconId;
|
||
return res;
|
||
};
|
||
CConditionalFormatIconSet.prototype.merge = function (obj) {
|
||
//сравниваю по дефолтовым величинам
|
||
if (this.IconSet === null) {
|
||
this.IconSet = obj.IconSet;
|
||
}
|
||
if (this.IconId === null) {
|
||
this.IconId = obj.IconId;
|
||
}
|
||
};
|
||
CConditionalFormatIconSet.prototype.isEqual = function (val) {
|
||
return this.IconSet === val.IconSet && this.IconId === val.IconId;
|
||
};
|
||
CConditionalFormatIconSet.prototype.Write_ToBinary2 = function (writer) {
|
||
if (null != this.IconSet) {
|
||
writer.WriteBool(true);
|
||
writer.WriteLong(this.IconSet);
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
if (null != this.IconId) {
|
||
writer.WriteBool(true);
|
||
writer.WriteLong(this.IconId);
|
||
} else {
|
||
writer.WriteBool(false);
|
||
}
|
||
};
|
||
CConditionalFormatIconSet.prototype.Read_FromBinary2 = function (reader) {
|
||
if (reader.GetBool()) {
|
||
this.IconSet = reader.GetLong();
|
||
}
|
||
if (reader.GetBool()) {
|
||
this.IconId = reader.GetLong();
|
||
}
|
||
};
|
||
CConditionalFormatIconSet.prototype.asc_getIconSet = function () {
|
||
return this.IconSet;
|
||
};
|
||
CConditionalFormatIconSet.prototype.asc_getIconId = function () {
|
||
return this.IconId;
|
||
};
|
||
CConditionalFormatIconSet.prototype.asc_getIndex = function () {
|
||
return this.IconId;
|
||
};
|
||
CConditionalFormatIconSet.prototype.asc_setIconSet = function (val) {
|
||
this.IconSet = val;
|
||
};
|
||
CConditionalFormatIconSet.prototype.asc_setIconId = function (val) {
|
||
this.IconId = val;
|
||
};
|
||
CConditionalFormatIconSet.prototype.asc_setIndex = function (val) {
|
||
this.IconId = val;
|
||
};
|
||
|
||
function CGradient(c1, c2) {
|
||
this.MaxColorIndex = 512;
|
||
this.base_shift = 8;
|
||
|
||
this.c1 = c1;
|
||
this.c2 = c2;
|
||
|
||
this.min = this.max = 0;
|
||
this.koef = null;
|
||
this.r1 = this.r2 = 0;
|
||
this.g1 = this.g2 = 0;
|
||
this.b1 = this.b2 = 0;
|
||
|
||
return this;
|
||
}
|
||
|
||
CGradient.prototype.init = function (min, max) {
|
||
var distance = max - min;
|
||
|
||
this.min = min;
|
||
this.max = max;
|
||
this.koef = distance ? this.MaxColorIndex / (2.0 * distance) : 0;
|
||
this.r1 = this.c1.getR();
|
||
this.g1 = this.c1.getG();
|
||
this.b1 = this.c1.getB();
|
||
this.r2 = this.c2.getR();
|
||
this.g2 = this.c2.getG();
|
||
this.b2 = this.c2.getB();
|
||
};
|
||
CGradient.prototype.calculateColor = function (indexColor) {
|
||
indexColor = ((indexColor - this.min) * this.koef) >> 0;
|
||
|
||
var r = (this.r1 + ((FT_Common.IntToUInt(this.r2 - this.r1) * indexColor) >> this.base_shift)) & 0xFF;
|
||
var g = (this.g1 + ((FT_Common.IntToUInt(this.g2 - this.g1) * indexColor) >> this.base_shift)) & 0xFF;
|
||
var b = (this.b1 + ((FT_Common.IntToUInt(this.b2 - this.b1) * indexColor) >> this.base_shift)) & 0xFF;
|
||
//console.log("index=" + indexColor + ": r=" + r + " g=" + g + " b=" + b);
|
||
return new AscCommonExcel.RgbColor((r << 16) + (g << 8) + b);
|
||
};
|
||
CGradient.prototype.getMinColor = function () {
|
||
return new AscCommonExcel.RgbColor((this.r1 << 16) + (this.g1 << 8) + this.b1);
|
||
};
|
||
CGradient.prototype.getMaxColor = function () {
|
||
return new AscCommonExcel.RgbColor((this.r2 << 16) + (this.g2 << 8) + this.b2);
|
||
};
|
||
|
||
function isValidDataRefCf(type, props) {
|
||
var i;
|
||
var ws;
|
||
|
||
var checkFormulaStack = function (_f) {
|
||
if (!_f) {
|
||
return null;
|
||
}
|
||
var stack = _f.outStack;
|
||
if (stack && stack.length) {
|
||
//если идут фрифметические операции, использования диапазонов внутри формул - ошибки на это нет
|
||
//поэтому я проверяю на одиночный диапазон
|
||
if (stack.length === 1 && (stack[0].type === AscCommonExcel.cElementType.cellsRange ||
|
||
stack[0].type === AscCommonExcel.cElementType.cellsRange3D)) {
|
||
return asc_error.NotSingleReferenceCannotUsed;
|
||
}
|
||
|
||
if (type === Asc.ECfType.colorScale || type === Asc.ECfType.dataBar || type === Asc.ECfType.iconSet) {
|
||
for (var i = 0; i < stack.length; i++) {
|
||
if (stack[i]) {
|
||
//допускаются только абсолютные ссылки
|
||
if (stack[i].type === AscCommonExcel.cElementType.cellsRange ||
|
||
stack[i].type === AscCommonExcel.cElementType.cellsRange3D ||
|
||
stack[i].type === AscCommonExcel.cElementType.cell ||
|
||
stack[i].type === AscCommonExcel.cElementType.cell3D) {
|
||
//ссылки должны быть только абсолютные
|
||
var _range = stack[i].getRange();
|
||
if (_range.bbox) {
|
||
_range = _range.bbox;
|
||
}
|
||
var isAbsRow1 = _range.isAbsRow(_range.refType1);
|
||
var isAbsCol1 = _range.isAbsCol(_range.refType1);
|
||
var isAbsRow2 = _range.isAbsRow(_range.refType2);
|
||
var isAbsCol2 = _range.isAbsCol(_range.refType2);
|
||
|
||
if (!isAbsRow1 || !isAbsCol1 || !isAbsRow2 || !isAbsCol2) {
|
||
return asc_error.CannotUseRelativeReference;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return null;
|
||
};
|
||
|
||
var _parseResultArg;
|
||
var _doParseFormula = function (sFormula) {
|
||
_parseResultArg = null;
|
||
if (!(typeof sFormula === "string" && sFormula.length > 0)) {
|
||
return;
|
||
}
|
||
if (!ws) {
|
||
var oWB = Asc.editor && Asc.editor.wbModel;
|
||
if (!oWB) {
|
||
return;
|
||
}
|
||
ws = oWB.getWorksheet(0);
|
||
}
|
||
|
||
if (sFormula.charAt(0) === '=') {
|
||
sFormula = sFormula.slice(1);
|
||
}
|
||
|
||
var _formulaParsed = new AscCommonExcel.parserFormula(sFormula, null, ws);
|
||
_parseResultArg = new AscCommonExcel.ParseResult([], []);
|
||
_formulaParsed.parse(true, true, _parseResultArg, true);
|
||
|
||
return _formulaParsed;
|
||
};
|
||
|
||
|
||
var _checkValue = function (_val, _type, _isNumeric) {
|
||
var fParser, _error;
|
||
switch (_type) {
|
||
case AscCommonExcel.ECfvoType.Formula:
|
||
if (_isNumeric) {
|
||
|
||
} else if (_val && _val[0] !== "=") {
|
||
_val = '"' + _val + '"';
|
||
} else {
|
||
fParser = _doParseFormula(_val);
|
||
if (_parseResultArg && _parseResultArg.error) {
|
||
return _parseResultArg.error;
|
||
}
|
||
|
||
//если внутри диапазон - проверяем его
|
||
_error = fParser && checkFormulaStack(fParser);
|
||
if (_error !== null) {
|
||
return _error;
|
||
}
|
||
}
|
||
break;
|
||
case AscCommonExcel.ECfvoType.Number:
|
||
if (_isNumeric) {
|
||
|
||
} else if (_val && _val[0] !== "=") {
|
||
_val = '"' + _val + '"';
|
||
} else {
|
||
fParser = _doParseFormula(_val);
|
||
if (_parseResultArg && _parseResultArg.error) {
|
||
return _parseResultArg.error;
|
||
}
|
||
|
||
//если внутри диапазон - проверяем его
|
||
_error = fParser && checkFormulaStack(fParser);
|
||
if (_error !== null) {
|
||
return _error;
|
||
}
|
||
}
|
||
break;
|
||
case AscCommonExcel.ECfvoType.Percent:
|
||
if (_isNumeric) {
|
||
if (_val < 0 && _val > 100) {
|
||
//is not valid precentile
|
||
return asc_error.NotValidPercentage;
|
||
}
|
||
} else if (_val && _val[0] !== "=") {
|
||
_val = '"' + _val + '"';
|
||
} else {
|
||
fParser = _doParseFormula(_val);
|
||
if (_parseResultArg && _parseResultArg.error) {
|
||
return _parseResultArg.error;
|
||
}
|
||
|
||
//если внутри диапазон - проверяем его
|
||
_error = fParser && checkFormulaStack(fParser);
|
||
if (_error !== null) {
|
||
return _error;
|
||
}
|
||
}
|
||
break;
|
||
case AscCommonExcel.ECfvoType.Percentile:
|
||
//в случае с индивидуальное проверкой Percentile - выдаём только 2 ошибки
|
||
if (_isNumeric) {
|
||
if (_val < 0 && _val > 100) {
|
||
//is not valid precentile
|
||
return asc_error.NotValidPercentile;
|
||
}
|
||
} else {
|
||
return asc_error.CannotAddConditionalFormatting;
|
||
}
|
||
break;
|
||
}
|
||
|
||
return null;
|
||
};
|
||
|
||
var compareRefs = function (_prevVal, _prevType, _prevNum, _val, _type, _isNum) {
|
||
//далее сравниваем ближайшие значения с одним типом, предыдущее должно быть меньше следующего
|
||
//в databar ошибка для подобного сравнения не возникает
|
||
//для iconSet сравниваем числа для типов Number/Percent/Percentile - должны идти по убыванию, сраниваем только соседние
|
||
|
||
if (_prevNum && _isNum) {
|
||
if (_isNum && _prevNum) {
|
||
_val = parseFloat(_val);
|
||
_prevVal = parseFloat(_prevVal);
|
||
}
|
||
if (type === Asc.ECfType.colorScale) {
|
||
if (_prevType === _type && type !== AscCommonExcel.ECfvoType.Formula && _prevVal > _val) {
|
||
return asc_error.ValueMustBeGreaterThen;
|
||
}
|
||
} else if (type === Asc.ECfType.iconSet) {
|
||
if (_prevType !== AscCommonExcel.ECfvoType.Formula && type !== AscCommonExcel.ECfvoType.Formula &&
|
||
_val < _prevVal) {
|
||
return asc_error.IconDataRangesOverlap;
|
||
}
|
||
}
|
||
}
|
||
|
||
return null;
|
||
};
|
||
|
||
//value, type
|
||
var prevType, prevVal, prevNum;
|
||
var nError;
|
||
var _isNumeric;
|
||
for (i = 0; i < props.length; i++) {
|
||
if (undefined !== props[i][1] && type !== Asc.ECfType.top10) {
|
||
_isNumeric = isNumeric(props[i][0]);
|
||
nError = _checkValue(props[i][0], props[i][1], _isNumeric);
|
||
if (nError !== null) {
|
||
return [nError, i];
|
||
}
|
||
|
||
if (prevType === undefined) {
|
||
prevType = props[i][1];
|
||
prevVal = props[i][0];
|
||
prevNum = _isNumeric;
|
||
} else {
|
||
if (!(i === 1 && type === Asc.ECfType.iconSet)) {
|
||
nError = compareRefs(prevVal, prevType, prevNum, props[i][0], props[i][1], _isNumeric);
|
||
}
|
||
|
||
if (nError !== null) {
|
||
return [nError, i];
|
||
}
|
||
|
||
prevType = props[i][1];
|
||
prevVal = props[i][0];
|
||
prevNum = _isNumeric;
|
||
}
|
||
} else {
|
||
//в этом случае должны быть следующие типы
|
||
if (type === Asc.ECfType.expression) {
|
||
nError = _checkValue(props[i][0], AscCommonExcel.ECfvoType.Formula);
|
||
if (nError !== null) {
|
||
return [nError, i];
|
||
}
|
||
} else if (type === Asc.ECfType.cellIs) {
|
||
nError = _checkValue(props[i][0], AscCommonExcel.ECfvoType.Formula);
|
||
if (nError !== null) {
|
||
return [nError, i];
|
||
}
|
||
} else if (type === Asc.ECfType.containsText) {
|
||
nError = _checkValue(props[i][0], AscCommonExcel.ECfvoType.Formula);
|
||
if (nError !== null) {
|
||
return [nError, i];
|
||
}
|
||
} else if (type === Asc.ECfType.top10) {
|
||
_isNumeric = isNumeric(props[i][0]);
|
||
var isPrecent = props[i][1];
|
||
if (!_isNumeric) {
|
||
return [asc_error.ErrorTop10Between, i];
|
||
} else if (!isPrecent && (props[i][0] < 0 || props[i][0] > 1000)) {
|
||
return [asc_error.ErrorTop10Between, i];
|
||
} else if (isPrecent && (props[i][0] < 0 || props[i][0] > 100)) {
|
||
return [asc_error.ErrorTop10Between, i];
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|
||
}
|
||
|
||
function correctFromInterface(val) {
|
||
let _isNumeric = isNumeric(val);
|
||
if (!_isNumeric) {
|
||
let isDate;
|
||
let isFormula;
|
||
|
||
if (val[0] === "=") {
|
||
val = val.slice(1);
|
||
isFormula = true;
|
||
} else {
|
||
isDate = AscCommon.g_oFormatParser.parseDate(val, AscCommon.g_oDefaultCultureInfo);
|
||
}
|
||
|
||
//храним число
|
||
if (isDate) {
|
||
val = isDate.value;
|
||
return val;
|
||
}
|
||
|
||
if (!isFormula) {
|
||
val = addQuotes(val);
|
||
} else {
|
||
let oWB = Asc.editor && Asc.editor.wbModel;
|
||
if (oWB) {
|
||
let ws = oWB.getActiveWs();
|
||
if (ws) {
|
||
let _f = new AscCommonExcel.parserFormula(val, null, ws);
|
||
_f.parse(true, true);
|
||
val = _f.assembleLocale(AscCommonExcel.cFormulaFunctionToLocale, true);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
return val;
|
||
}
|
||
|
||
function addQuotes(val) {
|
||
var _res;
|
||
if (val[0] === '"') {
|
||
_res = val.replace(/\"/g, "\"\"");
|
||
_res = "\"" + _res + "\"";
|
||
} else {
|
||
_res = "\"" + val + "\"";
|
||
}
|
||
return _res;
|
||
}
|
||
|
||
var isNumeric = function (_val) {
|
||
return !isNaN(parseFloat(_val)) && isFinite(_val);
|
||
};
|
||
|
||
var cDefIconSize = 16;
|
||
var cDefIconFont = 11;
|
||
|
||
var fullIconArray = ["data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik03LjUgMTVMMC41IDhINVYxSDEwVjhIMTQuNUw3LjUgMTVaIiBmaWxsPSIjRkYxMTExIi8+CjxwYXRoIGQ9Ik0xMCA4LjVIMTMuMjkyOUw3LjUgMTQuMjkyOUwxLjcwNzExIDguNUg1SDUuNVY4VjEuNUg5LjVWOFY4LjVIMTBaIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+Cjwvc3ZnPgo=",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNSA4LjVMOCAxNS41TDggMTFMMSAxMUwxIDZMOCA2TDggMS41TDE1IDguNVoiIGZpbGw9IiNGRkNGMzMiLz4KPHBhdGggZD0iTTguNSA2TDguNSAyLjcwNzExTDE0LjI5MjkgOC41TDguNSAxNC4yOTI5TDguNSAxMUw4LjUgMTAuNUw4IDEwLjVMMS41IDEwLjVMMS41IDYuNUw4IDYuNUw4LjUgNi41TDguNSA2WiIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8L3N2Zz4K",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik03LjUgMUwxNC41IDhMMTAgOFYxNUw1IDE1TDUgOEwwLjUgOEw3LjUgMVoiIGZpbGw9IiMyRTk5NUYiLz4KPHBhdGggZD0iTTUgNy41TDEuNzA3MTEgNy41TDcuNSAxLjcwNzExTDEzLjI5MjkgNy41TDEwIDcuNUg5LjVWOFYxNC41TDUuNSAxNC41TDUuNSA4VjcuNUg1WiIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8L3N2Zz4K",
|
||
'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTcuNSAxNUwwLjUgOEg1VjFIMTBWOEgxNC41TDcuNSAxNVoiIGZpbGw9IiM1MDUwNTAiLz48L3N2Zz4=',
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNSA4LjVMOCAxNS41TDggMTFMMSAxMUwxIDZMOCA2TDggMS41TDE1IDguNVoiIGZpbGw9IiM1MDUwNTAiLz4KPHBhdGggZD0iTTguNSA2TDguNSAyLjcwNzExTDE0LjI5MjkgOC41TDguNSAxNC4yOTI5TDguNSAxMUw4LjUgMTAuNUw4IDEwLjVMMS41IDEwLjVMMS41IDYuNUw4IDYuNUw4LjUgNi41TDguNSA2WiIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8L3N2Zz4K",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik03LjUgMUwxNC41IDhMMTAgOFYxNUw1IDE1TDUgOEwwLjUgOEw3LjUgMVoiIGZpbGw9IiM1MDUwNTAiLz4KPHBhdGggZD0iTTUgNy41TDEuNzA3MTEgNy41TDcuNSAxLjcwNzExTDEzLjI5MjkgNy41TDEwIDcuNUg5LjVWOFYxNC41TDUuNSAxNC41TDUuNSA4VjcuNUg1WiIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8L3N2Zz4K",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTUgMUw1IDEwTDE0IDUuNUw1IDFaIiBmaWxsPSIjRkYxMTExIi8+CjxwYXRoIGQ9Ik0xMi44ODIgNS41TDUuNSA5LjE5MDk4TDUuNSAxLjgwOTAyTDEyLjg4MiA1LjVaIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjIiIHk9IjAuOTk5OTk2IiB3aWR0aD0iMiIgaGVpZ2h0PSIxNCIgZmlsbD0iIzcyNzI3MiIvPgo8L3N2Zz4K",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTUgMUw1IDEwTDE0IDUuNUw1IDFaIiBmaWxsPSIjRkZDRjMzIi8+CjxwYXRoIGQ9Ik0xMi44ODIgNS41TDUuNSA5LjE5MDk4TDUuNSAxLjgwOTAyTDEyLjg4MiA1LjVaIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjIiIHk9IjAuOTk5OTk2IiB3aWR0aD0iMiIgaGVpZ2h0PSIxNCIgZmlsbD0iIzcyNzI3MiIvPgo8L3N2Zz4K",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTUgMUw1IDEwTDE0IDUuNUw1IDFaIiBmaWxsPSIjMkU5OTVGIi8+CjxwYXRoIGQ9Ik0xMi44ODIgNS41TDUuNSA5LjE5MDk4TDUuNSAxLjgwOTAyTDEyLjg4MiA1LjVaIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjIiIHk9IjAuOTk5OTk2IiB3aWR0aD0iMiIgaGVpZ2h0PSIxNCIgZmlsbD0iIzcyNzI3MiIvPgo8L3N2Zz4K",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iOCIgeT0iMSIgd2lkdGg9IjkuODk5NSIgaGVpZ2h0PSI5Ljg5OTUiIHJ4PSIyIiB0cmFuc2Zvcm09InJvdGF0ZSg0NSA4IDEpIiBmaWxsPSIjRkYxMTExIi8+CjxyZWN0IHg9IjgiIHk9IjEuNzA3MTEiIHdpZHRoPSI4Ljg5OTUiIGhlaWdodD0iOC44OTk1IiByeD0iMS41IiB0cmFuc2Zvcm09InJvdGF0ZSg0NSA4IDEuNzA3MTEpIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+Cjwvc3ZnPgo=",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEgMTVIMTVMOCAxTDEgMTVaIiBmaWxsPSIjRkZDRjMzIi8+CjxwYXRoIGQ9Ik04IDIuMTE4MDNMMTQuMTkxIDE0LjVIMS44MDkwMkw4IDIuMTE4MDNaIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+Cjwvc3ZnPgo=",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE1IDhDMTUgMTEuODY2IDExLjg2NiAxNSA4IDE1QzQuMTM0MDEgMTUgMSAxMS44NjYgMSA4QzEgNC4xMzQwMSA0LjEzNDAxIDEgOCAxQzExLjg2NiAxIDE1IDQuMTM0MDEgMTUgOFoiIGZpbGw9IiMyRTk5NUYiLz4KPHBhdGggZD0iTTE0LjUgOEMxNC41IDExLjU4OTkgMTEuNTg5OSAxNC41IDggMTQuNUM0LjQxMDE1IDE0LjUgMS41IDExLjU4OTkgMS41IDhDMS41IDQuNDEwMTUgNC40MTAxNSAxLjUgOCAxLjVDMTEuNTg5OSAxLjUgMTQuNSA0LjQxMDE1IDE0LjUgOFoiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz4KPC9zdmc+Cg==",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE0Ljk5OTkgNy45OTk5NkMxNC45OTk5IDExLjg2NTkgMTEuODY1OSAxNC45OTk5IDcuOTk5OTYgMTQuOTk5OUM0LjEzMzk5IDE0Ljk5OTkgMSAxMS44NjU5IDEgNy45OTk5NkMxIDQuMTMzOTkgNC4xMzM5OSAxIDcuOTk5OTYgMUMxMS44NjU5IDEgMTQuOTk5OSA0LjEzMzk5IDE0Ljk5OTkgNy45OTk5NloiIGZpbGw9IiNGRjExMTEiLz4KPHBhdGggZD0iTTE0LjQ5OTkgNy45OTk5NkMxNC40OTk5IDExLjU4OTggMTEuNTg5OCAxNC40OTk5IDcuOTk5OTYgMTQuNDk5OUM0LjQxMDEzIDE0LjQ5OTkgMS41IDExLjU4OTggMS41IDcuOTk5OTZDMS41IDQuNDEwMTMgNC40MTAxMyAxLjUgNy45OTk5NiAxLjVDMTEuNTg5OCAxLjUgMTQuNDk5OSA0LjQxMDEzIDE0LjQ5OTkgNy45OTk5NloiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik02LjU4NTggOEw0LjI5MjkxIDUuNzA3MTFMNS43MDcxMiA0LjI5Mjg5TDguMDAwMDEgNi41ODU3OUwxMC4yOTI5IDQuMjkyODlMMTEuNzA3MSA1LjcwNzExTDkuNDE0MjMgOEwxMS43MDcxIDEwLjI5MjlMMTAuMjkyOSAxMS43MDcxTDguMDAwMDEgOS40MTQyMUw1LjcwNzEyIDExLjcwNzFMNC4yOTI5MSAxMC4yOTI5TDYuNTg1OCA4WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE1IDhDMTUgMTEuODY2IDExLjg2NiAxNSA4IDE1QzQuMTM0MDEgMTUgMSAxMS44NjYgMSA4QzEgNC4xMzQwMSA0LjEzNDAxIDEgOCAxQzExLjg2NiAxIDE1IDQuMTM0MDEgMTUgOFoiIGZpbGw9IiNGRkNGMzMiLz4KPHBhdGggZD0iTTE0LjUgOEMxNC41IDExLjU4OTkgMTEuNTg5OSAxNC41IDggMTQuNUM0LjQxMDE1IDE0LjUgMS41IDExLjU4OTkgMS41IDhDMS41IDQuNDEwMTUgNC40MTAxNSAxLjUgOCAxLjVDMTEuNTg5OSAxLjUgMTQuNSA0LjQxMDE1IDE0LjUgOFoiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz4KPHBhdGggZD0iTTcuMjcxNTIgOC42NTM5TDcuMDU5NiA1LjQ5MDA5QzcuMDE5ODcgNC44NzM2MiA3IDQuNDMxMDkgNyA0LjE2MjQ4QzcgMy43OTcwMSA3LjA5NDkyIDMuNTEyOTkgNy4yODQ3NyAzLjMxMDQ0QzcuNDc5MDMgMy4xMDM0OCA3LjczMjg5IDMgOC4wNDYzNiAzQzguNDI2MDUgMyA4LjY3OTkxIDMuMTMyMSA4LjgwNzk1IDMuMzk2M0M4LjkzNTk4IDMuNjU2MSA5IDQuMDMyNTggOSA0LjUyNTc2QzkgNC44MTYzOCA4Ljk4NDU1IDUuMTExNCA4Ljk1MzY0IDUuNDEwODNMOC42Njg4NyA4LjY2NzExQzguNjM3OTcgOS4wNTQ2IDguNTcxNzQgOS4zNTE4MyA4LjQ3MDIgOS41NTg3OEM4LjM2ODY1IDkuNzY1NzQgOC4yMDA4OCA5Ljg2OTIyIDcuOTY2ODkgOS44NjkyMkM3LjcyODQ4IDkuODY5MjIgNy41NjI5MSA5Ljc3MDE1IDcuNDcwMiA5LjU3MTk5QzcuMzc3NDggOS4zNjk0NCA3LjMxMTI2IDkuMDYzNDEgNy4yNzE1MiA4LjY1MzlaTTguMDA2NjIgMTNDNy43MzczMSAxMyA3LjUwMTEgMTIuOTE0MSA3LjI5ODAxIDEyLjc0MjRDNy4wOTkzNCAxMi41NjYzIDcgMTIuMzIxOSA3IDEyLjAwOTJDNyAxMS43MzYyIDcuMDk0OTIgMTEuNTA1MSA3LjI4NDc3IDExLjMxNTdDNy40NzkwMyAxMS4xMjIgNy43MTUyMyAxMS4wMjUxIDcuOTkzMzggMTEuMDI1MUM4LjI3MTUyIDExLjAyNTEgOC41MDc3MyAxMS4xMjIgOC43MDE5OSAxMS4zMTU3QzguOTAwNjYgMTEuNTA1MSA5IDExLjczNjIgOSAxMi4wMDkyQzkgMTIuMzE3NSA4LjkwMDY2IDEyLjU1OTcgOC43MDE5OSAxMi43MzU4QzguNTAzMzEgMTIuOTExOSA4LjI3MTUyIDEzIDguMDA2NjIgMTNaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE1IDhDMTUgMTEuODY2IDExLjg2NiAxNSA4IDE1QzQuMTM0MDEgMTUgMSAxMS44NjYgMSA4QzEgNC4xMzQwMSA0LjEzNDAxIDEgOCAxQzExLjg2NiAxIDE1IDQuMTM0MDEgMTUgOFoiIGZpbGw9IiMyRTk5NUYiLz4KPHBhdGggZD0iTTE0LjUgOEMxNC41IDExLjU4OTkgMTEuNTg5OSAxNC41IDggMTQuNUM0LjQxMDE1IDE0LjUgMS41IDExLjU4OTkgMS41IDhDMS41IDQuNDEwMTUgNC40MTAxNSAxLjUgOCAxLjVDMTEuNTg5OSAxLjUgMTQuNSA0LjQxMDE1IDE0LjUgOFoiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMi44MDUgNS41OTMyTDcuNjM5MTUgMTIuNjA0MUw0LjI0MTY3IDguNjUxODlMNS43NTgzIDcuMzQ4MTFMNy41MTg3MiA5LjM5NTk0TDExLjE5NDkgNC40MDY4TDEyLjgwNSA1LjU5MzJaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik02LjE5NzM1IDhMMiAzLjgwMjY1TDMuODAyNjUgMkw4IDYuMTk3MzVMMTIuMTk3MyAyTDE0IDMuODAyNjVMOS44MDI2NSA4TDE0IDEyLjE5NzNMMTIuMTk3MyAxNEw4IDkuODAyNjVMMy44MDI2NSAxNEwyIDEyLjE5NzNMNi4xOTczNSA4WiIgZmlsbD0iI0ZGMTExMSIvPgo8cGF0aCBkPSJNOC4zNTM1NSA2LjU1MDlMMTIuMTk3MyAyLjcwNzExTDEzLjI5MjkgMy44MDI2NUw5LjQ0OTEgNy42NDY0NUw5LjA5NTU1IDhMOS40NDkxIDguMzUzNTVMMTMuMjkyOSAxMi4xOTczTDEyLjE5NzMgMTMuMjkyOUw4LjM1MzU1IDkuNDQ5MUw4IDkuMDk1NTVMNy42NDY0NSA5LjQ0OTFMMy44MDI2NSAxMy4yOTI5TDIuNzA3MTEgMTIuMTk3M0w2LjU1MDkgOC4zNTM1NUw2LjkwNDQ1IDhMNi41NTA5IDcuNjQ2NDVMMi43MDcxMSAzLjgwMjY1TDMuODAyNjUgMi43MDcxMUw3LjY0NjQ1IDYuNTUwOUw4IDYuOTA0NDVMOC4zNTM1NSA2LjU1MDlaIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+Cjwvc3ZnPgo=",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTcuNDA3MjggOC45MTU0Nkw3LjA4OTQgNC40ODYxM0M3LjAyOTggMy42MjMwNyA3IDMuMDAzNTIgNyAyLjYyNzQ4QzcgMi4xMTU4MSA3LjE0MjM4IDEuNzE4MTkgNy40MjcxNSAxLjQzNDYxQzcuNzE4NTQgMS4xNDQ4NyA4LjA5OTM0IDEgOC41Njk1NCAxQzkuMTM5MDcgMSA5LjUxOTg3IDEuMTg0OTQgOS43MTE5MiAxLjU1NDgyQzkuOTAzOTcgMS45MTg1NCAxMCAyLjQ0NTYyIDEwIDMuMTM2MDZDMTAgMy41NDI5MyA5Ljk3NjgyIDMuOTU1OTcgOS45MzA0NiA0LjM3NTE2TDkuNTAzMzEgOC45MzM5NUM5LjQ1Njk1IDkuNDc2NDQgOS4zNTc2MiA5Ljg5MjU2IDkuMjA1MyAxMC4xODIzQzkuMDUyOTggMTAuNDcyIDguODAxMzIgMTAuNjE2OSA4LjQ1MDMzIDEwLjYxNjlDOC4wOTI3MiAxMC42MTY5IDcuODQ0MzcgMTAuNDc4MiA3LjcwNTMgMTAuMjAwOEM3LjU2NjIzIDkuOTE3MjIgNy40NjY4OSA5LjQ4ODc3IDcuNDA3MjggOC45MTU0NlpNOC41MDk5MyAxNUM4LjEwNTk2IDE1IDcuNzUxNjYgMTQuODc5OCA3LjQ0NzAyIDE0LjYzOTRDNy4xNDkwMSAxNC4zOTI4IDcgMTQuMDUwNiA3IDEzLjYxMjlDNyAxMy4yMzA3IDcuMTQyMzggMTIuOTA3MSA3LjQyNzE1IDEyLjY0MkM3LjcxODU0IDEyLjM3MDggOC4wNzI4NSAxMi4yMzUxIDguNDkwMDcgMTIuMjM1MUM4LjkwNzI4IDEyLjIzNTEgOS4yNjE1OSAxMi4zNzA4IDkuNTUyOTggMTIuNjQyQzkuODUwOTkgMTIuOTA3MSAxMCAxMy4yMzA3IDEwIDEzLjYxMjlDMTAgMTQuMDQ0NSA5Ljg1MDk5IDE0LjM4MzUgOS41NTI5OCAxNC42MzAxQzkuMjU0OTcgMTQuODc2NyA4LjkwNzI4IDE1IDguNTA5OTMgMTVaIiBmaWxsPSIjRkZDRjMzIi8+CjxwYXRoIGQ9Ik05LjI2ODE3IDEuNzg1MjNMOS4yNjgxNiAxLjc4NTIzTDkuMjY5NzcgMS43ODgyOUM5LjQwNjI4IDIuMDQ2ODEgOS41IDIuNDc4NTEgOS41IDMuMTM2MDZDOS41IDMuNTIzOTIgOS40Nzc5MSAzLjkxODYgOS40MzM0OSA0LjMyMDIxTDkuNDMzNDIgNC4zMjAyTDkuNDMyNjQgNC4zMjg1Mkw5LjAwNTQ5IDguODg3M0w5LjAwNTQ4IDguODg3M0w5LjAwNTEzIDguODkxMzhDOC45NjExNyA5LjQwNTczIDguODcwMDkgOS43NDU0MSA4Ljc2MjczIDkuOTQ5NjRDOC43MjQ4NyAxMC4wMjE3IDguNjg2NDkgMTAuMDU1NiA4LjY1Mjg3IDEwLjA3NDlDOC42MTczMSAxMC4wOTU0IDguNTU2NTIgMTAuMTE2OSA4LjQ1MDMzIDEwLjExNjlDOC4zMzUyOSAxMC4xMTY5IDguMjcyNTEgMTAuMDk0NyA4LjIzOTY3IDEwLjA3NjRDOC4yMTEyNCAxMC4wNjA1IDguMTgxNzggMTAuMDM0OSA4LjE1MzE2IDkuOTc4NDdDOC4wNTQxMSA5Ljc3NTMxIDcuOTYyOTUgOS40MiA3LjkwNTQyIDguODcxNThMNy41ODgyMiA0LjQ1MTY4QzcuNTg4MiA0LjQ1MTQ1IDcuNTg4MTggNC40NTEyMyA3LjU4ODE3IDQuNDUxQzcuNTI4NjQgMy41ODg5NSA3LjUgMi45ODQ2NiA3LjUgMi42Mjc0OEM3LjUgMi4yMTA3MiA3LjYxMzM0IDEuOTU0OSA3Ljc3OTg0IDEuNzg5MDNDNy45NjM4MiAxLjYwNjE2IDguMjEwODcgMS41IDguNTY5NTQgMS41QzkuMDMxMTYgMS41IDkuMTkzMiAxLjY0MDg0IDkuMjY4MTcgMS43ODUyM1pNOS4yMTIzIDEzLjAwOEw5LjIxMjIyIDEzLjAwODFMOS4yMjA2NyAxMy4wMTU2QzkuNDE3MjkgMTMuMTkwNSA5LjUgMTMuMzgwNCA5LjUgMTMuNjEyOUM5LjUgMTMuOTE0OSA5LjQwMzI1IDE0LjEwNSA5LjIzNDIzIDE0LjI0NDlDOS4wMjg1IDE0LjQxNTEgOC43OTQzNyAxNC41IDguNTA5OTMgMTQuNUM4LjIxNTU5IDE0LjUgNy45NzI5NyAxNC40MTU5IDcuNzYxNDkgMTQuMjUwNkM3LjU5Njg0IDE0LjExMjUgNy41IDEzLjkyMSA3LjUgMTMuNjEyOUM3LjUgMTMuMzcyNCA3LjU4MjYxIDEzLjE4MDQgNy43Njc4MyAxMy4wMDhDNy45NjE5MSAxMi44MjczIDguMTkyNTggMTIuNzM1MSA4LjQ5MDA3IDEyLjczNTFDOC43ODc1NSAxMi43MzUxIDkuMDE4MjMgMTIuODI3MyA5LjIxMjMgMTMuMDA4WiIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8L3N2Zz4K",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNCA0LjI5NTc4TDYuNjgyMDMgMTRMMiA4LjY3ODIxTDMuNjM0MTcgNy4yNTYwOEw2LjU1MjE4IDEwLjU3MjhMMTIuMjYyOCAzTDE0IDQuMjk1NzhaIiBmaWxsPSIjMkU5OTVGIi8+CjxwYXRoIGQ9Ik02Ljk1MTM5IDEwLjg3MzlMMTIuMzYyNiAzLjY5ODE4TDEzLjI5ODIgNC4zOTYwNEw2LjY1MjIgMTMuMjA5MUwyLjcwNzQ2IDguNzI1MzdMMy41ODcyNyA3Ljk1OTczTDYuMTc2NzggMTAuOTAzMUw2LjU4MjAyIDExLjM2MzdMNi45NTEzOSAxMC44NzM5WiIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8L3N2Zz4K",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE1IDhDMTUgMTEuODY2IDExLjg2NiAxNSA4IDE1QzQuMTM0MDEgMTUgMSAxMS44NjYgMSA4QzEgNC4xMzQwMSA0LjEzNDAxIDEgOCAxQzExLjg2NiAxIDE1IDQuMTM0MDEgMTUgOFoiIGZpbGw9IiNGRjExMTEiLz4KPHBhdGggZD0iTTE0LjUgOEMxNC41IDExLjU4OTkgMTEuNTg5OSAxNC41IDggMTQuNUM0LjQxMDE1IDE0LjUgMS41IDExLjU4OTkgMS41IDhDMS41IDQuNDEwMTUgNC40MTAxNSAxLjUgOCAxLjVDMTEuNTg5OSAxLjUgMTQuNSA0LjQxMDE1IDE0LjUgOFoiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz4KPC9zdmc+Cg==",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE1IDhDMTUgMTEuODY2IDExLjg2NiAxNSA4IDE1QzQuMTM0MDEgMTUgMSAxMS44NjYgMSA4QzEgNC4xMzQwMSA0LjEzNDAxIDEgOCAxQzExLjg2NiAxIDE1IDQuMTM0MDEgMTUgOFoiIGZpbGw9IiNGRkNGMzMiLz4KPHBhdGggZD0iTTE0LjUgOEMxNC41IDExLjU4OTkgMTEuNTg5OSAxNC41IDggMTQuNUM0LjQxMDE1IDE0LjUgMS41IDExLjU4OTkgMS41IDhDMS41IDQuNDEwMTUgNC40MTAxNSAxLjUgOCAxLjVDMTEuNTg5OSAxLjUgMTQuNSA0LjQxMDE1IDE0LjUgOFoiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz4KPC9zdmc+Cg==",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEgM0MxIDEuODk1NDMgMS44OTU0MyAxIDMgMUgxM0MxNC4xMDQ2IDEgMTUgMS44OTU0MyAxNSAzVjEzQzE1IDE0LjEwNDYgMTQuMTA0NiAxNSAxMyAxNUgzQzEuODk1NDMgMTUgMSAxNC4xMDQ2IDEgMTNWM1oiIGZpbGw9IiM1MDUwNTAiLz4KPHBhdGggZD0iTTMgMS41SDEzQzEzLjgyODQgMS41IDE0LjUgMi4xNzE1NyAxNC41IDNWMTNDMTQuNSAxMy44Mjg0IDEzLjgyODQgMTQuNSAxMyAxNC41SDNDMi4xNzE1NyAxNC41IDEuNSAxMy44Mjg0IDEuNSAxM1YzQzEuNSAyLjE3MTU3IDIuMTcxNTcgMS41IDMgMS41WiIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8cGF0aCBkPSJNMTQgOEMxNCA0LjY4NjI5IDExLjMxMzcgMiA4IDJDNC42ODYyOSAyIDIgNC42ODYyOSAyIDhDMiAxMS4zMTM3IDQuNjg2MjkgMTQgOCAxNEMxMS4zMTM3IDE0IDE0IDExLjMxMzcgMTQgOFoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xMyA4QzEzIDUuMjM4NTggMTAuNzYxNCAzIDggM0M1LjIzODU4IDMgMyA1LjIzODU4IDMgOEMzIDEwLjc2MTQgNS4yMzg1OCAxMyA4IDEzQzEwLjc2MTQgMTMgMTMgMTAuNzYxNCAxMyA4WiIgZmlsbD0iI0ZGMTExMSIvPgo8L3N2Zz4K",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEgM0MxIDEuODk1NDMgMS44OTU0MyAxIDMgMUgxM0MxNC4xMDQ2IDEgMTUgMS44OTU0MyAxNSAzVjEzQzE1IDE0LjEwNDYgMTQuMTA0NiAxNSAxMyAxNUgzQzEuODk1NDMgMTUgMSAxNC4xMDQ2IDEgMTNWM1oiIGZpbGw9IiM1MDUwNTAiLz4KPHBhdGggZD0iTTMgMS41SDEzQzEzLjgyODQgMS41IDE0LjUgMi4xNzE1NyAxNC41IDNWMTNDMTQuNSAxMy44Mjg0IDEzLjgyODQgMTQuNSAxMyAxNC41SDNDMi4xNzE1NyAxNC41IDEuNSAxMy44Mjg0IDEuNSAxM1YzQzEuNSAyLjE3MTU3IDIuMTcxNTcgMS41IDMgMS41WiIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8cGF0aCBkPSJNMTQgOEMxNCA0LjY4NjI5IDExLjMxMzcgMiA4IDJDNC42ODYyOSAyIDIgNC42ODYyOSAyIDhDMiAxMS4zMTM3IDQuNjg2MjkgMTQgOCAxNEMxMS4zMTM3IDE0IDE0IDExLjMxMzcgMTQgOFoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xMyA4QzEzIDUuMjM4NTggMTAuNzYxNCAzIDggM0M1LjIzODU4IDMgMyA1LjIzODU4IDMgOEMzIDEwLjc2MTQgNS4yMzg1OCAxMyA4IDEzQzEwLjc2MTQgMTMgMTMgMTAuNzYxNCAxMyA4WiIgZmlsbD0iI0ZGQ0YzMyIvPgo8L3N2Zz4K",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEgM0MxIDEuODk1NDMgMS44OTU0MyAxIDMgMUgxM0MxNC4xMDQ2IDEgMTUgMS44OTU0MyAxNSAzVjEzQzE1IDE0LjEwNDYgMTQuMTA0NiAxNSAxMyAxNUgzQzEuODk1NDMgMTUgMSAxNC4xMDQ2IDEgMTNWM1oiIGZpbGw9IiM1MDUwNTAiLz4KPHBhdGggZD0iTTMgMS41SDEzQzEzLjgyODQgMS41IDE0LjUgMi4xNzE1NyAxNC41IDNWMTNDMTQuNSAxMy44Mjg0IDEzLjgyODQgMTQuNSAxMyAxNC41SDNDMi4xNzE1NyAxNC41IDEuNSAxMy44Mjg0IDEuNSAxM1YzQzEuNSAyLjE3MTU3IDIuMTcxNTcgMS41IDMgMS41WiIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8cGF0aCBkPSJNMTQgOEMxNCA0LjY4NjI5IDExLjMxMzcgMiA4IDJDNC42ODYyOSAyIDIgNC42ODYyOSAyIDhDMiAxMS4zMTM3IDQuNjg2MjkgMTQgOCAxNEMxMS4zMTM3IDE0IDE0IDExLjMxMzcgMTQgOFoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xMyA4QzEzIDUuMjM4NTggMTAuNzYxNCAzIDggM0M1LjIzODU4IDMgMyA1LjIzODU4IDMgOEMzIDEwLjc2MTQgNS4yMzg1OCAxMyA4IDEzQzEwLjc2MTQgMTMgMTMgMTAuNzYxNCAxMyA4WiIgZmlsbD0iIzJFOTk1RiIvPgo8L3N2Zz4K",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMyAxNUwzLjEwMDUzIDE1TDYuMjgyNTEgMTEuODE4TDEuMzMyNzYgNi44NjgyN0w0Ljg2ODMgMy4zMzI3M0w5LjgxODA1IDguMjgyNDhMMTMgNS4xMDA1TDEzIDE1WiIgZmlsbD0iI0ZGQ0YzMyIvPgo8cGF0aCBkPSJNNi42MzYwNyAxMS40NjQ1TDIuMDM5ODcgNi44NjgyN0w0Ljg2ODMgNC4wMzk4NEw5LjQ2NDQ5IDguNjM2MDNMOS44MTgwNSA4Ljk4OTU5TDEwLjE3MTYgOC42MzYwM0wxMi41IDYuMzA3NjFMMTIuNSAxNC41TDQuMzA3NjQgMTQuNUw2LjYzNjA3IDEyLjE3MTZMNi45ODk2MiAxMS44MThMNi42MzYwNyAxMS40NjQ1WiIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8L3N2Zz4K",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMyAzTDMuMTAwNSAzTDYuMjgyNDggNi4xODE5OEwxLjMzMjczIDExLjEzMTdMNC44NjgyNyAxNC42NjczTDkuODE4MDEgOS43MTc1MUwxMyAxMi44OTk1VjNaIiBmaWxsPSIjRkZDRjMzIi8+CjxwYXRoIGQ9Ik02LjYzNjAzIDUuODI4NDNMNC4zMDc2MSAzLjVMMTIuNSAzLjVWMTEuNjkyNEwxMC4xNzE2IDkuMzYzOTZMOS44MTgwMSA5LjAxMDQxTDkuNDY0NDYgOS4zNjM5Nkw0Ljg2ODI3IDEzLjk2MDJMMi4wMzk4NCAxMS4xMzE3TDYuNjM2MDMgNi41MzU1M0w2Ljk4OTU5IDYuMTgxOThMNi42MzYwMyA1LjgyODQzWiIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8L3N2Zz4K",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwKSI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTQgMTRMNC4xMDA1MSAxNEw3LjI4MjQ5IDEwLjgxOEwyLjMzMjc0IDUuODY4MjdMNS44NjgyNyAyLjMzMjc0TDEwLjgxOCA3LjI4MjQ5TDE0IDQuMTAwNTFMMTQgMTRaIiBmaWxsPSIjNTA1MDUwIi8+CjxwYXRoIGQ9Ik0xMS4xNzE2IDcuNjM2MDRMMTMuNSA1LjMwNzYxTDEzLjUgMTMuNUw1LjMwNzYxIDEzLjVMNy42MzYwNCAxMS4xNzE2TDcuOTg5NTkgMTAuODE4TDcuNjM2MDQgMTAuNDY0NUwzLjAzOTg0IDUuODY4MjdMNS44NjgyNyAzLjAzOTg0TDEwLjQ2NDUgNy42MzYwNEwxMC44MTggNy45ODk1OUwxMS4xNzE2IDcuNjM2MDRaIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDAiPgo8cmVjdCB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwKSI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTQgMkw0LjEwMDUxIDJMNy4yODI0OSA1LjE4MTk4TDIuMzMyNzQgMTAuMTMxN0w1Ljg2ODI3IDEzLjY2NzNMMTAuODE4IDguNzE3NTFMMTQgMTEuODk5NUwxNCAyWiIgZmlsbD0iIzUwNTA1MCIvPgo8cGF0aCBkPSJNMTEuMTcxNiA4LjM2Mzk2TDEzLjUgMTAuNjkyNEwxMy41IDIuNUw1LjMwNzYxIDIuNUw3LjYzNjA0IDQuODI4NDNMNy45ODk1OSA1LjE4MTk4TDcuNjM2MDQgNS41MzU1M0wzLjAzOTg1IDEwLjEzMTdMNS44NjgyNyAxMi45NjAyTDEwLjQ2NDUgOC4zNjM5NkwxMC44MTggOC4wMTA0MUwxMS4xNzE2IDguMzYzOTZaIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDAiPgo8cmVjdCB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMSIgeT0iMTAiIHdpZHRoPSIzIiBoZWlnaHQ9IjUiIGZpbGw9IiMyMzYxQkUiLz4KPHJlY3QgeD0iMS41IiB5PSIxMC41IiB3aWR0aD0iMiIgaGVpZ2h0PSI0IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjUiIHk9IjciIHdpZHRoPSIzIiBoZWlnaHQ9IjgiIGZpbGw9IiNDQ0NDQ0MiLz4KPHJlY3QgeD0iNS41IiB5PSI3LjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjciIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz4KPHJlY3QgeD0iOSIgeT0iNCIgd2lkdGg9IjMiIGhlaWdodD0iMTEiIGZpbGw9IiNDQ0NDQ0MiLz4KPHJlY3QgeD0iOS41IiB5PSI0LjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjEwIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjEzIiB5PSIxIiB3aWR0aD0iMyIgaGVpZ2h0PSIxNCIgZmlsbD0iI0NDQ0NDQyIvPgo8cmVjdCB4PSIxMy41IiB5PSIxLjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjEzIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+Cjwvc3ZnPgo=",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMSIgeT0iMTAiIHdpZHRoPSIzIiBoZWlnaHQ9IjUiIGZpbGw9IiMyMzYxQkUiLz4KPHJlY3QgeD0iMS41IiB5PSIxMC41IiB3aWR0aD0iMiIgaGVpZ2h0PSI0IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjUiIHk9IjciIHdpZHRoPSIzIiBoZWlnaHQ9IjgiIGZpbGw9IiMyMzYxQkUiLz4KPHJlY3QgeD0iNS41IiB5PSI3LjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjciIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz4KPHJlY3QgeD0iOSIgeT0iNCIgd2lkdGg9IjMiIGhlaWdodD0iMTEiIGZpbGw9IiNDQ0NDQ0MiLz4KPHJlY3QgeD0iOS41IiB5PSI0LjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjEwIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjEzIiB5PSIxIiB3aWR0aD0iMyIgaGVpZ2h0PSIxNCIgZmlsbD0iI0NDQ0NDQyIvPgo8cmVjdCB4PSIxMy41IiB5PSIxLjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjEzIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+Cjwvc3ZnPgo=",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMSIgeT0iMTAiIHdpZHRoPSIzIiBoZWlnaHQ9IjUiIGZpbGw9IiMyMzYxQkUiLz4KPHJlY3QgeD0iMS41IiB5PSIxMC41IiB3aWR0aD0iMiIgaGVpZ2h0PSI0IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjUiIHk9IjciIHdpZHRoPSIzIiBoZWlnaHQ9IjgiIGZpbGw9IiMyMzYxQkUiLz4KPHJlY3QgeD0iNS41IiB5PSI3LjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjciIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz4KPHJlY3QgeD0iOSIgeT0iNCIgd2lkdGg9IjMiIGhlaWdodD0iMTEiIGZpbGw9IiMyMzYxQkUiLz4KPHJlY3QgeD0iOS41IiB5PSI0LjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjEwIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjEzIiB5PSIxIiB3aWR0aD0iMyIgaGVpZ2h0PSIxNCIgZmlsbD0iI0NDQ0NDQyIvPgo8cmVjdCB4PSIxMy41IiB5PSIxLjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjEzIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+Cjwvc3ZnPgo=",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMSIgeT0iMTAiIHdpZHRoPSIzIiBoZWlnaHQ9IjUiIGZpbGw9IiMyMzYxQkUiLz4KPHJlY3QgeD0iMS41IiB5PSIxMC41IiB3aWR0aD0iMiIgaGVpZ2h0PSI0IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjUiIHk9IjciIHdpZHRoPSIzIiBoZWlnaHQ9IjgiIGZpbGw9IiMyMzYxQkUiLz4KPHJlY3QgeD0iNS41IiB5PSI3LjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjciIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz4KPHJlY3QgeD0iOSIgeT0iNCIgd2lkdGg9IjMiIGhlaWdodD0iMTEiIGZpbGw9IiMyMzYxQkUiLz4KPHJlY3QgeD0iOS41IiB5PSI0LjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjEwIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjEzIiB5PSIxIiB3aWR0aD0iMyIgaGVpZ2h0PSIxNCIgZmlsbD0iIzIzNjFCRSIvPgo8cmVjdCB4PSIxMy41IiB5PSIxLjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjEzIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+Cjwvc3ZnPgo=",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGNpcmNsZSBjeD0iOCIgY3k9IjgiIHI9IjciIGZpbGw9IiM1MDUwNTAiLz4KPGNpcmNsZSBjeD0iOCIgY3k9IjgiIHI9IjYuNSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8L3N2Zz4K",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGNpcmNsZSBjeD0iOCIgY3k9IjgiIHI9IjciIGZpbGw9IiM5QjlCOUIiLz4KPGNpcmNsZSBjeD0iOCIgY3k9IjgiIHI9IjYuNSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8L3N2Zz4K",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGVsbGlwc2UgY3g9IjgiIGN5PSI4IiByeD0iNyIgcnk9IjciIHRyYW5zZm9ybT0icm90YXRlKC0xODAgOCA4KSIgZmlsbD0iI0ZGODA4MCIvPgo8cGF0aCBkPSJNMS41IDhDMS41IDQuNDEwMTUgNC40MTAxNSAxLjUgOCAxLjVDMTEuNTg5OSAxLjUgMTQuNSA0LjQxMDE1IDE0LjUgOEMxNC41IDExLjU4OTkgMTEuNTg5OSAxNC41IDggMTQuNUM0LjQxMDE1IDE0LjUgMS41IDExLjU4OTggMS41IDhaIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+Cjwvc3ZnPgo=",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48Y2lyY2xlIGN4PSI4IiBjeT0iOCIgcj0iNyIgZmlsbD0iIzUwNTA1MCIvPjxjaXJjbGUgY3g9IjgiIGN5PSI4IiByPSI2IiB0cmFuc2Zvcm09InJvdGF0ZSgtOTAgOCA4KSIgZmlsbD0id2hpdGUiLz48L3N2Zz4=",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48Y2lyY2xlIGN4PSI4IiBjeT0iOCIgcj0iNyIgZmlsbD0iIzUwNTA1MCIvPjxwYXRoIGQ9Ik04IDJDNi44MTMzMSAyIDUuNjUzMjggMi4zNTE4OSA0LjY2NjU4IDMuMDExMThDMy42Nzk4OSAzLjY3MDQ3IDIuOTEwODUgNC42MDc1NCAyLjQ1NjczIDUuNzAzOUMyLjAwMjYgNi44MDAyNSAxLjg4Mzc4IDguMDA2NjUgMi4xMTUyOSA5LjE3MDU0QzIuMzQ2OCAxMC4zMzQ0IDIuOTE4MjUgMTEuNDAzNSAzLjc1NzM2IDEyLjI0MjZDNC41OTY0OCAxMy4wODE4IDUuNjY1NTggMTMuNjUzMiA2LjgyOTQ2IDEzLjg4NDdDNy45OTMzNSAxNC4xMTYyIDkuMTk5NzUgMTMuOTk3NCAxMC4yOTYxIDEzLjU0MzNDMTEuMzkyNSAxMy4wODkxIDEyLjMyOTUgMTIuMzIwMSAxMi45ODg4IDExLjMzMzRDMTMuNjQ4MSAxMC4zNDY3IDE0IDkuMTg2NjggMTQgOEw4IDhMOCAyWiIgZmlsbD0id2hpdGUiLz48L3N2Zz4=",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48Y2lyY2xlIGN4PSI4IiBjeT0iOCIgcj0iNyIgZmlsbD0iIzUwNTA1MCIvPjxwYXRoIGQ9Ik04IDJDNi40MDg3IDIgNC44ODI1OCAyLjYzMjE0IDMuNzU3MzYgMy43NTczNkMyLjYzMjE0IDQuODgyNTggMiA2LjQwODcgMiA4QzIgOS41OTEzIDIuNjMyMTQgMTEuMTE3NCAzLjc1NzM2IDEyLjI0MjZDNC44ODI1OCAxMy4zNjc5IDYuNDA4NyAxNCA4IDE0TDggOEw4IDJaIiBmaWxsPSJ3aGl0ZSIvPjwvc3ZnPg==",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48Y2lyY2xlIGN4PSI4IiBjeT0iOCIgcj0iNyIgZmlsbD0iIzUwNTA1MCIvPjxwYXRoIGQ9Ik04IDJDNy4yMTIwNyAyIDYuNDMxODUgMi4xNTUxOSA1LjcwMzkgMi40NTY3MkM0Ljk3NTk1IDIuNzU4MjUgNC4zMTQ1MSAzLjIwMDIxIDMuNzU3MzYgMy43NTczNkMzLjIwMDIxIDQuMzE0NTEgMi43NTgyNSA0Ljk3NTk1IDIuNDU2NzIgNS43MDM5QzIuMTU1MTkgNi40MzE4NSAyIDcuMjEyMDcgMiA4TDggOEw4IDJaIiBmaWxsPSJ3aGl0ZSIvPjwvc3ZnPg==",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMSIgeT0iMTAiIHdpZHRoPSIzIiBoZWlnaHQ9IjUiIGZpbGw9IiNDQ0NDQ0MiLz4KPHJlY3QgeD0iMS41IiB5PSIxMC41IiB3aWR0aD0iMiIgaGVpZ2h0PSI0IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjUiIHk9IjciIHdpZHRoPSIzIiBoZWlnaHQ9IjgiIGZpbGw9IiNDQ0NDQ0MiLz4KPHJlY3QgeD0iNS41IiB5PSI3LjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjciIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz4KPHJlY3QgeD0iOSIgeT0iNCIgd2lkdGg9IjMiIGhlaWdodD0iMTEiIGZpbGw9IiNDQ0NDQ0MiLz4KPHJlY3QgeD0iOS41IiB5PSI0LjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjEwIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjEzIiB5PSIxIiB3aWR0aD0iMyIgaGVpZ2h0PSIxNCIgZmlsbD0iI0NDQ0NDQyIvPgo8cmVjdCB4PSIxMy41IiB5PSIxLjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjEzIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+Cjwvc3ZnPgo=",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE1IDRMMSA0TDggMTNMMTUgNFoiIGZpbGw9IiNGRjExMTEiLz4KPHBhdGggZD0iTTggMTIuMTg1NkwyLjAyMjMyIDQuNUwxMy45Nzc3IDQuNUw4IDEyLjE4NTZaIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+Cjwvc3ZnPgo=",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEgNUgxNVYxMUgxVjVaIiBmaWxsPSIjRkZDRjMzIi8+CjxwYXRoIGQ9Ik0xLjUgNS41SDE0LjVWMTAuNUgxLjVWNS41WiIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8L3N2Zz4K",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEgMTJIMTVMOCAzTDEgMTJaIiBmaWxsPSIjMkU5OTVGIi8+CjxwYXRoIGQ9Ik04IDMuODE0NDFMMTMuOTc3NyAxMS41SDIuMDIyMzJMOCAzLjgxNDQxWiIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8L3N2Zz4K",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNy41IDIuMTI5NzhMOS4xMzk0OSA1LjQ1MTc1QzkuMjg1MTUgNS43NDY4OSA5LjU2NjcyIDUuOTUxNDYgOS44OTI0MyA1Ljk5ODc5TDEzLjU1ODQgNi41MzE0OUwxMC45MDU3IDkuMTE3MjlDMTAuNjcgOS4zNDcwMiAxMC41NjI1IDkuNjc4MDIgMTAuNjE4MSAxMC4wMDI0TDExLjI0NDMgMTMuNjUzNkw3Ljk2NTM0IDExLjkyOThDNy42NzQwMiAxMS43NzY2IDcuMzI1OTggMTEuNzc2NiA3LjAzNDY2IDExLjkyOThMMy43NTU2OCAxMy42NTM2TDQuMzgxOTEgMTAuMDAyNEM0LjQzNzU0IDkuNjc4MDMgNC4zMyA5LjM0NzAyIDQuMDk0MzEgOS4xMTcyOUwxLjQ0MTU2IDYuNTMxNDlMNS4xMDc1NyA1Ljk5ODc5QzUuNDMzMjggNS45NTE0NiA1LjcxNDg1IDUuNzQ2ODkgNS44NjA1MSA1LjQ1MTc1TDcuNSAyLjEyOTc4WiIgZmlsbD0id2hpdGUiIHN0cm9rZT0iIzczNzM3MyIvPjwvc3ZnPg==",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTggMi4xMjk3OEw2LjM2MDUxIDUuNDUxNzVDNi4yMTQ4NSA1Ljc0Njg5IDUuOTMzMjggNS45NTE0NiA1LjYwNzU3IDUuOTk4NzlMMS45NDE1NiA2LjUzMTQ5TDQuNTk0MzEgOS4xMTcyOUM0LjgzIDkuMzQ3MDIgNC45Mzc1NCA5LjY3ODAyIDQuODgxOTEgMTAuMDAyNEw0LjI1NTY4IDEzLjY1MzZMNy41MzQ2NiAxMS45Mjk4QzcuODI1OTggMTEuNzc2NiA4LjE3NDAyIDExLjc3NjYgOC40NjUzNCAxMS45Mjk4TDExLjc0NDMgMTMuNjUzNkwxMS4xMTgxIDEwLjAwMjRDMTEuMDYyNSA5LjY3ODAzIDExLjE3IDkuMzQ3MDIgMTEuNDA1NyA5LjExNzI5TDE0LjA1ODQgNi41MzE0OUwxMC4zOTI0IDUuOTk4NzlDMTAuMDY2NyA1Ljk1MTQ2IDkuNzg1MTUgNS43NDY4OSA5LjYzOTQ5IDUuNDUxNzVMOCAyLjEyOTc4WiIgZmlsbD0iI0ZGQ0YzMyIgc3Ryb2tlPSIjRERBMTA5Ii8+CjxwYXRoIGQ9Ik04IDEyLjMxNDlDOC4wNzk5MSAxMi4zMTQ5IDguMTU5ODIgMTIuMzM0IDguMjMyNjQgMTIuMzcyM0wxMS41MTE2IDE0LjA5NjJDMTEuODc4NCAxNC4yODkgMTIuMzA3MiAxMy45Nzc2IDEyLjIzNzEgMTMuNTY5MUwxMS42MTA5IDkuOTE3OUMxMS41ODMgOS43NTU3IDExLjYzNjggOS41OTAyIDExLjc1NDcgOS40NzUzM0wxNC40MDc0IDYuODg5NTRDMTQuNzA0MiA2LjYwMDI3IDE0LjU0MDQgNi4wOTYyOCAxNC4xMzAzIDYuMDM2NjlMMTAuNDY0MyA1LjUwMzk5QzEwLjMwMTQgNS40ODAzMiAxMC4xNjA3IDUuMzc4MDQgMTAuMDg3OCA1LjIzMDQ3TDguNDQ4MzQgMS45MDg0OUM4LjM1NjY0IDEuNzIyNjkgOC4xNzgzMiAxLjYyOTc5IDggMS42Mjk3OFYxMi4zMTQ5WiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTggMTIuMzE0OUM4LjA3OTkxIDEyLjMxNDkgOC4xNTk4MiAxMi4zMzQgOC4yMzI2NCAxMi4zNzIzTDExLjUxMTYgMTQuMDk2MkMxMS44Nzg0IDE0LjI4OSAxMi4zMDcyIDEzLjk3NzYgMTIuMjM3MSAxMy41NjkxTDExLjYxMDkgOS45MTc5QzExLjU4MyA5Ljc1NTcgMTEuNjM2OCA5LjU5MDIgMTEuNzU0NyA5LjQ3NTMzTDE0LjQwNzQgNi44ODk1NEMxNC43MDQyIDYuNjAwMjcgMTQuNTQwNCA2LjA5NjI4IDE0LjEzMDMgNi4wMzY2OUwxMC40NjQzIDUuNTAzOTlDMTAuMzAxNCA1LjQ4MDMyIDEwLjE2MDcgNS4zNzgwNCAxMC4wODc4IDUuMjMwNDdMOC40NDgzNCAxLjkwODQ5QzguMzU2NjQgMS43MjI2OSA4LjE3ODMyIDEuNjI5NzkgOCAxLjYyOTc4VjMuMjU5NjFMOS4xOTEwOSA1LjY3MzAzQzkuNDA5NTkgNi4xMTU3NSA5LjgzMTk0IDYuNDIyNiAxMC4zMjA1IDYuNDkzNTlMMTIuOTgzOSA2Ljg4MDYxTDExLjA1NjcgOC43NTkyNEMxMC43MDMxIDkuMTAzODUgMTAuNTQxOCA5LjYwMDM1IDEwLjYyNTMgMTAuMDg2OUwxMS4wODAyIDEyLjczOTZMOC42OTc5OCAxMS40ODcyQzguNDc5NSAxMS4zNzIzIDguMjM5NzUgMTEuMzE0OSA4IDExLjMxNDlWMTIuMzE0OVoiIGZpbGw9IiM3MzczNzMiLz4KPHBhdGggZD0iTTggMTIuMzE0OUM4LjA3OTkxIDEyLjMxNDkgOC4xNTk4MiAxMi4zMzQgOC4yMzI2NCAxMi4zNzIzTDExLjUxMTYgMTQuMDk2MkMxMS44Nzg0IDE0LjI4OSAxMi4zMDcyIDEzLjk3NzYgMTIuMjM3MSAxMy41NjkxTDExLjYxMDkgOS45MTc5QzExLjU4MyA5Ljc1NTcgMTEuNjM2OCA5LjU5MDIgMTEuNzU0NyA5LjQ3NTMzTDE0LjQwNzQgNi44ODk1NEMxNC43MDQyIDYuNjAwMjcgMTQuNTQwNCA2LjA5NjI4IDE0LjEzMDMgNi4wMzY2OUwxMC40NjQzIDUuNTAzOTlDMTAuMzAxNCA1LjQ4MDMyIDEwLjE2MDcgNS4zNzgwNCAxMC4wODc4IDUuMjMwNDdMOC40NDgzNCAxLjkwODQ5QzguMzU2NjQgMS43MjI2OSA4LjE3ODMyIDEuNjI5NzkgOCAxLjYyOTc4VjMuMjU5NjFMOS4xOTEwOSA1LjY3MzAzQzkuNDA5NTkgNi4xMTU3NSA5LjgzMTk0IDYuNDIyNiAxMC4zMjA1IDYuNDkzNTlMMTIuOTgzOSA2Ljg4MDYxTDExLjA1NjcgOC43NTkyNEMxMC43MDMxIDkuMTAzODUgMTAuNTQxOCA5LjYwMDM1IDEwLjYyNTMgMTAuMDg2OUwxMS4wODAyIDEyLjczOTZMOC42OTc5OCAxMS40ODcyQzguNDc5NSAxMS4zNzIzIDguMjM5NzUgMTEuMzE0OSA4IDExLjMxNDlWMTIuMzE0OVoiIGZpbGw9IiM3MzczNzMiLz4KPC9zdmc+",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNy41IDIuMTI5NzhMOS4xMzk0OSA1LjQ1MTc1QzkuMjg1MTUgNS43NDY4OSA5LjU2NjcyIDUuOTUxNDYgOS44OTI0MyA1Ljk5ODc5TDEzLjU1ODQgNi41MzE0OUwxMC45MDU3IDkuMTE3MjlDMTAuNjcgOS4zNDcwMiAxMC41NjI1IDkuNjc4MDIgMTAuNjE4MSAxMC4wMDI0TDExLjI0NDMgMTMuNjUzNkw3Ljk2NTM0IDExLjkyOThDNy42NzQwMiAxMS43NzY2IDcuMzI1OTggMTEuNzc2NiA3LjAzNDY2IDExLjkyOThMMy43NTU2OCAxMy42NTM2TDQuMzgxOTEgMTAuMDAyNEM0LjQzNzU0IDkuNjc4MDMgNC4zMyA5LjM0NzAyIDQuMDk0MzEgOS4xMTcyOUwxLjQ0MTU2IDYuNTMxNDlMNS4xMDc1NyA1Ljk5ODc5QzUuNDMzMjggNS45NTE0NiA1LjcxNDg1IDUuNzQ2ODkgNS44NjA1MSA1LjQ1MTc1TDcuNSAyLjEyOTc4WiIgZmlsbD0iI0ZGQ0YzMyIgc3Ryb2tlPSIjRERBMTA5Ii8+PC9zdmc+",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMSIgeT0iMiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgZmlsbD0iI0NDQ0NDQyIvPgo8cmVjdCB4PSIxLjUiIHk9IjIuNSIgd2lkdGg9IjUiIGhlaWdodD0iNSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8cmVjdCB4PSI4IiB5PSIyIiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBmaWxsPSIjQ0NDQ0NDIi8+CjxyZWN0IHg9IjguNSIgeT0iMi41IiB3aWR0aD0iNSIgaGVpZ2h0PSI1IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjgiIHk9IjkiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGZpbGw9IiNDQ0NDQ0MiLz4KPHJlY3QgeD0iOC41IiB5PSI5LjUiIHdpZHRoPSI1IiBoZWlnaHQ9IjUiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz4KPHJlY3QgeD0iMSIgeT0iOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgZmlsbD0iI0NDQ0NDQyIvPgo8cmVjdCB4PSIxLjUiIHk9IjkuNSIgd2lkdGg9IjUiIGhlaWdodD0iNSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8L3N2Zz4K",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMSIgeT0iMiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgZmlsbD0iI0NDQ0NDQyIvPgo8cmVjdCB4PSIxLjUiIHk9IjIuNSIgd2lkdGg9IjUiIGhlaWdodD0iNSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8cmVjdCB4PSI4IiB5PSIyIiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBmaWxsPSIjQ0NDQ0NDIi8+CjxyZWN0IHg9IjguNSIgeT0iMi41IiB3aWR0aD0iNSIgaGVpZ2h0PSI1IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjgiIHk9IjkiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGZpbGw9IiNDQ0NDQ0MiLz4KPHJlY3QgeD0iOC41IiB5PSI5LjUiIHdpZHRoPSI1IiBoZWlnaHQ9IjUiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz4KPHJlY3QgeD0iMSIgeT0iOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgZmlsbD0iIzIzNjFCRSIvPgo8cmVjdCB4PSIxLjUiIHk9IjkuNSIgd2lkdGg9IjUiIGhlaWdodD0iNSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8L3N2Zz4K",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMSIgeT0iMiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgZmlsbD0iI0NDQ0NDQyIvPgo8cmVjdCB4PSIxLjUiIHk9IjIuNSIgd2lkdGg9IjUiIGhlaWdodD0iNSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8cmVjdCB4PSI4IiB5PSIyIiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBmaWxsPSIjQ0NDQ0NDIi8+CjxyZWN0IHg9IjguNSIgeT0iMi41IiB3aWR0aD0iNSIgaGVpZ2h0PSI1IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjgiIHk9IjkiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGZpbGw9IiMyMzYxQkUiLz4KPHJlY3QgeD0iOC41IiB5PSI5LjUiIHdpZHRoPSI1IiBoZWlnaHQ9IjUiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz4KPHJlY3QgeD0iMSIgeT0iOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgZmlsbD0iIzIzNjFCRSIvPgo8cmVjdCB4PSIxLjUiIHk9IjkuNSIgd2lkdGg9IjUiIGhlaWdodD0iNSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8L3N2Zz4K",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMSIgeT0iMiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgZmlsbD0iIzIzNjFCRSIvPgo8cmVjdCB4PSIxLjUiIHk9IjIuNSIgd2lkdGg9IjUiIGhlaWdodD0iNSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8cmVjdCB4PSI4IiB5PSIyIiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBmaWxsPSIjQ0NDQ0NDIi8+CjxyZWN0IHg9IjguNSIgeT0iMi41IiB3aWR0aD0iNSIgaGVpZ2h0PSI1IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjgiIHk9IjkiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGZpbGw9IiMyMzYxQkUiLz4KPHJlY3QgeD0iOC41IiB5PSI5LjUiIHdpZHRoPSI1IiBoZWlnaHQ9IjUiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz4KPHJlY3QgeD0iMSIgeT0iOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgZmlsbD0iIzIzNjFCRSIvPgo8cmVjdCB4PSIxLjUiIHk9IjkuNSIgd2lkdGg9IjUiIGhlaWdodD0iNSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8L3N2Zz4K",
|
||
"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEgMkg3VjhIMVYyWiIgZmlsbD0iIzIzNjFCRSIvPgo8cGF0aCBkPSJNMS41IDIuNUg2LjVWNy41SDEuNVYyLjVaIiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+CjxyZWN0IHg9IjgiIHk9IjIiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGZpbGw9IiMyMzYxQkUiLz4KPHJlY3QgeD0iOC41IiB5PSIyLjUiIHdpZHRoPSI1IiBoZWlnaHQ9IjUiIHN0cm9rZT0iYmxhY2siIHN0cm9rZS1vcGFjaXR5PSIwLjIiLz4KPHJlY3QgeD0iOCIgeT0iOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgZmlsbD0iIzIzNjFCRSIvPgo8cmVjdCB4PSI4LjUiIHk9IjkuNSIgd2lkdGg9IjUiIGhlaWdodD0iNSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLW9wYWNpdHk9IjAuMiIvPgo8cmVjdCB4PSIxIiB5PSI5IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBmaWxsPSIjMjM2MUJFIi8+CjxyZWN0IHg9IjEuNSIgeT0iOS41IiB3aWR0aD0iNSIgaGVpZ2h0PSI1IiBzdHJva2U9ImJsYWNrIiBzdHJva2Utb3BhY2l0eT0iMC4yIi8+Cjwvc3ZnPgo="];
|
||
|
||
|
||
var iDown = 1, iSide = 2, iUp = 3;
|
||
var iDownGray = 4, iSideGray = 5, iUpGray = 6;
|
||
var iFlagRed = 7, iFlagYellow = 8, iFlagGreen = 9;
|
||
var iDiamondRed = 10, iTriangleYellow = 11, iCircleGreen = 12;
|
||
var iCrossRed = 13, iExclamationYellow = 14, iCheckGreen = 15;
|
||
var iCrossSymbolRed = 16, iExclamationSymbolYellow = 17, iCheckSymbolGreen = 18;
|
||
var iCircleRed = 19, iCircleYellow = 20;
|
||
var iTrafficLightRed = 21, iTrafficLightYellow = 22, iTrafficLightGreen = 23;
|
||
var iDownIncline = 24, iUpIncline = 25;
|
||
var iDownInclineGray = 26, iUpInclineGray = 27;
|
||
var iOneFilledBars = 28, iTwoFilledBars = 29, iThreeFilledBars = 30, iFourFilledBars = 31;
|
||
var iCircleBlack = 32, iCircleGray = 33, iCircleLightRed = 34;
|
||
var iCircleWhite = 35, iCircleThreeWhiteQuarters = 36, iCircleTwoWhiteQuarters = 37, iCircleOneWhiteQuarter = 38;
|
||
var iZeroFilledBars = 39;
|
||
var iTriangleRed = 40, iDashYellow = 41, iTriangleGreen = 42;
|
||
var iStarSilver = 43, iStarHalf = 44, iStarGold = 45;
|
||
var iZeroFilledBoxes = 46, iOneFilledBoxes = 47, iTwoFilledBoxes = 48, iThreeFilledBoxes = 49,
|
||
iFourFilledBoxes = 50;
|
||
|
||
var c_arrIcons = [20];
|
||
c_arrIcons[EIconSetType.Arrows3] = [iDown, iSide, iUp];
|
||
c_arrIcons[EIconSetType.Arrows3Gray] = [iDownGray, iSideGray, iUpGray];
|
||
c_arrIcons[EIconSetType.Flags3] = [iFlagRed, iFlagYellow, iFlagGreen];
|
||
c_arrIcons[EIconSetType.Signs3] = [iDiamondRed, iTriangleYellow, iCircleGreen];
|
||
c_arrIcons[EIconSetType.Symbols3] = [iCrossRed, iExclamationYellow, iCheckGreen];
|
||
c_arrIcons[EIconSetType.Symbols3_2] = [iCrossSymbolRed, iExclamationSymbolYellow, iCheckSymbolGreen];
|
||
c_arrIcons[EIconSetType.Traffic3Lights1] = [iCircleRed, iCircleYellow, iCircleGreen];
|
||
c_arrIcons[EIconSetType.Traffic3Lights2] = [iTrafficLightRed, iTrafficLightYellow, iTrafficLightGreen];
|
||
c_arrIcons[EIconSetType.Arrows4] = [iDown, iDownIncline, iUpIncline, iUp];
|
||
c_arrIcons[EIconSetType.Arrows4Gray] = [iDownGray, iDownInclineGray, iUpInclineGray, iUpGray];
|
||
c_arrIcons[EIconSetType.Rating4] = [iOneFilledBars, iTwoFilledBars, iThreeFilledBars, iFourFilledBars];
|
||
c_arrIcons[EIconSetType.RedToBlack4] = [iCircleBlack, iCircleGray, iCircleLightRed, iCircleRed];
|
||
c_arrIcons[EIconSetType.Traffic4Lights] = [iCircleBlack, iCircleRed, iCircleYellow, iCircleGreen];
|
||
c_arrIcons[EIconSetType.Arrows5] = [iDown, iDownIncline, iSide, iUpIncline, iUp];
|
||
c_arrIcons[EIconSetType.Arrows5Gray] = [iDownGray, iDownInclineGray, iSideGray, iUpInclineGray, iUpGray];
|
||
c_arrIcons[EIconSetType.Quarters5] = [iCircleWhite, iCircleThreeWhiteQuarters, iCircleTwoWhiteQuarters, iCircleOneWhiteQuarter, iCircleBlack];
|
||
c_arrIcons[EIconSetType.Rating5] = [iZeroFilledBars, iOneFilledBars, iTwoFilledBars, iThreeFilledBars, iFourFilledBars];
|
||
c_arrIcons[EIconSetType.Triangles3] = [iTriangleRed, iDashYellow, iTriangleGreen];
|
||
c_arrIcons[EIconSetType.Stars3] = [iStarSilver, iStarHalf, iStarGold];
|
||
c_arrIcons[EIconSetType.Boxes5] = [iZeroFilledBoxes, iOneFilledBoxes, iTwoFilledBoxes, iThreeFilledBoxes, iFourFilledBoxes];
|
||
|
||
function getCFIconsForLoad() {
|
||
return fullIconArray;
|
||
}
|
||
|
||
function getCFIcon(oRuleElement, index) {
|
||
var oIconSet = oRuleElement.aIconSets && oRuleElement.aIconSets[index];
|
||
var iconSetType = (oIconSet && null !== oIconSet.IconSet) ? oIconSet.IconSet : oRuleElement.IconSet;
|
||
if (EIconSetType.NoIcons === iconSetType) {
|
||
return null;
|
||
}
|
||
var icons = c_arrIcons[iconSetType] || c_arrIcons[EIconSetType.Traffic3Lights1];
|
||
return fullIconArray[(icons[(oIconSet && null !== oIconSet.IconId) ? oIconSet.IconId : index] || icons[icons.length - 1]) - 1];
|
||
}
|
||
|
||
function getDataBarGradientColor(color) {
|
||
if (!color) {
|
||
return null;
|
||
}
|
||
var RGB = {R: 0xFF, G: 0xFF, B: 0xFF};
|
||
var bCoeff = 0.828;
|
||
RGB.R = Math.min(255, (color.getR() + bCoeff * (0xFF - color.getR()) + 0.5) >> 0);
|
||
RGB.G = Math.min(255, (color.getG() + bCoeff * (0xFF - color.getG()) + 0.5) >> 0);
|
||
RGB.B = Math.min(255, (color.getB() + bCoeff * (0xFF - color.getB()) + 0.5) >> 0);
|
||
return AscCommonExcel.createRgbColor(RGB.R, RGB.G, RGB.B);
|
||
}
|
||
|
||
function getFullCFIcons() {
|
||
return fullIconArray;
|
||
}
|
||
|
||
function getCFIconsByType() {
|
||
return c_arrIcons;
|
||
}
|
||
|
||
function getFullCFPresets() {
|
||
return conditionalFormattingPresets;
|
||
}
|
||
|
||
//[AxisColor, BorderColor, Color, Gradient, NegativeBorderColor, NegativeColor]
|
||
var aDataBarStyles = [[0, 6524614, 6524614, true, 16711680, 16711680],
|
||
[0, 6538116, 6538116, true, 16711680, 16711680], [0, 16733530, 16733530, true, 16711680, 16711680],
|
||
[0, 16758312, 16758312, true, 16711680, 16711680], [0, 35567, 35567, true, 16711680, 16711680],
|
||
[0, 14024827, 14024827, true, 16711680, 16711680], [0, , 6524614, false, , 16711680],
|
||
[0, , 6538116, false, , 16711680], [0, , 16733530, false, , 16711680], [0, , 16758312, false, , 16711680],
|
||
[0, , 35567, false, , 16711680], [0, , 14024827, false, , 16711680]];
|
||
//[[Type, Val, Rgb], [Type, Val, Rgb], ...]
|
||
var aColorScaleStyles = [[[2, null, 16279915], [5, 50, 16771972], [1, null, 6536827]],
|
||
[[2, null, 6536827], [5, 50, 16771972], [1, null, 16279915]],
|
||
[[2, null, 16279915], [5, 50, 16579839], [1, null, 6536827]],
|
||
[[2, null, 6536827], [5, 50, 16579839], [1, null, 16279915]],
|
||
[[2, null, 16279915], [5, 50, 16579839], [1, null, 5933766]],
|
||
[[2, null, 5933766], [5, 50, 16579839], [1, null, 16279915]], [[2, null, 16279915], [1, null, 16579839]],
|
||
[[2, null, 16579839], [1, null, 16279915]], [[2, null, 16579839], [1, null, 6536827]],
|
||
[[2, null, 6536827], [1, null, 16579839]], [[2, null, 16773020], [1, null, 6536827]],
|
||
[[2, null, 6536827], [1, null, 16773020]]];
|
||
//[[[Type, Val, Formula], [Type, Val, Formula], ...], [[Type, Val, Formula], [Type, Val, Formula], ...]]
|
||
var aIconsStyles = [[[4, '0', null], [4, '33', null], [4, '67', '67']],
|
||
[[4, '0', null], [4, '33', null], [4, '67', '67']],
|
||
[[4, '0', null], [4, '33', null], [4, '67', '67']],
|
||
[[4, '0', null], [4, '33', null], [4, '67', '67']],
|
||
[[4, '0', null], [4, '33', null], [4, '67', '67']],
|
||
[[4, '0', null], [4, '33', null], [4, '67', '67']],
|
||
[[4, '0', null], [4, '33', null], [4, '67', '67']],
|
||
[[4, '0', null], [4, '33', null], [4, '67', '67']],
|
||
[[4, '0', null], [4, '25', null], [4, '50', null], [4, '75', '75']],
|
||
[[4, '0', null], [4, '25', null], [4, '50', null], [4, '75', '75']],
|
||
[[4, '0', null], [4, '25', null], [4, '50', null], [4, '75', '75']],
|
||
[[4, '0', null], [4, '25', null], [4, '50', null], [4, '75', '75']],
|
||
[[4, '0', null], [4, '25', null], [4, '50', null], [4, '75', '75']],
|
||
[[4, '0', null], [4, '20', null], [4, '40', null], [4, '60', null], [4, '80', '80']],
|
||
[[4, '0', null], [4, '20', null], [4, '40', null], [4, '60', null], [4, '80', '80']],
|
||
[[4, '0', null], [4, '20', null], [4, '40', null], [4, '60', null], [4, '80', '80']],
|
||
[[4, '0', null], [4, '20', null], [4, '40', null], [4, '60', null], [4, '80', '80']],
|
||
[[4, '0', null], [4, '33', null], [4, '67', '67']],
|
||
[[4, '0', null], [4, '33', null], [4, '67', '67']],
|
||
[[4, '0', null], [4, '20', null], [4, '40', null], [4, '60', null], [4, '80', '80']]];
|
||
|
||
//[[fontColor, fillColor, borderColor]]
|
||
var aFormatStyles = [["9C0006", "FFC7CE"], ["9C5700", "FFEB9C"], ["006100", "C6EFCE"], [, "FFC7CE"], ["9C0006"],
|
||
[, , "9C0006"]];
|
||
|
||
var conditionalFormattingPresets = {};
|
||
conditionalFormattingPresets[Asc.c_oAscCFRuleTypeSettings.dataBar] = aDataBarStyles;
|
||
conditionalFormattingPresets[Asc.c_oAscCFRuleTypeSettings.colorScale] = aColorScaleStyles;
|
||
conditionalFormattingPresets[Asc.c_oAscCFRuleTypeSettings.icons] = aIconsStyles;
|
||
conditionalFormattingPresets[Asc.c_oAscCFRuleTypeSettings.format] = aFormatStyles;
|
||
|
||
/*
|
||
* Export
|
||
* -----------------------------------------------------------------------------
|
||
*/
|
||
var prot;
|
||
window['AscCommonExcel'] = window['AscCommonExcel'] || {};
|
||
window['AscCommonExcel'].CConditionalFormatting = CConditionalFormatting;
|
||
window['AscCommonExcel'].CConditionalFormattingFormulaParent = CConditionalFormattingFormulaParent;
|
||
window['Asc']["asc_CConditionalFormattingRule"] = window['AscCommonExcel'].CConditionalFormattingRule = CConditionalFormattingRule;
|
||
window['Asc']["asc_CColorScale"] = window['AscCommonExcel'].CColorScale = CColorScale;
|
||
window['Asc']["asc_CDataBar"] = window['AscCommonExcel'].CDataBar = CDataBar;
|
||
window['AscCommonExcel'].CFormulaCF = CFormulaCF;
|
||
window['Asc']["asc_CIconSet"] = window['AscCommonExcel'].CIconSet = CIconSet;
|
||
window['Asc']["asc_CConditionalFormatValueObject"] = window['AscCommonExcel'].CConditionalFormatValueObject = CConditionalFormatValueObject;
|
||
window['Asc']["asc_CConditionalFormatIconSet"] = window['AscCommonExcel'].CConditionalFormatIconSet = CConditionalFormatIconSet;
|
||
window['AscCommonExcel'].CGradient = CGradient;
|
||
|
||
window['AscCommonExcel'].cDefIconSize = cDefIconSize;
|
||
window['AscCommonExcel'].cDefIconFont = cDefIconFont;
|
||
window['AscCommonExcel'].getCFIconsForLoad = getCFIconsForLoad;
|
||
window['AscCommonExcel'].getCFIcon = getCFIcon;
|
||
window['AscCommonExcel'].getDataBarGradientColor = getDataBarGradientColor;
|
||
window['AscCommonExcel'].getFullCFIcons = getFullCFIcons;
|
||
window['AscCommonExcel'].getFullCFPresets = getFullCFPresets;
|
||
window['AscCommonExcel'].getCFIconsByType = getCFIconsByType;
|
||
window['AscCommonExcel'].isValidDataRefCf = isValidDataRefCf;
|
||
|
||
prot = CConditionalFormattingRule.prototype;
|
||
prot['asc_getDxf'] = prot.asc_getDxf;
|
||
prot['asc_getType'] = prot.asc_getType;
|
||
prot['asc_getLocation'] = prot.asc_getLocation;
|
||
prot['asc_getContainsText'] = prot.asc_getContainsText;
|
||
prot['asc_getTimePeriod'] = prot.asc_getTimePeriod;
|
||
prot['asc_getOperator'] = prot.asc_getOperator;
|
||
prot['asc_getPriority'] = prot.asc_getPriority;
|
||
prot['asc_getRank'] = prot.asc_getRank;
|
||
prot['asc_getBottom'] = prot.asc_getBottom;
|
||
prot['asc_getPercent'] = prot.asc_getPercent;
|
||
prot['asc_getAboveAverage'] = prot.asc_getAboveAverage;
|
||
prot['asc_getEqualAverage'] = prot.asc_getEqualAverage;
|
||
prot['asc_getStdDev'] = prot.asc_getStdDev;
|
||
prot['asc_getValue1'] = prot.asc_getValue1;
|
||
prot['asc_getValue2'] = prot.asc_getValue2;
|
||
prot['asc_getColorScaleOrDataBarOrIconSetRule'] = prot.asc_getColorScaleOrDataBarOrIconSetRule;
|
||
prot['asc_getId'] = prot.asc_getId;
|
||
prot['asc_getIsLock'] = prot.asc_getIsLock;
|
||
prot['asc_getPreview'] = prot.asc_getPreview;
|
||
prot['asc_setDxf'] = prot.asc_setDxf;
|
||
prot['asc_setType'] = prot.asc_setType;
|
||
prot['asc_setLocation'] = prot.asc_setLocation;
|
||
prot['asc_setContainsText'] = prot.asc_setContainsText;
|
||
prot['asc_setTimePeriod'] = prot.asc_setTimePeriod;
|
||
prot['asc_setOperator'] = prot.asc_setOperator;
|
||
prot['asc_setPriority'] = prot.asc_setPriority;
|
||
prot['asc_setRank'] = prot.asc_setRank;
|
||
prot['asc_setBottom'] = prot.asc_setBottom;
|
||
prot['asc_setPercent'] = prot.asc_setPercent;
|
||
prot['asc_setAboveAverage'] = prot.asc_setAboveAverage;
|
||
prot['asc_setEqualAverage'] = prot.asc_setEqualAverage;
|
||
prot['asc_setStdDev'] = prot.asc_setStdDev;
|
||
prot['asc_setValue1'] = prot.asc_setValue1;
|
||
prot['asc_setValue2'] = prot.asc_setValue2;
|
||
prot['asc_checkScope'] = prot.asc_checkScope;
|
||
prot['asc_setColorScaleOrDataBarOrIconSetRule'] = prot.asc_setColorScaleOrDataBarOrIconSetRule;
|
||
|
||
|
||
prot = CColorScale.prototype;
|
||
prot['asc_getCFVOs'] = prot.asc_getCFVOs;
|
||
prot['asc_getColors'] = prot.asc_getColors;
|
||
prot['asc_getPreview'] = prot.asc_getPreview;
|
||
prot['asc_setCFVOs'] = prot.asc_setCFVOs;
|
||
prot['asc_setColors'] = prot.asc_setColors;
|
||
|
||
prot = CDataBar.prototype;
|
||
prot['asc_setInterfaceDefault'] = prot.asc_setInterfaceDefault;
|
||
prot['asc_getShowValue'] = prot.asc_getShowValue;
|
||
prot['asc_getAxisPosition'] = prot.asc_getAxisPosition;
|
||
prot['asc_getGradient'] = prot.asc_getGradient;
|
||
prot['asc_getDirection'] = prot.asc_getDirection;
|
||
prot['asc_getNegativeBarColorSameAsPositive'] = prot.asc_getNegativeBarColorSameAsPositive;
|
||
prot['asc_getNegativeBarBorderColorSameAsPositive'] = prot.asc_getNegativeBarBorderColorSameAsPositive;
|
||
prot['asc_getCFVOs'] = prot.asc_getCFVOs;
|
||
prot['asc_getColor'] = prot.asc_getColor;
|
||
prot['asc_getNegativeColor'] = prot.asc_getNegativeColor;
|
||
prot['asc_getBorderColor'] = prot.asc_getBorderColor;
|
||
prot['asc_getNegativeBorderColor'] = prot.asc_getNegativeBorderColor;
|
||
prot['asc_getAxisColor'] = prot.asc_getAxisColor;
|
||
prot['asc_setShowValue'] = prot.asc_setShowValue;
|
||
prot['asc_setAxisPosition'] = prot.asc_setAxisPosition;
|
||
prot['asc_setGradient'] = prot.asc_setGradient;
|
||
prot['asc_setDirection'] = prot.asc_setDirection;
|
||
prot['asc_setNegativeBarColorSameAsPositive'] = prot.asc_setNegativeBarColorSameAsPositive;
|
||
prot['asc_setNegativeBarBorderColorSameAsPositive'] = prot.asc_setNegativeBarBorderColorSameAsPositive;
|
||
prot['asc_setCFVOs'] = prot.asc_setCFVOs;
|
||
prot['asc_setColor'] = prot.asc_setColor;
|
||
prot['asc_setNegativeColor'] = prot.asc_setNegativeColor;
|
||
prot['asc_setBorderColor'] = prot.asc_setBorderColor;
|
||
prot['asc_setNegativeBorderColor'] = prot.asc_setNegativeBorderColor;
|
||
prot['asc_setAxisColor'] = prot.asc_setAxisColor;
|
||
|
||
prot = CIconSet.prototype;
|
||
prot['asc_getIconSet'] = prot.asc_getIconSet;
|
||
prot['asc_getReverse'] = prot.asc_getReverse;
|
||
prot['asc_getShowValue'] = prot.asc_getShowValue;
|
||
prot['asc_getCFVOs'] = prot.asc_getCFVOs;
|
||
prot['asc_getIconSets'] = prot.asc_getIconSets;
|
||
prot['asc_setIconSet'] = prot.asc_setIconSet;
|
||
prot['asc_setReverse'] = prot.asc_setReverse;
|
||
prot['asc_setShowValue'] = prot.asc_setShowValue;
|
||
prot['asc_setCFVOs'] = prot.asc_setCFVOs;
|
||
prot['asc_setIconSets'] = prot.asc_setIconSets;
|
||
|
||
prot = CConditionalFormatValueObject.prototype;
|
||
prot['asc_getGte'] = prot.asc_getGte;
|
||
prot['asc_getType'] = prot.asc_getType;
|
||
prot['asc_getVal'] = prot.asc_getVal;
|
||
prot['asc_setGte'] = prot.asc_setGte;
|
||
prot['asc_setType'] = prot.asc_setType;
|
||
prot['asc_setVal'] = prot.asc_setVal;
|
||
|
||
prot = CFormulaCF.prototype;
|
||
prot['asc_getText'] = prot.asc_getText;
|
||
prot['asc_setText'] = prot.asc_setText;
|
||
|
||
prot = CConditionalFormatIconSet.prototype;
|
||
prot['asc_getIconSet'] = prot.asc_getIconSet;
|
||
prot['asc_getIconId'] = prot.asc_getIconId;
|
||
prot['asc_setIconSet'] = prot.asc_setIconSet;
|
||
prot['asc_setIconId'] = prot.asc_setIconId;
|
||
|
||
})(window);
|