9459 lines
350 KiB
JavaScript
9459 lines
350 KiB
JavaScript
/*jshint -W030 */ // Expected an assignment or function call and instead saw an expression (a && a.fun1())
|
|
/*jshint -W004 */ // {a} is already defined (can use let instead of var in es6)
|
|
|
|
var spreadNS = GC.Spread.Sheets;
|
|
var DataValidation = spreadNS.DataValidation;
|
|
var ConditionalFormatting = spreadNS.ConditionalFormatting;
|
|
var ComparisonOperators = ConditionalFormatting.ComparisonOperators;
|
|
var Calc = GC.Spread.CalcEngine;
|
|
var ExpressionType = Calc.ExpressionType;
|
|
var SheetsCalc = spreadNS.CalcEngine;
|
|
var Sparklines = spreadNS.Sparklines;
|
|
var isSafari = (function () {
|
|
var tem, M = navigator.userAgent.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
|
|
if (!/trident/i.test(M[1]) && M[1] !== 'Chrome') {
|
|
M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];
|
|
if ((tem = navigator.userAgent.match(/version\/(\d+)/i)) != null) M.splice(1, 1, tem[1]);
|
|
return M[0].toLowerCase() === "safari";
|
|
}
|
|
return false;
|
|
})();
|
|
var isIE = navigator.userAgent.toLowerCase().indexOf('compatible') < 0 && /(trident)(?:.*? rv ([\w.]+)|)/.exec(navigator.userAgent.toLowerCase()) !== null;
|
|
var DOWNLOAD_DIALOG_WIDTH = 300;
|
|
|
|
var spread, excelIO;
|
|
var tableIndex = 1, pictureIndex = 1;
|
|
var fbx, isShiftKey = false;
|
|
var resourceMap = {},
|
|
conditionalFormatTexts = {};
|
|
var mergable = false, unmergable = false;
|
|
var isFirstChart = true;
|
|
var showValue = false;
|
|
var showSeriesName = false;
|
|
var showCategoryName = false;
|
|
|
|
function toggleState() {
|
|
var $element = $(this),
|
|
$parent = $element.parent(),
|
|
$content = $parent.siblings(".insp-group-content"),
|
|
$target = $parent.find("span.group-state"),
|
|
collapsed = $target.hasClass("fa-caret-right");
|
|
|
|
if (collapsed) {
|
|
$target.removeClass("fa-caret-right").addClass("fa-caret-down");
|
|
$content.slideToggle("fast");
|
|
} else {
|
|
$target.addClass("fa-caret-right").removeClass("fa-caret-down");
|
|
$content.slideToggle("fast");
|
|
}
|
|
}
|
|
|
|
function updateMergeButtonsState() {
|
|
var sheet = spread.getActiveSheet();
|
|
var sels = sheet.getSelections();
|
|
mergable = false, unmergable = false;
|
|
sels.forEach(function (range) {
|
|
var ranges = sheet.getSpans(range),
|
|
spanCount = ranges.length;
|
|
|
|
if (!mergable) {
|
|
if (spanCount > 1 || (spanCount === 0 && (range.rowCount > 1 || range.colCount > 1))) {
|
|
mergable = true;
|
|
} else if (spanCount === 1) {
|
|
var range2 = ranges[0];
|
|
if (range2.row !== range.row || range2.col !== range.col ||
|
|
range2.rowCount !== range2.rowCount || range2.colCount !== range.colCount) {
|
|
mergable = true;
|
|
}
|
|
}
|
|
}
|
|
if (!unmergable) {
|
|
unmergable = spanCount > 0;
|
|
}
|
|
});
|
|
|
|
$("#mergeCells").attr("disabled", mergable ? null : "disabled");
|
|
$("#unmergeCells").attr("disabled", unmergable ? null : "disabled");
|
|
}
|
|
|
|
function updateCellStyleState(sheet, row, column) {
|
|
var style = sheet.getActualStyle(row, column);
|
|
|
|
if (style) {
|
|
var sfont = style.font;
|
|
|
|
// Font
|
|
var font
|
|
if (sfont) {
|
|
font = parseFont(sfont);
|
|
|
|
setFontStyleButtonActive("bold", ["bold", "bolder", "700", "800", "900"].indexOf(font.fontWeight) !== -1);
|
|
setFontStyleButtonActive("italic", font.fontStyle !== 'normal');
|
|
setDropDownText($("#cellTab div.insp-dropdown-list[data-name='fontFamily']"), font.fontFamily.replace(/'/g, ""));
|
|
setDropDownText($("#cellTab div.insp-dropdown-list[data-name='fontSize']"), parseFloat(font.fontSize));
|
|
}
|
|
|
|
var underline = spreadNS.TextDecorationType.underline,
|
|
linethrough = spreadNS.TextDecorationType.lineThrough,
|
|
overline = spreadNS.TextDecorationType.overline,
|
|
textDecoration = style.textDecoration;
|
|
setFontStyleButtonActive("underline", textDecoration && ((textDecoration & underline) === underline));
|
|
setFontStyleButtonActive("strikethrough", textDecoration && ((textDecoration & linethrough) === linethrough));
|
|
setFontStyleButtonActive("overline", textDecoration && ((textDecoration & overline) === overline));
|
|
|
|
setColorValue("foreColor", style.foreColor || "#000");
|
|
setColorValue("backColor", style.backColor || "#fff");
|
|
|
|
// Alignment
|
|
setRadioButtonActive("hAlign", style.hAlign); // general (3, auto detect) without setting button just like Excel
|
|
setRadioButtonActive("vAlign", style.vAlign);
|
|
setCheckValue("wrapText", style.wordWrap);
|
|
|
|
//cell padding
|
|
var cellPadding = style.cellPadding;
|
|
if (cellPadding) {
|
|
setTextValue("cellPadding", cellPadding);
|
|
} else {
|
|
setTextValue("cellPadding", "");
|
|
}
|
|
//watermark
|
|
var watermark = style.watermark;
|
|
if (watermark) {
|
|
setTextValue("watermark", watermark);
|
|
} else {
|
|
setTextValue("watermark", "");
|
|
}
|
|
//label options
|
|
var labelOptions = style.labelOptions;
|
|
if (labelOptions) {
|
|
var lFont = labelOptions.font;
|
|
if (lFont) {
|
|
font = parseFont(lFont);
|
|
setFontStyleButtonActive("labelBold", ["bold", "bolder", "700", "800", "900"].indexOf(font.fontWeight) !== -1);
|
|
setFontStyleButtonActive("labelItalic", font.fontStyle !== 'normal');
|
|
setDropDownText($("#cellTab div.insp-dropdown-list[data-name='labelFontFamily']"), font.fontFamily.replace(/'/g, ""));
|
|
setDropDownText($("#cellTab div.insp-dropdown-list[data-name='labelFontSize']"), parseFloat(font.fontSize));
|
|
} else {
|
|
setFontStyleButtonActive("labelBold", ["bold", "bolder", "700", "800", "900"].indexOf(font.fontWeight) !== -1);
|
|
setFontStyleButtonActive("labelItalic", font.fontStyle !== 'normal');
|
|
setDropDownText($("#cellTab div.insp-dropdown-list[data-name='labelFontFamily']"), font.fontFamily.replace(/'/g, ""));
|
|
setDropDownText($("#cellTab div.insp-dropdown-list[data-name='labelFontSize']"), parseFloat(font.fontSize));
|
|
}
|
|
setColorValue("labelForeColor", labelOptions.foreColor || "#000");
|
|
setTextValue("labelMargin", labelOptions.margin || "");
|
|
setDropDownValueByIndex($("#cellLabelVisibility"), labelOptions.visibility === undefined ? 2 : labelOptions.visibility);
|
|
setDropDownValueByIndex($("#cellLabelAlignment"), labelOptions.alignment || 0);
|
|
}
|
|
}
|
|
}
|
|
|
|
function setFontStyleButtonActive(name, active) {
|
|
var $target = $("div.group-container>span[data-name='" + name + "']");
|
|
|
|
if (active) {
|
|
$target.addClass("active");
|
|
} else {
|
|
$target.removeClass("active");
|
|
}
|
|
}
|
|
|
|
function setRadioButtonActive(name, index) {
|
|
var $items = $("div.insp-radio-button-group[data-name='" + name + "'] div>span");
|
|
|
|
$items.removeClass("active");
|
|
$($items[index]).addClass("active");
|
|
}
|
|
|
|
function parseFont(font) {
|
|
var fontFamily = null,
|
|
fontSize = null,
|
|
fontStyle = "normal",
|
|
fontWeight = "normal",
|
|
fontVariant = "normal",
|
|
lineHeight = "normal";
|
|
|
|
var elements = font.split(/\s+/);
|
|
var element;
|
|
while ((element = elements.shift())) {
|
|
switch (element) {
|
|
case "normal":
|
|
break;
|
|
|
|
case "italic":
|
|
case "oblique":
|
|
fontStyle = element;
|
|
break;
|
|
|
|
case "small-caps":
|
|
fontVariant = element;
|
|
break;
|
|
|
|
case "bold":
|
|
case "bolder":
|
|
case "lighter":
|
|
case "100":
|
|
case "200":
|
|
case "300":
|
|
case "400":
|
|
case "500":
|
|
case "600":
|
|
case "700":
|
|
case "800":
|
|
case "900":
|
|
fontWeight = element;
|
|
break;
|
|
|
|
default:
|
|
if (!fontSize) {
|
|
var parts = element.split("/");
|
|
fontSize = parts[0];
|
|
if (fontSize.indexOf("px") !== -1) {
|
|
fontSize = px2pt(parseFloat(fontSize)) + 'pt';
|
|
}
|
|
if (parts.length > 1) {
|
|
lineHeight = parts[1];
|
|
if (lineHeight.indexOf("px") !== -1) {
|
|
lineHeight = px2pt(parseFloat(lineHeight)) + 'pt';
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
|
|
fontFamily = element;
|
|
if (elements.length)
|
|
fontFamily += " " + elements.join(" ");
|
|
|
|
return {
|
|
"fontStyle": fontStyle,
|
|
"fontVariant": fontVariant,
|
|
"fontWeight": fontWeight,
|
|
"fontSize": fontSize,
|
|
"lineHeight": lineHeight,
|
|
"fontFamily": fontFamily
|
|
};
|
|
}
|
|
}
|
|
|
|
return {
|
|
"fontStyle": fontStyle,
|
|
"fontVariant": fontVariant,
|
|
"fontWeight": fontWeight,
|
|
"fontSize": fontSize,
|
|
"lineHeight": lineHeight,
|
|
"fontFamily": fontFamily
|
|
};
|
|
}
|
|
|
|
var tempSpan = $("<span></span>");
|
|
function px2pt(pxValue) {
|
|
tempSpan.css({
|
|
"font-size": "96pt",
|
|
"display": "none"
|
|
});
|
|
tempSpan.appendTo($(document.body));
|
|
var tempPx = tempSpan.css("font-size");
|
|
if (tempPx.indexOf("px") !== -1) {
|
|
var tempPxValue = parseFloat(tempPx);
|
|
return Math.round(pxValue * 96 / tempPxValue);
|
|
}
|
|
else { // when browser have not convert pt to px, use 96 DPI.
|
|
return Math.round(pxValue * 72 / 96);
|
|
}
|
|
}
|
|
|
|
function processRadioButtonClicked(key, $item, $group) {
|
|
var name = $item.data("name");
|
|
|
|
// only need process when click on radio button or relate label like text
|
|
if ($item.hasClass("radiobutton") || $item.hasClass("text")) {
|
|
$group.find("div.radiobutton").removeClass("checked");
|
|
$group.find("div.radiobutton[data-name='" + name + "']").addClass("checked");
|
|
|
|
switch (key) {
|
|
case "referenceStyle":
|
|
setReferenceStyle(name);
|
|
break;
|
|
case "slicerMoveAndSize":
|
|
setSlicerSetting("moveSize", name);
|
|
break;
|
|
case "pictureMoveAndSize":
|
|
var picture = _activePicture;
|
|
if (name === "picture-move-size") {
|
|
picture.dynamicMove(true);
|
|
picture.dynamicSize(true);
|
|
}
|
|
if (name === "picture-move-nosize") {
|
|
picture.dynamicMove(true);
|
|
picture.dynamicSize(false);
|
|
}
|
|
if (name === "picture-nomove-size") {
|
|
picture.dynamicMove(false);
|
|
picture.dynamicSize(false);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
function setReferenceStyle(name) {
|
|
var referenceStyle, columnHeaderAutoText;
|
|
|
|
if (name === "a1style") {
|
|
referenceStyle = spreadNS.ReferenceStyle.a1;
|
|
columnHeaderAutoText = spreadNS.HeaderAutoText.letters;
|
|
} else {
|
|
referenceStyle = spreadNS.ReferenceStyle.r1c1;
|
|
columnHeaderAutoText = spreadNS.HeaderAutoText.numbers;
|
|
}
|
|
|
|
spread.options.referenceStyle = referenceStyle;
|
|
spread.sheets.forEach(function (sheet) {
|
|
sheet.options.colHeaderAutoText = columnHeaderAutoText;
|
|
});
|
|
updatePositionBox(spread.getActiveSheet());
|
|
}
|
|
|
|
function checkedChanged() {
|
|
var $element = $(this),
|
|
name = $element.data("name");
|
|
|
|
if ($element.hasClass("disabled")) {
|
|
return;
|
|
}
|
|
|
|
// radio buttons need special process
|
|
switch (name) {
|
|
case "referenceStyle":
|
|
case "slicerMoveAndSize":
|
|
case "pictureMoveAndSize":
|
|
processRadioButtonClicked(name, $(event.target), $element);
|
|
return;
|
|
}
|
|
|
|
|
|
var $target = $("div.button", $element),
|
|
value = !$target.hasClass("checked");
|
|
|
|
var sheet = spread.getActiveSheet();
|
|
|
|
$target.toggleClass("checked");
|
|
|
|
spread.suspendPaint();
|
|
|
|
var options = spread.options;
|
|
|
|
switch (name) {
|
|
|
|
case "allowCopyPasteExcelStyle":
|
|
options.allowCopyPasteExcelStyle = value;
|
|
break;
|
|
|
|
case "allowExtendPasteRange":
|
|
options.allowExtendPasteRange = value;
|
|
break;
|
|
|
|
case "referenceStyle":
|
|
options.referenceStyle = (value ? spreadNS.ReferenceStyle.r1c1 : spreadNS.ReferenceStyle.a1);
|
|
break;
|
|
|
|
case "cutCopyIndicatorVisible":
|
|
options.cutCopyIndicatorVisible = value;
|
|
break;
|
|
|
|
case "showVerticalScrollbar":
|
|
options.showVerticalScrollbar = value;
|
|
break;
|
|
|
|
case "showHorizontalScrollbar":
|
|
options.showHorizontalScrollbar = value;
|
|
break;
|
|
|
|
case "scrollIgnoreHidden":
|
|
options.scrollIgnoreHidden = value;
|
|
break;
|
|
|
|
case "scrollbarMaxAlign":
|
|
options.scrollbarMaxAlign = value;
|
|
break;
|
|
|
|
case "scrollbarShowMax":
|
|
options.scrollbarShowMax = value;
|
|
break;
|
|
|
|
case "tabStripVisible":
|
|
options.tabStripVisible = value;
|
|
break;
|
|
|
|
case "newTabVisible":
|
|
options.newTabVisible = value;
|
|
break;
|
|
|
|
case "tabEditable":
|
|
options.tabEditable = value;
|
|
break;
|
|
|
|
case "showTabNavigation":
|
|
options.tabNavigationVisible = value;
|
|
break;
|
|
|
|
case "showDragDropTip":
|
|
options.showDragDropTip = value;
|
|
break;
|
|
|
|
case "showDragFillTip":
|
|
options.showDragFillTip = value;
|
|
break;
|
|
|
|
case "sheetVisible":
|
|
var sheetIndex = $target.data("sheetIndex"),
|
|
sheetName = $target.data("sheetName"),
|
|
selectedSheet = spread.sheets[sheetIndex];
|
|
|
|
// be sure related sheet not changed (such add / remove sheet, rename sheet)
|
|
if (selectedSheet && selectedSheet.name() === sheetName) {
|
|
selectedSheet.visible(value);
|
|
} else {
|
|
console.log("selected sheet' info was changed, please select the sheet and set visible again.");
|
|
}
|
|
break;
|
|
|
|
case "allowUserDragDrop":
|
|
spread.options.allowUserDragDrop = value;
|
|
break;
|
|
|
|
case "allowUserDragFill":
|
|
spread.options.allowUserDragFill = value;
|
|
break;
|
|
|
|
case "allowZoom":
|
|
spread.options.allowUserZoom = value;
|
|
break;
|
|
|
|
case "allowOverflow":
|
|
spread.sheets.forEach(function (sheet) {
|
|
sheet.options.allowCellOverflow = value;
|
|
});
|
|
break;
|
|
|
|
case "showDragFillSmartTag":
|
|
spread.options.showDragFillSmartTag = value;
|
|
break;
|
|
|
|
case "allowDragMerge":
|
|
spread.options.allowUserDragMerge = value;
|
|
break;
|
|
|
|
case "allowContextMenu":
|
|
spread.options.allowContextMenu = value;
|
|
break;
|
|
|
|
case "showVerticalGridline":
|
|
sheet.options.gridline.showVerticalGridline = value;
|
|
break;
|
|
|
|
case "showHorizontalGridline":
|
|
sheet.options.gridline.showHorizontalGridline = value;
|
|
break;
|
|
|
|
case "showRowHeader":
|
|
sheet.options.rowHeaderVisible = value;
|
|
break;
|
|
|
|
case "showColumnHeader":
|
|
sheet.options.colHeaderVisible = value;
|
|
break;
|
|
|
|
case "wrapText":
|
|
setWordWrap(sheet);
|
|
break;
|
|
case "hideSelection":
|
|
spread.options.hideSelection = value;
|
|
break;
|
|
|
|
case "showRowOutline":
|
|
sheet.showRowOutline(value);
|
|
break;
|
|
|
|
case "showColumnOutline":
|
|
sheet.showColumnOutline(value);
|
|
break;
|
|
|
|
case "highlightInvalidData":
|
|
spread.options.highlightInvalidData = value;
|
|
break;
|
|
|
|
/* table realted items */
|
|
case "tableFilterButton":
|
|
_activeTable && _activeTable.filterButtonVisible(value);
|
|
break;
|
|
|
|
case "tableHeaderRow":
|
|
_activeTable && _activeTable.showHeader(value);
|
|
break;
|
|
|
|
case "tableTotalRow":
|
|
_activeTable && _activeTable.showFooter(value);
|
|
break;
|
|
|
|
case "tableBandedRows":
|
|
_activeTable && _activeTable.bandRows(value);
|
|
break;
|
|
|
|
case "tableBandedColumns":
|
|
_activeTable && _activeTable.bandColumns(value);
|
|
break;
|
|
|
|
case "tableFirstColumn":
|
|
_activeTable && _activeTable.highlightFirstColumn(value);
|
|
break;
|
|
|
|
case "tableLastColumn":
|
|
_activeTable && _activeTable.highlightLastColumn(value);
|
|
break;
|
|
/* table realted items (end) */
|
|
|
|
/* comment related items */
|
|
case "commentDynamicSize":
|
|
_activeComment && _activeComment.dynamicSize(value);
|
|
break;
|
|
|
|
case "commentDynamicMove":
|
|
_activeComment && _activeComment.dynamicMove(value);
|
|
break;
|
|
|
|
case "commentLockText":
|
|
_activeComment && _activeComment.lockText(value);
|
|
break;
|
|
|
|
case "commentShowShadow":
|
|
_activeComment && _activeComment.showShadow(value);
|
|
break;
|
|
/* comment related items (end) */
|
|
|
|
/* picture related items */
|
|
case "pictureDynamicSize":
|
|
_activePicture && _activePicture.dynamicSize(value);
|
|
break;
|
|
|
|
case "pictureDynamicMove":
|
|
_activePicture && _activePicture.dynamicMove(value);
|
|
break;
|
|
|
|
case "pictureFixedPosition":
|
|
_activePicture && _activePicture.fixedPosition(value);
|
|
break;
|
|
/* picture related items (end) */
|
|
|
|
/* protect sheet realted items */
|
|
case "checkboxProtectSheet":
|
|
syncProtectSheetRelatedItems(sheet, value);
|
|
break;
|
|
|
|
case "checkboxSelectLockedCells":
|
|
setProtectionOption(sheet, "allowSelectLockedCells", value);
|
|
break;
|
|
|
|
case "checkboxSelectUnlockedCells":
|
|
setProtectionOption(sheet, "allowSelectUnlockedCells", value);
|
|
break;
|
|
|
|
case "checkboxSort":
|
|
setProtectionOption(sheet, "allowSort", value);
|
|
break;
|
|
|
|
case "checkboxUseAutoFilter":
|
|
setProtectionOption(sheet, "allowFilter", value);
|
|
break;
|
|
|
|
case "checkboxResizeRows":
|
|
setProtectionOption(sheet, "allowResizeRows", value);
|
|
break;
|
|
|
|
case "checkboxResizeColumns":
|
|
setProtectionOption(sheet, "allowResizeColumns", value);
|
|
break;
|
|
|
|
case "checkboxEditObjects":
|
|
setProtectionOption(sheet, "allowEditObjects", value);
|
|
break;
|
|
/* protect sheet realted items (end) */
|
|
|
|
/* slicer related items */
|
|
case "displaySlicerHeader":
|
|
setSlicerSetting("showHeader", value);
|
|
break;
|
|
|
|
case "lockSlicer":
|
|
setSlicerSetting("lock", value);
|
|
break;
|
|
/* slicer related items (end) */
|
|
|
|
case "showDataLabelsValue":
|
|
var isShow = judjeDataLabelsIsShow({item:"showDataLabelsValue",isShow:value});
|
|
updateDataLabelsPositionDropDown(isShow);
|
|
break;
|
|
case "showDataLabelsSeriesName":
|
|
var isShow = judjeDataLabelsIsShow({item:"showDataLabelsSeriesName",isShow:value});
|
|
updateDataLabelsPositionDropDown(isShow);
|
|
break;
|
|
case "showDataLabelsCategoryName":
|
|
var isShow = judjeDataLabelsIsShow({item:"showDataLabelsCategoryName",isShow:value});
|
|
updateDataLabelsPositionDropDown(isShow);
|
|
break;
|
|
|
|
default:
|
|
console.log("not added code for", name);
|
|
break;
|
|
|
|
}
|
|
spread.resumePaint();
|
|
}
|
|
|
|
function updateNumberProperty() {
|
|
var $element = $(this),
|
|
$parent = $element.parent(),
|
|
name = $parent.data("name"),
|
|
value = parseInt($element.val(), 10);
|
|
|
|
if (isNaN(value)) {
|
|
return;
|
|
}
|
|
|
|
var sheet = spread.getActiveSheet();
|
|
|
|
spread.suspendPaint();
|
|
switch (name) {
|
|
case "rowCount":
|
|
sheet.setRowCount(value);
|
|
break;
|
|
|
|
case "columnCount":
|
|
sheet.setColumnCount(value);
|
|
break;
|
|
|
|
case "frozenRowCount":
|
|
sheet.frozenRowCount(value);
|
|
break;
|
|
|
|
case "frozenColumnCount":
|
|
sheet.frozenColumnCount(value);
|
|
break;
|
|
|
|
case "trailingFrozenRowCount":
|
|
sheet.frozenTrailingRowCount(value);
|
|
break;
|
|
|
|
case "trailingFrozenColumnCount":
|
|
sheet.frozenTrailingColumnCount(value);
|
|
break;
|
|
|
|
case "commentBorderWidth":
|
|
_activeComment && _activeComment.borderWidth(value);
|
|
break;
|
|
|
|
case "commentOpacity":
|
|
_activeComment && _activeComment.opacity(value / 100);
|
|
break;
|
|
|
|
case "pictureBorderWidth":
|
|
_activePicture && _activePicture.borderWidth(value);
|
|
break;
|
|
|
|
case "pictureBorderRadius":
|
|
_activePicture && _activePicture.borderRadius(value);
|
|
break;
|
|
|
|
case "slicerColumnNumber":
|
|
setSlicerSetting("columnCount", value);
|
|
break;
|
|
|
|
case "slicerButtonHeight":
|
|
setSlicerSetting("itemHeight", value);
|
|
break;
|
|
|
|
case "slicerButtonWidth":
|
|
setSlicerSetting("itemWidth", value);
|
|
break;
|
|
|
|
default:
|
|
console.log("updateNumberProperty need add for", name);
|
|
break;
|
|
}
|
|
spread.resumePaint();
|
|
}
|
|
|
|
function updateStringProperty() {
|
|
var $element = $(this),
|
|
$parent = $element.parent(),
|
|
name = $parent.data("name"),
|
|
value = $element.val();
|
|
|
|
var sheet = spread.getActiveSheet();
|
|
|
|
switch (name) {
|
|
case "sheetName":
|
|
if (value && value !== sheet.name()) {
|
|
try {
|
|
sheet.name(value);
|
|
} catch (ex) {
|
|
alert(getResource("messages.duplicatedSheetName"));
|
|
$element.val(sheet.name());
|
|
}
|
|
}
|
|
break;
|
|
|
|
case "tableName":
|
|
if (value && _activeTable && value !== _activeTable.name()) {
|
|
if (!sheet.tables.findByName(value)) {
|
|
_activeTable.name(value);
|
|
} else {
|
|
alert(getResource("messages.duplicatedTableName"));
|
|
$element.val(_activeTable.name());
|
|
}
|
|
}
|
|
break;
|
|
|
|
case "commentPadding":
|
|
setCommentPadding(value);
|
|
break;
|
|
|
|
case "customFormat":
|
|
setFormatter(value);
|
|
break;
|
|
|
|
case "slicerName":
|
|
setSlicerSetting("name", value);
|
|
break;
|
|
|
|
case "slicerCaptionName":
|
|
setSlicerSetting("captionName", value);
|
|
break;
|
|
|
|
case "watermark":
|
|
setWatermark(sheet, value);
|
|
break;
|
|
|
|
case "cellPadding":
|
|
setCellPadding(sheet, value);
|
|
break;
|
|
|
|
case "labelmargin":
|
|
setLabelOptions(sheet, value, "margin");
|
|
break;
|
|
default:
|
|
console.log("updateStringProperty w/o process of ", name);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function setCommentPadding(padding) {
|
|
if (_activeComment && padding) {
|
|
var para = padding.split(",");
|
|
if (para.length === 1) {
|
|
_activeComment.padding(new spreadNS.Comments.Padding(parseInt(para[0], 10)));
|
|
} else if (para.length === 4) {
|
|
_activeComment.padding(new spreadNS.Comments.Padding(parseInt(para[0], 10), parseInt(para[1], 10), parseInt(para[2], 10), parseInt(para[3], 10)));
|
|
}
|
|
}
|
|
}
|
|
|
|
function fillSheetNameList($container) {
|
|
var html = "";
|
|
|
|
// unbind event if present
|
|
$container.find(".menu-item").off('click');
|
|
|
|
spread.sheets.forEach(function (sheet, index) {
|
|
html += '<div class="menu-item"><div class="image"></div><div class="text" data-value="' + index + '">' + sheet.name() + '</div></div>';
|
|
});
|
|
$container.html(html);
|
|
|
|
// bind event for new added elements
|
|
$container.find(".menu-item").on('click', itemSelected);
|
|
}
|
|
|
|
function syncSpreadPropertyValues() {
|
|
var options = spread.options;
|
|
// General
|
|
setCheckValue("allowUserDragDrop", options.allowUserDragDrop);
|
|
setCheckValue("allowUserDragFill", options.allowUserDragFill);
|
|
setCheckValue("allowZoom", options.allowUserZoom);
|
|
setCheckValue("allowOverflow", spread.getActiveSheet().options.allowCellOverflow);
|
|
setCheckValue("showDragFillSmartTag", options.showDragFillSmartTag);
|
|
setCheckValue("allowDragMerge", options.allowUserDragMerge);
|
|
setDropDownValue("resizeZeroIndicator", options.resizeZeroIndicator);
|
|
|
|
// Calculation
|
|
setRadioItemChecked("referenceStyle", options.referenceStyle === spreadNS.ReferenceStyle.r1c1 ? "r1c1style" : "a1style");
|
|
|
|
// Scroll Bar
|
|
setCheckValue("showVerticalScrollbar", options.showVerticalScrollbar);
|
|
setCheckValue("showHorizontalScrollbar", options.showHorizontalScrollbar);
|
|
setCheckValue("scrollbarMaxAlign", options.scrollbarMaxAlign);
|
|
setCheckValue("scrollbarShowMax", options.scrollbarShowMax);
|
|
setCheckValue("scrollIgnoreHidden", options.scrollIgnoreHidden);
|
|
|
|
// TabStrip
|
|
setCheckValue("tabStripVisible", options.tabStripVisible);
|
|
setCheckValue("newTabVisible", options.newTabVisible);
|
|
setCheckValue("tabEditable", options.tabEditable);
|
|
setCheckValue("allowSheetReorder", options.allowSheetReorder);
|
|
setCheckValue("showTabNavigation", options.tabNavigationVisible);
|
|
|
|
// Color
|
|
setColorValue("spreadBackcolor", options.backColor);
|
|
setColorValue("grayAreaBackcolor", options.grayAreaBackColor);
|
|
|
|
// Tip
|
|
setDropDownValue($("div.insp-dropdown-list[data-name='scrollTip']"), options.showScrollTip);
|
|
setDropDownValue($("div.insp-dropdown-list[data-name='resizeTip']"), options.showResizeTip);
|
|
setCheckValue("showDragDropTip", options.showDragDropTip);
|
|
setCheckValue("showDragFillTip", options.showDragFillTip);
|
|
|
|
// Cut / Copy Indicator
|
|
setCheckValue("cutCopyIndicatorVisible", options.cutCopyIndicatorVisible);
|
|
setColorValue("cutCopyIndicatorBorderColor", options.cutCopyIndicatorBorderColor);
|
|
|
|
// Data validation
|
|
setCheckValue("highlightInvalidData", options.highlightInvalidData);
|
|
}
|
|
|
|
function syncForzenProperties(sheet) {
|
|
setNumberValue("frozenRowCount", sheet.frozenRowCount());
|
|
setNumberValue("frozenColumnCount", sheet.frozenColumnCount());
|
|
setNumberValue("trailingFrozenRowCount", sheet.frozenTrailingRowCount());
|
|
setNumberValue("trailingFrozenColumnCount", sheet.frozenTrailingColumnCount());
|
|
}
|
|
|
|
function syncSheetPropertyValues() {
|
|
var sheet = spread.getActiveSheet(),
|
|
options = sheet.options;
|
|
|
|
// General
|
|
setNumberValue("rowCount", sheet.getRowCount());
|
|
setNumberValue("columnCount", sheet.getColumnCount());
|
|
setTextValue("sheetName", sheet.name());
|
|
setColorValue("sheetTabColor", options.sheetTabColor);
|
|
|
|
// Grid Line
|
|
setCheckValue("showVerticalGridline", options.gridline.showVerticalGridline);
|
|
setCheckValue("showHorizontalGridline", options.gridline.showHorizontalGridline);
|
|
setColorValue("gridlineColor", options.gridline.color);
|
|
|
|
// Header
|
|
setCheckValue("showRowHeader", options.rowHeaderVisible);
|
|
setCheckValue("showColumnHeader", options.colHeaderVisible);
|
|
|
|
// Freeze
|
|
setColorValue("frozenLineColor", options.frozenlineColor);
|
|
|
|
syncForzenProperties(sheet);
|
|
|
|
// Selection
|
|
setDropDownValue($("#sheetTab div.insp-dropdown-list[data-name='selectionPolicy']"), sheet.selectionPolicy());
|
|
setDropDownValue($("#sheetTab div.insp-dropdown-list[data-name='selectionUnit']"), sheet.selectionUnit());
|
|
setColorValue("selectionBorderColor", options.selectionBorderColor);
|
|
setColorValue("selectionBackColor", options.selectionBackColor);
|
|
setCheckValue("hideSelection", spread.options.hideSelection);
|
|
|
|
// Protection
|
|
var isProtected = options.isProtected;
|
|
setCheckValue("checkboxProtectSheet", isProtected);
|
|
syncProtectSheetRelatedItems(sheet, isProtected);
|
|
getCurrentSheetProtectionOption(sheet);
|
|
|
|
updateCellStyleState(sheet, sheet.getActiveRowIndex(), sheet.getActiveColumnIndex());
|
|
|
|
// Zoom
|
|
if (!!parent.sheetZoom) {
|
|
sheet.zoom(parent.sheetZoom);
|
|
sheet.zoom(parent.sheetZoom)
|
|
setZoomFactor(parent.sheetZoom);
|
|
}
|
|
else {
|
|
setZoomFactor(sheet.zoom());
|
|
}
|
|
// Group
|
|
setCheckValue("showRowOutline", sheet.showRowOutline());
|
|
setCheckValue("showColumnOutline", sheet.showColumnOutline());
|
|
|
|
if (!$(sheet).data("bind")) {
|
|
$(sheet).data("bind", true);
|
|
sheet.bind(spreadNS.Events.UserZooming, function (event, args) {
|
|
setZoomFactor(args.newZoomFactor);
|
|
});
|
|
sheet.bind(spreadNS.Events.RangeChanged, function (event, args) {
|
|
if (args.action === spreadNS.RangeChangedAction.clear) {
|
|
// check special type items and switch to cell tab (laze process)
|
|
if (isSpecialTabSelected()) {
|
|
onCellSelected();
|
|
}
|
|
}
|
|
});
|
|
sheet.bind(spreadNS.Events.FloatingObjectRemoved, function (event, args) {
|
|
// check special type items and switch to cell tab (laze process)
|
|
if (isSpecialTabSelected()) {
|
|
onCellSelected();
|
|
}
|
|
});
|
|
|
|
sheet.bind(spreadNS.Events.CommentRemoved, function (event, args) {
|
|
// check special type items and switch to cell tab (laze process)
|
|
if (isSpecialTabSelected()) {
|
|
onCellSelected();
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
function setZoomFactor(zoom) {
|
|
setDropDownText("#toolbar div.insp-dropdown-list[data-name='zoomSpread']", Math.round(zoom * 100) + "%");
|
|
}
|
|
|
|
function setNumberValue(name, value) {
|
|
$("div.insp-number[data-name='" + name + "'] input.editor").val(value);
|
|
}
|
|
|
|
function getNumberValue(name) {
|
|
return +$("div[data-name='" + name + "'] input.editor").val();
|
|
}
|
|
|
|
function setTextValue(name, value) {
|
|
$("div.insp-text[data-name='" + name + "'] input.editor").val(value);
|
|
}
|
|
|
|
function getTextValue(name) {
|
|
return $("div.insp-text[data-name='" + name + "'] input.editor").val();
|
|
}
|
|
|
|
function setCheckValue(name, value, options) {
|
|
var $target = $("div.insp-checkbox[data-name='" + name + "'] div.button");
|
|
if (value) {
|
|
$target.addClass("checked");
|
|
} else {
|
|
$target.removeClass("checked");
|
|
}
|
|
if (options) {
|
|
$target.data(options);
|
|
}
|
|
}
|
|
|
|
function getCheckValue(name) {
|
|
var $target = $("div.insp-checkbox[data-name='" + name + "'] div.button");
|
|
|
|
return $target.hasClass("checked");
|
|
}
|
|
|
|
function setColorValue(name, value) {
|
|
$("div.insp-color-picker[data-name='" + name + "'] div.color-view").css("background-color", value || "");
|
|
}
|
|
|
|
var _dropdownitem;
|
|
var _colorpicker;
|
|
var _needShow = true;
|
|
|
|
var _handlePopupCloseEvents = 'mousedown touchstart MSPointerDown pointerdown'.split(' ');
|
|
|
|
function processEventListenerHandleClosePopup(add) {
|
|
if (add) {
|
|
_handlePopupCloseEvents.forEach(function (value) {
|
|
document.addEventListener(value, documentMousedownHandler, true);
|
|
});
|
|
} else {
|
|
_handlePopupCloseEvents.forEach(function (value) {
|
|
document.removeEventListener(value, documentMousedownHandler, true);
|
|
});
|
|
}
|
|
}
|
|
|
|
function showDropdown() {
|
|
if (!_needShow) {
|
|
_needShow = true;
|
|
return;
|
|
}
|
|
|
|
var DROPDOWN_OFFSET = 10;
|
|
var $element = $(this),
|
|
$container = $element.parent(),
|
|
name = $container.data("name"),
|
|
targetId = $container.data("list-ref"),
|
|
$target = $("#" + targetId);
|
|
|
|
if ($target && !$target.hasClass("show")) {
|
|
if (name === "sheetName") {
|
|
fillSheetNameList($target);
|
|
}
|
|
|
|
$target.data("dropdown", this);
|
|
_dropdownitem = $target[0];
|
|
|
|
var $dropdown = $element,
|
|
offset = $dropdown.offset();
|
|
|
|
var height = $element.outerHeight(),
|
|
targetHeight = $target.outerHeight(),
|
|
width = $element.outerWidth(),
|
|
targetWidth = $target.outerWidth(),
|
|
top = offset.top + height;
|
|
|
|
// adjust drop down' width to same
|
|
if (targetWidth < width) {
|
|
$target.width(width);
|
|
}
|
|
|
|
var $inspContainer = $(".insp-container"),
|
|
maxTop = $inspContainer.height() + $inspContainer.offset().top;
|
|
|
|
// adjust top when out of bottom range
|
|
if (top + targetHeight + DROPDOWN_OFFSET > maxTop) {
|
|
top = offset.top - targetHeight;
|
|
}
|
|
|
|
$target.css({
|
|
top: top,
|
|
left: offset.left - $target.width() + $dropdown.width() + 16
|
|
});
|
|
|
|
// select corresponding item
|
|
if (name === "borderLine") {
|
|
var text = $("#border-line-type").attr("class");
|
|
$("div.image", $target).removeClass("fa-check");
|
|
$("div.text", $target).filter(function () {
|
|
return $(this).find("div").attr("class") === text;
|
|
}).siblings("div.image").addClass("fa fa-check");
|
|
$("div.image.nocheck", $target).removeClass("fa-check");
|
|
}
|
|
else {
|
|
var text = $("span.display", $dropdown).text();
|
|
$("div.image", $target).removeClass("fa-check");
|
|
$("div.text", $target).filter(function () {
|
|
return $(this).text() === text;
|
|
}).siblings("div.image").addClass("fa fa-check");
|
|
// remove check for special items mark with nocheck class
|
|
$("div.image.nocheck", $target).removeClass("fa-check");
|
|
}
|
|
|
|
$target.addClass("show");
|
|
|
|
processEventListenerHandleClosePopup(true);
|
|
}
|
|
}
|
|
|
|
function documentMousedownHandler(event) {
|
|
var target = event.target,
|
|
container = _dropdownitem || _colorpicker || $("#clearActionList:visible")[0] || $("#exportActionList:visible")[0];
|
|
|
|
if (container) {
|
|
if (container === target || $.contains(container, target)) {
|
|
return;
|
|
}
|
|
|
|
// click on related item popup the dropdown, close it
|
|
var dropdown = $(container).data("dropdown");
|
|
if (dropdown && $.contains(dropdown, target)) {
|
|
hidePopups();
|
|
_needShow = false;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
hidePopups();
|
|
$("#passwordError").hide();
|
|
}
|
|
|
|
function hidePopups() {
|
|
hideDropdown();
|
|
hideColorPicker();
|
|
hideClearActionDropDown();
|
|
hideExportActionDropDown();
|
|
}
|
|
|
|
function hideClearActionDropDown() {
|
|
if ($("#clearActionList:visible").length > 0) {
|
|
$("#clearActionList").hide();
|
|
processEventListenerHandleClosePopup(false);
|
|
}
|
|
}
|
|
|
|
function hideExportActionDropDown() {
|
|
if ($("#exportActionList:visible").length > 0) {
|
|
$("#exportActionList").hide();
|
|
processEventListenerHandleClosePopup(false);
|
|
}
|
|
}
|
|
|
|
function hideDropdown() {
|
|
if (_dropdownitem) {
|
|
$(_dropdownitem).removeClass("show");
|
|
_dropdownitem = null;
|
|
}
|
|
|
|
processEventListenerHandleClosePopup(false);
|
|
}
|
|
|
|
function showColorPicker() {
|
|
if (!_needShow) {
|
|
_needShow = true;
|
|
return;
|
|
}
|
|
|
|
var MIN_TOP = 30, MIN_BOTTOM = 4;
|
|
var $element = $(this),
|
|
$container = $element.parent(),
|
|
name = $container.data("name"),
|
|
$target = $("#colorpicker");
|
|
|
|
if ($target && !$target.hasClass("colorpicker-visible")) {
|
|
$target.data("dropdown", this);
|
|
// save related name for later use
|
|
$target.data("name", name);
|
|
|
|
var $nofill = $target.find("div.nofill-color");
|
|
if ($container.hasClass("show-nofill-color")) {
|
|
$nofill.show();
|
|
} else {
|
|
$nofill.hide();
|
|
}
|
|
|
|
_colorpicker = $target[0];
|
|
|
|
var $dropdown = $element,
|
|
offset = $dropdown.offset();
|
|
|
|
var height = $target.height(),
|
|
top = offset.top - (height - $element.height()) / 2 + 3, // 3 = padding (4) - border-width(1)
|
|
yOffset = 0;
|
|
|
|
if (top < MIN_TOP) {
|
|
yOffset = MIN_TOP - top;
|
|
top = MIN_TOP;
|
|
} else {
|
|
var $inspContainer = $(".insp-container"),
|
|
maxTop = $inspContainer.height() + $inspContainer.offset().top;
|
|
|
|
// adjust top when out of bottom range
|
|
if (top + height > maxTop - MIN_BOTTOM) {
|
|
var newTop = maxTop - MIN_BOTTOM - height;
|
|
yOffset = newTop - top;
|
|
top = newTop;
|
|
}
|
|
}
|
|
|
|
$target.css({
|
|
top: top,
|
|
left: offset.left - $target.width() - 20
|
|
});
|
|
|
|
// v-center the pointer
|
|
var $pointer = $target.find(".cp-pointer");
|
|
$pointer.css({top: (height - 24) / 2 - yOffset}); // 24 = pointer height
|
|
|
|
$target.addClass("colorpicker-visible");
|
|
|
|
processEventListenerHandleClosePopup(true);
|
|
}
|
|
}
|
|
|
|
function hideColorPicker() {
|
|
if (_colorpicker) {
|
|
$(_colorpicker).removeClass("colorpicker-visible");
|
|
_colorpicker = null;
|
|
}
|
|
processEventListenerHandleClosePopup(false);
|
|
}
|
|
|
|
function itemSelected() {
|
|
// get related dropdown item
|
|
var dropdown = $(_dropdownitem).data("dropdown");
|
|
|
|
hideDropdown();
|
|
|
|
if (this.parentElement.id === "clearActionList") {
|
|
processClearAction($(this.parentElement), $("div.text", this).data("value"));
|
|
return;
|
|
}
|
|
|
|
if (this.parentElement.id === "exportActionList") {
|
|
processExportAction($(this.parentElement), $("div.text", this).data("value"));
|
|
return;
|
|
}
|
|
|
|
var sheet = spread.getActiveSheet();
|
|
|
|
var name = $(dropdown.parentElement).data("name"),
|
|
$text = $("div.text", this),
|
|
dataValue = $text.data("value"), // data-value includes both number value and string value, should pay attention when use it
|
|
numberValue = +dataValue,
|
|
text = $text.text(),
|
|
value = text,
|
|
nameValue = dataValue || text;
|
|
|
|
var options = spread.options;
|
|
|
|
switch (name) {
|
|
case "scrollTip":
|
|
options.showScrollTip = numberValue;
|
|
break;
|
|
|
|
case "resizeTip":
|
|
options.showResizeTip = numberValue;
|
|
break;
|
|
|
|
case "fontFamily":
|
|
setStyleFont(sheet, "font-family", false, [value], value);
|
|
break;
|
|
|
|
case "labelFontFamily":
|
|
setStyleFont(sheet, "font-family", true, [value], value);
|
|
break;
|
|
|
|
case "fontSize":
|
|
value += "pt";
|
|
setStyleFont(sheet, "font-size", false, [value], value);
|
|
break;
|
|
|
|
case "labelFontSize":
|
|
value += "pt";
|
|
setStyleFont(sheet, "font-size", true, [value], value);
|
|
break;
|
|
|
|
case "cellLabelVisibility":
|
|
setLabelOptions(sheet, nameValue, "visibility");
|
|
break;
|
|
|
|
case "cellLabelAlignment":
|
|
setLabelOptions(sheet, nameValue, "alignment");
|
|
break;
|
|
|
|
case "selectionPolicy":
|
|
sheet.selectionPolicy(numberValue);
|
|
break;
|
|
|
|
case "selectionUnit":
|
|
sheet.selectionUnit(numberValue);
|
|
break;
|
|
|
|
case "sheetName":
|
|
var selectedSheet = spread.sheets[numberValue];
|
|
setCheckValue("sheetVisible", selectedSheet.visible(), {
|
|
sheetIndex: numberValue,
|
|
sheetName: selectedSheet.name()
|
|
});
|
|
break;
|
|
|
|
case "commentFontFamily":
|
|
_activeComment && _activeComment.fontFamily(value);
|
|
break;
|
|
|
|
case "commentFontSize":
|
|
value += "pt";
|
|
_activeComment && _activeComment.fontSize(value);
|
|
break;
|
|
|
|
case "commentDisplayMode":
|
|
_activeComment && _activeComment.displayMode(numberValue);
|
|
break;
|
|
|
|
case "commentFontStyle":
|
|
_activeComment && _activeComment.fontStyle(nameValue);
|
|
break;
|
|
|
|
case "commentFontWeight":
|
|
_activeComment && _activeComment.fontWeight(nameValue);
|
|
break;
|
|
|
|
case "commentBorderStyle":
|
|
_activeComment && _activeComment.borderStyle(nameValue);
|
|
break;
|
|
|
|
case "commentHorizontalAlign":
|
|
_activeComment && _activeComment.horizontalAlign(numberValue);
|
|
break;
|
|
|
|
case "pictureBorderStyle":
|
|
_activePicture && _activePicture.borderStyle(nameValue);
|
|
break;
|
|
|
|
case "pictureStretch":
|
|
_activePicture && _activePicture.pictureStretch(numberValue);
|
|
break;
|
|
|
|
case "conditionalFormat":
|
|
processConditionalFormatDetailSetting(nameValue);
|
|
break;
|
|
|
|
case "ruleType":
|
|
updateEnumTypeOfCF(numberValue);
|
|
break;
|
|
|
|
case "comparisonOperator":
|
|
processComparisonOperator(numberValue);
|
|
break;
|
|
|
|
case "iconSetType":
|
|
updateIconCriteriaItems(numberValue);
|
|
break;
|
|
|
|
case "minType":
|
|
processMinItems(numberValue, "minValue");
|
|
break;
|
|
|
|
case "midType":
|
|
processMidItems(numberValue, "midValue");
|
|
break;
|
|
|
|
case "maxType":
|
|
processMaxItems(numberValue, "maxValue");
|
|
break;
|
|
|
|
case "cellTypes":
|
|
processCellTypeSetting(nameValue);
|
|
break;
|
|
|
|
case "validatorType":
|
|
processDataValidationSetting(nameValue, value);
|
|
break;
|
|
|
|
case "numberValidatorComparisonOperator":
|
|
processNumberValidatorComparisonOperatorSetting(numberValue);
|
|
break;
|
|
|
|
case "dateValidatorComparisonOperator":
|
|
processDateValidatorComparisonOperatorSetting(numberValue);
|
|
break;
|
|
|
|
case "textLengthValidatorComparisonOperator":
|
|
processTextLengthValidatorComparisonOperatorSetting(numberValue);
|
|
break;
|
|
|
|
case "sparklineExType":
|
|
processSparklineSetting(nameValue, value);
|
|
break;
|
|
|
|
case "zoomSpread":
|
|
processZoomSetting(nameValue, value);
|
|
break;
|
|
|
|
case "commomFormat":
|
|
processFormatSetting(nameValue, value);
|
|
break;
|
|
|
|
case "borderLine":
|
|
processBorderLineSetting(nameValue);
|
|
break;
|
|
|
|
case "minAxisType":
|
|
updateManual(nameValue, "manualMin");
|
|
break;
|
|
|
|
case "maxAxisType":
|
|
updateManual(nameValue, "manualMax");
|
|
break;
|
|
|
|
case "slicerItemSorting":
|
|
processSlicerItemSorting(numberValue);
|
|
break;
|
|
|
|
case "spreadTheme":
|
|
processChangeSpreadTheme(nameValue);
|
|
break;
|
|
|
|
case "resizeZeroIndicator":
|
|
spread.options.resizeZeroIndicator = numberValue;
|
|
break;
|
|
|
|
case "copyPasteHeaderOptions":
|
|
spread.options.copyPasteHeaderOptions = GC.Spread.Sheets.CopyPasteHeaderOptions[nameValue]
|
|
break;
|
|
case "chartSeriesIndexValue":
|
|
changeSeriesIndex(dataValue);
|
|
break;
|
|
case "chartAxieType":
|
|
changeAxieTypeIndex(nameValue);
|
|
break;
|
|
default:
|
|
console.log("TODO add itemSelected for ", name, value);
|
|
break;
|
|
}
|
|
|
|
setDropDownText(dropdown, text);
|
|
}
|
|
|
|
function setDropDownText(container, value) {
|
|
var refList = "#" + $(container).data("list-ref"),
|
|
$items = $(".menu-item div.text", refList),
|
|
$item = $items.filter(function () {
|
|
return $(this).data("value") === value;
|
|
});
|
|
|
|
var text = $item.text() || value;
|
|
|
|
$("span.display", container).text(text);
|
|
}
|
|
|
|
function setDropDownValue(container, value, host) {
|
|
if (typeof container === "string") {
|
|
host = host || document;
|
|
|
|
container = $(host).find("div.insp-dropdown-list[data-name='" + container + "']");
|
|
}
|
|
|
|
var refList = "#" + $(container).data("list-ref");
|
|
|
|
$("span.display", container).text($(".menu-item>div.text[data-value='" + value + "']", refList).text());
|
|
}
|
|
|
|
function setDropDownValueByIndex(container, index) {
|
|
var refList = "#" + $(container).data("list-ref"),
|
|
$item = $(".menu-item:eq(" + index + ") div.text", refList);
|
|
|
|
$("span.display", container).text($item.text());
|
|
|
|
return {text: $item.text(), value: $item.data("value")};
|
|
}
|
|
|
|
function getDropDownValue(name, host) {
|
|
host = host || document;
|
|
|
|
var container = $(host).find("div.insp-dropdown-list[data-name='" + name + "']"),
|
|
refList = "#" + $(container).data("list-ref"),
|
|
text = $("span.display", container).text();
|
|
|
|
var value = $("div.text", refList).filter(function () {
|
|
return $(this).text() === text;
|
|
}).data("value");
|
|
|
|
return value;
|
|
}
|
|
|
|
function getDropDownText(name, host) {
|
|
host = host || document;
|
|
|
|
var container = $(host).find("div.insp-dropdown-list[data-name='" + name + "']"),
|
|
refList = "#" + $(container).data("list-ref"),
|
|
text = $("span.display", container).text();
|
|
|
|
var value = $("div.text", refList).filter(function () {
|
|
return $(this).text() === text;
|
|
}).text();
|
|
|
|
return value;
|
|
}
|
|
|
|
function colorSelected() {
|
|
var themeColor = $(this).data("name");
|
|
var value = $(this).css("background-color");
|
|
|
|
var name = $(_colorpicker).data("name");
|
|
var sheet = spread.getActiveSheet();
|
|
|
|
$("div.color-view", $(_colorpicker).data("dropdown")).css("background-color", value);
|
|
|
|
// No Fills need special process
|
|
if ($(this).hasClass("auto-color-cell")) {
|
|
if (name === "backColor") {
|
|
value = undefined;
|
|
}
|
|
}
|
|
|
|
var options = spread.options;
|
|
|
|
spread.suspendPaint();
|
|
switch (name) {
|
|
case "spreadBackcolor":
|
|
options.backColor = value;
|
|
break;
|
|
|
|
case "grayAreaBackcolor":
|
|
options.grayAreaBackColor = value;
|
|
break;
|
|
|
|
case "cutCopyIndicatorBorderColor":
|
|
options.cutCopyIndicatorBorderColor = value;
|
|
break;
|
|
|
|
case "sheetTabColor":
|
|
sheet.options.sheetTabColor = value;
|
|
break;
|
|
|
|
case "frozenLineColor":
|
|
sheet.options.frozenlineColor = value;
|
|
break;
|
|
|
|
case "gridlineColor":
|
|
sheet.options.gridline.color = value;
|
|
break;
|
|
|
|
case "foreColor":
|
|
case "backColor":
|
|
setColor(sheet, name, themeColor || value);
|
|
break;
|
|
|
|
case "labelForeColor":
|
|
setLabelOptions(sheet, value, "foreColor");
|
|
break;
|
|
|
|
case "selectionBorderColor":
|
|
sheet.options.selectionBorderColor = value;
|
|
break;
|
|
|
|
case "selectionBackColor":
|
|
// change to rgba (alpha: 0.2) to make cell content visible
|
|
value = getRGBAColor(value, 0.2);
|
|
sheet.options.selectionBackColor = value;
|
|
$("div.color-view", $(_colorpicker).data("dropdown")).css("background-color", value);
|
|
break;
|
|
|
|
case "commentBorderColor":
|
|
_activeComment && _activeComment.borderColor(value);
|
|
break;
|
|
|
|
case "commentForeColor":
|
|
_activeComment && _activeComment.foreColor(value);
|
|
break;
|
|
|
|
case "commentBackColor":
|
|
_activeComment && _activeComment.backColor(value);
|
|
break;
|
|
|
|
case "pictureBorderColor":
|
|
_activePicture && _activePicture.borderColor(value);
|
|
break;
|
|
|
|
case "pictureBackColor":
|
|
_activePicture && _activePicture.backColor(value);
|
|
break;
|
|
|
|
default:
|
|
console.log("TODO colorSelected", name);
|
|
break;
|
|
}
|
|
spread.resumePaint();
|
|
}
|
|
|
|
function getRGBAColor(color, alpha) {
|
|
var result = color,
|
|
prefix = "rgb(";
|
|
|
|
// get rgb color use jquery
|
|
if (color.substr(0, 4) !== prefix) {
|
|
var $temp = $("#setfontstyle");
|
|
$temp.css("background-color", color);
|
|
color = $temp.css("background-color");
|
|
}
|
|
|
|
// adding alpha to make rgba
|
|
if (color.substr(0, 4) === prefix) {
|
|
var length = color.length;
|
|
result = "rgba(" + color.substring(4, length - 1) + ", " + alpha + ")";
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
function setColor(sheet, method, value) {
|
|
var sels = sheet.getSelections();
|
|
var rowCount = sheet.getRowCount(),
|
|
columnCount = sheet.getColumnCount();
|
|
|
|
sheet.suspendPaint();
|
|
for (var n = 0; n < sels.length; n++) {
|
|
var sel = getActualCellRange(sheet, sels[n], rowCount, columnCount);
|
|
sheet.getRange(sel.row, sel.col, sel.rowCount, sel.colCount)[method](value);
|
|
}
|
|
sheet.resumePaint();
|
|
}
|
|
|
|
function buttonClicked() {
|
|
var $element = $(this),
|
|
name = $element.data("name"),
|
|
container;
|
|
|
|
var sheet = spread.getActiveSheet();
|
|
|
|
// get group
|
|
if ((container = $element.parents(".insp-radio-button-group")).length > 0) {
|
|
name = container.data("name");
|
|
$element.siblings().removeClass("active");
|
|
$element.addClass("active");
|
|
switch (name) {
|
|
case "vAlign":
|
|
case "hAlign":
|
|
setAlignment(sheet, name, $element.data("name"));
|
|
break;
|
|
}
|
|
} else if ($element.parents(".insp-button-group").length > 0) {
|
|
if (!$element.hasClass("no-toggle")) {
|
|
$element.toggleClass("active");
|
|
}
|
|
|
|
switch (name) {
|
|
case "bold":
|
|
setStyleFont(sheet, "font-weight", false, ["700", "bold"], "normal");
|
|
break;
|
|
case "labelBold":
|
|
setStyleFont(sheet, "font-weight", true, ["700", "bold"], "normal");
|
|
break;
|
|
case "italic":
|
|
setStyleFont(sheet, "font-style", false, ["italic"], "normal");
|
|
break;
|
|
case "labelItalic":
|
|
setStyleFont(sheet, "font-style", true, ["italic"], "normal");
|
|
break;
|
|
case "underline":
|
|
setTextDecoration(sheet, spreadNS.TextDecorationType.underline);
|
|
break;
|
|
case "strikethrough":
|
|
setTextDecoration(sheet, spreadNS.TextDecorationType.lineThrough);
|
|
break;
|
|
case "overline":
|
|
setTextDecoration(sheet, spreadNS.TextDecorationType.overline);
|
|
break;
|
|
|
|
case "increaseIndent":
|
|
setTextIndent(sheet, 1);
|
|
break;
|
|
|
|
case "decreaseIndent":
|
|
setTextIndent(sheet, -1);
|
|
break;
|
|
|
|
case "percentStyle":
|
|
setFormatter(uiResource.cellTab.format.percentValue);
|
|
break;
|
|
|
|
case "commaStyle":
|
|
setFormatter(uiResource.cellTab.format.commaValue);
|
|
break;
|
|
|
|
case "increaseDecimal":
|
|
increaseDecimal();
|
|
break;
|
|
|
|
case "decreaseDecimal":
|
|
decreaseDecimal();
|
|
break;
|
|
|
|
case "comment-underline":
|
|
case "comment-overline":
|
|
case "comment-strikethrough":
|
|
setCommentTextDecoration(+$element.data("value"));
|
|
break;
|
|
|
|
default:
|
|
console.log("buttonClicked w/o process code for ", name);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
function setCommentTextDecoration(flag) {
|
|
if (_activeComment) {
|
|
var textDecoration = _activeComment.textDecoration();
|
|
_activeComment.textDecoration(textDecoration ^ flag);
|
|
}
|
|
}
|
|
|
|
// Increase Decimal related items
|
|
function increaseDecimal() {
|
|
var sheet = spread.getActiveSheet();
|
|
execInSelections(sheet, "formatter", function (sheet, row, column) {
|
|
var style = sheet.getStyle(row, column);
|
|
if (!style) {
|
|
style = new spreadNS.Style();
|
|
}
|
|
var activeCell = sheet.getCell(sheet.getActiveRowIndex(), sheet.getActiveColumnIndex());
|
|
var activeCellValue = activeCell.value();
|
|
var activeCellFormatter = activeCell.formatter();
|
|
var activeCellText = activeCell.text();
|
|
|
|
if (activeCellValue) {
|
|
var formatString = null;
|
|
var zero = "0";
|
|
var numberSign = "#";
|
|
var decimalPoint = ".";
|
|
var zeroPointZero = "0" + decimalPoint + "0";
|
|
|
|
var scientificNotationCheckingFormatter = getScientificNotationCheckingFormattter(activeCellFormatter);
|
|
if (!activeCellFormatter || ((activeCellFormatter == "General" || (scientificNotationCheckingFormatter &&
|
|
(scientificNotationCheckingFormatter.indexOf("E") >= 0 || scientificNotationCheckingFormatter.indexOf('e') >= 0))))) {
|
|
if (!isNaN(activeCellValue)) {
|
|
var result = activeCellText.split('.');
|
|
if (result.length == 1) {
|
|
if (result[0].indexOf('E') >= 0 || result[0].indexOf('e') >= 0)
|
|
formatString = zeroPointZero + "E+00";
|
|
else
|
|
formatString = zeroPointZero;
|
|
}
|
|
else if (result.length == 2) {
|
|
result[0] = "0";
|
|
var isScience = false;
|
|
var sb = "";
|
|
for (var i = 0; i < result[1].length + 1; i++) {
|
|
sb = sb + '0';
|
|
if (i < result[1].length && (result[1].charAt(i) == 'e' || result[1].charAt(i) == 'E')) {
|
|
isScience = true;
|
|
break;
|
|
}
|
|
}
|
|
if (isScience)
|
|
sb = sb + "E+00";
|
|
if (sb) {
|
|
result[1] = sb.toString();
|
|
formatString = result[0] + decimalPoint + result[1];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
formatString = activeCellFormatter;
|
|
if (formatString) {
|
|
var formatters = formatString.split(';');
|
|
for (var i = 0; i < formatters.length && i < 2; i++) {
|
|
if (formatters[i] && formatters[i].indexOf("/") < 0 && formatters[i].indexOf(":") < 0 && formatters[i].indexOf("?") < 0) {
|
|
var indexOfDecimalPoint = formatters[i].lastIndexOf(decimalPoint);
|
|
if (indexOfDecimalPoint != -1) {
|
|
formatters[i] = formatters[i].slice(0, indexOfDecimalPoint + 1) + zero + formatters[i].slice(indexOfDecimalPoint + 1);
|
|
}
|
|
else {
|
|
var indexOfZero = formatters[i].lastIndexOf(zero);
|
|
var indexOfNumberSign = formatters[i].lastIndexOf(numberSign);
|
|
var insertIndex = indexOfZero > indexOfNumberSign ? indexOfZero : indexOfNumberSign;
|
|
if (insertIndex >= 0)
|
|
formatters[i] = formatters[i].slice(0, insertIndex + 1) + decimalPoint + zero + formatters[i].slice(insertIndex + 1);
|
|
}
|
|
}
|
|
}
|
|
formatString = formatters.join(";");
|
|
}
|
|
}
|
|
style.formatter = formatString;
|
|
sheet.setStyle(row, column, style);
|
|
}
|
|
});
|
|
}
|
|
|
|
//This method is used to get the formatter which not include the string and color
|
|
//in order to not misleading with the charactor 'e' / 'E' in scientific notation.
|
|
function getScientificNotationCheckingFormattter(formatter) {
|
|
if (!formatter) {
|
|
return formatter;
|
|
}
|
|
var i;
|
|
var signalQuoteSubStrings = getSubStrings(formatter, '\'', '\'');
|
|
for (i = 0; i < signalQuoteSubStrings.length; i++) {
|
|
formatter = formatter.replace(signalQuoteSubStrings[i], '');
|
|
}
|
|
var doubleQuoteSubStrings = getSubStrings(formatter, '\"', '\"');
|
|
for (i = 0; i < doubleQuoteSubStrings.length; i++) {
|
|
formatter = formatter.replace(doubleQuoteSubStrings[i], '');
|
|
}
|
|
var colorStrings = getSubStrings(formatter, '[', ']');
|
|
for (i = 0; i < colorStrings.length; i++) {
|
|
formatter = formatter.replace(colorStrings[i], '');
|
|
}
|
|
return formatter;
|
|
}
|
|
|
|
function getSubStrings(source, beginChar, endChar) {
|
|
if (!source) {
|
|
return [];
|
|
}
|
|
var subStrings = [], tempSubString = '', inSubString = false;
|
|
for (var index = 0; index < source.length; index++) {
|
|
if (!inSubString && source[index] === beginChar) {
|
|
inSubString = true;
|
|
tempSubString = source[index];
|
|
continue;
|
|
}
|
|
if (inSubString) {
|
|
tempSubString += source[index];
|
|
if (source[index] === endChar) {
|
|
subStrings.push(tempSubString);
|
|
tempSubString = "";
|
|
inSubString = false;
|
|
}
|
|
}
|
|
}
|
|
return subStrings;
|
|
}
|
|
// Increase Decimal related items (end)
|
|
|
|
// Decrease Decimal related items
|
|
function decreaseDecimal() {
|
|
var sheet = spread.getActiveSheet();
|
|
execInSelections(sheet, "formatter", function (sheet, row, column) {
|
|
var style = sheet.getStyle(row, column);
|
|
if (!style) {
|
|
style = new spreadNS.Style();
|
|
}
|
|
var activeCell = sheet.getCell(sheet.getActiveRowIndex(), sheet.getActiveColumnIndex());
|
|
var activeCellValue = activeCell.value();
|
|
var activeCellFormatter = activeCell.formatter();
|
|
var activeCellText = activeCell.text();
|
|
var decimalPoint = ".";
|
|
if (activeCellValue) {
|
|
var formatString = null;
|
|
if (!activeCellFormatter || activeCellFormatter == "General") {
|
|
if (!isNaN(activeCellValue)) {
|
|
var result = activeCellText.split('.');
|
|
if (result.length == 2) {
|
|
result[0] = "0";
|
|
var isScience = false;
|
|
var sb = "";
|
|
for (var i = 0; i < result[1].length - 1; i++) {
|
|
if ((i + 1 < result[1].length) && (result[1].charAt(i + 1) == 'e' || result[1].charAt(i + 1) == 'E')) {
|
|
isScience = true;
|
|
break;
|
|
}
|
|
sb = sb + ('0');
|
|
}
|
|
|
|
if (isScience)
|
|
sb = sb + ("E+00");
|
|
|
|
if (sb !== null) {
|
|
result[1] = sb.toString();
|
|
|
|
formatString = result[0] + (result[1] !== "" ? decimalPoint + result[1] : "");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
formatString = activeCellFormatter;
|
|
if (formatString) {
|
|
var formatters = formatString.split(';');
|
|
for (var i = 0; i < formatters.length && i < 2; i++) {
|
|
if (formatters[i] && formatters[i].indexOf("/") < 0 && formatters[i].indexOf(":") < 0 && formatters[i].indexOf("?") < 0) {
|
|
var indexOfDecimalPoint = formatters[i].lastIndexOf(decimalPoint);
|
|
if (indexOfDecimalPoint != -1 && indexOfDecimalPoint + 1 < formatters[i].length) {
|
|
formatters[i] = formatters[i].slice(0, indexOfDecimalPoint + 1) + formatters[i].slice(indexOfDecimalPoint + 2);
|
|
var tempString = indexOfDecimalPoint + 1 < formatters[i].length ? formatters[i].substr(indexOfDecimalPoint + 1, 1) : "";
|
|
if (tempString === "" || tempString !== "0")
|
|
formatters[i] = formatters[i].slice(0, indexOfDecimalPoint) + formatters[i].slice(indexOfDecimalPoint + 1);
|
|
}
|
|
else {
|
|
//do nothing.
|
|
}
|
|
}
|
|
}
|
|
formatString = formatters.join(";");
|
|
}
|
|
}
|
|
style.formatter = formatString;
|
|
sheet.setStyle(row, column, style);
|
|
}
|
|
});
|
|
}
|
|
// Decrease Decimal related items (end)
|
|
|
|
function setAlignment(sheet, type, value) {
|
|
var sels = sheet.getSelections(),
|
|
rowCount = sheet.getRowCount(),
|
|
columnCount = sheet.getColumnCount(),
|
|
align;
|
|
|
|
value = value.toLowerCase();
|
|
|
|
if (value === "middle") {
|
|
value = "center";
|
|
}
|
|
|
|
if (type === "hAlign") {
|
|
align = spreadNS.HorizontalAlign[value];
|
|
} else {
|
|
align = spreadNS.VerticalAlign[value];
|
|
}
|
|
|
|
sheet.suspendPaint();
|
|
for (var n = 0; n < sels.length; n++) {
|
|
var sel = getActualCellRange(sheet, sels[n], rowCount, columnCount);
|
|
sheet.getRange(sel.row, sel.col, sel.rowCount, sel.colCount)[type](align);
|
|
}
|
|
sheet.resumePaint();
|
|
}
|
|
|
|
function setTextDecoration(sheet, flag) {
|
|
var sels = sheet.getSelections();
|
|
var rowCount = sheet.getRowCount(),
|
|
columnCount = sheet.getColumnCount();
|
|
|
|
sheet.suspendPaint();
|
|
for (var n = 0; n < sels.length; n++) {
|
|
var sel = getActualCellRange(sheet, sels[n], rowCount, columnCount),
|
|
textDecoration = sheet.getCell(sel.row, sel.col).textDecoration();
|
|
if ((textDecoration & flag) === flag) {
|
|
textDecoration = textDecoration - flag;
|
|
} else {
|
|
textDecoration = textDecoration | flag;
|
|
}
|
|
sheet.getRange(sel.row, sel.col, sel.rowCount, sel.colCount).textDecoration(textDecoration);
|
|
}
|
|
sheet.resumePaint();
|
|
}
|
|
|
|
function setWordWrap(sheet) {
|
|
var sels = sheet.getSelections();
|
|
var rowCount = sheet.getRowCount(),
|
|
columnCount = sheet.getColumnCount();
|
|
|
|
sheet.suspendPaint();
|
|
for (var n = 0; n < sels.length; n++) {
|
|
var sel = getActualCellRange(sheet, sels[n], rowCount, columnCount),
|
|
wordWrap = !sheet.getCell(sel.row, sel.col).wordWrap(),
|
|
startRow = sel.row,
|
|
endRow = sel.row + sel.rowCount - 1;
|
|
|
|
sheet.getRange(startRow, sel.col, sel.rowCount, sel.colCount).wordWrap(wordWrap);
|
|
|
|
for (var row = startRow; row <= endRow; row++) {
|
|
sheet.autoFitRow(row);
|
|
}
|
|
}
|
|
sheet.resumePaint();
|
|
}
|
|
function setTextIndent(sheet, step) {
|
|
var sels = sheet.getSelections();
|
|
var rowCount = sheet.getRowCount(),
|
|
columnCount = sheet.getColumnCount();
|
|
|
|
sheet.suspendPaint();
|
|
for (var n = 0; n < sels.length; n++) {
|
|
var sel = getActualCellRange(sheet, sels[n], rowCount, columnCount),
|
|
indent = sheet.getCell(sel.row, sel.col).textIndent();
|
|
|
|
if (isNaN(indent)) {
|
|
indent = 0;
|
|
}
|
|
|
|
var value = indent + step;
|
|
if (value < 0) {
|
|
value = 0;
|
|
}
|
|
sheet.getRange(sel.row, sel.col, sel.rowCount, sel.colCount).textIndent(value);
|
|
}
|
|
sheet.resumePaint();
|
|
}
|
|
|
|
function divButtonClicked() {
|
|
var sheet = spread.getActiveSheet(),
|
|
id = this.id;
|
|
|
|
spread.suspendPaint();
|
|
switch (id) {
|
|
case "mergeCells":
|
|
mergeCells(sheet);
|
|
updateMergeButtonsState();
|
|
break;
|
|
|
|
case "unmergeCells":
|
|
unmergeCells(sheet);
|
|
updateMergeButtonsState();
|
|
break;
|
|
|
|
case "freezePane":
|
|
sheet.frozenRowCount(sheet.getActiveRowIndex());
|
|
sheet.frozenColumnCount(sheet.getActiveColumnIndex());
|
|
syncForzenProperties(sheet);
|
|
break;
|
|
|
|
case "unfreeze":
|
|
sheet.frozenRowCount(0);
|
|
sheet.frozenColumnCount(0);
|
|
sheet.frozenTrailingRowCount(0);
|
|
sheet.frozenTrailingColumnCount(0);
|
|
syncForzenProperties(sheet);
|
|
break;
|
|
|
|
case "sortAZ":
|
|
case "sortZA":
|
|
sortData(sheet, id === "sortAZ");
|
|
break;
|
|
|
|
case "filter":
|
|
updateFilter(sheet);
|
|
break;
|
|
|
|
case "group":
|
|
addGroup(sheet);
|
|
break;
|
|
|
|
case "ungroup":
|
|
removeGroup(sheet);
|
|
break;
|
|
|
|
case "showDetail":
|
|
toggleGroupDetail(sheet, true);
|
|
break;
|
|
|
|
case "hideDetail":
|
|
toggleGroupDetail(sheet, false);
|
|
break;
|
|
|
|
default:
|
|
console.log("TODO add code for ", id);
|
|
break;
|
|
}
|
|
spread.resumePaint();
|
|
}
|
|
|
|
function mergeCells(sheet) {
|
|
var sels = sheet.getSelections();
|
|
var rowCount = sheet.getRowCount(),
|
|
columnCount = sheet.getColumnCount();
|
|
|
|
for (var n = 0; n < sels.length; n++) {
|
|
var sel = getActualCellRange(sheet, sels[n], rowCount, columnCount);
|
|
sheet.addSpan(sel.row, sel.col, sel.rowCount, sel.colCount);
|
|
}
|
|
}
|
|
|
|
function unmergeCells(sheet) {
|
|
function removeSpan(range) {
|
|
sheet.removeSpan(range.row, range.col);
|
|
}
|
|
|
|
var sels = sheet.getSelections();
|
|
var rowCount = sheet.getRowCount(),
|
|
columnCount = sheet.getColumnCount();
|
|
|
|
for (var n = 0; n < sels.length; n++) {
|
|
var sel = getActualCellRange(sheet, sels[n], rowCount, columnCount);
|
|
sheet.getSpans(sel).forEach(removeSpan);
|
|
}
|
|
}
|
|
|
|
function sortData(sheet, ascending) {
|
|
var sels = sheet.getSelections();
|
|
var rowCount = sheet.getRowCount(),
|
|
columnCount = sheet.getColumnCount();
|
|
|
|
for (var n = 0; n < sels.length; n++) {
|
|
var sel = getActualCellRange(sheet, sels[n], rowCount, columnCount);
|
|
sheet.sortRange(sel.row, sel.col, sel.rowCount, sel.colCount, true,
|
|
[
|
|
{index: sel.col, ascending: ascending}
|
|
]);
|
|
}
|
|
}
|
|
|
|
function updateFilter(sheet) {
|
|
if (sheet.rowFilter()) {
|
|
sheet.rowFilter(null);
|
|
} else {
|
|
var sels = sheet.getSelections();
|
|
if (sels.length > 0) {
|
|
var sel = sels[0];
|
|
sheet.rowFilter(new spreadNS.Filter.HideRowFilter(sel));
|
|
}
|
|
}
|
|
}
|
|
|
|
function setCheckboxEnable($element, enable) {
|
|
if (enable) {
|
|
$element.removeClass("disabled");
|
|
$element.find(".button").addClass("checked");
|
|
} else {
|
|
$element.addClass("disabled");
|
|
}
|
|
}
|
|
|
|
function addGroup(sheet) {
|
|
var sels = sheet.getSelections();
|
|
var sel = sels[0];
|
|
|
|
if (!sel) return;
|
|
|
|
if (sel.col === -1) // row selection
|
|
{
|
|
spread.commandManager().execute({
|
|
cmd: 'outlineRow',
|
|
sheetName: sheet.name(),
|
|
index: sel.row,
|
|
count: sel.rowCount
|
|
});
|
|
}
|
|
else if (sel.row === -1) // column selection
|
|
{
|
|
spread.commandManager().execute({
|
|
cmd: 'outlineColumn',
|
|
sheetName: sheet.name(),
|
|
index: sel.col,
|
|
count: sel.colCount
|
|
});
|
|
}
|
|
else // cell range selection
|
|
{
|
|
alert(getResource("messages.rowColumnRangeRequired"));
|
|
}
|
|
}
|
|
|
|
function removeGroup(sheet) {
|
|
var sels = sheet.getSelections();
|
|
var sel = sels[0];
|
|
|
|
if (!sel) return;
|
|
|
|
if (sel.col === -1 && sel.row === -1) // sheet selection
|
|
{
|
|
sheet.rowOutlines.ungroup(0, sheet.getRowCount());
|
|
sheet.columnOutlines.ungroup(0, sheet.getColumnCount());
|
|
}
|
|
else if (sel.col === -1) // row selection
|
|
{
|
|
spread.commandManager().execute({
|
|
cmd: 'removeRowOutline',
|
|
sheetName: sheet.name(),
|
|
index: sel.row,
|
|
count: sel.rowCount
|
|
});
|
|
}
|
|
else if (sel.row === -1) // column selection
|
|
{
|
|
spread.commandManager().execute({
|
|
cmd: 'removeColumnOutline',
|
|
sheetName: sheet.name(),
|
|
index: sel.col,
|
|
count: sel.colCount
|
|
});
|
|
}
|
|
else // cell range selection
|
|
{
|
|
alert(getResource("messages.rowColumnRangeRequired"));
|
|
}
|
|
}
|
|
|
|
function toggleGroupDetail(sheet, expand) {
|
|
var sels = sheet.getSelections();
|
|
var sel = sels[0];
|
|
|
|
if (!sel) return;
|
|
|
|
if (sel.col === -1 && sel.row === -1) // sheet selection
|
|
{
|
|
}
|
|
else if (sel.col === -1) // row selection
|
|
{
|
|
for (var i = 0; i < sel.rowCount; i++) {
|
|
var rgi = sheet.rowOutlines.find(sel.row + i, 0);
|
|
if (rgi) {
|
|
sheet.rowOutlines.expand(rgi.level, expand);
|
|
}
|
|
}
|
|
}
|
|
else if (sel.row === -1) // column selection
|
|
{
|
|
for (var i = 0; i < sel.colCount; i++) {
|
|
var rgi = sheet.columnOutlines.find(sel.col + i, 0);
|
|
if (rgi) {
|
|
sheet.columnOutlines.expand(rgi.level, expand);
|
|
}
|
|
}
|
|
}
|
|
else // cell range selection
|
|
{
|
|
}
|
|
}
|
|
|
|
var MARGIN_BOTTOM = 4;
|
|
|
|
function adjustSpreadSize() {
|
|
var height = $("#inner-content-container").height() - $("#formulaBar").height() - MARGIN_BOTTOM,
|
|
spreadHeight = $("#ss").height();
|
|
|
|
if (spreadHeight !== height) {
|
|
$("#controlPanel").height(height);
|
|
$("#ss").height(height);
|
|
$("#ss").data("workbook").refresh();
|
|
}
|
|
}
|
|
|
|
function screenAdoption() {
|
|
adjustSpreadSize();
|
|
|
|
// adjust toolbar items position
|
|
var $toolbar = $("#toolbar"),
|
|
sectionWidth = Math.floor($toolbar.width() / 3);
|
|
|
|
$(".toolbar-left-section", $toolbar).width(sectionWidth);
|
|
|
|
// + 2 to make sure the right section with enough space to show in same line
|
|
if (sectionWidth > 375 + 2) { // 340 = (380 + 300) / 2, where 380 is min-width of left section, 300 is the width of right section
|
|
$(".toolbar-middle-section", $toolbar).width(sectionWidth);
|
|
} else {
|
|
$(".toolbar-middle-section", $toolbar).width("auto");
|
|
}
|
|
|
|
// explicit set formula box' width instead of 100% because it's contained in table
|
|
var width = $("#inner-content-container").width() - $("#positionbox").outerWidth() - 1; // 1: border' width of td contains formulabox (left only)
|
|
$("#formulabox").css({width: width});
|
|
}
|
|
|
|
function doPrepareWork() {
|
|
/*
|
|
1. expand / collapse .insp-group by checking expanded class
|
|
*/
|
|
function processDisplayGroups() {
|
|
$("div.insp-group").each(function () {
|
|
var $group = $(this),
|
|
expanded = $group.hasClass("expanded"),
|
|
$content = $group.find("div.insp-group-content"),
|
|
$state = $group.find("span.group-state");
|
|
|
|
if (expanded) {
|
|
$content.show();
|
|
$state.addClass("fa-caret-down");
|
|
} else {
|
|
$content.hide();
|
|
$state.addClass("fa-caret-right");
|
|
}
|
|
});
|
|
}
|
|
|
|
function addEventHandlers() {
|
|
$("div.insp-group-title>span").click(toggleState);
|
|
$("div.insp-checkbox").click(checkedChanged);
|
|
$("div.insp-number>input.editor").blur(updateNumberProperty);
|
|
$("div.insp-dropdown-list .dropdown").click(showDropdown);
|
|
$("div.insp-menu .menu-item").click(itemSelected);
|
|
$("div.insp-color-picker .picker").click(showColorPicker);
|
|
$("li.color-cell").click(colorSelected);
|
|
$(".insp-button-group span.btn").click(buttonClicked);
|
|
$(".insp-radio-button-group span.btn").click(buttonClicked);
|
|
$(".insp-buttons .btn").click(divButtonClicked);
|
|
$(".insp-text input.editor").blur(updateStringProperty);
|
|
}
|
|
|
|
processDisplayGroups();
|
|
|
|
addEventHandlers();
|
|
|
|
$("input[type='number']:not('.not-min-zero')").attr("min", 0);
|
|
|
|
// set default values
|
|
var item = setDropDownValueByIndex($("#conditionalFormatType"), -1);
|
|
processConditionalFormatDetailSetting(item.value, true);
|
|
var cellTypeItem = setDropDownValueByIndex($("#cellTypes"), -1);
|
|
processCellTypeSetting(cellTypeItem.value, true); // CellType Setting
|
|
var validationTypeItem = setDropDownValueByIndex($("#validatorType"), 0);
|
|
processDataValidationSetting(validationTypeItem.value); // Data Validation Setting
|
|
var sparklineTypeItem = setDropDownValueByIndex($("#sparklineExTypeDropdown"), 0);
|
|
processSparklineSetting(sparklineTypeItem.value); // SparklineEx Setting
|
|
|
|
setDropDownValue("numberValidatorComparisonOperator", 0); // NumberValidator Comparison Operator
|
|
processNumberValidatorComparisonOperatorSetting(0);
|
|
setDropDownValue("dateValidatorComparisonOperator", 0); // DateValidator Comparison Operator
|
|
processDateValidatorComparisonOperatorSetting(0);
|
|
setDropDownValue("textLengthValidatorComparisonOperator", 0); // TextLengthValidator Comparison Operator
|
|
processTextLengthValidatorComparisonOperatorSetting(0);
|
|
processBorderLineSetting("thin"); // Border Line Setting
|
|
|
|
setDropDownValue("minType", 1); // LowestValue
|
|
setDropDownValue("midType", 4); // Percentile
|
|
setDropDownValue("maxType", 2); // HighestValue
|
|
setDropDownValue("minimumType", 5); // Automin
|
|
setDropDownValue("maximumType", 7); // Automax
|
|
setDropDownValue("dataBarDirection", 0); // Left-to-Right
|
|
setDropDownValue("axisPosition", 0); // Automatic
|
|
setDropDownValue("iconSetType", 0); // ThreeArrowsColored
|
|
setDropDownValue("checkboxCellTypeTextAlign", 3); // Right
|
|
setDropDownValue("comboboxCellTypeEditorValueType", 2); // Value
|
|
setDropDownValue("errorAlert", 0); // Data Validation Error Alert Type
|
|
setDropDownValue("zoomSpread", 1); // Zoom Value
|
|
setDropDownValueByIndex($("#commomFormatType"), 0); // Format Setting
|
|
setDropDownValueByIndex($("#boxplotClassType"), 0); // BoxPlotSparkline Class
|
|
setDropDownValue("boxplotSparklineStyleType", 0); // BoxPlotSparkline Style
|
|
setDropDownValue("dataOrientationType", 0); // CompatibleSparkline DataOrientation
|
|
setDropDownValue("paretoLabelList", 0); // ParetoSparkline Label
|
|
setDropDownValue("spreadSparklineStyleType", 4); // SpreadSparkline Style
|
|
setDropDownValue("stackedSparklineTextOrientation", 0); // StackedSparkline TextOrientation
|
|
setDropDownValueByIndex($("#spreadTheme"), 1); // Spread Theme
|
|
setDropDownValue("resizeZeroIndicator", 1); // ResizeZeroIndicator
|
|
setDropDownValueByIndex($("#copyPasteHeaderOptions"), 3); // CopyPasteHeaderOptins
|
|
setDropDownValueByIndex($("#cellLabelVisibility"), 0); // CellLabelVisibility
|
|
setDropDownValueByIndex($("#cellLabelAlignment"), 0); // CellLabelAlignment
|
|
conditionalFormatTexts = uiResource.conditionalFormat.texts;
|
|
}
|
|
|
|
function initSpread() {
|
|
//formulabox
|
|
fbx = new spreadNS.FormulaTextBox.FormulaTextBox(document.getElementById('formulabox'));
|
|
fbx.workbook(spread);
|
|
|
|
setCellContent();
|
|
setFormulaContent();
|
|
setConditionalFormatContent();
|
|
setTableContent();
|
|
setSparklineContent();
|
|
setCommentContent();
|
|
setPictureContent();
|
|
setDataContent();
|
|
setSlicerContent();
|
|
addChartContent();
|
|
}
|
|
|
|
// Sample Content related items
|
|
function setFormulaContent() {
|
|
var sheet = new spreadNS.Worksheet("Formula");
|
|
spread.addSheet(spread.getSheetCount(), sheet);
|
|
|
|
sheet.suspendPaint();
|
|
sheet.setColumnCount(50);
|
|
|
|
sheet.setColumnWidth(0, 100);
|
|
sheet.setColumnWidth(2, 100);
|
|
sheet.setColumnWidth(6, 103);
|
|
sheet.setColumnWidth(8, 150);
|
|
|
|
var row = 1, col = 2; // basic function
|
|
sheet.getCell(row, 0).value("Basic Function").font("700 11pt Calibri");
|
|
sheet.getCell(row, col).value("Name");
|
|
sheet.getCell(row, ++col).value("Age");
|
|
row++, col = 2;
|
|
sheet.getCell(row, col).value("Jack").hAlign(spreadNS.HorizontalAlign.right);
|
|
sheet.getCell(row, ++col).value(17);
|
|
row++, col = 2;
|
|
sheet.getCell(row, col).value("Lily").hAlign(spreadNS.HorizontalAlign.right);
|
|
sheet.getCell(row, ++col).value(23);
|
|
row++, col = 2;
|
|
sheet.getCell(row, col).value("Bob").hAlign(spreadNS.HorizontalAlign.right);
|
|
sheet.getCell(row, ++col).value(30);
|
|
row++, col = 2;
|
|
sheet.getCell(row, col).value("Mary").hAlign(spreadNS.HorizontalAlign.right);
|
|
sheet.getCell(row, ++col).value(25);
|
|
row++, col = 2;
|
|
sheet.getCell(row, col).value("Average Age:");
|
|
sheet.getCell(row, ++col).formula("=AVERAGE(D3:D6)");
|
|
row++, col = 2;
|
|
sheet.getCell(row, col).value("Max Age:");
|
|
sheet.getCell(row, ++col).formula("=MAX(D3:D6)");
|
|
row++, col = 2;
|
|
sheet.getCell(row, col).value("Min Age:");
|
|
sheet.getCell(row, ++col).formula("=MIN(D3:D6)");
|
|
|
|
row = 1, col = 8; // indirect function
|
|
sheet.getCell(row, 6).value("Indirect Function").font("700 11pt Calibri");
|
|
sheet.getCell(row, col).value("J2");
|
|
sheet.getCell(row, ++col).value(1);
|
|
row++, col = 8;
|
|
sheet.getCell(row, col).value("I");
|
|
sheet.getCell(row, ++col).value(2);
|
|
row++, col = 8;
|
|
sheet.getCell(row, col).value("J");
|
|
sheet.getCell(row, ++col).value(3);
|
|
row = row + 2, col = 8;
|
|
var formulaStr = "=INDIRECT(\"I2\")";
|
|
sheet.getCell(row, col).value(formulaStr);
|
|
sheet.getCell(row, ++col).formula(formulaStr);
|
|
row++, col = 8;
|
|
formulaStr = "=INDIRECT(I2)";
|
|
sheet.getCell(row, col).value(formulaStr);
|
|
sheet.getCell(row, ++col).formula(formulaStr);
|
|
row++, col = 8;
|
|
formulaStr = "=INDIRECT(\"I\"&(1+2))";
|
|
sheet.getCell(row, col).value(formulaStr);
|
|
sheet.getCell(row, ++col).formula(formulaStr);
|
|
row++, col = 8;
|
|
formulaStr = "=INDIRECT(I4&J3)";
|
|
sheet.getCell(row, col).value(formulaStr);
|
|
sheet.getCell(row, ++col).formula(formulaStr);
|
|
row++, col = 8;
|
|
formulaStr = "=INDIRECT(\"" + sheet.name() + "!\"&I2)";
|
|
sheet.getCell(row, col).value(formulaStr);
|
|
sheet.getCell(row, ++col).formula(formulaStr);
|
|
row++, col = 8;
|
|
formulaStr = "=INDIRECT(\"" + sheet.name() + "!I2\")";
|
|
sheet.getCell(row, col).value(formulaStr);
|
|
sheet.getCell(row, ++col).formula(formulaStr);
|
|
|
|
row = 12; // array formula
|
|
sheet.getCell(row, 0).value("Array Formula").font("700 11pt Calibri");
|
|
sheet.addSpan(row, 2, 1, 6);
|
|
sheet.getCell(row, 2).value("Calculation");
|
|
sheet.setArray(13, 2, [
|
|
["", "Match", "Physical", "Chemistry", "", "Sum"],
|
|
["Alice", 97, 61, 53],
|
|
["John", 65, 76, 65],
|
|
["Bob", 55, 70, 64],
|
|
["Jack", 89, 77, 73]
|
|
]);
|
|
sheet.setArrayFormula(14, 7, 4, 1, "=SUBTOTAL(9,OFFSET($D$15,ROW($D$15:$D$18)-ROW($D$15),,1,3))");
|
|
|
|
row = 19;
|
|
sheet.addSpan(row, 2, 1, 6);
|
|
sheet.getCell(row, 2).value("Search");
|
|
sheet.setArray(20, 2, [
|
|
["apple", "apple"],
|
|
["banana", "pear"],
|
|
["pear", "potato"],
|
|
["tomato", "potato"],
|
|
["potato", "dumpling"],
|
|
["cake"],
|
|
["noodel"]
|
|
]);
|
|
sheet.addSpan(20, 6, 1, 5);
|
|
sheet.getCell(20, 6).value("Find out the first value on D21:D25 that doesn't contain on D21:D27");
|
|
sheet.addSpan(22, 6, 1, 2);
|
|
sheet.getCell(22, 6).value("ArrayFormula Result:");
|
|
sheet.addSpan(23, 6, 1, 2);
|
|
sheet.getCell(23, 6).value("NomalFormula Result:");
|
|
sheet.setArrayFormula(22, 8, 1, 1, "=INDEX(D21:D25,MATCH(TRUE,ISNA(MATCH(D21:D25,C21:C27,0)),0))");
|
|
sheet.setFormula(23, 8, "=INDEX(D21:D25,MATCH(TRUE,ISNA(MATCH(D21:D25,C21:C27,0)),0))");
|
|
|
|
row = 28;
|
|
sheet.addSpan(row, 2, 1, 6);
|
|
sheet.getCell(row, 2).value("Statistics");
|
|
sheet.setArray(29, 2, [
|
|
["Product", "Salesman", "Units Sold"],
|
|
["Fax", "Brown", 1],
|
|
["Phone", "Smith", 10],
|
|
["Fax", "Jones", 20],
|
|
["Fax", "Smith", 30],
|
|
["Phone", "Jones", 40],
|
|
["PC", "Smith", 50],
|
|
["Fax", "Brown", 60],
|
|
["Phone", "Davis", 70],
|
|
["PC", "Jones", 80]
|
|
]);
|
|
sheet.addSpan(29, 6, 1, 4);
|
|
sheet.getCell(29, 6).value("Summing Sales: Faxes Sold By Brown");
|
|
sheet.setArrayFormula(30, 6, 1, 1, "=SUM((C31:C39=\"Fax\")*(D31:D39=\"Brown\")*(E31:E39))");
|
|
sheet.addSpan(31, 6, 1, 4);
|
|
sheet.getCell(31, 6).value("Logical AND (Faxes And Brown)");
|
|
sheet.setArrayFormula(32, 6, 1, 1, "=SUM((C31:C39=\"Fax\")*(D31:D39=\"Brown\"))");
|
|
sheet.addSpan(33, 6, 1, 4);
|
|
sheet.getCell(33, 6).value("Logical OR (Faxes Or Jones)");
|
|
sheet.setArrayFormula(34, 6, 1, 1, "=SUM(IF((C31:C39=\"Fax\")+(D31:D39=\"Jones\"),1,0))");
|
|
sheet.addSpan(35, 6, 1, 4);
|
|
sheet.getCell(35, 6).value("Logical XOR (Fax Or Jones but not both)");
|
|
sheet.setArrayFormula(36, 6, 1, 1, "=SUM(IF(MOD((C31:C39=\"Fax\")+(D31:D39=\"Jones\"),2),1,0))");
|
|
sheet.addSpan(37, 6, 1, 4);
|
|
sheet.getCell(37, 6).value("Logical NAND (All Sales Except Fax And Jones)");
|
|
sheet.setArrayFormula(38, 6, 1, 1, "=SUM(IF((C31:C39=\"Fax\")+(D31:D39=\"Jones\")<>2,1,0))");
|
|
|
|
sheet.resumePaint();
|
|
}
|
|
|
|
function setCellContent() {
|
|
var sheet = new spreadNS.Worksheet("Cell");
|
|
spread.removeSheet(0);
|
|
spread.addSheet(spread.getSheetCount(), sheet);
|
|
|
|
sheet.suspendPaint();
|
|
sheet.setColumnCount(50);
|
|
|
|
sheet.setColumnWidth(0, 100);
|
|
sheet.setColumnWidth(1, 20);
|
|
for (var col = 2; col < 11; col++) {
|
|
sheet.setColumnWidth(col, 88);
|
|
}
|
|
|
|
var Range = spreadNS.Range;
|
|
var row = 1, col = 0; // cell background
|
|
sheet.getCell(row, col).value("Background").font("700 11pt Calibri");
|
|
sheet.getCell(row, col + 2).backColor("#1E90FF");
|
|
sheet.getCell(row, col + 4).backColor("#00ff00");
|
|
|
|
row = row + 2; // line border
|
|
var borderColor = "red";
|
|
var lineStyle = spreadNS.LineStyle;
|
|
var lineBorder = spreadNS.LineBorder;
|
|
var option = {all: true};
|
|
sheet.getCell(row, 0).value("Border").font("700 11pt Calibri");
|
|
col = 1;
|
|
sheet.getRange(row, ++col, 1, 1).setBorder(new lineBorder(borderColor, lineStyle.empty), option);
|
|
sheet.getRange(row, ++col, 1, 1).setBorder(new lineBorder(borderColor, lineStyle.hair), option);
|
|
sheet.getRange(row, ++col, 1, 1).setBorder(new lineBorder(borderColor, lineStyle.dotted), option);
|
|
sheet.getRange(row, ++col, 1, 1).setBorder(new lineBorder(borderColor, lineStyle.dashDotDot), option);
|
|
sheet.getRange(row, ++col, 1, 1).setBorder(new lineBorder(borderColor, lineStyle.dashDot), option);
|
|
sheet.getRange(row, ++col, 1, 1).setBorder(new lineBorder(borderColor, lineStyle.dashed), option);
|
|
sheet.getRange(row, ++col, 1, 1).setBorder(new lineBorder(borderColor, lineStyle.thin), option);
|
|
row = row + 2, col = 1;
|
|
sheet.getRange(row, ++col, 1, 1).setBorder(new lineBorder(borderColor, lineStyle.mediumDashDotDot), option);
|
|
sheet.getRange(row, ++col, 1, 1).setBorder(new lineBorder(borderColor, lineStyle.slantedDashDot), option);
|
|
sheet.getRange(row, ++col, 1, 1).setBorder(new lineBorder(borderColor, lineStyle.mediumDashDot), option);
|
|
sheet.getRange(row, ++col, 1, 1).setBorder(new lineBorder(borderColor, lineStyle.mediumDashed), option);
|
|
sheet.getRange(row, ++col, 1, 1).setBorder(new lineBorder(borderColor, lineStyle.medium), option);
|
|
sheet.getRange(row, ++col, 1, 1).setBorder(new lineBorder(borderColor, lineStyle.thick), option);
|
|
sheet.getRange(row, ++col, 1, 1).setBorder(new lineBorder(borderColor, lineStyle.double), option);
|
|
row = row + 2, col = 1;
|
|
sheet.getRange(row, ++col, 2, 2).setBorder(new lineBorder("blue", lineStyle.dashed), {all: true});
|
|
sheet.getRange(row, col + 3, 2, 2).setBorder(new lineBorder("yellowgreen", lineStyle.double), {outline: true});
|
|
sheet.getRange(row, col + 6, 2, 2).setBorder(new lineBorder("black", lineStyle.mediumDashed), {innerHorizontal: true});
|
|
sheet.getRange(row, col + 6, 2, 2).setBorder(new lineBorder("black", lineStyle.slantedDashDot), {innerVertical: true});
|
|
row = row + 3, col = 2;
|
|
sheet.getRange(row, col, 3, 2).setBorder(new lineBorder("lightgreen", lineStyle.thick), {outline: true});
|
|
sheet.getRange(row, col, 3, 2).setBorder(new lineBorder("lightgreen", lineStyle.thick), {innerHorizontal: true});
|
|
col = col + 3;
|
|
sheet.getRange(row, col, 3, 3).setBorder(new lineBorder("#CDCD00", lineStyle.thick), {outline: true});
|
|
sheet.getRange(row, col, 3, 3).setBorder(new lineBorder("#CDCD00", lineStyle.thick), {innerVertical: true});
|
|
|
|
row = row + 3, col = 1; // merge cell
|
|
sheet.getCell(row + 1, 0).value("Span").font("700 11pt Calibri");
|
|
sheet.addSpan(row + 1, ++col, 1, 2);
|
|
sheet.addSpan(row, col + 3, 3, 1);
|
|
sheet.addSpan(row, col + 5, 3, 2);
|
|
|
|
row = row + 4, col = 1; // font
|
|
var TextDecorationType = spreadNS.TextDecorationType;
|
|
var fontText = "SPREADJS";
|
|
sheet.getCell(row, 0).value("Font").font("700 11pt Calibri");
|
|
sheet.getCell(row, ++col).value(fontText);
|
|
sheet.getCell(row, ++col).value(fontText).font("13pt Calibri");
|
|
sheet.getCell(row, ++col).value(fontText).font("11pt Arial");
|
|
sheet.getCell(row, ++col).value(fontText).font("13pt Times New Roman");
|
|
sheet.getCell(row, ++col).value(fontText).backColor("#FFD700");
|
|
sheet.getCell(row, ++col).value(fontText).foreColor("#436EEE");
|
|
row = row + 2, col = 1;
|
|
sheet.getCell(row, ++col).value(fontText).foreColor("#FFD700").backColor("#436EEE");
|
|
sheet.getCell(row, ++col).value(fontText).font("700 11pt Calibri");
|
|
sheet.getCell(row, ++col).value(fontText).font("italic 11pt Calibri");
|
|
sheet.getCell(row, ++col).value(fontText).textDecoration(TextDecorationType.underline);
|
|
sheet.getCell(row, ++col).value(fontText).textDecoration(TextDecorationType.lineThrough);
|
|
sheet.getCell(row, ++col).value(fontText).textDecoration(TextDecorationType.overline);
|
|
|
|
row = row + 2, col = 1; // format
|
|
var number = 0.25;
|
|
sheet.getCell(row, 0).value("Format").font("700 11pt Calibri");
|
|
sheet.getCell(row, ++col).value(number).formatter("0.00");
|
|
sheet.getCell(row, ++col).value(number).formatter("$#,##0.00");
|
|
sheet.getCell(row, ++col).value(number).formatter("$ #,##0.00;$ (#,##0.00);$ \"-\"??;@");
|
|
sheet.getCell(row, ++col).value(number).formatter("0%");
|
|
sheet.getCell(row, ++col).value(number).formatter("# ?/?");
|
|
row = row + 2, col = 1;
|
|
sheet.getCell(row, ++col).value(number).formatter("0.00E+00");
|
|
sheet.getCell(row, ++col).value(number).formatter("@");
|
|
sheet.getCell(row, ++col).value(number).formatter("h:mm:ss AM/PM");
|
|
sheet.getCell(row, ++col).value(number).formatter("m/d/yyyy");
|
|
sheet.getCell(row, ++col).value(number).formatter("dddd, mmmm dd, yyyy");
|
|
|
|
row = row + 2, col = 1; // text alignment
|
|
var HorizontalAlign = spreadNS.HorizontalAlign;
|
|
var VerticalAlign = spreadNS.VerticalAlign;
|
|
sheet.setRowHeight(row, 60);
|
|
sheet.getCell(row, 0).value("Alignment").font("700 11pt Calibri");
|
|
sheet.getCell(row, ++col).value("Top Left").vAlign(VerticalAlign.top).hAlign(HorizontalAlign.left);
|
|
sheet.getCell(row, ++col).value("Top Center").vAlign(VerticalAlign.top).hAlign(HorizontalAlign.center);
|
|
sheet.getCell(row, ++col).value("Top Right").vAlign(VerticalAlign.top).hAlign(HorizontalAlign.right);
|
|
sheet.getCell(row, ++col).value("Center Left").vAlign(VerticalAlign.center).hAlign(HorizontalAlign.left);
|
|
sheet.getCell(row, ++col).value("Center Center").vAlign(VerticalAlign.center).hAlign(HorizontalAlign.center);
|
|
sheet.getCell(row, ++col).value("Center Right").vAlign(VerticalAlign.center).hAlign(HorizontalAlign.right);
|
|
sheet.getCell(row, ++col).value("Bottom Left").vAlign(VerticalAlign.bottom).hAlign(HorizontalAlign.left);
|
|
sheet.getCell(row, ++col).value("Bottom Center").vAlign(VerticalAlign.bottom).hAlign(HorizontalAlign.center);
|
|
sheet.getCell(row, ++col).value("Bottom Right").vAlign(VerticalAlign.bottom).hAlign(HorizontalAlign.right);
|
|
|
|
row = row + 2, col = 1; // lock cell
|
|
sheet.getCell(row, 0).value("Locked").font("700 11pt Calibri");
|
|
sheet.getCell(row, ++col).value("TRUE").locked(true);
|
|
sheet.getCell(row, ++col).value("FALSE").locked(false);
|
|
|
|
row = row + 2, col = 1; // word wrap
|
|
sheet.setRowHeight(row, 60);
|
|
sheet.getCell(row, 0).value("WordWrap").font("700 11pt Calibri");
|
|
sheet.getCell(row, ++col).value("ABCDEFGHIJKLMNOPQRSTUVWXYZ").wordWrap(true);
|
|
sheet.getCell(row, ++col).value("ABCDEFGHIJKLMNOPQRSTUVWXYZ").wordWrap(false);
|
|
|
|
row = row + 2, col = 1; // celltype
|
|
sheet.setRowHeight(row, 25);
|
|
var cellType;
|
|
sheet.getCell(row, 0).value("CellType").font("700 11pt Calibri");
|
|
cellType = new spreadNS.CellTypes.Button();
|
|
cellType.buttonBackColor("#FFFF00");
|
|
cellType.text("I'm a button");
|
|
sheet.getCell(row, ++col).cellType(cellType);
|
|
|
|
cellType = new spreadNS.CellTypes.CheckBox();
|
|
cellType.caption("caption");
|
|
cellType.textTrue("true");
|
|
cellType.textFalse("false");
|
|
cellType.textIndeterminate("indeterminate");
|
|
cellType.textAlign(spreadNS.CellTypes.CheckBoxTextAlign.right);
|
|
cellType.isThreeState(true);
|
|
sheet.getCell(row, ++col).cellType(cellType);
|
|
|
|
cellType = new spreadNS.CellTypes.ComboBox();
|
|
cellType.items(["apple", "banana", "cat", "dog"]);
|
|
sheet.getCell(row, ++col).cellType(cellType);
|
|
|
|
cellType = new spreadNS.CellTypes.HyperLink();
|
|
cellType.linkColor("blue");
|
|
cellType.visitedLinkColor("red");
|
|
cellType.text("SpreadJS");
|
|
cellType.linkToolTip("SpreadJS Web Site");
|
|
sheet.getCell(row, ++col).cellType(cellType).value("http://www.grapecity.com/en/spreadjs/");
|
|
|
|
row = row + 2, col = 1; // celltype
|
|
sheet.setRowHeight(row, 100);
|
|
sheet.setColumnWidth(0, 150);
|
|
sheet.getCell(row, 0).value("CellPadding&Label").font("700 11pt Calibri");
|
|
sheet.getCell(row, ++col, GC.Spread.Sheets.SheetArea.viewport).watermark("User ID").cellPadding('20');
|
|
sheet.getCell(row, col, GC.Spread.Sheets.SheetArea.viewport).labelOptions({
|
|
foreColor: 'red',
|
|
visibility: 2,
|
|
font: 'bold 15px Arial'
|
|
});
|
|
|
|
var b = new GC.Spread.Sheets.CellTypes.Button();
|
|
b.text("Click Me!");
|
|
sheet.setColumnWidth(3, 200);
|
|
sheet.setCellType(row, ++col, b, GC.Spread.Sheets.SheetArea.viewport);
|
|
sheet.getCell(row, col, GC.Spread.Sheets.SheetArea.viewport).watermark("Button Cell Type").cellPadding('20 20');
|
|
sheet.getCell(row, col, GC.Spread.Sheets.SheetArea.viewport).labelOptions({
|
|
alignment: 2,
|
|
visibility: 1,
|
|
font: 'bold 15px Arial',
|
|
foreColor: 'grey'
|
|
});
|
|
|
|
var c = new GC.Spread.Sheets.CellTypes.CheckBox();
|
|
c.isThreeState(false);
|
|
c.textTrue("Checked!");
|
|
c.textFalse("Check Me!");
|
|
sheet.setColumnWidth(4, 200);
|
|
sheet.setCellType(row, ++col, c, GC.Spread.Sheets.SheetArea.viewport);
|
|
sheet.getCell(row, col, GC.Spread.Sheets.SheetArea.viewport).watermark("CheckBox Cell Type").cellPadding('30');
|
|
sheet.getCell(row, col, GC.Spread.Sheets.SheetArea.viewport).labelOptions({
|
|
alignment: 5,
|
|
visibility: 0,
|
|
foreColor: 'green'
|
|
});
|
|
sheet.resumePaint();
|
|
}
|
|
|
|
function setConditionalFormatContent(sheet) {
|
|
var sheet = new spreadNS.Worksheet("Conditional Format");
|
|
spread.addSheet(spread.getSheetCount(), sheet);
|
|
sheet.suspendPaint();
|
|
sheet.setColumnCount(50);
|
|
|
|
sheet.setColumnWidth(0, 20);
|
|
sheet.setColumnWidth(1, 20);
|
|
for (var col = 2; col < 11; col++) {
|
|
sheet.setColumnWidth(col, 83);
|
|
}
|
|
for (var row = 1; row < 16; row++) {
|
|
sheet.addSpan(row, 10, 1, 2);
|
|
}
|
|
|
|
var Range = spreadNS.Range;
|
|
var row = 1, col = 1;
|
|
var style = new spreadNS.Style();
|
|
style.backColor = "red";
|
|
var cfs = sheet.conditionalFormats;
|
|
sheet.getCell(row, ++col).value("Cell Value").font("700 11pt Calibri");
|
|
sheet.getCell(row, col + 2).value("Specific Text").font("700 11pt Calibri");
|
|
sheet.getCell(row, col + 4).value("Unique").font("700 11pt Calibri");
|
|
sheet.getCell(row, col + 6).value("Duplicate").font("700 11pt Calibri");
|
|
sheet.getCell(row, col + 8).value("Date Occurring").font("700 11pt Calibri");
|
|
|
|
var rowCount = 6;
|
|
row++, col;
|
|
sheet.getCell(row, col).value(0);
|
|
sheet.getCell(row + 1, col).value(1);
|
|
sheet.getCell(row + 2, col).value(2);
|
|
sheet.getCell(row + 3, col).value(3);
|
|
sheet.getCell(row + 4, col).value(4);
|
|
sheet.getCell(row + 5, col).value(5);
|
|
cfs.addCellValueRule(ComparisonOperators.between, 2, 4, style, [new Range(row, col, rowCount, 1)]);
|
|
|
|
col = col + 2;
|
|
sheet.getCell(row, col).value("test");
|
|
sheet.getCell(row + 1, col).value("bad");
|
|
sheet.getCell(row + 2, col).value("good");
|
|
sheet.getCell(row + 3, col).value("testing");
|
|
sheet.getCell(row + 4, col).value("tested");
|
|
sheet.getCell(row + 5, col).value("general");
|
|
cfs.addSpecificTextRule(ConditionalFormatting.TextComparisonOperators.contains, "test", style, [new Range(row, col, rowCount, 1)]);
|
|
|
|
col = col + 2;
|
|
sheet.getCell(row, col).value(50);
|
|
sheet.getCell(row + 1, col).value(50);
|
|
sheet.getCell(row + 2, col).value(11);
|
|
sheet.getCell(row + 3, col).value(5);
|
|
sheet.getCell(row + 4, col).value(50);
|
|
sheet.getCell(row + 5, col).value(120);
|
|
cfs.addUniqueRule(style, [new Range(row, col, rowCount, 1)]);
|
|
|
|
col = col + 2;
|
|
sheet.getCell(row, col).value(50);
|
|
sheet.getCell(row + 1, col).value(50);
|
|
sheet.getCell(row + 2, col).value(11);
|
|
sheet.getCell(row + 3, col).value(5);
|
|
sheet.getCell(row + 4, col).value(50);
|
|
sheet.getCell(row + 5, col).value(120);
|
|
cfs.addDuplicateRule(style, [new Range(row, col, rowCount, 1)]);
|
|
|
|
col = col + 2;
|
|
var date = new Date();
|
|
sheet.getCell(row, col).value(date);
|
|
sheet.getCell(row + 1, col).value(new Date(date.setDate(date.getDate() + 1)));
|
|
sheet.getCell(row + 2, col).value(new Date(date.setDate(date.getDate() + 5)));
|
|
sheet.getCell(row + 3, col).value(new Date(date.setDate(date.getDate() + 1)));
|
|
sheet.getCell(row + 4, col).value(new Date(date.setDate(date.getDate() + 7)));
|
|
sheet.getCell(row + 5, col).value(new Date(date.setDate(date.getDate() + 8)));
|
|
cfs.addDateOccurringRule(ConditionalFormatting.DateOccurringType.nextWeek, style, [new Range(row, col, rowCount, 1)]);
|
|
|
|
row = row + 7, col = 1;
|
|
sheet.getCell(row, ++col).value("Top/Bottom").font("700 11pt Calibri");
|
|
sheet.getCell(row, col + 2).value("Average").font("700 11pt Calibri");
|
|
sheet.getCell(row, col + 4).value("2-Color Scale").font("700 11pt Calibri");
|
|
sheet.getCell(row, col + 6).value("3-Color Scale").font("700 11pt Calibri");
|
|
sheet.getCell(row, col + 8).value("Data Bar").font("700 11pt Calibri");
|
|
|
|
row++;
|
|
sheet.getCell(row, col).value(0);
|
|
sheet.getCell(row + 1, col).value(1);
|
|
sheet.getCell(row + 2, col).value(2);
|
|
sheet.getCell(row + 3, col).value(3);
|
|
sheet.getCell(row + 4, col).value(4);
|
|
sheet.getCell(row + 5, col).value(5);
|
|
cfs.addTop10Rule(ConditionalFormatting.Top10ConditionType.top, 4, style, [new Range(row, col, rowCount, 1)]);
|
|
|
|
for (var c = col + 2; c < col + 7; c = c + 2) {
|
|
sheet.getCell(row, c).value(1);
|
|
sheet.getCell(row + 1, c).value(50);
|
|
sheet.getCell(row + 2, c).value(100);
|
|
sheet.getCell(row + 3, c).value(2);
|
|
sheet.getCell(row + 4, c).value(60);
|
|
sheet.getCell(row + 5, c).value(3);
|
|
}
|
|
cfs.addAverageRule(ConditionalFormatting.AverageConditionType.above, style, [new Range(row, col + 2, rowCount, 1)]);
|
|
cfs.add2ScaleRule(1, 1, "red", 2, 100, "yellow", [new Range(row, col + 4, rowCount, 1)]);
|
|
cfs.add3ScaleRule(1, 1, "red", 0, 50, "blue", 2, 100, "yellow", [new Range(row, col + 6, rowCount, 1)]);
|
|
|
|
col = col + 8;
|
|
sheet.getCell(row, col).value(1);
|
|
sheet.getCell(row + 1, col).value(15);
|
|
sheet.getCell(row + 2, col).value(25);
|
|
sheet.getCell(row + 3, col).value(-1);
|
|
sheet.getCell(row + 4, col).value(-15);
|
|
sheet.getCell(row + 5, col).value(-25);
|
|
var ScaleValueNumber = ConditionalFormatting.ScaleValueType.number;
|
|
cfs.addDataBarRule(1, null, 2, null, "green", [new Range(row, col, rowCount, 1)]);
|
|
|
|
row = row + 8, col = 1;
|
|
sheet.getCell(row, ++col).value("Icon Set").font("700 11pt Calibri");
|
|
sheet.addSpan(row, col, 1, 10);
|
|
sheet.addSpan(row + 6, col, 1, 10);
|
|
row++;
|
|
for (var column = col; column < col + 10; column++) {
|
|
sheet.getCell(row, column).value(-50);
|
|
sheet.getCell(row + 1, column).value(-25);
|
|
sheet.getCell(row + 2, column).value(0);
|
|
sheet.getCell(row + 3, column).value(25);
|
|
sheet.getCell(row + 4, column).value(50);
|
|
sheet.getCell(row + 6, column).value(-50);
|
|
sheet.getCell(row + 7, column).value(-25);
|
|
sheet.getCell(row + 8, column).value(0);
|
|
sheet.getCell(row + 9, column).value(25);
|
|
sheet.getCell(row + 10, column).value(50);
|
|
}
|
|
rowCount = 5;
|
|
cfs.addIconSetRule(0, [new Range(row, col, rowCount, 1)]);
|
|
cfs.addIconSetRule(1, [new Range(row, ++col, rowCount, 1)]);
|
|
cfs.addIconSetRule(2, [new Range(row, ++col, rowCount, 1)]);
|
|
cfs.addIconSetRule(3, [new Range(row, ++col, rowCount, 1)]);
|
|
cfs.addIconSetRule(4, [new Range(row, ++col, rowCount, 1)]);
|
|
cfs.addIconSetRule(5, [new Range(row, ++col, rowCount, 1)]);
|
|
cfs.addIconSetRule(6, [new Range(row, ++col, rowCount, 1)]);
|
|
cfs.addIconSetRule(7, [new Range(row, ++col, rowCount, 1)]);
|
|
cfs.addIconSetRule(8, [new Range(row, ++col, rowCount, 1)]);
|
|
cfs.addIconSetRule(9, [new Range(row, ++col, rowCount, 1)]);
|
|
col = 1;
|
|
cfs.addIconSetRule(10, [new Range(row + 6, ++col, rowCount, 1)]);
|
|
cfs.addIconSetRule(11, [new Range(row + 6, ++col, rowCount, 1)]);
|
|
cfs.addIconSetRule(12, [new Range(row + 6, ++col, rowCount, 1)]);
|
|
cfs.addIconSetRule(13, [new Range(row + 6, ++col, rowCount, 1)]);
|
|
cfs.addIconSetRule(14, [new Range(row + 6, ++col, rowCount, 1)]);
|
|
cfs.addIconSetRule(15, [new Range(row + 6, ++col, rowCount, 1)]);
|
|
cfs.addIconSetRule(16, [new Range(row + 6, ++col, rowCount, 1)]);
|
|
cfs.addIconSetRule(17, [new Range(row + 6, ++col, rowCount, 1)]);
|
|
cfs.addIconSetRule(18, [new Range(row + 6, ++col, rowCount, 1)]);
|
|
cfs.addIconSetRule(19, [new Range(row + 6, ++col, rowCount, 1)]);
|
|
|
|
sheet.resumePaint();
|
|
}
|
|
|
|
function getRandomNumber() {
|
|
var num = Math.random();
|
|
if (num - 0.5 > 0) {
|
|
return Math.round(Math.random() * 100);
|
|
}
|
|
else {
|
|
return Math.round(Math.random() * (-100));
|
|
}
|
|
}
|
|
|
|
function setTableContent() {
|
|
var sheet = new spreadNS.Worksheet("Table");
|
|
spread.addSheet(spread.getSheetCount(), sheet);
|
|
sheet.suspendPaint();
|
|
sheet.setColumnCount(50);
|
|
|
|
// table
|
|
var table, rowCount = 5, colCount = 5;
|
|
var row = 0, col = 1;
|
|
sheet.addSpan(row, col, 1, colCount);
|
|
sheet.getCell(row, col).value("Table Style - light7").font("700 11pt Calibri");
|
|
sheet.tables.add("sampleTable0", ++row, col, rowCount, colCount, spreadNS.Tables.TableThemes.light7);
|
|
|
|
sheet.addSpan(row + 7, col, 1, colCount);
|
|
sheet.getCell(row + 7, col).value("Table Style - medium7").font("700 11pt Calibri");
|
|
sheet.tables.add("sampleTable1", row + 8, col, rowCount, colCount, spreadNS.Tables.TableThemes.medium7);
|
|
|
|
sheet.addSpan(row + 15, col, 1, colCount);
|
|
sheet.getCell(row + 15, col).value("Table Style - dark7").font("700 11pt Calibri");
|
|
sheet.tables.add("sampleTable2", row + 16, col, rowCount, colCount, spreadNS.Tables.TableThemes.dark7);
|
|
|
|
sheet.addSpan(row + 23, col, 1, colCount);
|
|
sheet.getCell(row + 23, col).value("Hide Filter Button").font("700 11pt Calibri");
|
|
table = sheet.tables.add("sampleTable3", row + 24, col, rowCount, colCount);
|
|
table.filterButtonVisible(false);
|
|
|
|
row = 0, col = col + 7;
|
|
sheet.addSpan(row, col, 1, colCount);
|
|
sheet.getCell(row, col).value("Hide Header Row").font("700 11pt Calibri");
|
|
table = sheet.tables.add("sampleTable4", ++row, col, rowCount, colCount);
|
|
table.showHeader(false);
|
|
|
|
sheet.addSpan(row + 7, col, 1, colCount);
|
|
sheet.getCell(row + 7, col).value("Show Total Row").font("700 11pt Calibri");
|
|
table = sheet.tables.add("sampleTable5", row + 8, col, rowCount, colCount);
|
|
table.showFooter(true);
|
|
|
|
sheet.addSpan(row + 15, col, 1, colCount);
|
|
sheet.getCell(row + 15, col).value("Don't display alternating row style").font("700 11pt Calibri");
|
|
table = sheet.tables.add("sampleTable6", row + 16, col, rowCount, colCount);
|
|
table.bandRows(false);
|
|
|
|
sheet.addSpan(row + 23, col, 1, colCount);
|
|
sheet.getCell(row + 23, col).value("Display alternating column style").font("700 11pt Calibri");
|
|
table = sheet.tables.add("sampleTable7", row + 24, col, rowCount, colCount);
|
|
table.bandRows(false);
|
|
table.bandColumns(true);
|
|
|
|
row = 32, col = 1;
|
|
var data = [
|
|
["bob", "36", "man", "Beijing", "80"],
|
|
["Betty", "28", "woman", "Xi'an", "52"],
|
|
["Gary", "23", "man", "NewYork", "63"],
|
|
["Hunk", "45", "man", "Beijing", "80"],
|
|
["Cherry", "37", "woman", "Shanghai", "58"]];
|
|
sheet.addSpan(row, col, 1, colCount);
|
|
sheet.getCell(row, col).value("Highlight first column").font("700 11pt Calibri");
|
|
table = sheet.tables.addFromDataSource("sampleTable8", row + 1, col, data);
|
|
table.highlightFirstColumn(true);
|
|
col = col + 7;
|
|
sheet.addSpan(row, col, 1, colCount);
|
|
sheet.getCell(row, col).value("Highlight last column").font("700 11pt Calibri");
|
|
table = sheet.tables.addFromDataSource("sampleTable9", row + 1, col, data);
|
|
table.highlightLastColumn(true);
|
|
|
|
sheet.resumePaint();
|
|
}
|
|
|
|
function getHBarFormula(range) {
|
|
return "IF(" + range + ">=0.8,HBARSPARKLINE(" + range + ",\"green\"), " +
|
|
"IF(" + range + ">=0.6,HBARSPARKLINE(" + range + ",\"blue\"), " +
|
|
"IF(" + range + ">=0.4,HBARSPARKLINE(" + range + ",\"yellow\"), " +
|
|
"IF(" + range + ">=0.2,HBARSPARKLINE(" + range + ",\"orange\"), " +
|
|
"IF(" + range + ">=0,HBARSPARKLINE(" + range + ",\"red\"), HBARSPARKLINE(" + range + ",\"red\") " + ")))))";
|
|
}
|
|
|
|
function getVBarFormula(row) {
|
|
return "=IF((Q3:W3>0)=(ROW(Q13:W14)=ROW($Q$13)),VBARSPARKLINE((Q3:W3)/MAX(ABS(Q3:W3)),Q12:W12),\"\")".replace(/(Q|W)3/g, "$1" + row);
|
|
}
|
|
|
|
function setSparklineContent() {
|
|
var sheet = new spreadNS.Worksheet("Sparkline");
|
|
spread.addSheet(spread.getSheetCount(), sheet);
|
|
sheet.suspendPaint();
|
|
sheet.setColumnCount(50);
|
|
|
|
addCompatibleContent(sheet);
|
|
addPieContent(sheet);
|
|
addAreaContent(sheet);
|
|
addScatterContent(sheet);
|
|
addStackedContent(sheet);
|
|
addBulletContent(sheet);
|
|
addBoxPlotContent(sheet);
|
|
addVariContent(sheet);
|
|
addCascadeContent(sheet);
|
|
addSpreadContent(sheet);
|
|
addParetoContent(sheet);
|
|
addHBarContent(sheet);
|
|
addVBarContent(sheet);
|
|
addMonthContent(sheet);
|
|
addYearContent(sheet);
|
|
sheet.resumePaint();
|
|
}
|
|
|
|
function addMonthContent(sheet) {
|
|
sheet.addSpan(51, 3, 4, 2);
|
|
sheet.addSpan(55, 3, 1, 2);
|
|
var day = 1;
|
|
for (var row = 51; row < 82; row++) {
|
|
sheet.setValue(row, 0, new Date(2016, 0, day++));
|
|
sheet.setValue(row, 1, Math.round(Math.random() * 100));
|
|
sheet.setFormatter(row, 0, "MM/DD/YYYY");
|
|
}
|
|
sheet.setFormula(51, 3, '=MONTHSPARKLINE(2016, 1, A52:B82, "lightgray", "lightgreen", "green", "darkgreen")');
|
|
sheet.setFormula(55, 3, '=TEXT(DATE(2016,1, 1),"mmmm")');
|
|
}
|
|
|
|
function addYearContent(sheet) {
|
|
sheet.addSpan(51, 6, 4, 8);
|
|
sheet.setFormula(51, 6, '=YEARSPARKLINE(2016, A52:B82, "lightgray", "lightgreen", "green", "darkgreen")');
|
|
}
|
|
|
|
function addCompatibleContent(sheet) {
|
|
sheet.addSpan(0, 0, 1, 8);
|
|
sheet.getCell(0, 0).value("The company revenue in 2014").font("20px Arial").hAlign(spreadNS.HorizontalAlign.center).vAlign(spreadNS.VerticalAlign.center);
|
|
sheet.addSpan(1, 2, 1, 2);
|
|
sheet.addSpan(1, 4, 1, 2);
|
|
sheet.addSpan(1, 6, 1, 2);
|
|
sheet.setValue(1, 0, "Month");
|
|
sheet.setValue(1, 1, "Revenue");
|
|
sheet.setValue(1, 2, "Diagram 1");
|
|
sheet.setValue(1, 4, "Diagram 2");
|
|
sheet.setValue(1, 6, "Diagram 3");
|
|
sheet.getRange(1, 0, 1, 7).backColor("Accent 4").foreColor("white");
|
|
for (var i = 2; i < 5; i++) {
|
|
sheet.setValue(i, 0, new Date(2014, i - 1, 1));
|
|
sheet.setFormatter(i, 0, "mm/dd/yyyy");
|
|
}
|
|
sheet.setColumnWidth(0, 80);
|
|
sheet.setValue(2, 1, 30);
|
|
sheet.setValue(3, 1, -60);
|
|
sheet.setValue(4, 1, 80);
|
|
|
|
sheet.addSpan(2, 2, 3, 2);
|
|
sheet.setFormula(2, 2, '=LINESPARKLINE(B3:B5,0,A3:A5,0,"{ac:#ffff00,fmc:brown,hmc:red,lastmc:blue,lowmc:green,mc:purple,nc:yellowgreen,sc:pink,dxa:true,sf:true,sh:true,slast:true,slow:true,sn:true,sm:true,lw:3,dh:false,deca:1,rtl:false,minat:1,maxat:1,mmax:5,mmin:-3}")');
|
|
sheet.addSpan(2, 4, 3, 2);
|
|
sheet.setFormula(2, 4, '=COLUMNSPARKLINE(B3:B5,0,A3:A5,0,"{ac:#ffff00,fmc:brown,hmc:red,lastmc:blue,lowmc:green,mc:purple,nc:yellowgreen,sc:pink,dxa:true,sf:true,sh:true,slast:true,slow:true,sn:true,sm:true,lw:3,dh:false,deca:1,rtl:false,minat:1,maxat:1,mmax:5,mmin:-3}")');
|
|
sheet.addSpan(2, 6, 3, 2);
|
|
sheet.setFormula(2, 6, '=WINLOSSSPARKLINE(B3:B5,0,A3:A5,0)');
|
|
}
|
|
|
|
function addPieContent(sheet) {
|
|
sheet.addSpan(6, 0, 1, 5);
|
|
sheet.getCell(6, 0).value("My Assets").font("20px Arial").hAlign(spreadNS.HorizontalAlign.center).vAlign(spreadNS.VerticalAlign.center);
|
|
sheet.addSpan(7, 2, 1, 2);
|
|
sheet.addSpan(8, 2, 3, 2);
|
|
sheet.setValue(7, 0, "Asset Type");
|
|
sheet.setValue(7, 1, "Amount");
|
|
sheet.setValue(7, 2, "Diagram");
|
|
sheet.setValue(7, 4, "Note");
|
|
sheet.setValue(8, 0, "Savings");
|
|
sheet.getRange(7, 0, 1, 5).backColor("Accent 4").foreColor("white");
|
|
sheet.getCell(8, 1).value(25000).formatter("$#,##0");
|
|
sheet.setValue(9, 0, "401k");
|
|
sheet.getCell(9, 1).value(55000).formatter("$#,##0");
|
|
sheet.setValue(10, 0, "Stocks");
|
|
sheet.getCell(10, 1).value(15000).formatter("$#,##0");
|
|
sheet.setFormula(8, 2, '=PIESPARKLINE(B9:B11,"#919F81","#D7913E","CEA722")');
|
|
sheet.getCell(8, 4).backColor("#919F81").formula("=B9/SUM(B9:B11)").formatter("0.00%");
|
|
sheet.getCell(9, 4).backColor("#D7913E").formula("=B10/SUM(B9:B11)").formatter("0.00%");
|
|
sheet.getCell(10, 4).backColor("#CEA722").formula("=B11/SUM(B9:B11)").formatter("0.00%");
|
|
}
|
|
|
|
function addAreaContent(sheet) {
|
|
sheet.addSpan(12, 0, 1, 5);
|
|
sheet.getCell(12, 0).value("Sales by State").font("20px Arial").hAlign(spreadNS.HorizontalAlign.center).vAlign(spreadNS.VerticalAlign.center);
|
|
sheet.addSpan(13, 2, 1, 3);
|
|
sheet.addSpan(14, 2, 4, 3);
|
|
sheet.setValue(13, 0, "State");
|
|
sheet.setValue(13, 1, "Sales");
|
|
sheet.setValue(13, 2, "Diagram");
|
|
sheet.setValue(14, 0, "Idaho");
|
|
sheet.getRange(13, 0, 1, 3).backColor("Accent 4").foreColor("white");
|
|
sheet.getCell(14, 1).value(3500).formatter("$#,##0");
|
|
sheet.setValue(15, 0, "Montana");
|
|
sheet.getCell(15, 1).value(7000).formatter("$#,##0");
|
|
sheet.setValue(16, 0, "Oregon");
|
|
sheet.getCell(16, 1).value(2000).formatter("$#,##0");
|
|
sheet.setValue(17, 0, "Washington");
|
|
sheet.getCell(17, 1).value(5000).formatter("$#,##0");
|
|
sheet.setFormula(14, 2, '=AREASPARKLINE(B15:B18,,,0,6000,"yellowgreen","red")');
|
|
}
|
|
|
|
function addScatterContent(sheet) {
|
|
sheet.addSpan(19, 0, 1, 5);
|
|
sheet.getCell(19, 0).value("Particulate Levels in Rainfall").font("20px Arial").hAlign(spreadNS.HorizontalAlign.center).vAlign(spreadNS.VerticalAlign.center);
|
|
sheet.addSpan(20, 2, 1, 3);
|
|
sheet.addSpan(21, 2, 4, 3);
|
|
sheet.setValue(20, 0, "Daily rainfall");
|
|
sheet.setValue(20, 1, "Particulate level");
|
|
sheet.setValue(20, 2, "Diagram");
|
|
sheet.getRange(20, 0, 1, 3).backColor("Accent 4").foreColor("white");
|
|
sheet.setValue(21, 0, 2.0);
|
|
sheet.setValue(21, 1, 100);
|
|
sheet.setValue(22, 0, 3.0);
|
|
sheet.setValue(22, 1, 130);
|
|
sheet.setValue(23, 0, 4.0);
|
|
sheet.setValue(23, 1, 110);
|
|
sheet.setValue(24, 0, 5.0);
|
|
sheet.setValue(24, 1, 135);
|
|
sheet.setFormula(21, 2, '=SCATTERSPARKLINE(A22:B25,,MIN(A22:A25),MAX(A22:A25),MIN(B22:B25),MAX(B22:B25),AVERAGE(B22:B25),AVERAGE(A22:A25),,,,,TRUE,TRUE,TRUE,"green",,TRUE)');
|
|
}
|
|
|
|
function addStackedContent(sheet) {
|
|
sheet.addSpan(26, 0, 1, 5);
|
|
sheet.getCell(26, 0).value("Sales by State").font("20px Arial").hAlign(spreadNS.HorizontalAlign.center).vAlign(spreadNS.VerticalAlign.center);
|
|
sheet.getRange(27, 0, 1, 6).foreColor("white").backColor("Accent 4").hAlign(spreadNS.HorizontalAlign.center).vAlign(spreadNS.VerticalAlign.center);
|
|
sheet.addSpan(27, 4, 1, 3);
|
|
sheet.addSpan(28, 4, 1, 3);
|
|
sheet.setRowHeight(28, 30);
|
|
sheet.setValue(27, 0, "State");
|
|
sheet.setValue(27, 1, "Product 1");
|
|
sheet.setValue(27, 2, "Product 2");
|
|
sheet.setValue(27, 3, "Product 3");
|
|
sheet.setValue(27, 4, "Diagram");
|
|
sheet.setValue(28, 0, "Idaho");
|
|
sheet.getCell(28, 1).value(10000).formatter("$#,##0");
|
|
sheet.getCell(28, 2).value(12000).formatter("$#,##0");
|
|
sheet.getCell(28, 3).value(15000).formatter("$#,##0");
|
|
sheet.setValue(29, 1, "orange");
|
|
sheet.setValue(29, 2, "purple");
|
|
sheet.setValue(29, 3, "yellowgreen");
|
|
sheet.setFormula(28, 4, '=STACKEDSPARKLINE(B29:D29,B30:D30,B28:D28,40000)');
|
|
}
|
|
|
|
function addBulletContent(sheet) {
|
|
sheet.addSpan(31, 0, 1, 5);
|
|
sheet.getCell(31, 0).value("Employee KPI").font("20px Arial").hAlign(spreadNS.HorizontalAlign.center).vAlign(spreadNS.VerticalAlign.center);
|
|
sheet.getRange(32, 0, 1, 4).foreColor("white").backColor("Accent 4").hAlign(spreadNS.HorizontalAlign.center).vAlign(spreadNS.HorizontalAlign.center);
|
|
sheet.addSpan(32, 3, 1, 2);
|
|
sheet.addSpan(33, 3, 1, 2);
|
|
sheet.addSpan(34, 3, 1, 2);
|
|
sheet.addSpan(35, 3, 1, 2);
|
|
sheet.setValue(32, 0, "Name");
|
|
sheet.setValue(32, 1, "Forecast");
|
|
sheet.setValue(32, 2, "Actuality");
|
|
sheet.setValue(32, 3, "Diagram");
|
|
sheet.setValue(33, 0, "Employee 1");
|
|
sheet.setValue(33, 1, 6);
|
|
sheet.setValue(33, 2, 6);
|
|
sheet.setValue(34, 0, "Employee 2");
|
|
sheet.setValue(34, 1, 8);
|
|
sheet.setValue(34, 2, 7);
|
|
sheet.setValue(35, 0, "Employee 3");
|
|
sheet.setValue(35, 1, 6);
|
|
sheet.setValue(35, 2, 4);
|
|
|
|
sheet.addSpan(38, 6, 1, 3);
|
|
sheet.setValue(38, 6, "BULLETSPARKLINE Settings:");
|
|
sheet.setValue(39, 6, "target");
|
|
sheet.setValue(39, 7, 7);
|
|
sheet.setValue(40, 6, "maxi");
|
|
sheet.setValue(40, 7, 10);
|
|
sheet.setValue(41, 6, "good");
|
|
sheet.setValue(41, 7, 8);
|
|
sheet.setValue(42, 6, "bad");
|
|
sheet.setValue(42, 7, 5);
|
|
sheet.setValue(43, 6, "color scheme");
|
|
sheet.setValue(43, 7, "gray");
|
|
|
|
sheet.setFormula(33, 3, '=BULLETSPARKLINE(C34,H40,H41,H42,H43,H34,1,H44)');
|
|
sheet.setFormula(34, 3, '=BULLETSPARKLINE(C35,H40,H41,H42,H43,H34,1,H44)');
|
|
sheet.setFormula(35, 3, '=BULLETSPARKLINE(C36,H40,H41,H42,H43,H34,1,H44)');
|
|
sheet.setRowHeight(33, 28);
|
|
sheet.setRowHeight(34, 28);
|
|
sheet.setRowHeight(35, 28);
|
|
}
|
|
|
|
function addBoxPlotContent(sheet) {
|
|
sheet.addSpan(31, 6, 1, 8);
|
|
sheet.getCell(31, 6).value("The Company Sales in 2014 (Month)").font("20px Arial").hAlign(spreadNS.HorizontalAlign.center).vAlign(spreadNS.VerticalAlign.center);
|
|
sheet.addSpan(32, 12, 1, 2);
|
|
sheet.addSpan(33, 12, 1, 2);
|
|
sheet.addSpan(34, 12, 1, 2);
|
|
sheet.addSpan(35, 12, 1, 2);
|
|
sheet.setValue(32, 7, 1);
|
|
sheet.setValue(32, 8, 2);
|
|
sheet.setValue(32, 9, 3);
|
|
sheet.setValue(32, 10, 4);
|
|
sheet.setValue(32, 11, 5);
|
|
sheet.setValue(32, 12, "Actual Sales");
|
|
sheet.getRange(32, 7, 1, 7).hAlign(spreadNS.HorizontalAlign.center).vAlign(spreadNS.VerticalAlign.center).wordWrap(true);
|
|
sheet.setValue(32, 6, "Region");
|
|
sheet.setValue(33, 6, "Alabama");
|
|
sheet.setValue(34, 6, "Alaska");
|
|
sheet.setValue(35, 6, "Arizona");
|
|
var data = [[5268, 6281, 8921, 1069, 1239],
|
|
[2837, 5739, 993, 4247, 9514],
|
|
[6661, 4172, 9777, 1282, 9535]];
|
|
sheet.setArray(33, 7, data);
|
|
sheet.addSpan(38, 10, 1, 4);
|
|
sheet.setValue(38, 10, "BOXPLOTSPARKLINE Settings:");
|
|
sheet.setValue(39, 10, "Start scope of the sale:");
|
|
sheet.setValue(40, 10, "End scope of the sale:");
|
|
sheet.setValue(41, 10, "Start scope of expected sale:");
|
|
sheet.setValue(42, 10, "End scope of expected sale:");
|
|
sheet.addSpan(39, 10, 1, 3);
|
|
sheet.addSpan(40, 10, 1, 3);
|
|
sheet.addSpan(41, 10, 1, 3);
|
|
sheet.addSpan(42, 10, 1, 3);
|
|
sheet.setValue(39, 13, 0);
|
|
sheet.setValue(40, 13, 10000);
|
|
sheet.setValue(41, 13, 1000);
|
|
sheet.setValue(42, 13, 8000);
|
|
|
|
sheet.getRange(32, 6, 1, 7).backColor("Accent 4").foreColor("white");
|
|
sheet.setFormula(33, 12, '=BOXPLOTSPARKLINE(H34:L34,"5ns",true,N40,N41,N42,N43,"#00FF7F",0,false)');
|
|
sheet.setFormula(34, 12, '=BOXPLOTSPARKLINE(H35:L35,"5ns",true,N40,N41,N42,N43,"#00FF7F",0,false)');
|
|
sheet.setFormula(35, 12, '=BOXPLOTSPARKLINE(H36:L36,"5ns",true,N40,N41,N42,N43,"#00FF7F",0,false)');
|
|
}
|
|
|
|
function addVariContent(sheet) {
|
|
sheet.addSpan(0, 9, 1, 5);
|
|
sheet.getCell(0, 9).value("Mobile Phone Contrast").font("20px Arial").hAlign(spreadNS.HorizontalAlign.center).vAlign(spreadNS.VerticalAlign.center);
|
|
sheet.getRange(1, 9, 1, 5).foreColor("white").backColor("Accent 4").hAlign(spreadNS.HorizontalAlign.center)
|
|
.vAlign(spreadNS.VerticalAlign.center).wordWrap(true);
|
|
sheet.addSpan(1, 12, 1, 2);
|
|
sheet.addSpan(2, 12, 1, 2);
|
|
sheet.addSpan(3, 12, 1, 2);
|
|
sheet.addSpan(4, 12, 1, 2);
|
|
sheet.setValue(1, 10, "Phone I");
|
|
sheet.setValue(1, 11, "Phone II");
|
|
sheet.setValue(1, 12, "Diagram");
|
|
var data = [["Size(inch)", 5, 4.7],
|
|
["RAM(G)", 3, 1],
|
|
["Weight(g)", 149, 129]];
|
|
sheet.setArray(2, 9, data);
|
|
sheet.setFormula(2, 12, '=VARISPARKLINE(ROUND((K3-L3)/K3,2),0,,,,,TRUE)');
|
|
sheet.setFormula(3, 12, '=VARISPARKLINE(ROUND((K4-L4)/K4,2),0,,,,,TRUE)');
|
|
sheet.setFormula(4, 12, '=VARISPARKLINE(ROUND(-1*(K5-L5)/K5,2),0,,,,,TRUE)');
|
|
}
|
|
|
|
function addCascadeContent(sheet) {
|
|
sheet.addSpan(6, 6, 1, 8);
|
|
sheet.getCell(6, 6).value("Checkbook Register").font("20px Arial").hAlign(spreadNS.HorizontalAlign.center).vAlign(spreadNS.VerticalAlign.center);
|
|
for (var r = 7; r < 12; r++) {
|
|
sheet.addSpan(r, 6, 1, 2);
|
|
sheet.addSpan(r, 11, 1, 3);
|
|
}
|
|
sheet.setArray(7, 6, [
|
|
["", "", "InitialValue", 815.25, "\u03A3"],
|
|
["12/11/2012", "", "CVS", -200],
|
|
["12/12/2012", "", "Bank", 1000.12],
|
|
["12/13/2012", "", "Starbucks", -500.43],
|
|
["", "", "FinalValue"]
|
|
]);
|
|
sheet.getRange(8, 6, 3, 1).formatter("MM/dd/yyyy");
|
|
sheet.getRange(7, 9, 5, 1).formatter("#,###.00");
|
|
sheet.getRange(8, 10, 3, 1).formatter("#,###.00");
|
|
sheet.getCell(7, 10).hAlign(spreadNS.HorizontalAlign.center);
|
|
sheet.getRange(7, 8, 1, 2).font("bold 14px Georgia");
|
|
sheet.getRange(11, 8, 1, 2).font("bold 14px Georgia");
|
|
|
|
sheet.setFormula(8, 10, "=J8 + J9");
|
|
for (var r = 10; r <= 11; r++) {
|
|
sheet.setFormula(r - 1, 10, "=J" + r + " + K" + (r - 1));
|
|
}
|
|
sheet.setFormula(11, 9, "=K11");
|
|
sheet.getRange(7, 6, 1, 8).setBorder(new spreadNS.LineBorder("black", spreadNS.LineStyle.thin), {bottom: true});
|
|
sheet.getRange(11, 6, 1, 8).setBorder(new spreadNS.LineBorder("black", spreadNS.LineStyle.medium), {top: true});
|
|
sheet.setFormula(7, 11, '=CASCADESPARKLINE(J8:J12,1,I8:I12,,,"#8CBF64","#D6604D",false)');
|
|
sheet.setFormula(8, 11, '=CASCADESPARKLINE(J8:J12,2,I8:I12,,,"#8CBF64","#D6604D",false)');
|
|
sheet.setFormula(9, 11, '=CASCADESPARKLINE(J8:J12,3,I8:I12,,,"#8CBF64","#D6604D",false)');
|
|
sheet.setFormula(10, 11, '=CASCADESPARKLINE(J8:J12,4,I8:I12,,,"#8CBF64","#D6604D",false)');
|
|
sheet.setFormula(11, 11, '=CASCADESPARKLINE(J8:J12,5,I8:I12,,,"#8CBF64","#D6604D",false)');
|
|
}
|
|
|
|
function addSpreadContent(sheet) {
|
|
sheet.addSpan(13, 6, 1, 7);
|
|
sheet.getCell(13, 6).value("Student Grade Statistics").font("20px Arial").hAlign(spreadNS.HorizontalAlign.center).vAlign(spreadNS.VerticalAlign.center);
|
|
sheet.getRange(14, 6, 1, 8).foreColor("white").backColor("Accent 4").hAlign(spreadNS.HorizontalAlign.center).vAlign(spreadNS.VerticalAlign.center);
|
|
sheet.addSpan(15, 6, 2, 1);
|
|
sheet.addSpan(14, 7, 1, 2);
|
|
sheet.addSpan(14, 9, 1, 2);
|
|
sheet.addSpan(14, 11, 1, 2);
|
|
sheet.addSpan(15, 7, 2, 2);
|
|
sheet.addSpan(15, 9, 2, 2);
|
|
sheet.addSpan(15, 11, 2, 2);
|
|
sheet.addSpan(15, 13, 2, 1);
|
|
for (var r = 17; r <= 21; r++) {
|
|
sheet.addSpan(r, 7, 1, 2);
|
|
sheet.addSpan(r, 9, 1, 2);
|
|
sheet.addSpan(r, 11, 1, 2);
|
|
}
|
|
sheet.setArray(14, 6, [["Name", "Chinese", "", "Math", "", "English", "", "Total"]]);
|
|
sheet.setArray(17, 6, [
|
|
["Student 1", 70, "", 90, "", 51],
|
|
["Student 2", 99, "", 59, "", 63],
|
|
["Student 3", 89, "", 128, "", 74],
|
|
["Student 4", 93, "", 61, "", 53],
|
|
["Student 5", 106, "", 82, "", 80]
|
|
]);
|
|
for (var i = 0; i <= 5; i++) {
|
|
r = 17 + i;
|
|
sheet.setFormula(r - 1, 13, "=Sum(H" + r + ":M" + r + ")");
|
|
}
|
|
sheet.setFormula(15, 7, "=SPREADSPARKLINE(H18:I22,TRUE,,,1,\"green\")");
|
|
sheet.setFormula(15, 9, "=SPREADSPARKLINE(J18:K22,TRUE,,,3,\"green\")");
|
|
sheet.setFormula(15, 11, "=SPREADSPARKLINE(L18:M22,TRUE,,,5,\"green\")");
|
|
sheet.setFormula(15, 13, "=SPREADSPARKLINE(N18:N22,TRUE,,,6,\"green\")");
|
|
}
|
|
|
|
function addParetoContent(sheet) {
|
|
sheet.addSpan(23, 8, 1, 6);
|
|
sheet.getCell(23, 8).value("The Reason of Being Late").font("20px Arial").hAlign(spreadNS.HorizontalAlign.center).vAlign(spreadNS.VerticalAlign.center);
|
|
sheet.getRange(24, 8, 1, 6).foreColor("white").backColor("Accent 4").hAlign(spreadNS.HorizontalAlign.center).vAlign(spreadNS.VerticalAlign.center);
|
|
for (var r = 24; r < 30; r++) {
|
|
sheet.addSpan(r, 11, 1, 3);
|
|
}
|
|
sheet.setArray(24, 8, [
|
|
["", "Points", "Color", "Diagram"],
|
|
["Traffic", 20, "#FF1493"],
|
|
["Child care", 15, "#FFE7BA"],
|
|
["Weather", 16, "#FFAEB9"],
|
|
["Overslept", 4, "#FF8C69"],
|
|
["Emergency", 1, "#FF83FA"]
|
|
]);
|
|
sheet.addSpan(45, 6, 1, 3);
|
|
sheet.setValue(45, 6, "PARETOSPARKLINE Settings:");
|
|
sheet.setValue(46, 6, "target");
|
|
sheet.setValue(46, 7, 0.5);
|
|
sheet.setValue(47, 6, "target1");
|
|
sheet.setValue(47, 7, 0.8);
|
|
|
|
sheet.setFormula(25, 11, '=PARETOSPARKLINE(J26:J30,1,K26:K30,H47,H48,4,2,false)');
|
|
sheet.setFormula(26, 11, '=PARETOSPARKLINE(J26:J30,2,K26:K30,H47,H48,4,2,false)');
|
|
sheet.setFormula(27, 11, '=PARETOSPARKLINE(J26:J30,3,K26:K30,H47,H48,4,2,false)');
|
|
sheet.setFormula(28, 11, '=PARETOSPARKLINE(J26:J30,4,K26:K30,H47,H48,4,2,false)');
|
|
sheet.setFormula(29, 11, '=PARETOSPARKLINE(J26:J30,5,K26:K30,H47,H48,4,2,false)');
|
|
}
|
|
|
|
function addHBarContent(sheet) {
|
|
row = 37, col = 0;
|
|
sheet.addSpan(row, col, 1, 6);
|
|
sheet.getCell(row, col).value("SPRINT 4").font("20px Arial").hAlign(spreadNS.HorizontalAlign.center).vAlign(spreadNS.VerticalAlign.center);
|
|
sheet.getRange(row + 1, 8, 1, 6).foreColor("white").backColor("Accent 4").hAlign(spreadNS.HorizontalAlign.center).vAlign(spreadNS.VerticalAlign.center);
|
|
for (var r = 38; r < 44; r++) {
|
|
sheet.addSpan(r, 2, 1, 3);
|
|
}
|
|
sheet.getCell(++row, col).value("Name");
|
|
sheet.getCell(++row, col).value("Employee1");
|
|
sheet.getCell(++row, col).value("Employee2");
|
|
sheet.getCell(++row, col).value("Employee3");
|
|
sheet.getCell(++row, col).value("Employee4");
|
|
sheet.getCell(++row, col).value("Employee5");
|
|
row = 38, col++;
|
|
sheet.getCell(row, col).value("Progress");
|
|
sheet.getCell(++row, col).value(0.7);
|
|
sheet.getCell(++row, col).value(0.1);
|
|
sheet.getCell(++row, col).value(0.3);
|
|
sheet.getCell(++row, col).value(1.1);
|
|
sheet.getCell(++row, col).value(0.5);
|
|
row = 38, col++;
|
|
sheet.getCell(row, col).value("Diagram");
|
|
sheet.getRange(38, 0, 1, 3).backColor("Accent 4").foreColor("white");
|
|
sheet.setFormula(++row, col, getHBarFormula("B40"));
|
|
sheet.setFormula(++row, col, getHBarFormula("B41"));
|
|
sheet.setFormula(++row, col, getHBarFormula("B42"));
|
|
sheet.setFormula(++row, col, getHBarFormula("B43"));
|
|
sheet.setFormula(++row, col, getHBarFormula("B44"));
|
|
}
|
|
|
|
function addVBarContent(sheet) {
|
|
sheet.setColumnWidth(15, 60);
|
|
for (var c = 16; c < 23; c++) {
|
|
sheet.setColumnWidth(c, 30);
|
|
}
|
|
sheet.addSpan(0, 15, 1, 8);
|
|
sheet.getCell(0, 15).value("The Temperature Variation").font("20px Arial").hAlign(spreadNS.HorizontalAlign.center).vAlign(spreadNS.VerticalAlign.center);
|
|
sheet.getRange(1, 15, 1, 8).foreColor("white").backColor("Accent 4").hAlign(spreadNS.HorizontalAlign.center).vAlign(spreadNS.VerticalAlign.center);
|
|
row = 2;
|
|
sheet.addSpan(row, 15, 3, 1);
|
|
sheet.addSpan(row + 3, 15, 3, 1);
|
|
sheet.addSpan(row + 6, 15, 3, 1);
|
|
sheet.setArray(1, 15, [["City", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"]]);
|
|
var datas = [
|
|
["Austin", 5, 11, 19, 24, 21, 16, 6],
|
|
["Buffalo", -8, -3, -1, 3, 14, 6, -4],
|
|
["Chicago", -9, -2, 2, 18, 12, 5, -6]
|
|
];
|
|
var colors = ["#0099FF", "#33FFFF", "#9E0142", "#D53E4F", "#F46D43", "#FDAE61", "#FEE08B"];
|
|
sheet.setArray(11, 16, [colors]);
|
|
for (var i = 0; i < datas.length; i++) {
|
|
var row = 2 + 3 * i;
|
|
sheet.setArray(row, 15, [datas[i]]);
|
|
sheet.setArrayFormula(row + 1, 16, 2, 7, getVBarFormula(row + 1));
|
|
sheet.setRowHeight(row + 1, 30);
|
|
sheet.setRowHeight(row + 2, 30);
|
|
}
|
|
}
|
|
|
|
function setCommentContent() {
|
|
var sheet = new spreadNS.Worksheet("Comment");
|
|
spread.addSheet(spread.getSheetCount(), sheet);
|
|
sheet.suspendPaint();
|
|
sheet.setColumnCount(50);
|
|
|
|
for (var col = 2; col < 9; col++) {
|
|
sheet.setColumnWidth(col, 100);
|
|
}
|
|
|
|
var Comment = spreadNS.Comments.Comment;
|
|
var DisplayMode = spreadNS.Comments.DisplayMode;
|
|
var commentText = "Hello, world!";
|
|
var rowCount = 5, colCount = 4;
|
|
var row = 2, col = 2;
|
|
|
|
sheet.getCell(row, col).value("HoverShown").font("700 11pt Calibri");
|
|
sheet.comments.add(row, col, commentText);
|
|
sheet.getCell(row, col + colCount).value("AlwaysShown").font("700 11pt Calibri");
|
|
sheet.comments.add(row, col + colCount, commentText)
|
|
.displayMode(DisplayMode.alwaysShown);
|
|
row = row + rowCount;
|
|
sheet.getCell(row, col).value("Size").font("700 11pt Calibri");
|
|
sheet.comments.add(row, col, commentText)
|
|
.displayMode(DisplayMode.alwaysShown)
|
|
.height(80)
|
|
.width(200);
|
|
sheet.getCell(row, col + colCount).value("Shadow").font("700 11pt Calibri");
|
|
sheet.comments.add(row, col + colCount, commentText)
|
|
.displayMode(DisplayMode.alwaysShown)
|
|
.showShadow(true);
|
|
row = row + rowCount;
|
|
sheet.getCell(row, col).value("Font").font("700 11pt Calibri");
|
|
sheet.comments.add(row, col, commentText)
|
|
.displayMode(DisplayMode.alwaysShown)
|
|
.fontFamily("Comic Sans MS")
|
|
.fontSize("10pt")
|
|
.fontStyle("italic")
|
|
.fontWeight("bold");
|
|
sheet.getCell(row, col + colCount).value("Color Opacity").font("700 11pt Calibri");
|
|
sheet.comments.add(row, col + colCount, commentText)
|
|
.displayMode(DisplayMode.alwaysShown)
|
|
.foreColor("green")
|
|
.backColor("yellow")
|
|
.opacity(0.8);
|
|
row = row + rowCount;
|
|
sheet.getCell(row, col).value("Border").font("700 11pt Calibri");
|
|
sheet.comments.add(row, col, commentText)
|
|
.displayMode(DisplayMode.alwaysShown)
|
|
.borderColor("green")
|
|
.borderStyle("dotted")
|
|
.borderWidth(2);
|
|
sheet.getCell(row, col + colCount).value("Text Decoration").font("700 11pt Calibri");
|
|
sheet.comments.add(row, col + colCount, commentText)
|
|
.displayMode(DisplayMode.alwaysShown)
|
|
.textDecoration(1)
|
|
.horizontalAlign(1)
|
|
.padding(new spreadNS.Comments.Padding(2));
|
|
|
|
sheet.resumePaint();
|
|
}
|
|
|
|
function setPictureContent() {
|
|
var sheet = new spreadNS.Worksheet("Picture");
|
|
spread.addSheet(spread.getSheetCount(), sheet);
|
|
sheet.suspendPaint();
|
|
sheet.setColumnCount(50);
|
|
|
|
sheet.setColumnWidth(0, 20);
|
|
|
|
var url = "css/images/logo.png";
|
|
var ImageLayout = spreadNS.ImageLayout;
|
|
var row, col, rowCount = 11, colCount = 5,
|
|
colWidth = sheet.getColumnWidth(1), rowHeight = sheet.getRowHeight(1),
|
|
width = colCount * colWidth, height = rowCount * rowHeight,
|
|
x = sheet.getColumnWidth(0) + colWidth, y = 2 * rowHeight,
|
|
xOffset = (colCount + 2) * colWidth, yOffset = (rowCount + 2) * rowHeight;
|
|
|
|
row = 1, col = 2;
|
|
sheet.addSpan(row, col, 1, colCount);
|
|
sheet.getCell(row, col).value("Border").font("700 11pt Calibri");
|
|
sheet.pictures.add("border_picture", url, x, y, width, height)
|
|
.backColor("#000000")
|
|
.borderColor("red")
|
|
.borderWidth(4)
|
|
.borderStyle("dotted")
|
|
.borderRadius(5);
|
|
|
|
col = col + colCount + 2;
|
|
sheet.addSpan(row, col, 1, colCount);
|
|
sheet.getCell(row, col).value("Fixed Position").font("700 11pt Calibri");
|
|
sheet.pictures.add("fixed_picture", url, x + xOffset, y, width, height)
|
|
.backColor("#000000")
|
|
.fixedPosition(true);
|
|
|
|
row = row + rowCount + 2, col = 2;
|
|
y += yOffset;
|
|
sheet.addSpan(row, col, 1, colCount);
|
|
sheet.getCell(row, col).value("Stretch").font("700 11pt Calibri");
|
|
sheet.pictures.add("stretch_picture", url, x, y, width, height)
|
|
.backColor("#000000");
|
|
|
|
col = col + colCount + 2;
|
|
sheet.addSpan(row, col, 1, colCount);
|
|
sheet.getCell(row, col).value("Center").font("700 11pt Calibri");
|
|
sheet.pictures.add("center_picture", url, x + xOffset, y, width, height)
|
|
.backColor("#000000")
|
|
.pictureStretch(ImageLayout.center);
|
|
|
|
row = row + rowCount + 2, col = 2;
|
|
y += yOffset;
|
|
sheet.addSpan(row, col, 1, colCount);
|
|
sheet.getCell(row, col).value("Zoom").font("700 11pt Calibri");
|
|
sheet.pictures.add("zoom_picture", url, x, y, width, height)
|
|
.backColor("#000000")
|
|
.pictureStretch(ImageLayout.zoom);
|
|
|
|
col = col + colCount + 2;
|
|
sheet.addSpan(row, col, 1, colCount);
|
|
sheet.getCell(row, col).value("None").font("700 11pt Calibri");
|
|
sheet.pictures.add("none_picture", url, x + xOffset, y, width, height)
|
|
.backColor("#000000")
|
|
.pictureStretch(ImageLayout.none);
|
|
|
|
sheet.resumePaint();
|
|
}
|
|
|
|
function setDataContent() {
|
|
var sheet = new spreadNS.Worksheet("Data");
|
|
spread.addSheet(spread.getSheetCount(), sheet);
|
|
sheet.suspendPaint();
|
|
sheet.setColumnCount(50);
|
|
|
|
for (var col = 1; col < 6; col = col + 2) {
|
|
for (var row = 2; row < 10; row++) {
|
|
sheet.getCell(row, col).value(getRandomNumber());
|
|
}
|
|
}
|
|
var row = 1, col = 1, rowCount = 8, colCount = 1;
|
|
sheet.getCell(row, col).value("Sort A-Z").font("700 11pt Calibri");
|
|
sheet.sortRange(row + 1, col, rowCount, colCount, true, [{index: col, ascending: true}]);
|
|
|
|
col = col + 2;
|
|
sheet.getCell(row, col).value("Sort Z-A").font("700 11pt Calibri");
|
|
sheet.sortRange(row + 1, col, rowCount, colCount, true, [{index: col, ascending: false}]);
|
|
|
|
col = col + 2;
|
|
sheet.getCell(row, col).value("Filter").font("700 11pt Calibri");
|
|
sheet.rowFilter(new spreadNS.Filter.HideRowFilter(new spreadNS.Range(row + 1, col, rowCount, colCount)));
|
|
|
|
sheet.rowOutlines.group(12, 3);
|
|
sheet.columnOutlines.group(8, 5);
|
|
|
|
row = 12, col = 1;
|
|
sheet.addSpan(row, col, 1, 9);
|
|
sheet.getCell(row, col).value("Data Validation").vAlign(spreadNS.VerticalAlign.center).hAlign(spreadNS.HorizontalAlign.center).font("700 11pt Calibri");
|
|
row = 13;
|
|
sheet.getCell(row, col).value("List").font("700 11pt Calibri");
|
|
sheet.getCell(row, col + 2).value("Number").font("700 11pt Calibri");
|
|
sheet.getCell(row, col + 4).value("Date").font("700 11pt Calibri");
|
|
sheet.getCell(row, col + 6).value("Formula").font("700 11pt Calibri");
|
|
sheet.getCell(row, col + 8).value("TextLength").font("700 11pt Calibri");
|
|
|
|
row = 14;
|
|
var listValidator = DataValidation.createListValidator("Fruit,Vegetable,Food");
|
|
listValidator.inputTitle("Please choose a category:");
|
|
listValidator.inputMessage("Fruit, Vegetable, Food");
|
|
sheet.getCell(row + 1, col).value("Vegetable");
|
|
sheet.getCell(row + 2, col).value("Home");
|
|
sheet.getCell(row + 3, col).value("Fruit");
|
|
sheet.getCell(row + 4, col).value("Company");
|
|
sheet.getCell(row + 5, col).value("Food");
|
|
|
|
sheet.setDataValidator(row + 1, col, 5, 1, listValidator);
|
|
|
|
col = col + 2;
|
|
var numberValidator = DataValidation.createNumberValidator(ComparisonOperators.between, 0, 100, true);
|
|
numberValidator.inputMessage("Value should Between 0 ~ 100");
|
|
numberValidator.inputTitle("Tip");
|
|
sheet.getCell(row + 1, col).value(-12);
|
|
sheet.getCell(row + 2, col).value(30);
|
|
sheet.getCell(row + 3, col).value(80);
|
|
sheet.getCell(row + 4, col).value(-35);
|
|
sheet.getCell(row + 5, col).value(66);
|
|
|
|
sheet.setDataValidator(row + 1, col, 5, 1, numberValidator);
|
|
|
|
col = col + 2;
|
|
sheet.setColumnWidth(col, 100);
|
|
var currentDate = new Date().toLocaleDateString().replace(/\u200E/g, ''); // this "replace" is just for IE, the date string contains some special characters
|
|
var dateValidator = DataValidation.createDateValidator(ComparisonOperators.lessThan, currentDate, currentDate);
|
|
dateValidator.inputMessage("Enter a date Less than " + currentDate);
|
|
dateValidator.inputTitle("Tip");
|
|
sheet.getCell(row + 1, col).value("2014/08/20");
|
|
sheet.getCell(row + 2, col).value("2050/10/12");
|
|
sheet.getCell(row + 3, col).value("1993/05/23");
|
|
sheet.getCell(row + 4, col).value("2020/01/02");
|
|
sheet.getCell(row + 5, col).value("2015/10/20");
|
|
|
|
sheet.setDataValidator(row + 1, col, 5, 1, dateValidator);
|
|
|
|
col = col + 2;
|
|
var formula = getCellPositionString(sheet, row + 6, col + 1) + "<100";
|
|
var formulaValidator = DataValidation.createFormulaValidator(formula);
|
|
formulaValidator.inputTitle("Tip");
|
|
sheet.getCell(row + 1, col).value(20);
|
|
sheet.getCell(row + 2, col).value(300);
|
|
sheet.getCell(row + 3, col).value(2);
|
|
sheet.getCell(row + 4, col).value(-35);
|
|
var sumFormula = "=SUM(" + getCellPositionString(sheet, row + 2, col + 1)
|
|
+ ":" + getCellPositionString(sheet, row + 5, col + 1) + ")";
|
|
sheet.getCell(row + 5, col).formula(sumFormula);
|
|
formulaValidator.inputMessage("Be sure " + sumFormula.substr(1) + " less than 100");
|
|
|
|
sheet.setDataValidator(row + 5, col, formulaValidator);
|
|
|
|
col = col + 2;
|
|
sheet.setColumnWidth(col, 120);
|
|
var textLengthValidator = DataValidation.createTextLengthValidator(ComparisonOperators.lessThan, 6, 6);
|
|
textLengthValidator.inputMessage("Text length should Less than 6");
|
|
textLengthValidator.inputTitle("Tip");
|
|
sheet.getCell(row + 1, col).value("Hello, SpreadJS");
|
|
sheet.getCell(row + 2, col).value("God");
|
|
sheet.getCell(row + 3, col).value("Word");
|
|
sheet.getCell(row + 4, col).value("Warning");
|
|
sheet.getCell(row + 5, col).value("Boy");
|
|
|
|
sheet.setDataValidator(row + 1, col, 5, 1, textLengthValidator);
|
|
|
|
spread.options.highlightInvalidData = true;
|
|
sheet.resumePaint();
|
|
}
|
|
|
|
function setSlicerContent() {
|
|
var sheet = new spreadNS.Worksheet("Slicer");
|
|
spread.addSheet(spread.getSheetCount(), sheet);
|
|
sheet.suspendPaint();
|
|
sheet.setColumnCount(50);
|
|
|
|
var tableName = "slicerTable";
|
|
var dataColumns = ["Name", "Age", "Sex", "Address", "Weight", "Height"];
|
|
var data = [
|
|
["bob", "36", "man", "Beijing", "80", "180"],
|
|
["Betty", "28", "woman", "Xi'an", "52", "168"],
|
|
["Gary", "23", "man", "NewYork", "63", "175"],
|
|
["Hunk", "45", "man", "Beijing", "80", "171"],
|
|
["Cherry", "37", "woman", "Shanghai", "58", "161"],
|
|
["Eva", "30", "woman", "NewYork", "63", "180"]];
|
|
sheet.tables.addFromDataSource(tableName, 6, 3, data);
|
|
var table = sheet.tables.findByName(tableName);
|
|
table.setColumnName(0, dataColumns[0]);
|
|
table.setColumnName(1, dataColumns[1]);
|
|
table.setColumnName(2, dataColumns[2]);
|
|
table.setColumnName(3, dataColumns[3]);
|
|
table.setColumnName(4, dataColumns[4]);
|
|
table.setColumnName(5, dataColumns[5]);
|
|
|
|
var slicer0 = sheet.slicers.add("slicer1", tableName, "Name");
|
|
slicer0.position(new spreadNS.Point(50, 300));
|
|
|
|
var slicer1 = sheet.slicers.add("slicer2", tableName, "Sex");
|
|
slicer1.position(new spreadNS.Point(275, 300));
|
|
|
|
var slicer2 = sheet.slicers.add("slicer3", tableName, "Height");
|
|
slicer2.position(new spreadNS.Point(500, 300));
|
|
|
|
sheet.resumePaint();
|
|
}
|
|
|
|
function addChartContent() {
|
|
var sheet = new spreadNS.Worksheet("Chart");
|
|
spread.addSheet(spread.getSheetCount(), sheet);
|
|
sheet.suspendPaint();
|
|
sheet.setColumnCount(50);
|
|
var dataArray = [
|
|
["", 'Mon', 'Tues', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun'],
|
|
["BUS", 320, 302, 301, 334, 390, 330, 320],
|
|
["UBER", 120, 132, 101, 134, 90, 230, 210],
|
|
["TAXI", 220, 182, 191, 234, 290, 330, 310],
|
|
["SUBWAY", 820, 832, 901, 934, 1290, 1330, 1320]
|
|
];
|
|
sheet.setArray(0, 0, dataArray);
|
|
sheet.resumePaint();
|
|
}
|
|
|
|
|
|
// Sample Content related items (end)
|
|
|
|
function getCellInfo(sheet, row, column) {
|
|
var result = {type: ""}, object;
|
|
|
|
if ((object = sheet.comments.get(row, column))) {
|
|
result.type = "comment";
|
|
} else if ((object = sheet.tables.find(row, column))) {
|
|
result.type = "table";
|
|
}
|
|
|
|
result.object = object;
|
|
|
|
return result;
|
|
}
|
|
|
|
var specialTabNames = ["table", "picture", "comment", "sparklineEx", "chartEx", "slicer"];
|
|
var specialTabRefs = specialTabNames.map(function (name) {
|
|
return "#" + name + "Tab";
|
|
});
|
|
|
|
function isSpecialTabSelected() {
|
|
var href = $(".insp-container ul.nav-tabs li.active a").attr("href");
|
|
|
|
return specialTabRefs.indexOf(href) !== -1;
|
|
}
|
|
|
|
function getTabItem(tabName) {
|
|
return $(".insp-container ul.nav-tabs a[href='#" + tabName + "Tab']").parent();
|
|
}
|
|
|
|
function setActiveTab(tabName) {
|
|
// show / hide tabs
|
|
var $target = getTabItem(tabName),
|
|
$spreadTab = getTabItem("spread");
|
|
|
|
if (specialTabNames.indexOf(tabName) >= 0) {
|
|
if ($target.hasClass("hidden")) {
|
|
hideSpecialTabs(false);
|
|
|
|
$target.removeClass("hidden");
|
|
$spreadTab.addClass("hidden");
|
|
$("a", $target).tab("show");
|
|
}
|
|
} else {
|
|
if ($spreadTab.hasClass("hidden")) {
|
|
$spreadTab.removeClass("hidden");
|
|
hideSpecialTabs(true);
|
|
}
|
|
if (!$target.hasClass("active")) {
|
|
// do not switch from Data to Cell tab
|
|
if (!(tabName === "cell" && getTabItem("data").hasClass("active"))) {
|
|
$("a", $target).tab("show");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function hideSpecialTabs(clearCache) {
|
|
specialTabNames.forEach(function (name) {
|
|
getTabItem(name).addClass("hidden");
|
|
});
|
|
|
|
if (clearCache) {
|
|
clearCachedItems();
|
|
}
|
|
}
|
|
|
|
function getActualRange(range, maxRowCount, maxColCount) {
|
|
var row = range.row < 0 ? 0 : range.row;
|
|
var col = range.col < 0 ? 0 : range.col;
|
|
var rowCount = range.rowCount < 0 ? maxRowCount : range.rowCount;
|
|
var colCount = range.colCount < 0 ? maxColCount : range.colCount;
|
|
|
|
return new spreadNS.Range(row, col, rowCount, colCount);
|
|
}
|
|
|
|
function getActualCellRange(sheet, cellRange, rowCount, columnCount) {
|
|
if (cellRange.row === -1 && cellRange.col === -1) {
|
|
return new spreadNS.CellRange(sheet, 0, 0, rowCount, columnCount);
|
|
}
|
|
else if (cellRange.row === -1) {
|
|
return new spreadNS.CellRange(sheet, 0, cellRange.col, rowCount, cellRange.colCount);
|
|
}
|
|
else if (cellRange.col === -1) {
|
|
return new spreadNS.CellRange(sheet, cellRange.row, 0, cellRange.rowCount, columnCount);
|
|
}
|
|
return new spreadNS.CellRange(sheet, cellRange.row, cellRange.col, cellRange.rowCount, cellRange.colCount);
|
|
}
|
|
|
|
function setStyleFont(sheet, prop, isLabelStyle, optionValue1, optionValue2) {
|
|
var styleEle = document.getElementById("setfontstyle"),
|
|
selections = sheet.getSelections(),
|
|
rowCount = sheet.getRowCount(),
|
|
columnCount = sheet.getColumnCount(),
|
|
defaultStyle = sheet.getDefaultStyle();
|
|
|
|
function updateStyleFont(style) {
|
|
if (!style.font) {
|
|
style.font = defaultStyle.font || "11pt Calibri";
|
|
}
|
|
styleEle.style.font = style.font;
|
|
var styleFont = $(styleEle).css(prop);
|
|
if (styleFont === optionValue1[0] || styleFont === optionValue1[1]) {
|
|
if (defaultStyle.font) {
|
|
styleEle.style.font = defaultStyle.font;
|
|
var defaultFontProp = $(styleEle).css(prop);
|
|
styleEle.style.font = style.font;
|
|
$(styleEle).css(prop, defaultFontProp);
|
|
}
|
|
else {
|
|
$(styleEle).css(prop, optionValue2);
|
|
}
|
|
} else {
|
|
$(styleEle).css(prop, optionValue1[0]);
|
|
}
|
|
style.font = styleEle.style.font;
|
|
}
|
|
|
|
sheet.suspendPaint();
|
|
for (var n = 0; n < selections.length; n++) {
|
|
var sel = getActualCellRange(sheet, selections[n], rowCount, columnCount);
|
|
for (var r = sel.row; r < sel.row + sel.rowCount; r++) {
|
|
for (var c = sel.col; c < sel.col + sel.colCount; c++) {
|
|
var style = sheet.getStyle(r, c);
|
|
if (!style) {
|
|
style = new spreadNS.Style();
|
|
}
|
|
// reset themeFont to make sure font be used
|
|
style.themeFont = undefined;
|
|
if (isLabelStyle) {
|
|
if (!style.labelOptions) {
|
|
style.labelOptions = {};
|
|
}
|
|
updateStyleFont(style.labelOptions);
|
|
} else {
|
|
updateStyleFont(style)
|
|
}
|
|
sheet.setStyle(r, c, style);
|
|
}
|
|
}
|
|
}
|
|
sheet.resumePaint();
|
|
}
|
|
|
|
|
|
function attachEvents() {
|
|
attachToolbarItemEvents();
|
|
attachSpreadEvents();
|
|
attachConditionalFormatEvents();
|
|
attachDataValidationEvents();
|
|
attachOtherEvents();
|
|
attachCellTypeEvents();
|
|
attachLockCellsEvent();
|
|
attachBorderTypeClickEvents();
|
|
attachSparklineSettingEvents();
|
|
attachChartItemEvents();
|
|
}
|
|
|
|
// Border Type related items
|
|
function syncDisabledBorderType() {
|
|
var sheet = spread.getActiveSheet();
|
|
var selections = sheet.getSelections(), selectionsLength = selections.length;
|
|
var isDisabledInsideBorder = true;
|
|
var isDisabledHorizontalBorder = true;
|
|
var isDisabledVerticalBorder = true;
|
|
for (var i = 0; i < selectionsLength; i++) {
|
|
var selection = selections[i];
|
|
var col = selection.col, row = selection.row,
|
|
rowCount = selection.rowCount, colCount = selection.colCount;
|
|
if (isDisabledHorizontalBorder) {
|
|
isDisabledHorizontalBorder = rowCount === 1;
|
|
}
|
|
if (isDisabledVerticalBorder) {
|
|
isDisabledVerticalBorder = colCount === 1;
|
|
}
|
|
if (isDisabledInsideBorder) {
|
|
isDisabledInsideBorder = rowCount === 1 || colCount === 1;
|
|
}
|
|
}
|
|
[isDisabledInsideBorder, isDisabledVerticalBorder, isDisabledHorizontalBorder].forEach(function (value, index) {
|
|
var $item = $("div.group-item:eq(" + (index * 3 + 1) + ")");
|
|
if (value) {
|
|
$item.addClass("disable");
|
|
} else {
|
|
$item.removeClass("disable");
|
|
}
|
|
});
|
|
}
|
|
|
|
function getBorderSettings(borderType, borderStyle) {
|
|
var result = [];
|
|
|
|
switch (borderType) {
|
|
case "outside":
|
|
result.push({lineStyle: borderStyle, options: {outline: true}});
|
|
break;
|
|
|
|
case "inside":
|
|
result.push({lineStyle: borderStyle, options: {innerHorizontal: true}});
|
|
result.push({lineStyle: borderStyle, options: {innerVertical: true}});
|
|
break;
|
|
|
|
case "all":
|
|
case "none":
|
|
result.push({lineStyle: borderStyle, options: {all: true}});
|
|
break;
|
|
|
|
case "left":
|
|
result.push({lineStyle: borderStyle, options: {left: true}});
|
|
break;
|
|
|
|
case "innerVertical":
|
|
result.push({lineStyle: borderStyle, options: {innerVertical: true}});
|
|
break;
|
|
|
|
case "right":
|
|
result.push({lineStyle: borderStyle, options: {right: true}});
|
|
break;
|
|
|
|
case "top":
|
|
result.push({lineStyle: borderStyle, options: {top: true}});
|
|
break;
|
|
|
|
case "innerHorizontal":
|
|
result.push({lineStyle: borderStyle, options: {innerHorizontal: true}});
|
|
break;
|
|
|
|
case "bottom":
|
|
result.push({lineStyle: borderStyle, options: {bottom: true}});
|
|
break;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
function setBorderlines(sheet, borderType, borderStyle, borderColor) {
|
|
function setSheetBorder(setting) {
|
|
var lineBorder = new spreadNS.LineBorder(borderColor, setting.lineStyle);
|
|
sel.setBorder(lineBorder, setting.options);
|
|
setRangeBorder(sheet, sel, setting.options);
|
|
}
|
|
|
|
var settings = getBorderSettings(borderType, borderStyle);
|
|
var rowCount = sheet.getRowCount(),
|
|
columnCount = sheet.getColumnCount();
|
|
|
|
sheet.suspendPaint();
|
|
var sels = sheet.getSelections();
|
|
|
|
for (var n = 0; n < sels.length; n++) {
|
|
var sel = getActualCellRange(sheet, sels[n], rowCount, columnCount);
|
|
settings.forEach(setSheetBorder);
|
|
}
|
|
sheet.resumePaint();
|
|
}
|
|
|
|
function attachBorderTypeClickEvents() {
|
|
var $groupItems = $(".group-item>div");
|
|
$groupItems.bind("mousedown", function () {
|
|
if ($(this).parent().hasClass("disable")) {
|
|
return;
|
|
}
|
|
var name = $(this).data("name").split("Border")[0];
|
|
applyBorderSetting(name);
|
|
});
|
|
}
|
|
|
|
function applyBorderSetting(name) {
|
|
var sheet = spread.getActiveSheet();
|
|
var borderLine = getBorderLineType($("#border-line-type").attr("class"));
|
|
var borderColor = getBackgroundColor("borderColor");
|
|
setBorderlines(sheet, name, borderLine, borderColor);
|
|
}
|
|
|
|
function getBorderLineType(className) {
|
|
switch (className) {
|
|
case "no-border":
|
|
return spreadNS.LineStyle.empty;
|
|
|
|
case "line-style-hair":
|
|
return spreadNS.LineStyle.hair;
|
|
|
|
case "line-style-dotted":
|
|
return spreadNS.LineStyle.dotted;
|
|
|
|
case "line-style-dash-dot-dot":
|
|
return spreadNS.LineStyle.dashDotDot;
|
|
|
|
case "line-style-dash-dot":
|
|
return spreadNS.LineStyle.dashDot;
|
|
|
|
case "line-style-dashed":
|
|
return spreadNS.LineStyle.dashed;
|
|
|
|
case "line-style-thin":
|
|
return spreadNS.LineStyle.thin;
|
|
|
|
case "line-style-medium-dash-dot-dot":
|
|
return spreadNS.LineStyle.mediumDashDotDot;
|
|
|
|
case "line-style-slanted-dash-dot":
|
|
return spreadNS.LineStyle.slantedDashDot;
|
|
|
|
case "line-style-medium-dash-dot":
|
|
return spreadNS.LineStyle.mediumDashDot;
|
|
|
|
case "line-style-medium-dashed":
|
|
return spreadNS.LineStyle.mediumDashed;
|
|
|
|
case "line-style-medium":
|
|
return spreadNS.LineStyle.medium;
|
|
|
|
case "line-style-thick":
|
|
return spreadNS.LineStyle.thick;
|
|
|
|
case "line-style-double":
|
|
return spreadNS.LineStyle.double;
|
|
}
|
|
}
|
|
|
|
function processBorderLineSetting(name) {
|
|
var $borderLineType = $('#border-line-type');
|
|
$borderLineType.text("");
|
|
$borderLineType.removeClass();
|
|
switch (name) {
|
|
case "none":
|
|
$('#border-line-type').text(getResource("cellTab.border.noBorder"));
|
|
$('#border-line-type').addClass("no-border");
|
|
return;
|
|
|
|
case "hair":
|
|
$('#border-line-type').addClass("line-style-hair");
|
|
break;
|
|
|
|
case "dotted":
|
|
$('#border-line-type').addClass("line-style-dotted");
|
|
break;
|
|
|
|
case "dash-dot-dot":
|
|
$('#border-line-type').addClass("line-style-dash-dot-dot");
|
|
break;
|
|
|
|
case "dash-dot":
|
|
$('#border-line-type').addClass("line-style-dash-dot");
|
|
break;
|
|
|
|
case "dashed":
|
|
$('#border-line-type').addClass("line-style-dashed");
|
|
break;
|
|
|
|
case "thin":
|
|
$('#border-line-type').addClass("line-style-thin");
|
|
break;
|
|
|
|
case "medium-dash-dot-dot":
|
|
$('#border-line-type').addClass("line-style-medium-dash-dot-dot");
|
|
break;
|
|
|
|
case "slanted-dash-dot":
|
|
$('#border-line-type').addClass("line-style-slanted-dash-dot");
|
|
break;
|
|
|
|
case "medium-dash-dot":
|
|
$('#border-line-type').addClass("line-style-medium-dash-dot");
|
|
break;
|
|
|
|
case "medium-dashed":
|
|
$('#border-line-type').addClass("line-style-medium-dashed");
|
|
break;
|
|
|
|
case "medium":
|
|
$('#border-line-type').addClass("line-style-medium");
|
|
break;
|
|
|
|
case "thick":
|
|
$('#border-line-type').addClass("line-style-thick");
|
|
break;
|
|
|
|
case "double":
|
|
$('#border-line-type').addClass("line-style-double");
|
|
break;
|
|
|
|
default:
|
|
console.log("processBorderLineSetting not add for ", name);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function setRangeBorder(sheet, range, options) {
|
|
var outline = options.all || options.outline,
|
|
rowCount = sheet.getRowCount(),
|
|
columnCount = sheet.getColumnCount(),
|
|
startRow = range.row, endRow = startRow + range.rowCount - 1,
|
|
startCol = range.col, endCol = startCol + range.colCount - 1;
|
|
|
|
// update related borders for all cells arround the range
|
|
|
|
// left side
|
|
if ((startCol > 0) && (outline || options.left)) {
|
|
sheet.getRange(startRow, startCol - 1, range.rowCount, 1).borderRight(undefined);
|
|
}
|
|
// top side
|
|
if ((startRow > 0) && (outline || options.top)) {
|
|
sheet.getRange(startRow - 1, startCol, 1, range.colCount).borderBottom(undefined);
|
|
}
|
|
// right side
|
|
if ((endCol < columnCount - 1) && (outline || options.right)) {
|
|
sheet.getRange(startRow, endCol + 1, range.rowCount, 1).borderLeft(undefined);
|
|
}
|
|
// bottom side
|
|
if ((endRow < rowCount - 1) && (outline || options.bottom)) {
|
|
sheet.getRange(endRow + 1, startCol, 1, range.colCount).borderTop(undefined);
|
|
}
|
|
}
|
|
// Border Type related items (end)
|
|
|
|
function attachOtherEvents() {
|
|
$("div.table-format-item").click(changeTableStyle);
|
|
$("div.slicer-format-item").click(changeSlicerStyle);
|
|
$("#fileSelector").change(processFileSelected);
|
|
$("#sparklineextypes button").click(processAddSparklineEx);
|
|
$("#chartContainer button").click(processAddChartEx);
|
|
}
|
|
|
|
function processFileSelected() {
|
|
var file = this.files[0],
|
|
action = $(this).data("action");
|
|
|
|
if (!file) return false;
|
|
|
|
// clear to make sure change event occures even when same file selected again
|
|
$("#fileSelector").val("");
|
|
|
|
if (action === "doImport") {
|
|
return importFile(file);
|
|
}
|
|
|
|
if (!/image\/\w+/.test(file.type)) {
|
|
alert(getResource("messages.imageFileRequired"));
|
|
return false;
|
|
}
|
|
var reader = new FileReader();
|
|
reader.onload = function () {
|
|
switch (action) {
|
|
case "addpicture":
|
|
addPicture(this.result);
|
|
break;
|
|
}
|
|
};
|
|
reader.readAsDataURL(file);
|
|
}
|
|
|
|
var PICTURE_ROWCOUNT = 16, PICTURE_COLUMNCOUNT = 10;
|
|
function addPicture(pictureUrl) {
|
|
var sheet = spread.getActiveSheet();
|
|
var defaults = sheet.defaults, rowHeight = defaults.rowHeight, colWidth = defaults.colWidth;
|
|
var sel = sheet.getSelections()[0];
|
|
if (pictureUrl !== "" && sel) {
|
|
sheet.suspendPaint();
|
|
|
|
var cr = getActualRange(sel, sheet.getRowCount(), sheet.getColumnCount());
|
|
var name = "Picture" + pictureIndex;
|
|
pictureIndex++;
|
|
|
|
// prepare and adjust the range for add picture
|
|
var row = cr.row, col = cr.col,
|
|
endRow = row + PICTURE_ROWCOUNT,
|
|
endColumn = col + PICTURE_COLUMNCOUNT,
|
|
rowCount = sheet.getRowCount(),
|
|
columnCount = sheet.getColumnCount();
|
|
|
|
if (endRow > rowCount) {
|
|
endRow = rowCount - 1;
|
|
row = endRow - PICTURE_ROWCOUNT;
|
|
}
|
|
|
|
if (endColumn > columnCount) {
|
|
endColumn = columnCount - 1;
|
|
col = endColumn - PICTURE_COLUMNCOUNT;
|
|
}
|
|
|
|
var picture = sheet.pictures.add(name, pictureUrl, col * colWidth, row * rowHeight, (endColumn - col) * colWidth, (endRow - row) * rowHeight)
|
|
.backColor("#FFFFFF").borderColor("#000000")
|
|
.borderStyle("solid").borderWidth(1).borderRadius(3);
|
|
sheet.resumePaint();
|
|
|
|
spread.focus();
|
|
picture.isSelected(true);
|
|
}
|
|
}
|
|
|
|
function updatePositionBox(sheet) {
|
|
var selection = sheet.getSelections().slice(-1)[0];
|
|
if (selection) {
|
|
var position;
|
|
if (!isShiftKey) {
|
|
position = getCellPositionString(sheet,
|
|
sheet.getActiveRowIndex() + 1,
|
|
sheet.getActiveColumnIndex() + 1, selection);
|
|
}
|
|
else {
|
|
position = getSelectedRangeString(sheet, selection);
|
|
}
|
|
|
|
$("#positionbox").val(position);
|
|
}
|
|
}
|
|
|
|
function syncCellRelatedItems() {
|
|
updateMergeButtonsState();
|
|
syncDisabledLockCells();
|
|
syncDisabledBorderType();
|
|
|
|
// reset conditional format setting
|
|
var item = setDropDownValueByIndex($("#conditionalFormatType"), -1);
|
|
processConditionalFormatDetailSetting(item.value, true);
|
|
// sync cell type related information
|
|
syncCellTypeInfo();
|
|
}
|
|
|
|
function syncCellTypeInfo() {
|
|
function updateButtonCellTypeInfo(cellType) {
|
|
setNumberValue("buttonCellTypeMarginTop", cellType.marginTop());
|
|
setNumberValue("buttonCellTypeMarginRight", cellType.marginRight());
|
|
setNumberValue("buttonCellTypeMarginBottom", cellType.marginBottom());
|
|
setNumberValue("buttonCellTypeMarginLeft", cellType.marginLeft());
|
|
setTextValue("buttonCellTypeText", cellType.text());
|
|
setColorValue("buttonCellTypeBackColor", cellType.buttonBackColor());
|
|
}
|
|
|
|
function updateCheckBoxCellTypeInfo(cellType) {
|
|
setTextValue("checkboxCellTypeCaption", cellType.caption());
|
|
setTextValue("checkboxCellTypeTextTrue", cellType.textTrue());
|
|
setTextValue("checkboxCellTypeTextIndeterminate", cellType.textIndeterminate());
|
|
setTextValue("checkboxCellTypeTextFalse", cellType.textFalse());
|
|
setDropDownValue("checkboxCellTypeTextAlign", cellType.textAlign());
|
|
setCheckValue("checkboxCellTypeIsThreeState", cellType.isThreeState());
|
|
}
|
|
|
|
function updateComboBoxCellTypeInfo(cellType) {
|
|
setDropDownValue("comboboxCellTypeEditorValueType", cellType.editorValueType());
|
|
var items = cellType.items(),
|
|
texts = items.map(function (item) {
|
|
return item.text || item;
|
|
}).join(","),
|
|
values = items.map(function (item) {
|
|
return item.value || item;
|
|
}).join(",");
|
|
|
|
setTextValue("comboboxCellTypeItemsText", texts);
|
|
setTextValue("comboboxCellTypeItemsValue", values);
|
|
}
|
|
|
|
function updateHyperLinkCellTypeInfo(cellType) {
|
|
setColorValue("hyperlinkCellTypeLinkColor", cellType.linkColor());
|
|
setColorValue("hyperlinkCellTypeVisitedLinkColor", cellType.visitedLinkColor());
|
|
setTextValue("hyperlinkCellTypeText", cellType.text());
|
|
setTextValue("hyperlinkCellTypeLinkToolTip", cellType.linkToolTip());
|
|
}
|
|
|
|
var sheet = spread.getActiveSheet(),
|
|
index,
|
|
cellType = sheet.getCell(sheet.getActiveRowIndex(), sheet.getActiveColumnIndex()).cellType();
|
|
|
|
if (cellType instanceof spreadNS.CellTypes.Button) {
|
|
index = 0;
|
|
updateButtonCellTypeInfo(cellType);
|
|
} else if (cellType instanceof spreadNS.CellTypes.CheckBox) {
|
|
index = 1;
|
|
updateCheckBoxCellTypeInfo(cellType);
|
|
} else if (cellType instanceof spreadNS.CellTypes.ComboBox) {
|
|
index = 2;
|
|
updateComboBoxCellTypeInfo(cellType);
|
|
} else if (cellType instanceof spreadNS.CellTypes.HyperLink) {
|
|
index = 3;
|
|
updateHyperLinkCellTypeInfo(cellType);
|
|
} else {
|
|
index = -1;
|
|
}
|
|
var cellTypeItem = setDropDownValueByIndex($("#cellTypes"), index);
|
|
processCellTypeSetting(cellTypeItem.value, true);
|
|
|
|
if (index >= 0) {
|
|
var $group = $("#groupCellType");
|
|
if ($group.find(".group-state").hasClass("fa-caret-right")) {
|
|
$group.click();
|
|
}
|
|
}
|
|
}
|
|
|
|
function onCellSelected() {
|
|
$("#addslicer").addClass("hidden");
|
|
var sheet = spread.getActiveSheet(),
|
|
row = sheet.getActiveRowIndex(),
|
|
column = sheet.getActiveColumnIndex();
|
|
if (showSparklineSetting(row, column)) {
|
|
setActiveTab("sparklineEx");
|
|
return;
|
|
}
|
|
var cellInfo = getCellInfo(sheet, row, column),
|
|
cellType = cellInfo.type;
|
|
|
|
syncCellRelatedItems();
|
|
updatePositionBox(sheet);
|
|
updateCellStyleState(sheet, row, column);
|
|
|
|
var tabType = "cell";
|
|
|
|
clearCachedItems();
|
|
|
|
// add map from cell type to tab type here
|
|
if (cellType === "table") {
|
|
tabType = "table";
|
|
syncTablePropertyValues(sheet, cellInfo.object);
|
|
$("#addslicer").removeClass("hidden");
|
|
} else if (cellType === "comment") {
|
|
tabType = "comment";
|
|
syncCommentPropertyValues(sheet, cellInfo.object);
|
|
}
|
|
|
|
setActiveTab(tabType);
|
|
}
|
|
|
|
var _activeComment;
|
|
|
|
function syncCommentPropertyValues(sheet, comment) {
|
|
_activeComment = comment;
|
|
|
|
// General
|
|
setCheckValue("commentDynamicSize", comment.dynamicSize());
|
|
setCheckValue("commentDynamicMove", comment.dynamicMove());
|
|
setCheckValue("commentLockText", comment.lockText());
|
|
setCheckValue("commentShowShadow", comment.showShadow());
|
|
|
|
// Font
|
|
setDropDownText($("#commentTab div.insp-dropdown-list[data-name='commentFontFamily']"), comment.fontFamily());
|
|
setDropDownText($("#commentTab div.insp-dropdown-list[data-name='commentFontSize']"), parseFloat(comment.fontSize()));
|
|
setDropDownText($("#commentTab div.insp-dropdown-list[data-name='commentFontStyle']"), comment.fontStyle());
|
|
setDropDownText($("#commentTab div.insp-dropdown-list[data-name='commentFontWeight']"), comment.fontWeight());
|
|
var textDecoration = comment.textDecoration();
|
|
var TextDecorationType = spreadNS.TextDecorationType;
|
|
setFontStyleButtonActive("comment-underline", (textDecoration & TextDecorationType.underline) === TextDecorationType.underline);
|
|
setFontStyleButtonActive("comment-overline", (textDecoration & TextDecorationType.overline) === TextDecorationType.overline);
|
|
setFontStyleButtonActive("comment-strikethrough", (textDecoration & TextDecorationType.lineThrough) === TextDecorationType.lineThrough);
|
|
|
|
// Border
|
|
setNumberValue("commentBorderWidth", comment.borderWidth());
|
|
setDropDownText($("#commentTab div.insp-dropdown-list[data-name='commentBorderStyle']"), comment.borderStyle());
|
|
setColorValue("commentBorderColor", comment.borderColor());
|
|
|
|
// Appearance
|
|
setDropDownValue($("#commentTab div.insp-dropdown-list[data-name='commentHorizontalAlign']"), comment.horizontalAlign());
|
|
setDropDownValue($("#commentTab div.insp-dropdown-list[data-name='commentDisplayMode']"), comment.displayMode());
|
|
setColorValue("commentForeColor", comment.foreColor());
|
|
setColorValue("commentBackColor", comment.backColor());
|
|
setTextValue("commentPadding", getPaddingString(comment.padding()));
|
|
setNumberValue("commentOpacity", comment.opacity() * 100);
|
|
}
|
|
|
|
function getPaddingString(padding) {
|
|
if (!padding) return "";
|
|
|
|
return [padding.top, padding.right, padding.bottom, padding.left].join(", ");
|
|
}
|
|
|
|
function clearCachedItems() {
|
|
_activePicture = null;
|
|
_activeComment = null;
|
|
_activeTable = null;
|
|
}
|
|
|
|
var _activeTable;
|
|
function syncTablePropertyValues(sheet, table) {
|
|
_activeTable = table;
|
|
|
|
setCheckValue("tableFilterButton", table.filterButtonVisible());
|
|
|
|
setCheckValue("tableHeaderRow", table.showHeader());
|
|
setCheckValue("tableTotalRow", table.showFooter());
|
|
|
|
setCheckValue("tableFirstColumn", table.highlightFirstColumn());
|
|
setCheckValue("tableLastColumn", table.highlightLastColumn());
|
|
setCheckValue("tableBandedRows", table.bandRows());
|
|
setCheckValue("tableBandedColumns", table.bandColumns());
|
|
var tableStyle = table.style(),
|
|
styleName = tableStyle && table.style().name();
|
|
|
|
$("#tableStyles .table-format-item").removeClass("table-format-item-selected");
|
|
if (styleName) {
|
|
$("#tableStyles .table-format-item div[data-name='" + styleName.toLowerCase() + "']").parent().addClass("table-format-item-selected");
|
|
}
|
|
setTextValue("tableName", table.name());
|
|
}
|
|
|
|
function changeTableStyle() {
|
|
if (_activeTable) {
|
|
spread.suspendPaint();
|
|
|
|
var styleName = $(">div", this).data("name");
|
|
|
|
_activeTable.style(spreadNS.Tables.TableThemes[styleName]);
|
|
|
|
$("#tableStyles .table-format-item").removeClass("table-format-item-selected");
|
|
$(this).addClass("table-format-item-selected");
|
|
|
|
spread.resumePaint();
|
|
}
|
|
}
|
|
|
|
var _activePicture;
|
|
function syncPicturePropertyValues(sheet, picture) {
|
|
_activePicture = picture;
|
|
|
|
// General
|
|
if (picture.dynamicMove()) {
|
|
if (picture.dynamicSize()) {
|
|
setRadioItemChecked("pictureMoveAndSize", "picture-move-size");
|
|
}
|
|
else {
|
|
setRadioItemChecked("pictureMoveAndSize", "picture-move-nosize");
|
|
}
|
|
}
|
|
else {
|
|
setRadioItemChecked("pictureMoveAndSize", "picture-nomove-size");
|
|
}
|
|
setCheckValue("pictureFixedPosition", picture.fixedPosition());
|
|
|
|
// Border
|
|
setNumberValue("pictureBorderWidth", picture.borderWidth());
|
|
setNumberValue("pictureBorderRadius", picture.borderRadius());
|
|
setDropDownText($("#pictureTab div.insp-dropdown-list[data-name='pictureBorderStyle']"), picture.borderStyle());
|
|
setColorValue("pictureBorderColor", picture.borderColor());
|
|
|
|
// Appearance
|
|
setDropDownValue($("#pictureTab div.insp-dropdown-list[data-name='pictureStretch']"), picture.pictureStretch());
|
|
setColorValue("pictureBackColor", picture.backColor());
|
|
|
|
$("#positionbox").val(picture.name());
|
|
}
|
|
|
|
var _floatInspector = false;
|
|
|
|
function adjustInspectorDisplay() {
|
|
var $inspectorContainer = $(".insp-container"),
|
|
$contentContainer = $("#inner-content-container"),
|
|
toggleInspectorClasses;
|
|
|
|
if (_floatInspector) {
|
|
$inspectorContainer.draggable("enable");
|
|
$inspectorContainer.addClass("float-inspector");
|
|
$contentContainer.addClass("float-inspector");
|
|
toggleInspectorClasses = ["fa-angle-down", "fa-angle-up"];
|
|
$("#inner-content-container").addClass("hide-inspector");
|
|
} else {
|
|
$inspectorContainer.draggable("disable");
|
|
$inspectorContainer.removeClass("float-inspector");
|
|
$inspectorContainer.css({left: "auto", top: 0});
|
|
$contentContainer.removeClass("float-inspector");
|
|
toggleInspectorClasses = ["fa-angle-left", "fa-angle-right"];
|
|
}
|
|
|
|
// update toggleInspector
|
|
var classIndex = ($(".insp-container:visible").length > 0) ? 1 : 0;
|
|
$("#toggleInspector > span")
|
|
.removeClass("fa-angle-left fa-angle-right fa-angle-up fa-angle-down")
|
|
.addClass(toggleInspectorClasses[classIndex]);
|
|
}
|
|
function processMediaQueryResponse(mql) {
|
|
if (mql.matches) {
|
|
if (!_floatInspector) {
|
|
_floatInspector = true;
|
|
adjustInspectorDisplay();
|
|
}
|
|
} else {
|
|
if (_floatInspector) {
|
|
_floatInspector = false;
|
|
adjustInspectorDisplay();
|
|
}
|
|
}
|
|
}
|
|
|
|
function checkMediaSize() {
|
|
var mql = window.matchMedia("screen and (max-width: 768px)");
|
|
processMediaQueryResponse(mql);
|
|
adjustInspectorDisplay();
|
|
mql.addListener(processMediaQueryResponse);
|
|
}
|
|
|
|
function toggleInspector() {
|
|
if ($(".insp-container:visible").length > 0) {
|
|
$(".insp-container").hide();
|
|
if (!_floatInspector) {
|
|
$("#inner-content-container").addClass("hide-inspector");
|
|
$("span", this).removeClass("fa-angle-right fa-angle-up fa-angle-down").addClass("fa-angle-left");
|
|
} else {
|
|
$("#inner-content-container").addClass("hide-inspector");
|
|
$("span", this).removeClass("fa-angle-right fa-angle-left fa-angle-up").addClass("fa-angle-down");
|
|
}
|
|
|
|
$(this).attr("title", uiResource.toolBar.showInspector);
|
|
} else {
|
|
$(".insp-container").show();
|
|
if (!_floatInspector) {
|
|
$("#inner-content-container").removeClass("hide-inspector");
|
|
$("span", this).removeClass("fa-angle-left fa-angle-up fa-angle-down").addClass("fa-angle-right");
|
|
} else {
|
|
$("#inner-content-container").addClass("hide-inspector");
|
|
$("span", this).removeClass("fa-angle-right fa-angle-left fa-angle-down").addClass("fa-angle-up");
|
|
}
|
|
|
|
$(this).attr("title", uiResource.toolBar.hideInspector);
|
|
}
|
|
spread.refresh();
|
|
}
|
|
|
|
function attachToolbarItemEvents() {
|
|
$("#addtable").click(function () {
|
|
var sheet = spread.getActiveSheet(),
|
|
row = sheet.getActiveRowIndex(),
|
|
column = sheet.getActiveColumnIndex(),
|
|
name = "Table" + tableIndex,
|
|
rowCount = 1,
|
|
colCount = 1;
|
|
|
|
tableIndex++;
|
|
|
|
var selections = sheet.getSelections();
|
|
|
|
if (selections.length > 0) {
|
|
var range = selections[0],
|
|
r = range.row,
|
|
c = range.col;
|
|
|
|
rowCount = range.rowCount,
|
|
colCount = range.colCount;
|
|
|
|
// update row / column for whole column / row was selected
|
|
if (r >= 0) {
|
|
row = r;
|
|
}
|
|
if (c >= 0) {
|
|
column = c;
|
|
}
|
|
}
|
|
|
|
sheet.suspendPaint();
|
|
try {
|
|
// handle exception if the specified range intersect with other table etc.
|
|
sheet.tables.add(name, row, column, rowCount, colCount, spreadNS.Tables.TableThemes.light2);
|
|
} catch (e) {
|
|
alert(e.message);
|
|
}
|
|
sheet.resumePaint();
|
|
|
|
spread.focus();
|
|
|
|
onCellSelected();
|
|
});
|
|
|
|
$("#addcomment").click(function () {
|
|
var sheet = spread.getActiveSheet(),
|
|
row = sheet.getActiveRowIndex(),
|
|
column = sheet.getActiveColumnIndex(),
|
|
comment;
|
|
|
|
sheet.suspendPaint();
|
|
comment = sheet.comments.add(row, column, new Date().toLocaleString());
|
|
sheet.resumePaint();
|
|
|
|
comment.commentState(spreadNS.Comments.CommentState.edit);
|
|
});
|
|
|
|
$("#addpicture, #doImport").click(function () {
|
|
$("#fileSelector").data("action", this.id);
|
|
$("#fileSelector").click();
|
|
});
|
|
|
|
$("#toggleInspector").click(toggleInspector);
|
|
|
|
$("#doClear").click(function () {
|
|
var $dropdown = $("#clearActionList"),
|
|
$this = $(this),
|
|
offset = $this.offset();
|
|
|
|
$dropdown.css({left: offset.left, top: offset.top + $this.outerHeight()});
|
|
$dropdown.show();
|
|
processEventListenerHandleClosePopup(true);
|
|
});
|
|
|
|
$("#doExport").click(function () {
|
|
var $dropdown = $("#exportActionList"),
|
|
$this = $(this),
|
|
offset = $this.offset();
|
|
|
|
$dropdown.css({left: offset.left, top: offset.top + $this.outerHeight()});
|
|
$dropdown.show();
|
|
processEventListenerHandleClosePopup(true);
|
|
});
|
|
|
|
$("#addslicer").click(processAddSlicer);
|
|
}
|
|
|
|
// Protect Sheet related items
|
|
function getCurrentSheetProtectionOption(sheet) {
|
|
var options = sheet.options.protectionOptions;
|
|
if (options.allowSelectLockedCells || options.allowSelectLockedCells === undefined) {
|
|
setCheckValue("checkboxSelectLockedCells", true);
|
|
}
|
|
else {
|
|
setCheckValue("checkboxSelectLockedCells", false);
|
|
}
|
|
if (options.allowSelectUnlockedCells || options.allowSelectUnlockedCells === undefined) {
|
|
setCheckValue("checkboxSelectUnlockedCells", true);
|
|
}
|
|
else {
|
|
setCheckValue("checkboxSelectUnlockedCells", false);
|
|
}
|
|
if (options.allowSort) {
|
|
setCheckValue("checkboxSort", true);
|
|
}
|
|
else {
|
|
setCheckValue("checkboxSort", false);
|
|
}
|
|
if (options.allowFilter) {
|
|
setCheckValue("checkboxUseAutoFilter", true);
|
|
}
|
|
else {
|
|
setCheckValue("checkboxUseAutoFilter", false);
|
|
}
|
|
if (options.allowResizeRows) {
|
|
setCheckValue("checkboxResizeRows", true);
|
|
}
|
|
else {
|
|
setCheckValue("checkboxResizeRows", false);
|
|
}
|
|
if (options.allowResizeColumns) {
|
|
setCheckValue("checkboxResizeColumns", true);
|
|
}
|
|
else {
|
|
setCheckValue("checkboxResizeColumns", false);
|
|
}
|
|
if (options.allowEditObjects) {
|
|
setCheckValue("checkboxEditObjects", true);
|
|
}
|
|
else {
|
|
setCheckValue("checkboxEditObjects", false);
|
|
}
|
|
}
|
|
|
|
function setProtectionOption(sheet, optionItem, value) {
|
|
var options = sheet.options.protectionOptions;
|
|
switch (optionItem) {
|
|
case "allowSelectLockedCells":
|
|
options.allowSelectLockedCells = value;
|
|
break;
|
|
case "allowSelectUnlockedCells":
|
|
options.allowSelectUnlockedCells = value;
|
|
break;
|
|
case "allowSort":
|
|
options.allowSort = value;
|
|
break;
|
|
case "allowFilter":
|
|
options.allowFilter = value;
|
|
break;
|
|
case "allowResizeRows":
|
|
options.allowResizeRows = value;
|
|
break;
|
|
case "allowResizeColumns":
|
|
options.allowResizeColumns = value;
|
|
break;
|
|
case "allowEditObjects":
|
|
options.allowEditObjects = value;
|
|
break;
|
|
default:
|
|
console.log("There is no protection option:", optionItem);
|
|
break;
|
|
}
|
|
setActiveTab("sheet");
|
|
}
|
|
|
|
function syncSheetProtectionText(isProtected) {
|
|
var $protectSheetText = $("#protectSheetText");
|
|
if (isProtected) {
|
|
$protectSheetText.text(uiResource.cellTab.protection.sheetIsProtected);
|
|
}
|
|
else {
|
|
$protectSheetText.text(uiResource.cellTab.protection.sheetIsUnprotected);
|
|
}
|
|
}
|
|
|
|
function syncProtectSheetRelatedItems(sheet, value) {
|
|
sheet.options.isProtected = value;
|
|
syncSheetProtectionText(value);
|
|
|
|
if (isAllSelectedSlicersLocked(sheet)) {
|
|
setActiveTab("sheet");
|
|
}
|
|
}
|
|
|
|
function isAllSelectedSlicersLocked(sheet) {
|
|
var selectedSlicers = getSelectedSlicers(sheet);
|
|
if (!selectedSlicers || selectedSlicers.length === 0) {
|
|
return null;
|
|
}
|
|
var allLocked = true;
|
|
for (var item in selectedSlicers) {
|
|
allLocked = allLocked && selectedSlicers[item].isLocked();
|
|
if (!allLocked) {
|
|
break;
|
|
}
|
|
}
|
|
return allLocked;
|
|
}
|
|
// Protect Sheet related items (end)
|
|
|
|
// Lock Cell related items
|
|
function getCellsLockedState() {
|
|
var isLocked = false;
|
|
var sheet = spread.getActiveSheet();
|
|
var selections = sheet.getSelections(), selectionsLength = selections.length;
|
|
var cell;
|
|
var row, col, rowCount, colCount;
|
|
if (selectionsLength > 0) {
|
|
for (var i = 0; i < selectionsLength; i++) {
|
|
var range = selections[i];
|
|
row = range.row;
|
|
rowCount = range.rowCount;
|
|
colCount = range.colCount;
|
|
if (row < 0) {
|
|
row = 0;
|
|
}
|
|
for (row; row < range.row + rowCount; row++) {
|
|
col = range.col;
|
|
if (col < 0) {
|
|
col = 0;
|
|
}
|
|
for (col; col < range.col + colCount; col++) {
|
|
cell = sheet.getCell(row, col);
|
|
isLocked = isLocked || cell.locked();
|
|
if (isLocked) {
|
|
return isLocked;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
} else {
|
|
return sheet.getCell(sheet.getActiveRowIndex(), sheet.getActiveColumnIndex()).locked();
|
|
}
|
|
}
|
|
|
|
function syncDisabledLockCells() {
|
|
var cellsLockedState = getCellsLockedState();
|
|
setCheckValue("checkboxLockCell", cellsLockedState);
|
|
}
|
|
|
|
function attachLockCellsEvent() {
|
|
$("#lockCells").click(function () {
|
|
var value = getCheckValue("checkboxLockCell");
|
|
setSelectedCellsLock(value);
|
|
});
|
|
}
|
|
|
|
function setSelectedCellsLock(value) {
|
|
var sheet = spread.getActiveSheet();
|
|
var selections = sheet.getSelections();
|
|
var row, col, rowCount, colCount;
|
|
for (var i = 0; i < selections.length; i++) {
|
|
var range = selections[i];
|
|
row = range.row;
|
|
col = range.col;
|
|
rowCount = range.rowCount;
|
|
colCount = range.colCount;
|
|
if (row < 0 && col < 0) {
|
|
sheet.getDefaultStyle().locked = value;
|
|
}
|
|
else if (row < 0) {
|
|
sheet.getRange(-1, col, -1, colCount).locked(value);
|
|
}
|
|
else if (col < 0) {
|
|
sheet.getRange(row, -1, rowCount, -1).locked(value);
|
|
}
|
|
else {
|
|
sheet.getRange(row, col, rowCount, colCount).locked(value);
|
|
}
|
|
}
|
|
}
|
|
// Lock Cell related items (end)
|
|
|
|
function attachSpreadEvents(rebind) {
|
|
spread.bind(spreadNS.Events.EnterCell, onCellSelected);
|
|
|
|
spread.bind(spreadNS.Events.ValueChanged, function (sender, args) {
|
|
var row = args.row, col = args.col, sheet = args.sheet;
|
|
|
|
if (sheet.getCell(row, col).wordWrap()) {
|
|
sheet.autoFitRow(row);
|
|
}
|
|
});
|
|
|
|
function shouldAutofitRow(sheet, row, col, colCount) {
|
|
for (var c = 0; c < colCount; c++) {
|
|
if (sheet.getCell(row, col++).wordWrap()) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
spread.bind(spreadNS.Events.RangeChanged, function (sender, args) {
|
|
var sheet = args.sheet, row = args.row, rowCount = args.rowCount;
|
|
|
|
if (args.action === spreadNS.RangeChangedAction.paste) {
|
|
var col = args.col, colCount = args.colCount;
|
|
for (var i = 0; i < rowCount; i++) {
|
|
if (shouldAutofitRow(sheet, row, col, colCount)) {
|
|
sheet.autoFitRow(row);
|
|
}
|
|
row++;
|
|
}
|
|
}
|
|
});
|
|
|
|
spread.bind(spreadNS.Events.ActiveSheetChanged, function () {
|
|
setActiveTab("sheet");
|
|
syncSheetPropertyValues();
|
|
syncCellRelatedItems();
|
|
|
|
var sheet = spread.getActiveSheet(),
|
|
picture,
|
|
chart;
|
|
var slicers = sheet.slicers.all();
|
|
for (var item in slicers) {
|
|
slicers[item].isSelected(false);
|
|
}
|
|
if (sheet.getSelections().length === 0) {
|
|
sheet.pictures.all().forEach(function (pic) {
|
|
if (!picture && pic.isSelected()) {
|
|
picture = pic;
|
|
}
|
|
});
|
|
|
|
sheet.charts.all().forEach(function (cha) {
|
|
if(!chart && cha.isSelected()){
|
|
chart = cha;
|
|
}
|
|
})
|
|
// fix bug, make sure selection was shown after unselect slicer
|
|
if (!picture || !chart) {
|
|
sheet.setSelection(sheet.getActiveRowIndex(), sheet.getActiveColumnIndex(), 1, 1);
|
|
}
|
|
}
|
|
if (picture) {
|
|
syncPicturePropertyValues(sheet, picture);
|
|
setActiveTab("picture");
|
|
} else if (chart) {
|
|
//syncChartPropertyValues(sheet, chart)
|
|
showChartPanel(chart);
|
|
} else{
|
|
onCellSelected();
|
|
}
|
|
|
|
|
|
var value = $("div.button", $("div[data-name='allowOverflow']")).hasClass("checked");
|
|
if (sheet.options.allowCellOverflow !== value) {
|
|
sheet.options.allowCellOverflow = value;
|
|
}
|
|
});
|
|
|
|
spread.bind(spreadNS.Events.SelectionChanging, function () {
|
|
var sheet = spread.getActiveSheet();
|
|
var selection = sheet.getSelections().slice(-1)[0];
|
|
if (selection) {
|
|
var position = getSelectedRangeString(sheet, selection);
|
|
$("#positionbox").val(position);
|
|
}
|
|
syncDisabledBorderType();
|
|
});
|
|
|
|
spread.bind(spreadNS.Events.SelectionChanged, function () {
|
|
syncCellRelatedItems();
|
|
|
|
updatePositionBox(spread.getActiveSheet());
|
|
});
|
|
|
|
spread.bind(spreadNS.Events.PictureSelectionChanged, function (event, args) {
|
|
var sheet = args.sheet, picture = args.picture;
|
|
|
|
if (picture && picture.isSelected()) {
|
|
syncPicturePropertyValues(sheet, picture);
|
|
setActiveTab("picture");
|
|
}
|
|
});
|
|
|
|
spread.bind(spreadNS.Events.ChartClicked, function (event, args) {
|
|
var sheet = args.sheet, chart = args.chart;
|
|
showChartPanel(chart);
|
|
});
|
|
spread.bind(spreadNS.Events.CommentChanged, function (event, args) {
|
|
var sheet = args.sheet, comment = args.comment, propertyName = args.propertyName;
|
|
|
|
if (propertyName === "commentState" && comment) {
|
|
if (comment.commentState() === spreadNS.Comments.CommentState.edit) {
|
|
syncCommentPropertyValues(sheet, comment);
|
|
setActiveTab("comment");
|
|
}
|
|
}
|
|
});
|
|
|
|
spread.bind(spreadNS.Events.ValidationError, function (event, data) {
|
|
var dv = data.validator;
|
|
if (dv) {
|
|
alert(dv.errorMessage() || dv.inputMessage());
|
|
}
|
|
});
|
|
|
|
spread.bind(spreadNS.Events.SlicerChanged, function (event, args) {
|
|
bindSlicerEvents(args.sheet, args.slicer, args.propertyName);
|
|
});
|
|
|
|
spread.bind(spreadNS.Events.ActiveSheetChanged, function (event, args) {
|
|
var newSheet = args.newSheet;
|
|
if(newSheet.name() === 'Chart'){
|
|
if(isFirstChart){
|
|
var chartCount = newSheet.charts.all().length || 0;
|
|
var columnType = GC.Spread.Sheets.Charts.ChartType.columnClustered;
|
|
var lineType = GC.Spread.Sheets.Charts.ChartType.line;
|
|
var lineChart = newSheet.charts.add(('ChartLine' + chartCount), lineType, 550, 130, 450, 300, "Chart!$A$1:$H$5");
|
|
var columnChart = newSheet.charts.add(('ChartColumn' + chartCount), columnType, 30, 130, 450, 300, "Chart!$A$1:$H$5");
|
|
columnChart.isSelected(true);
|
|
addChartEvent(columnChart);
|
|
}
|
|
isFirstChart = false;
|
|
}
|
|
})
|
|
|
|
$(document).bind("keydown", function (event) {
|
|
if (event.shiftKey) {
|
|
isShiftKey = true;
|
|
}
|
|
});
|
|
$(document).bind("keyup", function (event) {
|
|
if (!event.shiftKey) {
|
|
isShiftKey = false;
|
|
|
|
var sheet = spread.getActiveSheet(),
|
|
position = getCellPositionString(sheet, sheet.getActiveRowIndex() + 1, sheet.getActiveColumnIndex() + 1);
|
|
$("#positionbox").val(position);
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
function setConditionalFormatSettingGroupVisible(groupName) {
|
|
var $groupItems = $("#conditionalFormatSettingContainer .settingGroup .groupitem");
|
|
|
|
$groupItems.hide();
|
|
$groupItems.filter("[data-group='" + groupName + "']").show();
|
|
}
|
|
|
|
function processConditionalFormatSetting(groupName, listRef, rule) {
|
|
$("#conditionalFormatSettingContainer div.details").show();
|
|
setConditionalFormatSettingGroupVisible(groupName);
|
|
|
|
var $ruleType = $("#highlightCellsRule"),
|
|
$setButton = $("#setConditionalFormat");
|
|
if (listRef) {
|
|
$ruleType.data("list-ref", listRef);
|
|
$setButton.data("rule-type", rule);
|
|
var item = setDropDownValueByIndex($ruleType, 0);
|
|
updateEnumTypeOfCF(item.value);
|
|
} else {
|
|
$setButton.data("rule-type", groupName);
|
|
}
|
|
}
|
|
|
|
function processConditionalFormatDetailSetting(name, noAction) {
|
|
switch (name) {
|
|
case "highlight-cells-rules":
|
|
$("#formatSetting").show();
|
|
processConditionalFormatSetting("normal", "highlightCellsRulesList", 0);
|
|
break;
|
|
|
|
case "top-bottom-rules":
|
|
$("#formatSetting").show();
|
|
processConditionalFormatSetting("normal", "topBottomRulesList", 4);
|
|
break;
|
|
|
|
case "color-scales":
|
|
$("#formatSetting").hide();
|
|
processConditionalFormatSetting("normal", "colorScaleList", 8);
|
|
break;
|
|
|
|
case "data-bars":
|
|
processConditionalFormatSetting("databar");
|
|
break;
|
|
|
|
case "icon-sets":
|
|
processConditionalFormatSetting("iconset");
|
|
updateIconCriteriaItems(0);
|
|
break;
|
|
|
|
case "remove-conditional-formats":
|
|
$("#conditionalFormatSettingContainer div.details").hide();
|
|
if (!noAction) {
|
|
removeConditionFormats();
|
|
}
|
|
break;
|
|
|
|
default:
|
|
console.log("processConditionalFormatSetting not add for ", name);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function getBackgroundColor(name) {
|
|
return $("div.insp-color-picker[data-name='" + name + "'] div.color-view").css("background-color");
|
|
}
|
|
|
|
function addCondionalFormaterRule(rule) {
|
|
var sheet = spread.getActiveSheet();
|
|
var sels = sheet.getSelections();
|
|
var style = new spreadNS.Style();
|
|
|
|
if (getCheckValue("useFormatBackColor")) {
|
|
style.backColor = getBackgroundColor("formatBackColor");
|
|
}
|
|
if (getCheckValue("useFormatForeColor")) {
|
|
style.foreColor = getBackgroundColor("formatForeColor");
|
|
}
|
|
if (getCheckValue("useFormatBorder")) {
|
|
var lineBorder = new spreadNS.LineBorder(getBackgroundColor("formatBorderColor"), spreadNS.LineStyle.thin);
|
|
style.borderTop = style.borderRight = style.borderBottom = style.borderLeft = lineBorder;
|
|
}
|
|
var value1 = $("#value1").val();
|
|
var value2 = $("#value2").val();
|
|
var cfs = sheet.conditionalFormats;
|
|
var operator = +getDropDownValue("comparisonOperator");
|
|
|
|
var minType = +getDropDownValue("minType");
|
|
var midType = +getDropDownValue("midType");
|
|
var maxType = +getDropDownValue("maxType");
|
|
var midColor = getBackgroundColor("midColor");
|
|
var minColor = getBackgroundColor("minColor");
|
|
var maxColor = getBackgroundColor("maxColor");
|
|
var midValue = getNumberValue("midValue");
|
|
var maxValue = getNumberValue("maxValue");
|
|
var minValue = getNumberValue("minValue");
|
|
|
|
switch (rule) {
|
|
case "0":
|
|
var doubleValue1 = parseFloat(value1);
|
|
var doubleValue2 = parseFloat(value2);
|
|
cfs.addCellValueRule(operator, isNaN(doubleValue1) ? value1 : doubleValue1, isNaN(doubleValue2) ? value2 : doubleValue2, style, sels);
|
|
break;
|
|
case "1":
|
|
cfs.addSpecificTextRule(operator, value1, style, sels);
|
|
break;
|
|
case "2":
|
|
cfs.addDateOccurringRule(operator, style, sels);
|
|
break;
|
|
case "4":
|
|
cfs.addTop10Rule(operator, parseInt(value1, 10), style, sels);
|
|
break;
|
|
case "5":
|
|
cfs.addUniqueRule(style, sels);
|
|
break;
|
|
case "6":
|
|
cfs.addDuplicateRule(style, sels);
|
|
break;
|
|
case "7":
|
|
cfs.addAverageRule(operator, style, sels);
|
|
break;
|
|
case "8":
|
|
cfs.add2ScaleRule(minType, minValue, minColor, maxType, maxValue, maxColor, sels);
|
|
break;
|
|
case "9":
|
|
cfs.add3ScaleRule(minType, minValue, minColor, midType, midValue, midColor, maxType, maxValue, maxColor, sels);
|
|
break;
|
|
default:
|
|
var doubleValue1 = parseFloat(value1);
|
|
var doubleValue2 = parseFloat(value2);
|
|
cfs.addCellValueRule(operator, isNaN(doubleValue1) ? value1 : doubleValue1, isNaN(doubleValue2) ? value2 : doubleValue2, style, sels);
|
|
break;
|
|
}
|
|
sheet.repaint();
|
|
}
|
|
|
|
function addDataBarRule() {
|
|
var sheet = spread.getActiveSheet();
|
|
sheet.suspendPaint();
|
|
|
|
var selections = sheet.getSelections();
|
|
if (selections.length > 0) {
|
|
var ranges = [];
|
|
$.each(selections, function (i, v) {
|
|
ranges.push(new spreadNS.Range(v.row, v.col, v.rowCount, v.colCount));
|
|
});
|
|
var cfs = sheet.conditionalFormats;
|
|
var dataBarRule = new ConditionalFormatting.DataBarRule();
|
|
dataBarRule.ranges(ranges);
|
|
dataBarRule.minType(+getDropDownValue("minimumType"));
|
|
dataBarRule.minValue(getNumberValue("minimumValue"));
|
|
dataBarRule.maxType(+getDropDownValue("maximumType"));
|
|
dataBarRule.maxValue(getNumberValue("maximumValue"));
|
|
dataBarRule.gradient(getCheckValue("gradient"));
|
|
dataBarRule.color(getBackgroundColor("gradientColor"));
|
|
dataBarRule.showBorder(getCheckValue("showBorder"));
|
|
dataBarRule.borderColor(getBackgroundColor("barBorderColor"));
|
|
dataBarRule.dataBarDirection(+getDropDownValue("dataBarDirection"));
|
|
dataBarRule.negativeFillColor(getBackgroundColor("negativeFillColor"));
|
|
dataBarRule.useNegativeFillColor(getCheckValue("useNegativeFillColor"));
|
|
dataBarRule.negativeBorderColor(getBackgroundColor("negativeBorderColor"));
|
|
dataBarRule.useNegativeBorderColor(getCheckValue("useNegativeBorderColor"));
|
|
dataBarRule.axisPosition(+getDropDownValue("axisPosition"));
|
|
dataBarRule.axisColor(getBackgroundColor("barAxisColor"));
|
|
dataBarRule.showBarOnly(getCheckValue("showBarOnly"));
|
|
cfs.addRule(dataBarRule);
|
|
}
|
|
|
|
sheet.resumePaint();
|
|
}
|
|
|
|
function addIconSetRule() {
|
|
var sheet = spread.getActiveSheet();
|
|
sheet.suspendPaint();
|
|
|
|
var selections = sheet.getSelections();
|
|
if (selections.length > 0) {
|
|
var ranges = [];
|
|
$.each(selections, function (i, v) {
|
|
ranges.push(new spreadNS.Range(v.row, v.col, v.rowCount, v.colCount));
|
|
});
|
|
var cfs = sheet.conditionalFormats;
|
|
var iconSetRule = new ConditionalFormatting.IconSetRule();
|
|
iconSetRule.ranges(ranges);
|
|
iconSetRule.iconSetType(+getDropDownValue("iconSetType"));
|
|
var $divs = $("#iconCriteriaSetting .settinggroup:visible");
|
|
var iconCriteria = iconSetRule.iconCriteria();
|
|
$.each($divs, function (i, v) {
|
|
var suffix = i + 1,
|
|
isGreaterThanOrEqualTo = +getDropDownValue("iconSetCriteriaOperator" + suffix, this) === 1,
|
|
iconValueType = +getDropDownValue("iconSetCriteriaType" + suffix, this),
|
|
iconValue = $("input.editor", this).val();
|
|
if (iconValueType !== ConditionalFormatting.IconValueType.formula) {
|
|
iconValue = +iconValue;
|
|
}
|
|
iconCriteria[i] = new ConditionalFormatting.IconCriterion(isGreaterThanOrEqualTo, iconValueType, iconValue);
|
|
});
|
|
iconSetRule.reverseIconOrder(getCheckValue("reverseIconOrder"));
|
|
iconSetRule.showIconOnly(getCheckValue("showIconOnly"));
|
|
cfs.addRule(iconSetRule);
|
|
}
|
|
|
|
sheet.resumePaint();
|
|
}
|
|
|
|
function removeConditionFormats() {
|
|
var sheet = spread.getActiveSheet();
|
|
var cfs = sheet.conditionalFormats;
|
|
var row = sheet.getActiveRowIndex(), col = sheet.getActiveColumnIndex();
|
|
var rules = cfs.getRules(row, col);
|
|
sheet.suspendPaint();
|
|
$.each(rules, function (i, v) {
|
|
cfs.removeRule(v);
|
|
});
|
|
sheet.resumePaint();
|
|
}
|
|
|
|
// Cell Type related items
|
|
function attachCellTypeEvents() {
|
|
$("#setCellTypeBtn").click(function () {
|
|
var currentCellType = getDropDownValue("cellTypes");
|
|
applyCellType(currentCellType);
|
|
});
|
|
}
|
|
|
|
function processCellTypeSetting(name, noAction) {
|
|
$("#cellTypeSettingContainer").show();
|
|
switch (name) {
|
|
case "button-celltype":
|
|
$("#celltype-button").show();
|
|
$("#celltype-checkbox").hide();
|
|
$("#celltype-combobox").hide();
|
|
$("#celltype-hyperlink").hide();
|
|
break;
|
|
|
|
case "checkbox-celltype":
|
|
$("#celltype-button").hide();
|
|
$("#celltype-checkbox").show();
|
|
$("#celltype-combobox").hide();
|
|
$("#celltype-hyperlink").hide();
|
|
break;
|
|
|
|
case "combobox-celltype":
|
|
$("#celltype-button").hide();
|
|
$("#celltype-checkbox").hide();
|
|
$("#celltype-combobox").show();
|
|
$("#celltype-hyperlink").hide();
|
|
break;
|
|
|
|
case "hyperlink-celltype":
|
|
$("#celltype-button").hide();
|
|
$("#celltype-checkbox").hide();
|
|
$("#celltype-combobox").hide();
|
|
$("#celltype-hyperlink").show();
|
|
break;
|
|
|
|
case "clear-celltype":
|
|
if (!noAction) {
|
|
clearCellType();
|
|
}
|
|
$("#cellTypeSettingContainer").hide();
|
|
return;
|
|
|
|
default:
|
|
console.log("processCellTypeSetting not process with ", name);
|
|
return;
|
|
}
|
|
}
|
|
|
|
function applyCellType(name) {
|
|
var sheet = spread.getActiveSheet();
|
|
var cellType;
|
|
switch (name) {
|
|
case "button-celltype":
|
|
cellType = new spreadNS.CellTypes.Button();
|
|
cellType.marginTop(getNumberValue("buttonCellTypeMarginTop"));
|
|
cellType.marginRight(getNumberValue("buttonCellTypeMarginRight"));
|
|
cellType.marginBottom(getNumberValue("buttonCellTypeMarginBottom"));
|
|
cellType.marginLeft(getNumberValue("buttonCellTypeMarginLeft"));
|
|
cellType.text(getTextValue("buttonCellTypeText"));
|
|
cellType.buttonBackColor(getBackgroundColor("buttonCellTypeBackColor"));
|
|
break;
|
|
|
|
case "checkbox-celltype":
|
|
cellType = new spreadNS.CellTypes.CheckBox();
|
|
cellType.caption(getTextValue("checkboxCellTypeCaption"));
|
|
cellType.textTrue(getTextValue("checkboxCellTypeTextTrue"));
|
|
cellType.textIndeterminate(getTextValue("checkboxCellTypeTextIndeterminate"));
|
|
cellType.textFalse(getTextValue("checkboxCellTypeTextFalse"));
|
|
cellType.textAlign(getDropDownValue("checkboxCellTypeTextAlign"));
|
|
cellType.isThreeState(getCheckValue("checkboxCellTypeIsThreeState"));
|
|
break;
|
|
|
|
case "combobox-celltype":
|
|
cellType = new spreadNS.CellTypes.ComboBox();
|
|
cellType.editorValueType(getDropDownValue("comboboxCellTypeEditorValueType"));
|
|
var comboboxItemsText = getTextValue("comboboxCellTypeItemsText");
|
|
var comboboxItemsValue = getTextValue("comboboxCellTypeItemsValue");
|
|
var itemsText = comboboxItemsText.split(",");
|
|
var itemsValue = comboboxItemsValue.split(",");
|
|
var itemsLength = itemsText.length > itemsValue.length ? itemsText.length : itemsValue.length;
|
|
var items = [];
|
|
for (var count = 0; count < itemsLength; count++) {
|
|
var t = itemsText.length > count && itemsText[0] !== "" ? itemsText[count] : undefined;
|
|
var v = itemsValue.length > count && itemsValue[0] !== "" ? itemsValue[count] : undefined;
|
|
if (t !== undefined && v !== undefined) {
|
|
items[count] = {text: t, value: v};
|
|
}
|
|
else if (t !== undefined) {
|
|
items[count] = {text: t};
|
|
} else if (v !== undefined) {
|
|
items[count] = {value: v};
|
|
}
|
|
}
|
|
cellType.items(items);
|
|
break;
|
|
|
|
case "hyperlink-celltype":
|
|
cellType = new spreadNS.CellTypes.HyperLink();
|
|
cellType.linkColor(getBackgroundColor("hyperlinkCellTypeLinkColor"));
|
|
cellType.visitedLinkColor(getBackgroundColor("hyperlinkCellTypeVisitedLinkColor"));
|
|
cellType.text(getTextValue("hyperlinkCellTypeText"));
|
|
cellType.linkToolTip(getTextValue("hyperlinkCellTypeLinkToolTip"));
|
|
break;
|
|
}
|
|
sheet.suspendPaint();
|
|
sheet.suspendEvent();
|
|
var sels = sheet.getSelections();
|
|
var rowCount = sheet.getRowCount(),
|
|
columnCount = sheet.getColumnCount();
|
|
|
|
for (var i = 0; i < sels.length; i++) {
|
|
var sel = getActualCellRange(sheet, sels[i], rowCount, columnCount);
|
|
for (var r = 0; r < sel.rowCount; r++) {
|
|
for (var c = 0; c < sel.colCount; c++) {
|
|
sheet.setCellType(sel.row + r, sel.col + c, cellType, spreadNS.SheetArea.viewport);
|
|
}
|
|
}
|
|
}
|
|
sheet.resumeEvent();
|
|
sheet.resumePaint();
|
|
}
|
|
|
|
function clearCellType() {
|
|
var sheet = spread.getActiveSheet();
|
|
var sels = sheet.getSelections();
|
|
var rowCount = sheet.getRowCount(),
|
|
columnCount = sheet.getColumnCount();
|
|
sheet.suspendPaint();
|
|
for (var i = 0; i < sels.length; i++) {
|
|
var sel = getActualCellRange(sheet, sels[i], rowCount, columnCount);
|
|
sheet.clear(sel.row, sel.col, sel.rowCount, sel.colCount, spreadNS.SheetArea.viewport, spreadNS.StorageType.style);
|
|
}
|
|
sheet.resumePaint();
|
|
}
|
|
|
|
function processComparisonOperator(value) {
|
|
if ($("#ComparisonOperator").data("list-ref") === "cellValueOperatorList") {
|
|
// between (6) and not between ( 7) with two values
|
|
if (value === 6 || value === 7) {
|
|
$("#andtext").show();
|
|
$("#value2").show();
|
|
}
|
|
}
|
|
}
|
|
|
|
function updateEnumTypeOfCF(itemType) {
|
|
var $operator = $("#ComparisonOperator"),
|
|
$setButton = $("#setConditionalFormat");
|
|
|
|
$setButton.data("rule-type", itemType);
|
|
|
|
switch ("" + itemType) {
|
|
case "0":
|
|
$("#ruletext").text(conditionalFormatTexts.cells);
|
|
$("#andtext").hide();
|
|
$("#formattext").hide();
|
|
$("#value1").show();
|
|
$("#value1").val("");
|
|
$("#value2").hide();
|
|
$("#colorScale").hide();
|
|
$operator.show();
|
|
$operator.data("list-ref", "cellValueOperatorList");
|
|
setDropDownValueByIndex($operator, 0);
|
|
break;
|
|
case "1":
|
|
$("#ruletext").text(conditionalFormatTexts.cells);
|
|
$("#andtext").hide();
|
|
$("#formattext").hide();
|
|
$("#value1").show();
|
|
$("#value1").val("");
|
|
$("#value2").hide();
|
|
$("#colorScale").hide();
|
|
$operator.show();
|
|
$operator.data("list-ref", "specificTextOperatorList");
|
|
setDropDownValueByIndex($operator, 0);
|
|
break;
|
|
case "2":
|
|
$("#ruletext").text(conditionalFormatTexts.cells);
|
|
$("#andtext").hide();
|
|
$("#formattext").hide();
|
|
$("#value1").hide();
|
|
$("#value2").hide();
|
|
$("#colorScale").hide();
|
|
$operator.show();
|
|
$operator.data("list-ref", "dateOccurringOperatorList");
|
|
setDropDownValueByIndex($operator, 0);
|
|
break;
|
|
case "4":
|
|
$("#ruletext").text(conditionalFormatTexts.rankIn);
|
|
$("#andtext").hide();
|
|
$("#formattext").hide();
|
|
$("#value1").show();
|
|
$("#value1").val("10");
|
|
$("#value2").hide();
|
|
$("#colorScale").hide();
|
|
$operator.show();
|
|
$operator.data("list-ref", "top10OperatorList");
|
|
setDropDownValueByIndex($operator, 0);
|
|
break;
|
|
case "5":
|
|
case "6":
|
|
$("#ruletext").text(conditionalFormatTexts.all);
|
|
$("#andtext").hide();
|
|
$("#formattext").show();
|
|
$("#formattext").text(conditionalFormatTexts.inRange);
|
|
$("#value1").hide();
|
|
$("#value2").hide();
|
|
$("#colorScale").hide();
|
|
$operator.hide();
|
|
break;
|
|
case "7":
|
|
$("#ruletext").text(conditionalFormatTexts.values);
|
|
$("#andtext").hide();
|
|
$("#formattext").show();
|
|
$("#formattext").text(conditionalFormatTexts.average);
|
|
$("#value1").hide();
|
|
$("#value2").hide();
|
|
$("#colorScale").hide();
|
|
$operator.show();
|
|
$operator.data("list-ref", "averageOperatorList");
|
|
setDropDownValueByIndex($operator, 0);
|
|
break;
|
|
case "8":
|
|
$("#ruletext").text(conditionalFormatTexts.allValuesBased);
|
|
$("#andtext").hide();
|
|
$("#formattext").hide();
|
|
$("#value1").hide();
|
|
$("#value2").hide();
|
|
$("#colorScale").show();
|
|
$("#midpoint").hide();
|
|
$("#minType").val("1");
|
|
$("#maxType").val("2");
|
|
$("#minValue").val("");
|
|
$("#maxValue").val("");
|
|
$("#minColor").css("background", "#F8696B");
|
|
$("#maxColor").css("background", "#63BE7B");
|
|
$operator.hide();
|
|
break;
|
|
case "9":
|
|
$("#ruletext").text(conditionalFormatTexts.allValuesBased);
|
|
$("#andtext").hide();
|
|
$("#formattext").hide();
|
|
$("#value1").hide();
|
|
$("#value2").hide();
|
|
$("#colorScale").show();
|
|
$("#midpoint").show();
|
|
$("#minType").val("1");
|
|
$("#midType").val("4");
|
|
$("#maxType").val("2");
|
|
$("#minValue").val("");
|
|
$("#midValue").val("50");
|
|
$("#maxValue").val("");
|
|
$("#minColor").css("background-color", "#F8696B");
|
|
$("#midColor").css("background-color", "#FFEB84");
|
|
$("#maxColor").css("background-color", "#63BE7B");
|
|
$operator.hide();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
function attachConditionalFormatEvents() {
|
|
$("#setConditionalFormat").click(function () {
|
|
var ruleType = $(this).data("rule-type");
|
|
|
|
switch (ruleType) {
|
|
case "databar":
|
|
addDataBarRule();
|
|
break;
|
|
|
|
case "iconset":
|
|
addIconSetRule();
|
|
break;
|
|
|
|
default:
|
|
addCondionalFormaterRule("" + ruleType);
|
|
break;
|
|
}
|
|
});
|
|
}
|
|
|
|
// Data Validation related items
|
|
function processDataValidationSetting(name, title) {
|
|
$("#dataValidationErrorAlertMessage").val("");
|
|
$("#dataValidationErrorAlertTitle").val("");
|
|
$("#dataValidationInputTitle").val("");
|
|
$("#dataValidationInputMessage").val("");
|
|
switch (name) {
|
|
case "anyvalue-validator":
|
|
$("#validatorNumberType").hide();
|
|
$("#validatorListType").hide();
|
|
$("#validatorFormulaListType").hide();
|
|
$("#validatorDateType").hide();
|
|
$("#validatorTextLengthType").hide();
|
|
break;
|
|
|
|
case "number-validator":
|
|
$("#validatorNumberType").show();
|
|
$("#validatorListType").hide();
|
|
$("#validatorFormulaListType").hide();
|
|
$("#validatorDateType").hide();
|
|
$("#validatorTextLengthType").hide();
|
|
processNumberValidatorComparisonOperatorSetting(getDropDownValue("numberValidatorComparisonOperator"));
|
|
|
|
setTextValue("numberMinimum", 0);
|
|
setTextValue("numberMaximum", 0);
|
|
setTextValue("numberValue", 0);
|
|
break;
|
|
|
|
case "list-validator":
|
|
$("#validatorNumberType").hide();
|
|
$("#validatorListType").show();
|
|
$("#validatorFormulaListType").hide();
|
|
$("#validatorDateType").hide();
|
|
$("#validatorTextLengthType").hide();
|
|
|
|
setTextValue("listSource", "1,2,3");
|
|
break;
|
|
|
|
case "formulalist-validator":
|
|
$("#validatorNumberType").hide();
|
|
$("#validatorListType").hide();
|
|
$("#validatorFormulaListType").show();
|
|
$("#validatorDateType").hide();
|
|
$("#validatorTextLengthType").hide();
|
|
|
|
setTextValue("formulaListFormula", "E5:I5");
|
|
break;
|
|
|
|
case "date-validator":
|
|
$("#validatorNumberType").hide();
|
|
$("#validatorListType").hide();
|
|
$("#validatorFormulaListType").hide();
|
|
$("#validatorDateType").show();
|
|
$("#validatorTextLengthType").hide();
|
|
processDateValidatorComparisonOperatorSetting(getDropDownValue("dateValidatorComparisonOperator"));
|
|
|
|
var date = getCurrentTime();
|
|
setTextValue("startDate", date);
|
|
setTextValue("endDate", date);
|
|
setTextValue("dateValue", date);
|
|
break;
|
|
|
|
case "textlength-validator":
|
|
$("#validatorNumberType").hide();
|
|
$("#validatorListType").hide();
|
|
$("#validatorFormulaListType").hide();
|
|
$("#validatorDateType").hide();
|
|
$("#validatorTextLengthType").show();
|
|
processTextLengthValidatorComparisonOperatorSetting(getDropDownValue("textLengthValidatorComparisonOperator"));
|
|
|
|
setNumberValue("textLengthMinimum", 0);
|
|
setNumberValue("textLengthMaximum", 0);
|
|
setNumberValue("textLengthValue", 0);
|
|
break;
|
|
|
|
case "formula-validator":
|
|
$("#validatorNumberType").hide();
|
|
$("#validatorListType").hide();
|
|
$("#validatorFormulaListType").show();
|
|
$("#validatorDateType").hide();
|
|
$("#validatorTextLengthType").hide();
|
|
|
|
setTextValue("formulaListFormula", "=ISERROR(FIND(\" \",A1))");
|
|
break;
|
|
|
|
default:
|
|
console.log("processDataValidationSetting not process with ", name, title);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function processNumberValidatorComparisonOperatorSetting(value) {
|
|
if (value === ComparisonOperators.between || value === ComparisonOperators.notBetween) {
|
|
$("#numberValue").hide();
|
|
$("#numberBetweenOperator").show();
|
|
}
|
|
else {
|
|
$("#numberBetweenOperator").hide();
|
|
$("#numberValue").show();
|
|
}
|
|
}
|
|
|
|
function processDateValidatorComparisonOperatorSetting(value) {
|
|
if (value === ComparisonOperators.between || value === ComparisonOperators.notBetween) {
|
|
$("#dateValue").hide();
|
|
$("#dateBetweenOperator").show();
|
|
}
|
|
else {
|
|
$("#dateBetweenOperator").hide();
|
|
$("#dateValue").show();
|
|
}
|
|
}
|
|
|
|
function processTextLengthValidatorComparisonOperatorSetting(value) {
|
|
if (value === ComparisonOperators.between || value === ComparisonOperators.notBetween) {
|
|
$("#textLengthValue").hide();
|
|
$("#textLengthBetweenOperator").show();
|
|
}
|
|
else {
|
|
$("#textLengthBetweenOperator").hide();
|
|
$("#textLengthValue").show();
|
|
}
|
|
}
|
|
|
|
function setDataValidator() {
|
|
var validatorType = getDropDownValue("validatorType");
|
|
var currentDataValidator = null;
|
|
var dropDownValue;
|
|
|
|
var formulaListFormula = getTextValue("formulaListFormula");
|
|
|
|
switch (validatorType) {
|
|
case "anyvalue-validator":
|
|
currentDataValidator = new spreadNS.DataValidation.DefaultDataValidator();
|
|
break;
|
|
case "number-validator":
|
|
var numberMinimum = getTextValue("numberMinimum");
|
|
var numberMaximum = getTextValue("numberMaximum");
|
|
var numberValue = getTextValue("numberValue");
|
|
var isInteger = getCheckValue("isInteger");
|
|
dropDownValue = getDropDownValue("numberValidatorComparisonOperator");
|
|
if (dropDownValue !== ComparisonOperators.between && dropDownValue !== ComparisonOperators.notBetween) {
|
|
numberMinimum = numberValue;
|
|
}
|
|
if (isInteger) {
|
|
currentDataValidator = DataValidation.createNumberValidator(dropDownValue,
|
|
isNaN(numberMinimum) ? numberMinimum : parseInt(numberMinimum, 10),
|
|
isNaN(numberMaximum) ? numberMaximum : parseInt(numberMaximum, 10),
|
|
true);
|
|
} else {
|
|
currentDataValidator = DataValidation.createNumberValidator(dropDownValue,
|
|
isNaN(numberMinimum) ? numberMinimum : parseFloat(numberMinimum, 10),
|
|
isNaN(numberMaximum) ? numberMaximum : parseFloat(numberMaximum, 10),
|
|
false);
|
|
}
|
|
break;
|
|
case "list-validator":
|
|
var listSource = getTextValue("listSource");
|
|
currentDataValidator = DataValidation.createListValidator(listSource);
|
|
break;
|
|
case "formulalist-validator":
|
|
currentDataValidator = DataValidation.createFormulaListValidator(formulaListFormula);
|
|
break;
|
|
case "date-validator":
|
|
var startDate = getTextValue("startDate");
|
|
var endDate = getTextValue("endDate");
|
|
var dateValue = getTextValue("dateValue");
|
|
var isTime = getCheckValue("isTime");
|
|
dropDownValue = getDropDownValue("dateValidatorComparisonOperator");
|
|
if (dropDownValue !== ComparisonOperators.between && dropDownValue !== ComparisonOperators.notBetween) {
|
|
startDate = dateValue;
|
|
}
|
|
if (isTime) {
|
|
currentDataValidator = DataValidation.createDateValidator(dropDownValue,
|
|
isNaN(startDate) ? startDate : new Date(startDate),
|
|
isNaN(endDate) ? endDate : new Date(endDate),
|
|
true);
|
|
} else {
|
|
currentDataValidator = DataValidation.createDateValidator(dropDownValue,
|
|
isNaN(startDate) ? startDate : new Date(startDate),
|
|
isNaN(endDate) ? endDate : new Date(endDate),
|
|
false);
|
|
}
|
|
break;
|
|
case "textlength-validator":
|
|
var textLengthMinimum = getNumberValue("textLengthMinimum");
|
|
var textLengthMaximum = getNumberValue("textLengthMaximum");
|
|
var textLengthValue = getNumberValue("textLengthValue");
|
|
dropDownValue = getDropDownValue("textLengthValidatorComparisonOperator");
|
|
if (dropDownValue !== ComparisonOperators.between && dropDownValue !== ComparisonOperators.notBetween) {
|
|
textLengthMinimum = textLengthValue;
|
|
}
|
|
currentDataValidator = DataValidation.createTextLengthValidator(dropDownValue, textLengthMinimum, textLengthMaximum);
|
|
break;
|
|
case "formula-validator":
|
|
currentDataValidator = DataValidation.createFormulaValidator(formulaListFormula);
|
|
break;
|
|
}
|
|
|
|
if (currentDataValidator) {
|
|
currentDataValidator.errorMessage($("#dataValidationErrorAlertMessage").val());
|
|
currentDataValidator.errorStyle(getDropDownValue("errorAlert"));
|
|
currentDataValidator.errorTitle($("#dataValidationErrorAlertTitle").val());
|
|
currentDataValidator.showErrorMessage(getCheckValue("showErrorAlert"));
|
|
currentDataValidator.ignoreBlank(getCheckValue("ignoreBlank"));
|
|
var showInputMessage = getCheckValue("showInputMessage");
|
|
if (showInputMessage) {
|
|
currentDataValidator.inputTitle($("#dataValidationInputTitle").val());
|
|
currentDataValidator.inputMessage($("#dataValidationInputMessage").val());
|
|
}
|
|
|
|
setDataValidatorInRange(currentDataValidator);
|
|
}
|
|
}
|
|
|
|
function setDataValidatorInRange(dataValidator) {
|
|
var sheet = spread.getActiveSheet();
|
|
sheet.suspendPaint();
|
|
var sels = sheet.getSelections();
|
|
var rowCount = sheet.getRowCount(),
|
|
columnCount = sheet.getColumnCount();
|
|
|
|
for (var i = 0; i < sels.length; i++) {
|
|
var sel = getActualCellRange(sheet, sels[i], rowCount, columnCount);
|
|
sheet.setDataValidator(sel.row, sel.col, sel.rowCount, sel.colCount, dataValidator);
|
|
}
|
|
sheet.resumePaint();
|
|
}
|
|
|
|
function getCurrentTime() {
|
|
var date = new Date();
|
|
var year = date.getFullYear();
|
|
var month = date.getMonth() + 1;
|
|
var day = date.getDate();
|
|
|
|
var strDate = year + "-";
|
|
if (month < 10)
|
|
strDate += "0";
|
|
strDate += month + "-";
|
|
if (day < 10)
|
|
strDate += "0";
|
|
strDate += day;
|
|
|
|
return strDate;
|
|
}
|
|
|
|
function attachDataValidationEvents() {
|
|
$("#setDataValidator").click(function () {
|
|
var currentValidatorType = getDropDownValue("validatorType");
|
|
setDataValidator(currentValidatorType);
|
|
});
|
|
$("#clearDataValidatorSettings").click(function () {
|
|
// reset to default
|
|
var validationTypeItem = setDropDownValueByIndex($("#validatorType"), 0);
|
|
processDataValidationSetting(validationTypeItem.value);
|
|
setDropDownValue("errorAlert", 0);
|
|
setCheckValue("showInputMessage", true);
|
|
setCheckValue("showErrorAlert", true);
|
|
});
|
|
}
|
|
// Data Validation related items (end)
|
|
|
|
function updateIconCriteriaItems(iconStyleType) {
|
|
var IconSetType = ConditionalFormatting.IconSetType,
|
|
items = $("#iconCriteriaSetting .settinggroup"),
|
|
values;
|
|
|
|
if (iconStyleType <= IconSetType.threeSymbolsUncircled) {
|
|
values = [33, 67];
|
|
} else if (iconStyleType <= IconSetType.fourTrafficLights) {
|
|
values = [25, 50, 75];
|
|
} else {
|
|
values = [20, 40, 60, 80];
|
|
}
|
|
|
|
items.each(function (index) {
|
|
var value = values[index], $item = $(this), suffix = index + 1;
|
|
|
|
if (value) {
|
|
$item.show();
|
|
setDropDownValue("iconSetCriteriaOperator" + suffix, 1, this);
|
|
setDropDownValue("iconSetCriteriaType" + suffix, 4, this);
|
|
$("input.editor", this).val(value);
|
|
} else {
|
|
$item.hide();
|
|
}
|
|
});
|
|
}
|
|
|
|
function processMinItems(type, name) {
|
|
var value = "";
|
|
switch (type) {
|
|
case 0: // Number
|
|
case 3: // Percent
|
|
value = "0";
|
|
break;
|
|
case 4: // Percentile
|
|
value = "10";
|
|
break;
|
|
default:
|
|
value = "";
|
|
break;
|
|
}
|
|
setTextValue(name, value);
|
|
}
|
|
|
|
function processMidItems(type, name) {
|
|
var value = "";
|
|
switch (type) {
|
|
case 0: // Number
|
|
value = "0";
|
|
break;
|
|
case 3: // Percent
|
|
case 4: // Percentile
|
|
value = "50";
|
|
break;
|
|
default:
|
|
value = "";
|
|
break;
|
|
}
|
|
setTextValue(name, value);
|
|
}
|
|
|
|
function processMaxItems(type, name) {
|
|
var value = "";
|
|
switch (type) {
|
|
case 0: // Number
|
|
value = "0";
|
|
break;
|
|
case 3: // Percent
|
|
value = "100";
|
|
break;
|
|
case 4: // Percentile
|
|
value = "90";
|
|
break;
|
|
default:
|
|
value = "";
|
|
break;
|
|
}
|
|
setTextValue(name, value);
|
|
}
|
|
|
|
// Sparkline related items
|
|
function processAddSparklineEx() {
|
|
var sheet = spread.getActiveSheet();
|
|
var selection = sheet.getSelections()[0];
|
|
if (!selection) {
|
|
return;
|
|
}
|
|
|
|
var id = this.id,
|
|
sparklineType = id.toUpperCase();
|
|
var $typeInfo = $(".menu-item>div.text[data-value='" + sparklineType + "']");
|
|
if ($typeInfo.length > 0) {
|
|
setDropDownValue("sparklineExType", sparklineType);
|
|
processSparklineSetting(sparklineType);
|
|
}
|
|
else {
|
|
processSparklineSetting(getDropDownValue("sparklineExType"));
|
|
}
|
|
setTextValue("txtLineDataRange", parseRangeToExpString(selection));
|
|
setTextValue("txtLineLocationRange", "");
|
|
|
|
var SPARKLINE_DIALOG_WIDTH = 360; // sprakline dialog width
|
|
showModal(uiResource.sparklineDialog.title, SPARKLINE_DIALOG_WIDTH, $("#sparklineexdialog").children(), addSparklineEvent);
|
|
}
|
|
|
|
function processAddChartEx() {
|
|
var sheet = spread.getActiveSheet();
|
|
var selection = sheet.getSelections()[0];
|
|
if(!selection || (selection.rowCount === 1 && selection.colCount === 1)) {
|
|
return;
|
|
}
|
|
var formula = GC.Spread.Sheets.CalcEngine.rangeToFormula(selection);
|
|
var chartExType = this.id;
|
|
var chartType = setChartType(chartExType);
|
|
var chartCount = sheet.charts.all().length || 0;
|
|
var chart = null;
|
|
if(formula){
|
|
if(chartType > 0){
|
|
try{
|
|
chart = sheet.charts.add( ('Chart' + chartCount), chartType, 0, 100, 400, 300, formula);
|
|
}catch (e){
|
|
alert(e.message);
|
|
return;
|
|
}
|
|
|
|
}else{
|
|
chart = createComboChart(formula,('Chart' + chartCount),GC.Spread.Sheets.Charts.ChartType.columnClustered,GC.Spread.Sheets.Charts.ChartType.line);
|
|
}
|
|
var chartsArray= sheet.charts.all();
|
|
for(var i = 0; i < chartsArray.length; i++){
|
|
var chartItem = chartsArray[i];
|
|
chartItem.isSelected(false);
|
|
}
|
|
chart.isSelected(true);
|
|
addChartEvent(chart);
|
|
}
|
|
|
|
}
|
|
function unParseFormula(expr, row, col) {
|
|
if (!expr) {
|
|
return "";
|
|
}
|
|
var sheet = spread.getActiveSheet();
|
|
if (!sheet) {
|
|
return null;
|
|
}
|
|
var calcService = sheet.getCalcService();
|
|
return calcService.unparse(null, expr, row, col);
|
|
}
|
|
|
|
function processSparklineSetting(name, title) {
|
|
//Show only when data range is illegal.
|
|
$("#dataRangeError").hide();
|
|
$("#singleDataRangeError").hide();
|
|
//Show only when location range is illegal.
|
|
$("#locationRangeError").hide();
|
|
|
|
switch (name) {
|
|
case "LINESPARKLINE":
|
|
case "COLUMNSPARKLINE":
|
|
case "WINLOSSSPARKLINE":
|
|
case "PIESPARKLINE":
|
|
case "AREASPARKLINE":
|
|
case "SCATTERSPARKLINE":
|
|
case "SPREADSPARKLINE":
|
|
case "STACKEDSPARKLINE":
|
|
case "BOXPLOTSPARKLINE":
|
|
case "CASCADESPARKLINE":
|
|
case "PARETOSPARKLINE":
|
|
$("#lineContainer").show();
|
|
$("#bulletContainer").hide();
|
|
$("#monthContainer").hide();
|
|
$("#hbarContainer").hide();
|
|
$("#yearContainer").hide();
|
|
$("#varianceContainer").hide();
|
|
break;
|
|
|
|
case "BULLETSPARKLINE":
|
|
$("#lineContainer").hide();
|
|
$("#monthContainer").hide();
|
|
$("#bulletContainer").show();
|
|
$("#hbarContainer").hide();
|
|
$("#yearContainer").hide();
|
|
$("#varianceContainer").hide();
|
|
|
|
setTextValue("txtBulletMeasure", "");
|
|
setTextValue("txtBulletTarget", "");
|
|
setTextValue("txtBulletMaxi", "");
|
|
setTextValue("txtBulletGood", "");
|
|
setTextValue("txtBulletBad", "");
|
|
setTextValue("txtBulletForecast", "");
|
|
setTextValue("txtBulletTickunit", "");
|
|
setCheckValue("checkboxBulletVertial", false);
|
|
break;
|
|
|
|
case "HBARSPARKLINE":
|
|
case "VBARSPARKLINE":
|
|
$("#lineContainer").hide();
|
|
$("#bulletContainer").hide();
|
|
$("#monthContainer").hide();
|
|
$("#hbarContainer").show();
|
|
$("#yearContainer").hide();
|
|
$("#varianceContainer").hide();
|
|
|
|
setTextValue("txtHbarValue", "");
|
|
break;
|
|
|
|
case "VARISPARKLINE":
|
|
$("#lineContainer").hide();
|
|
$("#bulletContainer").hide();
|
|
$("#hbarContainer").hide();
|
|
$("#monthContainer").hide();
|
|
$("#yearContainer").hide();
|
|
$("#varianceContainer").show();
|
|
|
|
setTextValue("txtVariance", "");
|
|
setTextValue("txtVarianceReference", "");
|
|
setTextValue("txtVarianceMini", "");
|
|
setTextValue("txtVarianceMaxi", "");
|
|
setTextValue("txtVarianceMark", "");
|
|
setTextValue("txtVarianceTickUnit", "");
|
|
setCheckValue("checkboxVarianceLegend", false);
|
|
setCheckValue("checkboxVarianceVertical", false);
|
|
break;
|
|
|
|
case "MONTHSPARKLINE":
|
|
$("#lineContainer").show();
|
|
$("#bulletContainer").hide();
|
|
$("#hbarContainer").hide();
|
|
$("#varianceContainer").hide();
|
|
$("#yearContainer").show();
|
|
$("#monthContainer").show();
|
|
setTextValue("txtYearValue", "");
|
|
setTextValue("txtMonthValue", "");
|
|
setTextValue("txtEmptyColorValue", "");
|
|
setTextValue("txtStartColorValue", "");
|
|
setTextValue("txtMiddleColorValue", "");
|
|
setTextValue("txtEndColorValue", "");
|
|
setTextValue("txtColorRangeValue", "");
|
|
break;
|
|
|
|
case "YEARSPARKLINE":
|
|
$("#lineContainer").show();
|
|
$("#bulletContainer").hide();
|
|
$("#hbarContainer").hide();
|
|
$("#varianceContainer").hide();
|
|
$("#monthContainer").hide();
|
|
$("#yearContainer").show();
|
|
setTextValue("txtYearValue", "");
|
|
setTextValue("txtEmptyColorValue", "");
|
|
setTextValue("txtStartColorValue", "");
|
|
setTextValue("txtMiddleColorValue", "");
|
|
setTextValue("txtEndColorValue", "");
|
|
setTextValue("txtColorRangeValue", "");
|
|
break;
|
|
|
|
default:
|
|
console.log("processSparklineSetting not process with ", name, title);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function addSparklineEvent() {
|
|
var sheet = spread.getActiveSheet(),
|
|
selection = sheet.getSelections()[0],
|
|
isValid = true;
|
|
|
|
var sparklineExType = getDropDownValue("sparklineExType");
|
|
if (selection) {
|
|
var range = getActualRange(selection, sheet.getRowCount(), sheet.getColumnCount());
|
|
var formulaStr = '', row = range.row, col = range.col, direction = 0;
|
|
switch (sparklineExType) {
|
|
case "BULLETSPARKLINE":
|
|
var measure = getTextValue("txtBulletMeasure"),
|
|
target = getTextValue("txtBulletTarget"),
|
|
maxi = getTextValue("txtBulletMaxi"),
|
|
good = getTextValue("txtBulletGood"),
|
|
bad = getTextValue("txtBulletBad"),
|
|
forecast = getTextValue("txtBulletForecast"),
|
|
tickunit = getTextValue("txtBulletTickunit"),
|
|
colorScheme = getBackgroundColor("colorBulletColorScheme"),
|
|
vertical = getCheckValue("checkboxBulletVertial");
|
|
formulaStr = '=' + sparklineExType + '(' + measure + ',' + target + ',' + maxi + ',' + good + ',' + bad + ',' + forecast + ',' + tickunit + ',' + '"' + colorScheme + '"' + ',' + vertical + ')';
|
|
sheet.setFormula(row, col, formulaStr);
|
|
break;
|
|
case "HBARSPARKLINE":
|
|
var value = getTextValue("txtHbarValue"),
|
|
colorScheme = getBackgroundColor("colorHbarColorScheme");
|
|
formulaStr = '=' + sparklineExType + '(' + value + ',' + '"' + colorScheme + '"' + ')';
|
|
sheet.setFormula(row, col, formulaStr);
|
|
break;
|
|
case "VBARSPARKLINE":
|
|
var value = getTextValue("txtHbarValue"),
|
|
colorScheme = getBackgroundColor("colorHbarColorScheme");
|
|
formulaStr = '=' + sparklineExType + '(' + value + ',' + '"' + colorScheme + '"' + ')';
|
|
sheet.setFormula(row, col, formulaStr);
|
|
break;
|
|
case "VARISPARKLINE":
|
|
var variance = getTextValue("txtVariance"),
|
|
reference = getTextValue("txtVarianceReference"),
|
|
mini = getTextValue("txtVarianceMini"),
|
|
maxi = getTextValue("txtVarianceMaxi"),
|
|
mark = getTextValue("txtVarianceMark"),
|
|
tickunit = getTextValue("txtVarianceTickUnit"),
|
|
colorPositive = getBackgroundColor("colorVariancePositive"),
|
|
colorNegative = getBackgroundColor("colorVarianceNegative"),
|
|
legend = getCheckValue("checkboxVarianceLegend"),
|
|
vertical = getCheckValue("checkboxVarianceVertical");
|
|
formulaStr = '=' + sparklineExType + '(' + variance + ',' + reference + ',' + mini + ',' + maxi + ',' + mark + ',' + tickunit + ',' + legend + ',' + '"' + colorPositive + '"' + ',' + '"' + colorNegative + '"' + ',' + vertical + ')';
|
|
sheet.setFormula(row, col, formulaStr);
|
|
break;
|
|
case "CASCADESPARKLINE":
|
|
case "PARETOSPARKLINE":
|
|
var dataRangeStr = getTextValue("txtLineDataRange"),
|
|
locationRangeStr = getTextValue("txtLineLocationRange"),
|
|
dataRangeObj = parseStringToExternalRanges(dataRangeStr, sheet),
|
|
locationRangeObj = parseStringToExternalRanges(locationRangeStr, sheet),
|
|
vertical = false,
|
|
dataRange, locationRange;
|
|
if (dataRangeObj && dataRangeObj.length > 0 && dataRangeObj[0].range) {
|
|
dataRange = dataRangeObj[0].range;
|
|
}
|
|
if (locationRangeObj && locationRangeObj.length > 0 && locationRangeObj[0].range) {
|
|
locationRange = locationRangeObj[0].range;
|
|
}
|
|
if (locationRange && locationRange.rowCount < locationRange.colCount) {
|
|
vertical = true;
|
|
}
|
|
if (!dataRange) {
|
|
isValid = false;
|
|
$("#dataRangeError").show();
|
|
}
|
|
if (!locationRange) {
|
|
isValid = false;
|
|
$("#locationRangeError").show();
|
|
}
|
|
if (isValid) {
|
|
var pointCount = dataRange.rowCount * dataRange.colCount,
|
|
i = 1;
|
|
for (var r = locationRange.row; r < locationRange.row + locationRange.rowCount; r++) {
|
|
for (var c = locationRange.col; c < locationRange.col + locationRange.colCount; c++) {
|
|
if (i <= pointCount) {
|
|
formulaStr = '=' + sparklineExType + '(' + dataRangeStr + ',' + i + ',,,,,,' + vertical + ')';
|
|
sheet.setFormula(r, c, formulaStr);
|
|
sheet.setActiveCell(r, c);
|
|
i++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case "MONTHSPARKLINE":
|
|
var year = getTextValue("txtYearValue"),
|
|
month = getTextValue("txtMonthValue"),
|
|
emptyColor = getBackgroundColor("emptyColorValue"),
|
|
startColor = getBackgroundColor("startColorValue"),
|
|
middleColor = getBackgroundColor("middleColorValue"),
|
|
endColor = getBackgroundColor("endColorValue"),
|
|
dataRangeStr = getTextValue("txtLineDataRange"),
|
|
locationRangeStr = getTextValue("txtLineLocationRange"),
|
|
colorRangeStr = getTextValue("txtColorRangeValue"),
|
|
dataRangeObj = parseStringToExternalRanges(dataRangeStr, sheet),
|
|
locationRangeObj = parseStringToExternalRanges(locationRangeStr, sheet),
|
|
dataRange, locationRange;
|
|
if (dataRangeObj && dataRangeObj.length > 0 && dataRangeObj[0].range) {
|
|
dataRange = dataRangeObj[0].range;
|
|
}
|
|
if (locationRangeObj && locationRangeObj.length > 0 && locationRangeObj[0].range) {
|
|
locationRange = locationRangeObj[0].range;
|
|
}
|
|
if (!dataRange) {
|
|
isValid = false;
|
|
$("#dataRangeError").show();
|
|
}
|
|
if (!locationRange) {
|
|
isValid = false;
|
|
$("#locationRangeError").show();
|
|
}
|
|
var row = locationRange.row, col = locationRange.col;
|
|
if (isValid) {
|
|
if (!colorRangeStr) {
|
|
formulaStr = "=" + sparklineExType + "(" + year + "," + month + "," + dataRangeStr + "," + parseSparklineColorOptions(emptyColor) + "," + parseSparklineColorOptions(startColor) + "," + parseSparklineColorOptions(middleColor) + "," + parseSparklineColorOptions(endColor) + ")";
|
|
} else {
|
|
formulaStr = "=" + sparklineExType + "(" + year + "," + month + "," + dataRangeStr + "," + colorRangeStr + ")";
|
|
}
|
|
sheet.setFormula(row, col, formulaStr);
|
|
}
|
|
break;
|
|
case "YEARSPARKLINE":
|
|
var year = getTextValue("txtYearValue"),
|
|
emptyColor = getBackgroundColor("emptyColorValue"),
|
|
startColor = getBackgroundColor("startColorValue"),
|
|
middleColor = getBackgroundColor("middleColorValue"),
|
|
endColor = getBackgroundColor("endColorValue"),
|
|
dataRangeStr = getTextValue("txtLineDataRange"),
|
|
locationRangeStr = getTextValue("txtLineLocationRange"),
|
|
colorRangeStr = getTextValue("txtColorRangeValue"),
|
|
dataRangeObj = parseStringToExternalRanges(dataRangeStr, sheet),
|
|
locationRangeObj = parseStringToExternalRanges(locationRangeStr, sheet),
|
|
dataRange, locationRange;
|
|
if (dataRangeObj && dataRangeObj.length > 0 && dataRangeObj[0].range) {
|
|
dataRange = dataRangeObj[0].range;
|
|
}
|
|
if (locationRangeObj && locationRangeObj.length > 0 && locationRangeObj[0].range) {
|
|
locationRange = locationRangeObj[0].range;
|
|
}
|
|
if (!dataRange) {
|
|
isValid = false;
|
|
$("#dataRangeError").show();
|
|
}
|
|
if (!locationRange) {
|
|
isValid = false;
|
|
$("#locationRangeError").show();
|
|
}
|
|
var row = locationRange.row, col = locationRange.col;
|
|
if (isValid) {
|
|
if (!colorRangeStr) {
|
|
formulaStr = "=" + sparklineExType + "(" + year + "," + dataRangeStr + "," + parseSparklineColorOptions(emptyColor) + "," + parseSparklineColorOptions(startColor) + "," + parseSparklineColorOptions(middleColor) + "," + parseSparklineColorOptions(endColor) + ")";
|
|
} else {
|
|
formulaStr = "=" + sparklineExType + "(" + year + "," + dataRangeStr + "," + colorRangeStr + ")";
|
|
}
|
|
sheet.setFormula(row, col, formulaStr);
|
|
}
|
|
break;
|
|
default:
|
|
var dataRangeStr = getTextValue("txtLineDataRange"),
|
|
locationRangeStr = getTextValue("txtLineLocationRange"),
|
|
dataRangeObj = parseStringToExternalRanges(dataRangeStr, sheet),
|
|
locationRangeObj = parseStringToExternalRanges(locationRangeStr, sheet),
|
|
dataRange, locationRange;
|
|
if (dataRangeObj && dataRangeObj.length > 0 && dataRangeObj[0].range) {
|
|
dataRange = dataRangeObj[0].range;
|
|
}
|
|
if (locationRangeObj && locationRangeObj.length > 0 && locationRangeObj[0].range) {
|
|
locationRange = locationRangeObj[0].range;
|
|
}
|
|
|
|
if (!dataRange) {
|
|
isValid = false;
|
|
$("#dataRangeError").show();
|
|
}
|
|
if (!locationRange) {
|
|
isValid = false;
|
|
$("#locationRangeError").show();
|
|
}
|
|
if (isValid) {
|
|
if (["LINESPARKLINE", "COLUMNSPARKLINE", "WINLOSSSPARKLINE"].indexOf(sparklineExType) >= 0) {
|
|
if (dataRange.rowCount === 1) {
|
|
direction = 1;
|
|
}
|
|
else if (dataRange.colCount === 1) {
|
|
direction = 0;
|
|
}
|
|
else {
|
|
$("#singleDataRangeError").show();
|
|
isValid = false;
|
|
}
|
|
if (isValid) {
|
|
formulaStr = '=' + sparklineExType + '(' + dataRangeStr + ',' + direction + ')';
|
|
}
|
|
}
|
|
else {
|
|
formulaStr = '=' + sparklineExType + '(' + dataRangeStr + ')';
|
|
}
|
|
if (isValid) {
|
|
row = locationRange.row;
|
|
col = locationRange.col;
|
|
sheet.setFormula(row, col, formulaStr);
|
|
sheet.setActiveCell(row, col);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
if (!isValid) {
|
|
return {canceled: true};
|
|
}
|
|
else {
|
|
if (showSparklineSetting(sheet.getActiveRowIndex(), sheet.getActiveColumnIndex())) {
|
|
updateFormulaBar();
|
|
setActiveTab("sparklineEx");
|
|
return;
|
|
}
|
|
console.log("Added sparkline", sparklineExType);
|
|
}
|
|
}
|
|
|
|
function addChartEvent(chart) {
|
|
var sheet = spread.getActiveSheet();
|
|
showChartPanel(chart);
|
|
}
|
|
|
|
function setChartType(chartExType) {
|
|
var chartType;
|
|
switch (chartExType) {
|
|
case "columnClusteredChart":
|
|
chartType = GC.Spread.Sheets.Charts.ChartType.columnClustered;
|
|
break;
|
|
case "columnStackedChart":
|
|
chartType = GC.Spread.Sheets.Charts.ChartType.columnStacked;
|
|
break;
|
|
case "columnStacked100Chart":
|
|
chartType = GC.Spread.Sheets.Charts.ChartType.columnStacked100;
|
|
break;
|
|
case "lineChart":
|
|
chartType = GC.Spread.Sheets.Charts.ChartType.line;
|
|
break;
|
|
case "lineStackedChart":
|
|
chartType = GC.Spread.Sheets.Charts.ChartType.lineStacked;
|
|
break;
|
|
case "lineStacked100Chart":
|
|
chartType = GC.Spread.Sheets.Charts.ChartType.lineStacked100;
|
|
break;
|
|
case "lineMarkersChart":
|
|
chartType = GC.Spread.Sheets.Charts.ChartType.lineMarkers;
|
|
break;
|
|
case "lineMarkersStackedChart":
|
|
chartType = GC.Spread.Sheets.Charts.ChartType.lineMarkersStacked;
|
|
break;
|
|
case "lineMarkersStacked100Chart":
|
|
chartType = GC.Spread.Sheets.Charts.ChartType.lineMarkersStacked100;
|
|
break;
|
|
case "pieChart":
|
|
chartType = GC.Spread.Sheets.Charts.ChartType.pie;
|
|
break;
|
|
case "doughnutChart":
|
|
chartType = GC.Spread.Sheets.Charts.ChartType.doughnut;
|
|
break;
|
|
case "barClusteredChart":
|
|
chartType = GC.Spread.Sheets.Charts.ChartType.barClustered;
|
|
break;
|
|
case "barStackedChart":
|
|
chartType = GC.Spread.Sheets.Charts.ChartType.barStacked;
|
|
break;
|
|
case "barStacked100Chart":
|
|
chartType = GC.Spread.Sheets.Charts.ChartType.barStacked100;
|
|
break;
|
|
case "areaChart":
|
|
chartType = GC.Spread.Sheets.Charts.ChartType.area;
|
|
break;
|
|
case "areaStackedChart":
|
|
chartType = GC.Spread.Sheets.Charts.ChartType.areaStacked;
|
|
break;
|
|
case "areaStacked100Chart":
|
|
chartType = GC.Spread.Sheets.Charts.ChartType.areaStacked100;
|
|
break;
|
|
case "xyScatterChart":
|
|
chartType = GC.Spread.Sheets.Charts.ChartType.xyScatter;
|
|
break;
|
|
case "xyScatterSmoothChart":
|
|
chartType = GC.Spread.Sheets.Charts.ChartType.xyScatterSmooth;
|
|
break;
|
|
case "xyScatterSmoothNoMarkersChart":
|
|
chartType = GC.Spread.Sheets.Charts.ChartType.xyScatterSmoothNoMarkers;
|
|
break;
|
|
case "xyScatterLinesChart":
|
|
chartType = GC.Spread.Sheets.Charts.ChartType.xyScatterLines;
|
|
break;
|
|
case "xyScatterLinesNoMarkersChart":
|
|
chartType = GC.Spread.Sheets.Charts.ChartType.xyScatterLinesNoMarkers;
|
|
break;
|
|
case "bubbleChart":
|
|
chartType = GC.Spread.Sheets.Charts.ChartType.bubble;
|
|
break;
|
|
case "stockHLCChart":
|
|
chartType = GC.Spread.Sheets.Charts.ChartType.stockHLC;
|
|
break;
|
|
case "stockOHLCChart":
|
|
chartType = GC.Spread.Sheets.Charts.ChartType.stockOHLC;
|
|
break;
|
|
case "stockVHLCChart":
|
|
chartType = GC.Spread.Sheets.Charts.ChartType.stockVHLC;
|
|
break;
|
|
case "stockVOHLCChart":
|
|
chartType = GC.Spread.Sheets.Charts.ChartType.stockVOHLC;
|
|
break;
|
|
case "comboChart":
|
|
chartType = GC.Spread.Sheets.Charts.ChartType.combo;
|
|
break;
|
|
}
|
|
|
|
return chartType;
|
|
}
|
|
|
|
function parseSparklineColorOptions(str) {
|
|
return '"' + str + '"';
|
|
}
|
|
|
|
function parseRangeToExpString(range) {
|
|
return SheetsCalc.rangeToFormula(range, 0, 0, SheetsCalc.RangeReferenceRelative.allRelative);
|
|
}
|
|
|
|
function parseStringToExternalRanges(expString, sheet) {
|
|
var results = [];
|
|
var exps = expString.split(",");
|
|
try {
|
|
for (var i = 0; i < exps.length; i++) {
|
|
var range = SheetsCalc.formulaToRange(sheet, exps[i]);
|
|
results.push({"range": range});
|
|
}
|
|
}
|
|
catch (e) {
|
|
return null;
|
|
}
|
|
return results;
|
|
}
|
|
|
|
function parseFormulaSparkline(row, col) {
|
|
var sheet = spread.getActiveSheet();
|
|
if (!sheet) {
|
|
return null;
|
|
}
|
|
var formula = sheet.getFormula(row, col);
|
|
if (!formula) {
|
|
return null;
|
|
}
|
|
var calcService = sheet.getCalcService();
|
|
try {
|
|
var expr = calcService.parse(null, formula, row, col);
|
|
if (expr.type === ExpressionType.function) {
|
|
var fnName = expr.functionName;
|
|
if (fnName && spread.getSparklineEx(fnName)) {
|
|
return expr;
|
|
}
|
|
}
|
|
}
|
|
catch (ex) {
|
|
console.log("parse failed:", ex);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
function parseColorExpression(colorExpression, row, col) {
|
|
if (!colorExpression) {
|
|
return null;
|
|
}
|
|
var sheet = spread.getActiveSheet();
|
|
if (colorExpression.type === ExpressionType.string) {
|
|
return colorExpression.value;
|
|
}
|
|
else if (colorExpression.type === ExpressionType.missingArgument) {
|
|
return null;
|
|
}
|
|
else {
|
|
var formula = null;
|
|
try {
|
|
formula = unParseFormula(colorExpression, row, col);
|
|
}
|
|
catch (ex) {
|
|
}
|
|
return SheetsCalc.evaluateFormula(sheet, formula, row, col);
|
|
}
|
|
}
|
|
|
|
function getAreaSparklineSetting(formulaArgs, row, col) {
|
|
var defaultValue = {colorPositive: "#787878", colorNegative: "#CB0000"};
|
|
if (formulaArgs[0]) {
|
|
setTextValue("areaSparklinePoints", unParseFormula(formulaArgs[0], row, col));
|
|
}
|
|
else {
|
|
setTextValue("areaSparklinePoints", "");
|
|
}
|
|
var inputList = ["areaSparklineMinimumValue", "areaSparklineMaximumValue", "areaSparklineLine1", "areaSparklineLine2"];
|
|
var len = inputList.length;
|
|
for (var i = 1; i <= len; i++) {
|
|
if (formulaArgs[i]) {
|
|
setNumberValue(inputList[i - 1], unParseFormula(formulaArgs[i], row, col));
|
|
}
|
|
else {
|
|
setNumberValue(inputList[i - 1], "");
|
|
}
|
|
}
|
|
var positiveColor = parseColorExpression(formulaArgs[5], row, col);
|
|
if (positiveColor) {
|
|
setColorValue("areaSparklinePositiveColor", positiveColor);
|
|
}
|
|
else {
|
|
setColorValue("areaSparklinePositiveColor", defaultValue.colorPositive);
|
|
}
|
|
var negativeColor = parseColorExpression(formulaArgs[6], row, col);
|
|
if (negativeColor) {
|
|
setColorValue("areaSparklineNegativeColor", negativeColor);
|
|
}
|
|
else {
|
|
setColorValue("areaSparklineNegativeColor", defaultValue.colorNegative);
|
|
}
|
|
}
|
|
|
|
function getBoxPlotSparklineSetting(formulaArgs, row, col) {
|
|
var defaultValue = {boxplotClass: "5ns", style: 0, colorScheme: "#D2D2D2", vertical: false, showAverage: false};
|
|
if (formulaArgs && formulaArgs.length > 0) {
|
|
var pointsValue = unParseFormula(formulaArgs[0], row, col);
|
|
var boxPlotClassValue = formulaArgs[1] && (formulaArgs[1].type === ExpressionType.string ? formulaArgs[1].value : null);
|
|
var showAverageValue = formulaArgs[2] && (formulaArgs[2].type === ExpressionType.boolean ? formulaArgs[2].value : null);
|
|
var scaleStartValue = unParseFormula(formulaArgs[3], row, col);
|
|
var scaleEndValue = unParseFormula(formulaArgs[4], row, col);
|
|
var acceptableStartValue = unParseFormula(formulaArgs[5], row, col);
|
|
var acceptableEndValue = unParseFormula(formulaArgs[6], row, col);
|
|
var colorValue = parseColorExpression(formulaArgs[7], row, col);
|
|
var styleValue = formulaArgs[8] ? unParseFormula(formulaArgs[8], row, col) : null;
|
|
var verticalValue = formulaArgs[9] && (formulaArgs[9].type === ExpressionType.boolean ? formulaArgs[9].value : null);
|
|
|
|
setTextValue("boxplotSparklinePoints", pointsValue);
|
|
setDropDownValue("boxplotClassType", boxPlotClassValue === null ? defaultValue.boxplotClass : boxPlotClassValue);
|
|
setTextValue("boxplotSparklineScaleStart", scaleStartValue);
|
|
setTextValue("boxplotSparklineScaleEnd", scaleEndValue);
|
|
setTextValue("boxplotSparklineAcceptableStart", acceptableStartValue);
|
|
setTextValue("boxplotSparklineAcceptableEnd", acceptableEndValue);
|
|
setColorValue("boxplotSparklineColorScheme", colorValue === null ? defaultValue.colorScheme : colorValue);
|
|
setDropDownValue("boxplotSparklineStyleType", styleValue === null ? defaultValue.style : styleValue);
|
|
setCheckValue("boxplotSparklineShowAverage", showAverageValue === null ? defaultValue.showAverage : showAverageValue);
|
|
setCheckValue("boxplotSparklineVertical", verticalValue === null ? defaultValue.vertical : verticalValue);
|
|
}
|
|
else {
|
|
setTextValue("boxplotSparklinePoints", "");
|
|
setDropDownValue("boxplotClassType", defaultValue.boxplotClass);
|
|
setTextValue("boxplotSparklineScaleStart", "");
|
|
setTextValue("boxplotSparklineScaleEnd", "");
|
|
setTextValue("boxplotSparklineAcceptableStart", "");
|
|
setTextValue("boxplotSparklineAcceptableEnd", "");
|
|
setColorValue("boxplotSparklineColorScheme", defaultValue.colorScheme);
|
|
setDropDownValue("boxplotSparklineStyleType", defaultValue.style);
|
|
setCheckValue("boxplotSparklineShowAverage", defaultValue.showAverage);
|
|
setCheckValue("boxplotSparklineVertical", defaultValue.vertical);
|
|
}
|
|
}
|
|
|
|
function getBulletSparklineSetting(formulaArgs, row, col) {
|
|
var defaultValue = {vertical: false, colorScheme: "#A0A0A0"};
|
|
if (formulaArgs && formulaArgs.length > 0) {
|
|
var measureValue = unParseFormula(formulaArgs[0], row, col);
|
|
var targetValue = unParseFormula(formulaArgs[1], row, col);
|
|
var maxiValue = unParseFormula(formulaArgs[2], row, col);
|
|
var goodValue = unParseFormula(formulaArgs[3], row, col);
|
|
var badValue = unParseFormula(formulaArgs[4], row, col);
|
|
var forecastValue = unParseFormula(formulaArgs[5], row, col);
|
|
var tickunitValue = unParseFormula(formulaArgs[6], row, col);
|
|
var colorSchemeValue = parseColorExpression(formulaArgs[7], row, col);
|
|
var verticalValue = formulaArgs[8] && (formulaArgs[8].type === ExpressionType.boolean ? formulaArgs[8].value : null);
|
|
|
|
setTextValue("bulletSparklineMeasure", measureValue);
|
|
setTextValue("bulletSparklineTarget", targetValue);
|
|
setTextValue("bulletSparklineMaxi", maxiValue);
|
|
setTextValue("bulletSparklineForecast", forecastValue);
|
|
setTextValue("bulletSparklineGood", goodValue);
|
|
setTextValue("bulletSparklineBad", badValue);
|
|
setTextValue("bulletSparklineTickUnit", tickunitValue);
|
|
setColorValue("bulletSparklineColorScheme", colorSchemeValue ? colorSchemeValue : defaultValue.colorScheme);
|
|
setCheckValue("bulletSparklineVertical", verticalValue ? verticalValue : defaultValue.vertical);
|
|
}
|
|
else {
|
|
setTextValue("bulletSparklineMeasure", "");
|
|
setTextValue("bulletSparklineTarget", "");
|
|
setTextValue("bulletSparklineMaxi", "");
|
|
setTextValue("bulletSparklineForecast", "");
|
|
setTextValue("bulletSparklineGood", "");
|
|
setTextValue("bulletSparklineBad", "");
|
|
setTextValue("bulletSparklineTickUnit", "");
|
|
setColorValue("bulletSparklineColorScheme", defaultValue.colorScheme);
|
|
setCheckValue("bulletSparklineVertical", defaultValue.vertical);
|
|
}
|
|
}
|
|
|
|
function getCascadeSparklineSetting(formulaArgs, row, col) {
|
|
var defaultValue = {colorPositive: "#8CBF64", colorNegative: "#D6604D", vertical: false};
|
|
|
|
if (formulaArgs && formulaArgs.length > 0) {
|
|
var pointsRangeValue = unParseFormula(formulaArgs[0], row, col);
|
|
var pointIndexValue = unParseFormula(formulaArgs[1], row, col);
|
|
var labelsRangeValue = unParseFormula(formulaArgs[2], row, col);
|
|
var minimumValue = unParseFormula(formulaArgs[3], row, col);
|
|
var maximumValue = unParseFormula(formulaArgs[4], row, col);
|
|
var colorPositiveValue = parseColorExpression(formulaArgs[5], row, col);
|
|
var colorNegativeValue = parseColorExpression(formulaArgs[6], row, col);
|
|
var verticalValue = formulaArgs[7] && (formulaArgs[7].type === ExpressionType.boolean ? formulaArgs[7].value : null);
|
|
|
|
setTextValue("cascadeSparklinePointsRange", pointsRangeValue);
|
|
setTextValue("cascadeSparklinePointIndex", pointIndexValue);
|
|
setTextValue("cascadeSparklineLabelsRange", labelsRangeValue);
|
|
setTextValue("cascadeSparklineMinimum", minimumValue);
|
|
setTextValue("cascadeSparklineMaximum", maximumValue);
|
|
setColorValue("cascadeSparklinePositiveColor", colorPositiveValue ? colorPositiveValue : defaultValue.colorPositive);
|
|
setColorValue("cascadeSparklineNegativeColor", colorNegativeValue ? colorNegativeValue : defaultValue.colorNegative);
|
|
setCheckValue("cascadeSparklineVertical", verticalValue ? verticalValue : defaultValue.vertical);
|
|
}
|
|
else {
|
|
setTextValue("cascadeSparklinePointsRange", "");
|
|
setTextValue("cascadeSparklinePointIndex", "");
|
|
setTextValue("cascadeSparklineLabelsRange", "");
|
|
setTextValue("cascadeSparklineMinimum", "");
|
|
setTextValue("cascadeSparklineMaximum", "");
|
|
setColorValue("cascadeSparklinePositiveColor", defaultValue.colorPositive);
|
|
setColorValue("cascadeSparklineNegativeColor", defaultValue.colorNegative);
|
|
setCheckValue("cascadeSparklineVertical", defaultValue.vertical);
|
|
}
|
|
}
|
|
|
|
function parseSetting(jsonSetting) {
|
|
var setting = {}, inBracket = false, inProperty = true, property = "", value = "";
|
|
if (jsonSetting) {
|
|
jsonSetting = jsonSetting.substr(1, jsonSetting.length - 2);
|
|
for (var i = 0, len = jsonSetting.length; i < len; i++) {
|
|
var char = jsonSetting.charAt(i);
|
|
if (char === ":") {
|
|
inProperty = false;
|
|
}
|
|
else if (char === "," && !inBracket) {
|
|
setting[property] = value;
|
|
property = "";
|
|
value = "";
|
|
inProperty = true;
|
|
}
|
|
else if (char === "\'" || char === "\"") {
|
|
// discard
|
|
}
|
|
else {
|
|
if (char === "(") {
|
|
inBracket = true;
|
|
}
|
|
else if (char === ")") {
|
|
inBracket = false;
|
|
}
|
|
if (inProperty) {
|
|
property += char;
|
|
}
|
|
else {
|
|
value += char;
|
|
}
|
|
}
|
|
}
|
|
if (property) {
|
|
setting[property] = value;
|
|
}
|
|
for (var p in setting) {
|
|
var v = setting[p];
|
|
if (v !== null && typeof (v) !== "undefined") {
|
|
if (v.toUpperCase() === "TRUE") {
|
|
setting[p] = true;
|
|
} else if (v.toUpperCase() === "FALSE") {
|
|
setting[p] = false;
|
|
} else if (!isNaN(v) && isFinite(v)) {
|
|
setting[p] = parseFloat(v);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return setting;
|
|
}
|
|
|
|
function updateManual(type, inputDataName) {
|
|
var $manualDiv = $("div.insp-text[data-name='" + inputDataName + "']");
|
|
var $manualInput = $manualDiv.find("input");
|
|
if (type !== "custom") {
|
|
$manualInput.attr("disabled", "disabled");
|
|
$manualDiv.addClass("manual-disable");
|
|
}
|
|
else {
|
|
$manualInput.removeAttr("disabled");
|
|
$manualDiv.removeClass("manual-disable");
|
|
}
|
|
}
|
|
|
|
function updateStyleSetting(settings) {
|
|
var defaultValue = {
|
|
negativePoints: "#A52A2A", markers: "#244062", highPoint: "#0000FF",
|
|
lowPoint: "#0000FF", firstPoint: "#95B3D7", lastPoint: "#95B3D7",
|
|
series: "#244062", axis: "#000000"
|
|
};
|
|
setColorValue("compatibleSparklineNegativeColor", settings.negativeColor ? settings.negativeColor : defaultValue.negativePoints);
|
|
setColorValue("compatibleSparklineMarkersColor", settings.markersColor ? settings.markersColor : defaultValue.markers);
|
|
setColorValue("compatibleSparklineAxisColor", settings.axisColor ? settings.axisColor : defaultValue.axis);
|
|
setColorValue("compatibleSparklineSeriesColor", settings.seriesColor ? settings.seriesColor : defaultValue.series);
|
|
setColorValue("compatibleSparklineHighMarkerColor", settings.highMarkerColor ? settings.highMarkerColor : defaultValue.highPoint);
|
|
setColorValue("compatibleSparklineLowMarkerColor", settings.lowMarkerColor ? settings.lowMarkerColor : defaultValue.lowPoint);
|
|
setColorValue("compatibleSparklineFirstMarkerColor", settings.firstMarkerColor ? settings.firstMarkerColor : defaultValue.firstPoint);
|
|
setColorValue("compatibleSparklineLastMarkerColor", settings.lastMarkerColor ? settings.lastMarkerColor : defaultValue.lastPoint);
|
|
setTextValue("compatibleSparklineLastLineWeight", settings.lineWeight || settings.lw);
|
|
}
|
|
|
|
function updateSparklineSetting(setting) {
|
|
if (!setting) {
|
|
return;
|
|
}
|
|
var defaultSetting = {
|
|
rightToLeft: false,
|
|
displayHidden: false,
|
|
displayXAxis: false,
|
|
showFirst: false,
|
|
showHigh: false,
|
|
showLast: false,
|
|
showLow: false,
|
|
showNegative: false,
|
|
showMarkers: false
|
|
};
|
|
|
|
setDropDownValue("emptyCellDisplayType", setting.displayEmptyCellsAs ? setting.displayEmptyCellsAs : -1);
|
|
setCheckValue("showDataInHiddenRowOrColumn", setting.displayHidden ? setting.displayHidden : defaultSetting.displayHidden);
|
|
setCheckValue("compatibleSparklineShowFirst", setting.showFirst ? setting.showFirst : defaultSetting.showFirst);
|
|
setCheckValue("compatibleSparklineShowLast", setting.showLast ? setting.showLast : defaultSetting.showLast);
|
|
setCheckValue("compatibleSparklineShowHigh", setting.showHigh ? setting.showHigh : defaultSetting.showHigh);
|
|
setCheckValue("compatibleSparklineShowLow", setting.showLow ? setting.showLow : defaultSetting.showLow);
|
|
setCheckValue("compatibleSparklineShowNegative", setting.showNegative ? setting.showNegative : defaultSetting.showNegative);
|
|
setCheckValue("compatibleSparklineShowMarkers", setting.showMarkers ? setting.showMarkers : defaultSetting.showMarkers);
|
|
var minAxisType = Sparklines.SparklineAxisMinMax[setting.minAxisType];
|
|
setDropDownValue("minAxisType", minAxisType ? minAxisType : -1);
|
|
setTextValue("manualMin", setting.manualMin ? setting.manualMin : "");
|
|
var maxAxisType = Sparklines.SparklineAxisMinMax[setting.maxAxisType];
|
|
setDropDownValue("maxAxisType", maxAxisType ? maxAxisType : -1);
|
|
setTextValue("manualMax", setting.manualMax ? setting.manualMax : "");
|
|
setCheckValue("rightToLeft", setting.rightToLeft ? setting.rightToLeft : defaultSetting.rightToLeft);
|
|
setCheckValue("displayXAxis", setting.displayXAxis ? setting.displayXAxis : defaultSetting.displayXAxis);
|
|
|
|
var type = getDropDownValue("minAxisType");
|
|
updateManual(type, "manualMin");
|
|
type = getDropDownValue("maxAxisType");
|
|
updateManual(type, "manualMax");
|
|
}
|
|
|
|
function getCompatibleSparklineSetting(formulaArgs, row, col) {
|
|
var sparklineSetting = {};
|
|
|
|
setTextValue("compatibleSparklineData", unParseFormula(formulaArgs[0], row, col));
|
|
setDropDownValue("dataOrientationType", formulaArgs[1].value);
|
|
if (formulaArgs[2]) {
|
|
setTextValue("compatibleSparklineDateAxisData", unParseFormula(formulaArgs[2], row, col));
|
|
}
|
|
else {
|
|
setTextValue("compatibleSparklineDateAxisData", "");
|
|
}
|
|
if (formulaArgs[3]) {
|
|
setDropDownValue("dateAxisOrientationType", formulaArgs[3].value);
|
|
}
|
|
else {
|
|
setDropDownValue("dateAxisOrientationType", -1);
|
|
}
|
|
var colorExpression = parseColorExpression(formulaArgs[4], row, col);
|
|
if (colorExpression) {
|
|
sparklineSetting = parseSetting(colorExpression);
|
|
}
|
|
updateSparklineSetting(sparklineSetting);
|
|
updateStyleSetting(sparklineSetting);
|
|
}
|
|
|
|
function getScatterSparklineSetting(formulaArgs, row, col) {
|
|
var defaultValue = {
|
|
tags: false,
|
|
drawSymbol: true,
|
|
drawLines: false,
|
|
dash: false,
|
|
color1: "#969696",
|
|
color2: "#CB0000"
|
|
};
|
|
var inputList = ["scatterSparklinePoints1", "scatterSparklinePoints2", "scatterSparklineMinX", "scatterSparklineMaxX",
|
|
"scatterSparklineMinY", "scatterSparklineMaxY", "scatterSparklineHLine", "scatterSparklineVLine",
|
|
"scatterSparklineXMinZone", "scatterSparklineXMaxZone", "scatterSparklineYMinZone", "scatterSparklineYMaxZone"];
|
|
for (var i = 0; i < inputList.length; i++) {
|
|
var formula = "";
|
|
if (formulaArgs[i]) {
|
|
formula = unParseFormula(formulaArgs[i], row, col);
|
|
}
|
|
setTextValue(inputList[i], formula);
|
|
}
|
|
|
|
var color1 = parseColorExpression(formulaArgs[15], row, col);
|
|
var color2 = parseColorExpression(formulaArgs[16], row, col);
|
|
var tags = formulaArgs[12] && (formulaArgs[12].type === ExpressionType.boolean ? formulaArgs[12].value : null);
|
|
var drawSymbol = formulaArgs[13] && (formulaArgs[13].type === ExpressionType.boolean ? formulaArgs[13].value : null);
|
|
var drawLines = formulaArgs[14] && (formulaArgs[14].type === ExpressionType.boolean ? formulaArgs[14].value : null);
|
|
var dashLine = formulaArgs[17] && (formulaArgs[17].type === ExpressionType.boolean ? formulaArgs[17].value : null);
|
|
|
|
setColorValue("scatterSparklineColor1", (color1 !== null) ? color1 : defaultValue.color1);
|
|
setColorValue("scatterSparklineColor2", (color2 !== null) ? color2 : defaultValue.color2);
|
|
setCheckValue("scatterSparklineTags", tags !== null ? tags : defaultValue.tags);
|
|
setCheckValue("scatterSparklineDrawSymbol", drawSymbol !== null ? drawSymbol : defaultValue.drawSymbol);
|
|
setCheckValue("scatterSparklineDrawLines", drawLines !== null ? drawLines : defaultValue.drawLines);
|
|
setCheckValue("scatterSparklineDashLine", dashLine !== null ? dashLine : defaultValue.dash);
|
|
}
|
|
|
|
function getHBarSparklineSetting(formulaArgs, row, col) {
|
|
var defaultValue = {colorScheme: "#969696"};
|
|
|
|
var value = unParseFormula(formulaArgs[0], row, col);
|
|
var colorScheme = parseColorExpression(formulaArgs[1], row, col);
|
|
|
|
setTextValue("hbarSparklineValue", value);
|
|
setColorValue("hbarSparklineColorScheme", (colorScheme !== null) ? colorScheme : defaultValue.colorScheme);
|
|
}
|
|
|
|
function getVBarSparklineSetting(formulaArgs, row, col) {
|
|
var defaultValue = {colorScheme: "#969696"};
|
|
|
|
var value = unParseFormula(formulaArgs[0], row, col);
|
|
var colorScheme = parseColorExpression(formulaArgs[1], row, col);
|
|
|
|
setTextValue("vbarSparklineValue", value);
|
|
setColorValue("vbarSparklineColorScheme", (colorScheme !== null) ? colorScheme : defaultValue.colorScheme);
|
|
}
|
|
|
|
function getParetoSparklineSetting(formulaArgs, row, col) {
|
|
var defaultValue = {label: 0, vertical: false};
|
|
|
|
if (formulaArgs && formulaArgs.length > 0) {
|
|
var pointsRangeValue = unParseFormula(formulaArgs[0], row, col);
|
|
var pointIndexValue = unParseFormula(formulaArgs[1], row, col);
|
|
var colorRangeValue = unParseFormula(formulaArgs[2], row, col);
|
|
var targetValue = unParseFormula(formulaArgs[3], row, col);
|
|
var target2Value = unParseFormula(formulaArgs[4], row, col);
|
|
var highlightPositionValue = unParseFormula(formulaArgs[5], row, col);
|
|
var labelValue = formulaArgs[6] && (formulaArgs[6].type === ExpressionType.number ? formulaArgs[6].value : null);
|
|
var verticalValue = formulaArgs[7] && (formulaArgs[7].type === ExpressionType.boolean ? formulaArgs[7].value : null);
|
|
|
|
setTextValue("paretoSparklinePoints", pointsRangeValue);
|
|
setTextValue("paretoSparklinePointIndex", pointIndexValue);
|
|
setTextValue("paretoSparklineColorRange", colorRangeValue);
|
|
setTextValue("paretoSparklineHighlightPosition", highlightPositionValue);
|
|
setTextValue("paretoSparklineTarget", targetValue);
|
|
setTextValue("paretoSparklineTarget2", target2Value);
|
|
setDropDownValue("paretoLabelType", labelValue === null ? defaultValue.label : labelValue);
|
|
setCheckValue("paretoSparklineVertical", verticalValue === null ? defaultValue.vertical : verticalValue);
|
|
}
|
|
else {
|
|
setTextValue("paretoSparklinePoints", "");
|
|
setTextValue("paretoSparklinePointIndex", "");
|
|
setTextValue("paretoSparklineColorRange", "");
|
|
setTextValue("paretoSparklineHighlightPosition", "");
|
|
setTextValue("paretoSparklineTarget", "");
|
|
setTextValue("paretoSparklineTarget2", "");
|
|
setDropDownValue("paretoLabelType", defaultValue.label);
|
|
setCheckValue("paretoSparklineVertical", defaultValue.vertical);
|
|
}
|
|
}
|
|
|
|
function getSpreadSparklineSetting(formulaArgs, row, col) {
|
|
var defaultValue = {showAverage: false, style: 4, colorScheme: "#646464", vertical: false};
|
|
|
|
if (formulaArgs && formulaArgs.length > 0) {
|
|
var pointsValue = unParseFormula(formulaArgs[0], row, col);
|
|
var showAverageValue = formulaArgs[1] && (formulaArgs[1].type === ExpressionType.boolean ? formulaArgs[1].value : null);
|
|
var scaleStartValue = unParseFormula(formulaArgs[2], row, col);
|
|
var scaleEndValue = unParseFormula(formulaArgs[3], row, col);
|
|
var styleValue = formulaArgs[4] ? unParseFormula(formulaArgs[4], row, col) : null;
|
|
var colorSchemeValue = parseColorExpression(formulaArgs[5], row, col);
|
|
var verticalValue = formulaArgs[6] && (formulaArgs[6].type === ExpressionType.boolean ? formulaArgs[6].value : null);
|
|
|
|
setTextValue("spreadSparklinePoints", pointsValue);
|
|
setCheckValue("spreadSparklineShowAverage", showAverageValue ? showAverageValue : defaultValue.showAverage);
|
|
setTextValue("spreadSparklineScaleStart", scaleStartValue);
|
|
setTextValue("spreadSparklineScaleEnd", scaleEndValue);
|
|
setDropDownValue("spreadSparklineStyleType", styleValue ? styleValue : defaultValue.style);
|
|
setColorValue("spreadSparklineColorScheme", colorSchemeValue ? colorSchemeValue : defaultValue.colorScheme);
|
|
setCheckValue("spreadSparklineVertical", verticalValue ? verticalValue : defaultValue.vertical);
|
|
}
|
|
else {
|
|
setTextValue("spreadSparklinePoints", "");
|
|
setCheckValue("spreadSparklineShowAverage", defaultValue.showAverage);
|
|
setTextValue("spreadSparklineScaleStart", "");
|
|
setTextValue("spreadSparklineScaleEnd", "");
|
|
setDropDownValue("spreadSparklineStyleType", defaultValue.style);
|
|
setColorValue("spreadSparklineColorScheme", defaultValue.colorScheme);
|
|
setCheckValue("spreadSparklineVertical", defaultValue.vertical);
|
|
}
|
|
}
|
|
|
|
function getStackedSparklineSetting(formulaArgs, row, col) {
|
|
var defaultValue = {color: "#646464", vertical: false, textOrientation: 0};
|
|
|
|
if (formulaArgs && formulaArgs.length > 0) {
|
|
var pointsValue = unParseFormula(formulaArgs[0], row, col);
|
|
var colorRangeValue = unParseFormula(formulaArgs[1], row, col);
|
|
var labelRangeValue = unParseFormula(formulaArgs[2], row, col);
|
|
var maximumValue = unParseFormula(formulaArgs[3], row, col);
|
|
var targetRedValue = unParseFormula(formulaArgs[4], row, col);
|
|
var targetGreenValue = unParseFormula(formulaArgs[5], row, col);
|
|
var targetBlueValue = unParseFormula(formulaArgs[6], row, col);
|
|
var targetYellowValue = unParseFormula(formulaArgs[7], row, col);
|
|
var colorValue = parseColorExpression(formulaArgs[8], row, col);
|
|
var highlightPositionValue = unParseFormula(formulaArgs[9], row, col);
|
|
var verticalValue = formulaArgs[10] && (formulaArgs[10].type === ExpressionType.boolean ? formulaArgs[10].value : null);
|
|
var textOrientationValue = unParseFormula(formulaArgs[11], row, col);
|
|
var textSizeValue = unParseFormula(formulaArgs[12], row, col);
|
|
|
|
setTextValue("stackedSparklinePoints", pointsValue);
|
|
setTextValue("stackedSparklineColorRange", colorRangeValue);
|
|
setTextValue("stackedSparklineLabelRange", labelRangeValue);
|
|
setNumberValue("stackedSparklineMaximum", maximumValue);
|
|
setNumberValue("stackedSparklineTargetRed", targetRedValue);
|
|
setNumberValue("stackedSparklineTargetGreen", targetGreenValue);
|
|
setNumberValue("stackedSparklineTargetBlue", targetBlueValue);
|
|
setNumberValue("stackedSparklineTargetYellow", targetYellowValue);
|
|
setColorValue("stackedSparklineColor", "stacked-color-span", colorValue ? colorValue : defaultValue.color);
|
|
setNumberValue("stackedSparklineHighlightPosition", highlightPositionValue);
|
|
setCheckValue("stackedSparklineVertical", verticalValue ? verticalValue : defaultValue.vertical);
|
|
setDropDownValue("stackedSparklineTextOrientation", textOrientationValue ? textOrientationValue : defaultValue.textOrientation);
|
|
setNumberValue("stackedSparklineTextSize", textSizeValue);
|
|
}
|
|
else {
|
|
setTextValue("stackedSparklinePoints", "");
|
|
setTextValue("stackedSparklineColorRange", "");
|
|
setTextValue("stackedSparklineLabelRange", "");
|
|
setNumberValue("stackedSparklineMaximum", "");
|
|
setNumberValue("stackedSparklineTargetRed", "");
|
|
setNumberValue("stackedSparklineTargetGreen", "");
|
|
setNumberValue("stackedSparklineTargetBlue", "");
|
|
setNumberValue("stackedSparklineTargetYellow", "");
|
|
setColorValue("stackedSparklineColor", "stacked-color-span", defaultValue.color);
|
|
setNumberValue("stackedSparklineHighlightPosition", "");
|
|
setCheckValue("stackedSparklineVertical", defaultValue.vertical);
|
|
setDropDownValue("stackedSparklineTextOrientation", defaultValue.textOrientation);
|
|
setNumberValue("stackedSparklineTextSize", "");
|
|
}
|
|
}
|
|
|
|
function getVariSparklineSetting(formulaArgs, row, col) {
|
|
var defaultValue = {legend: false, colorPositive: "green", colorNegative: "red", vertical: false};
|
|
|
|
if (formulaArgs && formulaArgs.length > 0) {
|
|
var varianceValue = unParseFormula(formulaArgs[0], row, col);
|
|
var referenceValue = unParseFormula(formulaArgs[1], row, col);
|
|
var miniValue = unParseFormula(formulaArgs[2], row, col);
|
|
var maxiValue = unParseFormula(formulaArgs[3], row, col);
|
|
var markValue = unParseFormula(formulaArgs[4], row, col);
|
|
var tickunitValue = unParseFormula(formulaArgs[5], row, col);
|
|
var legendValue = formulaArgs[6] && (formulaArgs[6].type === ExpressionType.boolean ? formulaArgs[6].value : null);
|
|
var colorPositiveValue = parseColorExpression(formulaArgs[7], row, col);
|
|
var colorNegativeValue = parseColorExpression(formulaArgs[8], row, col);
|
|
var verticalValue = formulaArgs[9] && (formulaArgs[9].type === ExpressionType.boolean ? formulaArgs[9].value : null);
|
|
|
|
setTextValue("variSparklineVariance", varianceValue);
|
|
setTextValue("variSparklineReference", referenceValue);
|
|
setTextValue("variSparklineMini", miniValue);
|
|
setTextValue("variSparklineMaxi", maxiValue);
|
|
setTextValue("variSparklineMark", markValue);
|
|
setTextValue("variSparklineTickUnit", tickunitValue);
|
|
setColorValue("variSparklineColorPositive", colorPositiveValue ? colorPositiveValue : defaultValue.colorPositive);
|
|
setColorValue("variSparklineColorNegative", colorNegativeValue ? colorNegativeValue : defaultValue.colorNegative);
|
|
setCheckValue("variSparklineLegend", legendValue);
|
|
setCheckValue("variSparklineVertical", verticalValue);
|
|
}
|
|
else {
|
|
setTextValue("variSparklineVariance", "");
|
|
setTextValue("variSparklineReference", "");
|
|
setTextValue("variSparklineMini", "");
|
|
setTextValue("variSparklineMaxi", "");
|
|
setTextValue("variSparklineMark", "");
|
|
setTextValue("variSparklineTickUnit", "");
|
|
setColorValue("variSparklineColorPositive", defaultValue.colorPositive);
|
|
setColorValue("variSparklineColorNegative", defaultValue.colorNegative);
|
|
setCheckValue("variSparklineLegend", defaultValue.legend);
|
|
setCheckValue("variSparklineVertical", defaultValue.vertical);
|
|
}
|
|
}
|
|
|
|
function getMonthSparklineSetting(formulaArgs, row, col) {
|
|
var year = "", month = "", dataRangeStr = "", emptyColor = "lightgray", startColor = "lightgreen", middleColor = "green", endColor = "darkgreen", colorRangeStr = "";
|
|
if (formulaArgs) {
|
|
if (formulaArgs.length === 7) {
|
|
year = unParseFormula(formulaArgs[0], row, col);
|
|
month = unParseFormula(formulaArgs[1], row, col);
|
|
dataRangestr = unParseFormula(formulaArgs[2], row, col);
|
|
emptyColor = parseColorExpression(formulaArgs[3], row, col);
|
|
startColor = parseColorExpression(formulaArgs[4], row, col);
|
|
middleColor = parseColorExpression(formulaArgs[5], row, col);
|
|
endColor = parseColorExpression(formulaArgs[6], row, col);
|
|
setTextValue("monthSparklineYear", year);
|
|
setTextValue("monthSparklineMonth", month);
|
|
setTextValue("monthSparklineData", dataRangestr);
|
|
setColorValue("monthSparklineEmptyColor", emptyColor);
|
|
setColorValue("monthSparklineStartColor", startColor);
|
|
setColorValue("monthSparklineMiddleColor", middleColor);
|
|
setColorValue("monthSparklineEndColor", endColor);
|
|
setTextValue("monthSparklineColorRange", "");
|
|
} else {
|
|
year = unParseFormula(formulaArgs[0], row, col);
|
|
month = unParseFormula(formulaArgs[1], row, col);
|
|
dataRangestr = unParseFormula(formulaArgs[2], row, col);
|
|
colorRangeStr = unParseFormula(formulaArgs[3], row, col);
|
|
setTextValue("monthSparklineYear", year);
|
|
setTextValue("monthSparklineMonth", month);
|
|
setTextValue("monthSparklineData", dataRangestr);
|
|
setColorValue("monthSparklineEmptyColor", emptyColor);
|
|
setColorValue("monthSparklineStartColor", startColor);
|
|
setColorValue("monthSparklineMiddleColor", middleColor);
|
|
setColorValue("monthSparklineEndColor", endColor);
|
|
setTextValue("monthSparklineColorRange", colorRangeStr);
|
|
}
|
|
} else {
|
|
setTextValue("monthSparklineYear", year);
|
|
setTextValue("monthSparklineMonth", month);
|
|
setTextValue("monthSparklineData", dataRangestr);
|
|
setColorValue("monthSparklineEmptyColor", emptyColor);
|
|
setColorValue("monthSparklineStartColor", startColor);
|
|
setColorValue("monthSparklineMiddleColor", middleColor);
|
|
setColorValue("monthSparklineEndColor", endColor);
|
|
setTextValue("monthSparklineColorRange", colorRangeStr);
|
|
}
|
|
}
|
|
|
|
function getYearSparklineSetting(formulaArgs, row, col) {
|
|
var year = "", month = "", dataRangeStr = "", emptyColor = "lightgray", startColor = "lightgreen", middleColor = "green", endColor = "darkgreen", colorRangeStr = "";
|
|
if (formulaArgs) {
|
|
if (formulaArgs.length === 6) {
|
|
year = unParseFormula(formulaArgs[0], row, col);
|
|
dataRangestr = unParseFormula(formulaArgs[1], row, col);
|
|
emptyColor = parseColorExpression(formulaArgs[2], row, col);
|
|
startColor = parseColorExpression(formulaArgs[3], row, col);
|
|
middleColor = parseColorExpression(formulaArgs[4], row, col);
|
|
endColor = parseColorExpression(formulaArgs[5], row, col);
|
|
setTextValue("yearSparklineYear", year);
|
|
setTextValue("yearSparklineData", dataRangestr);
|
|
setColorValue("yearSparklineEmptyColor", emptyColor);
|
|
setColorValue("yearSparklineStartColor", startColor);
|
|
setColorValue("yearSparklineMiddleColor", middleColor);
|
|
setColorValue("yearSparklineEndColor", endColor);
|
|
setTextValue("yearSparklineColorRange", "");
|
|
} else {
|
|
year = unParseFormula(formulaArgs[0], row, col);
|
|
dataRangestr = unParseFormula(formulaArgs[1], row, col);
|
|
colorRangeStr = unParseFormula(formulaArgs[2], row, col);
|
|
setTextValue("yearSparklineYear", year);
|
|
setTextValue("yearSparklineData", dataRangestr);
|
|
setColorValue("yearSparklineEmptyColor", emptyColor);
|
|
setColorValue("yearSparklineStartColor", startColor);
|
|
setColorValue("yearSparklineMiddleColor", middleColor);
|
|
setColorValue("yearSparklineEndColor", endColor);
|
|
setTextValue("yearSparklineColorRange", colorRangeStr);
|
|
}
|
|
} else {
|
|
setTextValue("yearSparklineYear", year);
|
|
setTextValue("yearSparklineData", dataRangestr);
|
|
setColorValue("yearSparklineEmptyColor", emptyColor);
|
|
setColorValue("yearSparklineStartColor", startColor);
|
|
setColorValue("yearSparklineMiddleColor", middleColor);
|
|
setColorValue("yearSparklineEndColor", endColor);
|
|
setTextValue("yearSparklineColorRange", colorRangeStr);
|
|
}
|
|
}
|
|
|
|
function addPieSparklineColor(count, color, isMinusSymbol) {
|
|
var defaultColor = "rgb(237, 237, 237)";
|
|
color = color ? color : defaultColor;
|
|
var symbolFunClass, symbolClass;
|
|
if (isMinusSymbol) {
|
|
symbolFunClass = "remove-pie-color";
|
|
symbolClass = "ui-pie-sparkline-icon-minus";
|
|
}
|
|
else {
|
|
symbolFunClass = "add-pie-color";
|
|
symbolClass = "ui-pie-sparkline-icon-plus";
|
|
}
|
|
var $pieSparklineColorContainer = $("#pieSparklineColorContainer");
|
|
var pieColorDataName = "pieColorName";
|
|
var $colorDiv = $("<div>" +
|
|
"<div class=\"insp-row\">" +
|
|
"<div>" +
|
|
"<div class=\"insp-color-picker insp-inline-row\" data-name=\"" + pieColorDataName + count + "\">" +
|
|
"<div class=\"title insp-inline-row-item insp-col-6 localize\">" + uiResource.sparklineExTab.pieSparkline.values.color + count + "</div>" +
|
|
"<div class=\"picker insp-inline-row-item insp-col-4\">" +
|
|
"<div style=\"width: 100%; height: 100%\">" +
|
|
"<div class=\"color-view\" style=\"background-color: " + color + ";\"></div>" +
|
|
"</div>" +
|
|
"</div>" +
|
|
"<div class=\"" + symbolFunClass + " insp-inline-row-item insp-col-2\"><span class=\"ui-pie-sparkline-icon " + symbolClass + "\"></span></div>" +
|
|
"</div>" +
|
|
"</div>" +
|
|
"</div>" +
|
|
"</div>");
|
|
$colorDiv.appendTo($pieSparklineColorContainer);
|
|
}
|
|
|
|
function addPieColor(count, color, isMinusSymbol) {
|
|
var $colorSpanDiv = $(".add-pie-color");
|
|
$colorSpanDiv.addClass("remove-pie-color").removeClass("add-pie-color");
|
|
$colorSpanDiv.find("span").addClass("ui-pie-sparkline-icon-minus").removeClass("ui-pie-sparkline-icon-plus");
|
|
addPieSparklineColor(count, color, isMinusSymbol);
|
|
$(".add-pie-color").unbind("click");
|
|
$(".add-pie-color").bind("click", function (evt) {
|
|
var count = $("#pieSparklineColorContainer").find("span").length;
|
|
addPieColor(count + 1);
|
|
});
|
|
$(".remove-pie-color").unbind("click");
|
|
$(".remove-pie-color").bind("click", function (evt) {
|
|
resetPieColor($(evt.target));
|
|
});
|
|
$("div.insp-color-picker .picker").click(showColorPicker);
|
|
}
|
|
|
|
function resetPieColor($colorSpanDiv) {
|
|
if (!$colorSpanDiv.hasClass("ui-pie-sparkline-icon")) {
|
|
return;
|
|
}
|
|
$colorDiv = $colorSpanDiv.parent().parent().parent().parent().parent();
|
|
$colorDiv.remove();
|
|
var $pieSparklineColorContainer = $("#pieSparklineColorContainer");
|
|
var colorArray = [];
|
|
$pieSparklineColorContainer.find(".color-view").each(function () {
|
|
colorArray.push($(this).css("background-color"));
|
|
});
|
|
$pieSparklineColorContainer.empty();
|
|
addMultiPieColor(colorArray);
|
|
}
|
|
|
|
function addMultiPieColor(colorArray) {
|
|
if (!colorArray || colorArray.length === 0) {
|
|
return;
|
|
}
|
|
var length = colorArray.length;
|
|
var i = 0;
|
|
for (i; i < length - 1; i++) {
|
|
addPieSparklineColor(i + 1, colorArray[i], true);
|
|
}
|
|
addPieColor(i + 1, colorArray[i]);
|
|
}
|
|
|
|
function getPieSparklineSetting(formulaArgs, row, col) {
|
|
var agrsLength = formulaArgs.length;
|
|
if (formulaArgs && agrsLength > 0) {
|
|
var range = unParseFormula(formulaArgs[0], row, col);
|
|
setTextValue("pieSparklinePercentage", range);
|
|
|
|
var actualLen = agrsLength - 1;
|
|
if (actualLen === 0) {
|
|
addPieColor(1);
|
|
}
|
|
else {
|
|
var colorArray = [];
|
|
for (var i = 1; i <= actualLen; i++) {
|
|
var colorItem = null;
|
|
var color = parseColorExpression(formulaArgs[i], row, col);
|
|
colorArray.push(color);
|
|
}
|
|
addMultiPieColor(colorArray);
|
|
}
|
|
}
|
|
}
|
|
|
|
var sparklineName;
|
|
function showSparklineSetting(row, col) {
|
|
var expr = parseFormulaSparkline(row, col);
|
|
if (!expr || !expr.arguments) {
|
|
return false;
|
|
}
|
|
var formulaSparkline = spread.getSparklineEx(expr.functionName);
|
|
|
|
if (formulaSparkline) {
|
|
var $sparklineSettingDiv = $("#sparklineExTab>div>div");
|
|
var formulaArgs = expr.arguments;
|
|
$sparklineSettingDiv.hide();
|
|
if (formulaSparkline instanceof Sparklines.PieSparkline) {
|
|
$("#pieSparklineSetting").show();
|
|
$("#pieSparklineColorContainer").empty();
|
|
getPieSparklineSetting(formulaArgs, row, col);
|
|
return true;
|
|
}
|
|
else if (formulaSparkline instanceof Sparklines.AreaSparkline) {
|
|
$("#areaSparklineSetting").show();
|
|
getAreaSparklineSetting(formulaArgs, row, col);
|
|
return true;
|
|
}
|
|
else if (formulaSparkline instanceof Sparklines.BoxPlotSparkline) {
|
|
$("#boxplotSparklineSetting").show();
|
|
getBoxPlotSparklineSetting(formulaArgs, row, col);
|
|
return true;
|
|
}
|
|
else if (formulaSparkline instanceof Sparklines.BulletSparkline) {
|
|
$("#bulletSparklineSetting").show();
|
|
getBulletSparklineSetting(formulaArgs, row, col);
|
|
return true;
|
|
}
|
|
else if (formulaSparkline instanceof Sparklines.CascadeSparkline) {
|
|
$("#cascadeSparklineSetting").show();
|
|
getCascadeSparklineSetting(formulaArgs, row, col);
|
|
return true;
|
|
}
|
|
else if (formulaSparkline instanceof Sparklines.LineSparkline || formulaSparkline instanceof Sparklines.ColumnSparkline || formulaSparkline instanceof Sparklines.WinlossSparkline) {
|
|
$("#compatibleSparklineSetting").show();
|
|
if (expr.function.name) {
|
|
sparklineName = expr.function.name;
|
|
}
|
|
getCompatibleSparklineSetting(formulaArgs, row, col);
|
|
return true;
|
|
}
|
|
else if (formulaSparkline instanceof Sparklines.ScatterSparkline) {
|
|
$("#scatterSparklineSetting").show();
|
|
getScatterSparklineSetting(formulaArgs, row, col);
|
|
return true;
|
|
}
|
|
else if (formulaSparkline instanceof Sparklines.HBarSparkline) {
|
|
$("#hbarSparklineSetting").show();
|
|
getHBarSparklineSetting(formulaArgs, row, col);
|
|
return true;
|
|
}
|
|
else if (formulaSparkline instanceof Sparklines.VBarSparkline) {
|
|
$("#vbarSparklineSetting").show();
|
|
getVBarSparklineSetting(formulaArgs, row, col);
|
|
return true;
|
|
}
|
|
else if (formulaSparkline instanceof Sparklines.ParetoSparkline) {
|
|
$("#paretoSparklineSetting").show();
|
|
getParetoSparklineSetting(formulaArgs, row, col);
|
|
return true;
|
|
}
|
|
else if (formulaSparkline instanceof Sparklines.SpreadSparkline) {
|
|
$("#spreadSparklineSetting").show();
|
|
getSpreadSparklineSetting(formulaArgs, row, col);
|
|
return true;
|
|
}
|
|
else if (formulaSparkline instanceof Sparklines.StackedSparkline) {
|
|
$("#stackedSparklineSetting").show();
|
|
getStackedSparklineSetting(formulaArgs, row, col);
|
|
return true;
|
|
}
|
|
else if (formulaSparkline instanceof Sparklines.VariSparkline) {
|
|
$("#variSparklineSetting").show();
|
|
getVariSparklineSetting(formulaArgs, row, col);
|
|
return true;
|
|
}
|
|
else if (formulaSparkline instanceof Sparklines.MonthSparkline) {
|
|
$("#monthSparklineSetting").show();
|
|
getMonthSparklineSetting(formulaArgs, row, col);
|
|
return true;
|
|
}
|
|
else if (formulaSparkline instanceof Sparklines.YearSparkline) {
|
|
$("#yearSparklineSetting").show();
|
|
getYearSparklineSetting(formulaArgs, row, col);
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function attachSparklineSettingEvents() {
|
|
$("#setAreaSparkline").click(applyAreaSparklineSetting);
|
|
$("#setBoxPlotSparkline").click(applyBoxPlotSparklineSetting);
|
|
$("#setBulletSparkline").click(applyBulletSparklineSetting);
|
|
$("#setCascadeSparkline").click(applyCascadeSparklineSetting);
|
|
$("#setCompatibleSparkline").click(applyCompatibleSparklineSetting);
|
|
$("#setScatterSparkline").click(applyScatterSparklineSetting);
|
|
$("#setHbarSparkline").click(applyHbarSparklineSetting);
|
|
$("#setVbarSparkline").click(applyVbarSparklineSetting);
|
|
$("#setParetoSparkline").click(applyParetoSparklineSetting);
|
|
$("#setSpreadSparkline").click(applySpreadSparklineSetting);
|
|
$("#setStackedSparkline").click(applyStackedSparklineSetting);
|
|
$("#setVariSparkline").click(applyVariSparklineSetting);
|
|
$("#setPieSparkline").click(applyPieSparklineSetting);
|
|
$("#setMonthSparkline").click(applyMonthSparklineSetting);
|
|
$("#setYearSparkline").click(applyYearSparklineSetting);
|
|
}
|
|
|
|
function updateFormulaBar() {
|
|
var sheet = spread.getActiveSheet();
|
|
var formulaBar = $("#formulabox");
|
|
if (formulaBar.length > 0) {
|
|
var formula = sheet.getFormula(sheet.getActiveRowIndex(), sheet.getActiveColumnIndex());
|
|
if (formula) {
|
|
formula = "=" + formula;
|
|
formulaBar.text(formula);
|
|
}
|
|
}
|
|
}
|
|
|
|
function removeContinuousComma(parameter) {
|
|
var len = parameter.length;
|
|
while (len > 0 && parameter[len - 1] === ",") {
|
|
len--;
|
|
}
|
|
return parameter.substr(0, len);
|
|
}
|
|
|
|
function formatFormula(paraArray) {
|
|
var params = "";
|
|
for (var i = 0; i < paraArray.length; i++) {
|
|
var item = paraArray[i];
|
|
if (item !== undefined && item !== null) {
|
|
params += item + ",";
|
|
}
|
|
else {
|
|
params += ",";
|
|
}
|
|
}
|
|
params = removeContinuousComma(params);
|
|
return params;
|
|
}
|
|
|
|
function getFormula(params) {
|
|
var len = params.length;
|
|
while (len > 0 && params[len - 1] === "") {
|
|
len--;
|
|
}
|
|
var temp = "";
|
|
for (var i = 0; i < len; i++) {
|
|
temp += params[i];
|
|
if (i !== len - 1) {
|
|
temp += ",";
|
|
}
|
|
}
|
|
return "=AREASPARKLINE(" + temp + ")";
|
|
}
|
|
|
|
function setFormulaSparkline(formula) {
|
|
var sheet = spread.getActiveSheet();
|
|
var row = sheet.getActiveRowIndex();
|
|
var col = sheet.getActiveColumnIndex();
|
|
if (formula) {
|
|
sheet.setFormula(row, col, formula);
|
|
}
|
|
}
|
|
|
|
function applyAreaSparklineSetting() {
|
|
var points = getTextValue("areaSparklinePoints");
|
|
var mini = getNumberValue("areaSparklineMinimumValue");
|
|
var maxi = getNumberValue("areaSparklineMaximumValue");
|
|
var line1 = getNumberValue("areaSparklineLine1");
|
|
var line2 = getNumberValue("areaSparklineLine2");
|
|
var colorPositive = "\"" + getBackgroundColor("areaSparklinePositiveColor") + "\"";
|
|
var colorNegative = "\"" + getBackgroundColor("areaSparklineNegativeColor") + "\"";
|
|
var paramArr = [points, mini, maxi, line1, line2, colorPositive, colorNegative];
|
|
var formula = getFormula(paramArr);
|
|
setFormulaSparkline(formula);
|
|
updateFormulaBar();
|
|
}
|
|
|
|
function applyBoxPlotSparklineSetting() {
|
|
var pointsValue = getTextValue("boxplotSparklinePoints");
|
|
var boxPlotClassValue = getDropDownValue("boxplotClassType");
|
|
var showAverageValue = getCheckValue("boxplotSparklineShowAverage");
|
|
var scaleStartValue = getTextValue("boxplotSparklineScaleStart");
|
|
var scaleEndValue = getTextValue("boxplotSparklineScaleEnd");
|
|
var acceptableStartValue = getTextValue("boxplotSparklineAcceptableStart");
|
|
var acceptableEndValue = getTextValue("boxplotSparklineAcceptableEnd");
|
|
var colorValue = getBackgroundColor("boxplotSparklineColorScheme");
|
|
var styleValue = getDropDownValue("boxplotSparklineStyleType");
|
|
var verticalValue = getCheckValue("boxplotSparklineVertical");
|
|
|
|
var boxplotClassStr = boxPlotClassValue ? "\"" + boxPlotClassValue + "\"" : null;
|
|
var colorStr = colorValue ? "\"" + colorValue + "\"" : null;
|
|
var paraPool = [
|
|
pointsValue,
|
|
boxplotClassStr,
|
|
showAverageValue,
|
|
scaleStartValue,
|
|
scaleEndValue,
|
|
acceptableStartValue,
|
|
acceptableEndValue,
|
|
colorStr,
|
|
styleValue,
|
|
verticalValue
|
|
];
|
|
var params = formatFormula(paraPool);
|
|
var formula = "=BOXPLOTSPARKLINE(" + params + ")";
|
|
setFormulaSparkline(formula);
|
|
updateFormulaBar();
|
|
}
|
|
|
|
function applyBulletSparklineSetting() {
|
|
var measureValue = getTextValue("bulletSparklineMeasure");
|
|
var targetValue = getTextValue("bulletSparklineTarget");
|
|
var maxiValue = getTextValue("bulletSparklineMaxi");
|
|
var goodValue = getTextValue("bulletSparklineGood");
|
|
var badValue = getTextValue("bulletSparklineBad");
|
|
var forecastValue = getTextValue("bulletSparklineForecast");
|
|
var tickunitValue = getTextValue("bulletSparklineTickUnit");
|
|
var colorSchemeValue = getBackgroundColor("bulletSparklineColorScheme");
|
|
var verticalValue = getCheckValue("bulletSparklineVertical");
|
|
|
|
var colorSchemeString = colorSchemeValue ? "\"" + colorSchemeValue + "\"" : null;
|
|
var paraPool = [
|
|
measureValue,
|
|
targetValue,
|
|
maxiValue,
|
|
goodValue,
|
|
badValue,
|
|
forecastValue,
|
|
tickunitValue,
|
|
colorSchemeString,
|
|
verticalValue
|
|
];
|
|
|
|
var params = formatFormula(paraPool);
|
|
var formula = "=BULLETSPARKLINE(" + params + ")";
|
|
var sheet = spread.getActiveSheet();
|
|
var sels = sheet.getSelections();
|
|
setFormulaSparkline(formula);
|
|
updateFormulaBar();
|
|
}
|
|
|
|
function applyCascadeSparklineSetting() {
|
|
var pointsRangeValue = getTextValue("cascadeSparklinePointsRange");
|
|
var pointIndexValue = getTextValue("cascadeSparklinePointIndex");
|
|
var labelsRangeValue = getTextValue("cascadeSparklineLabelsRange");
|
|
var minimumValue = getTextValue("cascadeSparklineMinimum");
|
|
var maximumValue = getTextValue("cascadeSparklineMaximum");
|
|
var colorPositiveValue = getBackgroundColor("cascadeSparklinePositiveColor");
|
|
var colorNegativeValue = getBackgroundColor("cascadeSparklineNegativeColor");
|
|
var verticalValue = getCheckValue("cascadeSparklineVertical");
|
|
|
|
var colorPositiveStr = colorPositiveValue ? "\"" + colorPositiveValue + "\"" : null;
|
|
var colorNegativeStr = colorNegativeValue ? "\"" + colorNegativeValue + "\"" : null;
|
|
paraPool = [
|
|
pointsRangeValue,
|
|
pointIndexValue,
|
|
labelsRangeValue,
|
|
minimumValue,
|
|
maximumValue,
|
|
colorPositiveStr,
|
|
colorNegativeStr,
|
|
verticalValue
|
|
];
|
|
|
|
var params = formatFormula(paraPool);
|
|
var formula = "=CASCADESPARKLINE(" + params + ")";
|
|
setFormulaSparkline(formula);
|
|
updateFormulaBar();
|
|
}
|
|
|
|
function applyCompatibleSparklineSetting() {
|
|
var data = getTextValue("compatibleSparklineData");
|
|
var dataOrientation = getDropDownValue("dataOrientationType");
|
|
var dateAxisData = getTextValue("compatibleSparklineDateAxisData");
|
|
var dateAxisOrientation = getDropDownValue("dateAxisOrientationType");
|
|
if (dateAxisOrientation === undefined) {
|
|
dateAxisOrientation = "";
|
|
}
|
|
|
|
var sparklineSetting = {}, minAxisType, maxAxisType;
|
|
sparklineSetting.displayEmptyCellsAs = getDropDownValue("emptyCellDisplayType");
|
|
sparklineSetting.displayHidden = getCheckValue("showDataInHiddenRowOrColumn");
|
|
sparklineSetting.showFirst = getCheckValue("compatibleSparklineShowFirst");
|
|
sparklineSetting.showLast = getCheckValue("compatibleSparklineShowLast");
|
|
sparklineSetting.showHigh = getCheckValue("compatibleSparklineShowHigh");
|
|
sparklineSetting.showLow = getCheckValue("compatibleSparklineShowLow");
|
|
sparklineSetting.showNegative = getCheckValue("compatibleSparklineShowNegative");
|
|
sparklineSetting.showMarkers = getCheckValue("compatibleSparklineShowMarkers");
|
|
minAxisType = getDropDownValue("minAxisType");
|
|
sparklineSetting.minAxisType = Sparklines.SparklineAxisMinMax[minAxisType];
|
|
sparklineSetting.manualMin = getTextValue("manualMin");
|
|
maxAxisType = getDropDownValue("maxAxisType");
|
|
sparklineSetting.maxAxisType = Sparklines.SparklineAxisMinMax[maxAxisType];
|
|
sparklineSetting.manualMax = getTextValue("manualMax");
|
|
sparklineSetting.rightToLeft = getCheckValue("rightToLeft");
|
|
sparklineSetting.displayXAxis = getCheckValue("displayXAxis");
|
|
|
|
sparklineSetting.negativeColor = getBackgroundColor("compatibleSparklineNegativeColor");
|
|
sparklineSetting.markersColor = getBackgroundColor("compatibleSparklineMarkersColor");
|
|
sparklineSetting.axisColor = getBackgroundColor("compatibleSparklineAxisColor");
|
|
sparklineSetting.seriesColor = getBackgroundColor("compatibleSparklineSeriesColor");
|
|
sparklineSetting.highMarkerColor = getBackgroundColor("compatibleSparklineHighMarkerColor");
|
|
sparklineSetting.lowMarkerColor = getBackgroundColor("compatibleSparklineLowMarkerColor");
|
|
sparklineSetting.firstMarkerColor = getBackgroundColor("compatibleSparklineFirstMarkerColor");
|
|
sparklineSetting.lastMarkerColor = getBackgroundColor("compatibleSparklineLastMarkerColor");
|
|
sparklineSetting.lineWeight = getTextValue("compatibleSparklineLastLineWeight");
|
|
|
|
var settingArray = [];
|
|
for (var item in sparklineSetting) {
|
|
if (sparklineSetting[item] !== undefined && sparklineSetting[item] !== "") {
|
|
settingArray.push(item + ":" + sparklineSetting[item]);
|
|
}
|
|
}
|
|
var settingString = "";
|
|
if (settingArray.length > 0) {
|
|
settingString = "\"{" + settingArray.join(",") + "}\"";
|
|
}
|
|
|
|
var formula = "";
|
|
if (settingString !== "") {
|
|
formula = "=" + sparklineName + "(" + data + "," + dataOrientation +
|
|
"," + dateAxisData + "," + dateAxisOrientation + "," + settingString + ")";
|
|
}
|
|
else {
|
|
if (dateAxisOrientation !== "") {
|
|
formula = "=" + sparklineName + "(" + data + "," + dataOrientation +
|
|
"," + dateAxisData + "," + dateAxisOrientation + ")";
|
|
}
|
|
else {
|
|
if (dateAxisData !== "") {
|
|
formula = "=" + sparklineName + "(" + data + "," + dataOrientation +
|
|
"," + dateAxisData + ")";
|
|
}
|
|
else {
|
|
formula = "=" + sparklineName + "(" + data + "," + dataOrientation + ")";
|
|
}
|
|
}
|
|
}
|
|
|
|
setFormulaSparkline(formula);
|
|
updateFormulaBar();
|
|
}
|
|
|
|
function applyScatterSparklineSetting() {
|
|
var paraPool = [];
|
|
var inputList = ["scatterSparklinePoints1", "scatterSparklinePoints2", "scatterSparklineMinX", "scatterSparklineMaxX",
|
|
"scatterSparklineMinY", "scatterSparklineMaxY", "scatterSparklineHLine", "scatterSparklineVLine",
|
|
"scatterSparklineXMinZone", "scatterSparklineXMaxZone", "scatterSparklineYMinZone", "scatterSparklineYMaxZone"];
|
|
for (var i = 0; i < inputList.length; i++) {
|
|
var textValue = getTextValue(inputList[i]);
|
|
paraPool.push(textValue);
|
|
}
|
|
var tags = getCheckValue("scatterSparklineTags");
|
|
var drawSymbol = getCheckValue("scatterSparklineDrawSymbol");
|
|
var drawLines = getCheckValue("scatterSparklineDrawLines");
|
|
var color1 = getBackgroundColor("scatterSparklineColor1");
|
|
var color2 = getBackgroundColor("scatterSparklineColor2");
|
|
var dashLine = getCheckValue("scatterSparklineDashLine");
|
|
|
|
color1 = color1 ? "\"" + color1 + "\"" : null;
|
|
color2 = color2 ? "\"" + color2 + "\"" : null;
|
|
|
|
paraPool.push(tags);
|
|
paraPool.push(drawSymbol);
|
|
paraPool.push(drawLines);
|
|
paraPool.push(color1);
|
|
paraPool.push(color2);
|
|
paraPool.push(dashLine);
|
|
var params = formatFormula(paraPool);
|
|
var formula = "=SCATTERSPARKLINE(" + params + ")";
|
|
setFormulaSparkline(formula);
|
|
updateFormulaBar();
|
|
|
|
}
|
|
|
|
function applyHbarSparklineSetting() {
|
|
var paraPool = [];
|
|
var value = getTextValue("hbarSparklineValue");
|
|
var colorScheme = getBackgroundColor("hbarSparklineColorScheme");
|
|
|
|
colorScheme = "\"" + colorScheme + "\"";
|
|
paraPool.push(value);
|
|
paraPool.push(colorScheme);
|
|
var params = formatFormula(paraPool);
|
|
var formula = "=HBARSPARKLINE(" + params + ")";
|
|
setFormulaSparkline(formula);
|
|
updateFormulaBar();
|
|
}
|
|
|
|
function applyVbarSparklineSetting() {
|
|
var paraPool = [];
|
|
var value = getTextValue("vbarSparklineValue");
|
|
var colorScheme = getBackgroundColor("vbarSparklineColorScheme");
|
|
|
|
colorScheme = "\"" + colorScheme + "\"";
|
|
paraPool.push(value);
|
|
paraPool.push(colorScheme);
|
|
var params = formatFormula(paraPool);
|
|
var formula = "=VBARSPARKLINE(" + params + ")";
|
|
setFormulaSparkline(formula);
|
|
updateFormulaBar();
|
|
}
|
|
|
|
function applyParetoSparklineSetting() {
|
|
var pointsRangeValue = getTextValue("paretoSparklinePoints");
|
|
var pointIndexValue = getTextValue("paretoSparklinePointIndex");
|
|
var colorRangeValue = getTextValue("paretoSparklineColorRange");
|
|
var targetValue = getTextValue("paretoSparklineTarget");
|
|
var target2Value = getTextValue("paretoSparklineTarget2");
|
|
var highlightPositionValue = getTextValue("paretoSparklineHighlightPosition");
|
|
var labelValue = getDropDownValue("paretoLabelType");
|
|
var verticalValue = getCheckValue("paretoSparklineVertical");
|
|
var paraPool = [
|
|
pointsRangeValue,
|
|
pointIndexValue,
|
|
colorRangeValue,
|
|
targetValue,
|
|
target2Value,
|
|
highlightPositionValue,
|
|
labelValue,
|
|
verticalValue
|
|
];
|
|
var params = formatFormula(paraPool);
|
|
var formula = "=PARETOSPARKLINE(" + params + ")";
|
|
setFormulaSparkline(formula);
|
|
updateFormulaBar();
|
|
}
|
|
|
|
function applySpreadSparklineSetting() {
|
|
var pointsValue = getTextValue("spreadSparklinePoints");
|
|
var showAverageValue = getCheckValue("spreadSparklineShowAverage");
|
|
var scaleStartValue = getTextValue("spreadSparklineScaleStart");
|
|
var scaleEndValue = getTextValue("spreadSparklineScaleEnd");
|
|
var styleValue = getDropDownValue("spreadSparklineStyleType");
|
|
var colorSchemeValue = getBackgroundColor("spreadSparklineColorScheme");
|
|
var verticalValue = getCheckValue("spreadSparklineVertical");
|
|
|
|
var colorSchemeString = colorSchemeValue ? "\"" + colorSchemeValue + "\"" : null;
|
|
var paraPool = [
|
|
pointsValue,
|
|
showAverageValue,
|
|
scaleStartValue,
|
|
scaleEndValue,
|
|
styleValue,
|
|
colorSchemeString,
|
|
verticalValue
|
|
];
|
|
var params = formatFormula(paraPool);
|
|
var formula = "=SPREADSPARKLINE(" + params + ")";
|
|
setFormulaSparkline(formula);
|
|
updateFormulaBar();
|
|
}
|
|
|
|
function applyStackedSparklineSetting() {
|
|
var pointsValue = getTextValue("stackedSparklinePoints");
|
|
var colorRangeValue = getTextValue("stackedSparklineColorRange");
|
|
var labelRangeValue = getTextValue("stackedSparklineLabelRange");
|
|
var maximumValue = getNumberValue("stackedSparklineMaximum");
|
|
var targetRedValue = getNumberValue("stackedSparklineTargetRed");
|
|
var targetGreenValue = getNumberValue("stackedSparklineTargetGreen");
|
|
var targetBlueValue = getNumberValue("stackedSparklineTargetBlue");
|
|
var targetYellowValue = getNumberValue("stackedSparklineTargetYellow");
|
|
var colorValue = getBackgroundColor("stackedSparklineColor");
|
|
var highlightPositionValue = getNumberValue("stackedSparklineHighlightPosition");
|
|
var verticalValue = getCheckValue("stackedSparklineVertical");
|
|
var textOrientationValue = getDropDownValue("stackedSparklineTextOrientation");
|
|
var textSizeValue = getNumberValue("stackedSparklineTextSize");
|
|
|
|
var colorString = colorValue ? "\"" + colorValue + "\"" : null;
|
|
var paraPool = [
|
|
pointsValue,
|
|
colorRangeValue,
|
|
labelRangeValue,
|
|
maximumValue,
|
|
targetRedValue,
|
|
targetGreenValue,
|
|
targetBlueValue,
|
|
targetYellowValue,
|
|
colorString,
|
|
highlightPositionValue,
|
|
verticalValue,
|
|
textOrientationValue,
|
|
textSizeValue
|
|
];
|
|
var params = formatFormula(paraPool);
|
|
var formula = "=STACKEDSPARKLINE(" + params + ")";
|
|
setFormulaSparkline(formula);
|
|
updateFormulaBar();
|
|
}
|
|
|
|
function applyVariSparklineSetting() {
|
|
var varianceValue = getTextValue("variSparklineVariance");
|
|
var referenceValue = getTextValue("variSparklineReference");
|
|
var miniValue = getTextValue("variSparklineMini");
|
|
var maxiValue = getTextValue("variSparklineMaxi");
|
|
var markValue = getTextValue("variSparklineMark");
|
|
var tickunitValue = getTextValue("variSparklineTickUnit");
|
|
var colorPositiveValue = getBackgroundColor("variSparklineColorPositive");
|
|
var colorNegativeValue = getBackgroundColor("variSparklineColorNegative");
|
|
var legendValue = getCheckValue("variSparklineLegend");
|
|
var verticalValue = getCheckValue("variSparklineVertical");
|
|
|
|
var colorPositiveStr = colorPositiveValue ? "\"" + colorPositiveValue + "\"" : null;
|
|
var colorNegativeStr = colorNegativeValue ? "\"" + colorNegativeValue + "\"" : null;
|
|
var paraPool = [
|
|
varianceValue,
|
|
referenceValue,
|
|
miniValue,
|
|
maxiValue,
|
|
markValue,
|
|
tickunitValue,
|
|
legendValue,
|
|
colorPositiveStr,
|
|
colorNegativeStr,
|
|
verticalValue
|
|
];
|
|
var params = formatFormula(paraPool);
|
|
var formula = "=VARISPARKLINE(" + params + ")";
|
|
setFormulaSparkline(formula);
|
|
updateFormulaBar();
|
|
}
|
|
|
|
function applyMonthSparklineSetting() {
|
|
var dataRangeStr = getTextValue("monthSparklineData");
|
|
var year = getTextValue("monthSparklineYear");
|
|
var month = getTextValue("monthSparklineMonth");
|
|
var emptyColor = getBackgroundColor("monthSparklineEmptyColor");
|
|
var startColor = getBackgroundColor("monthSparklineStartColor");
|
|
var middleColor = getBackgroundColor("monthSparklineMiddleColor");
|
|
var endColor = getBackgroundColor("monthSparklineEndColor");
|
|
var colorRangeStr = getTextValue("monthSparklineColorRange");
|
|
var formulaStr;
|
|
if (!colorRangeStr) {
|
|
formulaStr = "=" + "MONTHSPARKLINE" + "(" + year + "," + month + "," + dataRangeStr + "," + parseSparklineColorOptions(emptyColor) + "," + parseSparklineColorOptions(startColor) + "," + parseSparklineColorOptions(middleColor) + "," + parseSparklineColorOptions(endColor) + ")";
|
|
} else {
|
|
formulaStr = "=" + "MONTHSPARKLINE" + "(" + year + "," + month + "," + dataRangeStr + "," + colorRangeStr + ")";
|
|
}
|
|
setFormulaSparkline(formulaStr);
|
|
updateFormulaBar();
|
|
}
|
|
|
|
function applyYearSparklineSetting() {
|
|
var dataRangeStr = getTextValue("yearSparklineData");
|
|
var year = getTextValue("yearSparklineYear");
|
|
var emptyColor = getBackgroundColor("yearSparklineEmptyColor");
|
|
var startColor = getBackgroundColor("yearSparklineStartColor");
|
|
var middleColor = getBackgroundColor("yearSparklineMiddleColor");
|
|
var endColor = getBackgroundColor("yearSparklineEndColor");
|
|
var colorRangeStr = getTextValue("yearSparklineColorRange");
|
|
var formulaStr;
|
|
if (!colorRangeStr) {
|
|
formulaStr = "=" + "YEARSPARKLINE" + "(" + year + "," + dataRangeStr + "," + parseSparklineColorOptions(emptyColor) + "," + parseSparklineColorOptions(startColor) + "," + parseSparklineColorOptions(middleColor) + "," + parseSparklineColorOptions(endColor) + ")";
|
|
} else {
|
|
formulaStr = "=" + "YEARSPARKLINE" + "(" + year + "," + dataRangeStr + "," + colorRangeStr + ")";
|
|
}
|
|
setFormulaSparkline(formulaStr);
|
|
updateFormulaBar();
|
|
}
|
|
|
|
function applyPieSparklineSetting() {
|
|
var paraPool = [];
|
|
var range = getTextValue("pieSparklinePercentage");
|
|
paraPool.push(range);
|
|
|
|
$("#pieSparklineColorContainer").find(".color-view").each(function () {
|
|
var color = "\"" + $(this).css("background-color") + "\"";
|
|
paraPool.push(color);
|
|
});
|
|
|
|
var params = formatFormula(paraPool);
|
|
var formula = "=PIESPARKLINE(" + params + ")";
|
|
setFormulaSparkline(formula);
|
|
updateFormulaBar();
|
|
}
|
|
// Sparkline related items (end)
|
|
|
|
// Zoom related items
|
|
function processZoomSetting(value, title) {
|
|
if (typeof value === 'number') {
|
|
spread.getActiveSheet().zoom(value);
|
|
}
|
|
else {
|
|
console.log("processZoomSetting not process with ", value, title);
|
|
}
|
|
}
|
|
// Zoom related items (end)
|
|
|
|
function getResource(key) {
|
|
key = key.replace(/\./g, "_");
|
|
|
|
return resourceMap[key];
|
|
}
|
|
|
|
function getResourceMap(src) {
|
|
function isObject(item) {
|
|
return typeof item === "object";
|
|
}
|
|
|
|
function addResourceMap(map, obj, keys) {
|
|
if (isObject(obj)) {
|
|
for (var p in obj) {
|
|
var cur = obj[p];
|
|
|
|
addResourceMap(map, cur, keys.concat(p));
|
|
}
|
|
} else {
|
|
var key = keys.join("_");
|
|
map[key] = obj;
|
|
}
|
|
}
|
|
|
|
addResourceMap(resourceMap, src, []);
|
|
}
|
|
|
|
$(document).ready(function () {
|
|
function localizeUI() {
|
|
function getLocalizeString(text) {
|
|
var matchs = text.match(/(?:(@[\w\d\.]*@))/g);
|
|
|
|
if (matchs) {
|
|
matchs.forEach(function (item) {
|
|
var s = getResource(item.replace(/[@]/g, ""));
|
|
text = text.replace(item, s);
|
|
});
|
|
}
|
|
|
|
return text;
|
|
}
|
|
|
|
$(".localize").each(function () {
|
|
var text = $(this).text();
|
|
|
|
$(this).text(getLocalizeString(text));
|
|
});
|
|
|
|
$(".localize-tooltip").each(function () {
|
|
var text = $(this).prop("title");
|
|
|
|
$(this).prop("title", getLocalizeString(text));
|
|
});
|
|
|
|
$(".localize-value").each(function () {
|
|
var text = $(this).attr("value");
|
|
|
|
$(this).attr("value", getLocalizeString(text));
|
|
});
|
|
}
|
|
|
|
getResourceMap(uiResource);
|
|
|
|
localizeUI();
|
|
|
|
spread = new spreadNS.Workbook($("#ss")[0], {tabStripRatio: 0.88});
|
|
excelIO = new GC.Spread.Excel.IO();
|
|
getThemeColor();
|
|
initSpread();
|
|
|
|
//Change default allowCellOverflow the same with Excel.
|
|
spread.sheets.forEach(function (sheet) {
|
|
sheet.options.allowCellOverflow = true;
|
|
});
|
|
|
|
//window resize adjust
|
|
$(".insp-container").draggable();
|
|
checkMediaSize();
|
|
screenAdoption();
|
|
var resizeTimeout = null;
|
|
$(window).bind("resize", function () {
|
|
if (resizeTimeout === null) {
|
|
resizeTimeout = setTimeout(function () {
|
|
screenAdoption();
|
|
clearTimeout(resizeTimeout);
|
|
resizeTimeout = null;
|
|
}, 100);
|
|
}
|
|
});
|
|
|
|
doPrepareWork();
|
|
|
|
$("ul.dropdown-menu>li>a").click(function () {
|
|
var value = $(this).text(),
|
|
$divhost = $(this).parents("div.btn-group"),
|
|
groupName = $divhost.data("name"),
|
|
sheet = spread.getActiveSheet();
|
|
|
|
$divhost.find("button:first").text(value);
|
|
|
|
switch (groupName) {
|
|
case "fontname":
|
|
setStyleFont(sheet, "font-family", false, [value], value);
|
|
break;
|
|
|
|
case "fontsize":
|
|
setStyleFont(sheet, "font-size", false, [value], value);
|
|
break;
|
|
}
|
|
});
|
|
|
|
var toolbarHeight = $("#toolbar").height(),
|
|
formulaboxDefaultHeight = $("#formulabox").outerHeight(true),
|
|
verticalSplitterOriginalTop = formulaboxDefaultHeight - $("#verticalSplitter").height();
|
|
$("#verticalSplitter").draggable({
|
|
axis: "y", // vertical only
|
|
containment: "#inner-content-container", // limit in specified range
|
|
scroll: false, // not allow container scroll
|
|
zIndex: 100, // set to move on top
|
|
stop: function (event, ui) {
|
|
var $this = $(this),
|
|
top = $this.offset().top,
|
|
offset = top - toolbarHeight - verticalSplitterOriginalTop;
|
|
|
|
// limit min size
|
|
if (offset < 0) {
|
|
offset = 0;
|
|
}
|
|
// adjust size of related items
|
|
$("#formulabox").css({height: formulaboxDefaultHeight + offset});
|
|
var height = $("div.insp-container").height() - $("#formulabox").outerHeight(true);
|
|
$("#controlPanel").height(height);
|
|
$("#ss").height(height);
|
|
spread.refresh();
|
|
// reset
|
|
$(this).css({top: 0});
|
|
}
|
|
});
|
|
|
|
attachEvents();
|
|
|
|
$("#download").on("click", function (e) {
|
|
if (!!parent && parent.document.getElementById("saveBtn")) {
|
|
parent.document.getElementById("saveBtn").click();
|
|
}
|
|
return false;
|
|
});
|
|
$("#search").on("click", function (e) {
|
|
if (!!parent && parent.document.getElementById("searchField")) {
|
|
var temp = parent.document.getElementById("searchField");
|
|
if (temp.className .indexOf(" layui-hide")>-1) {
|
|
parent.document.getElementById("searchField").className = temp.className.replace(' layui-hide','');
|
|
}
|
|
else {
|
|
parent.document.getElementById("searchField").className = temp.className+(" layui-hide");
|
|
}
|
|
}
|
|
return false;
|
|
});
|
|
spread.focus();
|
|
|
|
syncSheetPropertyValues();
|
|
syncSpreadPropertyValues();
|
|
|
|
onCellSelected();
|
|
|
|
updatePositionBox(spread.getActiveSheet());
|
|
|
|
//fix bug 220484
|
|
if (isIE) {
|
|
$("#formulabox").css('padding', 0);
|
|
}
|
|
});
|
|
|
|
|
|
function getHitTest(pageX, pageY, sheet) {
|
|
var offset = $("#ss").offset(),
|
|
x = pageX - offset.left,
|
|
y = pageY - offset.top;
|
|
return sheet.hitTest(x, y);
|
|
}
|
|
|
|
// import / export related items
|
|
function processExportAction($dropdown, action) {
|
|
switch (action) {
|
|
case "exportJson":
|
|
exportToJSON();
|
|
break;
|
|
case "exportExcel":
|
|
exportToExcel();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
hideExportActionDropDown();
|
|
}
|
|
|
|
function importFile(file) {
|
|
var fileName = !!file.name ? file.name : file;
|
|
var index = fileName.lastIndexOf('.');
|
|
var fileExt = fileName.substr(index + 1).toLowerCase();
|
|
if (fileExt === 'json' || fileExt === 'ssjson') {
|
|
importSpreadFromJSON(file);
|
|
} else if (fileExt === 'xlsx') {
|
|
importSpreadFromExcel(file);
|
|
} else {
|
|
alert(getResource("messages.invalidImportFile"));
|
|
}
|
|
}
|
|
|
|
function importSpreadFromExcel(file, options) {
|
|
function processPasswordDialog() {
|
|
importSpreadFromExcel(file, {password: getTextValue("txtPassword")});
|
|
setTextValue("txtPassword", "");
|
|
}
|
|
|
|
var PASSWORD_DIALOG_WIDTH = 300;
|
|
excelIO.open(file, function (json) {
|
|
importJson(json);
|
|
}, function (e) {
|
|
if (e.errorCode === 0 || e.errorCode === 1) {
|
|
alert(getResource("messages.invalidImportFile"));
|
|
} else if (e.errorCode === 2) {
|
|
$("#passwordError").hide();
|
|
showModal(uiResource.passwordDialog.title, PASSWORD_DIALOG_WIDTH, $("#passwordDialog").children(), processPasswordDialog);
|
|
} else if (e.errorCode === 3) {
|
|
$("#passwordError").show();
|
|
showModal(uiResource.passwordDialog.title, PASSWORD_DIALOG_WIDTH, $("#passwordDialog").children(), processPasswordDialog);
|
|
}
|
|
}, options);
|
|
}
|
|
|
|
function importSpreadFromJSON(file) {
|
|
function importSuccessCallback(responseText) {
|
|
var spreadJson = JSON.parse(responseText);
|
|
importJson(spreadJson);
|
|
}
|
|
|
|
var reader = new FileReader();
|
|
reader.onload = function () {
|
|
importSuccessCallback(this.result);
|
|
};
|
|
reader.readAsText(file);
|
|
return true;
|
|
}
|
|
|
|
function importJson(spreadJson) {
|
|
function updateActiveCells() {
|
|
for (var i = 0; i < spread.getSheetCount(); i++) {
|
|
var sheet = spread.getSheet(i);
|
|
columnIndex = sheet.getActiveColumnIndex(),
|
|
rowIndex = sheet.getActiveRowIndex();
|
|
if (columnIndex !== undefined && rowIndex !== undefined) {
|
|
spread.getSheet(i).setActiveCell(rowIndex, columnIndex);
|
|
} else {
|
|
spread.getSheet(i).setActiveCell(0, 0);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (spreadJson.version && spreadJson.sheets) {
|
|
spread.unbindAll();
|
|
spread.fromJSON(spreadJson);
|
|
attachSpreadEvents(true);
|
|
updateActiveCells();
|
|
spread.focus();
|
|
fbx.workbook(spread);
|
|
onCellSelected();
|
|
syncSpreadPropertyValues();
|
|
syncSheetPropertyValues();
|
|
} else {
|
|
alert(getResource("messages.invalidImportFile"));
|
|
}
|
|
}
|
|
|
|
function getFileName() {
|
|
function to2DigitsString(num) {
|
|
return ("0" + num).substr(-2);
|
|
}
|
|
|
|
var date = new Date();
|
|
return [
|
|
"export",
|
|
date.getFullYear(), to2DigitsString(date.getMonth() + 1), to2DigitsString(date.getDate()),
|
|
to2DigitsString(date.getHours()), to2DigitsString(date.getMinutes()), to2DigitsString(date.getSeconds())
|
|
].join("");
|
|
}
|
|
|
|
function exportToJSON() {
|
|
var json = spread.toJSON({includeBindingSource: true}),
|
|
text = JSON.stringify(json);
|
|
var fileName = getFileName();
|
|
if (isSafari) {
|
|
showModal(uiResource.toolBar.downloadTitle, DOWNLOAD_DIALOG_WIDTH, $("#downloadDialog").children(), function () {
|
|
$("#downloadDialog").hide();
|
|
});
|
|
var link = $("#download");
|
|
link[0].href = "data:text/plain;" + text;
|
|
} else {
|
|
saveAs(new Blob([text], {type: "text/plain;charset=utf-8"}), fileName + ".json");
|
|
}
|
|
}
|
|
function exportToJSONText() {
|
|
var json = spread.toJSON({ includeBindingSource: true }),
|
|
text = JSON.stringify(json);
|
|
return text;
|
|
}
|
|
function exportToExcel() {
|
|
var fileName = getFileName();
|
|
var json = spread.toJSON({includeBindingSource: true});
|
|
excelIO.save(json, function (blob) {
|
|
if (isSafari) {
|
|
var reader = new FileReader();
|
|
reader.onloadend = function () {
|
|
showModal(uiResource.toolBar.downloadTitle, DOWNLOAD_DIALOG_WIDTH, $("#downloadDialog").children(), function () {
|
|
$("#downloadDialog").hide();
|
|
});
|
|
var link = $("#download");
|
|
link[0].href = reader.result;
|
|
};
|
|
reader.readAsDataURL(blob);
|
|
} else {
|
|
saveAs(blob, fileName + ".xlsx");
|
|
}
|
|
}, function (e) {
|
|
alert(e);
|
|
});
|
|
}
|
|
|
|
// import / export related items (end)
|
|
|
|
// format related items
|
|
function processFormatSetting(name, title) {
|
|
switch (name) {
|
|
case "nullValue":
|
|
name = null;
|
|
case "0.00":
|
|
case "$#,##0.00":
|
|
case "_($* #,##0.00_);_($* (#,##0.00);_($* '-'??_);_(@_)":
|
|
case "m/d/yyyy":
|
|
case "dddd, mmmm dd, yyyy":
|
|
case "h:mm:ss AM/PM":
|
|
case "0%":
|
|
case "# ?/?":
|
|
case "0.00E+00":
|
|
case "@":
|
|
setFormatter(name);
|
|
break;
|
|
|
|
default:
|
|
console.log("processFormatSetting not process with ", name, title);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function setFormatter(value) {
|
|
var sheet = spread.getActiveSheet();
|
|
execInSelections(sheet, "formatter", function (sheet, row, column) {
|
|
var style = sheet.getStyle(row, column);
|
|
if (!style) {
|
|
style = new spreadNS.Style();
|
|
}
|
|
style.formatter = value;
|
|
sheet.setStyle(row, column, style);
|
|
});
|
|
}
|
|
|
|
function execInSelections(sheet, styleProperty, func) {
|
|
var selections = sheet.getSelections();
|
|
for (var k = 0; k < selections.length; k++) {
|
|
var selection = selections[k];
|
|
var col = selection.col, row = selection.row,
|
|
rowCount = selection.rowCount, colCount = selection.colCount;
|
|
if ((col === -1 || row === -1) && styleProperty) {
|
|
var style, r, c;
|
|
// whole sheet was selected, need set row / column' style one by one
|
|
if (col === -1 && row === -1) {
|
|
for (r = 0; r < rowCount; r++) {
|
|
if ((style = sheet.getStyle(r, -1)) && style[styleProperty] !== undefined) {
|
|
func(sheet, r, -1);
|
|
}
|
|
}
|
|
for (c = 0; c < colCount; c++) {
|
|
if ((style = sheet.getStyle(-1, c)) && style[styleProperty] !== undefined) {
|
|
func(sheet, -1, c);
|
|
}
|
|
}
|
|
}
|
|
// Get actual range for whole rows / columns / sheet selection
|
|
if (col === -1) {
|
|
col = 0;
|
|
}
|
|
if (row === -1) {
|
|
row = 0;
|
|
}
|
|
// set to each cell with style that in the adjusted selection range
|
|
for (var i = 0; i < rowCount; i++) {
|
|
r = row + i;
|
|
for (var j = 0; j < colCount; j++) {
|
|
c = col + j;
|
|
if ((style = sheet.getStyle(r, c)) && style[styleProperty] !== undefined) {
|
|
func(sheet, r, c);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (selection.col == -1 && selection.row == -1) {
|
|
func(sheet, -1, -1);
|
|
}
|
|
else if (selection.row == -1) {
|
|
for (var i = 0; i < selection.colCount; i++) {
|
|
func(sheet, -1, selection.col + i);
|
|
}
|
|
}
|
|
else if (selection.col == -1) {
|
|
for (var i = 0; i < selection.rowCount; i++) {
|
|
func(sheet, selection.row + i, -1);
|
|
}
|
|
}
|
|
else {
|
|
for (var i = 0; i < selection.rowCount; i++) {
|
|
for (var j = 0; j < selection.colCount; j++) {
|
|
func(sheet, selection.row + i, selection.col + j);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// format related items (end)
|
|
|
|
// dialog related items
|
|
function showModal(title, width, content, callback) {
|
|
var $dialog = $("#modalTemplate"),
|
|
$body = $(".modal-body", $dialog);
|
|
|
|
$(".modal-title", $dialog).text(title);
|
|
$dialog.data("content-parent", content.parent());
|
|
$body.append(content);
|
|
|
|
// remove old and add new event handler since this modal is common used (reused)
|
|
$("#dialogConfirm").off("click");
|
|
$("#dialogConfirm").on("click", function () {
|
|
var result = callback();
|
|
|
|
// return an object with { canceled: true } to tell not close the modal, otherwise close the modal
|
|
if (!(result && result.canceled)) {
|
|
$("#modalTemplate").modal("hide");
|
|
}
|
|
});
|
|
|
|
if (!$dialog.data("event-attached")) {
|
|
$dialog.on("hidden.bs.modal", function () {
|
|
var $originalParent = $(this).data("content-parent");
|
|
if ($originalParent) {
|
|
$originalParent.append($(".modal-body", this).children());
|
|
}
|
|
});
|
|
$dialog.data("event-attached", true);
|
|
}
|
|
|
|
// set width of the dialog
|
|
$(".modal-dialog", $dialog).css({width: width});
|
|
|
|
$dialog.modal("show");
|
|
}
|
|
|
|
// dialog related items (end)
|
|
|
|
// clear related items
|
|
function processClearAction($dropdown, action) {
|
|
switch (action) {
|
|
case "clearAll":
|
|
doClear(255, true); // Laze mark all types with 255 (0xFF)
|
|
break;
|
|
case "clearFormat":
|
|
doClear(spreadNS.StorageType.style, true);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
hideClearActionDropDown();
|
|
}
|
|
|
|
function clearSpansInSelection(sheet, selection) {
|
|
if (sheet && selection) {
|
|
var ranges = [],
|
|
row = selection.row, col = selection.col,
|
|
rowCount = selection.rowCount, colCount = selection.colCount;
|
|
|
|
sheet.getSpans().forEach(function (range) {
|
|
if (range.intersect(row, col, rowCount, colCount)) {
|
|
ranges.push(range);
|
|
}
|
|
});
|
|
ranges.forEach(function (range) {
|
|
sheet.removeSpan(range.row, range.col);
|
|
});
|
|
}
|
|
}
|
|
|
|
function doClear(types, clearSpans) {
|
|
var sheet = spread.getActiveSheet(),
|
|
selections = sheet.getSelections();
|
|
|
|
selections.forEach(function (selection) {
|
|
sheet.clear(selection.row, selection.col, selection.rowCount, selection.colCount, spreadNS.SheetArea.viewport, types);
|
|
if (clearSpans) {
|
|
clearSpansInSelection(sheet, selection);
|
|
}
|
|
});
|
|
}
|
|
|
|
// clear related items (end)
|
|
|
|
// positionbox related items
|
|
function getSelectedRangeString(sheet, range) {
|
|
var selectionInfo = "",
|
|
rowCount = range.rowCount,
|
|
columnCount = range.colCount,
|
|
startRow = range.row + 1,
|
|
startColumn = range.col + 1;
|
|
|
|
if (rowCount == 1 && columnCount == 1) {
|
|
selectionInfo = getCellPositionString(sheet, startRow, startColumn);
|
|
}
|
|
else {
|
|
if (rowCount < 0 && columnCount > 0) {
|
|
selectionInfo = columnCount + "C";
|
|
}
|
|
else if (columnCount < 0 && rowCount > 0) {
|
|
selectionInfo = rowCount + "R";
|
|
}
|
|
else if (rowCount < 0 && columnCount < 0) {
|
|
selectionInfo = sheet.getRowCount() + "R x " + sheet.getColumnCount() + "C";
|
|
}
|
|
else {
|
|
selectionInfo = rowCount + "R x " + columnCount + "C";
|
|
}
|
|
}
|
|
return selectionInfo;
|
|
}
|
|
|
|
function getCellPositionString(sheet, row, column) {
|
|
if (row < 1 || column < 1) {
|
|
return null;
|
|
}
|
|
else {
|
|
var letters = "";
|
|
switch (spread.options.referenceStyle) {
|
|
case spreadNS.ReferenceStyle.a1: // 0
|
|
while (column > 0) {
|
|
var num = column % 26;
|
|
if (num === 0) {
|
|
letters = "Z" + letters;
|
|
column--;
|
|
}
|
|
else {
|
|
letters = String.fromCharCode('A'.charCodeAt(0) + num - 1) + letters;
|
|
}
|
|
column = parseInt((column / 26).toString());
|
|
}
|
|
letters += row.toString();
|
|
break;
|
|
case spreadNS.ReferenceStyle.r1c1: // 1
|
|
letters = "R" + row.toString() + "C" + column.toString();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
return letters;
|
|
}
|
|
}
|
|
|
|
// positionbox related items (end)
|
|
|
|
// theme color related items
|
|
function setThemeColorToSheet(sheet) {
|
|
sheet.suspendPaint();
|
|
|
|
sheet.getCell(2, 3).text("Background 1").themeFont("Body");
|
|
sheet.getCell(2, 4).text("Text 1").themeFont("Body");
|
|
sheet.getCell(2, 5).text("Background 2").themeFont("Body");
|
|
sheet.getCell(2, 6).text("Text 2").themeFont("Body");
|
|
sheet.getCell(2, 7).text("Accent 1").themeFont("Body");
|
|
sheet.getCell(2, 8).text("Accent 2").themeFont("Body");
|
|
sheet.getCell(2, 9).text("Accent 3").themeFont("Body");
|
|
sheet.getCell(2, 10).text("Accent 4").themeFont("Body");
|
|
sheet.getCell(2, 11).text("Accent 5").themeFont("Body");
|
|
sheet.getCell(2, 12).text("Accent 6").themeFont("Body");
|
|
|
|
sheet.getCell(4, 1).value("100").themeFont("Body");
|
|
|
|
sheet.getCell(4, 3).backColor("Background 1");
|
|
sheet.getCell(4, 4).backColor("Text 1");
|
|
sheet.getCell(4, 5).backColor("Background 2");
|
|
sheet.getCell(4, 6).backColor("Text 2");
|
|
sheet.getCell(4, 7).backColor("Accent 1");
|
|
sheet.getCell(4, 8).backColor("Accent 2");
|
|
sheet.getCell(4, 9).backColor("Accent 3");
|
|
sheet.getCell(4, 10).backColor("Accent 4");
|
|
sheet.getCell(4, 11).backColor("Accent 5");
|
|
sheet.getCell(4, 12).backColor("Accent 6");
|
|
|
|
sheet.getCell(5, 1).value("80").themeFont("Body");
|
|
|
|
sheet.getCell(5, 3).backColor("Background 1 80");
|
|
sheet.getCell(5, 4).backColor("Text 1 80");
|
|
sheet.getCell(5, 5).backColor("Background 2 80");
|
|
sheet.getCell(5, 6).backColor("Text 2 80");
|
|
sheet.getCell(5, 7).backColor("Accent 1 80");
|
|
sheet.getCell(5, 8).backColor("Accent 2 80");
|
|
sheet.getCell(5, 9).backColor("Accent 3 80");
|
|
sheet.getCell(5, 10).backColor("Accent 4 80");
|
|
sheet.getCell(5, 11).backColor("Accent 5 80");
|
|
sheet.getCell(5, 12).backColor("Accent 6 80");
|
|
|
|
sheet.getCell(6, 1).value("60").themeFont("Body");
|
|
|
|
sheet.getCell(6, 3).backColor("Background 1 60");
|
|
sheet.getCell(6, 4).backColor("Text 1 60");
|
|
sheet.getCell(6, 5).backColor("Background 2 60");
|
|
sheet.getCell(6, 6).backColor("Text 2 60");
|
|
sheet.getCell(6, 7).backColor("Accent 1 60");
|
|
sheet.getCell(6, 8).backColor("Accent 2 60");
|
|
sheet.getCell(6, 9).backColor("Accent 3 60");
|
|
sheet.getCell(6, 10).backColor("Accent 4 60");
|
|
sheet.getCell(6, 11).backColor("Accent 5 60");
|
|
sheet.getCell(6, 12).backColor("Accent 6 60");
|
|
|
|
sheet.getCell(7, 1).value("40").themeFont("Body");
|
|
|
|
sheet.getCell(7, 3).backColor("Background 1 40");
|
|
sheet.getCell(7, 4).backColor("Text 1 40");
|
|
sheet.getCell(7, 5).backColor("Background 2 40");
|
|
sheet.getCell(7, 6).backColor("Text 2 40");
|
|
sheet.getCell(7, 7).backColor("Accent 1 40");
|
|
sheet.getCell(7, 8).backColor("Accent 2 40");
|
|
sheet.getCell(7, 9).backColor("Accent 3 40");
|
|
sheet.getCell(7, 10).backColor("Accent 4 40");
|
|
sheet.getCell(7, 11).backColor("Accent 5 40");
|
|
sheet.getCell(7, 12).backColor("Accent 6 40");
|
|
|
|
sheet.getCell(8, 1).value("-25").themeFont("Body");
|
|
|
|
sheet.getCell(8, 3).backColor("Background 1 -25");
|
|
sheet.getCell(8, 4).backColor("Text 1 -25");
|
|
sheet.getCell(8, 5).backColor("Background 2 -25");
|
|
sheet.getCell(8, 6).backColor("Text 2 -25");
|
|
sheet.getCell(8, 7).backColor("Accent 1 -25");
|
|
sheet.getCell(8, 8).backColor("Accent 2 -25");
|
|
sheet.getCell(8, 9).backColor("Accent 3 -25");
|
|
sheet.getCell(8, 10).backColor("Accent 4 -25");
|
|
sheet.getCell(8, 11).backColor("Accent 5 -25");
|
|
sheet.getCell(8, 12).backColor("Accent 6 -25");
|
|
|
|
sheet.getCell(9, 1).value("-50").themeFont("Body");
|
|
|
|
sheet.getCell(9, 3).backColor("Background 1 -50");
|
|
sheet.getCell(9, 4).backColor("Text 1 -50");
|
|
sheet.getCell(9, 5).backColor("Background 2 -50");
|
|
sheet.getCell(9, 6).backColor("Text 2 -50");
|
|
sheet.getCell(9, 7).backColor("Accent 1 -50");
|
|
sheet.getCell(9, 8).backColor("Accent 2 -50");
|
|
sheet.getCell(9, 9).backColor("Accent 3 -50");
|
|
sheet.getCell(9, 10).backColor("Accent 4 -50");
|
|
sheet.getCell(9, 11).backColor("Accent 5 -50");
|
|
sheet.getCell(9, 12).backColor("Accent 6 -50");
|
|
sheet.resumePaint();
|
|
}
|
|
|
|
function getColorName(sheet, row, col) {
|
|
var colName = sheet.getCell(2, col).text();
|
|
var rowName = sheet.getCell(row, 1).text();
|
|
return colName + " " + rowName;
|
|
}
|
|
|
|
function getThemeColor() {
|
|
var sheet = spread.getActiveSheet();
|
|
setThemeColorToSheet(sheet); // Set current theme color to sheet
|
|
|
|
var $colorUl = $("#default-theme-color");
|
|
var $themeColorLi, cellBackColor;
|
|
for (var col = 3; col < 13; col++) {
|
|
var row = 4;
|
|
cellBackColor = sheet.getActualStyle(row, col).backColor;
|
|
$themeColorLi = $("<li class=\"color-cell seed-color-column\"></li>");
|
|
$themeColorLi.css("background-color", cellBackColor).attr("data-name", sheet.getCell(2, col).text()).appendTo($colorUl);
|
|
for (row = 5; row < 10; row++) {
|
|
cellBackColor = sheet.getActualStyle(row, col).backColor;
|
|
$themeColorLi = $("<li class=\"color-cell\"></li>");
|
|
$themeColorLi.css("background-color", cellBackColor).attr("data-name", getColorName(sheet, row, col)).appendTo($colorUl);
|
|
}
|
|
}
|
|
|
|
sheet.clear(2, 1, 8, 12, spreadNS.SheetArea.viewport, 255); // Clear sheet theme color
|
|
}
|
|
|
|
// theme color related items (end)
|
|
|
|
// slicer related items
|
|
function processAddSlicer() {
|
|
addTableColumns(); // get table header data from table, and add them to slicer dialog
|
|
|
|
var SLICER_DIALOG_WIDTH = 230; // slicer dialog width
|
|
showModal(uiResource.slicerDialog.insertSlicer, SLICER_DIALOG_WIDTH, $("#insertslicerdialog").children(), addSlicerEvent);
|
|
}
|
|
|
|
function addTableColumns() {
|
|
var table = _activeTable;
|
|
if (!table) {
|
|
return;
|
|
}
|
|
var $slicerContainer = $("#slicer-container");
|
|
$slicerContainer.empty();
|
|
for (var col = 0; col < table.range().colCount; col++) {
|
|
var columnName = table.getColumnName(col);
|
|
var $slicerDiv = $(
|
|
"<div>"
|
|
+ "<div class='insp-row'>"
|
|
+ "<div>"
|
|
+ "<div class='insp-checkbox insp-inline-row'>"
|
|
+ "<div class='button insp-inline-row-item'></div>"
|
|
+ "<div class='text insp-inline-row-item localize'>" + columnName + "</div>"
|
|
+ "</div>"
|
|
+ "</div>"
|
|
+ "</div>"
|
|
+ "</div>");
|
|
$slicerDiv.appendTo($slicerContainer);
|
|
}
|
|
$("#slicer-container .insp-checkbox").click(checkedChanged);
|
|
}
|
|
|
|
function getSlicerName(sheet, columnName) {
|
|
var autoID = 1;
|
|
var newName = columnName;
|
|
while (sheet.slicers.get(newName)) {
|
|
newName = columnName + '_' + autoID;
|
|
autoID++;
|
|
}
|
|
return newName;
|
|
}
|
|
|
|
function addSlicerEvent() {
|
|
var table = _activeTable;
|
|
if (!table) {
|
|
return;
|
|
}
|
|
var checkedColumnIndexArray = [];
|
|
$("#slicer-container div.button").each(function (index) {
|
|
if ($(this).hasClass("checked")) {
|
|
checkedColumnIndexArray.push(index);
|
|
}
|
|
});
|
|
var sheet = spread.getActiveSheet();
|
|
var posX = 100, posY = 200;
|
|
spread.suspendPaint();
|
|
for (var i = 0; i < checkedColumnIndexArray.length; i++) {
|
|
var columnName = table.getColumnName(checkedColumnIndexArray[i]);
|
|
var slicerName = getSlicerName(sheet, columnName);
|
|
var slicer = sheet.slicers.add(slicerName, table.name(), columnName);
|
|
slicer.position(new spreadNS.Point(posX, posY));
|
|
posX = posX + 30;
|
|
posY = posY + 30;
|
|
}
|
|
spread.resumePaint();
|
|
slicer.isSelected(true);
|
|
initSlicerTab();
|
|
}
|
|
|
|
function bindSlicerEvents(sheet, slicer, propertyName) {
|
|
if (!slicer) {
|
|
return;
|
|
}
|
|
if (propertyName === "isSelected") {
|
|
if (slicer.isSelected()) {
|
|
if (sheet.options.protectionOptions.allowEditObjects || !(sheet.options.isProtected && slicer.isLocked())) {
|
|
setActiveTab("slicer");
|
|
initSlicerTab();
|
|
}
|
|
}
|
|
else {
|
|
// setActiveTab("cell");
|
|
|
|
// The events' execution sequence is different between V10 and V9.
|
|
// In V9, EnterCell event will execute after SlicerChanged event. But in V10, SlicerChanged event will execute after EnterCell event.
|
|
// So, when I move focus from table slicer to table cell, table tab will not be active.
|
|
// In this situation, code above should be removed to make table be active.
|
|
}
|
|
}
|
|
else {
|
|
changeSlicerInfo(slicer, propertyName);
|
|
}
|
|
}
|
|
|
|
function initSlicerTab() {
|
|
var sheet = spread.getActiveSheet();
|
|
var selectedSlicers = getSelectedSlicers(sheet);
|
|
if (!selectedSlicers || selectedSlicers.length === 0) {
|
|
return;
|
|
}
|
|
if (selectedSlicers.length > 1) {
|
|
getMultiSlicerSetting(selectedSlicers);
|
|
setTextDisabled("slicerName", true);
|
|
}
|
|
else if (selectedSlicers.length === 1) {
|
|
getSingleSlicerSetting(selectedSlicers[0]);
|
|
setTextDisabled("slicerName", false);
|
|
}
|
|
}
|
|
|
|
function getSingleSlicerSetting(slicer) {
|
|
if (!slicer) {
|
|
return;
|
|
}
|
|
setTextValue("slicerName", slicer.name());
|
|
setTextValue("slicerCaptionName", slicer.captionName());
|
|
setDropDownValue("slicerItemSorting", slicer.sortState());
|
|
setCheckValue("displaySlicerHeader", slicer.showHeader());
|
|
setNumberValue("slicerColumnNumber", slicer.columnCount());
|
|
setNumberValue("slicerButtonWidth", getSlicerItemWidth(slicer.columnCount(), slicer.width()));
|
|
setNumberValue("slicerButtonHeight", slicer.itemHeight());
|
|
if (slicer.dynamicMove()) {
|
|
if (slicer.dynamicSize()) {
|
|
setRadioItemChecked("slicerMoveAndSize", "slicer-move-size");
|
|
}
|
|
else {
|
|
setRadioItemChecked("slicerMoveAndSize", "slicer-move-nosize");
|
|
}
|
|
}
|
|
else {
|
|
setRadioItemChecked("slicerMoveAndSize", "slicer-nomove-size");
|
|
}
|
|
setCheckValue("lockSlicer", slicer.isLocked());
|
|
selectedCurrentSlicerStyle(slicer);
|
|
}
|
|
|
|
function getMultiSlicerSetting(selectedSlicers) {
|
|
if (!selectedSlicers || selectedSlicers.length === 0) {
|
|
return;
|
|
}
|
|
var slicer = selectedSlicers[0];
|
|
var isDisplayHeader = false,
|
|
isSameSortState = true,
|
|
isSameCaptionName = true,
|
|
isSameColumnCount = true,
|
|
isSameItemHeight = true,
|
|
isSameItemWidth = true,
|
|
isSameLocked = true,
|
|
isSameDynamicMove = true,
|
|
isSameDynamicSize = true;
|
|
|
|
var sortState = slicer.sortState(),
|
|
captionName = slicer.captionName(),
|
|
columnCount = slicer.columnCount(),
|
|
itemHeight = slicer.itemHeight(),
|
|
itemWidth = getSlicerItemWidth(columnCount, slicer.width()),
|
|
dynamicMove = slicer.dynamicMove(),
|
|
dynamicSize = slicer.dynamicSize();
|
|
|
|
for (var item in selectedSlicers) {
|
|
var slicer = selectedSlicers[item];
|
|
isDisplayHeader = isDisplayHeader || slicer.showHeader();
|
|
isSameLocked = isSameLocked && slicer.isLocked();
|
|
if (slicer.sortState() !== sortState) {
|
|
isSameSortState = false;
|
|
}
|
|
if (slicer.captionName() !== captionName) {
|
|
isSameCaptionName = false;
|
|
}
|
|
if (slicer.columnCount() !== columnCount) {
|
|
isSameColumnCount = false;
|
|
}
|
|
if (slicer.itemHeight() !== itemHeight) {
|
|
isSameItemHeight = false;
|
|
}
|
|
if (getSlicerItemWidth(slicer.columnCount(), slicer.width()) !== itemWidth) {
|
|
isSameItemWidth = false;
|
|
}
|
|
if (slicer.dynamicMove() !== dynamicMove) {
|
|
isSameDynamicMove = false;
|
|
}
|
|
if (slicer.dynamicSize() !== dynamicSize) {
|
|
isSameDynamicSize = false;
|
|
}
|
|
selectedCurrentSlicerStyle(slicer);
|
|
}
|
|
setTextValue("slicerName", "");
|
|
if (isSameCaptionName) {
|
|
setTextValue("slicerCaptionName", captionName);
|
|
}
|
|
else {
|
|
setTextValue("slicerCaptionName", "");
|
|
}
|
|
if (isSameSortState) {
|
|
setDropDownValue("slicerItemSorting", sortState);
|
|
}
|
|
else {
|
|
setDropDownValue("slicerItemSorting", "");
|
|
}
|
|
setCheckValue("displaySlicerHeader", isDisplayHeader);
|
|
if (isSameDynamicMove && isSameDynamicSize && dynamicMove) {
|
|
if (dynamicSize) {
|
|
setRadioItemChecked("slicerMoveAndSize", "slicer-move-size");
|
|
}
|
|
else {
|
|
setRadioItemChecked("slicerMoveAndSize", "slicer-move-nosize");
|
|
}
|
|
}
|
|
else {
|
|
setRadioItemChecked("slicerMoveAndSize", "slicer-nomove-size");
|
|
}
|
|
if (isSameColumnCount) {
|
|
setNumberValue("slicerColumnNumber", columnCount);
|
|
}
|
|
else {
|
|
setNumberValue("slicerColumnNumber", "");
|
|
}
|
|
if (isSameItemHeight) {
|
|
setNumberValue("slicerButtonHeight", Math.round(itemHeight));
|
|
}
|
|
else {
|
|
setNumberValue("slicerButtonHeight", "");
|
|
}
|
|
if (isSameItemWidth) {
|
|
setNumberValue("slicerButtonWidth", itemWidth);
|
|
}
|
|
else {
|
|
setNumberValue("slicerButtonWidth", "");
|
|
}
|
|
setCheckValue("lockSlicer", isSameLocked);
|
|
}
|
|
|
|
function changeSlicerInfo(slicer, propertyName) {
|
|
if (!slicer) {
|
|
return;
|
|
}
|
|
switch (propertyName) {
|
|
case "width":
|
|
setNumberValue("slicerButtonWidth", getSlicerItemWidth(slicer.columnCount(), slicer.width()));
|
|
break;
|
|
}
|
|
}
|
|
|
|
function setSlicerSetting(property, value) {
|
|
var sheet = spread.getActiveSheet();
|
|
var selectedSlicers = getSelectedSlicers(sheet);
|
|
if (!selectedSlicers || selectedSlicers.length === 0) {
|
|
return;
|
|
}
|
|
for (var item in selectedSlicers) {
|
|
setSlicerProperty(selectedSlicers[item], property, value);
|
|
}
|
|
}
|
|
|
|
function setSlicerProperty(slicer, property, value) {
|
|
switch (property) {
|
|
case "name":
|
|
var sheet = spread.getActiveSheet();
|
|
var slicerPreName = slicer.name();
|
|
if (!value) {
|
|
alert(getResource("messages.invalidSlicerName"));
|
|
setTextValue("slicerName", slicerPreName);
|
|
}
|
|
else if (value && value !== slicerPreName) {
|
|
if (sheet.floatingObjects.get(value)) {
|
|
alert(getResource("messages.duplicatedSlicerName"));
|
|
setTextValue("slicerName", slicerPreName);
|
|
}
|
|
else {
|
|
slicer.name(value);
|
|
}
|
|
}
|
|
break;
|
|
case "captionName":
|
|
slicer.captionName(value);
|
|
break;
|
|
case "sortState":
|
|
slicer.sortState(value);
|
|
break;
|
|
case "showHeader":
|
|
slicer.showHeader(value);
|
|
break;
|
|
case "columnCount":
|
|
slicer.columnCount(value);
|
|
break;
|
|
case "itemHeight":
|
|
slicer.itemHeight(value);
|
|
break;
|
|
case "itemWidth":
|
|
slicer.width(getSlicerWidthFromItem(slicer.columnCount(), value));
|
|
break;
|
|
case "moveSize":
|
|
if (value === "slicer-move-size") {
|
|
slicer.dynamicMove(true);
|
|
slicer.dynamicSize(true);
|
|
}
|
|
if (value === "slicer-move-nosize") {
|
|
slicer.dynamicMove(true);
|
|
slicer.dynamicSize(false);
|
|
}
|
|
if (value === "slicer-nomove-size") {
|
|
slicer.dynamicMove(false);
|
|
slicer.dynamicSize(false);
|
|
}
|
|
break;
|
|
case "lock":
|
|
slicer.isLocked(value);
|
|
break;
|
|
case "style":
|
|
slicer.style(value);
|
|
break;
|
|
default:
|
|
console.log("Slicer doesn't have property:", property);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function setTextDisabled(name, isDisabled) {
|
|
var $item = $("div.insp-text[data-name='" + name + "']");
|
|
var $input = $item.find("input");
|
|
if (isDisabled) {
|
|
$item.addClass("disabled");
|
|
$input.attr("disabled", true);
|
|
}
|
|
else {
|
|
$item.removeClass("disabled");
|
|
$input.attr("disabled", false);
|
|
}
|
|
}
|
|
|
|
function setRadioItemChecked(groupName, itemName) {
|
|
var $radioGroup = $("div.insp-checkbox[data-name='" + groupName + "']");
|
|
var $radioItems = $("div.radiobutton[data-name='" + itemName + "']");
|
|
|
|
$radioGroup.find(".radiobutton").removeClass("checked");
|
|
$radioItems.addClass("checked");
|
|
}
|
|
|
|
function getSlicerItemWidth(count, slicerWidth) {
|
|
if (count <= 0) {
|
|
count = 1; //Column count will be converted to 1 if it is set to 0 or negative number.
|
|
}
|
|
var SLICER_PADDING = 6;
|
|
var SLICER_ITEM_SPACE = 2;
|
|
var itemWidth = Math.round((slicerWidth - SLICER_PADDING * 2 - (count - 1) * SLICER_ITEM_SPACE) / count);
|
|
if (itemWidth < 0) {
|
|
return 0;
|
|
}
|
|
else {
|
|
return itemWidth;
|
|
}
|
|
}
|
|
|
|
function getSlicerWidthFromItem(count, itemWidth) {
|
|
if (count <= 0) {
|
|
count = 1; //Column count will be converted to 1 if it is set to 0 or negative number.
|
|
}
|
|
var SLICER_PADDING = 6;
|
|
var SLICER_ITEM_SPACE = 2;
|
|
return Math.round(itemWidth * count + (count - 1) * SLICER_ITEM_SPACE + SLICER_PADDING * 2);
|
|
}
|
|
|
|
function getSelectedSlicers(sheet) {
|
|
if (!sheet) {
|
|
return null;
|
|
}
|
|
var slicers = sheet.slicers.all();
|
|
if (!slicers || slicers.length === 0) {
|
|
return null;
|
|
}
|
|
var selectedSlicers = [];
|
|
for (var item in slicers) {
|
|
if (slicers[item].isSelected()) {
|
|
selectedSlicers.push(slicers[item]);
|
|
}
|
|
}
|
|
return selectedSlicers;
|
|
}
|
|
|
|
function processSlicerItemSorting(sortValue) {
|
|
switch (sortValue) {
|
|
case 0:
|
|
case 1:
|
|
case 2:
|
|
setSlicerSetting("sortState", sortValue);
|
|
break;
|
|
|
|
default:
|
|
console.log("processSlicerItemSorting not process with ", name);
|
|
return;
|
|
}
|
|
}
|
|
|
|
function selectedCurrentSlicerStyle(slicer) {
|
|
var slicerStyle = slicer.style(),
|
|
styleName = slicerStyle && slicerStyle.name();
|
|
$("#slicerStyles .slicer-format-item").removeClass("slicer-format-item-selected");
|
|
styleName = styleName.split("SlicerStyle")[1];
|
|
if (styleName) {
|
|
$("#slicerStyles .slicer-format-item div[data-name='" + styleName.toLowerCase() + "']").parent().addClass("slicer-format-item-selected");
|
|
}
|
|
}
|
|
|
|
function changeSlicerStyle() {
|
|
spread.suspendPaint();
|
|
|
|
var styleName = $(">div", this).data("name");
|
|
setSlicerSetting("style", spreadNS.Slicers.SlicerStyles[styleName]());
|
|
$("#slicerStyles .slicer-format-item").removeClass("slicer-format-item-selected");
|
|
$(this).addClass("slicer-format-item-selected");
|
|
|
|
spread.resumePaint();
|
|
}
|
|
|
|
// slicer related items (end)
|
|
|
|
// spread theme related items
|
|
function processChangeSpreadTheme(value) {
|
|
$("link[title='spread-theme']").attr("href", value);
|
|
|
|
setTimeout(
|
|
function () {
|
|
spread.refresh();
|
|
}, 300);
|
|
}
|
|
|
|
// spread theme related items (end)
|
|
|
|
//cell label related item
|
|
function setLabelOptions(sheet, value, option) {
|
|
var selections = sheet.getSelections(),
|
|
rowCount = sheet.getRowCount(),
|
|
columnCount = sheet.getColumnCount();
|
|
sheet.suspendPaint();
|
|
for (var n = 0; n < selections.length; n++) {
|
|
var sel = getActualCellRange(sheet, selections[n], rowCount, columnCount);
|
|
for (var r = sel.row; r < sel.row + sel.rowCount; r++) {
|
|
for (var c = sel.col; c < sel.col + sel.colCount; c++) {
|
|
var style = sheet.getStyle(r, c);
|
|
if (!style) {
|
|
style = new spreadNS.Style();
|
|
}
|
|
if (!style.labelOptions) {
|
|
style.labelOptions = {};
|
|
}
|
|
if (option === "foreColor") {
|
|
style.labelOptions.foreColor = value;
|
|
} else if (option === "margin") {
|
|
style.labelOptions.margin = value;
|
|
} else if (option === "visibility") {
|
|
style.labelOptions.visibility = GC.Spread.Sheets.LabelVisibility[value];
|
|
} else if (option === "alignment") {
|
|
style.labelOptions.alignment = GC.Spread.Sheets.LabelAlignment[value];
|
|
}
|
|
sheet.setStyle(r, c, style);
|
|
}
|
|
}
|
|
}
|
|
sheet.resumePaint();
|
|
}
|
|
|
|
function setWatermark(sheet, value) {
|
|
var selections = sheet.getSelections(),
|
|
rowCount = sheet.getRowCount(),
|
|
columnCount = sheet.getColumnCount();
|
|
sheet.suspendPaint();
|
|
for (var n = 0; n < selections.length; n++) {
|
|
var sel = getActualCellRange(sheet, selections[n], rowCount, columnCount);
|
|
for (var r = sel.row; r < sel.row + sel.rowCount; r++) {
|
|
for (var c = sel.col; c < sel.col + sel.colCount; c++) {
|
|
var style = sheet.getStyle(r, c);
|
|
if (!style) {
|
|
style = new spreadNS.Style();
|
|
}
|
|
style.watermark = value;
|
|
sheet.setStyle(r, c, style);
|
|
}
|
|
}
|
|
}
|
|
sheet.resumePaint();
|
|
}
|
|
|
|
function setCellPadding(sheet, value) {
|
|
var selections = sheet.getSelections(),
|
|
rowCount = sheet.getRowCount(),
|
|
columnCount = sheet.getColumnCount();
|
|
sheet.suspendPaint();
|
|
for (var n = 0; n < selections.length; n++) {
|
|
var sel = getActualCellRange(sheet, selections[n], rowCount, columnCount);
|
|
for (var r = sel.row; r < sel.row + sel.rowCount; r++) {
|
|
for (var c = sel.col; c < sel.col + sel.colCount; c++) {
|
|
var style = sheet.getStyle(r, c);
|
|
if (!style) {
|
|
style = new spreadNS.Style();
|
|
}
|
|
style.cellPadding = value;
|
|
sheet.setStyle(r, c, style);
|
|
}
|
|
}
|
|
}
|
|
sheet.resumePaint();
|
|
}
|
|
|
|
//cell label related item (end)
|
|
|
|
|
|
|
|
|
|
//chart sample (begin)
|
|
|
|
function createComboChart(formula,chartName,type0,type1) {
|
|
var sheet = spread.getActiveSheet();
|
|
var chart = sheet.charts.add( chartName, type0, 0, 100, 400, 300, formula);
|
|
var seriesItem = chart.series().get(0);
|
|
seriesItem.chartType = type1;
|
|
chart.series().set(0,seriesItem);
|
|
return chart;
|
|
}
|
|
var dataLabelPosition = GC.Spread.Sheets.Charts.DataLabelPosition;
|
|
var chartGroupItemObj = {
|
|
ColumnGroup:
|
|
[
|
|
{desc:uiResource.chartDataLabels.center,key:dataLabelPosition.center},
|
|
{desc:uiResource.chartDataLabels.insideEnd,key:dataLabelPosition.insideEnd},
|
|
{desc:uiResource.chartDataLabels.outsideEnd,key:dataLabelPosition.outsideEnd}
|
|
],
|
|
LineGroup:
|
|
[
|
|
{desc:uiResource.chartDataLabels.center,key:dataLabelPosition.center},
|
|
{desc:uiResource.chartDataLabels.above,key:dataLabelPosition.above},
|
|
{desc:uiResource.chartDataLabels.below,key:dataLabelPosition.below}
|
|
],
|
|
PieGroup:
|
|
[
|
|
{desc:uiResource.chartDataLabels.center,key:dataLabelPosition.center},
|
|
{desc:uiResource.chartDataLabels.insideEnd,key:dataLabelPosition.insideEnd},
|
|
{desc:uiResource.chartDataLabels.bestFit,key:dataLabelPosition.bestFit},
|
|
{desc:uiResource.chartDataLabels.outsideEnd,key:dataLabelPosition.outsideEnd}
|
|
],
|
|
BarGroup:
|
|
[
|
|
{desc:uiResource.chartDataLabels.center,key:dataLabelPosition.center},
|
|
{desc:uiResource.chartDataLabels.insideEnd,key:dataLabelPosition.insideEnd},
|
|
{desc:uiResource.chartDataLabels.outsideEnd,key:dataLabelPosition.outsideEnd}
|
|
],
|
|
AreaGroup:[
|
|
],
|
|
ScatterGroup:
|
|
[
|
|
{desc:uiResource.chartDataLabels.center,key:dataLabelPosition.center},
|
|
{desc:uiResource.chartDataLabels.above,key:dataLabelPosition.above},
|
|
{desc:uiResource.chartDataLabels.below,key:dataLabelPosition.below}
|
|
],
|
|
StockGroup:[
|
|
],
|
|
ComboGroup: {}
|
|
};
|
|
|
|
var chartTypeDict = {
|
|
0: {
|
|
chartType: "combo",
|
|
chartGroup: "ComboGroup"
|
|
},
|
|
1: {
|
|
chartType: "xyScatter",
|
|
chartGroup: "ScatterGroup"
|
|
},
|
|
2: {
|
|
chartType: "xyScatter",
|
|
chartGroup: "ScatterGroup"
|
|
},
|
|
3: {
|
|
chartType: "doughnut",
|
|
chartGroup: "PieGroup"
|
|
},
|
|
8: {
|
|
chartType: "area",
|
|
chartGroup: "AreaGroup"
|
|
},
|
|
9: {
|
|
chartType: "line",
|
|
chartGroup: "LineGroup"
|
|
},
|
|
10: {
|
|
chartType: "pie",
|
|
chartGroup: "PieGroup"
|
|
},
|
|
11: {
|
|
chartType: "bubble",
|
|
chartGroup: "ScatterGroup"
|
|
},
|
|
12: {
|
|
chartType: "columnClustered",
|
|
chartGroup: "ColumnGroup"
|
|
},
|
|
13: {
|
|
chartType: "columnStacked",
|
|
chartGroup: "ColumnGroup"
|
|
},
|
|
14: {
|
|
chartType: "columnStacked100",
|
|
chartGroup: "ColumnGroup"
|
|
},
|
|
18: {
|
|
chartType: "barClustered",
|
|
chartGroup: "BarGroup"
|
|
},
|
|
19: {
|
|
chartType: "barStacked",
|
|
chartGroup: "BarGroup"
|
|
},
|
|
20: {
|
|
chartType: "barStacked100",
|
|
chartGroup: "BarGroup"
|
|
},
|
|
24: {
|
|
chartType: "lineStacked",
|
|
chartGroup: "LineGroup"
|
|
},
|
|
25: {
|
|
chartType: "lineStacked100",
|
|
chartGroup: "LineGroup"
|
|
},
|
|
26: {
|
|
chartType: "lineMarkers",
|
|
chartGroup: "LineGroup"
|
|
},
|
|
27: {
|
|
chartType: "lineMarkersStacked",
|
|
chartGroup: "LineGroup"
|
|
},
|
|
28: {
|
|
chartType: "lineMarkersStacked100",
|
|
chartGroup: "LineGroup"
|
|
},
|
|
33: {
|
|
chartType: "xyScatterSmooth",
|
|
chartGroup: "ScatterGroup"
|
|
},
|
|
34: {
|
|
chartType: "xyScatterSmoothNoMarkers",
|
|
chartGroup: "ScatterGroup"
|
|
},
|
|
35: {
|
|
chartType: "xyScatterLines",
|
|
chartGroup: "ScatterGroup"
|
|
},
|
|
36: {
|
|
chartType: "xyScatterLinesNoMarkers",
|
|
chartGroup: "ScatterGroup"
|
|
},
|
|
37: {
|
|
chartType: "areaStacked",
|
|
chartGroup: "AreaGroup"
|
|
},
|
|
38: {
|
|
chartType: "areaStacked100",
|
|
chartGroup: "AreaGroup"
|
|
},
|
|
49: {
|
|
chartType: "stockHLC",
|
|
chartGroup: "StockGroup"
|
|
},
|
|
50: {
|
|
chartType: "stockOHLC",
|
|
chartGroup: "StockGroup"
|
|
},
|
|
51: {
|
|
chartType: "stockVHLC",
|
|
chartGroup: "StockGroup"
|
|
},
|
|
52: {
|
|
chartType: "stockVOHLC",
|
|
chartGroup: "StockGroup"
|
|
}
|
|
}
|
|
function getChartGroupString (typeValue) {
|
|
var chartTypeInfo = chartTypeDict[typeValue];
|
|
if (chartTypeInfo && chartTypeInfo.chartGroup) {
|
|
return chartTypeInfo.chartGroup;
|
|
}
|
|
}
|
|
function getChartTypeString (typeValue) {
|
|
var chartTypeInfo = chartTypeDict[typeValue];
|
|
if (chartTypeInfo && chartTypeInfo.chartType) {
|
|
return chartTypeInfo.chartType;
|
|
}
|
|
}
|
|
|
|
function getActiveChart() {
|
|
var sheet = spread.getActiveSheet();
|
|
var activeChart = null;
|
|
sheet.charts.all().forEach(function (chart) {
|
|
if (chart.isSelected()) {
|
|
activeChart = chart;
|
|
}
|
|
});
|
|
return activeChart;
|
|
}
|
|
|
|
function getColorByThemeColor(themeColor) {
|
|
var sheet = spread.getActiveSheet();
|
|
var theme = sheet.currentTheme();
|
|
return theme.getColor(themeColor);
|
|
}
|
|
|
|
function createSeriesListMenu(host, nameArray){
|
|
for(var i=0;i<nameArray.length;i++){
|
|
var $text = $("<div></div>").addClass('text localize');
|
|
$text.attr('data-value',i);
|
|
$text.html(nameArray[i]);
|
|
|
|
var $menuItem = $("<div></div>").addClass('menu-item');
|
|
$menuItem.on('click', itemSelected);
|
|
$menuItem.append($("<div></div>").addClass('image fa fa-check'));
|
|
$menuItem.append($text);
|
|
$menuItem.append($("<div></div>").addClass('shortcut'));
|
|
host.append($menuItem);
|
|
}
|
|
}
|
|
|
|
function getSeriesNameArrayWithChart(chart) {
|
|
var nameArray = [];
|
|
var seriesArray = chart.series().get();
|
|
for (var i = 0; i < seriesArray.length; i++) {
|
|
var series = seriesArray[i];
|
|
var sheet = spread.getActiveSheet();
|
|
if (series.name) {
|
|
var name = '';
|
|
var range = spreadNS.CalcEngine.formulaToRange(sheet, series.name);
|
|
if(range === undefined || range === null){
|
|
name = series.name
|
|
}else{
|
|
var cell = sheet.getCell(range.row, range.col);
|
|
name = cell.value();
|
|
}
|
|
nameArray.push(name);
|
|
}
|
|
}
|
|
return nameArray;
|
|
}
|
|
|
|
function attachChartItemEvents() {
|
|
|
|
$("#setChartArea").click(applyChartAreaSetting);
|
|
$("#setChartTitle").click(applyChartTitle);
|
|
$("#setChartSeries").click(applyChartSeries);
|
|
$("#setChartLegend").click(applyChartLegendSetting);
|
|
$("#setChartDataLabels").click(applyChartDataLabelsSetting);
|
|
$("#setChartAxes").click(applyChartAxesSetting);
|
|
}
|
|
|
|
function showChartPanel(chart) {
|
|
if (chart && chart.isSelected()) {
|
|
setActiveTab("chartEx");
|
|
updateChartOption(chart);
|
|
}
|
|
}
|
|
|
|
function updateChartOption(chart) {
|
|
updateChartAreaSetting(chart);
|
|
updateChartTitleSetting(chart);
|
|
updateChartSeriesSetting(chart, 0);
|
|
updateChartLegendSetting(chart);
|
|
updateChartDataLabelsSetting(chart);
|
|
updateChartAxesSetting(chart);
|
|
}
|
|
|
|
function updateChartAreaSetting(chart) {
|
|
if(chart){
|
|
var chartArea = chart.chartArea();
|
|
setColorValue("chartAreaBackColor", getColorByThemeColor(chartArea.backColor));
|
|
setColorValue("chartAreaColor", getColorByThemeColor(chartArea.color));
|
|
setDropDownText($("#chartExTab div.insp-dropdown-list[data-name='chartAreaFontFamily']"), chartArea.fontFamily);
|
|
setDropDownText($("#chartExTab div.insp-dropdown-list[data-name='chartAreaFontSize']"), parseInt(chartArea.fontSize));
|
|
}
|
|
}
|
|
function applyChartAreaSetting() {
|
|
var chart = getActiveChart();
|
|
if(chart){
|
|
var fontSize = parseInt(getDropDownText("chartAreaFontSize"));
|
|
var fontFamily = getDropDownText("chartAreaFontFamily")
|
|
var backColor = getBackgroundColor("chartAreaBackColor");
|
|
var color = getBackgroundColor("chartAreaColor");
|
|
var chartArea = chart.chartArea();
|
|
chartArea.fontSize = fontSize;
|
|
chartArea.backColor = backColor ;
|
|
chartArea.color = color;
|
|
chartArea.fontFamily = fontFamily;
|
|
chart.chartArea(chartArea);
|
|
}
|
|
}
|
|
|
|
function updateChartTitleSetting(chart) {
|
|
if(chart){
|
|
var title = chart.title();
|
|
setTextValue('chartTitletext',title.text);
|
|
setColorValue("chartTitleColor", title.color);
|
|
setDropDownText($("#chartExTab div.insp-dropdown-list[data-name='chartTitleFontFamily']"), title.fontFamily);
|
|
setDropDownText($("#chartExTab div.insp-dropdown-list[data-name='chartTitleFontSize']"), parseInt(title.fontSize));
|
|
}
|
|
}
|
|
function applyChartTitle() {
|
|
var chart = getActiveChart();
|
|
if(chart){
|
|
var fontSize = parseInt(getDropDownText('chartTitleFontSize'));
|
|
var fontFamily = getDropDownText("chartTitleFontFamily")
|
|
var text = getTextValue('chartTitletext');
|
|
var color = getColorByThemeColor(getBackgroundColor("chartTitleColor"));
|
|
var title = chart.title();
|
|
title.text = text;
|
|
title.color = color ;
|
|
title.fontFamily = fontFamily;
|
|
title.fontSize = fontSize;
|
|
chart.title(title);
|
|
}
|
|
}
|
|
|
|
function changeSeriesIndex(seriesIndex){
|
|
var chart = getActiveChart();
|
|
updateChartSeriesSetting(chart,seriesIndex);
|
|
}
|
|
function updateChartSeriesSetting(chart,seriesIndex) {
|
|
var chartGroupString = getChartGroupString(chart.chartType());
|
|
if(chartGroupString === "StockGroup" || chartGroupString === 'PieGroup') {
|
|
$("#chartSeriesGroup").hide();
|
|
return;
|
|
}
|
|
$("#chartSeriesGroup").show();
|
|
var nameArray = getSeriesNameArrayWithChart(chart);
|
|
var $host = $('#chartSeriesIndexContner');
|
|
$host.html('');
|
|
createSeriesListMenu($host,nameArray);
|
|
setDropDownValue("chartSeriesIndexValue", seriesIndex);
|
|
var seriesItem = chart.series().get(seriesIndex);
|
|
var axisGroup = seriesItem.axisGroup.toString();
|
|
var lineWidth = seriesItem.border.width;
|
|
if(chartGroupString === "ScatterGroup"){
|
|
$('#chartSeriesLineWidth').hide();
|
|
if(chart.chartType() === 11){
|
|
$('#chartSeriesColor').show();
|
|
$('#chartSeriesLineColor').hide();
|
|
} else {
|
|
$('#chartSeriesLineColor').show();
|
|
$('#chartSeriesColor').hide();
|
|
}
|
|
|
|
} else {
|
|
$('#chartSeriesColor').show();
|
|
$('#chartSeriesLineColor').show();
|
|
$('#chartSeriesLineWidth').show();
|
|
}
|
|
var lineColor = seriesItem.border.color;
|
|
if(chartGroupString === "ScatterGroup" && lineColor === undefined){
|
|
lineColor = "Accent " + (seriesIndex % 6 + 1);
|
|
}
|
|
var lineColorByTheme = getColorByThemeColor(lineColor);
|
|
var backColor = getColorByThemeColor(seriesItem.backColor);
|
|
setDropDownValue("chartSeriesGroupValue", axisGroup);
|
|
setColorValue("chartSeriesColor", backColor);
|
|
setTextValue('chartSeriesLineWidth',lineWidth);
|
|
setColorValue("chartSeriesLineColor", lineColorByTheme);
|
|
}
|
|
|
|
function applyChartSeries() {
|
|
var chart = getActiveChart();
|
|
if(chart){
|
|
var seriesIndex = getDropDownValue("chartSeriesIndexValue");
|
|
var axisGroup = getDropDownValue("chartSeriesGroupValue");
|
|
var seriesItem = chart.series().get(seriesIndex);
|
|
var backColor = getBackgroundColor('chartSeriesColor');
|
|
var linwWidth = getTextValue('chartSeriesLineWidth');
|
|
var lineColor = getBackgroundColor('chartSeriesLineColor');
|
|
seriesItem.backColor = backColor;
|
|
seriesItem.axisGroup = axisGroup;
|
|
seriesItem.border.width = parseInt(linwWidth);
|
|
seriesItem.border.color = lineColor;
|
|
chart.series().set(seriesIndex, seriesItem);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
function updateChartLegendSetting(chart) {
|
|
var chartGroupString = getChartGroupString(chart.chartType());
|
|
// there is no legend for stock chart, need to control whether to show legend group in panel.
|
|
if (chartGroupString === "StockGroup") {
|
|
$('#chartLegendGroup').hide();
|
|
return;
|
|
}
|
|
$('#chartLegendGroup').show();
|
|
var legend = chart.legend();
|
|
setCheckValue("showChartLegend", legend.visible);
|
|
var position = legend.position.toString();
|
|
setDropDownValue("chartLegendPosition", position);
|
|
|
|
}
|
|
|
|
function applyChartLegendSetting() {
|
|
var chart = getActiveChart();
|
|
var chartGroupString = getChartGroupString(chart.chartType());
|
|
if(chart && chartGroupString !== "StockGroup"){
|
|
var legend = chart.legend();
|
|
var isShowLegend = getCheckValue("showChartLegend");
|
|
legend.visible = isShowLegend;
|
|
var currentPosition = getDropDownValue("chartLegendPosition");
|
|
legend.position = currentPosition;
|
|
chart.legend(legend);
|
|
}
|
|
}
|
|
|
|
function getChartDataLabelsDescAndKey(chart) {
|
|
var chartGroupString = getChartGroupString(chart.chartType());
|
|
var chartTypeString = getChartTypeString(chart.chartType());
|
|
var dataLabelsDescArray = [];
|
|
var dataLabelsKeyArray = [];
|
|
if(chartTypeString === 'doughnut'){
|
|
dataLabelsDescArray = [];
|
|
dataLabelsKeyArray = [];
|
|
}else if(chartGroupItemObj[chartGroupString]){
|
|
var array = chartGroupItemObj[chartGroupString];
|
|
for(var i=0;i<array.length;i++){
|
|
dataLabelsDescArray.push(array[i].desc);
|
|
dataLabelsKeyArray.push(array[i].key);
|
|
}
|
|
}
|
|
return {desc:dataLabelsDescArray,key:dataLabelsKeyArray};
|
|
}
|
|
|
|
function judjeDataLabelsIsShow(isShowObj){
|
|
var isShow;
|
|
var chart = getActiveChart();
|
|
if(isShowObj !== undefined && isShowObj !== null){
|
|
var itemString = isShowObj.item;
|
|
switch (itemString){
|
|
case "showDataLabelsValue":
|
|
showValue = isShowObj.isShow;
|
|
break;
|
|
case "showDataLabelsSeriesName":
|
|
showSeriesName = isShowObj.isShow;
|
|
break;
|
|
case "showDataLabelsCategoryName":
|
|
showCategoryName = isShowObj.isShow;
|
|
break;
|
|
default:
|
|
isShow = false;
|
|
break;
|
|
}
|
|
}
|
|
isShow = showCategoryName || showValue|| showSeriesName;
|
|
return isShow;
|
|
}
|
|
function updateDataLabelsPositionDropDown(isShow){
|
|
var chart = getActiveChart();
|
|
if(chart){
|
|
var obj = getChartDataLabelsDescAndKey(chart);
|
|
var dataLabelsKeyArray = obj.key;
|
|
var dataLabelsDescArray = obj.desc;
|
|
var dataLabels = chart.dataLabels();
|
|
if(isShow){
|
|
var position = dataLabels.position;
|
|
//get dropDownIndex
|
|
var index = 0;
|
|
for(var i=0;i<dataLabelsKeyArray.length;i++){
|
|
if(position === dataLabelsKeyArray[i]){
|
|
index = i;
|
|
break;
|
|
}
|
|
}
|
|
$('#dataLabelsColorCon').show();
|
|
//create dropDownList
|
|
if(dataLabelsDescArray.length>0){
|
|
$('#chartDataLabelPositionDropDown').show();
|
|
var $host = $('#chartDataLabelList');
|
|
$host.html('');
|
|
createSeriesListMenu($host,dataLabelsDescArray);
|
|
setDropDownValue("chartDataLabelPosition", index);
|
|
}else{
|
|
//hide dropDown
|
|
$('#chartDataLabelPositionDropDown').hide();
|
|
}
|
|
}else{
|
|
//hide
|
|
$('#chartDataLabelPositionDropDown').hide();
|
|
$('#dataLabelsColorCon').hide();
|
|
}
|
|
}
|
|
}
|
|
function updateChartDataLabelsSetting(chart) {
|
|
var chartGroupString = getChartGroupString(chart.chartType());
|
|
if(chartGroupString === "StockGroup"){
|
|
// there is no data labels for stock chart, hide this dom in panel.
|
|
$("#chartDataLabelsGroup").hide();
|
|
return;
|
|
}
|
|
$("#chartDataLabelsGroup").show();
|
|
var dataLabels = chart.dataLabels();
|
|
showValue = dataLabels.showValue;
|
|
showSeriesName = dataLabels.showSeriesName;
|
|
showCategoryName = dataLabels.showCategoryName;
|
|
|
|
var isShow = judjeDataLabelsIsShow();
|
|
updateDataLabelsPositionDropDown(isShow);
|
|
setCheckValue("showDataLabelsValue",dataLabels.showValue);
|
|
setCheckValue("showDataLabelsSeriesName",dataLabels.showSeriesName);
|
|
setCheckValue("showDataLabelsCategoryName",dataLabels.showCategoryName);
|
|
setColorValue("dataLabelsColor",getColorByThemeColor(dataLabels.color));
|
|
|
|
}
|
|
|
|
function applyChartDataLabelsSetting() {
|
|
var chart = getActiveChart();
|
|
if(chart){
|
|
var dataLabels = chart.dataLabels();
|
|
var dataLabelPositionIndex = getDropDownValue("chartDataLabelPosition");
|
|
if(dataLabelPositionIndex !== null && dataLabelPositionIndex !== undefined){
|
|
var dataLabelsKeyArray = getChartDataLabelsDescAndKey(chart).key;
|
|
var position = dataLabelsKeyArray[dataLabelPositionIndex];
|
|
dataLabels.position = position;
|
|
}
|
|
var showValue = getCheckValue("showDataLabelsValue");
|
|
var showSeriesName = getCheckValue("showDataLabelsSeriesName");
|
|
var showCategoryName = getCheckValue("showDataLabelsCategoryName");
|
|
var dataLabelsColor = getBackgroundColor("dataLabelsColor");
|
|
dataLabels.color = dataLabelsColor;
|
|
dataLabels.showValue = showValue;
|
|
dataLabels.showSeriesName = showSeriesName;
|
|
dataLabels.showCategoryName = showCategoryName;
|
|
chart.dataLabels(dataLabels);
|
|
}
|
|
}
|
|
|
|
function changeAxieTypeIndex(nameValue) {
|
|
|
|
var chart = getActiveChart();
|
|
var axes = chart.axes();
|
|
switch(nameValue){
|
|
case 0:
|
|
axesTY = axes.primaryCategory;
|
|
break;
|
|
case 1:
|
|
axesTY = axes.primaryValue;
|
|
break;
|
|
case 2:
|
|
axesTY = axes.secondaryCategory;
|
|
break;
|
|
case 3:
|
|
axesTY = axes.secondaryValue;
|
|
break;
|
|
}
|
|
var chartType = chart.chartType();
|
|
if(chartType !== 10 && chartType !== 3){
|
|
var text = axesTY.title.text;
|
|
var aixsLineWidth = axesTY.lineStyle.width;
|
|
var aixsMajorUnit = axesTY.majorUnit || 'Auto';
|
|
var aixsMinorUnit = axesTY.minorUnit || 'Auto';
|
|
var aixsMajorGridlineWidth = axesTY.majorGridLine.width;
|
|
var aixsMinorGridlineWidth = axesTY.minorGridLine.width;
|
|
|
|
var aixsFontFamily = axesTY.style.fontFamily;
|
|
var aixsTitleFontFamily = axesTY.title.fontFamily || '';
|
|
var aixsTitleFontSize = axesTY.title.fontSize || '';
|
|
var aixsFontSize = axesTY.style.fontSize;
|
|
|
|
var showMajorGridline = axesTY.majorGridLine.visible;
|
|
var showMinorGridline = axesTY.minorGridLine.visible;
|
|
var showAxis = axesTY.visible;
|
|
|
|
var aixsTitleColor = axesTY.title.color || '#999999';
|
|
var aixsColor = axesTY.style.color || '#999999';
|
|
var aixsLineColor = axesTY.lineStyle.color || '#999999';
|
|
var aixsMajorGridlineColor = axesTY.majorGridLine.color || '#999999';
|
|
var aixsMinorGridlineColor = axesTY.minorGridLine.color || '#999999';
|
|
|
|
var aixsTickLabelPosition = axesTY.tickLabelPosition.toString();
|
|
var aixsMajorTickPosition = axesTY.majorTickPosition.toString();
|
|
var aixsMinorTickPosition = axesTY.minorTickPosition.toString();
|
|
|
|
setTextValue('chartAixsTitletext', text);
|
|
setTextValue("chartAixsLineWidth", aixsLineWidth);
|
|
setTextValue("chartAixsMajorUnit", aixsMajorUnit);
|
|
setTextValue("chartAixsMinorUnit", aixsMinorUnit);
|
|
setTextValue("chartAixsMajorGridlineWidth", aixsMajorGridlineWidth);
|
|
setTextValue("chartAixsMinorMinorGridlineWidth", aixsMinorGridlineWidth);
|
|
|
|
|
|
setDropDownText($("#chartExTab div.insp-dropdown-list[data-name='chartAxesFontFamily']"), aixsFontFamily);
|
|
setDropDownText($("#chartExTab div.insp-dropdown-list[data-name='chartAxesFontSize']"), aixsFontSize);
|
|
|
|
setDropDownText($("#chartExTab div.insp-dropdown-list[data-name='chartAxesTitleFontFamily']"), aixsTitleFontFamily);
|
|
setDropDownText($("#chartExTab div.insp-dropdown-list[data-name='chartAxesTitleFontSize']"), aixsTitleFontSize);
|
|
|
|
setCheckValue("showMajorGridline", showMajorGridline);
|
|
setCheckValue("showMinorGridline", showMinorGridline);
|
|
setCheckValue("showAxis", showAxis);
|
|
|
|
setColorValue("chartAixsTitleColor", getColorByThemeColor(aixsTitleColor));
|
|
setColorValue("chartAixsColor", getColorByThemeColor(aixsColor));
|
|
setColorValue("chartAixsLineColor", getColorByThemeColor(aixsLineColor));
|
|
setColorValue("chartAixsMajorGridlineColor", getColorByThemeColor(aixsMajorGridlineColor));
|
|
setColorValue("chartAixsMinorGridlineColor", getColorByThemeColor(aixsMinorGridlineColor));
|
|
|
|
setDropDownValue("chartTickLabelPosition", aixsTickLabelPosition);
|
|
setDropDownValue("chartMajorTickPosition", aixsMajorTickPosition);
|
|
setDropDownValue("chartMinorTickPosition", aixsMinorTickPosition);
|
|
}
|
|
|
|
|
|
}
|
|
function updateChartAxesSetting(chart) {
|
|
//var axes = chart.axes();
|
|
setDropDownValue("chartAxieType", 0);
|
|
var chartGroupString = getChartGroupString(chart.chartType());
|
|
if(chartGroupString === 'PieGroup'){
|
|
$('#chartAxesGroup').hide();
|
|
}else{
|
|
$('#chartAxesGroup').show();
|
|
changeAxieTypeIndex(0);
|
|
}
|
|
}
|
|
function applyChartAxesSetting() {
|
|
var chart = getActiveChart();
|
|
var spreadCH = GC.Spread.Sheets.Charts;
|
|
if(chart){
|
|
var axes = chart.axes();
|
|
var axesType = getDropDownValue("chartAxieType");
|
|
var text = getTextValue("chartAixsTitletext");
|
|
var showMajorGridline = getCheckValue("showMajorGridline");
|
|
var showMinorGridline = getCheckValue("showMinorGridline");
|
|
var showAxis = getCheckValue("showAxis");
|
|
var aixsTitleColor = getBackgroundColor("chartAixsTitleColor");
|
|
var aixsTitleFontFamily = getDropDownText("chartAxesTitleFontFamily");
|
|
var aixsTitleFontSize = getDropDownText("chartAxesTitleFontSize");
|
|
var aixsColor = getBackgroundColor("chartAixsColor");
|
|
var aixsFontFamily = getDropDownText("chartAxesFontFamily");
|
|
var aixsFontSize = getDropDownText("chartAxesFontSize");
|
|
var aixsLineColor = getBackgroundColor("chartAixsLineColor");
|
|
var aixsLineWidth = parseInt(getTextValue("chartAixsLineWidth"));
|
|
var aixsMajorUnit = parseInt(getTextValue("chartAixsMajorUnit"));
|
|
var aixsMinorUnit = parseInt(getTextValue("chartAixsMinorUnit"));
|
|
var aixsMajorGridlineWidth = parseInt(getTextValue("chartAixsMajorGridlineWidth"));
|
|
var aixsMajorGridlineColor = getBackgroundColor("chartAixsMajorGridlineColor");
|
|
var aixsMinorGridlineWidth = parseInt(getTextValue("chartAixsMinorMinorGridlineWidth"));
|
|
var aixsMinorGridlineColor = getBackgroundColor("chartAixsMinorGridlineColor");
|
|
var aixsTickLabelPosition;
|
|
switch (getDropDownValue("chartTickLabelPosition")){
|
|
case 3:
|
|
aixsTickLabelPosition = spreadCH.TickLabelPosition.none;
|
|
break;
|
|
case 2:
|
|
aixsTickLabelPosition = spreadCH.TickLabelPosition.nextToAxis;
|
|
break;
|
|
}
|
|
var aixsMajorTickPosition;
|
|
var aixsMinorTickPosition;
|
|
switch(getDropDownValue("chartMajorTickPosition")){
|
|
case 0:
|
|
aixsMajorTickPosition = spreadCH.TickMark.cross;
|
|
break;
|
|
case 1:
|
|
aixsMajorTickPosition = spreadCH.TickMark.inside;
|
|
break;
|
|
case 2:
|
|
aixsMajorTickPosition = spreadCH.TickMark.none;
|
|
break;
|
|
case 3:
|
|
aixsMajorTickPosition = spreadCH.TickMark.outside;
|
|
break;
|
|
}
|
|
|
|
switch(getDropDownValue("chartMinorTickPosition")){
|
|
case 0:
|
|
aixsMinorTickPosition = spreadCH.TickMark.cross;
|
|
break;
|
|
case 1:
|
|
aixsMinorTickPosition = spreadCH.TickMark.inside;
|
|
break;
|
|
case 2:
|
|
aixsMinorTickPosition = spreadCH.TickMark.none;
|
|
break;
|
|
case 3:
|
|
aixsMinorTickPosition = spreadCH.TickMark.outside;
|
|
break;
|
|
}
|
|
|
|
var axesTY;
|
|
switch(axesType){
|
|
case 0:
|
|
axesTY = axes.primaryCategory;
|
|
break;
|
|
case 1:
|
|
axesTY = axes.primaryValue;
|
|
break;
|
|
case 2:
|
|
axesTY = axes.secondaryCategory;
|
|
break;
|
|
case 3:
|
|
axesTY = axes.secondaryValue;
|
|
break;
|
|
|
|
}
|
|
axesTY.style.color = aixsColor;
|
|
axesTY.style.fontFamily = aixsFontFamily;
|
|
axesTY.style.fontSize = aixsFontSize;
|
|
axesTY.title.text = text;
|
|
axesTY.title.color = aixsTitleColor;
|
|
axesTY.title.fontFamily = aixsTitleFontFamily;
|
|
if(aixsTitleFontSize){
|
|
axesTY.title.fontSize = aixsTitleFontSize;
|
|
}
|
|
axesTY.majorGridLine.visible = showMajorGridline;
|
|
axesTY.minorGridLine.visible = showMinorGridline;
|
|
axesTY.minorGridLine.visible = showMinorGridline;
|
|
axesTY.lineStyle.color = aixsLineColor;
|
|
axesTY.lineStyle.width = aixsLineWidth;
|
|
axesTY.majorTickPosition = aixsMajorTickPosition;
|
|
axesTY.minorTickPosition = aixsMinorTickPosition;
|
|
axesTY.visible = showAxis;
|
|
axesTY.majorUnit = aixsMajorUnit;
|
|
axesTY.minorUnit = aixsMinorUnit;
|
|
axesTY.majorGridLine.width = aixsMajorGridlineWidth;
|
|
axesTY.majorGridLine.color = aixsMajorGridlineColor;
|
|
axesTY.minorGridLine.width = aixsMinorGridlineWidth;
|
|
axesTY.minorGridLine.color = aixsMinorGridlineColor;
|
|
axesTY.tickLabelPosition = aixsTickLabelPosition;
|
|
|
|
chart.axes(axes);
|
|
|
|
changeAxieTypeIndex(axesType);
|
|
}
|
|
} |