{"size":{"Width":395,"Height":367},"appearance":{"background":null,"padding":14,"font":{"family":"Courier New","size":10.0,"bold":false,"italic":false,"underline":false,"strikeout":false,"color":"rgb(0,72,168)"},"border":{"on":true,"size":0.0,"style":"solid","color":"#666"},"text":{"wrap":false,"hAlign":"left","vAlign":"top"}},"outputType":"WIDGET","widgetState":null,"outputs":{"console":"<pre class='debug-source'>># VERSION 1.2.3\n</pre>\n<pre class='debug-source'>>library(flipChart)\n</pre>\n<pre class='debug-source'>># Processing all the selections from the 'Inputs' and 'Charts' tab.\n</pre>\n<pre class='debug-source'>>pd <- PrepareData(formChartType, QFilter, QPopulationWeight, input.data.table = get0("formTable"), input.data.raw = if (!exists("formX")) NULL else list(X = get0("formX"), Y = get0("formY"), Z1 = get0("formZ"), Z2 = get0("formZ2"), groups = get0("formGroups"), labels = get0("formScatterLabels")), input.data.pasted = if (length(get0("formPastedData")) == 0) NULL else list(get0("formPastedData"), !get0("formNotDataFrame", ifnotfound = TRUE), get0("formPastedColumnNames"), get0("formPastedRowNames")), first.aggregate = get0("formFirstAggregate", ifnotfound = FALSE), group.by.last = get0("formGroupByLastColumn", ifnotfound = FALSE), tidy = get0("formTidy", ifnotfound = FALSE), tidy.labels = get0("formTidyLabels", ifnotfound = FALSE), transpose = get0("formTranspose"), row.names.to.remove = get0("formIgnoreRows"), column.names.to.remove = get0("formIgnoreCols"), hide.empty.rows = get0("formHideEmptyRows", ifnotfound = FALSE), hide.empty.columns = get0("formHideEmptyCols", ifnotfound = FALSE), select.rows = get0("formSelectRows"), first.k.rows = as.numeric(get0("formFirstKRows")), last.k.rows = as.numeric(get0("formLastKRows")),\n select.columns = get0("formSelectCols"), first.k.columns = as.numeric(get0("formFirstKCols")), last.k.columns = as.numeric(get0("formLastKCols")), \nauto.order.rows = get0("formAutoOrderRows", ifnotfound=FALSE), sort.rows = get0("formSortRows", ifnotfound=FALSE), sort.rows.exclude = get0("formSortRowsExclude"), sort.rows.column = if (sum(nchar(get0("formSortRowsColumn"))) == 0) NULL else formSortRowsColumn, sort.rows.decreasing = get0("formSortRowsDecr"),\nauto.order.columns = get0("formAutoOrderCols", ifnotfound=FALSE), sort.columns = get0("formSortCols"), sort.columns.exclude = get0("formSortColsExclude"), sort.columns.row = if (sum(nchar(get0("formSortColsRow"))) == 0) NULL else formSortColsRow, sort.columns.decreasing = get0("formSortColsDecr"), reverse.rows = get0("formReverseRows"), reverse.columns = get0("formReverseCols"), hide.output.threshold = if (isTRUE(get0("formHideOutput"))) as.numeric(get0("formHideOutputThres")) else 0, hide.rows.threshold = if (isTRUE(get0("formHideRowsBySize"))) as.numeric(get0("formHideRowsThres")) else 0, hide.columns.threshold = if (isTRUE(get0("formHideColsBySize"))) as.numeric(get0("formHideColsThres")) else 0, as.percentages = get0("formAsPercentages", ifnotfound = FALSE), show.labels = !get0("formNames", ifnotfound=TRUE), date.format = get0("formDateFormat", ifnotfound = "Automatic"), scatter.mult.yvals = get0("formScatterMultYvals", ifnotfound = FALSE))\n</pre>\n<pre class='debug-source'>>pc <- PrepareColors(pd$data, formChartType, small.multiples = isTRUE(get0("formSmallMultiples")), scatter.colors.column = if (is.na(pd$scatter.variable.indices["colors"])) pd$scatter.variable.indices["groups"] else pd$scatter.variable.indices["colors"], palette = get0("formPalette"), palette.custom.color = get0("formCustomColor"), palette.custom.gradient.start = get0("formCustomGradientStart"), palette.custom.gradient.end = get0("formCustomGradientEnd"), palette.custom.palette = get0("formCustomPalette"), \nfit.palette = get0("formFitPalette"), fit.palette.custom.color = get0("formFitCustomColor"), fit.palette.custom.gradient.start = get0("formFitCustomGradientStart"), fit.palette.custom.gradient.end = get0("formFitCustomGradientEnd"), fit.palette.custom.palette = get0("formFitCustomPalette"),\nfit.CI.palette = get0("formFitCIPalette"), fit.CI.palette.custom.color = get0("formFitCICustomColor"), fit.CI.palette.custom.gradient.start = get0("formFitCICustomGradientStart"), fit.CI.palette.custom.gradient.end = get0("formFitCICustomGradientEnd"), fit.CI.palette.custom.palette = get0("formFitCICustomPalette"), \nsubslice.palette = get0("formSubslicePalette"), subslice.palette.custom.color = get0("formSubsliceCustomColor"), subslice.palette.custom.gradient.start = get0("formSubsliceCustomGradientStart"), subslice.palette.custom.gradient.end = get0("formSubsliceCustomGradientEnd"), subslice.palette.custom.palette = get0("formSubsliceCustomPalette")) \n</pre>\n<pre class='debug-source'>>pn <- PrepareNumbers(categories.format.list = list(get0("formCategoriesNumberType"), get0("formCategoriesDateType"), get0("formCategoriesNumberCustom"), get0("formCategoriesSeparateThousands"), get0("formCategoriesDecimals")), values.format.list = list(get0("formValuesNumberType"), get0("formValuesDateType"), get0("formValuesNumberCustom"), get0("formValuesSeparateThousands"), get0("formValuesDecimals")), hover.format.list = list(get0("formHoverNumberType"), get0("formHoverDateType"), get0("formHoverNumberCustom"), get0("formHoverSeparateThousands"), get0("formHoverDecimals")), data.labels.format.list = list(get0("formDataLabelNumberType"), get0("formDataLabelDateType"), get0("formDataLabelCustom"), get0("formDataLabelSeparateThousands"), get0("formDataLabelDecimals")), !is.null(attr(pd$data, "statistic")) && grepl("%", attr(pd$data, "statistic"), fixed = TRUE))\n</pre>\n<pre class='debug-source'>>\n</pre>\n<pre class='debug-source'>># Creating the chart.\n</pre>\n<pre class='debug-source'>>chart <- if(formChartType== "Table") pd$data else CChart(chart.type = formChartType,\n x = pd$data,\n weights = pd$weights,\n small.multiples = get0("formSmallMultiples", ifnotfound=FALSE), \n nrows = get0("formSmallMultNRows"),\n x.order = get0("formSmallMultXOrder"),\n average.show = get0("formSmallMultAverage", ifnotfound = FALSE),\n average.color = get0("formSmallMultAverageColor"),\n share.axes = get0("formSmallMultShareAxes", ifnotfound = TRUE),\n panel.title.show = get0("formSmallMultTitle", ifnotfound = TRUE),\n panel.title.font.family = get0("formSmallMultTitleFontFamily"),\n panel.title.font.color = get0("formSmallMultTitleFontColor"),\n panel.title.font.size = get0("formSmallMultTitleFontSize"),\n panel.title.wrap = get0("formSmallMultTitleWrap"),\n panel.title.wrap.nchar = get0("formSmallMultTitleWrapNchar"),\n pad.left = get0("formSmallMultPadLeft", ifnotfound=0),\n pad.right = get0("formSmallMultPadRight", ifnotfound=0),\n pad.top = get0("formSmallMultPadTop"),\n pad.bottom = get0("formSmallMultPadBottom"),\n max.label.length = 0,\n #Scatter plot inputs.\n scatter.max.labels = get0("formScatterMaxLab", ifnotfound=20),\n scatter.labels.as.hovertext= if (exists("formScatterLabelType")) formScatterLabelType!="On chart" else TRUE,\n scatter.colors.as.categorical = if (exists("formScatterColorType")) formScatterColorType=="Categories" else TRUE,\n scatter.sizes.as.diameter = if (exists("formScatterSizeType")) formScatterSizeType=="Diameter" else FALSE,\n scatter.x.column = pd$scatter.variable.indices["x"],\n scatter.y.column = pd$scatter.variable.indices["y"],\n scatter.sizes.column = pd$scatter.variable.indices["sizes"],\n scatter.colors.column = pd$scatter.variable.indices["colors"],\n scatter.groups.column = pd$scatter.variable.indices["groups"],\n trend.lines = get0("formTrendLines", ifnotfound=FALSE),\n logos = get0("formLogos"),\n logo.size = get0("formLogoSize"),\n # Chart: DATA SERIES\n colors = pc$series.colors,\n pie.subslice.colors = pc$subslice.colors,\n #Chart: FIT LINE\n fit.type = get0("formFit", ifnotfound="None"),\n fit.ignore.last = get0("formFitIgnoreLast"),\n fit.line.type = get0("formFitLineType"),\n fit.line.colors = pc$fit.line.colors,\n fit.line.width = get0("formFitLineWidth", ifnotfound=1),\n fit.line.opacity = get0("formFitOpacity"),\n fit.CI.show = isTRUE(get0("formFitCI")),\n fit.CI.colors = pc$fit.CI.colors,\n fit.CI.opacity = get0("formFitCIOpacity"),\n # Chart: DATA LABELS\n data.label.show = get0("formDataLabelShow", ifnotfound = FALSE),\n data.label.format = pn$data.labels.number.format,\n data.label.font.size = get0("formDataLabelFontSize", ifnotfound = 10),\n data.label.font.family = get0("formDataLabelFontFamily", ifnotfound = get0("formFont")),\n data.label.font.color = get0("formDataLabelFontColor"),\n data.label.prefix = get0("formPrefix", ifnotfound=""),\n data.label.suffix = get0("formSuffix", ifnotfound=""),\n data.label.position = get0("formDataLabelPosition", ifnotfound="top middle"),\n data.label.align.horizontal = get0("formDataLabelHorizAlign", ifnotfound="Default"),\n # Chart: FONT\n global.font.family = get0("formFont"),\n global.font.color = get0("formFontColor"),\n #Chart: GRIDLINES\n grid.show = get0("formShowGrid", ifnotfound=FALSE),\n # Chart: LEGEND\n legend.show = get0("formLegendShow", ifnotfound=TRUE),\n legend.title = get0("formLegendTitle"),\n legend.font.family = get0("formLegendFontFamily"),\n legend.font.color = get0("formLegendFontColor"),\n legend.font.size = get0("formLegendFontSize"),\n legend.x.position = get0("formLegendXPos", ifnotfound=1.02),\n legend.y.position = get0("formLegendYPos", ifnotfound=1.0),\n legend.width = get0("formLegendWidth", ifnotfound=250),\n # Chart: TITLE\n title = paste0("", if (sum(nchar(get0("formTitle"))) > 0) formTitle else pd$chart.title),\n title.font.family = get0("formTitleFontFamily"),\n title.font.color = get0("formTitleFontColor"),\n title.font.size = get0("formTitleFontSize", ifnotfound=0),\n subtitle = get0("formSubtitle", ifnotfound=""),\n subtitle.font.family = get0("formSubtitleFontFamily"),\n subtitle.font.color = get0("formSubtitleFontColor"),\n subtitle.font.size = get0("formSubtitleFontSize"),\n footer = get0("formFooter", ifnotfound=""),\n footer.font.family = get0("formFooterFontFamily"),\n footer.font.color = get0("formFooterFontColor"),\n footer.font.size = get0("formFooterFontSize"),\n footer.wrap = get0("formFooterWrap", ifnotfound=FALSE),\n footer.wrap.nchar = get0("formFooterWrapNchar"),\n #Chart: CATEGORIES_AXIS\n categories.axis.show = get0("formCategoriesAxisShow", ifnotfound=FALSE),\n categories.tick.show = get0("formCategoriesAxisShow", ifnotfound=FALSE),\n categories.tick.format = pn$categories.number.format,\n categories.tick.prefix = paste0("", get0("formCategoriesPrefix"), get0("formCategoriesCurrency")), # currency is just another prefix\n categories.tick.suffix = get0("formCategoriesSuffix", ifnotfound=""),\n categories.tick.interval = get0("formCategoriesTickInterval", ifnotfound=0),\n categories.tick.units = get0("formCategoriesTickUnits"),\n categories.title = paste0("", if (sum(nchar(get0("formCategoriesTitle", ifnotfound = " "))) > 0) get0("formCategoriesTitle", ifnotfound = " ") else pd$categories.title),\n categories.title.font.family = get0("formCategoriesTitleFontFamily"),\n categories.title.font.color = get0("formCategoriesTitleFontColor"),\n categories.title.font.size = get0("formCategoriesTitleFontSize", ifnotfound = 0), \n categories.tick.font.family = get0("formCategoriesTickFontFamily"),\n categories.tick.font.color = get0("formCategoriesTickFontColor"),\n categories.tick.font.size = get0("formCategoriesTickFontSize", ifnotfound=10),\n categories.tick.angle = if (!exists("formCategoriesTickAngle")) NULL else switch(get0("formCategoriesTickAngle"), Automatic=NULL, Horizontal=0, Vertical=90, Diagonal=45),\n categories.tick.label.wrap = get0("formLabelWrap", ifnotfound=FALSE),\n categories.tick.label.wrap.nchar = get0("formLabelWrapNchar", ifnotfound=100),\n categories.tick.align.horizontal = get0("formCategoriesTickHorizAlign", ifnotfound = "Default"),\n #Chart: VALUES_AXIS\n values.axis.show = get0("formValuesAxisShow", ifnotfound=FALSE),\n values.tick.show = get0("formValuesAxisShow", ifnotfound=FALSE),\n values.tick.format = pn$values.number.format,\n values.tick.prefix = paste0("", get0("formValuesPrefix"), get0("formValuesCurrency")), # currency is just another prefix\n values.tick.suffix = get0("formValuesSuffix", ifnotfound=""),\n values.title = paste0("", if (sum(nchar(get0("formValuesTitle", ifnotfound=" "))) > 0) get0("formValuesTitle", ifnotfound = " ") else pd$values.title),\n values.title.font.family = get0("formValuesTitleFontFamily"),\n values.title.font.color = get0("formValuesTitleFontColor"),\n values.title.font.size = get0("formValuesTitleFontSize", ifnotfound = 0),\n values.bounds.minimum = if (sum(nchar(get0("formValuesMin"))) == 0) NULL else as.numeric(formValuesMin), \n values.bounds.maximum = if (sum(nchar(get0("formValuesMax"))) == 0) NULL else as.numeric(formValuesMax), \n values.number.ticks = get0("formValuesNumberTicks"),\n values.tick.font.size = get0("formValuesTickFontSize", ifnotfound=10),\n values.tick.font.family = get0("formValuesTickFontFamily"),\n values.tick.font.color = get0("formValuesTickFontColor"),\n # Chart: HOVER\n values.hovertext.format = pn$hover.number.format,\n # Chart: MARGINS\n margin.top = get0("formMarginTop"),\n margin.left = get0("formMarginLeft"),\n margin.bottom = get0("formMarginBottom"),\n margin.right = get0("formMarginRight"),\n # Chart: APPEARANCE\n type = if(get0("formStackSeries", ifnotfound=FALSE)) "Stacked" else formChartType,\n adjust = get0("formBandwidth"),\n automatic.lower.density = get0("formAutomaticLower"),\n pie.inner.radius = get0("formPieRadius"),\n pie.border.color = get0("formBorderColor"),\n density.color = get0("formDensityColor"),\n vertical = get0("formVertical"),\n show.mean = get0("formShowMean"),\n show.median = get0("formShowMedian"),\n show.quartiles = get0("formShowQuartiles"),\n show.range = get0("formShowRange"),\n show.values = get0("formShowValues", ifnotfound = FALSE),\n histogram.cumulative = get0("formHistogramCumulative"),\n histogram.counts = get0("formHistogramCounts"),\n maximum.bins = get0("formMaximumBins"),\n box.points = get0("formBoxPoints"),\n mean.color = get0("formMeanColor"),\n median.color = get0("formMedianColor"),\n quartile.color = get0("formQuartilesColor"),\n range.color = get0("formRangeColor"),\n values.color = get0("formValuesColor"),\n window.start = get0("formWindowStart"),\n range.bars = get0("formRangeBars"),\n line.thickness = get0("formLineThickness"),\n opacity = get0("formFillOpacity"),\n # BarPictograph parameters\n image = get0("formIcon"),\n custom.image = get0("formCustomIcon"),\n base.image = get0("formBaseImage", ifnotfound = ""), \n hide.base.image = get0("formHideBase", ifnotfound = FALSE),\n base.icon.color = get0("formBaseColor", ifnotfound = ""),\n scale = if (exists("formIconScale")) as.numeric(formIconScale), \n total.icons = if (exists("formTotalIcons")) as.numeric(formTotalIcons),\n icon.ncol = if (exists("formIconNCol")) as.numeric(formIconNCol),\n fix.icon.nrow = get0("formFixNRows", ifnotfound = TRUE),\n fill.direction = get0("formFillDirection"),\n label.color.asIcon = get0("formLabelColorAsIcon", ifnotfound = FALSE),\n categories.tick.align = get0("formCategoriesTickAlign"),\n pad.row = get0("formIconPadding", ifnotfound = 0),\n graphic.width.inch = QOutputSizeWidth,\n graphic.height.inch = QOutputSizeHeight,\n # GeographicMap parameters\n mapping.package = get0("formMapPackage"),\n high.resolution = get0("formHighRes", ifnotfound = TRUE),\n show.missing.regions = get0("formShowMissingRegions", ifnotfound = TRUE),\n treat.NA.as.0 = get0("formNAasZero", ifnotfound = FALSE),\n color.NA = get0("formNAColor"), \n ocean.color = get0("formOceanColor"),\n zip.country = get0("formZipCountry"),\n background = get0("formBackgroundMap"),\n # Heat parameters\n sort.rows = get0("formHeatSortRows"),\n sort.columns = get0("formHeatSortColumns"),\n standardization = get0("formHeatStandardization"),\n left.columns = get0("formLeftColumns"),\n left.column.headings = get0("formLeftColumnHeadings"),\n right.columns = get0("formRightColumns"),\n right.column.headings = get0("formRightColumnHeadings"),\n # General arguments\n append.data = TRUE,\n warn.if.no.match = FALSE)\n</pre>\n<pre class='debug-message'>Loading required package: flipStandardCharts\n</pre>\r\n<div class=\"debug-summarystatistics\">\r\n<table>\r\n<tr><th>Total time:</th><td>11.46s</td></tr>\r\n<tr><th>Time on R server:</th><td title=\"rApacheServe 11.42s (pre 0.02s, post 0.00s) httpget_code() setup for eval 0.00s session$eval 11.22s (pre 0.00s, post 0.18s) unexplained 0.20s apparmor forking (pre 0.00s, post 0.00s)\">11.42s</td></tr>\r\n<tr><th>Time evaluating code:</th><td>10.72s</td></tr>\r\n<tr><th>Bytes sent:</th><td>397,765</td></tr>\r\n<tr><th>Bytes received:</th><td>41,177</td></tr>\r\n</table>\r\n</div>","message":"Loading required package: flipStandardCharts\n","htmlwidgets":"<div id=\"htmlwidget_container\">\n <div id=\"htmlwidget-d5a9f8c03b10179f18d3\" style=\"width:960px;height:500px;\" class=\"rhtmlDonut html-widget\"></div>\n</div>\n<script type=\"application/json\" data-for=\"htmlwidget-d5a9f8c03b10179f18d3\">{\"x\":{\"values\":[7.43488238820475,2.85717303868104,2.32635523594983,0.995085313776703,7.94113996424242,6.02544228214683,16.7920646699819,6.49710427004629,9.30410050150398,1.25574062287904,13.7109446180092,2.84660950031823,10.5302632169672,8.60109702345898,2.88199735383364],\"labels\":[\"Art\",\"Comics\",\"Crafts\",\"Dance\",\"Design\",\"Fashion\",\"Film & Video\",\"Food\",\"Games\",\"Journalism\",\"Music\",\"Photography\",\"Publishing\",\"Technology\",\"Theater\"],\"settings\":{\"valuesFont\":\"Arial\",\"valuesSize\":10,\"valuesColor\":[\"#5C9AD3\",\"#ED7D31\",\"#A5A5A5\",\"#FFC000\",\"#4473C5\",\"#70AD46\",\"#255F91\",\"#9E480D\",\"#636365\",\"#987300\",\"#26408B\",\"#42682B\",\"#5C9AD3\",\"#ED7D31\",\"#A5A5A5\"],\"valuesDisplay\":\"original\",\"valuesOrder\":\"initial\",\"valuesDec\":0,\"labelsFont\":\"Arial\",\"labelsSize\":10,\"labelsColor\":\"#2C2C2C\",\"labelsInner\":false,\"labelsBold\":false,\"labelsMinFontSize\":8,\"groups\":null,\"groupsFont\":\"Arial\",\"groupsFontColor\":\"#2C2C2C\",\"groupsSize\":10,\"groupsBold\":false,\"groupsColor\":null,\"groupsNames\":null,\"groupsSums\":null,\"groupsCounts\":null,\"groupLabelsMinFontSize\":8,\"footer\":\"\",\"footerFontFamily\":null,\"footerFontSize\":null,\"footerFontColor\":null,\"title\":\"\",\"titleFontFamily\":null,\"titleFontSize\":0,\"titleFontColor\":null,\"titleTopPadding\":0,\"subtitle\":\"\",\"subtitleFontFamily\":null,\"subtitleFontSize\":null,\"subtitleFontColor\":null,\"prefix\":\"\",\"suffix\":\"%\",\"orderControl\":false,\"gradient\":false,\"innerRadius\":\"70%\",\"minAngle\":0.003,\"borderColor\":\"#FFFFFF\"}},\"evals\":[],\"jsHooks\":[]}</script>\n<script type=\"application/htmlwidget-sizing\" data-for=\"htmlwidget-d5a9f8c03b10179f18d3\">{\"viewer\":{\"width\":450,\"height\":350,\"padding\":0,\"fill\":true},\"browser\":{\"width\":960,\"height\":500,\"padding\":0,\"fill\":true}}</script>","htmlwidget-head":"{\"stylesheets\":[],\"javascript\":[\"https://rserverhtmlwidgetasset.azureedge.net/htmlwidgets-917a66c6e5036eb1bfd1fb672a82635a.js\",\"https://rserverhtmlwidgetasset.azureedge.net/rhtmlDonut-29e68d640007f745e755759ae28039fa.js\"],\"attachments\":[],\"widget-cannot-re-render\":false}","warning":""},"secondsTaken":11.4607716,"updated":"2018-08-08T05:58:45.2387259Z","lastUpdatedMessage":null,"executedCode":"# VERSION 1.2.3\nlibrary(flipChart)\n# Processing all the selections from the 'Inputs' and 'Charts' tab.\npd <- PrepareData(formChartType, QFilter, QPopulationWeight, input.data.table = get0(\"formTable\"), input.data.raw = if (!exists(\"formX\")) NULL else list(X = get0(\"formX\"), Y = get0(\"formY\"), Z1 = get0(\"formZ\"), Z2 = get0(\"formZ2\"), groups = get0(\"formGroups\"), labels = get0(\"formScatterLabels\")), input.data.pasted = if (length(get0(\"formPastedData\")) == 0) NULL else list(get0(\"formPastedData\"), !get0(\"formNotDataFrame\", ifnotfound = TRUE), get0(\"formPastedColumnNames\"), get0(\"formPastedRowNames\")), first.aggregate = get0(\"formFirstAggregate\", ifnotfound = FALSE), group.by.last = get0(\"formGroupByLastColumn\", ifnotfound = FALSE), tidy = get0(\"formTidy\", ifnotfound = FALSE), tidy.labels = get0(\"formTidyLabels\", ifnotfound = FALSE), transpose = get0(\"formTranspose\"), row.names.to.remove = get0(\"formIgnoreRows\"), column.names.to.remove = get0(\"formIgnoreCols\"), hide.empty.rows = get0(\"formHideEmptyRows\", ifnotfound = FALSE), hide.empty.columns = get0(\"formHideEmptyCols\", ifnotfound = FALSE), select.rows = get0(\"formSelectRows\"), first.k.rows = as.numeric(get0(\"formFirstKRows\")), last.k.rows = as.numeric(get0(\"formLastKRows\")),\n select.columns = get0(\"formSelectCols\"), first.k.columns = as.numeric(get0(\"formFirstKCols\")), last.k.columns = as.numeric(get0(\"formLastKCols\")), \nauto.order.rows = get0(\"formAutoOrderRows\", ifnotfound=FALSE), sort.rows = get0(\"formSortRows\", ifnotfound=FALSE), sort.rows.exclude = get0(\"formSortRowsExclude\"), sort.rows.column = if (sum(nchar(get0(\"formSortRowsColumn\"))) == 0) NULL else formSortRowsColumn, sort.rows.decreasing = get0(\"formSortRowsDecr\"),\nauto.order.columns = get0(\"formAutoOrderCols\", ifnotfound=FALSE), sort.columns = get0(\"formSortCols\"), sort.columns.exclude = get0(\"formSortColsExclude\"), sort.columns.row = if (sum(nchar(get0(\"formSortColsRow\"))) == 0) NULL else formSortColsRow, sort.columns.decreasing = get0(\"formSortColsDecr\"), reverse.rows = get0(\"formReverseRows\"), reverse.columns = get0(\"formReverseCols\"), hide.output.threshold = if (isTRUE(get0(\"formHideOutput\"))) as.numeric(get0(\"formHideOutputThres\")) else 0, hide.rows.threshold = if (isTRUE(get0(\"formHideRowsBySize\"))) as.numeric(get0(\"formHideRowsThres\")) else 0, hide.columns.threshold = if (isTRUE(get0(\"formHideColsBySize\"))) as.numeric(get0(\"formHideColsThres\")) else 0, as.percentages = get0(\"formAsPercentages\", ifnotfound = FALSE), show.labels = !get0(\"formNames\", ifnotfound=TRUE), date.format = get0(\"formDateFormat\", ifnotfound = \"Automatic\"), scatter.mult.yvals = get0(\"formScatterMultYvals\", ifnotfound = FALSE))\npc <- PrepareColors(pd$data, formChartType, small.multiples = isTRUE(get0(\"formSmallMultiples\")), scatter.colors.column = if (is.na(pd$scatter.variable.indices[\"colors\"])) pd$scatter.variable.indices[\"groups\"] else pd$scatter.variable.indices[\"colors\"], palette = get0(\"formPalette\"), palette.custom.color = get0(\"formCustomColor\"), palette.custom.gradient.start = get0(\"formCustomGradientStart\"), palette.custom.gradient.end = get0(\"formCustomGradientEnd\"), palette.custom.palette = get0(\"formCustomPalette\"), \nfit.palette = get0(\"formFitPalette\"), fit.palette.custom.color = get0(\"formFitCustomColor\"), fit.palette.custom.gradient.start = get0(\"formFitCustomGradientStart\"), fit.palette.custom.gradient.end = get0(\"formFitCustomGradientEnd\"), fit.palette.custom.palette = get0(\"formFitCustomPalette\"),\nfit.CI.palette = get0(\"formFitCIPalette\"), fit.CI.palette.custom.color = get0(\"formFitCICustomColor\"), fit.CI.palette.custom.gradient.start = get0(\"formFitCICustomGradientStart\"), fit.CI.palette.custom.gradient.end = get0(\"formFitCICustomGradientEnd\"), fit.CI.palette.custom.palette = get0(\"formFitCICustomPalette\"), \nsubslice.palette = get0(\"formSubslicePalette\"), subslice.palette.custom.color = get0(\"formSubsliceCustomColor\"), subslice.palette.custom.gradient.start = get0(\"formSubsliceCustomGradientStart\"), subslice.palette.custom.gradient.end = get0(\"formSubsliceCustomGradientEnd\"), subslice.palette.custom.palette = get0(\"formSubsliceCustomPalette\")) \npn <- PrepareNumbers(categories.format.list = list(get0(\"formCategoriesNumberType\"), get0(\"formCategoriesDateType\"), get0(\"formCategoriesNumberCustom\"), get0(\"formCategoriesSeparateThousands\"), get0(\"formCategoriesDecimals\")), values.format.list = list(get0(\"formValuesNumberType\"), get0(\"formValuesDateType\"), get0(\"formValuesNumberCustom\"), get0(\"formValuesSeparateThousands\"), get0(\"formValuesDecimals\")), hover.format.list = list(get0(\"formHoverNumberType\"), get0(\"formHoverDateType\"), get0(\"formHoverNumberCustom\"), get0(\"formHoverSeparateThousands\"), get0(\"formHoverDecimals\")), data.labels.format.list = list(get0(\"formDataLabelNumberType\"), get0(\"formDataLabelDateType\"), get0(\"formDataLabelCustom\"), get0(\"formDataLabelSeparateThousands\"), get0(\"formDataLabelDecimals\")), !is.null(attr(pd$data, \"statistic\")) && grepl(\"%\", attr(pd$data, \"statistic\"), fixed = TRUE))\n\n# Creating the chart.\nchart <- if(formChartType== \"Table\") pd$data else CChart(chart.type = formChartType,\n x = pd$data,\n weights = pd$weights,\n small.multiples = get0(\"formSmallMultiples\", ifnotfound=FALSE), \n nrows = get0(\"formSmallMultNRows\"),\n x.order = get0(\"formSmallMultXOrder\"),\n average.show = get0(\"formSmallMultAverage\", ifnotfound = FALSE),\n average.color = get0(\"formSmallMultAverageColor\"),\n share.axes = get0(\"formSmallMultShareAxes\", ifnotfound = TRUE),\n panel.title.show = get0(\"formSmallMultTitle\", ifnotfound = TRUE),\n panel.title.font.family = get0(\"formSmallMultTitleFontFamily\"),\n panel.title.font.color = get0(\"formSmallMultTitleFontColor\"),\n panel.title.font.size = get0(\"formSmallMultTitleFontSize\"),\n panel.title.wrap = get0(\"formSmallMultTitleWrap\"),\n panel.title.wrap.nchar = get0(\"formSmallMultTitleWrapNchar\"),\n pad.left = get0(\"formSmallMultPadLeft\", ifnotfound=0),\n pad.right = get0(\"formSmallMultPadRight\", ifnotfound=0),\n pad.top = get0(\"formSmallMultPadTop\"),\n pad.bottom = get0(\"formSmallMultPadBottom\"),\n max.label.length = 0,\n #Scatter plot inputs.\n scatter.max.labels = get0(\"formScatterMaxLab\", ifnotfound=20),\n scatter.labels.as.hovertext= if (exists(\"formScatterLabelType\")) formScatterLabelType!=\"On chart\" else TRUE,\n scatter.colors.as.categorical = if (exists(\"formScatterColorType\")) formScatterColorType==\"Categories\" else TRUE,\n scatter.sizes.as.diameter = if (exists(\"formScatterSizeType\")) formScatterSizeType==\"Diameter\" else FALSE,\n scatter.x.column = pd$scatter.variable.indices[\"x\"],\n scatter.y.column = pd$scatter.variable.indices[\"y\"],\n scatter.sizes.column = pd$scatter.variable.indices[\"sizes\"],\n scatter.colors.column = pd$scatter.variable.indices[\"colors\"],\n scatter.groups.column = pd$scatter.variable.indices[\"groups\"],\n trend.lines = get0(\"formTrendLines\", ifnotfound=FALSE),\n logos = get0(\"formLogos\"),\n logo.size = get0(\"formLogoSize\"),\n # Chart: DATA SERIES\n colors = pc$series.colors,\n pie.subslice.colors = pc$subslice.colors,\n #Chart: FIT LINE\n fit.type = get0(\"formFit\", ifnotfound=\"None\"),\n fit.ignore.last = get0(\"formFitIgnoreLast\"),\n fit.line.type = get0(\"formFitLineType\"),\n fit.line.colors = pc$fit.line.colors,\n fit.line.width = get0(\"formFitLineWidth\", ifnotfound=1),\n fit.line.opacity = get0(\"formFitOpacity\"),\n fit.CI.show = isTRUE(get0(\"formFitCI\")),\n fit.CI.colors = pc$fit.CI.colors,\n fit.CI.opacity = get0(\"formFitCIOpacity\"),\n # Chart: DATA LABELS\n data.label.show = get0(\"formDataLabelShow\", ifnotfound = FALSE),\n data.label.format = pn$data.labels.number.format,\n data.label.font.size = get0(\"formDataLabelFontSize\", ifnotfound = 10),\n data.label.font.family = get0(\"formDataLabelFontFamily\", ifnotfound = get0(\"formFont\")),\n data.label.font.color = get0(\"formDataLabelFontColor\"),\n data.label.prefix = get0(\"formPrefix\", ifnotfound=\"\"),\n data.label.suffix = get0(\"formSuffix\", ifnotfound=\"\"),\n data.label.position = get0(\"formDataLabelPosition\", ifnotfound=\"top middle\"),\n data.label.align.horizontal = get0(\"formDataLabelHorizAlign\", ifnotfound=\"Default\"),\n # Chart: FONT\n global.font.family = get0(\"formFont\"),\n global.font.color = get0(\"formFontColor\"),\n #Chart: GRIDLINES\n grid.show = get0(\"formShowGrid\", ifnotfound=FALSE),\n # Chart: LEGEND\n legend.show = get0(\"formLegendShow\", ifnotfound=TRUE),\n legend.title = get0(\"formLegendTitle\"),\n legend.font.family = get0(\"formLegendFontFamily\"),\n legend.font.color = get0(\"formLegendFontColor\"),\n legend.font.size = get0(\"formLegendFontSize\"),\n legend.x.position = get0(\"formLegendXPos\", ifnotfound=1.02),\n legend.y.position = get0(\"formLegendYPos\", ifnotfound=1.0),\n legend.width = get0(\"formLegendWidth\", ifnotfound=250),\n # Chart: TITLE\n title = paste0(\"\", if (sum(nchar(get0(\"formTitle\"))) > 0) formTitle else pd$chart.title),\n title.font.family = get0(\"formTitleFontFamily\"),\n title.font.color = get0(\"formTitleFontColor\"),\n title.font.size = get0(\"formTitleFontSize\", ifnotfound=0),\n subtitle = get0(\"formSubtitle\", ifnotfound=\"\"),\n subtitle.font.family = get0(\"formSubtitleFontFamily\"),\n subtitle.font.color = get0(\"formSubtitleFontColor\"),\n subtitle.font.size = get0(\"formSubtitleFontSize\"),\n footer = get0(\"formFooter\", ifnotfound=\"\"),\n footer.font.family = get0(\"formFooterFontFamily\"),\n footer.font.color = get0(\"formFooterFontColor\"),\n footer.font.size = get0(\"formFooterFontSize\"),\n footer.wrap = get0(\"formFooterWrap\", ifnotfound=FALSE),\n footer.wrap.nchar = get0(\"formFooterWrapNchar\"),\n #Chart: CATEGORIES_AXIS\n categories.axis.show = get0(\"formCategoriesAxisShow\", ifnotfound=FALSE),\n categories.tick.show = get0(\"formCategoriesAxisShow\", ifnotfound=FALSE),\n categories.tick.format = pn$categories.number.format,\n categories.tick.prefix = paste0(\"\", get0(\"formCategoriesPrefix\"), get0(\"formCategoriesCurrency\")), # currency is just another prefix\n categories.tick.suffix = get0(\"formCategoriesSuffix\", ifnotfound=\"\"),\n categories.tick.interval = get0(\"formCategoriesTickInterval\", ifnotfound=0),\n categories.tick.units = get0(\"formCategoriesTickUnits\"),\n categories.title = paste0(\"\", if (sum(nchar(get0(\"formCategoriesTitle\", ifnotfound = \" \"))) > 0) get0(\"formCategoriesTitle\", ifnotfound = \" \") else pd$categories.title),\n categories.title.font.family = get0(\"formCategoriesTitleFontFamily\"),\n categories.title.font.color = get0(\"formCategoriesTitleFontColor\"),\n categories.title.font.size = get0(\"formCategoriesTitleFontSize\", ifnotfound = 0), \n categories.tick.font.family = get0(\"formCategoriesTickFontFamily\"),\n categories.tick.font.color = get0(\"formCategoriesTickFontColor\"),\n categories.tick.font.size = get0(\"formCategoriesTickFontSize\", ifnotfound=10),\n categories.tick.angle = if (!exists(\"formCategoriesTickAngle\")) NULL else switch(get0(\"formCategoriesTickAngle\"), Automatic=NULL, Horizontal=0, Vertical=90, Diagonal=45),\n categories.tick.label.wrap = get0(\"formLabelWrap\", ifnotfound=FALSE),\n categories.tick.label.wrap.nchar = get0(\"formLabelWrapNchar\", ifnotfound=100),\n categories.tick.align.horizontal = get0(\"formCategoriesTickHorizAlign\", ifnotfound = \"Default\"),\n #Chart: VALUES_AXIS\n values.axis.show = get0(\"formValuesAxisShow\", ifnotfound=FALSE),\n values.tick.show = get0(\"formValuesAxisShow\", ifnotfound=FALSE),\n values.tick.format = pn$values.number.format,\n values.tick.prefix = paste0(\"\", get0(\"formValuesPrefix\"), get0(\"formValuesCurrency\")), # currency is just another prefix\n values.tick.suffix = get0(\"formValuesSuffix\", ifnotfound=\"\"),\n values.title = paste0(\"\", if (sum(nchar(get0(\"formValuesTitle\", ifnotfound=\" \"))) > 0) get0(\"formValuesTitle\", ifnotfound = \" \") else pd$values.title),\n values.title.font.family = get0(\"formValuesTitleFontFamily\"),\n values.title.font.color = get0(\"formValuesTitleFontColor\"),\n values.title.font.size = get0(\"formValuesTitleFontSize\", ifnotfound = 0),\n values.bounds.minimum = if (sum(nchar(get0(\"formValuesMin\"))) == 0) NULL else as.numeric(formValuesMin), \n values.bounds.maximum = if (sum(nchar(get0(\"formValuesMax\"))) == 0) NULL else as.numeric(formValuesMax), \n values.number.ticks = get0(\"formValuesNumberTicks\"),\n values.tick.font.size = get0(\"formValuesTickFontSize\", ifnotfound=10),\n values.tick.font.family = get0(\"formValuesTickFontFamily\"),\n values.tick.font.color = get0(\"formValuesTickFontColor\"),\n # Chart: HOVER\n values.hovertext.format = pn$hover.number.format,\n # Chart: MARGINS\n margin.top = get0(\"formMarginTop\"),\n margin.left = get0(\"formMarginLeft\"),\n margin.bottom = get0(\"formMarginBottom\"),\n margin.right = get0(\"formMarginRight\"),\n # Chart: APPEARANCE\n type = if(get0(\"formStackSeries\", ifnotfound=FALSE)) \"Stacked\" else formChartType,\n adjust = get0(\"formBandwidth\"),\n automatic.lower.density = get0(\"formAutomaticLower\"),\n pie.inner.radius = get0(\"formPieRadius\"),\n pie.border.color = get0(\"formBorderColor\"),\n density.color = get0(\"formDensityColor\"),\n vertical = get0(\"formVertical\"),\n show.mean = get0(\"formShowMean\"),\n show.median = get0(\"formShowMedian\"),\n show.quartiles = get0(\"formShowQuartiles\"),\n show.range = get0(\"formShowRange\"),\n show.values = get0(\"formShowValues\", ifnotfound = FALSE),\n histogram.cumulative = get0(\"formHistogramCumulative\"),\n histogram.counts = get0(\"formHistogramCounts\"),\n maximum.bins = get0(\"formMaximumBins\"),\n box.points = get0(\"formBoxPoints\"),\n mean.color = get0(\"formMeanColor\"),\n median.color = get0(\"formMedianColor\"),\n quartile.color = get0(\"formQuartilesColor\"),\n range.color = get0(\"formRangeColor\"),\n values.color = get0(\"formValuesColor\"),\n window.start = get0(\"formWindowStart\"),\n range.bars = get0(\"formRangeBars\"),\n line.thickness = get0(\"formLineThickness\"),\n opacity = get0(\"formFillOpacity\"),\n # BarPictograph parameters\n image = get0(\"formIcon\"),\n custom.image = get0(\"formCustomIcon\"),\n base.image = get0(\"formBaseImage\", ifnotfound = \"\"), \n hide.base.image = get0(\"formHideBase\", ifnotfound = FALSE),\n base.icon.color = get0(\"formBaseColor\", ifnotfound = \"\"),\n scale = if (exists(\"formIconScale\")) as.numeric(formIconScale), \n total.icons = if (exists(\"formTotalIcons\")) as.numeric(formTotalIcons),\n icon.ncol = if (exists(\"formIconNCol\")) as.numeric(formIconNCol),\n fix.icon.nrow = get0(\"formFixNRows\", ifnotfound = TRUE),\n fill.direction = get0(\"formFillDirection\"),\n label.color.asIcon = get0(\"formLabelColorAsIcon\", ifnotfound = FALSE),\n categories.tick.align = get0(\"formCategoriesTickAlign\"),\n pad.row = get0(\"formIconPadding\", ifnotfound = 0),\n graphic.width.inch = QOutputSizeWidth,\n graphic.height.inch = QOutputSizeHeight,\n # GeographicMap parameters\n mapping.package = get0(\"formMapPackage\"),\n high.resolution = get0(\"formHighRes\", ifnotfound = TRUE),\n show.missing.regions = get0(\"formShowMissingRegions\", ifnotfound = TRUE),\n treat.NA.as.0 = get0(\"formNAasZero\", ifnotfound = FALSE),\n color.NA = get0(\"formNAColor\"), \n ocean.color = get0(\"formOceanColor\"),\n zip.country = get0(\"formZipCountry\"),\n background = get0(\"formBackgroundMap\"),\n # Heat parameters\n sort.rows = get0(\"formHeatSortRows\"),\n sort.columns = get0(\"formHeatSortColumns\"),\n standardization = get0(\"formHeatStandardization\"),\n left.columns = get0(\"formLeftColumns\"),\n left.column.headings = get0(\"formLeftColumnHeadings\"),\n right.columns = get0(\"formRightColumns\"),\n right.column.headings = get0(\"formRightColumnHeadings\"),\n # General arguments\n append.data = TRUE,\n warn.if.no.match = FALSE)","lastSavedCode":"# VERSION 1.2.3\nlibrary(flipChart)\n# Processing all the selections from the 'Inputs' and 'Charts' tab.\npd <- PrepareData(formChartType, QFilter, QPopulationWeight, input.data.table = get0(\"formTable\"), input.data.raw = if (!exists(\"formX\")) NULL else list(X = get0(\"formX\"), Y = get0(\"formY\"), Z1 = get0(\"formZ\"), Z2 = get0(\"formZ2\"), groups = get0(\"formGroups\"), labels = get0(\"formScatterLabels\")), input.data.pasted = if (length(get0(\"formPastedData\")) == 0) NULL else list(get0(\"formPastedData\"), !get0(\"formNotDataFrame\", ifnotfound = TRUE), get0(\"formPastedColumnNames\"), get0(\"formPastedRowNames\")), first.aggregate = get0(\"formFirstAggregate\", ifnotfound = FALSE), group.by.last = get0(\"formGroupByLastColumn\", ifnotfound = FALSE), tidy = get0(\"formTidy\", ifnotfound = FALSE), tidy.labels = get0(\"formTidyLabels\", ifnotfound = FALSE), transpose = get0(\"formTranspose\"), row.names.to.remove = get0(\"formIgnoreRows\"), column.names.to.remove = get0(\"formIgnoreCols\"), hide.empty.rows = get0(\"formHideEmptyRows\", ifnotfound = FALSE), hide.empty.columns = get0(\"formHideEmptyCols\", ifnotfound = FALSE), select.rows = get0(\"formSelectRows\"), first.k.rows = as.numeric(get0(\"formFirstKRows\")), last.k.rows = as.numeric(get0(\"formLastKRows\")),\n select.columns = get0(\"formSelectCols\"), first.k.columns = as.numeric(get0(\"formFirstKCols\")), last.k.columns = as.numeric(get0(\"formLastKCols\")), \nauto.order.rows = get0(\"formAutoOrderRows\", ifnotfound=FALSE), sort.rows = get0(\"formSortRows\", ifnotfound=FALSE), sort.rows.exclude = get0(\"formSortRowsExclude\"), sort.rows.column = if (sum(nchar(get0(\"formSortRowsColumn\"))) == 0) NULL else formSortRowsColumn, sort.rows.decreasing = get0(\"formSortRowsDecr\"),\nauto.order.columns = get0(\"formAutoOrderCols\", ifnotfound=FALSE), sort.columns = get0(\"formSortCols\"), sort.columns.exclude = get0(\"formSortColsExclude\"), sort.columns.row = if (sum(nchar(get0(\"formSortColsRow\"))) == 0) NULL else formSortColsRow, sort.columns.decreasing = get0(\"formSortColsDecr\"), reverse.rows = get0(\"formReverseRows\"), reverse.columns = get0(\"formReverseCols\"), hide.output.threshold = if (isTRUE(get0(\"formHideOutput\"))) as.numeric(get0(\"formHideOutputThres\")) else 0, hide.rows.threshold = if (isTRUE(get0(\"formHideRowsBySize\"))) as.numeric(get0(\"formHideRowsThres\")) else 0, hide.columns.threshold = if (isTRUE(get0(\"formHideColsBySize\"))) as.numeric(get0(\"formHideColsThres\")) else 0, as.percentages = get0(\"formAsPercentages\", ifnotfound = FALSE), show.labels = !get0(\"formNames\", ifnotfound=TRUE), date.format = get0(\"formDateFormat\", ifnotfound = \"Automatic\"), scatter.mult.yvals = get0(\"formScatterMultYvals\", ifnotfound = FALSE))\npc <- PrepareColors(pd$data, formChartType, small.multiples = isTRUE(get0(\"formSmallMultiples\")), scatter.colors.column = if (is.na(pd$scatter.variable.indices[\"colors\"])) pd$scatter.variable.indices[\"groups\"] else pd$scatter.variable.indices[\"colors\"], palette = get0(\"formPalette\"), palette.custom.color = get0(\"formCustomColor\"), palette.custom.gradient.start = get0(\"formCustomGradientStart\"), palette.custom.gradient.end = get0(\"formCustomGradientEnd\"), palette.custom.palette = get0(\"formCustomPalette\"), \nfit.palette = get0(\"formFitPalette\"), fit.palette.custom.color = get0(\"formFitCustomColor\"), fit.palette.custom.gradient.start = get0(\"formFitCustomGradientStart\"), fit.palette.custom.gradient.end = get0(\"formFitCustomGradientEnd\"), fit.palette.custom.palette = get0(\"formFitCustomPalette\"),\nfit.CI.palette = get0(\"formFitCIPalette\"), fit.CI.palette.custom.color = get0(\"formFitCICustomColor\"), fit.CI.palette.custom.gradient.start = get0(\"formFitCICustomGradientStart\"), fit.CI.palette.custom.gradient.end = get0(\"formFitCICustomGradientEnd\"), fit.CI.palette.custom.palette = get0(\"formFitCICustomPalette\"), \nsubslice.palette = get0(\"formSubslicePalette\"), subslice.palette.custom.color = get0(\"formSubsliceCustomColor\"), subslice.palette.custom.gradient.start = get0(\"formSubsliceCustomGradientStart\"), subslice.palette.custom.gradient.end = get0(\"formSubsliceCustomGradientEnd\"), subslice.palette.custom.palette = get0(\"formSubsliceCustomPalette\")) \npn <- PrepareNumbers(categories.format.list = list(get0(\"formCategoriesNumberType\"), get0(\"formCategoriesDateType\"), get0(\"formCategoriesNumberCustom\"), get0(\"formCategoriesSeparateThousands\"), get0(\"formCategoriesDecimals\")), values.format.list = list(get0(\"formValuesNumberType\"), get0(\"formValuesDateType\"), get0(\"formValuesNumberCustom\"), get0(\"formValuesSeparateThousands\"), get0(\"formValuesDecimals\")), hover.format.list = list(get0(\"formHoverNumberType\"), get0(\"formHoverDateType\"), get0(\"formHoverNumberCustom\"), get0(\"formHoverSeparateThousands\"), get0(\"formHoverDecimals\")), data.labels.format.list = list(get0(\"formDataLabelNumberType\"), get0(\"formDataLabelDateType\"), get0(\"formDataLabelCustom\"), get0(\"formDataLabelSeparateThousands\"), get0(\"formDataLabelDecimals\")), !is.null(attr(pd$data, \"statistic\")) && grepl(\"%\", attr(pd$data, \"statistic\"), fixed = TRUE))\n\n# Creating the chart.\nchart <- if(formChartType== \"Table\") pd$data else CChart(chart.type = formChartType,\n x = pd$data,\n weights = pd$weights,\n small.multiples = get0(\"formSmallMultiples\", ifnotfound=FALSE), \n nrows = get0(\"formSmallMultNRows\"),\n x.order = get0(\"formSmallMultXOrder\"),\n average.show = get0(\"formSmallMultAverage\", ifnotfound = FALSE),\n average.color = get0(\"formSmallMultAverageColor\"),\n share.axes = get0(\"formSmallMultShareAxes\", ifnotfound = TRUE),\n panel.title.show = get0(\"formSmallMultTitle\", ifnotfound = TRUE),\n panel.title.font.family = get0(\"formSmallMultTitleFontFamily\"),\n panel.title.font.color = get0(\"formSmallMultTitleFontColor\"),\n panel.title.font.size = get0(\"formSmallMultTitleFontSize\"),\n panel.title.wrap = get0(\"formSmallMultTitleWrap\"),\n panel.title.wrap.nchar = get0(\"formSmallMultTitleWrapNchar\"),\n pad.left = get0(\"formSmallMultPadLeft\", ifnotfound=0),\n pad.right = get0(\"formSmallMultPadRight\", ifnotfound=0),\n pad.top = get0(\"formSmallMultPadTop\"),\n pad.bottom = get0(\"formSmallMultPadBottom\"),\n max.label.length = 0,\n #Scatter plot inputs.\n scatter.max.labels = get0(\"formScatterMaxLab\", ifnotfound=20),\n scatter.labels.as.hovertext= if (exists(\"formScatterLabelType\")) formScatterLabelType!=\"On chart\" else TRUE,\n scatter.colors.as.categorical = if (exists(\"formScatterColorType\")) formScatterColorType==\"Categories\" else TRUE,\n scatter.sizes.as.diameter = if (exists(\"formScatterSizeType\")) formScatterSizeType==\"Diameter\" else FALSE,\n scatter.x.column = pd$scatter.variable.indices[\"x\"],\n scatter.y.column = pd$scatter.variable.indices[\"y\"],\n scatter.sizes.column = pd$scatter.variable.indices[\"sizes\"],\n scatter.colors.column = pd$scatter.variable.indices[\"colors\"],\n scatter.groups.column = pd$scatter.variable.indices[\"groups\"],\n trend.lines = get0(\"formTrendLines\", ifnotfound=FALSE),\n logos = get0(\"formLogos\"),\n logo.size = get0(\"formLogoSize\"),\n # Chart: DATA SERIES\n colors = pc$series.colors,\n pie.subslice.colors = pc$subslice.colors,\n #Chart: FIT LINE\n fit.type = get0(\"formFit\", ifnotfound=\"None\"),\n fit.ignore.last = get0(\"formFitIgnoreLast\"),\n fit.line.type = get0(\"formFitLineType\"),\n fit.line.colors = pc$fit.line.colors,\n fit.line.width = get0(\"formFitLineWidth\", ifnotfound=1),\n fit.line.opacity = get0(\"formFitOpacity\"),\n fit.CI.show = isTRUE(get0(\"formFitCI\")),\n fit.CI.colors = pc$fit.CI.colors,\n fit.CI.opacity = get0(\"formFitCIOpacity\"),\n # Chart: DATA LABELS\n data.label.show = get0(\"formDataLabelShow\", ifnotfound = FALSE),\n data.label.format = pn$data.labels.number.format,\n data.label.font.size = get0(\"formDataLabelFontSize\", ifnotfound = 10),\n data.label.font.family = get0(\"formDataLabelFontFamily\", ifnotfound = get0(\"formFont\")),\n data.label.font.color = get0(\"formDataLabelFontColor\"),\n data.label.prefix = get0(\"formPrefix\", ifnotfound=\"\"),\n data.label.suffix = get0(\"formSuffix\", ifnotfound=\"\"),\n data.label.position = get0(\"formDataLabelPosition\", ifnotfound=\"top middle\"),\n data.label.align.horizontal = get0(\"formDataLabelHorizAlign\", ifnotfound=\"Default\"),\n # Chart: FONT\n global.font.family = get0(\"formFont\"),\n global.font.color = get0(\"formFontColor\"),\n #Chart: GRIDLINES\n grid.show = get0(\"formShowGrid\", ifnotfound=FALSE),\n # Chart: LEGEND\n legend.show = get0(\"formLegendShow\", ifnotfound=TRUE),\n legend.title = get0(\"formLegendTitle\"),\n legend.font.family = get0(\"formLegendFontFamily\"),\n legend.font.color = get0(\"formLegendFontColor\"),\n legend.font.size = get0(\"formLegendFontSize\"),\n legend.x.position = get0(\"formLegendXPos\", ifnotfound=1.02),\n legend.y.position = get0(\"formLegendYPos\", ifnotfound=1.0),\n legend.width = get0(\"formLegendWidth\", ifnotfound=250),\n # Chart: TITLE\n title = paste0(\"\", if (sum(nchar(get0(\"formTitle\"))) > 0) formTitle else pd$chart.title),\n title.font.family = get0(\"formTitleFontFamily\"),\n title.font.color = get0(\"formTitleFontColor\"),\n title.font.size = get0(\"formTitleFontSize\", ifnotfound=0),\n subtitle = get0(\"formSubtitle\", ifnotfound=\"\"),\n subtitle.font.family = get0(\"formSubtitleFontFamily\"),\n subtitle.font.color = get0(\"formSubtitleFontColor\"),\n subtitle.font.size = get0(\"formSubtitleFontSize\"),\n footer = get0(\"formFooter\", ifnotfound=\"\"),\n footer.font.family = get0(\"formFooterFontFamily\"),\n footer.font.color = get0(\"formFooterFontColor\"),\n footer.font.size = get0(\"formFooterFontSize\"),\n footer.wrap = get0(\"formFooterWrap\", ifnotfound=FALSE),\n footer.wrap.nchar = get0(\"formFooterWrapNchar\"),\n #Chart: CATEGORIES_AXIS\n categories.axis.show = get0(\"formCategoriesAxisShow\", ifnotfound=FALSE),\n categories.tick.show = get0(\"formCategoriesAxisShow\", ifnotfound=FALSE),\n categories.tick.format = pn$categories.number.format,\n categories.tick.prefix = paste0(\"\", get0(\"formCategoriesPrefix\"), get0(\"formCategoriesCurrency\")), # currency is just another prefix\n categories.tick.suffix = get0(\"formCategoriesSuffix\", ifnotfound=\"\"),\n categories.tick.interval = get0(\"formCategoriesTickInterval\", ifnotfound=0),\n categories.tick.units = get0(\"formCategoriesTickUnits\"),\n categories.title = paste0(\"\", if (sum(nchar(get0(\"formCategoriesTitle\", ifnotfound = \" \"))) > 0) get0(\"formCategoriesTitle\", ifnotfound = \" \") else pd$categories.title),\n categories.title.font.family = get0(\"formCategoriesTitleFontFamily\"),\n categories.title.font.color = get0(\"formCategoriesTitleFontColor\"),\n categories.title.font.size = get0(\"formCategoriesTitleFontSize\", ifnotfound = 0), \n categories.tick.font.family = get0(\"formCategoriesTickFontFamily\"),\n categories.tick.font.color = get0(\"formCategoriesTickFontColor\"),\n categories.tick.font.size = get0(\"formCategoriesTickFontSize\", ifnotfound=10),\n categories.tick.angle = if (!exists(\"formCategoriesTickAngle\")) NULL else switch(get0(\"formCategoriesTickAngle\"), Automatic=NULL, Horizontal=0, Vertical=90, Diagonal=45),\n categories.tick.label.wrap = get0(\"formLabelWrap\", ifnotfound=FALSE),\n categories.tick.label.wrap.nchar = get0(\"formLabelWrapNchar\", ifnotfound=100),\n categories.tick.align.horizontal = get0(\"formCategoriesTickHorizAlign\", ifnotfound = \"Default\"),\n #Chart: VALUES_AXIS\n values.axis.show = get0(\"formValuesAxisShow\", ifnotfound=FALSE),\n values.tick.show = get0(\"formValuesAxisShow\", ifnotfound=FALSE),\n values.tick.format = pn$values.number.format,\n values.tick.prefix = paste0(\"\", get0(\"formValuesPrefix\"), get0(\"formValuesCurrency\")), # currency is just another prefix\n values.tick.suffix = get0(\"formValuesSuffix\", ifnotfound=\"\"),\n values.title = paste0(\"\", if (sum(nchar(get0(\"formValuesTitle\", ifnotfound=\" \"))) > 0) get0(\"formValuesTitle\", ifnotfound = \" \") else pd$values.title),\n values.title.font.family = get0(\"formValuesTitleFontFamily\"),\n values.title.font.color = get0(\"formValuesTitleFontColor\"),\n values.title.font.size = get0(\"formValuesTitleFontSize\", ifnotfound = 0),\n values.bounds.minimum = if (sum(nchar(get0(\"formValuesMin\"))) == 0) NULL else as.numeric(formValuesMin), \n values.bounds.maximum = if (sum(nchar(get0(\"formValuesMax\"))) == 0) NULL else as.numeric(formValuesMax), \n values.number.ticks = get0(\"formValuesNumberTicks\"),\n values.tick.font.size = get0(\"formValuesTickFontSize\", ifnotfound=10),\n values.tick.font.family = get0(\"formValuesTickFontFamily\"),\n values.tick.font.color = get0(\"formValuesTickFontColor\"),\n # Chart: HOVER\n values.hovertext.format = pn$hover.number.format,\n # Chart: MARGINS\n margin.top = get0(\"formMarginTop\"),\n margin.left = get0(\"formMarginLeft\"),\n margin.bottom = get0(\"formMarginBottom\"),\n margin.right = get0(\"formMarginRight\"),\n # Chart: APPEARANCE\n type = if(get0(\"formStackSeries\", ifnotfound=FALSE)) \"Stacked\" else formChartType,\n adjust = get0(\"formBandwidth\"),\n automatic.lower.density = get0(\"formAutomaticLower\"),\n pie.inner.radius = get0(\"formPieRadius\"),\n pie.border.color = get0(\"formBorderColor\"),\n density.color = get0(\"formDensityColor\"),\n vertical = get0(\"formVertical\"),\n show.mean = get0(\"formShowMean\"),\n show.median = get0(\"formShowMedian\"),\n show.quartiles = get0(\"formShowQuartiles\"),\n show.range = get0(\"formShowRange\"),\n show.values = get0(\"formShowValues\", ifnotfound = FALSE),\n histogram.cumulative = get0(\"formHistogramCumulative\"),\n histogram.counts = get0(\"formHistogramCounts\"),\n maximum.bins = get0(\"formMaximumBins\"),\n box.points = get0(\"formBoxPoints\"),\n mean.color = get0(\"formMeanColor\"),\n median.color = get0(\"formMedianColor\"),\n quartile.color = get0(\"formQuartilesColor\"),\n range.color = get0(\"formRangeColor\"),\n values.color = get0(\"formValuesColor\"),\n window.start = get0(\"formWindowStart\"),\n range.bars = get0(\"formRangeBars\"),\n line.thickness = get0(\"formLineThickness\"),\n opacity = get0(\"formFillOpacity\"),\n # BarPictograph parameters\n image = get0(\"formIcon\"),\n custom.image = get0(\"formCustomIcon\"),\n base.image = get0(\"formBaseImage\", ifnotfound = \"\"), \n hide.base.image = get0(\"formHideBase\", ifnotfound = FALSE),\n base.icon.color = get0(\"formBaseColor\", ifnotfound = \"\"),\n scale = if (exists(\"formIconScale\")) as.numeric(formIconScale), \n total.icons = if (exists(\"formTotalIcons\")) as.numeric(formTotalIcons),\n icon.ncol = if (exists(\"formIconNCol\")) as.numeric(formIconNCol),\n fix.icon.nrow = get0(\"formFixNRows\", ifnotfound = TRUE),\n fill.direction = get0(\"formFillDirection\"),\n label.color.asIcon = get0(\"formLabelColorAsIcon\", ifnotfound = FALSE),\n categories.tick.align = get0(\"formCategoriesTickAlign\"),\n pad.row = get0(\"formIconPadding\", ifnotfound = 0),\n graphic.width.inch = QOutputSizeWidth,\n graphic.height.inch = QOutputSizeHeight,\n # GeographicMap parameters\n mapping.package = get0(\"formMapPackage\"),\n high.resolution = get0(\"formHighRes\", ifnotfound = TRUE),\n show.missing.regions = get0(\"formShowMissingRegions\", ifnotfound = TRUE),\n treat.NA.as.0 = get0(\"formNAasZero\", ifnotfound = FALSE),\n color.NA = get0(\"formNAColor\"), \n ocean.color = get0(\"formOceanColor\"),\n zip.country = get0(\"formZipCountry\"),\n background = get0(\"formBackgroundMap\"),\n # Heat parameters\n sort.rows = get0(\"formHeatSortRows\"),\n sort.columns = get0(\"formHeatSortColumns\"),\n standardization = get0(\"formHeatStandardization\"),\n left.columns = get0(\"formLeftColumns\"),\n left.column.headings = get0(\"formLeftColumnHeadings\"),\n right.columns = get0(\"formRightColumns\"),\n right.column.headings = get0(\"formRightColumnHeadings\"),\n # General arguments\n append.data = TRUE,\n warn.if.no.match = FALSE)","highlightedCodeSpans":[{"start":121,"length":13,"index":4},{"start":137,"length":7,"index":6},{"start":146,"length":17,"index":6},{"start":2695,"length":13,"index":4},{"start":5041,"length":13,"index":4},{"start":5099,"length":13,"index":4},{"start":8960,"length":9,"index":4},{"start":12974,"length":13,"index":4}],"tableTransformations":"<TabularTransformer>\r\n <TabularTransform type=\"Truncation\" truncationHeaderType=\"Column\" />\r\n <TabularTransform />\r\n</TabularTransformer>","tabularFilteringOptions":null,"hasGuiControls":true,"guiControls":{"Code":"var chart_type_default = \"Donut\";\nvar default_aggregation = true; // when data is Variables, required even if FirstAggregate is not a control so that Table created from a chart has the same data as shown by the chart\nvar default_smallmultiples = false;\n\n// VERSION 2.5.1\nvar allow_control_groups = Q.fileFormatVersion() > 10.9; // Group controls for Displayr and later versions of Q\nvar controls = []; // All controls displayed must be inserted here\nif (allow_control_groups)\n form.group(\"OUTPUT\")\n// Chart type selector.\n// Separate words in chart types e.g. scatter plot not scatterplot\nvar qChartType = form.comboBox({name: \"formChartType\", label: \"Chart type\",\n alternatives: [\"Table\", \n \"Area\", \n \"Bar\",\n \"Bar Pictograph\",\n \"Bean\", \n \"Box\",\n \"Column\",\n \"Density\",\n \"Donut\",\n \"Geographic Map\",\n \"Heat\", \n \"Histogram\", \n \"Line\",\n \"Palm\", \n \"Pie\",\n \"Pyramid\", \n \"Radar\", \n \"Stream\", \n \"Scatter\",\n \"Time Series\",\n \"Venn\", \n \"Violin\"], default_value: chart_type_default, required: true});\nvar chartType = qChartType.getValue();\ncontrols.push(qChartType);\n\n// Some constants and helper functions\nvar displayr = Q.isOnTheWeb();\nfunction isEmpty(x) { return (x == undefined || x.getValue() == null && (x.getValues() == null || x.getValues().length == 0)) }\nfunction isBlankSheet(x) { return (x.getValue() == null || x.getValue().length == 0) }\nfunction isEmptyString(x) { return (x == undefined || x == null || x == \"\") }\n\n// Default axis names\nvar categoriesAxisLabel = \"CATEGORIES (X) AXIS\";\nvar valuesAxisLabel = \"VALUES (Y) AXIS\";\nfunction SwappedXY() { categoriesAxisLabel = \"CATEGORIES (Y) AXIS\"; \n valuesAxisLabel = \"VALUES (X) AXIS\"; }\n\n// * Combo box alternatives *\ncategories_number_formats = [\"Automatic\", \"Number\", \"Category\", \"Percentage\", \"Date/Time\", \"Currency\", \"Metric units suffix\", \"Scientific\", \"Custom\"];\nvalues_number_formats = [\"Automatic\", \"Number\", \"Category\", \"Percentage\", \"Date/Time\", \"Currency\", \"Metric units suffix\", \"Scientific\", \"Custom\"];\nhover_number_formats = [\"Automatic\", \"Number\", \"Category\", \"Percentage\", \"Metric units suffix\", \"Scientific\", \"Custom\"]; // no currency since cannot add as prefix and no date because of charting requirements\ndata_label_formats = [\"Automatic\", \"Number\", \"Percentage\"];\ndate_formats = [\"YY (Year, 2 digit)\", \"DD Mon YY\", \"DD Month YY\", \"DD MM YY\", \"YYYY (Year, 4 digit)\", \"DD Mon YYYY\", \"DD Month YYYY\", \"DD MM YYYY\", \"Mon DD YY\", \"Month DD YY\", \"MM DD YY\", \"Mon DD YYYY\", \"Month DD YYYY\", \"MM DD YYYY\", \"YY Mon DD\", \"YY Month DD\", \"YY MM DD\", \"YYYY Mon DD\", \"YYYY Month DD\", \"YYYY MM DD\", \"Custom\"];\n \n// * Font alternatives *\nfont_families = [\"Andale Mono\", \"Arial\", \"Arial Black\", \"Century Gothic\", \"Comic Sans MS\",\n \"Courier New\", \"Georgia\", \"Impact\", \"Times New Roman\", \"Trebuchet MS\", \"Verdana\"];\n\n// * Palette alternatives *\npalettes = [\"Default colors\", \"Primary colors\", \"Rainbow\", \"Light pastels\", \"Strong colors\", \"Reds, dark to light\", \"Reds, light to dark\", \"Greens, dark to light\", \"Greens, light to dark\", \"Blues, dark to light\", \"Blues, light to dark\", \"Greys, dark to light\", \"Greys, light to dark\", \"Heat colors (red, yellow, white)\", \"Terrain colors (green, beige, grey)\", \"Custom color\", \"Custom gradient\", \"Custom palette\"];\ngradual_palettes = [\"Blues, light to dark\", \"Blues, dark to light\", \"Greys, light to dark\", \"Greys, dark to light\", \"Reds, light to dark\", \"Reds, dark to light\", \"Greens, light to dark\", \"Greens, dark to light\", \"Custom gradient\", \"Custom palette\"];\ngradual_palettes_red = [\"Reds, light to dark\", \"Reds, dark to light\", \"Greys, light to dark\", \"Greys, dark to light\", \"Blues, light to dark\", \"Blues, dark to light\", \"Greens, light to dark\", \"Greens, dark to light\", \"Custom gradient\", \"Custom palette\"];\nline_subslice_palletes = [\"Group colors\"].concat(palettes);\n\n// *Controls linked to specific chart types*\n// - We uses lowercase camel to represent the input data controls. These are not the names of the actual controls.\n// - The input data controls for a specific chart type are store in 'input_data'.\n// - All other controls that modify the data are stored in 'INPUTS'.\n// - Other than for 'INPUTS', the name of an array of controls becomes the name of the group on the Charts tab. \n// - The names used to refer to individual controls in the arrays are the same as the names of the R parameters (where there is a one-to-one match)\n\n// Default controls (modified below for specific charts)\nAPPEARANCE = null; GRIDLINES = null; \nDATA_SERIES = ['Colors'];\nDATA_LABELS = ['DataLabelShow', 'DataLabelDecimals', 'DataLabelFont', 'DataLabelPrefix', 'DataLabelSuffix'];\nTITLE = ['Title', 'Subtitle', 'Footer'];\ntidy = true;\nxLabel = displayr ? \"Variables in 'Data'\" : \"Variables\";\nyLabel = 'Groups';\nINPUTS_data = ['pasted', 'table', 'r', 'variables'];\nvariables_types = ['variables'];\nCATEGORIES_AXIS = ['CategoriesTitle', 'CategoriesAxisShow', 'CategoriesTickFont', 'CategoriesTickAngle', \n 'CategoriesNumberFormat', 'LabelWrap','CategoriesPrefix'];\nVALUES_AXIS = ['ValuesTitle', 'ValuesAxisShow', 'ValuesTickFont', 'ValuesNumberFormat'];\nHOVER = ['HoverNumberFormat'];\nLEGEND = ['LegendShow', 'LegendFont', 'LegendPosition'];\nINPUTS = ['x', 'y', \"AsPercentages\", \"FirstAggregate\", \"DateFormat\"];\nFONT = ['GlobalFontFamily', 'GlobalFontColor'];\nfunction AddMargins() { MARGINS = ['Margin'];}\nif (chartType == \"Venn\")\n{\n FONT = null; DATA_SERIES = null; TITLE = null; CATEGORIES_AXIS = null; VALUES_AXIS = null; LEGEND = null; \n INPUTS_data = ['binaryMulti', 'r', 'pasted', 'table', 'variables'];\n variables_types = ['Questions: PickAny', 'variables']; \n INPUTS = ['AsPercentages', 'x'];\n tidy = false;\n DATA_LABELS = [\"DataLabelFontSize\"];\n hover_number_formats = [\"Automatic\", \"Number\", \"Percentage\"];\n} else if (chartType == \"Stream\")\n{\n categoriesAxisLabel = \"X AXIS\";\n valuesAxisLabel = \"Y AXIS\";\n DATA_LABELS = TITLE = LEGEND = FONT = null;\n CATEGORIES_AXIS = ['CategoriesNumberFormat']; // Additional controls are defined below\n VALUES_AXIS = ['ValuesNumberTicks', 'ValuesAxisShow', 'ValuesNumberFormat'];\n categories_number_formats = [\"Automatic\", \"Number\", \"Date/Time\", \"Scientific\", \"Custom\"];\n values_number_formats = [\"Automatic\", \"Number\", \"Scientific\", \"Custom\"];\n hover_number_formats = [\"Automatic\", \"Number\"];\n AddMargins();\n}else if (chartType == \"Pie\" || chartType == \"Donut\")\n{\n var radiusLabel = \"Donut hole radius %\";\n if (chartType == \"Pie\")\n {\n radiusLabel = \"Radius of pie groupings % (multi-column tables only)\";\n DATA_SERIES.push('SubsliceColors');\n }\n CATEGORIES_AXIS = null; VALUES_AXIS = null; HOVER = null; LEGEND = null;\n DATA_LABELS = [\"DataLabelFormat\", \"DataLabelFont\", \"DataLabelPrefix\", \"DataLabelSuffix\"];\n APPEARANCE = [\"PieRadius\", \"BorderColor\"];\n \n} else if (chartType == \"Radar\")\n{\n categoriesAxisLabel = \"Angular axis\";\n valuesAxisLabel = \"Radial axis\";\n CATEGORIES_AXIS = ['CategoriesAxisShow', 'CategoriesTickFont', 'CategoriesTickAngle', 'LabelWrap'];\n VALUES_AXIS = ['ValuesAxisShow', 'ValuesTickFont', 'ValuesNumberFormat', 'ValuesMax'];\n hover_number_formats = [\"Automatic\", \"Number\", \"Percentage\"];\n DATA_LABELS = ['DataLabelShow', 'DataLabelFormat', 'DataLabelFont', 'DataLabelPrefix', 'DataLabelSuffix'];\n APPEARANCE = ['LineThickness', 'SmallMultiples'];\n DATA_SERIES.push('FillOpacity');\n GRIDLINES = ['ShowGrid'];\n} else if (chartType == \"Palm\")\n{\n FONT = ['GlobalFontFamily'];\n CATEGORIES_AXIS = ['CategoriesTitle', 'CategoriesTickFont'];\n VALUES_AXIS = ['ValuesTitle', 'ValuesAxisShow', 'ValuesTickFont', 'ValuesNumberFormat', 'ValuesSuffix', 'ValuesPrefix'];\n INPUTS = ['x', \"AsPercentages\", \"FirstAggregate\"];\n values_number_formats = [\"Automatic\", \"Number\", \"Percentage\", \"Currency\"];\n DATA_LABELS = null;\n LEGEND = ['LegendFont'];\n TITLE = null;\n HOVER = null;\n} else if (chartType == \"Time Series\")\n{\n INPUTS = ['x', 'y'];\n DATA_LABELS = null;\n TITLE = ['Title'];\n LEGEND = ['LegendWidth'];\n HOVER = null;\n CATEGORIES_AXIS = ['CategoriesTitle', 'CategoriesTickFont'];\n VALUES_AXIS = ['ValuesTitle', 'ValuesTickFont'];\n APPEARANCE = [\"WindowStart\", \"RangeBars\", \"LineThickness\"];\n} else if (chartType == \"Geographic Map\")\n{\n DATA_LABELS = null;\n TITLE = null;\n LEGEND = ['LegendShow', 'LegendTitle', 'LegendFont']\n hover_number_formats = [\"Automatic\", \"Number\", \"Percentage\"];\n CATEGORIES_AXIS = null;\n VALUES_AXIS = ['ValuesMin', 'ValuesMax'];\n palettes = gradual_palettes;\n APPEARANCE = [\"MapPackage\", \"SmallMultiples\"];\n} else if (chartType == \"Heat\")\n{\n palettes = gradual_palettes;\n LEGEND = ['LegendShow', 'LegendFont'];\n DATA_LABELS = ['DataLabelShow', 'DataLabelFormat', 'DataLabelFont', 'DataLabelPrefix', 'DataLabelSuffix'];\n categoriesAxisLabel = \"X AXIS\";\n valuesAxisLabel = \"Y AXIS\";\n CATEGORIES_AXIS = ['CategoriesTitle', 'CategoriesAxisShow', 'CategoriesTickFont'];\n VALUES_AXIS = ['ValuesTitle', 'ValuesAxisShow', 'ValuesTickFont'];\n HOVER = null;\n APPEARANCE = ['SortOrStandardize', 'AdditionalColumns'];\n} else if (chartType == \"Scatter\")\n{\n INPUTS_data = ['pasted', 'table', 'variables'];\n INPUTS = ['x', 'y'];\n GRIDLINES = ['ShowGrid'];\n DATA_SERIES.push('FillOpacity');\n categoriesAxisLabel = \"X AXIS\";\n valuesAxisLabel = \"Y AXIS\";\n categories_number_formats = [\"Automatic\", \"Number\", \"Percentage\", \"Date/Time\", \"Currency\", \"Metric units suffix\", \"Scientific\", \"Custom\"];\n values_number_formats = categories_number_formats;\n xLabel = 'X coordinates';\n yLabel = 'Y coordinates';\n FITLINE = null;\n HOVER = null;\n VALUES_AXIS = ['ValuesTitle', 'ValuesAxisShow', 'ValuesTickFont', 'ValuesNumberFormat', 'ValuesSuffix', 'ValuesPrefix', 'ValuesMin', 'ValuesMax'];\n APPEARANCE = ['dummy', 'SmallMultiples']; \n DATA_LABELS = null; // this is overridden if LabeledScatter\n var isLabeled = false;\n //isLabeled is set in the DATA MANIPULATION tab, as is DATA_LABELS and APPEARANCE\n\n} else if ([\"Column\", \"Bar\", \"Area\", \"Line\"]. indexOf(chartType) != -1)\n{\n \n if (chartType == \"Bar\")\n SwappedXY();\n if (chartType != \"Line\")\n APPEARANCE = ['Stacked'];\n if (chartType == \"Line\")\n APPEARANCE = ['LineThickness'];\n DATA_SERIES.push(\"FillOpacity\");\n FITLINE = ['FitLine'];\n GRIDLINES = ['ShowGrid'];\n APPEARANCE.push(\"SmallMultiples\");\n DATA_LABELS = ['DataLabelShow', 'DataLabelFormat', 'DataLabelFont', 'DataLabelPrefix', 'DataLabelSuffix'];\n VALUES_AXIS = ['ValuesTitle', 'ValuesAxisShow', 'ValuesTickFont', 'ValuesNumberFormat', 'ValuesSuffix', 'ValuesPrefix', 'ValuesMin', 'ValuesMax'];\n\n} else if ([\"Box\", \"Bean\", \"Density\", \"Histogram\", \"Violin\"]. indexOf(chartType) != -1)\n{ \n INPUTS_data = ['pasted', 'table', 'r', 'variables', 'sets'];\n INPUTS = ['x', 'y'];\n variables_types = ['variables'];\n APPEARANCE = ['DensityColor', 'VerticalDistributon'];\n DATA_SERIES = null; DATA_LABELS = null; LEGEND = null;\n CATEGORIES_AXIS = ['CategoriesTickFont', 'LabelWrap'];\n vertical = ['Violin', 'Box'].indexOf(chartType) > -1;\n if (chartType == 'Violin')\n APPEARANCE.push('ShowMean', 'Bandwidth', 'AutomaticLower');\n else if (chartType == 'Bean') {\n APPEARANCE.push('ValuesColor', 'Bandwidth', 'AutomaticLower');\n HOVER = null;\n } else if (chartType == 'Density') {\n APPEARANCE.push('ValuesColor', 'ShowValues', 'Bandwidth', 'AutomaticLower');\n HOVER = null;\n } else if (chartType == 'Box')\n APPEARANCE.push('BoxPoints', 'ValuesColor');\n else if (chartType == 'Histogram')\n APPEARANCE.push('HistogramCumulative', 'HistogramCounts', 'AutomaticBinning', 'MaximumBins');\n else if (chartType != 'Bean')\n APPEARANCE.push('ShowValues');\n GRIDLINES = ['ShowGrid']; \n\n} else if (chartType == \"Pyramid\")\n{\n SwappedXY();\n APPEARANCE = ['SmallMultiples'];\n VALUES_AXIS = ['ValuesTitle'];\n GRIDLINES = null;\n FITLINE = null;\n LEGEND = null;\n DATA_LABELS = ['DataLabelShow', 'DataLabelFormat', 'DataLabelFont', 'DataLabelPrefix', 'DataLabelSuffix'];\n} else if (chartType == \"Bar Pictograph\")\n{\n SwappedXY();\n INPUTS = ['x', 'AsPercentages', 'FirstAggregate']; // only accepts 1-d tables\n CATEGORIES_AXIS = ['CategoriesAxisShow', 'CategoriesTickFont', 'CategoriesTickHorizAlign'];\n DATA_LABELS = ['DataLabelFont', 'DataLabelFormat',\n 'DataLabelPrefix', 'DataLabelSuffix', 'DataLabelPosition'];\n APPEARANCE = ['Icon', 'FillDirection', 'IconPadding'];\n VALUES_AXIS = null;\n HOVER = null;\n LEGEND = null;\n TITLE = null;\n} else if(chartType == \"Table\")\n{\n INPUTS_data = ['pasted', 'table', 'r', 'variables', 'binaryMulti', 'sets', 'set'];\n DATA_SERIES = DATA_LABELS = TITLE = CATEGORIES_AXIS = null;\n VALUES_AXIS = HOVER = LEGEND = FONT = null;\n} else if(chartType != \"None\")\n throw \"Unknown chart type\";\n\nvar show_as_small_mult = false; \nvar isStacked = false;\nif (APPEARANCE != null)\n{\n if (APPEARANCE.indexOf('SmallMultiples') > -1)\n {\n var qSmallMult = form.checkBox({label: \"Show as small multiples (panel chart)\", name: \"formSmallMultiples\", default_value: default_smallmultiples});\n controls.push(qSmallMult);\n if (!allow_control_groups)\n qSmallMult.lineBreakAfter = true;\n show_as_small_mult = qSmallMult.getValue();\n }\n if (!show_as_small_mult && APPEARANCE.indexOf(\"Stacked\") > -1)\n {\n var qStack = form.checkBox({label: \"Stack series\", name: \"formStackSeries\", default_value: false});\n if (!allow_control_groups)\n qStack.lineBreakAfter = true;\n var isStack = qStack.getValue();\n controls.push(qStack);\n }\n}\n \n//// Creating the controls\n//// Data Selector.\n// Creating the data inputs.\nif (allow_control_groups)\n form.group(\"DATA SOURCE\")\n\n// Input as linked Q or R table(s)\nvar outputLabel = \"Output\";\nvar outputPrompt = \"Outputs are tables or other Q or R outputs\";\nif (displayr)\n{\n outputLabel += \" in 'Pages\";\n outputPrompt += \" in the 'Pages' tree (top-left)\";\n}\nvar tableInput = form.dropBox({name: \"formTable\", label: outputLabel, types: ['Table', \"RItem:integer,numeric,matrix,array,data.frame,table,list,ts\"], required: false, multi: chartType == \"Scatter\" && !show_as_small_mult, prompt: outputPrompt});\nif (!allow_control_groups)\n tableInput.lineBreakAfter = true;\n\n// Input as variables in the Data tab\nvar variables_controls = []; \nvar variables_prompt = displayr ? \"Variables are shown in the 'Data' tree (bottom-left).\" :\n \"Variables are shown in the 'Variables and Questions' tab.\";\nif (INPUTS.indexOf('x') > -1) \n{\n var varX = form.dropBox({label: xLabel, name: \"formX\", types: variables_types, prompt: variables_prompt, multi: chartType != \"Scatter\", required: false});\n if (!allow_control_groups)\n varX.lineBreakAfter = true;\n var n_variables = 1;\n if (allow_control_groups && chartType != \"Scatter\")\n n_variables = varX.getValues().length;\n variables_controls.push(varX);\n}\nvar n_yvariables = 0;\nif (INPUTS.indexOf('y')> -1 && (chartType == \"Scatter\" || (n_variables == 1)))\n{\n var varY = form.dropBox({label: yLabel, name: \"formY\", types:['variable'], prompt: variables_prompt, multi: chartType == \"Scatter\", required: false});\n if (!allow_control_groups)\n varY.lineBreakAfter = true;\n variables_controls.push(varY);\n n_yvariables = 1;\n if (allow_control_groups && chartType == \"Scatter\")\n n_yvariables = varY.getValues().length; \n}\n\nif (chartType == \"Scatter\" && n_yvariables <= 1)\n{\n var VLabels = form.dropBox({label: \"Labels\",name: \"formScatterLabels\",types:['variables'], prompt: variables_prompt, multi: false, required: false});\n if (!allow_control_groups)\n VLabels.lineBreakAfter = true;\n variables_controls.push(VLabels);\n \n var VSizes = form.dropBox({label: \"Sizes\", name: \"formZ\", types:['variables'], prompt: variables_prompt, multi: false, required: false});\n if (!allow_control_groups)\n VSizes.lineBreakAfter = true;\n variables_controls.push(VSizes);\n\n var VColors = form.dropBox({label: \"Colors\", name: \"formZ2\", types:['variables'], prompt: variables_prompt, multi: false, required: false});\n if (!allow_control_groups)\n VColors.lineBreakAfter = true;\n variables_controls.push(VColors);\n if (show_as_small_mult)\n {\n var VGroups = form.dropBox({label: \"Groups\", name: \"formGroups\", types:['variable: Categorical'], prompt: variables_prompt, multi: false, required: true, default_value: VColors.getValue()})\n if (!allow_control_groups)\n VGroups.lineBreakAfter = true;\n variables_controls.push(VGroups);\n }\n}\n\n// Pasted input data\nvar pastedInput = form.dataEntry({label: \"Paste or type data\", name: \"formPastedData\", prompt: \"Opens a spreadsheet into which you can enter data.\"});\nif (!allow_control_groups)\n pastedInput.lineBreakAfter = true;\n\n\n// Hide other data sources if one of them is already selected\nif (!allow_control_groups || !isEmpty(tableInput) ||\n (isBlankSheet(pastedInput) && isEmpty(varX) && isEmpty(varY)))\n controls.push(tableInput);\nif (!allow_control_groups || (!isEmpty(varX) || !isEmpty(varY)) || \n (isEmpty(tableInput) && isBlankSheet(pastedInput)))\n controls = controls.concat(variables_controls);\nif (!allow_control_groups || !isBlankSheet(pastedInput) ||\n (isEmpty(tableInput) && isEmpty(varX) && isEmpty(varY))) \n controls.push(pastedInput);\n\n// Figure out type of data input to customize data processing options\nvar dtype = \"\";\nif (!allow_control_groups || !isEmpty(tableInput))\n{\n dtype = 'table';\n if (allow_control_groups && chartType == \"Scatter\" && tableInput.getValues() != null && tableInput.getValues().length > 1)\n {\n dtype = 'tables';\n isLabeled = true;\n APPEARANCE.push('ScatterTrendLine');\n }\n}\nelse if (!allow_control_groups || !isEmpty(varX) || !isEmpty(varY))\n dtype = 'variables';\nelse if (!isBlankSheet(pastedInput))\n dtype = 'pasted';\n\nif (yLabel == \"Groups\" && allow_control_groups && !isEmpty(varY))\n{\n var zi = INPUTS.indexOf('FirstAggregate');\n if (zi > -1)\n INPUTS.splice(zi, 1);\n}\n\nif (!allow_control_groups || dtype != \"\")\n{\n if (allow_control_groups)\n form.group(\"DATA MANIPULATION\");\n var scatter_mult_ys = false;\n if (chartType == \"Scatter\" && dtype != 'variables' && dtype != 'tables')\n {\n var qScatterMultYs = form.checkBox({label: \"Input data contains y-values in multiple columns\", name: \"formScatterMultYvals\", default_value: false});\n if (!allow_control_groups) \n qScatterMultYs.lineBreakAfter = true;\n scatter_mult_ys = qScatterMultYs.getValue();\n controls.push(qScatterMultYs);\n }\n var aggregate = false;\n if (INPUTS.indexOf(\"FirstAggregate\") > -1)\n {\n var qAggregate = form.checkBox({label: \"Aggregate the data prior to plotting\", name: \"formFirstAggregate\", default_value: dtype == 'variables' && default_aggregation, prompt: \"The data is 'raw', where each row represents an individual case. It needs to be aggregated prior to plotting.\"});\n if (!allow_control_groups)\n qAggregate.lineBreakAfter = true;\n controls.push(qAggregate);\n aggregate = qAggregate.getValue();\n }\n if (tidy)\n {\n var qTidy = form.checkBox({label: \"Automatically tidy the data\", name: \"formTidy\", default_value: chartType != \"Table\" && chartType != \"Scatter\"});\n if (!allow_control_groups)\n qTidy.lineBreakAfter = true;\n tidy = qTidy.getValue();\n controls.push(qTidy);\n }\n if (aggregate && allow_control_groups && (dtype == 'table' || dtype == 'pasted'))\n {\n var qGroupLast = form.checkBox({label: \"Group by last column (crosstab)\", name: \"formGroupByLastColumn\", default_value: true, prompt: \"If more than two columns are provided, automatically groups by the last column\"});\n controls.push(qGroupLast);\n }\n if (aggregate && (!allow_control_groups || (dtype == 'variables' && n_variables == 2 && n_yvariables == 0)))\n { \n var qGroupLast = form.checkBox({label: \"Group by last variable (crosstab)\", name: \"formGroupByLastColumn\", default_value: false, prompt: \"If two variable are provided, automatically groups by the last variable\"});\n if (!allow_control_groups)\n qGroupLast.lineBreakAfter = true;\n controls.push(qGroupLast);\n }\n if (dtype == 'pasted')\n {\n var qAutoName = form.checkBox({label: \"Automatically detect row and column names\", name: \"formNotDataFrame\", default_value: true});\n if (!allow_control_groups)\n qAutoName.lineBreakAfter = true;\n var notDF = qAutoName.getValue();\n controls.push(qAutoName);\n if (!notDF)\n {\n var rowname_label = \"First column contains row names\";\n var rowname_prompt = \"Values will be shown as labels in the categories axis\";\n var rowname_default = false;\n if (chartType == \"Scatter\")\n {\n if (!scatter_mult_ys)\n {\n rowname_label = \"First column contains data labels\";\n rowname_prompt = \"Values will be shown as data labels for each point (not X-axis labels)\";\n }\n rowname_default = true;\n }\n var qColNames = form.checkBox({label: \"First row contains column names\", name: \"formPastedColumnNames\", default_value: true});\n var qRowNames = form.checkBox({label: rowname_label, name: \"formPastedRowNames\", prompt: rowname_prompt, default_value: rowname_default});\n if (!allow_control_groups)\n qColNames.lineBreakAfter = true;\n if (!allow_control_groups)\n qRowNames.lineBreakAfter = true;\n controls.push(qColNames);\n controls.push(qRowNames);\n }\n }\n qTidyLabel = form.checkBox({name: \"formTidyLabels\", label: \"Tidy labels\", default_value: true});\n if (!allow_control_groups)\n qTidyLabel.lineBreakAfter = true;\n controls.push(qTidyLabel);\n if (chartType != 'Donut')\n {\n qTranspose = form.checkBox({name: \"formTranspose\", label: \"Switch rows and columns\"});\n if (!allow_control_groups)\n qTranspose.lineBreakAfter = true;\n controls.push(qTranspose);\n }\n\n // Creating other input controls on the Inputs page.\n var asPct = false;\n if (INPUTS != null)\n {\n if (INPUTS.indexOf('AsPercentages') > -1)\n {\n var qAsPct = form.checkBox({name: \"formAsPercentages\", label: \"Convert to percentages/proportions\"});\n if (!allow_control_groups)\n qAsPct.lineBreakAfter = true;\n asPct = qAsPct.getValue();\n controls.push(qAsPct);\n }\n if (INPUTS.indexOf('DateFormat') > -1)\n {\n var qDate = form.comboBox({name: \"formDateFormat\", label: \"Date format\", alternatives: ['Automatic', 'International (dd/mm/yyyy)', 'US (mm/dd/yyyy)', 'No date formatting'], default_value: 'Automatic'});\n controls.push(qDate);\n }\n // Set default formatting if 'as percentage' is checked\n if (asPct)\n {\n var formats = [values_number_formats, hover_number_formats, data_label_formats];\n for (var i = 0; i < formats.length; i++)\n {\n var format_array = formats[i];\n var pct_idx = format_array.indexOf('Percentage');\n if (pct_idx != -1) \n {\n format_array.splice(pct_idx, 1);\n format_array.splice(0, 0, \"Percentage\");\n var auto_idx = format_array.indexOf('Automatic');\n if (auto_idx != -1)\n format_array.splice(auto_idx, 1);\n }\n }\n }\n if (dtype == 'variables')\n {\n var qVarNames = form.checkBox({label: \"Variable names\", name:\"formNames\", default_value: false});\n if (!allow_control_groups)\n qVarNames.lineBreakAfter;\n controls.push(qVarNames);\n }\n var qHideOutput = form.checkBox({label: \"Hide output with small sample sizes\", name: \"formHideOutput\", default_value: false});\n controls.push(qHideOutput);\n if (qHideOutput.getValue())\n {\n var qHideOutputThres = form.textBox({label: \"Sample size cut-off\", name: \"formHideOutputThres\", default_value: \"30\", type: \"number\", required: true});\n controls.push(qHideOutputThres);\n }\n\n if (allow_control_groups) \n form.group('Row manipulations')\n var qRowsIgnore = form.textBox({label: \"Rows to ignore\", type: \"text\", default_value: \"NET, Total, SUM\", name: \"formIgnoreRows\", required: false});\n if (!allow_control_groups)\n qRowsIgnore.lineBreakAfter = true;\n controls.push(qRowsIgnore);\n var qHideEmptyRows = form.checkBox({label: \"Hide empty rows\", name: \"formHideEmptyRows\", default_value: false});\n if (!allow_control_groups)\n qHideEmptyRows.lineBreakAfter = true;\n controls.push(qHideEmptyRows);\n var qHideRowsBySize = form.checkBox({label: \"Hide rows with small sample sizes\", name: \"formHideRowsBySize\", default_value: false});\n controls.push(qHideRowsBySize);\n if (qHideRowsBySize.getValue())\n {\n var qHideRowsThres = form.textBox({label: \"Sample size cut-off\", name: \"formHideRowsThres\", default_value: \"30\", type: \"number\", required: true});\n controls.push(qHideRowsThres);\n }\n var qSelectRows = form.textBox({label: \"Rows to show\", name: \"formSelectRows\", type: \"text\", required: false, prompt: \"Enter comma separated list of row indices or names\"});\n controls.push(qSelectRows);\n var qFirstKRows = form.textBox({label: \"Number of rows from top to show\", name: \"formFirstKRows\", type: \"number\", required: false, prompt: \"Enter a number or leave blank\"});\n controls.push(qFirstKRows);\n var qLastKRows = form.textBox({label: \"Number of rows from bottom to show\", name: \"formLastKRows\", type: \"number\", required: false, prompt: \"Enter a number or leave blank\"});\n controls.push(qLastKRows);\n var qSortRows = form.checkBox({label: \"Sort rows\", name: \"formSortRows\", default_value: false});\n controls.push(qSortRows);\n if (qSortRows.getValue())\n {\n var qSortRowsColumn = form.textBox({label: \"Column used for sorting rows\", name: \"formSortRowsColumn\", type: \"text\", required: false, prompt: \"Enter column index or name. Last column used if none specified\"});\n controls.push(qSortRowsColumn);\n var qSortRowsDecr = form.checkBox({label: \"Sort in decreasing order\", name: \"formSortRowsDecr\", default_value: false});\n controls.push(qSortRowsDecr);\n\n var qSortRowsExclude = form.textBox({label: \"Rows to exclude from sorting\", name: \"formSortRowsExclude\", type: \"text\", required: false, prompt: \"Enter comma separated list of row indices or names\"});\n controls.push(qSortRowsExclude);\n }\n if (!qSortRows.getValue())\n {\n var qAutoOrderRows = form.checkBox({label: \"Order rows by similarity\", name: \"formAutoOrderRows\", default_value: false});\n controls.push(qAutoOrderRows)\n }\n var qReverseRows = form.checkBox({label: \"Reverse rows\", name: \"formReverseRows\", default_value: false});\n controls.push(qReverseRows);\n\n if (allow_control_groups)\n form.group('Column manipulations')\n var qColsIgnore = form.textBox({label: \"Columns to ignore\", type: \"text\", default_value: \"NET, Total, SUM\", name: \"formIgnoreCols\", required: false});\n if (!allow_control_groups)\n qColsIgnore.lineBreakAfter = true;\n controls.push(qColsIgnore);\n var qHideEmptyCols = form.checkBox({label: \"Hide empty columns\", name: \"formHideEmptyCols\", default_value: false});\n if (!allow_control_groups)\n qHideEmptyCols.lineBreakAfter = true;\n controls.push(qHideEmptyCols);\n var qHideColsBySize = form.checkBox({label: \"Hide columns with small sample sizes\", name: \"formHideColsBySize\", default_value: false});\n controls.push(qHideColsBySize);\n if (qHideColsBySize.getValue())\n {\n var qHideColsThres = form.textBox({label: \"Sample size cut-off\", name: \"formHideColsThres\", default_value: \"30\", type: \"number\", required: true});\n controls.push(qHideColsThres);\n }\n var qSelectCols = form.textBox({label: \"Columns to show\", name: \"formSelectCols\", type: \"text\", required: false, prompt: \"Enter comma separated list of column indices or names\"});\n controls.push(qSelectCols);\n var qFirstKCols = form.textBox({label: \"Number of columns from left to show\", name: \"formFirstKCols\", type: \"number\", required: false, prompt: \"Enter a number or leave blank\"});\n controls.push(qFirstKCols);\n var qLastKCols = form.textBox({label: \"Number of columns from right to show\", name: \"formLastKCols\", type: \"number\", required: false, prompt: \"Enter a number or leave blank\"});\n controls.push(qLastKCols);\n var qSortCols = form.checkBox({label: \"Sort columns\", name: \"formSortCols\", default_value: false});\n controls.push(qSortCols);\n if (qSortCols.getValue())\n {\n var qSortColsRow = form.textBox({label: \"Row used for sorting columns\", name: \"formSortColsRow\", type: \"text\", required: false, prompt: \"Enter row index or name. Last row used if none specified\"});\n controls.push(qSortColsRow);\n var qSortColsDecr = form.checkBox({label: \"Sort in decreasing order\", name: \"formSortColsDecr\", default_value: false});\n controls.push(qSortColsDecr);\n\n var qSortColsExclude = form.textBox({label: \"Columns to exclude from sorting\", name: \"formSortColsExclude\", type: \"text\", required: false, prompt: \"Enter comma separated list of column indices or names\"});\n controls.push(qSortColsExclude);\n }\n if (!qSortCols.getValue())\n {\n var qAutoOrderCols = form.checkBox({label: \"Order columns by similarity\", name: \"formAutoOrderCols\", default_value: false});\n controls.push(qAutoOrderCols)\n }\n var qReverseCols = form.checkBox({label: \"Reverse columns\", name: \"formReverseCols\", default_value: false});\n controls.push(qReverseCols);\n }\n}\n\n//// Creating controls on the Chart page (forced to be on Inputs tab for Q <= v5.2.1)\nif (allow_control_groups)\n form.page('Chart');\n\nif (APPEARANCE != null)\n{\n if (allow_control_groups)\n form.group('APPEARANCE');\n\n if (APPEARANCE.indexOf(\"MapPackage\") > -1)\n {\n var packageValue = \"plotly\";\n if (!show_as_small_mult)\n {\n var qPackage = form.comboBox({name: \"formMapPackage\", label: \"Map package\", alternatives: [\"plotly\", \"leaflet\"], default_value: \"plotly\"});\n controls.push(qPackage);\n packageValue = qPackage.getValue();\n } else\n {\n TITLE = ['Title', 'Subtitle', 'Footer'];\n }\n \n if (packageValue == \"leaflet\")\n {\n FONT = null;\n LEGEND = ['LegendShow', 'LegendTitle'];\n }\n var qHighRes = form.checkBox({label: \"High resolution\", name: \"formHighRes\", default_value: false});\n controls.push(qHighRes);\n if (!allow_control_groups)\n qHighRes.lineBreakAfter = true;\n var qNAasZero = form.checkBox({label: \"Treat NA as zero\", name: \"formNAasZero\", default_value: false});\n if (!allow_control_groups)\n qNAasZero.lineBreakAfter = true\n controls.push(qNAasZero);\n if (!allow_control_groups)\n {\n var qNAColorLabel = form.newLabel(\"Color of NA values\");\n controls.push(qNAColorLabel);\n }\n var qNAColor = form.colorPicker({name: \"formNAColor\", label: !allow_control_groups ? \"\" : \"Color of NA values\", default_value: \"#808080\"});\n if (!allow_control_groups)\n qNAColor.lineBreakAfter = true;\n controls.push(qNAColor);\n\n var backgroundMapValue = false;\n if (packageValue == \"leaflet\")\n {\n var qShowMissingRegions = form.checkBox({label: \"Show missing regions\", name: \"formShowMissingRegions\", default_value: true});\n controls.push(qShowMissingRegions);\n if (!allow_control_groups)\n qShowMissingRegions.lineBreakAfter = true;\n var qBackgroundMap = form.checkBox({label: \"Background map\", name: \"formBackgroundMap\", default_value: false});\n backgroundMapValue = qBackgroundMap.getValue();\n controls.push(qBackgroundMap);\n if (!allow_control_groups)\n qBackgroundMap.lineBreakAfter = true;\n if (backgroundMapValue)\n palettes = gradual_palettes_red;\n }\n \n if (!backgroundMapValue)\n {\n if (!allow_control_groups)\n {\n var qOceanColorLabel = form.newLabel(\"Ocean color\");\n controls.push(qOceanColorLabel);\n }\n var qOceanColor = form.colorPicker({name: \"formOceanColor\", label: !allow_control_groups ? \"\" : \"Ocean color\", default_value: \"#FFFFFF\"});\n if (!allow_control_groups)\n qOceanColor.lineBreakAfter = true;\n controls.push(qOceanColor);\n }\n \n if (packageValue == \"leaflet\") \n {\n var qZipCountry = form.comboBox({name: \"formZipCountry\", label: \"Zip code country\", alternatives: [\"Automatic\", \"USA\", \"Australia\", \"UK\"], default_value: \"Automatic\", required: true});\n controls.push(qZipCountry);\n if (!allow_control_groups)\n qZipCountry.lineBreakAfter = true;\n\t } \n }\n\n if (APPEARANCE.indexOf('SmallMultiples') > -1 && dtype != 'tables')\n {\n if (qSmallMult.getValue())\n {\n var qSmallMultNRow = form.numericUpDown({label: \"Number of rows of panels\", name: \"formSmallMultNRows\", default_value: 2, minimum: 1});\n controls.push(qSmallMultNRow);\n if (chartType != \"Geographic Map\")\n LEGEND = null; \n if (chartType != \"Geographic Map\" && chartType != \"Scatter\" && chartType != \"Pyramid\")\n {\n var qSmallMultAverage = form.checkBox({label: \"Show average of all series\", name: \"formSmallMultAverage\", default_value: false});\n controls.push(qSmallMultAverage);\n if (qSmallMultAverage.getValue())\n {\n var qSmallMultAverageColor = form.colorPicker({name: \"formSmallMultAverageColor\", label: !allow_control_groups ? \"\" : \"Color of average series\", default_value: \"#999999\"});\n controls.push(qSmallMultAverageColor);\n }\n }\n if (chartType != \"Radar\" && chartType != \"Geographic Map\")\n {\n var qSmallMultShareAxes = form.checkBox({label: \"Share axes between panels\", name: \"formSmallMultShareAxes\", default_value: true});\n controls.push(qSmallMultShareAxes);\n }\n var qSmallMultXOrder = form.textBox({label: \"Order of panels\", name: \"formSmallMultXOrder\", required: false, prompt: \"e.g '2,1,3', or leave blank to follow order of input data\"});\n controls.push(qSmallMultXOrder);\n var qSmallMultPadLeft = form.numericUpDown({label: \"Left padding\", name: \"formSmallMultPadLeft\", default_value: 0.01, minimum: 0.00, maximum: chartType == \"Radar\" ? 100 : 1.00, increment: 0.01});\n controls.push(qSmallMultPadLeft);\n var qSmallMultPadRight = form.numericUpDown({label: \"Right padding\", name: \"formSmallMultPadRight\", default_value: 0.01, minimum: 0.00, maximum: chartType == \"Radar\"? 100 : 1.00, increment: 0.01});\n controls.push(qSmallMultPadRight);\n var qSmallMultPadTop = form.numericUpDown({label: \"Top padding\", name: \"formSmallMultPadTop\", default_value: 0.1, minimum: 0.00, maximum: 1.00, increment: 0.01});\n controls.push(qSmallMultPadTop);\n var qSmallMultPadBottom = form.numericUpDown({label: \"Bottom padding\", name: \"formSmallMultPadBottom\", default_value: 0.01, minimum: 0.00, maximum: 1.00, increment: 0.01});\n controls.push(qSmallMultPadBottom);\n }\n }\n if (chartType == 'Scatter')\n {\n // Scatter is always labeled in INPUTS_types['tables']\n // Never labeled if small multiples chosen\n // For other input types we need to check\n if (!qSmallMult.getValue() && ((dtype != 'tables' && dtype != 'variables') || \n (dtype == 'variables' && !(allow_control_groups && isEmpty(VLabels)))))\n {\n var qLabType = form.comboBox({name: \"formScatterLabelType\", label: \"Show labels\", alternatives:['As hover text', 'On chart'], default_value: 'As hover text'});\n var labtype = qLabType.getValue()\n controls.push(qLabType);\n isLabeled = labtype == 'On chart';\n }\n if (isLabeled)\n {\n APPEARANCE.push('ScatterMaxLab');\n categories_number_formats = [\"Automatic\", \"Number\", \"Percentage\", \"Currency\"];\n values_number_formats = [\"Automatic\", \"Number\", \"Percentage\", \"Currency\"];\n data_label_formats = [\"Automatic\", \"Number\", \"Category\", \"Percentage\", \"Currency\"]\n DATA_LABELS = ['DataLabelFont'];\n }\n if (!isLabeled && ((dtype != 'tables' && dtype != 'variables') || \n (dtype == 'variables' && n_yvariables == 1 && !(allow_control_groups && VSizes.getValue() == null))))\n APPEARANCE.push('ScatterSizeType');\n if ((dtype != 'tables' && dtype != 'variables') || \n (dtype == 'variables' && n_yvariables == 1 && !(allow_control_groups && VColors.getValue() == null)))\n APPEARANCE.push('ScatterColorType');\n if (!isLabeled)\n FITLINE = ['FitLine'];\n }\n if (APPEARANCE.indexOf(\"ScatterMaxLab\") > -1)\n {\n var qMaxLab = form.numericUpDown({name: \"formScatterMaxLab\", label: \"Maximum data labels to plot\", default_value: 50, maximum: 1000, minimum: 0});\n if (!allow_control_groups)\n qMaxLab.lineBreakAfter = true;\n controls.push(qMaxLab);\n var qLogo = form.textBox({name: \"formLogos\", label: \"Logos\", prompt: \"Enter URLs as a comma separated list\", type: \"Text\", required: false});\n if (!allow_control_groups)\n qLogo.lineBreakAfter = true;\n controls.push(qLogo);\n var qLogoSize = form.numericUpDown({name: \"formLogoSize\", label: \"Logo size\", default_value: 0.5, increment: 0.1});\n if (!allow_control_groups)\n qLogoSize.lineBreakAfter = true;\n controls.push(qLogoSize);\n }\n if (APPEARANCE.indexOf(\"ScatterTrendLine\") > -1)\n {\n var qScatterTrend = form.checkBox({label: \"Show trend lines\", name: \"formTrendLines\", default_value: false});\n if (!allow_control_groups)\n qScatterTrend.lineBreakAfter = true;\n controls.push(qScatterTrend);\n }\n if (APPEARANCE.indexOf(\"ScatterSizeType\") > -1)\n {\n var qSizeType = form.comboBox({label: \"Treat sizes variable as\", name:\"formScatterSizeType\", alternatives:['Area', 'Diameter'], default_value:'Area'});\n controls.push(qSizeType);\n }\n if (!show_as_small_mult && APPEARANCE.indexOf(\"ScatterColorType\") > -1)\n {\n var qColorType = form.comboBox({label: \"Treat colors variable as\", name:\"formScatterColorType\", alternatives:['Categories', 'Numeric scale'], default_value:'Categories'});\n controls.push(qColorType);\n }\n\n\n if (APPEARANCE.indexOf(\"Icon\") > -1)\n {\n var custom_icon_label = \"(Custom icon)\";\n var qPictoIcon = form.comboBox({name: \"formIcon\", label: \"Icon\", alternatives: [\n custom_icon_label, \"Apple\",\"Baby\", \"Beer\", \"Bread\",\"Cake\", \"Car\", \"Circle\", \"Cross\", \"Elephant\", \"Gun\", \"Heart\", \"House\", \"Money\", \"Soldier\", \"Square\", \"Star\", \"Sick person\", \"Stick man\", \"Stick woman\", \"Thumbs up\", \"Thumbs down\", \"Tick\", \"Truck\", \"User\", \"Water drop\", \"Weight\", \"Wine\"], default_value: \"Stick man\"});\n var picto_icon = qPictoIcon.getValue();\n controls.push(qPictoIcon);\n if (picto_icon == custom_icon_label)\n {\n var qCustomIcon = form.textBox({name: \"formCustomIcon\", label: \"Icon URL\", type: \"text\", required: true});\n if (!allow_control_groups)\n qCustomIcon.lineBreakAfter = true;\n controls.push(qCustomIcon)\n var qCustomBase = form.textBox({name: \"formBaseImage\", label: \"Base icon URL\", type: \"text\", required: false, prompt: \"Leave blank to hide unfilled icons\"});\n var customBase = qCustomBase.getValue();\n controls.push(qCustomBase);\n }\n else\n {\n var qBaseOpt = form.checkBox({name: \"formHideBase\", label: \"Hide unfilled icons\", default_value: true});\n if (!allow_control_groups)\n qBaseOpt.lineBreakAfter = true;\n var baseOpt = qBaseOpt.getValue();\n controls.push(qBaseOpt);\n }\n qTotIcon = form.textBox({name: \"formTotalIcons\", label: \"Total icons per bar\", type: \"number\", required: false, prompt: \"Number of filled and unfilled icons. Leave blank to determine from Input data\"});\n if (!allow_control_groups)\n qTotIcon.lineBreakAfter = true;\n controls.push(qTotIcon);\n qIconScale = form.textBox({name: \"formIconScale\", label: \"Units per icon (scale)\", type: \"number\", required: false, prompt: \"Leave blank to determine based on range of Input data\"});\n if (!allow_control_groups)\n qIconScale.lineBreakAfter = true;\n controls.push(qIconScale);\n var qIconNcol = form.textBox({name:\"formIconNCol\", label: \"Maximum icons per row\", type: \"number\", prompt: \"Leave blank for no wrapping (all icons on one line)\", required: false});\n if (!allow_control_groups)\n qIconNcol.lineBreakAfter = true;\n controls.push(qIconNcol);\n var ncolOpt = qIconNcol.getValue()\n var fillDir = form.comboBox({name:\"formFillDirection\", label: \"Direction of fill\", alternatives: [\"From left\", \"From right\"], default_value: \"From left\"});\n controls.push(fillDir);\n if (picto_icon != custom_icon_label)\n {\n if (!baseOpt)\n {\n if (!allow_control_groups)\n {\n var qBaseColorLabel = form.newLabel(\"Icon base color\");\n controls.push(qBaseColorLabel);\n }\n var qBaseColor = form.colorPicker({name: \"formBaseColor\", label: !allow_control_groups ? \"\" : \"Icon base color\", default_value: \"#CCCCCC\"});\n if (!allow_control_groups)\n qBaseColor.lineBreakAfter = true;\n controls.push(qBaseColor);\n }\n var qLabColAsIcon = form.checkBox({name: \"formLabelColorAsIcon\", label: \"Labels colored as icons\"});\n if (!allow_control_groups)\n qLabColAsIcon.lineBreakAfter = true;\n controls.push(qLabColAsIcon);\n var labColAsIcon = qLabColAsIcon.getValue();\n if (ncolOpt != \"\" && baseOpt)\n {\n var qFixRows = form.checkBox({name:\"formFixNRows\", label:\"Fixed number of rows per bar\", default_value: true});\n if (!allow_control_groups)\n qFixRows.lineBreakAfter = true;\n controls.push(qFixRows);\n }\n }\n if (ncolOpt != \"\" && picto_icon == custom_icon_label && !customBase)\n {\n var qFixRows = form.checkBox({name:\"formFixNRows\", label:\"Fixed number of rows per bar\", default_value: true});\n if (!allow_control_groups)\n qFixRows.lineBreakAfter = true;\n controls.push(qFixRows);\n }\n var qIconPad = form.numericUpDown({name: \"formIconPadding\", label: \"Space between bars\", minimum: 0, default_value: 2, increment:1});\n if (!allow_control_groups)\n qIconPad.lineBreakAfter = true;\n controls.push(qIconPad);\n }\n if (APPEARANCE.indexOf(\"PieRadius\") > -1)\n {\n var qRadius = form.numericUpDown({name: \"formPieRadius\", label: radiusLabel, default_value: 70, increment: 1, minimum: 0, maximum: 100});\n if (!allow_control_groups)\n qRadius.lineBreakAfter = true;\n controls.push(qRadius);\n }\n if (APPEARANCE.indexOf(\"BorderColor\") > -1)\n {\n if (!allow_control_groups)\n {\n var qBorderColorLabel = form.newLabel(\"Border color\");\n controls.push(qBorderColorLabel);\n }\n var qBorderColor = form.colorPicker({name: \"formBorderColor\", label: allow_control_groups ? \"Border color\" : \"\", default_value: \"#ffffff\"});\n if (!allow_control_groups)\n qBorderColor.lineBreakAfter = true;\n controls.push(qBorderColor);\n }\n if (APPEARANCE.indexOf(\"DensityColor\") > -1)\n {\n if (!allow_control_groups)\n {\n var qDensityColorLabel = form.newLabel(\"Color\");\n controls.push(qDensityColorLabel);\n }\n var qDensityColor = form.colorPicker({name: \"formDensityColor\", label: allow_control_groups ? \"Color\" : \"\", default_value: \"#5C9AD3\"});\n if (!allow_control_groups)\n qDensityColor.lineBreakAfter = true;\n controls.push(qDensityColor);\n }\n if (APPEARANCE.indexOf(\"VerticalDistributon\") > -1)\n {\n var qVertDist = form.checkBox({name: \"formVertical\", label: \"Plot vertically\", default_value: vertical});\n if (!allow_control_groups)\n qVertDist.lineBreakAfter = true;\n if (!qVertDist.getValue())\n SwappedXY();\n controls.push(qVertDist);\n }\n var show_values_color = true;\n if (APPEARANCE.indexOf(\"ShowValues\") > -1)\n {\n var qShowValues = form.checkBox({name: \"formShowValues\", label: \"Plot the individual data values\", default_value: false});\n if (!allow_control_groups)\n qShowValues.lineBreakAfter = true;\n var show_values_color = qShowValues.getValue();\n controls.push(qShowValues);\n }\n if (show_values_color && APPEARANCE.indexOf(\"ValuesColor\") > - 1)\n {\n if (!allow_control_groups)\n {\n var qValuesColorLabel = form.newLabel(\"Data value color\");\n controls.push(qValuesColorLabel);\n }\n var qValuesColor = form.colorPicker({name: \"formValuesColor\", label: allow_control_groups ? \"Data value color\" : \"\", default_value: \"#999999\"});\n if (!allow_control_groups)\n qValuesColor.lineBreakAfter = true;\n controls.push(qValuesColor);\n }\n if (APPEARANCE.indexOf(\"ShowMean\") > -1)\n {\n var qMean = form.checkBox({name: \"formShowMean\", label: \"Plot the mean value\", default_value: true});\n if (!allow_control_groups)\n qMean.lineBreakAfter = true;\n controls.push(qMean);\n if (qMean.getValue())\n {\n if (!allow_control_groups)\n {\n var qMeanColorLabel = form.newLabel(\"Color of the mean dot\");\n controls.push(qMeanColorLabel);\n }\n var qMeanColor = form.colorPicker({name: \"formMeanColor\", label: !allow_control_groups ? \"\" : \"Color of the mean dot\", default_value: \"#808080\"});\n if (!allow_control_groups)\n qMeanColor.lineBreakAfter = true;\n controls.push(qMeanColor);\n }\n var qMedian = form.checkBox({name: \"formShowMedian\", label: \"Plot the median\", default_value: true});\n if (!allow_control_groups)\n qMedian.lineBreakAfter = true;\n controls.push(qMedian);\n if (qMedian.getValue())\n {\n if (!allow_control_groups)\n {\n var qMedianColorLabel = form.newLabel(\"Color of the median line\");\n controls.push(qMedianColorLabel);\n }\n var qMedianColor = form.colorPicker({name: \"formMedianColor\", label: allow_control_groups ? \"Color of the median line\" : \"\", default_value: \"#000000\"});\n if (!allow_control_groups)\n qMedianColor.lineBreakAfter = true;\n controls.push(qMedianColor);\n }\n var qQuartiles = form.checkBox({name: \"formShowQuartiles\", label: \"Plot the quartiles\", default_value: true});\n if (!allow_control_groups)\n qQuartiles.lineBreakAfter = true;\n controls.push(qQuartiles);\n if (qQuartiles.getValue())\n {\n if (!allow_control_groups)\n {\n var qQuartileColorLabel = form.newLabel(\"Color of the quartiles box\");\n controls.push(qQuartileColorLabel);\n }\n var qQuartileColor = form.colorPicker({name: \"formQuartilesColor\", label: allow_control_groups ? \"Color of the quartiles box\" : \"\", default_value: \"#000000\"});\n if (!allow_control_groups)\n qQuartileColor.lineBreakAfter = true;\n controls.push(qQuartileColor);\n }\n var qRange = form.checkBox({name: \"formShowRange\", label: \"Plot the range\", default_value: true});\n if (!allow_control_groups)\n qRange.lineBreakAfter = true;\n controls.push(qRange);\n if (qRange.getValue())\n {\n if (!allow_control_groups)\n {\n var qRangeColorLabel = form.newLabel(\"Color of the range line\");\n controls.push(qRangeColorLabel);\n }\n var qRangeColor = form.colorPicker({name: \"formRangeColor\", label: allow_control_groups ? \"Color of the range line\" : \"\", default_value: \"#000000\"});\n if (!allow_control_groups)\n qRangeColor.lineBreakAfter = true;\n controls.push(qRangeColor);\n }\n }\n if (APPEARANCE.indexOf(\"BoxPoints\") > -1)\n {\n var qBoxPoint = form.comboBox({name: \"formBoxPoints\", label: \"Box points\", alternatives: [\"All\", \"Outliers\", \"Suspected outliers\"], default_value: \"Suspected outliers\", required: true});\n if (!allow_control_groups)\n qBoxPoint.lineBreakAfter = true;\n controls.push(qBoxPoint);\n }\n if (APPEARANCE.indexOf('HistogramCounts') > -1)\n { \n var qHistCum = form.checkBox({name: \"formHistogramCumulative\", label: \"Cumulative histogram\", default_value: false});\n if (!allow_control_groups)\n qHistCum.lineBreakAfter = true;\n controls.push(qHistCum);\n var qHistCount = form.checkBox({name: \"formHistogramCounts\", label: \"Show counts\", default_value: false});\n if (!allow_control_groups)\n qHistCount.lineBreakAfter = true;\n controls.push(qHistCount);\n var qHistAutoBin = form.checkBox({name: \"formAutomaticBinning\", label: \"Automatic column widths (bins)\", default_value: true});\n if (!allow_control_groups)\n qHistAutoBin.lineBreakAfter = true\n controls.push(qHistAutoBin);\n if (!qHistAutoBin.getValue())\n {\n var qHistMaxBin = form.numericUpDown({name: \"formMaximumBins\", label: \"Maximum columns (bins)\", default_value: 20});\n if (!allow_control_groups)\n qHistMaxBin.lineBreakAfter = truel\n controls.push(qHistMaxBin);\n }\n }\n if (APPEARANCE.indexOf('Bandwidth') > -1)\n {\n var qBandwidth = form.numericUpDown({name: \"formBandwidth\", label: \"Bandwidth\", minimum: 0.01, maximum: 1, increment: 0.01, default_value: 1, prompt: \"The relative bandwidth used in the estimating the density.\"});\n \n if (!allow_control_groups)\n qBandwidth.lineBreakAfter = true;\n controls.push(qBandwidth);\n }\n if (APPEARANCE.indexOf('AutomaticLower') > -1)\n {\n var qLowerBd = form.checkBox({name: \"formAutomaticLower\", label: \"Automatically compute lower bound\", default_value: true});\n if (!allow_control_groups)\n qLowerBd.lineBreakAfter = true;\n controls.push(qLowerBd);\n }\n if (APPEARANCE.indexOf(\"RangeBars\") > -1)\n {\n var qRangeBar = form.checkBox({name: \"formRangeBars\", label: \"Show range bars\", default_value: false});\n if (!allow_control_groups)\n qRangeBar.lineBreakAfter = true;\n controls.push(qRangeBar);\n var qWinStart = form.numericUpDown({name: \"formWindowStart\", label: \"Window start (days from data end)\", default_value: 30, maximum: 100000});\n if (!allow_control_groups)\n qWinStart.lineBreakAfter = true;\n controls.push(qWinStart);\n }\n if (APPEARANCE.indexOf(\"SortOrStandardize\") > -1)\n {\n var qSortRows = form.comboBox({label: \"Row sorting or dendrogram\", alternatives: [\"None\", \"Sort by averages (ascending)\", \"Sort by averages (descending)\", \"Dendrogram\"], name: \"formHeatSortRows\", default_value: \"None\"});\n if (!allow_control_groups)\n qSortRows.lineBreakAfter = true;\n controls.push(qSortRows);\n var qSortCols = form.comboBox({label: \"Column sorting or dendrogram\", alternatives: [\"None\", \"Sort by averages (ascending)\", \"Sort by averages (descending)\", \"Dendrogram\"], name: \"formHeatSortColumns\", default_value: \"None\"});\n if (!allow_control_groups)\n qSortCols.lineBreakAfter = true;\n controls.push(qSortCols);\n var qStandardize = form.comboBox({label: \"Shading standardization\", name: \"formHeatStandardization\", default_value: \"None\", alternatives: [\"None\", \"Standardize rows\", \"Standardize columns\"]});\n if (!allow_control_groups)\n qStandardize.lineBreakAfter = true;\n controls.push(qStandardize);\n }\n if (APPEARANCE.indexOf(\"AdditionalColumns\") > -1)\n {\n var qLeftCol = form.dropBox({label: \"Left columns\", types:[\"RItem:matrix,data.frame,table,array,integer,numeric,character\", \"Table\"], name: \"formLeftColumns\", multi: true, required: false});\n if (!allow_control_groups)\n qLeftCol.lineBreakAfter = true;\n controls.push(qLeftCol);\n var qLeftHead = form.textBox({label: \"Left column headings\", type: \"text\", default_value: \"\", name: \"formLeftColumnHeadings\", required: false});\n if (!allow_control_groups)\n qLeftHead.lineBreakAfter = true;\n controls.push(qLeftHead);\n var qRightCol = form.dropBox({label: \"Right columns\", types:[\"RItem:matrix,data.frame,table,array,integer,numeric,character\", \"Table\"], name: \"formRightColumns\", multi: true, required: false});\n if (!allow_control_groups)\n qRightCol.lineBreakAfter = true;\n controls.push(qRightCol);\n var qRightHead = form.textBox({label: \"Right column headings\", type: \"text\", default_value: \"\", name: \"formRightColumnHeadings\", required: false});\n if (!allow_control_groups)\n qRightHead.lineBreakAfter = true;\n controls.push(qRightHead);\n }\n if (APPEARANCE.indexOf(\"LineThickness\") > -1)\n {\n default_thickness = 3.0; // plotly defaults\n if (chartType == \"Time Series\")\n default_thickness = 1.0;\n var qLineThick = form.numericUpDown({name: \"formLineThickness\", label: \"Line thickness\", default_value: default_thickness, minimum: 0.0, maximum: 20.0, increment: 0.5});\n controls.push(qLineThick);\n }\n}\n\nif (DATA_SERIES != null && !(chartType == \"Bar Pictograph\" && picto_icon == custom_icon_label))\n{\n if (allow_control_groups)\n form.group(\"DATA SERIES\");\n if (DATA_SERIES.indexOf('Colors') > -1)\n {\n var qColor = form.comboBox({name: \"formPalette\", label: \"Color palette\", alternatives: palettes, default_value: palettes[0], required: true});\n controls.push(qColor);\n var colOpt = qColor.getValue();\n if (colOpt == \"Custom color\")\n {\n if (!allow_control_groups)\n {\n var qCustomColLabel = form.newLabel(\"Custom color\");\n controls.push(qCustomColLabel);\n }\n var qCustomCol = form.colorPicker({name: \"formCustomColor\", label: allow_control_groups ? \"Custom color\" : \"\", default_value: \"#5C9AD3\"});\n if (!allow_control_groups)\n qCustomCol.lineBreakAfter = true;\n controls.push(qCustomCol);\n }\n if (colOpt == \"Custom gradient\")\n {\n if (!allow_control_groups)\n {\n var qGradientLabel = form.newLabel(\"Gradient start/end\");\n controls.push(qGradientLabel);\n }\n var qGradientStart = form.colorPicker({name: \"formCustomGradientStart\", label: !allow_control_groups ? \"\" : \"Gradient start\", default_value: \"#5C9AD3\"});\n controls.push(qGradientStart);\n var qGradientEnd = form.colorPicker({name: \"formCustomGradientEnd\", label: !allow_control_groups ? \"\" : \"Gradient end\", default_value: \"#ED7D31\"});\n controls.push(qGradientEnd);\n }\n if (colOpt == \"Custom palette\")\n {\n var qPalette = form.textBox({name: \"formCustomPalette\", label: \"Custom palette\", default_value: \"#5C9AD3, #ED7D31\", prompt: \"Enter color as a string. Multiple values should be separated by commas.\"});\n controls.push(qPalette);\n }\n }\n if (DATA_SERIES.indexOf('SubsliceColors') > -1)\n {\n var qSubColor = form.comboBox({name: \"formSubslicePalette\", label: \"Outer ring color palette\", alternatives: line_subslice_palletes, default_value: line_subslice_palletes[0], required: true});\n controls.push(qSubColor);\n var subColOpt = qSubColor.getValue();\n if (subColOpt == \"Custom color\")\n {\n if (!allow_control_groups)\n {\n var qSubCustomColLabel = form.newLabel(\"Custom color\");\n controls.push(qSubCustomColLabel);\n }\n var qSubCustomCol = form.colorPicker({name: \"formSubsliceCustomColor\", label: allow_control_groups ? \"Custom color\" : \"\", default_value: \"#5C9AD3\"});\n controls.push(qSubCustomCol);\n }\n if (subColOpt == \"Custom gradient\")\n {\n if (!allow_control_groups)\n {\n var qSubGradientLabel = form.newLabel(\"Gradient start/end\");\n controls.push(qSubGradientLabel);\n }\n var qSubGradientStart = form.colorPicker({name: \"formSubsliceCustomGradientStart\", label: !allow_control_groups ? \"\" : \"Gradient start\", default_value: \"#5C9AD3\"});\n var qSubGradientEnd = form.colorPicker({name: \"formSubsliceCustomGradientEnd\", label: !allow_control_groups ? \"\" : \"Gradient end\", default_value: \"#ED7D31\"});\n controls.push(qSubGradientStart);\n controls.push(qSubGradientEnd);\n }\n if (subColOpt == \"Custom palette\")\n {\n qSubPalette = form.textBox({name: \"formSubsliceCustomPalette\", label: \"Custom palette\", default_value: \"#5C9AD3, #ED7D31\", prompt: \"Enter color as a string. Multiple values should be separated by commas.\"});\n controls.push(qSubPalette);\n }\n }\n if (DATA_SERIES.indexOf(\"FillOpacity\") > -1)\n {\n var qOpacity = form.numericUpDown({name: \"formFillOpacity\", label: \"Opacity\", required: false, minimum: 0.0, maximum: 1.0, increment: 0.1});\n controls.push(qOpacity);\n }\n}\n\nif (typeof FITLINE != 'undefined' && FITLINE != null && !isStacked)\n{\n if (allow_control_groups)\n form.group(\"TREND LINES\");\n if (FITLINE.indexOf('FitLine') > -1)\n {\n var qFit = form.comboBox({name: \"formFit\", label: \"Line of best fit\", alternatives: [\"None\", \"Linear\", \"LOESS\", \"Friedman's super smoother\", \"Cubic spline\"], default_value: \"None\"});\n controls.push(qFit);\n var fitOpt = qFit.getValue();\n var fitCIOpt = false;\n if ([\"LOESS\", \"Cubic spline\", \"Linear\"].indexOf(fitOpt) > -1 && chartType != \"Bar\")\n {\n var qFitCI = form.checkBox({name: \"formFitCI\", label: \"Show 95% confidence interval\"});\n controls.push(qFitCI);\n fitCIOpt = qFitCI.getValue();\n }\n if (fitOpt != \"None\")\n {\n var qFitLast = form.checkBox({name: \"formFitIgnoreLast\", label: \"Ignore last data point\", default_value: false});\n controls.push(qFitLast);\n var qFitLineType = form.comboBox({name: \"formFitLineType\", label: \"Line type\", alternatives: [\"dot\", \"dash\", \"longdash\", \"dashdot\", \"solid\"], default_value: chartType == \"Line\" ?\"dot\" : \"solid\"});\n controls.push(qFitLineType);\n var qFitLineWidth = form.numericUpDown({name: \"formFitLineWidth\", label: \"Line width\", default_value: 2, minimum: 1, maximum: 20});\n controls.push(qFitLineWidth);\n var qFitColor= form.comboBox({name: \"formFitPalette\", label: \"Fit line color palette\", alternatives: line_subslice_palletes, default_value: line_subslice_palletes[0], required: true});\n controls.push(qFitColor);\n var fitcolOpt = qFitColor.getValue();\n if (fitcolOpt == \"Custom color\")\n {\n if (!allow_control_groups)\n {\n var qFitCustomColorLabel = form.newLabel(\"Custom color of fit line\");\n controls.push(qFitCustomColorLabel);\n }\n var qFitCustomColor = form.colorPicker({name: \"formFitCustomColor\", label: !allow_control_groups ? \"\" : \"Custom color of fit line\", default_value: \"#5C9AD3\"})\n controls.push(qFitCustomColor);\n }\n if (fitcolOpt == \"Custom gradient\")\n {\n if (!allow_control_groups)\n {\n var qFitGradLabel = form.newLabel(\"Gradient start/end of fit lines\");\n controls.push(qFitGradLabel);\n }\n var qFitGradStart = form.colorPicker({name: \"formFitCustomGradientStart\", label: !allow_control_groups ? \"\" : \"Gradient start of fit lines\", default_value: \"#5C9AD3\"});\n var qFitGradEnd = form.colorPicker({name: \"formFitCustomGradientEnd\", label: !allow_control_groups ? \"\" : \"Gradient end of fit lines\", default_value: \"#ED7D31\"});\n controls.push(qFitGradStart);\n controls.push(qFitGradEnd);\n }\n if (fitcolOpt == \"Custom palette\")\n {\n var qFitPalette = form.textBox({name: \"formFitCustomPalette\", label: !allow_control_groups ? \"\" : \"Custom palette of fit lines\", default_value: \"#5C9AD3, #ED7D31\", prompt: \"Enter color as a string. Multiple values should be separated by commas.\"});\n controls.push(qFitPalette);\n }\n var qFitOpacity = form.numericUpDown({name: \"formFitOpacity\", label: \"Opacity of fit lines\", default_value: 1.0, minimum: 0.0, maximum: 1.0, increment: 0.1});\n controls.push(qFitOpacity);\n\n if (fitCIOpt)\n {\n var qFitCIColor= form.comboBox({name: \"formFitCIPalette\", label: \"CI color palette\", alternatives: line_subslice_palletes, default_value: line_subslice_palletes[0], required: true});\n controls.push(qFitCIColor);\n var fitCIcolOpt = qFitCIColor.getValue();\n if (fitCIcolOpt == \"Custom color\")\n {\n if (!allow_control_groups)\n {\n var qFitCICustomColorLabel = form.newLabel(\"Custom color of CI\");\n controls.push(qFitCICustomColorLabel);\n }\n var qFitCICustomColor = form.colorPicker({name: \"formFitCICustomColor\", label: !allow_control_groups ? \"\" : \"Custom color of CI\", default_value: \"#5C9AD3\"})\n controls.push(qFitCICustomColor);\n }\n if (fitCIcolOpt == \"Custom gradient\")\n {\n if (!allow_control_groups)\n {\n var qFitCIGradLabel = form.newLabel(\"Gradient start/end of CI\");\n controls.push(qFitCIGradLabel);\n }\n var qFitCIGradStart = form.colorPicker({name: \"formFitCICustomGradientStart\", label: !allow_control_groups ? \"\" : \"Gradient start of CIs\", default_value: \"#5C9AD3\"});\n var qFitCIGradEnd = form.colorPicker({name: \"formFitCICustomGradientEnd\", label: !allow_control_groups ? \"\" : \"Gradient end of CIs\", default_value: \"#ED7D31\"});\n controls.push(qFitCIGradStart);\n controls.push(qFitCIGradEnd);\n }\n if (fitCIcolOpt == \"Custom palette\")\n {\n var qFitCIPalette = form.textBox({name: \"formFitCICustomPalette\", label: !allow_control_groups ? \"\" : \"Custom palette of CIs\", default_value: \"#5C9AD3, #ED7D31\", prompt: \"Enter color as a string. Multiple values should be separated by commas.\"});\n controls.push(qFitCIPalette);\n }\n var qFitCIOpacity = form.numericUpDown({name: \"formFitCIOpacity\", label: \"Opacity of CI\", default_value: 0.4, minimum: 0.0, maximum: 1.0, increment: 0.1});\n controls.push(qFitCIOpacity);\n }\n }\n }\n}\n \nif (FONT != null)\n{\n if (allow_control_groups)\n form.group(\"FONT\");\n if (FONT.indexOf('GlobalFontFamily') > -1)\n {\n var qGlobalFontFamily = form.comboBox({name: \"formFont\", label: \"Global font family\", alternatives: font_families, default_value: \"Arial\"});\n if (!allow_control_groups)\n qGlobalFontFamily.lineBreakAfter = false;\n controls.push(qGlobalFontFamily);\n var globalFontFamily = qGlobalFontFamily.getValue();\n }\n if (FONT.indexOf('GlobalFontColor') > -1 && !(chartType == \"Bar Pictograph\" && labColAsIcon))\n {\n if (!allow_control_groups)\n {\n var qGlobalFontColorLabel = form.newLabel(\"Global font color\");\n controls.push(qGlobalFontColorLabel);\n }\n var qGlobalFontColor = form.colorPicker({name: \"formFontColor\", label: !allow_control_groups ? \"\" : \"Global font color\", default_value: \"#2C2C2C\"});\n if (!allow_control_groups)\n qGlobalFontColor.lineBreakAfter = true;\n controls.push(qGlobalFontColor);\n var globalFontColor = qGlobalFontColor.getValue();\n }\n}\n \nif (DATA_LABELS != null)\n{\n if (allow_control_groups)\n form.group(\"DATA LABELS\");\n var datalabshow = true;\n if (DATA_LABELS.indexOf('DataLabelPosition') > -1)\n {\n var qLabelPos = form.comboBox({name:\"formDataLabelPosition\", label: \"Show data label\", alternatives: [\"No\", \"Next to bar\", \"Below row label\", \"Above row label\", \"Below icons\", \"Above icons\"], default_value: \"Next to bar\"});\n controls.push(qLabelPos);\n var dLabOpt = qLabelPos.getValue();\n if (dLabOpt == \"No\")\n datalabshow = false;\n if (dLabOpt == \"Below icons\" || dLabOpt == \"Above icons\")\n {\n var qLabelHAlign = form.comboBox({name:\"formDataLabelHorizAlign\", label:\" Data label horizontal alignment\", alternatives: [\"Default\", \"Left\", \"Center\", \"Right\"], default_value: \"Default\"});\n if (!allow_control_groups)\n qLabelHAlign.lineBreakAfter = true;\n controls.push(qLabelHAlign);\n }\n }\n if (DATA_LABELS.indexOf('DataLabelShow') > -1)\n {\n var qDatalabShow = form.checkBox({name: \"formDataLabelShow\", label: \"Show data labels\", default_value: false});\n if (!allow_control_groups)\n qDatalabShow.lineBreakAfter = true;\n controls.push(qDatalabShow);\n var datalabshow = qDatalabShow.getValue();\n } \n if (datalabshow && DATA_LABELS.indexOf('DataLabelFont') > -1)\n {\n qDatalabFont = form.comboBox({name: \"formDataLabelFontFamily\", label: \"Data label font family\", alternatives: font_families, default_value: globalFontFamily});\n controls.push(qDatalabFont);\n if (!(chartType == \"Bar Pictograph\" && labColAsIcon) && !(chartType == \"Heat\"))\n {\n if (!allow_control_groups)\n {\n var qDataLabelFontColorLabel = form.newLabel(\"Data label font color\");\n controls.push(qDataLabelFontColorLabel);\n }\n var qDatalabFont = form.colorPicker({name: \"formDataLabelFontColor\", label: !allow_control_groups ? \"\" : \"Data label font color\", default_value: globalFontColor});\n if (!allow_control_groups)\n qDatalabFont.lineBreakAfter = true\n controls.push(qDatalabFont);\n }\n qDataLabelSize = form.numericUpDown({name: \"formDataLabelFontSize\", label: \"Data label font size\", default_value: 10});\n if (!allow_control_groups)\n qDataLabelSize.lineBreakAfter = true;\n controls.push(qDataLabelSize);\n }\n if (chartType == \"Venn\" && DATA_LABELS.indexOf('DataLabelFontSize') > -1)\n {\n var qDataLabelSize = form.numericUpDown({name: \"formDataLabelFontSize\", label: \"Data label font size\", default_value: 10});\n if (!allow_control_groups)\n qDataLabelSize.lineBreakAfter = true;\n controls.push(qDataLabelSize);\n }\n if (datalabshow && DATA_LABELS.indexOf('DataLabelFormat') > -1)\n {\n var qDataLabelFormat = form.comboBox({name: \"formDataLabelNumberType\", label: \"Number type\", alternatives: data_label_formats, default_value: data_label_formats[0], required: true});\n var dataLabelFormat = qDataLabelFormat.getValue();\n controls.push(qDataLabelFormat);\n }\n if (datalabshow && (DATA_LABELS.indexOf('DataLabelDecimals') > -1 || (DATA_LABELS.indexOf('DataLabelFormat') > -1)))\n {\n if (!allow_control_groups) \n {\n var qDataLabDecimals = form.numericUpDown({name: \"formDataLabelDecimals\", label: \"Decimal places\", default_value: 0, increment: 1, minimum: 0, maximum: 12, required: false});\n qDataLabDecimals.lineBreakAfter = true;\n }\n else\n var qDataLabDecimals = form.numericUpDown({name: \"formDataLabelDecimals\", label: \"Decimal places\", increment: 1, minimum: 0, maximum: 12, required: false});\n controls.push(qDataLabDecimals);\n }\n if (datalabshow && DATA_LABELS.indexOf('DataLabelPrefix') > -1)\n {\n var qDLabPrefix = form.textBox({name:'formPrefix', label: 'Custom prefix', required: false});\n if (!allow_control_groups)\n qDLabPrefix.lineBreakAfter = true;\n controls.push(qDLabPrefix);\n }\n if (datalabshow && DATA_LABELS.indexOf('DataLabelSuffix') > -1)\n {\n var qDLabSuffix = form.textBox({name:'formSuffix', label: 'Custom suffix', required: false});\n if (!allow_control_groups)\n qDLabSuffix.lineBreakAfter = true;\n controls.push(qDLabSuffix);\n }\n if (DATA_LABELS.indexOf('data.label.max.plot') > -1)\n {\n var qDLabMax = form.numericUpDown({name: \"formMaxLab\", label: \"Maximum data labels to plot\", default_value: 50, maximum: 200, minimum: 0});\n controls.push(qDLabMax);\n }\n}\nif (GRIDLINES != null)\n{\n if (allow_control_groups)\n form.group(\"GRID LINES\");\n if (GRIDLINES.indexOf('ShowGrid') > -1)\n {\n var qGrid = form.checkBox({name: \"formShowGrid\", label: \"Show grid lines\", default_value: true});\n if (!allow_control_groups)\n qGrid.lineBreakAfter = true;\n controls.push(qGrid);\n }\n}\nif (LEGEND != null)\n{\n if (allow_control_groups)\n form.group(\"LEGEND\");\n var hasleg = 1;\n if (LEGEND.indexOf('LegendShow') > -1)\n {\n var qLegShow = form.checkBox({name: \"formLegendShow\", label: \"Show legend (if applicable)\", default_value: true});\n if (!allow_control_groups)\n qLegShow.lineBreakAfter= true;\n controls.push(qLegShow);\n hasleg = qLegShow.getValue();\n }\n if (hasleg && LEGEND.indexOf('LegendTitle') > -1)\n {\n var qLegTitle = form.textBox({label: \"Legend title\", type: \"text\", name: \"formLegendTitle\", required: false});\n if (!allow_control_groups)\n qLegTitle.lineBreakAfter = true;\n controls.push(qLegTitle);\n }\n if (hasleg && LEGEND.indexOf('LegendFont') > -1)\n {\n var qLegFont = form.comboBox({name: \"formLegendFontFamily\", label: \"Legend font family\", alternatives: font_families, default_value: globalFontFamily});\n controls.push(qLegFont);\n if (chartType != \"Palm\")\n {\n if (!allow_control_groups)\n {\n var qLegendFontColorLabel = form.newLabel(\"Legend font color\");\n controls.push(qLegendFontColorLabel);\n }\n var qLegFontCol = form.colorPicker({name: \"formLegendFontColor\", label: !allow_control_groups ? \"\" : \"Legend font color\", default_value: globalFontColor});\n if (!allow_control_groups)\n qLegFontCol.lineBreakAfter = true;\n controls.push(qLegFontCol);\n }\n var qLegSize = form.numericUpDown({name: \"formLegendFontSize\", label: \"Legend font size\", default_value: 10});\n if (!allow_control_groups)\n qLegSize.lineBreakAfter = true;\n controls.push(qLegSize);\n }\n if (hasleg && LEGEND.indexOf('LegendPosition') > -1)\n {\n var qLegX = form.numericUpDown({name: \"formLegendXPos\", label: \"Horizontal placement\", default_value: 1.02, increment: 0.02, minimum: -2, maximum: 3, prompt: \"Choose numeric value between -2 (far left) to 3 (far right)\"});\n var qLegY = form.numericUpDown({name: \"formLegendYPos\", label: \"Vertical placement\", default_value: 1.00, increment: 0.02, minimum: -2, maximum: 3, prompt: \"Choose numeric value between -2 (below) and 3 (above)\"});\n if (!allow_control_groups)\n qLegX.lineBreakAfter = true;\n if (!allow_control_groups)\n qLegY.lineBreakAfter = true;\n controls.push(qLegX);\n controls.push(qLegY);\n }\n if (LEGEND.indexOf('LegendWidth') > -1)\n {\n var qLegWidth = form.numericUpDown({name: \"formLegendWidth\", label: \"Legend width\", default_value: 250, increment: 1, minimum: 1, maximum: 1000, prompt: \"Choose numeric value between 1 and 1000\"});\n if (!allow_control_groups)\n qLegWidth.lineBreakAfter = true;\n controls.push(qLegWidth);\n }\n}\nif (TITLE != null)\n{\n if (allow_control_groups)\n form.group('Title');\n if (TITLE.indexOf('Title') > -1)\n {\n var qTitle = form.textBox({name:\"formTitle\", label:\"Title\", required:false});\n if (!allow_control_groups)\n qTitle.lineBreakAfter = true;\n controls.push(qTitle);\n var titleOpt = qTitle.getValue();\n if (!isEmptyString(titleOpt))\n {\n var qTitleFont = form.comboBox({name: \"formTitleFontFamily\", label: \"Title font family\", alternatives: font_families, default_value: globalFontFamily});\n if (!allow_control_groups)\n {\n var qTitleFontColorLabel = form.newLabel(\"Title font color\");\n controls.push(qTitleFontColorLabel);\n }\n var qTitleColor = form.colorPicker({name: \"formTitleFontColor\", label: !allow_control_groups ? \"\" : \"Title font color\", default_value: globalFontColor});\n var qTitleSize = form.numericUpDown({name:\"formTitleFontSize\", label:\"Title font size\", default_value: 16});\n if (!allow_control_groups)\n qTitleColor.lineBreakAfter = true;\n if (!allow_control_groups)\n qTitleSize.lineBreakAfter = true;\n controls.push(qTitleFont);\n controls.push(qTitleColor);\n controls.push(qTitleSize);\n }\n }\n if (show_as_small_mult)\n {\n var qSmallMultTitle = form.checkBox({name:\"formSmallMultTitle\", label:\"Show panel titles\", default_value: true});\n if (!allow_control_groups)\n qSmallMultTitle.lineBreakAfter = true;\n controls.push(qSmallMultTitle);\n if (qSmallMultTitle.getValue())\n {\n var qSmallMultTitleFont = form.comboBox({name: \"formSmallMultTitleFontFamily\", label: \"Panel title font family\", alternatives: font_families, default_value: globalFontFamily});\n if (!allow_control_groups)\n {\n var qSmallMultTitleColorLabel = form.newLabel(\"Panel title font color\");\n controls.push(qSmallMultTitleColorLabel);\n }\n var qSmallMultTitleColor = form.colorPicker({name: \"formSmallMultTitleFontColor\", label: !allow_control_groups ? \"\" : \"Panel title font color\", default_value: globalFontColor});\n var qSmallMultTitleSize = form.numericUpDown({name:\"formSmallMultTitleFontSize\", label:\"Panel title font size\", default_value: 14});\n if (!allow_control_groups)\n qSmallMultTitleColor.lineBreakAfter = true;\n if (!allow_control_groups)\n qSmallMultTitleSize.lineBreakAfter = true;\n controls.push(qSmallMultTitleFont);\n controls.push(qSmallMultTitleColor);\n controls.push(qSmallMultTitleSize);\n var qSmallMultTitleWrap = form.checkBox({label: \"Wrap panel titles\", name: \"formSmallMultTitleWrap\", default_value: true});\n controls.push(qSmallMultTitleWrap);\n if (qSmallMultTitleWrap.getValue())\n {\n var qSmallMultTitleWrapN = form.numericUpDown({name: \"formSmallMultTitleWrapNchar\", label: \"Panel title line width\", default_value: 20, minimum: 5, increment: 1, maximum: 5000});\n controls.push(qSmallMultTitleWrapN);\n }\n }\n }\n if (TITLE.indexOf('Subtitle') > -1)\n {\n var qSubtitle = form.textBox({name:\"formSubtitle\", label:\"Subtitle\", required:false});\n if (!allow_control_groups)\n qSubtitle.lineBreakAfter = true;\n var subtitleOpt = qSubtitle.getValue();\n controls.push(qSubtitle);\n if (!isEmptyString(subtitleOpt))\n {\n var qSubtitleFont = form.comboBox({name: \"formSubtitleFontFamily\", label: \"Subtitle font family\", alternatives: font_families, default_value: globalFontFamily});\n if (!allow_control_groups)\n {\n var qSubtitleColorLabel = form.newLabel(\"Subtitle font color\");\n controls.push(qSubtitleColorLabel);\n }\n var qSubtitleColor = form.colorPicker({name: \"formSubtitleFontColor\", label: !allow_control_groups ? \"\" : \"Subtitle font color\", default_value: globalFontColor});\n var qSubtitleSize = form.numericUpDown({name:\"formSubtitleFontSize\", label:\"Subtitle font size\", default_value: 12});\n if (!allow_control_groups)\n qSubtitleColor.lineBreakAfter = true;\n if (!allow_control_groups)\n qSubtitleSize.lineBreakAfter = true;\n controls.push(qSubtitleFont);\n controls.push(qSubtitleColor);\n controls.push(qSubtitleSize);\n }\n }\n if (TITLE.indexOf('Footer') > -1)\n {\n var qFooter = form.textBox({name:\"formFooter\", label:\"Footer\", required:false});\n if (!allow_control_groups)\n qFooter.lineBreakAfter = true;\n var footerOpt = qFooter.getValue();\n controls.push(qFooter);\n if (chartType == \"Scatter\" || !isEmptyString(footerOpt))\n {\n var qFooterFont = form.comboBox({name: \"formFooterFontFamily\", label: \"Footer font family\", alternatives: font_families, default_value: globalFontFamily});\n if (!allow_control_groups)\n {\n var qFooterColorLabel = form.newLabel(\"Footer font color\");\n controls.push(qFooterColorLabel);\n }\n var qFooterColor = form.colorPicker({name: \"formFooterFontColor\", label: !allow_control_groups ? \"\" : \"Footer font color\", default_value: globalFontColor});\n var qFooterSize = form.numericUpDown({name:\"formFooterFontSize\", label:\"Footer font size\", default_value: 8});\n if (!allow_control_groups)\n qFooterColor.lineBreakAfter = true;\n if (!allow_control_groups)\n qFooterSize.lineBreakAfter = true;\n controls.push(qFooterFont);\n controls.push(qFooterColor);\n controls.push(qFooterSize);\n if (chartType != \"Heat\")\n {\n var footerWrapOpt = form.checkBox({name: \"formFooterWrap\", label: \"Wrap footer\", default_value: true});\n controls.push(footerWrapOpt);\n if (footerWrapOpt.getValue())\n {\n var qFooterWrapN = form.numericUpDown({name: \"formFooterWrapNchar\", label: \"Footer line width\", default_value: 100, minimum: 5, increment: 5, maximum: 5000});\n controls.push(qFooterWrapN);\n }\n }\n }\n }\n}\nif (CATEGORIES_AXIS != null)\n{\n var axisPrefix = \"Axis\";\n if (allow_control_groups)\n form.group(categoriesAxisLabel);\n else\n axisPrefix = categoriesAxisLabel.charAt(0).toUpperCase() + categoriesAxisLabel.substr(1).toLowerCase();\n var labelShowX = \"Show \" + axisPrefix.toLowerCase();\n \n if (CATEGORIES_AXIS.indexOf('CategoriesTitle') > -1)\n {\n var qShowXTitle = form.checkBox({name: \"formShowCategoriesTitle\", label: labelShowX + \" title\", default_value: true});\n if (!allow_control_groups)\n qShowXTitle.lineBreakAfter = true;\n var showCategoriesTitle = qShowXTitle.getValue();\n controls.push(qShowXTitle);\n if (showCategoriesTitle)\n {\n var qXTitle = form.textBox({name: \"formCategoriesTitle\", label: axisPrefix + \" title\", required: false});\n if (!allow_control_groups)\n qXTitle.lineBreakAfter = true;\n var qXTitleFont = form.comboBox({name: \"formCategoriesTitleFontFamily\", label: axisPrefix + \" title font family\", alternatives: font_families, default_value: globalFontFamily});\n controls.push(qXTitle);\n controls.push(qXTitleFont);\n \n if (chartType != \"Palm\")\n {\n if (!allow_control_groups)\n {\n var qXTitleColorLabel = form.newLabel(axisPrefix + \" title font color\");\n controls.push(qXTitleColorLabel);\n }\n var qXTitleColor = form.colorPicker({name: \"formCategoriesTitleFontColor\", label: !allow_control_groups ? \"\" : axisPrefix + \" title font color\", default_value: globalFontColor});\n if (!allow_control_groups)\n qXTitleColor.lineBreakAfter = true;\n controls.push(qXTitleColor);\n }\n var qXTitleSize = form.numericUpDown({name: \"formCategoriesTitleFontSize\", label: axisPrefix + \" title font size\", default_value: 12});\n if (!allow_control_groups)\n qXTitleSize.lineBreakAfter = true;\n controls.push(qXTitleSize);\n }\n }\n if (chartType == \"Bar Pictograph\")\n labelShowX = \"Show bar labels\";\n var showX = true;\n if (CATEGORIES_AXIS.indexOf('CategoriesAxisShow') > -1)\n {\n qShowX = form.checkBox({name: \"formCategoriesAxisShow\", label: labelShowX, default_value: true});\n if (!allow_control_groups)\n qShowX.lineBreakAfter = true;\n showX = qShowX.getValue();\n controls.push(qShowX);\n } \n\n if (chartType == \"Stream\")\n {\n var qTickUnits = form.comboBox({name: \"formCategoriesTickUnits\", label: axisPrefix + \" tick units\", alternatives: [\"Automatic\", \"Number\", \"Day\", \"Month\", \"Year\"], default_value: \"Automatic\"});\n controls.push(qTickUnits);\n var qAutoTickDist = form.checkBox({name: \"formCategoriesAutoTickInterval\", label: \"Automatic tick interval\", default_value: true});\n if (allow_control_groups)\n qAutoTickDist.lineAfterBreak = true;\n var auto_tick_distance = qAutoTickDist.getValue();\n controls.push(qAutoTickDist);\n if (!auto_tick_distance)\n {\n var qTickIntervals = form.numericUpDown({name: \"formCategoriesTickInterval\", label: axisPrefix + \" tick interval\", default_value: 3, increment: 1, minimum: 1, maximum: 1000000});\n if (allow_control_groups)\n qTickIntervals.lineAfterBreak = true;\n controls.push(qTickIntervals);\n }\n }\n\n if (showX)\n {\n if (CATEGORIES_AXIS.indexOf('CategoriesNumberFormat') > -1)\n {\n var qXNumberType = form.comboBox({name: \"formCategoriesNumberType\", label: axisPrefix + \" number type\", alternatives: categories_number_formats, default_value: categories_number_formats[0], required: true});\n controls.push(qXNumberType);\n var xNumberType = qXNumberType.getValue();\n if (xNumberType == \"Date/Time\")\n {\n var qXDate = form.comboBox({name: \"formCategoriesDateType\", label: \"Date type\", alternatives: date_formats, default_value: date_formats[0], required: true});\n controls.push(qXDate);\n xNumberType = qXDate.getValue();\n }\n var qXNumberCustom = null;\n if (xNumberType == 'Custom')\n qXNumberCustom = form.textBox({name: \"formCategoriesNumberCustom\", label: \"Custom code\", default_value: \"%d %b %y\", required: true});\n else if (xNumberType == 'Currency')\n qXNumberCustom = form.textBox({name: \"formCategoriesCurrency\", label: \"Currency symbol\", default_value: \"\", required: true}); \n else if (xNumberType == 'Number' || xNumberType == 'Currency')\n qXNumberCustom = form.checkBox({name: \"formCategoriesSeparateThousands\", label: \"Separate thousands by comma\", default: true});\n if (qXNumberCustom != null)\n {\n if (!allow_control_groups)\n qXNumberCustom.lineBreakAfter = true;\n controls.push(qXNumberCustom);\n }\n if (!allow_control_groups)\n {\n var qXDecimals = form.numericUpDown({name:\"formCategoriesDecimals\", default_value: 0, label: xNumberType == \"Metric unit suffix\" ? \"Significant digits\": \"Decimal places\", minimum: xNumberType == \"Metric unit suffix\" ? 1 : 0, required: false});\n qXDecimals.lineBreakAfter = true;\n }\n else\n var qXDecimals = form.numericUpDown({name:\"formCategoriesDecimals\", label: xNumberType == \"Metric unit suffix\" ? \"Significant digits\": \"Decimal places\", minimum: xNumberType == \"Metric unit suffix\" ? 1 : 0, required: false});\n controls.push(qXDecimals);\n if (CATEGORIES_AXIS.indexOf('CategoriesPrefix') > -1)\n {\n var qXPrefix = form.textBox({name: \"formCategoriesPrefix\", label: \"Custom prefix\", default_value: \"\", required: false}); \n var qXSuffix = form.textBox({name: \"formCategoriesSuffix\", label: \"Custom suffix\", default_value: \"\", required: false});\n if (!allow_control_groups)\n qXPrefix.lineBreakAfter = true;\n if (!allow_control_groups)\n qXSuffix.lineBreakAfter = true;\n controls.push(qXPrefix);\n controls.push(qXSuffix);\n }\n }\n if (CATEGORIES_AXIS.indexOf('CategoriesTickInterval') > -1)\n {\n var qXTickInterval = form.numericUpDown({name: \"formCategoriesTickInterval\", label: axisPrefix + \" tick interval\", default_value: 1, increment: 1, minimum: 1, maximum: 1000});\n controls.push(qXTickInterval);\n }\n if (CATEGORIES_AXIS.indexOf('CategoriesTickFont') > -1)\n {\n var qXTickFont = form.comboBox({name: \"formCategoriesTickFontFamily\", label: axisPrefix + \" label font family\", alternatives: font_families, default_value: globalFontFamily});\n controls.push(qXTickFont);\n if (chartType != \"Palm\" && !(chartType == \"Bar Pictograph\" && labColAsIcon))\n {\n if (!allow_control_groups)\n {\n var qXTickColorLabel = form.newLabel(axisPrefix + \" label font color\");\n controls.push(qXTickColorLabel);\n }\n var qXTickColor = form.colorPicker({name: \"formCategoriesTickFontColor\", label: !allow_control_groups ? \"\" : axisPrefix + \" label font color\", default_value: globalFontColor});\n if (!allow_control_groups)\n qXTickColor.lineBreakAfter = true;\n controls.push(qXTickColor);\n }\n var qXTickSize = form.numericUpDown({name: \"formCategoriesTickFontSize\", label: axisPrefix + \" label font size\", default_value: 10});\n if (!allow_control_groups)\n qXTickSize.lineBreakAfter = true;\n controls.push(qXTickSize);\n }\n if (CATEGORIES_AXIS.indexOf('CategoriesTickHorizAlign') > -1)\n {\n var qXTickHAlign = form.comboBox({name:\"formCategoriesTickHorizAlign\", label: \"Horizontal alignment\", alternatives: [\"Default\", \"Left\", \"Center\", \"Right\"], default_value: \"Default\"}); \n controls.push(qXTickHAlign);\n }\n if (CATEGORIES_AXIS.indexOf('CategoriesTickAngle') > -1)\n {\n var qXTickAngle = form.comboBox({name: \"formCategoriesTickAngle\", label: axisPrefix + \" label orientation\", alternatives: [\"Automatic\", \"Horizontal\", \"Vertical\", \"Diagonal\"], default_value: \"Automatic\"});\n controls.push(qXTickAngle);\n }\n if (CATEGORIES_AXIS.indexOf('LabelWrap') > -1)\n {\n var qXWrap = form.checkBox({name: \"formLabelWrap\", label: \"Wrap \" + axisPrefix.toLowerCase() + \" label\", default_value: true});\n if (!allow_control_groups)\n qXWrap.lineBreakAfter = true;\n var xWrapOpt = qXWrap.getValue();\n controls.push(qXWrap);\n if (xWrapOpt)\n {\n var qXWrapN = form.numericUpDown({name: \"formLabelWrapNchar\", label: axisPrefix + \" label line width\", default_value: 21, minimum: 5, increment: 5, maximum: 1000});\n if (!allow_control_groups)\n qXWrapN.lineBreakAfter = true;\n controls.push(qXWrapN);\n }\n } \n }\n}\nif (VALUES_AXIS != null)\n{\n var axisPrefix = \"Axis\";\n if (allow_control_groups)\n form.group(valuesAxisLabel);\n else\n axisPrefix = valuesAxisLabel.charAt(0).toUpperCase() + valuesAxisLabel.substr(1).toLowerCase();\n var labelShowY = \"Show \" + axisPrefix.toLowerCase();\n \n if (VALUES_AXIS.indexOf('ValuesTitle') > -1)\n {\n var qShowValuesTitle = form.checkBox({name: \"formShowValuesTitle\", label: labelShowY + \" title\", default_value: true});\n var showValuesTitle = qShowValuesTitle.getValue();\n if (!allow_control_groups)\n qShowValuesTitle.lineBreakAfter = true;\n controls.push(qShowValuesTitle);\n if (showValuesTitle)\n {\n var qYTitle = form.textBox({name: \"formValuesTitle\", label: axisPrefix + \" title\", required: false});\n if (!allow_control_groups)\n qYTitle.lineBreakAfter = true;\n var qYTitleFont = form.comboBox({name: \"formValuesTitleFontFamily\", label: axisPrefix + \" title font family\", alternatives: font_families, default_value: globalFontFamily});\n controls.push(qYTitle);\n controls.push(qYTitleFont);\n if (chartType != \"Palm\")\n {\n if (!allow_control_groups)\n {\n var qYTitleColorLabel = form.newLabel(axisPrefix + \"title font color\");\n controls.push(qYTitleColorLabel);\n }\n var qYTitleColor = form.colorPicker({name: \"formValuesTitleFontColor\", label: !allow_control_groups ? \"\" : axisPrefix + \" title font color\", default_value: globalFontColor});\n if (!allow_control_groups)\n qYTitleColor.lineBreakAfter = true;\n controls.push(qYTitleColor);\n }\n var qYTitleSize = form.numericUpDown({name: \"formValuesTitleFontSize\", label: axisPrefix + \" title font size\", default_value: 12});\n if (!allow_control_groups)\n qYTitleSize.lineBreakAfter = true;\n controls.push(qYTitleSize);\n }\n }\n var showY = true;\n if (VALUES_AXIS.indexOf('ValuesAxisShow') > -1)\n {\n qShowY = form.checkBox({name: \"formValuesAxisShow\", label: labelShowY, default_value: true});\n if (!allow_control_groups)\n qShowY.lineBreakAfter = true;\n controls.push(qShowY);\n showY = qShowY.getValue();\n } \n if (showY) \n {\n if (VALUES_AXIS.indexOf('ValuesMin') > -1)\n {\n var qYMin = form.textBox({name: \"formValuesMin\", label: \"Minimum value\", type: \"number\", required: false, prompt: \"Leave blank to determine automatically from input data.\"});\n controls.push(qYMin);\n }\n if (VALUES_AXIS.indexOf('ValuesMax') > -1)\n {\n var qYMax = form.textBox({name: \"formValuesMax\", label: \"Maximum value\", type: \"number\", required: false, prompt: \"Leave blank to determine automatically from input data.\"});\n controls.push(qYMax);\n }\n if (VALUES_AXIS.indexOf('ValuesNumberFormat') > -1)\n {\n var qYNumberType = form.comboBox({name: \"formValuesNumberType\", label: axisPrefix + \" number type\", alternatives: values_number_formats, default_value: values_number_formats[0], required: true});\n controls.push(qYNumberType);\n var yNumberType = qYNumberType.getValue();\n if (yNumberType == \"Date/Time\") // funny loop because date/time can be custom\n {\n var qYDate = form.comboBox({name: \"formValuesDateType\", label: \"Date type\", alternatives: date_formats, default_value: date_formats[0], required: true});\n yNumberType = qYDate.getValue();\n controls.push(qYDate);\n }\n\n var qYNumberCustom = null;\n if (yNumberType == \"Custom\")\n qYNumberCustom = form.textBox({name: \"formValuesNumberCustom\", label: \"Custom code\", default_value: \"%d %b %y\", required: true});\n else if (yNumberType == 'Currency')\n qYNumberCustom = form.textBox({name: \"formValuesCurrency\", label: \"Currency symbol\", default_value: \"\", required: true}); \n else if ((yNumberType == 'Number' || yNumberType == 'Currency') && chartType != \"Palm\")\n qYNumberCustom = form.checkBox({name: \"formValuesSeparateThousands\", label: \"Separate thousands by comma\", default: true});\n if (qYNumberCustom != null)\n {\n if (!allow_control_groups)\n qYNumberCustom.lineBreakAfter = true;\n controls.push(qYNumberCustom);\n }\n if (!allow_control_groups)\n {\n var qYDecimals = form.numericUpDown({name:\"formValuesDecimals\", default_value: 0, label: yNumberType == \"Metric unit suffix\" ? \"Significant digits\": \"Decimal places\", minimum: yNumberType == \"Metric unit suffix\" ? 1 : 0, required: false});\n qYDecimals.lineBreakAfter = true;\n }\n else\n var qYDecimals = form.numericUpDown({name:\"formValuesDecimals\", label: yNumberType == \"Metric unit suffix\" ? \"Significant digits\": \"Decimal places\", minimum: yNumberType == \"Metric unit suffix\" ? 1 : 0, required: false});\n controls.push(qYDecimals);\n if (VALUES_AXIS.indexOf('ValuesPrefix') > -1)\n {\n var qYPrefix = form.textBox({name: \"formValuesPrefix\", label: \"Custom prefix\", default_value: \"\", required: false}); \n var qYSuffix = form.textBox({name: \"formValuesSuffix\", label: \"Custom suffix\", default_value: \"\", required: false}); \n if (!allow_control_groups)\n qYPrefix.lineBreakAfter = true\n if (!allow_control_groups)\n qYSuffix.lineBreakAfter = true;\n controls.push(qYPrefix);\n controls.push(qYSuffix);\n }\n }\n if (showY && VALUES_AXIS.indexOf('ValuesNumberTicks') > -1) //Weird parameter for Stream Graph\n {\n var qYNumTicks = form.numericUpDown({name: \"formValuesNumberTicks\", label: \"Maximum number of ticks\", default_value: 5, increment: 1, minimum: 1, maximum: 1000});\n controls.push(qYNumTicks);\n }\n if (showY && VALUES_AXIS.indexOf('ValuesTickFont') > -1)\n {\n var qYTickFont = form.comboBox({name: \"formValuesTickFontFamily\", label: axisPrefix + \" label font family\", alternatives: font_families, default_value: globalFontFamily});\n if (chartType != \"Palm\")\n {\n if (!allow_control_groups)\n {\n var qYTickColorLabel = form.newLabel(axisPrefix + \" label font color\");\n controls.push(qYTickColorLabel);\n }\n var qYTickColor = form.colorPicker({name: \"formValuesTickFontColor\", label: !allow_control_groups ? \"\" : axisPrefix + \" label font color\", default_value: globalFontColor});\n if (!allow_control_groups)\n qYTickColor.lineBreakAfter = true;\n controls.push(qYTickColor);\n }\n var qYTickSize = form.numericUpDown({name: \"formValuesTickFontSize\", label: axisPrefix + \" label font size\", default_value: 10});\n controls.push(qYTickSize);\n }\n }\n}\nif (HOVER != null)\n{\n if (allow_control_groups)\n form.group(\"HOVER\");\n var showHover = true;\n if (HOVER.indexOf('HoverShow') > -1)\n {\n var qShowHover = form.checkBox({name: \"formHoverShow\", label: \"Show hover text\", default_value: true});\n showHover = qShowHover.getValue();\n controls.push(qShowHover);\n }\n if (showHover && HOVER.indexOf('HoverNumberFormat') > -1 )\n {\n var qHoverNumberType = form.comboBox({name: \"formHoverNumberType\", label: \"Hovertext number type\", alternatives: hover_number_formats, default_value: hover_number_formats[0], required: true});\n var hoverNumberType = qHoverNumberType.getValue();\n controls.push(qHoverNumberType);\n if (hoverNumberType == \"Date/Time\")\n {\n var qHoverDate = form.comboBox({name: \"formHoverDateType\", label: \"Date type\", alternatives: date_formats, default_value: date_formats[0], required: true});\n hoverNumberType = qHoverDate.getValue();\n controls.push(qHoverDate);\n }\n\n var qHoverCustom = null;\n if (hoverNumberType == \"Custom\")\n qHoverCustom = form.textBox({name: \"formHoverNumberCustom\", label: \"Custom code\", default_value: \"%d %b %y\", required: true});\n else if (hoverNumberType == 'Number' && chartType != \"Venn\" && chartType != \"Stream\")\n qHoverCustom = form.checkBox({name: \"formHoverSeparateThousands\", label: \"Separate thousands by comma\", default: true});\n if (qHoverCustom != null)\n {\n if (!allow_control_groups)\n qHoverCustom.lineBreakAfter = true;\n controls.push(qHoverCustom);\n }\n if (!allow_control_groups)\n {\n var qHoverDecimals = form.numericUpDown({name:\"formHoverDecimals\", default_value: 0, label: hoverNumberType == \"Metric unit suffix\" ? \"Significant digits\": \"Decimal places\", minimum: hoverNumberType == \"Metric unit suffix\" ? 1 : 0, required: false});\n qHoverDecimals.lineBreakAfter = true;\n }\n else\n var qHoverDecimals = form.numericUpDown({name:\"formHoverDecimals\", label: hoverNumberType == \"Metric unit suffix\" ? \"Significant digits\": \"Decimal places\", minimum: hoverNumberType == \"Metric unit suffix\" ? 1 : 0, required: false});\n controls.push(qHoverDecimals);\n }\n}\nif (typeof MARGINS != 'undefined')\n{\n if (allow_control_groups)\n form.group(\"MARGINS\");\n if (MARGINS.indexOf('Margin') > -1)\n {\n var qMarginTop = form.numericUpDown({name: \"formMarginTop\", label: \"Top\", default_value: 30, increment: 1, minimum: 0, maximum: 1000});\n var qMarginLeft = form.numericUpDown({name: \"formMarginLeft\", label: \"Left\", default_value: 80, increment: 1, minimum: 0, maximum: 1000});\n var qMarginBottom = form.numericUpDown({name: \"formMarginBottom\", label: \"Bottom\", default_value: 50, increment: 1, minimum: 0, maximum: 1000});\n var qMarginRight = form.numericUpDown({name: \"formMarginRight\", label: \"Right\", default_value: 40, increment: 1, minimum: 0, maximum: 1000});\n controls.push(qMarginTop);\n controls.push(qMarginLeft);\n controls.push(qMarginBottom);\n controls.push(qMarginRight);\n }\n}\nform.setInputControls(controls);","JSError":null,"JSErrorDetails":null,"ControlDefinitionErrors":null,"InputValidationErrors":null,"Controls":[{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formChartType","Page":null,"Group":"OUTPUT","Type":"ComboBox","Label":"Chart type","LabelEmphasised":false,"Value":"Donut","Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":null,"Invalid":null,"Required":true,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":["Table","Area","Bar","Bar Pictograph","Bean","Box","Column","Density","Donut","Geographic Map","Heat","Histogram","Line","Palm","Pie","Pyramid","Radar","Stream","Scatter","Time Series","Venn","Violin"],"CheckAlign":null,"Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formX","Page":null,"Group":"DATA SOURCE","Type":"DropBox","Label":"Variables in 'Data'","LabelEmphasised":false,"Value":null,"Allowed":null,"Multi":true,"Prompt":"Variables are shown in the 'Data' tree (bottom-left).","ErrorMessage":"Variables in 'Data': Variables in 'Data' accepts only inputs which are of type Variable.","Invalid":null,"Required":false,"AllowedTypes":["variables"],"OwnerRItemGuid":"cc9cd6ae-29b2-411f-bcce-61035174e355","MinInputs":0,"MaxInputs":2147483647,"Height":4,"Duplicates":false,"Values":["f2cb7f4d-3c00-4b5c-a039-12c3e8dc2f05"],"CheckAlign":null,"Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formY","Page":null,"Group":"DATA SOURCE","Type":"DropBox","Label":"Groups","LabelEmphasised":false,"Value":null,"Allowed":null,"Multi":false,"Prompt":"Variables are shown in the 'Data' tree (bottom-left).","ErrorMessage":"Groups: Groups accepts only one input which is of type Variable.","Invalid":null,"Required":false,"AllowedTypes":["variable"],"OwnerRItemGuid":"cc9cd6ae-29b2-411f-bcce-61035174e355","MinInputs":0,"MaxInputs":1,"Height":1,"Duplicates":false,"Values":null,"CheckAlign":null,"Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formFirstAggregate","Page":null,"Group":"DATA MANIPULATION","Type":"CheckBox","Label":"Aggregate the data prior to plotting","LabelEmphasised":false,"Value":true,"Allowed":null,"Multi":false,"Prompt":"The data is 'raw', where each row represents an individual case. It needs to be aggregated prior to plotting.","ErrorMessage":null,"Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":"left","Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formTidy","Page":null,"Group":"DATA MANIPULATION","Type":"CheckBox","Label":"Automatically tidy the data","LabelEmphasised":false,"Value":true,"Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":null,"Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":"left","Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formTidyLabels","Page":null,"Group":"DATA MANIPULATION","Type":"CheckBox","Label":"Tidy labels","LabelEmphasised":false,"Value":true,"Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":null,"Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":"left","Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formAsPercentages","Page":null,"Group":"DATA MANIPULATION","Type":"CheckBox","Label":"Convert to percentages/proportions","LabelEmphasised":false,"Value":true,"Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":null,"Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":"left","Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formDateFormat","Page":null,"Group":"DATA MANIPULATION","Type":"ComboBox","Label":"Date format","LabelEmphasised":false,"Value":"Automatic","Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":null,"Invalid":null,"Required":true,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":["Automatic","International (dd/mm/yyyy)","US (mm/dd/yyyy)","No date formatting"],"CheckAlign":null,"Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formNames","Page":null,"Group":"DATA MANIPULATION","Type":"CheckBox","Label":"Variable names","LabelEmphasised":false,"Value":false,"Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":null,"Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":"left","Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formHideOutput","Page":null,"Group":"DATA MANIPULATION","Type":"CheckBox","Label":"Hide output with small sample sizes","LabelEmphasised":false,"Value":false,"Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":null,"Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":"left","Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formIgnoreRows","Page":null,"Group":"Row manipulations","Type":"TextBox","Label":"Rows to ignore","LabelEmphasised":false,"Value":"NET, Total, SUM","Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":null,"Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":null,"Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formHideEmptyRows","Page":null,"Group":"Row manipulations","Type":"CheckBox","Label":"Hide empty rows","LabelEmphasised":false,"Value":false,"Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":null,"Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":"left","Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formHideRowsBySize","Page":null,"Group":"Row manipulations","Type":"CheckBox","Label":"Hide rows with small sample sizes","LabelEmphasised":false,"Value":false,"Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":null,"Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":"left","Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formSelectRows","Page":null,"Group":"Row manipulations","Type":"TextBox","Label":"Rows to show","LabelEmphasised":false,"Value":"","Allowed":null,"Multi":false,"Prompt":"Enter comma separated list of row indices or names","ErrorMessage":null,"Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":null,"Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formFirstKRows","Page":null,"Group":"Row manipulations","Type":"TextBox","Label":"Number of rows from top to show","LabelEmphasised":false,"Value":"","Allowed":null,"Multi":false,"Prompt":"Enter a number or leave blank","ErrorMessage":null,"Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":null,"Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formLastKRows","Page":null,"Group":"Row manipulations","Type":"TextBox","Label":"Number of rows from bottom to show","LabelEmphasised":false,"Value":"","Allowed":null,"Multi":false,"Prompt":"Enter a number or leave blank","ErrorMessage":null,"Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":null,"Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formSortRows","Page":null,"Group":"Row manipulations","Type":"CheckBox","Label":"Sort rows","LabelEmphasised":false,"Value":false,"Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":null,"Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":"left","Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formAutoOrderRows","Page":null,"Group":"Row manipulations","Type":"CheckBox","Label":"Order rows by similarity","LabelEmphasised":false,"Value":false,"Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":null,"Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":"left","Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formReverseRows","Page":null,"Group":"Row manipulations","Type":"CheckBox","Label":"Reverse rows","LabelEmphasised":false,"Value":false,"Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":null,"Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":"left","Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formIgnoreCols","Page":null,"Group":"Column manipulations","Type":"TextBox","Label":"Columns to ignore","LabelEmphasised":false,"Value":"NET, Total, SUM","Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":null,"Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":null,"Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formHideEmptyCols","Page":null,"Group":"Column manipulations","Type":"CheckBox","Label":"Hide empty columns","LabelEmphasised":false,"Value":false,"Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":null,"Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":"left","Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formHideColsBySize","Page":null,"Group":"Column manipulations","Type":"CheckBox","Label":"Hide columns with small sample sizes","LabelEmphasised":false,"Value":false,"Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":null,"Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":"left","Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formSelectCols","Page":null,"Group":"Column manipulations","Type":"TextBox","Label":"Columns to show","LabelEmphasised":false,"Value":"","Allowed":null,"Multi":false,"Prompt":"Enter comma separated list of column indices or names","ErrorMessage":null,"Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":null,"Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formFirstKCols","Page":null,"Group":"Column manipulations","Type":"TextBox","Label":"Number of columns from left to show","LabelEmphasised":false,"Value":"","Allowed":null,"Multi":false,"Prompt":"Enter a number or leave blank","ErrorMessage":null,"Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":null,"Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formLastKCols","Page":null,"Group":"Column manipulations","Type":"TextBox","Label":"Number of columns from right to show","LabelEmphasised":false,"Value":"","Allowed":null,"Multi":false,"Prompt":"Enter a number or leave blank","ErrorMessage":null,"Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":null,"Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formSortCols","Page":null,"Group":"Column manipulations","Type":"CheckBox","Label":"Sort columns","LabelEmphasised":false,"Value":false,"Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":null,"Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":"left","Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formAutoOrderCols","Page":null,"Group":"Column manipulations","Type":"CheckBox","Label":"Order columns by similarity","LabelEmphasised":false,"Value":false,"Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":null,"Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":"left","Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formReverseCols","Page":null,"Group":"Column manipulations","Type":"CheckBox","Label":"Reverse columns","LabelEmphasised":false,"Value":false,"Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":null,"Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":"left","Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formPieRadius","Page":"Chart","Group":"APPEARANCE","Type":"NumericUpDown","Label":"Donut hole radius %","LabelEmphasised":false,"Value":70.0,"Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":"Donut hole radius %: ","Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":null,"Text":null,"Increment":1.0,"Min":0.0,"Max":100.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formBorderColor","Page":"Chart","Group":"APPEARANCE","Type":"ColorPicker","Label":"Border color","LabelEmphasised":false,"Value":"rgb(255, 255, 255)","Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":"Border color: ","Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":null,"Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formPalette","Page":"Chart","Group":"DATA SERIES","Type":"ComboBox","Label":"Color palette","LabelEmphasised":false,"Value":"Default colors","Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":null,"Invalid":null,"Required":true,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":["Default colors","Primary colors","Rainbow","Light pastels","Strong colors","Reds, dark to light","Reds, light to dark","Greens, dark to light","Greens, light to dark","Blues, dark to light","Blues, light to dark","Greys, dark to light","Greys, light to dark","Heat colors (red, yellow, white)","Terrain colors (green, beige, grey)","Custom color","Custom gradient","Custom palette"],"CheckAlign":null,"Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formFont","Page":"Chart","Group":"FONT","Type":"ComboBox","Label":"Global font family","LabelEmphasised":false,"Value":"Arial","Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":null,"Invalid":null,"Required":true,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":["Andale Mono","Arial","Arial Black","Century Gothic","Comic Sans MS","Courier New","Georgia","Impact","Times New Roman","Trebuchet MS","Verdana"],"CheckAlign":null,"Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formFontColor","Page":"Chart","Group":"FONT","Type":"ColorPicker","Label":"Global font color","LabelEmphasised":false,"Value":"rgb(44, 44, 44)","Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":"Global font color: ","Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":null,"Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formDataLabelFontFamily","Page":"Chart","Group":"DATA LABELS","Type":"ComboBox","Label":"Data label font family","LabelEmphasised":false,"Value":"Arial","Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":null,"Invalid":null,"Required":true,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":["Andale Mono","Arial","Arial Black","Century Gothic","Comic Sans MS","Courier New","Georgia","Impact","Times New Roman","Trebuchet MS","Verdana"],"CheckAlign":null,"Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formDataLabelFontColor","Page":"Chart","Group":"DATA LABELS","Type":"ColorPicker","Label":"Data label font color","LabelEmphasised":false,"Value":"rgb(44, 44, 44)","Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":"Data label font color: ","Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":null,"Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formDataLabelFontSize","Page":"Chart","Group":"DATA LABELS","Type":"NumericUpDown","Label":"Data label font size","LabelEmphasised":false,"Value":10.0,"Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":"Data label font size: ","Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":null,"Text":null,"Increment":1.0,"Min":0.0,"Max":100.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formDataLabelNumberType","Page":"Chart","Group":"DATA LABELS","Type":"ComboBox","Label":"Number type","LabelEmphasised":false,"Value":"Percentage","Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":null,"Invalid":null,"Required":true,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":["Percentage","Number"],"CheckAlign":null,"Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formDataLabelDecimals","Page":"Chart","Group":"DATA LABELS","Type":"NumericUpDown","Label":"Decimal places","LabelEmphasised":false,"Value":null,"Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":"Decimal places: ","Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":null,"Text":null,"Increment":1.0,"Min":0.0,"Max":12.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formPrefix","Page":"Chart","Group":"DATA LABELS","Type":"TextBox","Label":"Custom prefix","LabelEmphasised":false,"Value":"","Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":null,"Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":null,"Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formSuffix","Page":"Chart","Group":"DATA LABELS","Type":"TextBox","Label":"Custom suffix","LabelEmphasised":false,"Value":"","Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":null,"Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":null,"Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formTitle","Page":"Chart","Group":"Title","Type":"TextBox","Label":"Title","LabelEmphasised":false,"Value":"","Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":null,"Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":null,"Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formSubtitle","Page":"Chart","Group":"Title","Type":"TextBox","Label":"Subtitle","LabelEmphasised":false,"Value":"","Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":null,"Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":null,"Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":"formFooter","Page":"Chart","Group":"Title","Type":"TextBox","Label":"Footer","LabelEmphasised":false,"Value":"","Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":null,"Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":null,"Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":null},{"ItemGuid":"00000000-0000-0000-0000-000000000000","ControlName":null,"Page":null,"Group":null,"Type":null,"Label":null,"LabelEmphasised":false,"Value":null,"Allowed":null,"Multi":false,"Prompt":null,"ErrorMessage":null,"Invalid":null,"Required":false,"AllowedTypes":null,"OwnerRItemGuid":null,"MinInputs":0,"MaxInputs":0,"Height":0,"Duplicates":false,"Values":null,"CheckAlign":null,"Text":null,"Increment":0.0,"Min":0.0,"Max":0.0,"Vertical":false}]},"calculating":"Idle","showDebug":false,"layout":"OutputOnly","vSplit":0.25,"hSplit":0.45,"updateWarnings":true,"updateMode":"Manual","warnSlow":false,"Options":{"debugconsole":false,"codeposition":"OutputOnly","splitH":0.45,"splitV":0.25,"update warnings":true,"updating":"Manual","warn slow":false}}