@eclipse-scout/chart 11.0.32 → 11.0.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/eclipse-scout-chart-4f219da36ee28808d3bf.min.js +2 -0
- package/dist/eclipse-scout-chart-4f219da36ee28808d3bf.min.js.map +1 -0
- package/dist/eclipse-scout-chart-theme-dark.css.map +1 -1
- package/dist/eclipse-scout-chart-theme.css.map +1 -1
- package/dist/eclipse-scout-chart.js +25 -17
- package/dist/eclipse-scout-chart.js.map +1 -1
- package/dist/file-list +2 -2
- package/package.json +3 -3
- package/src/chart/ChartJsRenderer.js +4 -6
- package/src/chart/ChartLayout.js +2 -1
- package/src/table/controls/ChartTableControl.js +9 -0
- package/dist/eclipse-scout-chart-92cf740a3f2f7f4db734.min.js +0 -2
- package/dist/eclipse-scout-chart-92cf740a3f2f7f4db734.min.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/chart/AbstractChartRenderer.js","webpack:///./src/chart/AbstractSvgChartRenderer.js","webpack:///./src/chart/Chart.js","webpack:///./src/chart/ChartAdapter.js","webpack:///./src/chart/ChartJsRenderer.js","webpack:///./src/chart/ChartJsTooltipDelay.js","webpack:///./src/chart/ChartLayout.js","webpack:///./src/chart/FulfillmentChartRenderer.js","webpack:///./src/chart/SalesfunnelChartRenderer.js","webpack:///./src/chart/SpeedoChartRenderer.js","webpack:///./src/chart/VennAsync3Calculator.js","webpack:///./src/chart/VennChartRenderer.js","webpack:///./src/chart/VennCircle.js","webpack:///./src/chart/VennCircleHelper.js","webpack:///./src/form/fields/chartfield/ChartField.js","webpack:///./src/form/fields/chartfield/ChartFieldAdapter.js","webpack:///./src/index.js","webpack:///./src/table/controls/ChartTableControl.js","webpack:///./src/table/controls/ChartTableControlAdapter.js","webpack:///./src/table/controls/ChartTableControlLayout.js","webpack:///./src/table/controls/ChartTableUserFilter.js","webpack:///./src/tile/ChartFieldTile.js","webpack:///./src/tile/ChartFieldTileAdapter.js","webpack:///external \"scout\"","webpack:///external \"Chart\"","webpack:///external \"ChartDataLabels\"","webpack:///external \"jQuery\""],"names":["AbstractChartRenderer","chart","session","rendering","rendered","animationDuration","firstOpaqueBackgroundColor","_validateChartData","_validate","chartData","data","chartValueGroups","length","i","chartValueGroup","values","config","options","autoColor","colorHexValue","cssClass","axes","requestAnimation","animation","duration","validate","_render","render","_renderCheckedItems","isDataUpdatable","_updateData","afterRemoveFunc","_removeAnimated","_remove","opts","AbstractSvgChartRenderer","chartBox","labelBox","clipId","ObjectFactory","get","createUniqueId","maskId","suppressLegendBox","$svg","$container","appendSVG","styles","getFirstOpaqueBackgroundColor","svgHeight","height","svgWidth","width","_initChartBox","_useFontSizeBig","addClass","FONT_SIZE_BIG","_useFontSizeMiddle","FONT_SIZE_MIDDLE","_useFontSizeSmall","FONT_SIZE_SMALL","_useFontSizeSmallest","FONT_SIZE_SMALLEST","isAttached","_renderInternal","chartAnimationStopping","children","stop","remove","xIndex","datasetIndex","dataIndex","text","legendLabelClass","$label","attr","textBounds","getBBox","e","x1","y1","x2","y2","lineClass","$line","animateSVG","x","y","label","labelClass","drawBackground","$background","xOffset","yOffset","mX","mY","animationFunc","step","now","fx","bind","$","Chart","DEFAULT_ANIMATION_DURATION","complete","removeAttr","$clip","id","$mask","find","each","attrXLINK","legendPositions","className","drawBackgroundBox","legend","detachFunc","attachFunc","removeFunc","tooltips","enabled","padding","backgroundWidth","lineHeight","backgroundHeight","positions","$legend","lengthLegend","horizontalSpace","h","Array","isArray","posIndex","yPos","v","_renderLineLabel","strings","truncateText","_measureText","Math","max","getComputedTextLength","push","autoPosition","posFunc","call","css","forEach","index","add","line","wires","_renderLine","$wire","detach","append","$field","chartRenderer","checkedItems","_updateChartTimeoutId","_updateChartOpts","updatedOnce","model","setConfig","$parent","appendDiv","htmlComp","HtmlComponent","install","setLayout","ChartLayout","_renderClickable","_renderCheckable","_renderChartType","_renderColorScheme","updateChart","debounce","DEFAULT_DEBOUNCE_TIMEOUT","setProperty","setCheckedItems","onlyUpdateData","defaultConfig","type","Type","PIE","colorScheme","colorSchemes","ColorSchemeId","DEFAULT","transparent","maxSegments","adjustGridMaxMin","clickable","checkable","display","position","Position","RIGHT","plugins","datalabels","extend","ensureColorScheme","objects","equalsRecursive","oldConfigWithNewData","_setProperty","_renderConfig","removeClass","_updateChartRenderer","arrays","ensure","_filterCheckedItems","datasetLengths","datasets","dataset","filteredCheckedItems","filter","item","renderCheckedItems","toggleClass","toggleColorSchemeClasses","clearTimeout","updateChartImplFn","updateChartImpl","doDebounce","setTimeout","updateData","shouldAnimateRemoveOnUpdate","removing","trigger","FULFILLMENT","FulfillmentChartRenderer","SPEEDO","SpeedoChartRenderer","SALESFUNNEL","SalesfunnelChartRenderer","VENN","VennChartRenderer","BAR","BAR_HORIZONTAL","LINE","COMBO_BAR_LINE","DOUGHNUT","POLAR_AREA","RADAR","BUBBLE","ChartJsRenderer","_resolveChartRenderer","event","clickedItem","checkedItem","Widget","TOP","BOTTOM","LEFT","CENTER","ChartAdapter","_send","_onWidgetValueClick","ModelAdapter","ChartJs","defaults","global","maintainAspectRatio","labels","usePointStyle","boxWidth","elements","tension","fill","borderWidth","point","radius","hitRadius","hoverRadius","hoverBorderWidth","arc","rectangle","borderSkipped","horizontalBar","cornerRadius","xPadding","yPadding","titleSpacing","titleMarginBottom","bodySpacing","chartJsGlobalsInitialized","chartJs","onlyIntegers","minSpaceBetweenYTicks","minSpaceBetweenXTicks","maxXAxesTicksHeigth","numSupportedColors","colorSchemeCssClass","minRadialChartDatalabelSpace","_tooltipTitle","_formatTooltipTitle","_tooltipLabel","_formatTooltipLabel","_tooltipLabelColor","_computeTooltipLabelColor","_labelFormatter","_formatLabel","_xLabelFormatter","_formatXLabel","_yLabelFormatter","_formatYLabel","_xAxisFitter","_fitXAxis","_yAxisFitter","_fitYAxis","_radialChartDatalabelsDisplayHandler","_displayDatalabelsOnRadialChart","_radialChartDatalabelsFormatter","_formatDatalabelsOnRadialChart","_datalabelsFormatter","_formatDatalabels","_datalabelBackgroundColorHandler","_getBackgroundColorOfDataset","_legendLabelGenerator","_generateLegendLabels","resetDatasetAfterHover","_clickHandler","_onClick","_hoverHandler","_onHover","_pointerHoverHandler","_onHoverPointer","legendHoverDatasets","_legendClickHandler","_onLegendClick","_legendHoverHandler","_onLegendHover","_legendPointerHoverHandler","_onLegendHoverPointer","_legendLeaveHandler","_onLegendLeave","_legendPointerLeaveHandler","_onLegendLeavePointer","_resizeHandler","_onResize","chartDataValid","scout","isOneOf","chartConfigDataValid","$canvas","appendElement","defaultFontFamily","_adjustConfig","_renderChart","animated","destroy","getContext","_adjustSize","chartArea","update","hiddenDataIndices","applyHiddenDatasetIndices","targetData","sourceData","transferProperty","source","target","property","setToUndefined","undefined","splice","min","targetLength","sourceLength","meta","getDatasetMeta","dataMeta","idx","hidden","targetDataset","sourceDataset","init","map","elem","_adjustColors","_checkItems","transferArrayValues","indices","changed","isNaN","checkedIndices","uncheckedIndices","removeAll","backgroundColor","checkedBackgroundColor","hoverBackgroundColor","checkedHoverBackgroundColor","pointBackgroundColor","checkedPointBackgroundColor","pointHoverBackgroundColor","checkedPointHoverBackgroundColor","pointRadius","checkedPointRadius","uncheckedBackgroundColor","uncheckedHoverBackgroundColor","uncheckedPointBackgroundColor","uncheckedPointHoverBackgroundColor","uncheckedPointRadius","_adjustType","_computeDatasets","_adjustData","_adjustTooltip","_adjustGrid","_adjustPlugins","_adjustClickHandler","_adjustResizeHandler","scaleLabelByTypeMap","scales","setLabelMap","identifier","labelMap","isEmptyObject","_computeLabelMap","groupName","axis","_adjustBarBorderWidth","_adjustMaxSegments","_adjustBubbleRadii","_adjustOnlyIntegers","newData","slice","reduce","newLabels","maxSegmentsExceeded","otherSegmentClickable","r","z","pow","sqrt","every","numbers","isInteger","hover","mode","callbacks","title","labelColor","tooltipItems","ctx","tooltipItem","defaultGlobal","defaultTypeTooltips","defaultGlobalTooltips","reformatLabels","xAxis","xAxes","yAxis","yAxes","xAxisLabel","scaleLabel","labelString","yAxisLabel","ARROW_LEFT_RIGHT","ARROW_UP_DOWN","xTickLabel","ticks","callback","xLabel","yTickLabel","yLabel","defaultTypeTooltipTitle","defaultTooltipTitle","cssWidth","measureText","oldFont","font","titleFontStyle","defaultFontStyle","titleFontSize","defaultFontSize","titleFontFamily","result","titleLine","value","defaultTypeTooltipLabel","defaultTooltipLabel","colorRectSize","displayColors","bodyFontSize","tooltipBackgroundColor","legendColor","borderColor","datasetBackgroundColor","_adjustColorOpacity","defaultTypeTooltipLabelColor","defaultTooltipLabelColor","_adjustScale","_adjustScales","scale","angleLines","gridLines","borderDash","beginAtZero","pointLabels","fontSize","_adjustXAxes","_adjustYAxes","offset","drawBorder","drawTicks","zeroLineBorderDash","afterCalculateTickRotation","afterFit","_adjustPluginsDatalabels","formatter","borderRadius","handleFormatter","context","_formatLabelMap","_getNumberFormatter","numberFormatter","_getXLabelMap","_getYLabelMap","_getLabelMap","_formatNumberLabel","abs","abbreviation","abbreviations","locale","decimalFormat","format","sign","labelRotation","maxHeight","defaultTicks","maxRotation","chartAreaHeight","top","bottom","maxLabelLength","sin","PI","longestLabelWidth","_ticks","tick","_labelSizes","tickMarkLength","maxWidth","_model","midRadius","outerRadius","innerRadius","angle","endAngle","startAngle","radius1","diameter1","diameter2","sum","_computeSumOfVisibleElements","roundingError","roundedResults","roundedResult","round","_adjustColorSchemeCssClass","_adjustDatasetColors","_adjustLegendColors","_adjustTooltipColors","_adjustScaleColors","_adjustScalesColors","_adjustPluginColors","getCssClasses","join","multipleColorsPerDataset","colors","backgroundColors","borderColors","hoverBackgroundColors","hoverBorderColors","checkedBackgroundColors","checkedHoverBackgroundColors","legendColors","pointHoverColor","_computePointHoverColor","_computeDatasetColors","hoverBorderColor","datasetLength","_computeDatasetColorsAutoColor","_computeDatasetColorsChartValueGroups","_computeBorderColor","types","_computeBackgroundColor","_computeHoverBackgroundColor","_computeHoverBorderColor","_computeCheckedBackgroundColor","_computeCheckedHoverBackgroundColor","_computeLegendColor","additionalProperties","stroke","rgbColor","hexToRgb","adjustColor","opacity","darker","darkerColor","backgroundOpacity","hoverBackgroundOpacity","hoverBackgroundDarker","hoverBorderDarker","uncheckedBackgroundOpacity","uncheckedHoverBackgroundOpacity","checkedBackgroundOpacity","checkedBackgroundDarker","checkedHoverBackgroundOpacity","checkedHoverBackgroundDarker","datalabelColor","_computeDatalabelColor","color","indexOf","_adjustRgbColorOpacity","_adjustHexColorOpacity","rgba","rgb","alpha","red","green","blue","hexColor","fontColor","_computeLabelColor","generateLabels","defaultTypeGenerateLabels","defaultGenerateLabels","fillStyle","strokeStyle","_computeTooltipBackgroundColor","tooltipBorderColor","_computeTooltipBorderColor","multiKeyBackground","labelBackdropColor","_computeLabelBackdropColor","gridColor","_computeGridColor","backdropColor","axisLabelColor","_computeAxisLabelColor","zeroLineColor","_adjustPluginsDatalabelColors","onClick","onHover","onLeave","stopPropagation","items","_isMaxSegmentsExceeded","_index","itemIndex","_datasetIndex","clickObject","yIndex","Event","originalEvent","_onValueClick","defaultTypeLegendClick","defaultLegendClick","datasetType","_updateHoverStyle","updateHoverStyle","handleResize","onResize","size","_adjustBubbleSizes","_adjustGridMaxMin","maxMinR","_computeMaxMinValue","maxR","maxValue","minR","minValue","bubbleScalingFactor","bubbleRadiusOffset","sizeOfLargestBubble","bubble","minBubbleSize","right","left","floor","isNullOrUndefined","exact","boundRange","space","j","adjust","maxBoundary","minBoundary","_calculateBoundary","ceil","valuePerPixel","paddingValue","roundingFunctionPositive","roundingFunctionNegative","roundingFunction","changeValueSign","_calculateBoundaryPositive","p","log","LN10","maxXTicks","maxYTicks","yBoundaries","_computeYBoundaries","yBoundary","yBoundaryDiffType","_adjustScaleMaxMin","_adjustAxes","xBoundary","_computeXBoundaryBubble","boundary","_computeBoundaryBubble","_computeYBoundaryBubble","datasetsDiffType","yBoundaryRange","yBoundaryRangeDiffType","_adjustYAxisDiffType","yAxisDiffType","drawOnChartArea","yAxisType","yAxisDiffTypeType","yAxisTypeLabel","yAxisDiffTypeTypeLabel","yAxisScaleLabel","yAxisDiffTypeScaleLabel","yAxisID","maxTicks","maxMinValue","maxTicksLimit","stepSize","suggestedMax","suggestedMin","tooltipDelay","showTooltipDelay","resetTooltipDelay","pluginId","_notifyOthers","hook","args","descriptors","$plugins","ilen","descriptor","plugin","params","method","concat","apply","_drawTooltip","tooltip","draw","ChartJsTooltipDelay","_chartTooltipVisible","_chartTooltipShowTimeoutIds","_chartTooltipHideTimeoutIds","_active","tid","App","addListener","Device","supportsOnlyTouch","register","ready","AbstractLayout","animationTriggered","segmentSelectorForAnimation","fulfillment","startValue","total","fullR","_renderInnerCircle","_renderPercentage","arcClass","chartGroupCss","nvl","end","lastEnd","that","tweenInFunc","$this","start","pathSegment","pos","$arc","radius2","$transparentCircle","_renderCirclePath","percentage","on","_createClickObject","animate","tabIndex","_createAnimationObjectWithTabIndexRemoval","s","pathString","cos","$path","optProperty","tweenOut","promise","done","widthThresholdMedium","widthThresholdSmall","barDeltaPercentage","lastBarAdditionalPercentage","lastBarMinWidthPercentage","salesfunnel","normalized","calcConversionRate","chartConfig","bars","conversionRateWidth","_dynamicConversionRateWidth","dataAnalyzeResult","_analyzeData","paddingBetweenLabel","barHeight","barAreaHeight","barAreaWidth","maxLengthFirstValueRow","labelCount","maxLengthSecondValueRow","centerX","_renderBarsNormalized","_renderBarsAccordingToValues","_addClipping","barCount","startPointX","delta","minLastWidth","secondLastWidth","barLabel","widthBottom","yCoord","renderPolyOptions","xStart","yStart","rect","_renderPolygon","_renderLabel","_renderBarLabel","labelLineWidth","_renderLabelSeparatorLine","_renderConversionRate","_calcConversionRate","secondLabel","barIndexFromTop","labelOffset","labelIndex","_dynamicCssClass","desc","textBoundings","_renderWireLabels","$text","labelPositionFunc","labelWidth","labelHeight","_renderWireLegend","mouseIn","mouseOut","mouseenter","mouseleave","barWidth","conversionRate","ctrlY","labelRenderPointY","points","_calcPolygonPoints","$poly","expandFunc","expand","fxPos","xOffsetTop","xOffsetBottom","x3","y3","x4","y4","widthPerN","valueBefore","returnValue","valueGroups","valueGroup","shrink","small","speedo","greenAreaPosition","scaleWeight","my","parts","NUM_PARTS_GREEN_CENTER","NUM_PARTS_GREEN_EDGE","numSegmentsPerPart","$filledParts","numTotalSegments","numTotalGaps","segmentWidth","ARC_RANGE","SEGMENT_GAP","widthOfSegmentWithGap","valuePercentage","_limitValue","segmentToPointAt","valuePercentageRounded","_getPercentageValueOfSegment","_getPartForValue","_renderCirclePart","_renderPointer","_renderLegend","segmentIndexInPart","part","pointerRange","_calcSegmentPos","pointerPos","from","ARC_MIN","to","$pointer","_pathPointer","tweenIn","val","getAttribute","_updatePointer","_updatePartsFill","colorClass","_pathSegment","_getColorForPart","segPos","_renderSegment","minMaxLegendFontSize","labelYPos","labelMinMaxYPos","minLegendValue","_formatValue","legendValue","maxLegendValue","$minLegend","$maxLegend","TEN_THOUSAND","ONE_MILLION","ONE_THOUSAND","millions","RoundingMode","HALF_UP","ARC_MAX","segmentNum","pointerOuterR","pointerInnerR","VennAsync3Calculator","helper","venn1","venn2","venn3","u","w","uv","uw","vw","uvw","d12","d13","d23","maxD","distR","dStep","rStep","alphaStep","alphaBest","dBest","rBest","errorBest","cancelled","_next","_iteration","_end","r1","r2","r3","stepFactor","isInternetExplorer","d","minX","maxX","minY","maxY","stepX","stepY","a1","a2","a3","a12","a13","a23","a123","testX","testY","t1","t2","t3","aTotal","error","_error","a","venn","numberOfCircles","centerY","setLoading","parseFloat","vennCircleHelper","VennCircleHelper","$v1","_createCircle","vennNumber1","VennCircle","vennReal1","$v2","vennNumber2","vennReal2","$v3","vennNumber3","vennReal3","readyToDraw","_draw","_calc1","_calc2","_calc3","_cancelAsync3Calculator","loading","$loadingIndicator","v1","calcR","setLegend","addLabel","v2","real","b","ab","calcD","findBalance2","legendR","v3","c","ac","bc","abc","async3Calculator","findBalance3","cancel","showVenn","_updateVenn","_drawLabel","circleIndex","$circle","showReal","_show","legendH","legendV","dx","dy","toElement","relatedTarget","isCircle","hasClass","wasCircle","horizontal","vertical","midX","midY","count","factorMax","changeR","ret","ri","ra","q","ChartField","_addWidgetProperties","addContainer","addMandatoryIndicator","addStatus","addField","_removeField","checkCompletlyRendered","FormField","ChartFieldAdapter","FormFieldAdapter","self","window","ChartTableControl","tooltipText","chartAggregation","modifier","TableMatrix","NumberGroup","COUNT","chartType","oldChartType","chartColorScheme","$chartSelect","$xAxisSelect","$yAxisSelect","$dataSelect","dateGroup","_tableUpdatedHandler","_onTableUpdated","_tableColumnStructureChangedHandler","_onTableColumnStructureChanged","_chartValueClickedHandler","_onChartValueClick","table","create","parent","off","inheritAccessibility","parentEnabled","_hasColumns","selected","$contentContainer","denseClass","ChartTableControlLayout","_selectChartType","animateAVCSD","contentRendered","_drawChart","_chartTypeMap","$element","_renderChartGroup","groupId","chartGroup","siblings","selectOne","dateGroupIndex","DATE_GROUP_FLAG","_aggregationMap","_getAggregationCssClass","SUM","AVG","renderSvgIcon","enabledComputed","_onClickChartType","supportedChartTypes","_getSupportedChartTypes","_renderChartSelect","renderSvgIconBar","renderSvgIconStacked","renderSvgIconLine","renderSvgIconPie","renderSvgIconBubble","show","pathPoints","$target","currentTarget","setChartType","column","origModifier","isEnabled","isSelected","_nextDateModifier","_setChartGroup","_nextModifier","aggregation","_setChartAggregation","DateGroup","DATE","MONTH","WEEKDAY","YEAR","_renderChartAggregation","propertyName","_changeProperty","prop","charAt","toUpperCase","columns","columnCount","tmpColumn","headerHtmlEnabled","plainText","replace","_installScrollbars","_renderChartSelectContainer","_filterResetListener","_addListeners","_renderAxisSelectors","_initializeSelection","_renderChartParts","_chartGroup1Map","_chartGroup2Map","matrix","sort","axisCount","numberOfAxisItems","c1","content","$div","$yDiv","column1","DateColumn","_axisCount","MAX_AXIS_COUNT","_axisContentForColumn","makeDiv","_plainAxisText","setEnabled","chartGroup1","chartGroup2","icon","appendCssClass","_onClickChartGroup","installForEllipsis","clone","$bubbleSelect","countDesc","all","c2","column2","fakeNumberLabelCol2","NumberColumn","columnText","hasText","headerTooltipText","_onClickAggregation","$axisColumns","_setDefaultSelectionForGroup","$candidates","maxIndex","col","_getDefaultSelectedColumn","_getDefaultChartGroup","matchCounter","curColumn","_existsInAxisColumns","columnToSearch","eq","_renderChartGroup1","_renderChartGroup2","_hideChart","cube","_calculateValues","setVisible","iconClasses","_computeData","_adjustFont","_computeCheckedItems","deterministicKeys","tableData","addData","addAxis","axis2","isEmpty","isMatrixValid","calculate","_getDatasetLabel","segments","_computeBubbleData","_getXAxis","keyX","_handleIconLabel","getValue","deterministicKey","keyToDeterministicKey","_getYAxis","xValue","keyY","yValue","cubeValues","textIsIcon","icons","parseIconId","isFontIcon","split","iconCharacter","fontFamily","parseInt","_adjustLabels","_adjustClickable","_adjustBubble","_adjustPie","_isChartClickable","weight","anchor","align","clamp","margin","cssMarginTop","cssMarginBottom","layout","tableFilter","getFilter","ChartTableUserFilter","TYPE","filters","equals","collapsedIndices","containsAll","getFilters","pushAll","addFilter","removeFilterByKey","headerIconId","visibleColumns","_removeScrollbars","events","removeListener","_removeListeners","recomputeEnabled","element","uninstall","_uninstallScrollbars","mx","_tableUpdatedTimeOutId","_setChartGroup1","_setChartGroup2","removeContent","renderContent","TableControl","ChartTableControlAdapter","_addRemoteProperties","TableControlAdapter","control","scrollbars","filterType","columnIdX","columnIdY","columnX","columnById","axisGroupX","createFilter","axisGroup","columnY","axisGroupY","row","cellValueOrTextForCalculation","deterministicKeyX","normDeterministic","deterministicKeyY","TableUserFilter","ChartFieldTile","_chartConfigChangeHandler","_onChartConfigChange","_updateChartColorScheme","tileWidget","FormFieldTile","ChartFieldTileAdapter","FormFieldTileAdapter"],"mappings":"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","file":"eclipse-scout-chart.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/index.js\");\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {Chart} from '../index';\n\nexport default class AbstractChartRenderer {\n\n /**\n * @param {Chart} chart\n */\n constructor(chart) {\n\n /**\n * @property {Chart} chart\n */\n this.chart = chart;\n this.session = chart.session;\n this.rendering = false; // true while this.render() is executing\n this.rendered = false;\n this.animationDuration = 0; // set by render() and remove(), makes it unnecessary to carry an argument through all method calls\n\n this.firstOpaqueBackgroundColor = '';\n }\n\n validate() {\n if (!this._validateChartData()) {\n return false;\n }\n\n return this._validate();\n }\n\n _validateChartData() {\n let chartData = this.chart && this.chart.data;\n if (!chartData || !chartData.chartValueGroups || chartData.chartValueGroups.length === 0) {\n return false;\n }\n\n // check lengths\n let i, length = 0;\n for (i = 0; i < chartData.chartValueGroups.length; i++) {\n let chartValueGroup = chartData.chartValueGroups[i];\n if (!chartValueGroup.values) {\n return false;\n }\n // Length of all \"values\" arrays have to be equal\n if (i === 0) {\n length = chartValueGroup.values.length;\n } else {\n if (chartValueGroup.values.length !== length) {\n return false;\n }\n }\n // color should have been set.\n if (!this.chart.config.options.autoColor && !chartValueGroup.colorHexValue && !chartValueGroup.cssClass) {\n return false;\n }\n }\n for (i = 0; i < chartData.axes.length; i++) {\n if (chartData.axes[i].length !== length) {\n return false;\n }\n }\n\n return true;\n }\n\n _validate() {\n // Override in subclasses\n return true;\n }\n\n /**\n * @param requestAnimation\n * Whether animations should be used while rendering the chart. Note that his\n * property is ignored when chart.config.options.animation.duration is <code>0</code>!\n */\n render(requestAnimation) {\n this.animationDuration = requestAnimation ? this.chart.config.options.animation.duration : 0;\n if (!this.validate() || !this.chart.rendered) {\n return;\n }\n this.rendering = true;\n this._render();\n this.rendering = false;\n this.rendered = true;\n }\n\n _render() {\n // Override in subclasses\n }\n\n checkCompletlyRendered() {\n if (this.rendered || !this.chart.data) {\n return;\n }\n this.render();\n }\n\n renderCheckedItems() {\n if (this.rendered) {\n this._renderCheckedItems();\n }\n }\n\n _renderCheckedItems() {\n // nop\n }\n\n /**\n * @param requestAnimation\n * Whether animations should be used while updating the chart. Note that his\n * property is ignored when chart.config.options.animation.duration is <code>0</code>!\n */\n updateData(requestAnimation) {\n if (!this.rendered) {\n this.render(requestAnimation);\n return;\n }\n this.animationDuration = requestAnimation ? this.chart.config.options.animation.duration : 0;\n if (!this.validate() || !this.isDataUpdatable()) {\n return;\n }\n this._updateData();\n }\n\n _updateData() {\n // Override in subclasses\n }\n\n isDataUpdatable() {\n return false;\n }\n\n /**\n * @param requestAnimation\n * Whether animations should be used while removing the chart. Note that his\n * property is ignored when chart.config.options.animation.duration is <code>0</code>!\n */\n remove(requestAnimation, afterRemoveFunc) {\n this.animationDuration = requestAnimation && this.chart.config.options.animation.duration;\n if (this.animationDuration && this.rendered) {\n this._removeAnimated(afterRemoveFunc);\n } else {\n this._remove(afterRemoveFunc);\n }\n }\n\n _remove(afterRemoveFunc) {\n this.rendered = false;\n afterRemoveFunc && afterRemoveFunc();\n }\n\n _removeAnimated(afterRemoveFunc) {\n // Override in subclasses\n this._remove(afterRemoveFunc);\n }\n\n /**\n * Controls if the animation of the chart is shown when chart data has been updated.\n */\n shouldAnimateRemoveOnUpdate(opts) {\n return opts.requestAnimation;\n }\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {ObjectFactory, strings, styles} from '@eclipse-scout/core';\nimport $ from 'jquery';\nimport {Chart, AbstractChartRenderer} from '../index';\n\nexport default class AbstractSvgChartRenderer extends AbstractChartRenderer {\n\n constructor(chart) {\n super(chart);\n this.chartBox = {};\n this.labelBox = {};\n\n // Clipping and masking\n this.clipId = 'Clip-' + ObjectFactory.get().createUniqueId();\n this.maskId = 'Mask-' + ObjectFactory.get().createUniqueId();\n\n this.suppressLegendBox = false;\n }\n\n static FONT_SIZE_SMALLEST = 'smallestFont';\n static FONT_SIZE_SMALL = 'smallFont';\n static FONT_SIZE_MIDDLE = 'middleFont';\n static FONT_SIZE_BIG = 'bigFont';\n\n _render() {\n if (!this.$svg) {\n this.$svg = this.chart.$container.appendSVG('svg', 'chart-svg');\n }\n this.firstOpaqueBackgroundColor = styles.getFirstOpaqueBackgroundColor(this.$svg);\n this.svgHeight = this.$svg.height();\n this.svgWidth = this.$svg.width();\n // This works, because CSS specifies 100% width/height\n this.height = this.svgHeight;\n this.width = this.svgWidth;\n this._initChartBox();\n if (this._useFontSizeBig()) {\n this.$svg.addClass(AbstractSvgChartRenderer.FONT_SIZE_BIG);\n } else if (this._useFontSizeMiddle()) {\n this.$svg.addClass(AbstractSvgChartRenderer.FONT_SIZE_MIDDLE);\n } else if (this._useFontSizeSmall()) {\n this.$svg.addClass(AbstractSvgChartRenderer.FONT_SIZE_SMALL);\n } else if (this._useFontSizeSmallest()) {\n this.$svg.addClass(AbstractSvgChartRenderer.FONT_SIZE_SMALLEST);\n }\n if (!this.$svg.isAttached()) {\n // user navigated away. do not try to render->error\n return;\n }\n this._renderInternal();\n }\n\n _renderInternal() {\n // Override in subclasses\n }\n\n _useFontSizeBig() {\n return false;\n }\n\n _useFontSizeMiddle() {\n return false;\n }\n\n _useFontSizeSmall() {\n return false;\n }\n\n _useFontSizeSmallest() {\n return false;\n }\n\n remove(requestAnimation, afterRemoveFunc) {\n if (this.rendered && !this.chartAnimationStopping) {\n this.chartAnimationStopping = true;\n this.$svg.children().stop(true, false);\n this.chartAnimationStopping = false;\n }\n super.remove(requestAnimation, afterRemoveFunc);\n }\n\n _remove(afterRemoveFunc) {\n // this function is called directly from renderers after all removal animations are done\n // however, other animations may have been queued in the meantime (e.g. in case the chart was removed, then added (+animation queued), and then removed again)\n if (this.rendered) {\n this.$svg.children().stop(true, false);\n // need to check again, as stop() may have triggered a chart removal and this may not be rendered anymore\n if (this.rendered) {\n this.$svg.remove();\n this.$svg = null;\n }\n }\n this.rendered = false;\n afterRemoveFunc && afterRemoveFunc(this.chartAnimationStopping);\n }\n\n /**\n * For all parameters: use null when parameter is not used or set by a chart type.\n *\n * @param xIndex number\n * @param datasetIndex number\n */\n _createClickObject(xIndex, datasetIndex) {\n return {\n xIndex: xIndex,\n dataIndex: xIndex,\n datasetIndex: datasetIndex\n };\n }\n\n _measureText(text, legendLabelClass) {\n let $label = this.$svg.appendSVG('text', legendLabelClass)\n .attr('x', 0)\n .attr('y', 0)\n .attr('visibility', 'hidden')\n .text(text);\n let textBounds;\n try {\n // Firefox throws error when node is not in dom(already removed by navigating away). all other browser returns a boundingbox with 0\n textBounds = $label[0].getBBox();\n } catch (e) {\n return {\n height: 0,\n width: 0\n };\n }\n $label.remove();\n\n return textBounds;\n }\n\n _renderLine(x1, y1, x2, y2, lineClass) {\n let $line = this.$svg.appendSVG('line', lineClass)\n .attr('x1', x1).attr('y1', y1)\n .attr('x2', x2).attr('y2', y2);\n if (this.animationDuration) {\n $line\n .attr('opacity', 0)\n .animateSVG('opacity', 1, this.animationDuration, null, true);\n }\n return $line;\n }\n\n _renderLineLabel(x, y, label, labelClass, drawBackground) {\n let $label = this.$svg.appendSVG('text', labelClass ? labelClass : 'line-label')\n .attr('x', x).attr('y', y)\n .text(label);\n\n if (drawBackground) {\n $label.attr('mask', 'url(#' + this.maskId + ')');\n\n let $background = this.$svg.appendSVG('text', labelClass ? labelClass + ' background' : 'line-label-background')\n .attr('x', x).attr('y', y)\n .attr('clip-path', 'url(#' + this.clipId + ')')\n .text(label);\n\n $label.data('$background', $background);\n\n if (this.animationDuration) {\n $background\n .attr('opacity', 0)\n .animateSVG('opacity', 1, this.animationDuration, null, true);\n }\n }\n\n if (this.animationDuration) {\n $label\n .attr('opacity', 0)\n .animateSVG('opacity', 1, this.animationDuration, null, true);\n }\n return $label;\n }\n\n _initChartBox() {\n this.chartBox = {\n width: this.width,\n height: this.height,\n xOffset: 0,\n yOffset: 0,\n mX: function() {\n return this.xOffset + (this.width / 2);\n },\n mY: function() {\n return this.yOffset + (this.height / 2);\n }\n };\n }\n\n _createAnimationObjectWithTabIndexRemoval(animationFunc, duration) {\n return {\n step: function(now, fx) {\n try {\n animationFunc.bind(this)(now, fx);\n } catch (e) {\n // prevent logging thousands of exceptions (1 per animation step) by stopping and clearing the queue\n $(this).stop(true, false);\n throw e;\n }\n },\n duration: duration ? duration : Chart.DEFAULT_ANIMATION_DURATION,\n complete: function() {\n $(this).removeAttr('tabindex');\n }\n };\n }\n\n _addClipping(cssClass) {\n // add clip and mask paths for all relevant objects\n let $clip = this.$svg\n .appendSVG('clipPath');\n $clip[0].id = this.clipId;\n\n let $mask = this.$svg.appendSVG('mask');\n $mask.appendSVG('rect')\n .attr('x', 0)\n .attr('y', 0)\n .attr('width', '100%')\n .attr('height', '100%')\n .attr('fill', 'white');\n $mask[0].id = this.maskId;\n\n this.chart.$container.find('.' + cssClass).each(function(i) {\n this.id = 'ClipMask-' + ObjectFactory.get().createUniqueId();\n $clip.appendSVG('use').attrXLINK('href', '#' + this.id);\n $mask.appendSVG('use').attrXLINK('href', '#' + this.id);\n });\n }\n\n _renderWireLegend(text, legendPositions, className, drawBackgroundBox) {\n let legend = {\n detachFunc: () => {\n },\n attachFunc: () => {\n },\n removeFunc: () => {\n }\n };\n if (!this.chart.config.options.tooltips.enabled) {\n return legend;\n }\n let padding = 5,\n $background,\n backgroundWidth = 0,\n lineHeight = 17,\n backgroundHeight = lineHeight;\n\n if (drawBackgroundBox) {\n $background = this.$svg.appendSVG('rect', 'wire-legend-background-box')\n .attr('opacity', '1');\n }\n\n let positions = legendPositions;\n\n // draw and measure label\n\n let $legend,\n lengthLegend = 0,\n horizontalSpace = 0;\n if (positions.h === -1) {\n horizontalSpace = positions.x2 - 2 * padding;\n } else {\n horizontalSpace = this.width - positions.x2 - 2 * padding;\n }\n\n if (Array.isArray(text)) {\n for (let i = 0; i < text.length; i++) {\n let posIndex = text.length - i - 1;\n let yPos = positions.y2 + positions.v * padding - lineHeight * posIndex - padding * posIndex;\n let $line = this._renderLineLabel(positions.x2 + padding, yPos, strings.truncateText(text[i], horizontalSpace, this._measureText.bind(this)), '', drawBackgroundBox);\n $line.addClass(className);\n lengthLegend = Math.max(lengthLegend, $line[0].getComputedTextLength());\n if (i === 0) {\n $legend = $line;\n } else {\n if ($legend.data('lines')) {\n $legend.data('lines').push($line);\n } else {\n $legend.data('lines', [$line]);\n }\n }\n }\n } else {\n $legend = this._renderLineLabel(positions.x2 + padding, positions.y2 + positions.v * padding, strings.truncateText(text, horizontalSpace, this._measureText.bind(this)), '', drawBackgroundBox);\n $legend.addClass(className);\n lengthLegend = $legend[0].getComputedTextLength();\n }\n backgroundWidth = lengthLegend + 2 * padding;\n\n if (legendPositions.autoPosition) {\n positions = legendPositions.posFunc.call(this, backgroundWidth, backgroundHeight);\n // adjust legend\n $legend.attr('x', positions.x2 + padding);\n $legend.attr('y', positions.y2 + positions.v * padding);\n }\n\n // fix layout depending on orientation of legend\n if (positions.h === -1) {\n $legend.attr('x', positions.x2 - padding - lengthLegend);\n $legend.css('text-anchor', 'left');\n if ($legend.data('lines')) {\n $legend.data('lines').forEach($line => {\n $line.attr('x', positions.x2 - padding - lengthLegend);\n $line.css('text-anchor', 'left');\n });\n }\n } else {\n $legend.attr('x', positions.x2 + padding);\n $legend.css('text-anchor', 'right');\n if ($legend.data('lines')) {\n $legend.data('lines').forEach($line => {\n $line.attr('x', positions.x2 + padding);\n $line.css('text-anchor', 'right');\n });\n }\n }\n if (positions.v === 1) {\n if ($legend.data('lines')) {\n $legend.data('lines').forEach(($line, i) => {\n $line.attr('y', positions.x2 - padding - lengthLegend);\n let index = 1 + i;\n $line.attr('y', positions.y2 + positions.v * padding + lineHeight * index + padding * (index + 1));\n });\n }\n $legend.attr('dy', '0.7em');\n } else {\n if ($legend.data('lines')) {\n let index = $legend.data('lines').length;\n $legend.attr('y', positions.y2 + positions.v * padding - lineHeight * index - padding * index);\n $legend.data('lines').forEach(($line, i) => {\n index = $legend.data('lines').length - 1 - i;\n $line.attr('y', positions.y2 + positions.v * padding - lineHeight * index - padding * index);\n });\n }\n }\n\n // align background text\n $legend.add($legend.data('lines')).each((i, line) => {\n let $line = $(line),\n $background = $line.data('$background');\n if ($background) {\n $background.attr('x', $line.attr('x'));\n $background.attr('y', $line.attr('y'));\n $background.css('text-anchor', $line.css('text-anchor'));\n $background.attr('dy', $line.attr('dy'));\n }\n });\n\n // draw lines, if wished\n let wires = [];\n if (positions.x1 > 0 && positions.y1 > 0) {\n wires.push(this._renderLine(positions.x1, positions.y1, positions.x2, positions.y2, 'label-line'));\n wires.push(this._renderLine(positions.x2, positions.y2, positions.x2 + positions.h * (lengthLegend + 2 * padding), positions.y2, 'label-line'));\n }\n $legend.data('wires', wires);\n\n let $svg = this.$svg;\n legend.detachFunc = () => {\n $legend.data('wires').forEach($wire => {\n $wire.detach();\n });\n if ($legend.data('lines')) {\n $legend.data('lines').forEach($line => {\n if ($line.data('$background')) {\n $svg.append($line.data('$background'));\n }\n $line.detach();\n });\n }\n if ($legend.data('$background')) {\n $legend.data('$background').remove();\n }\n $legend.detach();\n };\n\n legend.attachFunc = () => {\n $svg.append($legend);\n if ($legend.data('$background')) {\n $svg.append($legend.data('$background'));\n }\n $svg.append($legend.data('wires'));\n if ($legend.data('lines')) {\n $legend.data('lines').forEach($line => {\n $svg.append($line);\n if ($line.data('$background')) {\n $svg.append($line.data('$background'));\n }\n });\n }\n };\n\n legend.removeFunc = () => {\n $legend.data('wires').forEach($wire => {\n $wire.remove();\n });\n if ($legend.data('lines')) {\n $legend.data('lines').forEach($line => {\n if ($line.data('$background')) {\n $line.data('$background').remove();\n }\n $line().remove();\n });\n }\n if ($legend.data('$background')) {\n $legend.data('$background').remove();\n }\n $legend.remove();\n };\n legend.$field = $legend;\n return legend;\n }\n}\n","/*\n * Copyright (c) 2010-2021 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {ChartJsRenderer, ChartLayout, FulfillmentChartRenderer, SalesfunnelChartRenderer, SpeedoChartRenderer, VennChartRenderer} from '../index';\nimport {arrays, colorSchemes, HtmlComponent, objects, Widget} from '@eclipse-scout/core';\n\n/**\n * @typedef ChartValueGroup\n * @property {string} type\n */\n\n/**\n * @typedef ClickObject\n * @property {number} datasetIndex\n * @property {number} dataIndex\n * @property {number} [xIndex]\n * @property {number} [yIndex]\n */\n\nexport default class Chart extends Widget {\n\n constructor() {\n super();\n\n this.$container = null;\n this.chartRenderer = null;\n\n /**\n * @type {object}\n * @property {ChartValueGroup[]} chartValueGroups\n */\n this.data = null;\n this.config = null;\n /**\n * @type {ClickObject[]}\n */\n this.checkedItems = [];\n\n this._updateChartTimeoutId = null;\n this._updateChartOpts = null;\n this.updatedOnce = false;\n }\n\n static Type = {\n PIE: 'pie',\n LINE: 'line',\n BAR: 'bar',\n BAR_HORIZONTAL: 'horizontalBar',\n COMBO_BAR_LINE: 'comboBarLine',\n FULFILLMENT: 'fulfillment',\n SPEEDO: 'speedo',\n SALESFUNNEL: 'salesfunnel',\n VENN: 'venn',\n DOUGHNUT: 'doughnut',\n POLAR_AREA: 'polarArea',\n RADAR: 'radar',\n BUBBLE: 'bubble'\n };\n\n static Position = {\n TOP: 'top',\n BOTTOM: 'bottom',\n LEFT: 'left',\n RIGHT: 'right',\n CENTER: 'center'\n };\n\n static DEFAULT_ANIMATION_DURATION = 600; // ms\n static DEFAULT_DEBOUNCE_TIMEOUT = 100; // ms\n\n _init(model) {\n super._init(model);\n this.setConfig(this.config);\n }\n\n _render() {\n this.$container = this.$parent.appendDiv('chart');\n\n this.htmlComp = HtmlComponent.install(this.$container, this.session);\n this.htmlComp.setLayout(new ChartLayout(this));\n\n // !!! Do _not_ update the chart here, because usually the container size\n // !!! is not correct anyways during the render phase. The ChartLayout\n // !!! will eventually call updateChart() when the layout is validated.\n }\n\n _renderProperties() {\n super._renderProperties();\n this._renderClickable();\n this._renderCheckable();\n this._renderChartType();\n this._renderColorScheme();\n this.updateChart({\n requestAnimation: true,\n debounce: Chart.DEFAULT_DEBOUNCE_TIMEOUT\n });\n }\n\n _remove() {\n if (this.chartRenderer) {\n this.chartRenderer.remove(false);\n }\n this.$container.remove();\n this.$container = null;\n }\n\n setData(data) {\n this.setProperty('data', data);\n this.setCheckedItems(this.checkedItems);\n }\n\n _renderData() {\n this.updateChart({\n requestAnimation: true,\n debounce: Chart.DEFAULT_DEBOUNCE_TIMEOUT,\n onlyUpdateData: true\n });\n }\n\n setConfig(config) {\n let defaultConfig = {\n type: Chart.Type.PIE,\n options: {\n autoColor: true,\n colorScheme: colorSchemes.ColorSchemeId.DEFAULT,\n transparent: false,\n maxSegments: 5,\n adjustGridMaxMin: true,\n clickable: false,\n checkable: false,\n animation: {\n duration: Chart.DEFAULT_ANIMATION_DURATION\n },\n tooltips: {\n enabled: true\n },\n legend: {\n display: true,\n clickable: false,\n position: Chart.Position.RIGHT\n },\n plugins: {\n datalabels: {\n display: false\n }\n }\n }\n };\n config = $.extend(true, {}, defaultConfig, config);\n config.options.colorScheme = colorSchemes.ensureColorScheme(config.options.colorScheme);\n if (objects.equalsRecursive(this.config, config)) {\n return;\n }\n\n // check if only data has changed\n let oldConfigWithNewData = $.extend(true, {}, this.config);\n oldConfigWithNewData.data = config.data;\n if (objects.equalsRecursive(oldConfigWithNewData, config)) {\n this._setProperty('config', config);\n if (this.rendered) {\n this._renderConfig(true);\n }\n this.setCheckedItems(this.checkedItems);\n return;\n }\n\n if (this.rendered && this.config && this.config.type) {\n this.$container.removeClass(this.config.type + '-chart');\n }\n this.setProperty('config', config);\n this.setCheckedItems(this.checkedItems);\n this._updateChartRenderer();\n }\n\n _renderConfig(onlyUpdateData) {\n this._renderClickable();\n this._renderCheckable();\n this._renderChartType();\n this._renderColorScheme();\n this.updateChart({\n requestAnimation: true,\n debounce: Chart.DEFAULT_DEBOUNCE_TIMEOUT,\n onlyUpdateData: onlyUpdateData\n });\n }\n\n setCheckedItems(checkedItems) {\n this.setProperty('checkedItems', arrays.ensure(this._filterCheckedItems(checkedItems)));\n }\n\n _filterCheckedItems(checkedItems) {\n if (!Array.isArray(checkedItems)) {\n return checkedItems;\n }\n let datasetLengths = [];\n if (this.data && this.data.chartValueGroups) {\n this.data.chartValueGroups.forEach(chartValueGroup => datasetLengths.push(chartValueGroup.values.length));\n } else if (this.config && this.config.data) {\n this.config.data.datasets.forEach(dataset => datasetLengths.push(dataset.data.length));\n }\n let filteredCheckedItems = checkedItems.filter(item => datasetLengths[item.datasetIndex] && item.dataIndex < datasetLengths[item.datasetIndex]);\n if (filteredCheckedItems.length < checkedItems.length) {\n return filteredCheckedItems;\n }\n return checkedItems;\n }\n\n _renderCheckedItems() {\n if (this.chartRenderer) {\n this.chartRenderer.renderCheckedItems();\n }\n }\n\n /**\n * @override\n */\n _renderEnabled() {\n this.updateChart();\n }\n\n _renderClickable() {\n this.$container.toggleClass('clickable', this.config.options.clickable);\n }\n\n _renderCheckable() {\n this.$container.toggleClass('checkable', this.config.options.checkable);\n }\n\n _renderChartType() {\n this.$container.addClass(this.config.type + '-chart');\n }\n\n _renderColorScheme() {\n colorSchemes.toggleColorSchemeClasses(this.$container, this.config.options.colorScheme);\n }\n\n /**\n * @param opts\n * [requestAnimation] default false\n * [debounce] default 0\n * [onlyUpdateData] default false\n */\n updateChart(opts) {\n opts = opts || {};\n\n // Cancel previously scheduled update and merge opts\n if (this._updateChartTimeoutId) {\n clearTimeout(this._updateChartTimeoutId);\n if (this._updateChartOpts) {\n // Inherit 'true' values from previously scheduled updates\n opts.requestAnimation = opts.requestAnimation || this._updateChartOpts.requestAnimation;\n }\n this._updateChartTimeoutId = null;\n this._updateChartOpts = null;\n }\n\n let updateChartImplFn = updateChartImpl.bind(this);\n let doDebounce = (opts.debounce === true || typeof opts.debounce === 'number');\n if (doDebounce) {\n this._updateChartOpts = opts;\n if (typeof opts.debounce === 'number') {\n this._updateChartTimeoutId = setTimeout(updateChartImplFn, opts.debounce);\n } else {\n this._updateChartTimeoutId = setTimeout(updateChartImplFn);\n }\n } else {\n updateChartImplFn();\n }\n\n // ---- Helper functions -----\n\n function updateChartImpl() {\n this._updateChartTimeoutId = null;\n this._updateChartOpts = null;\n if (opts.onlyUpdateData && this.chartRenderer && this.chartRenderer.isDataUpdatable()) {\n this.chartRenderer.updateData(opts.requestAnimation);\n } else if (this.chartRenderer) {\n this.chartRenderer.remove(this.chartRenderer.shouldAnimateRemoveOnUpdate(opts), chartAnimationStopping => {\n if (this.removing || chartAnimationStopping) {\n // prevent exceptions trying to render after navigated away, and do not update/render while a running animation is being stopped\n return;\n }\n this.chartRenderer.render(opts.requestAnimation);\n this.trigger('chartRender');\n });\n }\n this.updatedOnce = true;\n }\n }\n\n _resolveChartRenderer() {\n switch (this.config.type) {\n case Chart.Type.FULFILLMENT:\n return new FulfillmentChartRenderer(this);\n case Chart.Type.SPEEDO:\n return new SpeedoChartRenderer(this);\n case Chart.Type.SALESFUNNEL:\n return new SalesfunnelChartRenderer(this);\n case Chart.Type.VENN:\n return new VennChartRenderer(this);\n case Chart.Type.BAR:\n case Chart.Type.BAR_HORIZONTAL:\n case Chart.Type.LINE:\n case Chart.Type.COMBO_BAR_LINE:\n case Chart.Type.PIE:\n case Chart.Type.DOUGHNUT:\n case Chart.Type.POLAR_AREA:\n case Chart.Type.RADAR:\n case Chart.Type.BUBBLE:\n return new ChartJsRenderer(this);\n }\n return null;\n }\n\n _updateChartRenderer() {\n this.chartRenderer && this.chartRenderer.remove();\n this.setProperty('chartRenderer', this._resolveChartRenderer());\n }\n\n _onValueClick(event) {\n if (this.config.options.checkable) {\n let checkedItems = [...this.checkedItems],\n clickedItem = event.data,\n checkedItem = checkedItems.filter(item => item.datasetIndex === clickedItem.datasetIndex && item.dataIndex === clickedItem.dataIndex)[0];\n if (checkedItem) {\n arrays.remove(checkedItems, checkedItem);\n } else {\n checkedItems.push(clickedItem);\n }\n this.setCheckedItems(checkedItems);\n }\n this.trigger('valueClick', event);\n }\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {ModelAdapter} from '@eclipse-scout/core';\n\nexport default class ChartAdapter extends ModelAdapter {\n\n constructor() {\n super();\n }\n\n _onWidgetValueClick(event) {\n this._send('valueClick', event.data);\n }\n\n _onWidgetEvent(event) {\n if (event.type === 'valueClick') {\n this._onWidgetValueClick(event);\n } else {\n super._onWidgetEvent(event);\n }\n }\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {AbstractChartRenderer, Chart} from '../index';\nimport ChartJs from 'chart.js';\nimport {arrays, colorSchemes, Event, numbers, objects, strings, styles} from '@eclipse-scout/core';\n// noinspection ES6UnusedImports\nimport chartjs_plugin_datalabels from 'chartjs-plugin-datalabels';\n// noinspection ES6UnusedImports\nimport ChartJsTooltipDelay from './ChartJsTooltipDelay';\n\n/**\n * @typedef ChartJs\n * @property {object} [defaults]\n * @property {object} [defaults.global]\n * @property {object} [defaults.global.legend]\n * @property {object} [defaults.global.legend.labels]\n * @property {object} [defaults.global.elements]\n * @property {object} [defaults.global.elements.line]\n * @property {object} [defaults.global.elements.point]\n * @property {object} [defaults.global.elements.arc]\n * @property {object} [defaults.global.elements.rectangle]\n * @property {object} [defaults.global.tooltips]\n */\nChartJs.defaults.global.maintainAspectRatio = false;\nChartJs.defaults.global.legend.labels.usePointStyle = true;\nChartJs.defaults.global.legend.labels.boxWidth = 7;\nChartJs.defaults.global.elements.line.tension = 0;\nChartJs.defaults.global.elements.line.fill = false;\nChartJs.defaults.global.elements.line.borderWidth = 2;\nChartJs.defaults.global.elements.point.radius = 0;\nChartJs.defaults.global.elements.point.hitRadius = 10;\nChartJs.defaults.global.elements.point.hoverRadius = 5;\nChartJs.defaults.global.elements.point.hoverBorderWidth = 2;\nChartJs.defaults.global.elements.arc.borderWidth = 1;\nChartJs.defaults.global.elements.rectangle.borderWidth = 1;\nChartJs.defaults.global.elements.rectangle.borderSkipped = '';\nChartJs.defaults.horizontalBar.elements.rectangle.borderSkipped = '';\nChartJs.defaults.global.tooltips.borderWidth = 1;\nChartJs.defaults.global.tooltips.cornerRadius = 4;\nChartJs.defaults.global.tooltips.xPadding = 8;\nChartJs.defaults.global.tooltips.yPadding = 8;\nChartJs.defaults.global.tooltips.titleSpacing = 4;\nChartJs.defaults.global.tooltips.titleMarginBottom = 8;\nChartJs.defaults.global.tooltips.bodySpacing = 4;\n\nlet chartJsGlobalsInitialized = false;\n\n/**\n * @typedef Dataset\n * @property {array|string} [pointBackgroundColor]\n * @property {array|string} [pointHoverBackgroundColor]\n * @property {array|number} [pointRadius]\n *\n * @property {array|string} [uncheckedBackgroundColor]\n * @property {array|string} [uncheckedHoverBackgroundColor]\n * @property {array|string} [uncheckedPointBackgroundColor]\n * @property {array|string} [uncheckedPointHoverBackgroundColor]\n * @property {array|number} [uncheckedPointRadius]\n *\n * @property {array|string} [checkedBackgroundColor]\n * @property {array|string} [checkedHoverBackgroundColor]\n * @property {array|string} [checkedPointBackgroundColor]\n * @property {array|string} [checkedPointHoverBackgroundColor]\n * @property {array|number} [checkedPointRadius]\n *\n * @property {array|string} [legendColor]\n */\n\nexport default class ChartJsRenderer extends AbstractChartRenderer {\n\n static ARROW_LEFT_RIGHT = '\\u2194';\n static ARROW_UP_DOWN = '\\u2195';\n\n constructor(chart) {\n super(chart);\n this.chartJs = null;\n this.onlyIntegers = true;\n this.minSpaceBetweenYTicks = 35;\n this.minSpaceBetweenXTicks = 150;\n this.maxXAxesTicksHeigth = 75;\n this.numSupportedColors = 6;\n this.colorSchemeCssClass = '';\n this.minRadialChartDatalabelSpace = 25;\n\n this._tooltipTitle = this._formatTooltipTitle.bind(this);\n this._tooltipLabel = this._formatTooltipLabel.bind(this);\n this._tooltipLabelColor = this._computeTooltipLabelColor.bind(this);\n\n this._labelFormatter = this._formatLabel.bind(this);\n this._xLabelFormatter = this._formatXLabel.bind(this);\n this._yLabelFormatter = this._formatYLabel.bind(this);\n\n this._xAxisFitter = this._fitXAxis.bind(this);\n this._yAxisFitter = this._fitYAxis.bind(this);\n\n this._radialChartDatalabelsDisplayHandler = this._displayDatalabelsOnRadialChart.bind(this);\n this._radialChartDatalabelsFormatter = this._formatDatalabelsOnRadialChart.bind(this);\n this._datalabelsFormatter = this._formatDatalabels.bind(this);\n this._datalabelBackgroundColorHandler = this._getBackgroundColorOfDataset.bind(this);\n\n this._legendLabelGenerator = this._generateLegendLabels.bind(this);\n\n this.resetDatasetAfterHover = false;\n\n this._clickHandler = this._onClick.bind(this);\n this._hoverHandler = this._onHover.bind(this);\n this._pointerHoverHandler = this._onHoverPointer.bind(this);\n\n this.legendHoverDatasets = [];\n\n this._legendClickHandler = this._onLegendClick.bind(this);\n this._legendHoverHandler = this._onLegendHover.bind(this);\n this._legendPointerHoverHandler = this._onLegendHoverPointer.bind(this);\n this._legendLeaveHandler = this._onLegendLeave.bind(this);\n this._legendPointerLeaveHandler = this._onLegendLeavePointer.bind(this);\n\n this._resizeHandler = this._onResize.bind(this);\n }\n\n _validateChartData() {\n let chartDataValid = true;\n let chartData = this.chart && this.chart.data;\n\n if (!chartData || !chartData.chartValueGroups || chartData.chartValueGroups.length === 0 || !chartData.axes) {\n chartDataValid = false;\n }\n\n if (chartDataValid && scout.isOneOf(this.chart.config.type, Chart.Type.POLAR_AREA, Chart.Type.RADAR)) {\n // check lengths\n let i, length = 0;\n for (i = 0; i < chartData.chartValueGroups.length; i++) {\n let chartValueGroup = chartData.chartValueGroups[i];\n if (!chartValueGroup.values) {\n chartDataValid = false;\n }\n // Length of all \"values\" arrays have to be equal\n if (i === 0) {\n length = chartValueGroup.values.length;\n } else {\n if (chartValueGroup.values.length !== length) {\n chartDataValid = false;\n }\n }\n }\n for (i = 0; i < chartData.axes.length; i++) {\n if (chartData.axes[i].length !== length) {\n chartDataValid = false;\n }\n }\n }\n\n if (chartDataValid) {\n return true;\n }\n\n let chartConfigDataValid = true;\n let config = this.chart && this.chart.config;\n\n if (!config || !config.data || !config.data.datasets || config.data.datasets.length === 0) {\n chartConfigDataValid = false;\n }\n\n if (chartConfigDataValid && scout.isOneOf(this.chart.config.type, Chart.Type.POLAR_AREA, Chart.Type.RADAR)) {\n // check lengths\n let i, length = 0;\n for (i = 0; i < config.data.datasets.length; i++) {\n let dataset = config.data.datasets[i];\n if (!dataset.data) {\n chartConfigDataValid = false;\n }\n // Length of all \"data\" arrays have to be equal\n if (i === 0) {\n length = dataset.data.length;\n } else {\n if (dataset.data.length !== length) {\n chartConfigDataValid = false;\n }\n }\n }\n }\n\n return chartConfigDataValid;\n }\n\n _render() {\n if (!this.$canvas) {\n this.$canvas = this.chart.$container.appendElement('<canvas>');\n }\n this.firstOpaqueBackgroundColor = styles.getFirstOpaqueBackgroundColor(this.$canvas);\n if (!chartJsGlobalsInitialized) {\n ChartJs.defaults.global.defaultFontFamily = this.$canvas.css('font-family');\n chartJsGlobalsInitialized = true;\n }\n /**\n * @property {number} options.bubble.sizeOfLargestBubble\n * @property {object} options.numberFormatter\n * @property {number} options.tooltips.titleFontFamily\n * @property {object} options.scales.scaleLabelByTypeMap\n * @property {object} options.scales.xLabelMap\n * @property {object} options.scales.yLabelMap\n */\n let config = $.extend(true, {}, this.chart.config);\n this._adjustConfig(config);\n this._renderChart(config, true);\n }\n\n _renderChart(config, animated) {\n if (this.chartJs) {\n this.chartJs.destroy();\n }\n config = $.extend(true, {}, config, {\n options: {\n animation: {}\n }\n }, config);\n config.options.animation.duration = animated ? this.animationDuration : 0;\n\n /**\n * @type {Chart}\n * @property {object} config\n * @property {object} chartArea\n */\n this.chartJs = new ChartJs(this.$canvas[0].getContext('2d'), config);\n this._adjustSize(this.chartJs.config, this.chartJs.chartArea);\n this.chartJs.update();\n }\n\n _updateData() {\n if (!this.chartJs) {\n return;\n }\n let config = $.extend(true, {}, this.chart.config);\n this._adjustConfig(config);\n\n let hiddenDataIndices = [],\n applyHiddenDatasetIndices = [];\n\n let targetData = this.chartJs.config.data,\n sourceData = config.data;\n\n if (targetData && sourceData) {\n // Transfer property from source object to target object:\n // 1. If the property is not set on the target object, copy it from source.\n // 2. If the property is not set on the source object, set it to undefined if setToUndefined = true. Otherwise empty the array if it is an array property or set it to undefined.\n // 3. If the property is not an array on the source or the target object, copy the property from the source to the target object.\n // 4. If the property is an array on both objects, do not update the array, but transfer the elements (update elements directly, use pop(), push() or splice() if one array is longer than the other).\n // This needs to be done to have a smooth animation from the old to the new state and not a complete rebuild of the chart.\n let transferProperty = (source, target, property, setToUndefined) => {\n if (!source || !target || !property) {\n return;\n }\n // 1. Property not set on target\n if (!target[property]) {\n target[property] = source[property];\n return;\n }\n // 2. Property not set on source\n if (!source[property]) {\n if (setToUndefined) {\n // Set to undefined if setToUndefined = true\n target[property] = undefined;\n return;\n }\n // Empty array\n if (Array.isArray(target[property])) {\n target[property].splice(0);\n return;\n }\n // Otherwise set to undefined\n target[property] = undefined;\n return;\n }\n // 3. Property is not an array on the source or the target object\n if (!Array.isArray(source[property]) || !Array.isArray(target[property])) {\n target[property] = source[property];\n return;\n }\n // 4. Property is an array on the source and the target object\n for (let i = 0; i < Math.min(source[property].length, target[property].length); i++) {\n // Update elements directly\n target[property][i] = source[property][i];\n }\n let targetLength = target[property].length,\n sourceLength = source[property].length;\n if (targetLength > sourceLength) {\n // Target array is longer than source array\n target[property].splice(sourceLength);\n } else if (targetLength < sourceLength) {\n // Source array is longer than target array\n target[property].push(...source[property].splice(targetLength));\n }\n };\n\n transferProperty(sourceData, targetData, 'labels');\n\n if (!targetData.datasets) {\n targetData.datasets = [];\n }\n if (!sourceData.datasets) {\n sourceData.datasets = [];\n }\n\n // If the chart is a pie-, doughnut- or polar-area-chart, not complete datasets are hidden but elements of each dataset.\n // Store these hidden data indices to apply them to newly added datasets.\n if (scout.isOneOf(config.type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA) && targetData.datasets.length) {\n let meta = this.chartJs.getDatasetMeta(0);\n if (meta && meta.data && Array.isArray(meta.data)) {\n meta.data.forEach((dataMeta, idx) => {\n if (dataMeta.hidden) {\n hiddenDataIndices.push(idx);\n }\n });\n }\n }\n\n for (let i = 0; i < Math.min(sourceData.datasets.length, targetData.datasets.length); i++) {\n let targetDataset = targetData.datasets[i],\n sourceDataset = sourceData.datasets[i];\n\n targetDataset.label = sourceDataset.label;\n targetDataset.type = sourceDataset.type;\n\n transferProperty(sourceDataset, targetDataset, 'data');\n\n transferProperty(sourceDataset, targetDataset, 'backgroundColor', true);\n transferProperty(sourceDataset, targetDataset, 'borderColor', true);\n transferProperty(sourceDataset, targetDataset, 'hoverBackgroundColor', true);\n transferProperty(sourceDataset, targetDataset, 'hoverBorderColor', true);\n transferProperty(sourceDataset, targetDataset, 'legendColor', true);\n transferProperty(sourceDataset, targetDataset, 'pointHoverBackgroundColor', true);\n }\n let targetLength = targetData.datasets.length,\n sourceLength = sourceData.datasets.length;\n if (targetLength > sourceLength) {\n targetData.datasets.splice(sourceLength);\n } else if (targetLength < sourceLength) {\n targetData.datasets.push(...sourceData.datasets.splice(targetLength));\n applyHiddenDatasetIndices = arrays.init(sourceLength - targetLength).map((elem, idx) => targetLength + idx);\n }\n } else {\n this.chartJs.config.data = sourceData;\n }\n\n $.extend(true, this.chartJs.config, {\n options: {\n animation: {\n duration: this.animationDuration\n }\n }\n });\n this.chartJs.update();\n\n // Apply hidden data indices (only set for pie-, doughnut- or polar-area-chart)\n if (hiddenDataIndices.length && applyHiddenDatasetIndices.length) {\n applyHiddenDatasetIndices.forEach(datasetIndex => {\n let meta = this.chartJs.getDatasetMeta(datasetIndex);\n if (meta && meta.data && Array.isArray(meta.data)) {\n hiddenDataIndices\n .filter(dataIndex => meta.data.length > dataIndex)\n .forEach(dataIndex => {\n meta.data[dataIndex].hidden = true;\n });\n }\n });\n }\n\n this._adjustSize(this.chartJs.config, this.chartJs.chartArea);\n this.chartJs.update();\n }\n\n isDataUpdatable() {\n return true;\n }\n\n _updateChart(animated) {\n let config = this.chartJs.config;\n this._adjustColors(config);\n this._renderChart(config, animated);\n }\n\n _renderCheckedItems() {\n if (this.chartJs && this._checkItems(this.chartJs.config)) {\n this.chartJs.update();\n }\n }\n\n _checkItems(config) {\n if (!config || !config.data) {\n return false;\n }\n let transferArrayValues = (target, source, indices) => {\n if (Array.isArray(target) && Array.isArray(source)) {\n let changed = 0;\n arrays.ensure(indices)\n .filter(index => !isNaN(index) && index < Math.min(target.length, source.length))\n .forEach(index => {\n if (target[index] !== source[index]) {\n target[index] = source[index];\n changed++;\n }\n });\n return changed;\n }\n return 0;\n };\n let changed = 0;\n config.data.datasets.forEach((dataset, datasetIndex) => {\n let checkedIndices = this.chart.checkedItems.filter(item => item.datasetIndex === datasetIndex)\n .map(item => item.dataIndex),\n uncheckedIndices = arrays.init(dataset.data.length).map((elem, idx) => idx);\n arrays.removeAll(uncheckedIndices, checkedIndices);\n\n changed = changed +\n // check\n transferArrayValues(dataset.backgroundColor, dataset.checkedBackgroundColor, checkedIndices) +\n transferArrayValues(dataset.hoverBackgroundColor, dataset.checkedHoverBackgroundColor, checkedIndices) +\n transferArrayValues(dataset.pointBackgroundColor, dataset.checkedPointBackgroundColor, checkedIndices) +\n transferArrayValues(dataset.pointHoverBackgroundColor, dataset.checkedPointHoverBackgroundColor, checkedIndices) +\n transferArrayValues(dataset.pointRadius, dataset.checkedPointRadius, checkedIndices) +\n // uncheck\n transferArrayValues(dataset.backgroundColor, dataset.uncheckedBackgroundColor, uncheckedIndices) +\n transferArrayValues(dataset.hoverBackgroundColor, dataset.uncheckedHoverBackgroundColor, uncheckedIndices) +\n transferArrayValues(dataset.pointBackgroundColor, dataset.uncheckedPointBackgroundColor, uncheckedIndices) +\n transferArrayValues(dataset.pointHoverBackgroundColor, dataset.uncheckedPointHoverBackgroundColor, uncheckedIndices) +\n transferArrayValues(dataset.pointRadius, dataset.uncheckedPointRadius, uncheckedIndices);\n });\n\n return 0 < changed;\n }\n\n _adjustConfig(config) {\n if (!config || !config.type) {\n return;\n }\n this._adjustType(config);\n if (this.chart.data) {\n this._computeDatasets(this.chart.data, config);\n }\n this._adjustData(config);\n this._adjustTooltip(config);\n this._adjustGrid(config);\n this._adjustPlugins(config);\n this._adjustColors(config);\n this._adjustClickHandler(config);\n this._adjustResizeHandler(config);\n }\n\n _adjustType(config) {\n if (config.type === Chart.Type.COMBO_BAR_LINE) {\n config.type = Chart.Type.BAR;\n\n let scaleLabelByTypeMap = ((config.options || {}).scales || {}).scaleLabelByTypeMap;\n if (scaleLabelByTypeMap) {\n scaleLabelByTypeMap[Chart.Type.BAR] = scaleLabelByTypeMap[Chart.Type.COMBO_BAR_LINE];\n }\n }\n }\n\n _computeDatasets(chartData, config) {\n let labels = [],\n datasets = [];\n\n let setLabelMap = (identifier, labelMap) => {\n if (!$.isEmptyObject(labelMap)) {\n config.options = $.extend(true, {}, {\n scales: {}\n }, config.options);\n config.options.scales[identifier] = labelMap;\n }\n };\n\n (chartData.axes[0] || []).forEach(elem => labels.push(elem.label));\n\n setLabelMap(config.type === Chart.Type.BAR_HORIZONTAL ? 'yLabelMap' : 'xLabelMap', this._computeLabelMap(chartData.axes[0]));\n setLabelMap(config.type === Chart.Type.BAR_HORIZONTAL ? 'xLabelMap' : 'yLabelMap', this._computeLabelMap(chartData.axes[1]));\n\n chartData.chartValueGroups.forEach(elem => datasets.push({\n type: elem.type,\n label: elem.groupName,\n data: $.extend(true, [], elem.values)\n }));\n\n /**\n * @type {object}\n * @property {Dataset[]} datasets\n */\n config.data = {\n labels: labels,\n datasets: datasets\n };\n }\n\n _computeLabelMap(axis) {\n let labelMap = {};\n (axis || []).forEach((elem, idx) => {\n labelMap[idx] = elem.label;\n });\n return labelMap;\n }\n\n _adjustData(config) {\n if (!config || !config.data || !config.type) {\n return;\n }\n\n this._adjustBarBorderWidth(config);\n this._adjustMaxSegments(config);\n this._adjustBubbleRadii(config);\n this._adjustOnlyIntegers(config);\n }\n\n _adjustBarBorderWidth(config) {\n if (!config || !config.data || !config.type || !scout.isOneOf(config.type, Chart.Type.BAR, Chart.Type.BAR_HORIZONTAL)) {\n return;\n }\n\n config.data.datasets.forEach(dataset => {\n if ((dataset.type || Chart.Type.BAR) === Chart.Type.BAR) {\n dataset.hoverBorderWidth = dataset.hoverBorderWidth || 2;\n }\n });\n }\n\n _adjustMaxSegments(config) {\n if (!config || !config.data || !config.type || !scout.isOneOf(config.type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA, Chart.Type.RADAR)) {\n return;\n }\n\n let maxSegments = config.options.maxSegments;\n if (!(maxSegments && config.data.datasets.length && maxSegments < config.data.datasets[0].data.length)) {\n return;\n }\n config.data.datasets.forEach(elem => {\n let newData = elem.data.slice(0, maxSegments);\n newData[maxSegments - 1] = elem.data.slice(maxSegments - 1, elem.data.length).reduce((x, y) => {\n return x + y;\n }, 0);\n elem.data = newData;\n });\n\n let newLabels = config.data.labels.slice(0, maxSegments);\n newLabels[maxSegments - 1] = this.chart.session.text('ui.OtherValues');\n config.data.labels = newLabels;\n config.data.maxSegmentsExceeded = true;\n }\n\n _isMaxSegmentsExceeded(config, index) {\n if (!scout.isOneOf(config.type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA, Chart.Type.RADAR)) {\n return false;\n }\n if (config.options.otherSegmentClickable) {\n return false;\n }\n if (!config.data.maxSegmentsExceeded || !config.options.maxSegments) {\n return false;\n }\n return config.options.maxSegments - 1 <= index;\n }\n\n _adjustBubbleRadii(config) {\n if (!config || !config.data || !config.type || config.type !== Chart.Type.BUBBLE) {\n return;\n }\n\n config.data.datasets.forEach(dataset => dataset.data.forEach(data => {\n if (!isNaN(data.r)) {\n data.z = Math.pow(data.r, 2);\n } else if (!isNaN(data.z)) {\n data.r = Math.sqrt(data.z);\n }\n }));\n }\n\n _adjustOnlyIntegers(config) {\n this.onlyIntegers = true;\n\n if (!config || !config.data || !config.type) {\n return;\n }\n\n if (config.type === Chart.Type.BUBBLE) {\n this.onlyIntegers = config.data.datasets.every(dataset => dataset.data.every(data => numbers.isInteger(data.x) && numbers.isInteger(data.y)));\n } else {\n this.onlyIntegers = config.data.datasets.every(dataset => dataset.data.every(data => numbers.isInteger(data)));\n }\n }\n\n _adjustTooltip(config) {\n if (!config) {\n return;\n }\n\n config.options = $.extend(true, {}, {\n hover: {\n mode: 'nearest'\n },\n tooltips: {\n mode: 'nearest',\n callbacks: {\n title: this._tooltipTitle,\n label: this._tooltipLabel,\n labelColor: this._tooltipLabelColor\n }\n }\n }, config.options);\n }\n\n _formatTooltipTitle(tooltipItems, data) {\n let config = this.chartJs.config,\n ctx = this.chartJs.ctx,\n tooltipItem = tooltipItems[0],\n title,\n defaultGlobal = ChartJs.defaults.global,\n defaultTypeTooltips = {},\n defaultGlobalTooltips = defaultGlobal.tooltips;\n if (ChartJs.defaults[config.type]) {\n defaultTypeTooltips = $.extend(true, {}, defaultTypeTooltips, ChartJs.defaults[config.type].tooltips);\n }\n if (scout.isOneOf(config.type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA, Chart.Type.LINE, Chart.Type.BAR, Chart.Type.BAR_HORIZONTAL, Chart.Type.RADAR)) {\n let label = data.labels[tooltipItem.index];\n title = config.options.reformatLabels ? this._formatLabel(label) : label;\n } else if (config.type === Chart.Type.BUBBLE) {\n let xAxis = config.options.scales.xAxes[0],\n yAxis = config.options.scales.yAxes[0],\n xAxisLabel = xAxis.scaleLabel.labelString,\n yAxisLabel = yAxis.scaleLabel.labelString;\n xAxisLabel = xAxisLabel ? (xAxisLabel + ':') : ChartJsRenderer.ARROW_LEFT_RIGHT;\n yAxisLabel = yAxisLabel ? (yAxisLabel + ':') : ' ' + ChartJsRenderer.ARROW_UP_DOWN + ' ';\n title = [];\n let xTickLabel = xAxis.ticks.callback(tooltipItem.xLabel);\n if (xTickLabel) {\n title.push(xAxisLabel + ' ' + xTickLabel);\n }\n let yTickLabel = yAxis.ticks.callback(tooltipItem.yLabel);\n if (yTickLabel) {\n title.push(yAxisLabel + ' ' + yTickLabel);\n }\n } else {\n let defaultTypeTooltipTitle;\n if (defaultTypeTooltips.callbacks) {\n defaultTypeTooltipTitle = defaultTypeTooltips.callbacks.title;\n }\n let defaultTooltipTitle = defaultTypeTooltipTitle || defaultGlobalTooltips.callbacks.title;\n title = defaultTooltipTitle.call(this.chartJs, tooltipItems, data);\n }\n let horizontalSpace = this.$canvas.cssWidth() - (2 * config.options.tooltips.xPadding),\n measureText = ctx.measureText.bind(ctx),\n oldFont = ctx.font,\n titleFontStyle = config.options.tooltips.titleFontStyle || defaultTypeTooltips.titleFontStyle || defaultGlobalTooltips.titleFontStyle || defaultGlobal.defaultFontStyle,\n titleFontSize = config.options.tooltips.titleFontSize || defaultTypeTooltips.titleFontSize || defaultGlobalTooltips.titleFontSize || defaultGlobal.defaultFontSize,\n titleFontFamily = config.options.tooltips.titleFontFamily || defaultTypeTooltips.titleFontFamily || defaultGlobalTooltips.titleFontFamily || defaultGlobal.defaultFontFamily,\n result = [];\n ctx.font = titleFontStyle + ' ' + titleFontSize + 'px ' + titleFontFamily;\n arrays.ensure(title).forEach(titleLine => result.push(strings.truncateText(titleLine, horizontalSpace, measureText)));\n ctx.font = oldFont;\n return result;\n }\n\n _formatTooltipLabel(tooltipItem, data) {\n let config = this.chartJs.config,\n ctx = this.chartJs.ctx,\n datasets = data ? data.datasets : null,\n dataset = datasets ? datasets[tooltipItem.datasetIndex] : null,\n label, value,\n defaultGlobal = ChartJs.defaults.global,\n defaultTypeTooltips = {},\n defaultGlobalTooltips = defaultGlobal.tooltips;\n if (ChartJs.defaults[config.type]) {\n defaultTypeTooltips = $.extend(true, {}, defaultTypeTooltips, ChartJs.defaults[config.type].tooltips);\n }\n if (scout.isOneOf(config.type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA, Chart.Type.LINE, Chart.Type.BAR, Chart.Type.BAR_HORIZONTAL, Chart.Type.RADAR)) {\n label = dataset.label;\n value = this._formatLabel(dataset.data[tooltipItem.index]);\n } else if (config.type === Chart.Type.BUBBLE) {\n label = dataset.label;\n value = this._formatLabel(dataset.data[tooltipItem.index].z);\n } else {\n let defaultTypeTooltipLabel;\n if (defaultTypeTooltips.callbacks) {\n defaultTypeTooltipLabel = defaultTypeTooltips.callbacks.label;\n }\n let defaultTooltipLabel = defaultTypeTooltipLabel || defaultGlobalTooltips.callbacks.label;\n label = defaultTooltipLabel.call(this.chartJs, tooltipItem, data);\n }\n label = ' ' + label;\n value = value ? ' ' + value : '';\n let colorRectSize = config.options.tooltips.displayColors ? config.options.tooltips.bodyFontSize || defaultTypeTooltips.bodyFontSize || defaultGlobalTooltips.bodyFontSize || defaultGlobal.defaultFontSize : 0,\n horizontalSpace = this.$canvas.cssWidth() - (2 * config.options.tooltips.xPadding) - colorRectSize,\n measureText = ctx.measureText.bind(ctx),\n result = label + (value ? ':' + value : '');\n if (measureText(result).width > horizontalSpace) {\n if (measureText(value).width > horizontalSpace / 2) {\n return strings.truncateText(value, horizontalSpace, measureText);\n }\n return strings.truncateText(label, horizontalSpace - measureText(value ? ':' + value : '').width, measureText) + (value ? ':' + value : '');\n }\n return result;\n }\n\n _computeTooltipLabelColor(tooltipItem, chart) {\n let config = chart.config,\n tooltips = config.options ? config.options.tooltips : null,\n tooltipBackgroundColor = tooltips ? tooltips.backgroundColor : null,\n datasets = chart.data ? chart.data.datasets : null,\n dataset = datasets ? datasets[tooltipItem.datasetIndex] : null,\n backgroundColor;\n if (scout.isOneOf((dataset.type || config.type), Chart.Type.LINE, Chart.Type.BAR, Chart.Type.BAR_HORIZONTAL, Chart.Type.RADAR, Chart.Type.BUBBLE)) {\n backgroundColor = dataset.legendColor || dataset.borderColor;\n }\n if (scout.isOneOf(config.type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n let legendColor = Array.isArray(dataset.legendColor) ? dataset.legendColor[tooltipItem.index] : dataset.legendColor,\n datasetBackgroundColor = Array.isArray(dataset.backgroundColor) ? dataset.backgroundColor[tooltipItem.index] : dataset.backgroundColor;\n backgroundColor = legendColor || this._adjustColorOpacity(datasetBackgroundColor, 1);\n }\n if (!backgroundColor || typeof backgroundColor === 'function') {\n let defaultTypeTooltipLabelColor;\n if (ChartJs.defaults[config.type] && ChartJs.defaults[config.type].callbacks) {\n defaultTypeTooltipLabelColor = ChartJs.defaults[config.type].callbacks.labelColor;\n }\n let defaultTooltipLabelColor = defaultTypeTooltipLabelColor || ChartJs.defaults.global.tooltips.callbacks.labelColor;\n backgroundColor = defaultTooltipLabelColor.call(chart, tooltipItem, chart).backgroundColor;\n }\n return {\n borderColor: tooltipBackgroundColor,\n backgroundColor: backgroundColor\n };\n }\n\n _adjustGrid(config) {\n if (!config) {\n return;\n }\n\n config.options = $.extend(true, {}, config.options);\n\n this._adjustScale(config);\n this._adjustScales(config);\n }\n\n _adjustScale(config) {\n if (!config || !config.type || !config.options) {\n return;\n }\n\n if (scout.isOneOf(config.type, Chart.Type.POLAR_AREA, Chart.Type.RADAR)) {\n config.options = $.extend(true, {}, {\n scale: {}\n }, config.options);\n }\n\n let options = config.options;\n if (options.scale) {\n options.scale = $.extend(true, {}, {\n angleLines: {\n display: false\n },\n gridLines: {\n borderDash: [2, 4]\n },\n ticks: {\n beginAtZero: true,\n callback: this._labelFormatter\n },\n pointLabels: {\n fontSize: ChartJs.defaults.global.defaultFontSize\n }\n }, options.scale);\n }\n }\n\n _adjustScales(config) {\n if (!config || !config.type || !config.options) {\n return;\n }\n\n if (scout.isOneOf(config.type, Chart.Type.BAR, Chart.Type.BAR_HORIZONTAL, Chart.Type.LINE, Chart.Type.BUBBLE)) {\n config.options = $.extend(true, {}, {\n scales: {\n xAxes: [{}],\n yAxes: [{}]\n }\n }, config.options);\n }\n\n this._adjustXAxes(config);\n this._adjustYAxes(config);\n }\n\n _adjustXAxes(config) {\n if (!config || !config.type || !config.options || !config.options.scales || !config.options.scales.xAxes) {\n return;\n }\n\n let type = config.type,\n xAxes = config.options.scales.xAxes;\n\n for (let i = 0; i < xAxes.length; i++) {\n if (scout.isOneOf(type, Chart.Type.BAR_HORIZONTAL, Chart.Type.BUBBLE)) {\n xAxes[i] = $.extend(true, {}, {\n offset: type === Chart.Type.BUBBLE,\n gridLines: {\n drawBorder: false,\n drawTicks: false,\n zeroLineBorderDash: [2, 4],\n borderDash: [2, 4]\n },\n ticks: {\n padding: 5,\n beginAtZero: type === Chart.Type.BAR_HORIZONTAL\n }\n }, xAxes[i]);\n } else {\n xAxes[i] = $.extend(true, {}, {\n offset: true,\n gridLines: {\n display: false\n }\n }, xAxes[i]);\n }\n if (scout.isOneOf(type, Chart.Type.BAR_HORIZONTAL, Chart.Type.BUBBLE) || config.options.reformatLabels) {\n xAxes[i] = $.extend(true, {}, {\n ticks: {\n callback: this._xLabelFormatter\n }\n }, xAxes[i]);\n }\n xAxes[i].afterCalculateTickRotation = this._xAxisFitter;\n }\n }\n\n _adjustYAxes(config) {\n if (!config || !config.type || !config.options || !config.options.scales || !config.options.scales.yAxes) {\n return;\n }\n\n let type = config.type,\n yAxes = config.options.scales.yAxes;\n\n for (let i = 0; i < yAxes.length; i++) {\n if (type === Chart.Type.BAR_HORIZONTAL) {\n yAxes[i] = $.extend(true, {}, {\n gridLines: {\n display: false\n }\n }, yAxes[i]);\n } else {\n yAxes[i] = $.extend(true, {}, {\n gridLines: {\n drawBorder: false,\n drawTicks: false,\n zeroLineBorderDash: [2, 4],\n borderDash: [2, 4]\n },\n ticks: {\n padding: 5,\n beginAtZero: type !== Chart.Type.BUBBLE\n }\n }, yAxes[i]);\n }\n if (type !== Chart.Type.BAR_HORIZONTAL || config.options.reformatLabels) {\n yAxes[i] = $.extend(true, {}, {\n ticks: {\n callback: this._yLabelFormatter\n }\n }, yAxes[i]);\n }\n yAxes[i].afterFit = this._yAxisFitter;\n }\n }\n\n _adjustPlugins(config) {\n this._adjustPluginsDatalabels(config);\n }\n\n _adjustPluginsDatalabels(config) {\n if (!config || !config.type || !config.options || !config.options.plugins || !config.options.plugins.datalabels || !config.options.plugins.datalabels.display) {\n return;\n }\n\n let plugins = config.options.plugins;\n if (scout.isOneOf(config.type, Chart.Type.PIE, Chart.Type.DOUGHNUT)) {\n plugins.datalabels = $.extend(true, {}, {\n formatter: this._radialChartDatalabelsFormatter\n }, plugins.datalabels);\n plugins.datalabels.display = this._radialChartDatalabelsDisplayHandler;\n } else if (scout.isOneOf(config.type, Chart.Type.BAR, Chart.Type.BAR_HORIZONTAL, Chart.Type.LINE, Chart.Type.POLAR_AREA, Chart.Type.RADAR, Chart.Type.BUBBLE)) {\n plugins.datalabels = $.extend(true, {}, {\n backgroundColor: this._datalabelBackgroundColorHandler,\n borderRadius: 4\n }, plugins.datalabels);\n plugins.datalabels.display = 'auto';\n }\n if (config.options.reformatLabels) {\n let handleFormatter = formatter => {\n return (value, context) => {\n let label = formatter.call(context.chart, value, context);\n return this._formatLabel(label);\n };\n };\n\n if (config.data) {\n let datasets = config.data.datasets;\n datasets.forEach(dataset => {\n if (dataset.datalabels && dataset.datalabels.formatter) {\n dataset.datalabels.formatter = handleFormatter(dataset.datalabels.formatter);\n }\n });\n }\n if (plugins.datalabels.formatter) {\n plugins.datalabels.formatter = handleFormatter(plugins.datalabels.formatter);\n }\n }\n\n plugins.datalabels = $.extend(true, {}, {\n formatter: this._datalabelsFormatter\n }, plugins.datalabels);\n }\n\n _formatLabel(label) {\n return this._formatLabelMap(label, null, this._getNumberFormatter());\n }\n\n _getNumberFormatter() {\n if (this.chartJs && this.chartJs.config && this.chartJs.config.options) {\n return this.chartJs.config.options.numberFormatter;\n }\n }\n\n _formatXLabel(label) {\n return this._formatLabelMap(label, this._getXLabelMap(), this._getNumberFormatter());\n }\n\n _formatYLabel(label) {\n return this._formatLabelMap(label, this._getYLabelMap(), this._getNumberFormatter());\n }\n\n _getXLabelMap() {\n return this._getLabelMap('xLabelMap');\n }\n\n _getYLabelMap() {\n return this._getLabelMap('yLabelMap');\n }\n\n _getLabelMap(identifier) {\n if (this.chartJs && this.chartJs.config && this.chartJs.config.options && this.chartJs.config.options.scales) {\n return this.chartJs.config.options.scales[identifier];\n }\n }\n\n _formatLabelMap(label, labelMap, numberFormatter) {\n if (labelMap) {\n return labelMap[label];\n }\n if (isNaN(label)) {\n return label;\n }\n if (numberFormatter) {\n return numberFormatter(label, this._formatNumberLabel.bind(this));\n }\n return this._formatNumberLabel(label);\n }\n\n _formatNumberLabel(label) {\n if (isNaN(label)) {\n return label;\n }\n let abs = Math.abs(label);\n let abbreviation = '';\n if (abs >= 1000000) {\n abs = abs / 1000000;\n abbreviation = ' ' + this.chart.session.text('ui.Mio');\n let abbreviations = [\n this.chart.session.text('ui.Mrd'),\n this.chart.session.text('ui.Bio'),\n this.chart.session.text('ui.Brd'),\n this.chart.session.text('ui.Tri'),\n this.chart.session.text('ui.Trd')];\n for (let i = 0; i < abbreviations.length; i++) {\n if (abs >= 1000000) {\n abs = abs / 1000;\n abbreviation = ' ' + abbreviations[i];\n } else {\n break;\n }\n }\n }\n return this.session.locale.decimalFormat.format(Math.sign(label) * abs) + abbreviation;\n }\n\n _fitXAxis(xAxis) {\n if (!xAxis || xAxis.labelRotation === 0) {\n return;\n }\n let maxHeight = this.maxXAxesTicksHeigth,\n defaultGlobal = ChartJs.defaults.global,\n defaultTicks = ChartJs.defaults.scale.ticks,\n fontSize,\n maxRotation;\n if (this.chartJs) {\n let chartArea = this.chartJs.chartArea,\n chartAreaHeight = Math.abs(chartArea.top - chartArea.bottom);\n maxHeight = Math.min(maxHeight, chartAreaHeight / 3);\n }\n if (xAxis.options && xAxis.options.ticks) {\n maxRotation = xAxis.options.ticks.maxRotation;\n fontSize = xAxis.options.ticks.fontSize;\n }\n maxRotation = maxRotation || defaultTicks.maxRotation;\n fontSize = fontSize || defaultTicks.fontSize || defaultGlobal.defaultFontSize;\n // if the chart is very narrow, chart.js sometimes calculates with a negative width of the canvas\n // this causes NaN for labelRotation and height\n if (isNaN(xAxis.labelRotation)) {\n xAxis.labelRotation = maxRotation;\n }\n xAxis.height = isNaN(xAxis.height) ? maxHeight : Math.min(xAxis.height, maxHeight);\n // the rotation (degrees), needs to be transformed to radians ((labelRotation / 180) * pi)\n let labelRotation = xAxis.labelRotation,\n // the label is a rectangle (labelWidth x fontSize) which is rotated\n // => height = sin(labelRotation) * labelLength + sin(90° - labelRotation) * fontSize\n // <=> labelLength = (height - sin(90° - labelRotation) * fontSize) / sin(labelRotation)\n maxLabelLength = (maxHeight - (fontSize * Math.sin(((90 - labelRotation) / 180) * Math.PI))) / Math.sin((labelRotation / 180) * Math.PI);\n if (xAxis.longestLabelWidth > maxLabelLength) {\n let measureText = xAxis.ctx.measureText.bind(xAxis.ctx);\n xAxis._ticks.forEach(tick => {\n tick.label = strings.truncateText(tick.label, maxLabelLength, measureText);\n });\n // reset label sizes, chart.js will recalculate them using the new truncated labels\n xAxis._labelSizes = null;\n }\n }\n\n _fitYAxis(yAxis) {\n if (!yAxis) {\n return;\n }\n let padding = 0,\n tickMarkLength = 0;\n if (yAxis.options && yAxis.options.ticks) {\n padding = yAxis.options.ticks.padding || 0;\n }\n if (yAxis.options && yAxis.options.gridLines) {\n tickMarkLength = yAxis.options.gridLines.tickMarkLength || 0;\n }\n if (yAxis.longestLabelWidth > yAxis.maxWidth - padding) {\n let horizontalSpace = yAxis.maxWidth - padding - tickMarkLength,\n measureText = yAxis.ctx.measureText.bind(yAxis.ctx);\n yAxis._ticks.forEach(tick => {\n tick.label = strings.truncateText(tick.label, horizontalSpace, measureText);\n });\n }\n }\n\n _displayDatalabelsOnRadialChart(context) {\n let data = context.chart.getDatasetMeta(context.datasetIndex).data[context.dataIndex],\n model = data._model,\n // Compute the biggest circle that fits inside sector/arc with center in the middle between inner and outer radius.\n // First compute a circle C1 that touches the straight boundaries of the sector/arc. Then compute a circle C2 that touches the inner and the outer radius.\n // The smaller one of these two circles is the biggest possible circle that fits inside sector/arc with center in the middle between inner and outer radius.\n // circle C1:\n midRadius = (model.outerRadius + model.innerRadius) / 2,\n // If the difference between the angles is greater than pi, it is no longer possible for a circle to be inside the sector/arc and touch both straight boundaries.\n angle = Math.min((model.endAngle - model.startAngle), Math.PI) / 2,\n radius1 = Math.abs(Math.sin(angle)) * midRadius,\n diameter1 = radius1 * 2,\n // circle C2:\n diameter2 = model.outerRadius - model.innerRadius;\n return Math.min(diameter1, diameter2) > this.minRadialChartDatalabelSpace;\n }\n\n _formatDatalabelsOnRadialChart(value, context) {\n let sum = this._computeSumOfVisibleElements(context),\n dataset = context.dataset,\n roundingError = 0,\n roundedResults = [];\n for (let i = 0; i < context.dataIndex + 1; i++) {\n let result = dataset.data[i] / sum * 100 - roundingError,\n roundedResult = Math.round(result);\n roundingError = roundedResult - result;\n roundedResults.push(roundedResult + '%');\n }\n return roundedResults[context.dataIndex];\n }\n\n _computeSumOfVisibleElements(context) {\n let dataset = context.dataset,\n meta = context.chart.getDatasetMeta(context.datasetIndex),\n sum = 0;\n for (let i = 0; i < dataset.data.length; i++) {\n if (meta.data[i] && !meta.data[i].hidden) {\n sum += dataset.data[i];\n }\n }\n return sum;\n }\n\n _formatDatalabels(value, context) {\n if (context.chart.config.type === Chart.Type.BUBBLE) {\n return this._formatLabel(value.z);\n }\n return this._formatLabel(value);\n }\n\n _getBackgroundColorOfDataset(context) {\n return context.dataset.backgroundColor;\n }\n\n _adjustColors(config) {\n this._adjustColorSchemeCssClass(config);\n this._adjustDatasetColors(config);\n this._adjustLegendColors(config);\n this._adjustTooltipColors(config);\n this._adjustScaleColors(config);\n this._adjustScalesColors(config);\n this._adjustPluginColors(config);\n }\n\n _adjustColorSchemeCssClass(config) {\n if (!config || !config.options) {\n return;\n }\n this.colorSchemeCssClass = colorSchemes.getCssClasses(config.options.colorScheme).join(' ');\n }\n\n _adjustDatasetColors(config) {\n if (!config || !config.data || !config.type) {\n return;\n }\n\n let data = config.data,\n type = config.type,\n autoColor = config.options && config.options.autoColor,\n checkable = config.options && config.options.checkable,\n multipleColorsPerDataset = autoColor && scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA),\n colors = {\n backgroundColors: [],\n borderColors: [],\n hoverBackgroundColors: [],\n hoverBorderColors: [],\n checkedBackgroundColors: [],\n checkedHoverBackgroundColors: [],\n legendColors: [],\n pointHoverColor: this._computePointHoverColor(type)\n };\n\n colors = $.extend(true, colors, this._computeDatasetColors(config, multipleColorsPerDataset));\n\n data.datasets.forEach((elem, idx) => {\n let backgroundColor = (multipleColorsPerDataset ? colors.backgroundColors : colors.backgroundColors[idx]),\n borderColor = (multipleColorsPerDataset ? colors.borderColors : colors.borderColors[idx]),\n hoverBackgroundColor = (multipleColorsPerDataset ? colors.hoverBackgroundColors : colors.hoverBackgroundColors[idx]),\n hoverBorderColor = (multipleColorsPerDataset ? colors.hoverBorderColors : colors.hoverBorderColors[idx]),\n legendColor = (multipleColorsPerDataset ? colors.legendColors : colors.legendColors[idx]),\n pointHoverBackgroundColor = colors.pointHoverColor;\n\n let setProperty = (identifier, value) => {\n if (value && value.length) {\n elem[identifier] = Array.isArray(value) ? [...value] : value;\n }\n };\n setProperty('backgroundColor', backgroundColor);\n setProperty('borderColor', borderColor);\n setProperty('hoverBackgroundColor', hoverBackgroundColor);\n setProperty('hoverBorderColor', hoverBorderColor);\n setProperty('legendColor', legendColor);\n setProperty('pointHoverBackgroundColor', pointHoverBackgroundColor);\n if (checkable) {\n let datasetLength = elem.data.length;\n if (scout.isOneOf(type, Chart.Type.PIE, Chart.Type.BAR_HORIZONTAL, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA, Chart.Type.BUBBLE) || (type === Chart.Type.BAR && (elem.type || Chart.Type.BAR) === Chart.Type.BAR)) {\n let uncheckedBackgroundColor = (multipleColorsPerDataset ? colors.backgroundColors : arrays.init(datasetLength, colors.backgroundColors[idx])),\n uncheckedHoverBackgroundColor = (multipleColorsPerDataset ? colors.hoverBackgroundColors : arrays.init(datasetLength, colors.hoverBackgroundColors[idx])),\n\n checkedBackgroundColor = (multipleColorsPerDataset ? colors.checkedBackgroundColors : arrays.init(datasetLength, colors.checkedBackgroundColors[idx])),\n checkedHoverBackgroundColor = (multipleColorsPerDataset ? colors.checkedHoverBackgroundColors : arrays.init(datasetLength, colors.checkedHoverBackgroundColors[idx]));\n\n setProperty('uncheckedBackgroundColor', uncheckedBackgroundColor);\n setProperty('uncheckedHoverBackgroundColor', uncheckedHoverBackgroundColor);\n setProperty('checkedBackgroundColor', checkedBackgroundColor);\n setProperty('checkedHoverBackgroundColor', checkedHoverBackgroundColor);\n\n setProperty('backgroundColor', elem.uncheckedBackgroundColor);\n setProperty('hoverBackgroundColor', elem.uncheckedHoverBackgroundColor);\n } else if (scout.isOneOf(type, Chart.Type.LINE, Chart.Type.RADAR) || (type === Chart.Type.BAR && elem.type === Chart.Type.LINE)) {\n let uncheckedPointBackgroundColor = arrays.init(datasetLength, pointHoverBackgroundColor),\n uncheckedPointHoverBackgroundColor = arrays.init(datasetLength, pointHoverBackgroundColor),\n checkedPointBackgroundColor = arrays.init(datasetLength, borderColor),\n checkedPointHoverBackgroundColor = arrays.init(datasetLength, hoverBorderColor || borderColor);\n setProperty('uncheckedPointBackgroundColor', uncheckedPointBackgroundColor);\n setProperty('uncheckedPointHoverBackgroundColor', uncheckedPointHoverBackgroundColor);\n setProperty('checkedPointBackgroundColor', checkedPointBackgroundColor);\n setProperty('checkedPointHoverBackgroundColor', checkedPointHoverBackgroundColor);\n\n setProperty('pointBackgroundColor', elem.uncheckedPointBackgroundColor);\n setProperty('pointHoverBackgroundColor', elem.uncheckedPointHoverBackgroundColor);\n\n let uncheckedPointRadius = arrays.init(datasetLength, ((config.options.elements || {}).point || {}).radius || ChartJs.defaults.global.elements.point.radius),\n checkedPointRadius = arrays.init(datasetLength, ((config.options.elements || {}).point || {}).hoverRadius || ChartJs.defaults.global.elements.point.hoverRadius);\n setProperty('uncheckedPointRadius', uncheckedPointRadius);\n setProperty('checkedPointRadius', checkedPointRadius);\n\n setProperty('pointRadius', elem.uncheckedPointRadius);\n }\n }\n });\n if (checkable) {\n this._checkItems(config);\n }\n }\n\n _computePointHoverColor(type) {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'point hover'], 'fill').fill;\n }\n\n _computeDatasetColors(config, multipleColorsPerDataset) {\n if (!config || !config.data || !config.type) {\n return {};\n }\n\n let data = config.data,\n type = config.type,\n colors = {};\n\n if (config.options && config.options.autoColor) {\n colors = this._computeDatasetColorsAutoColor(config, multipleColorsPerDataset);\n } else {\n colors = this._computeDatasetColorsChartValueGroups(config, multipleColorsPerDataset);\n if (scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n let borderColor = this._computeBorderColor(type, 0);\n colors.borderColors = arrays.init(data.datasets.length, borderColor);\n colors.hoverBorderColors = colors.borderColors;\n }\n }\n\n return colors;\n }\n\n _computeDatasetColorsAutoColor(config, multipleColorsPerDataset) {\n if (!config || !config.data || !config.type || !config.options || !config.options.autoColor) {\n return {};\n }\n\n let data = config.data,\n type = config.type,\n checkable = config.options && config.options.checkable,\n transparent = config.options && config.options.transparent,\n colors = {\n backgroundColors: [],\n borderColors: [],\n hoverBackgroundColors: [],\n hoverBorderColors: [],\n checkedBackgroundColors: [],\n checkedHoverBackgroundColors: [],\n legendColors: []\n };\n\n let types = [];\n if (multipleColorsPerDataset) {\n types = arrays.init((data.datasets.length && data.datasets[0].data.length) || 0, type);\n } else {\n data.datasets.forEach(dataset => types.push(dataset.type || type));\n }\n types.forEach((type, index) => {\n colors.backgroundColors.push(this._computeBackgroundColor(type, index, checkable || transparent));\n colors.borderColors.push(this._computeBorderColor(type, index));\n colors.hoverBackgroundColors.push(this._computeHoverBackgroundColor(type, index, checkable || transparent));\n colors.hoverBorderColors.push(this._computeHoverBorderColor(type, index));\n\n colors.checkedBackgroundColors.push(this._computeCheckedBackgroundColor(type, index, checkable));\n colors.checkedHoverBackgroundColors.push(this._computeCheckedHoverBackgroundColor(type, index, checkable));\n\n colors.legendColors.push(this._computeLegendColor(type, index));\n });\n\n return colors;\n }\n\n _computeBackgroundColor(type, index, checkable) {\n return styles.get([this.colorSchemeCssClass, type + '-chart' + (checkable ? ' checkable' : ''), 'elements', 'color' + (index % this.numSupportedColors)], 'fill').fill;\n }\n\n _computeBorderColor(type, index) {\n let additionalProperties;\n if (scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n additionalProperties = {stroke: this.firstOpaqueBackgroundColor};\n }\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'stroke-color' + (index % this.numSupportedColors)], 'stroke', additionalProperties).stroke;\n }\n\n _computeHoverBackgroundColor(type, index, checkable) {\n return styles.get([this.colorSchemeCssClass, type + '-chart' + (checkable ? ' checkable' : ''), 'elements', 'color' + (index % this.numSupportedColors) + ' hover'], 'fill').fill;\n }\n\n _computeHoverBorderColor(type, index) {\n let additionalProperties;\n if (scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n additionalProperties = {stroke: this.firstOpaqueBackgroundColor};\n }\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'stroke-color' + (index % this.numSupportedColors) + ' hover'], 'stroke', additionalProperties).stroke;\n }\n\n _computeCheckedBackgroundColor(type, index, checkable) {\n return styles.get([this.colorSchemeCssClass, type + '-chart' + (checkable ? ' checkable' : ''), 'elements', 'color' + (index % this.numSupportedColors) + ' checked'], 'fill').fill;\n }\n\n _computeCheckedHoverBackgroundColor(type, index, checkable) {\n return styles.get([this.colorSchemeCssClass, type + '-chart' + (checkable ? ' checkable' : ''), 'elements', 'color' + (index % this.numSupportedColors) + ' hover checked'], 'fill').fill;\n }\n\n _computeLegendColor(type, index) {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'color' + (index % this.numSupportedColors) + ' legend'], 'fill').fill;\n }\n\n _computeDatasetColorsChartValueGroups(config, multipleColorsPerDataset) {\n if (!config || !config.type || !this.chart.data) {\n return {};\n }\n\n let type = config.type,\n checkable = config.options && config.options.checkable,\n transparent = config.options && config.options.transparent,\n colors = {\n backgroundColors: [],\n borderColors: [],\n hoverBackgroundColors: [],\n hoverBorderColors: [],\n checkedBackgroundColors: [],\n checkedHoverBackgroundColors: [],\n legendColors: []\n };\n\n this.chart.data.chartValueGroups.forEach(elem => {\n let rgbColor = styles.hexToRgb(elem.colorHexValue),\n adjustColor = (opacity, darker) => this._adjustColorOpacity(styles.darkerColor(rgbColor, darker), opacity);\n\n let backgroundOpacity = 1,\n hoverBackgroundOpacity = 1,\n hoverBackgroundDarker = 0.1,\n hoverBorderDarker = 0.1,\n\n uncheckedBackgroundOpacity = 0.2,\n uncheckedHoverBackgroundOpacity = 0.35,\n\n checkedBackgroundOpacity = 1,\n checkedBackgroundDarker = 0,\n checkedHoverBackgroundOpacity = 1,\n checkedHoverBackgroundDarker = 0.1;\n\n if (scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT)) {\n uncheckedBackgroundOpacity = 0.7;\n uncheckedHoverBackgroundOpacity = 0.85;\n\n checkedBackgroundDarker = 0.1;\n checkedHoverBackgroundDarker = 0;\n } else if (type === Chart.Type.POLAR_AREA) {\n backgroundOpacity = 0.7;\n hoverBackgroundOpacity = 0.85;\n\n uncheckedBackgroundOpacity = 0.7;\n uncheckedHoverBackgroundOpacity = 0.85;\n\n checkedBackgroundDarker = 0.1;\n checkedHoverBackgroundDarker = 0;\n } else if (scout.isOneOf((elem.type || type), Chart.Type.LINE, Chart.Type.RADAR)) {\n backgroundOpacity = 0.2;\n hoverBackgroundOpacity = 0.35;\n hoverBackgroundDarker = 0;\n hoverBorderDarker = 0;\n\n checkedBackgroundOpacity = 0.2;\n checkedHoverBackgroundOpacity = 0.35;\n checkedHoverBackgroundDarker = 0;\n } else if (type === Chart.Type.BUBBLE) {\n backgroundOpacity = 0.2;\n hoverBackgroundOpacity = 0.35;\n hoverBackgroundDarker = 0;\n }\n\n colors.backgroundColors.push(adjustColor((checkable || transparent) ? uncheckedBackgroundOpacity : backgroundOpacity, 0));\n colors.borderColors.push(adjustColor(1, 0));\n colors.hoverBackgroundColors.push(adjustColor((checkable || transparent) ? uncheckedHoverBackgroundOpacity : hoverBackgroundOpacity, (checkable || transparent) ? 0 : hoverBackgroundDarker));\n colors.hoverBorderColors.push(adjustColor(1, hoverBorderDarker));\n\n colors.checkedBackgroundColors.push(adjustColor(checkedBackgroundOpacity, checkedBackgroundDarker));\n colors.checkedHoverBackgroundColors.push(adjustColor(checkedHoverBackgroundOpacity, checkedHoverBackgroundDarker));\n\n colors.legendColors.push(adjustColor(1, 0));\n });\n colors.datalabelColor = this._computeDatalabelColor(type);\n\n return colors;\n }\n\n _adjustColorOpacity(color, opacity = 1) {\n if (!color || typeof color === 'function') {\n return color;\n }\n\n if (color.indexOf('rgb') === 0) {\n return this._adjustRgbColorOpacity(color, opacity);\n }\n if (color.indexOf('#') === 0) {\n return this._adjustHexColorOpacity(color, opacity);\n }\n return color;\n }\n\n _adjustRgbColorOpacity(rgbColor, opacity = 1) {\n if (!rgbColor || rgbColor.indexOf('rgb') !== 0) {\n return rgbColor;\n }\n let rgba = styles.rgb(rgbColor);\n rgba.alpha = opacity;\n return 'rgba(' + rgba.red + ', ' + rgba.green + ', ' + rgba.blue + ', ' + rgba.alpha + ')';\n }\n\n _adjustHexColorOpacity(hexColor, opacity = 1) {\n if (!hexColor || hexColor.indexOf('#') !== 0 || !(hexColor.length === 4 || hexColor.length === 5 || hexColor.length === 7 || hexColor.length === 9)) {\n return hexColor;\n }\n return this._adjustRgbColorOpacity(styles.hexToRgb(hexColor), opacity);\n }\n\n _adjustLegendColors(config) {\n if (!config || !config.type || !config.options) {\n return;\n }\n\n config.options = $.extend(true, {}, config.options, {\n legend: {\n labels: {\n fontColor: this._computeLabelColor(config.type),\n generateLabels: this._legendLabelGenerator\n }\n }\n });\n }\n\n _computeLabelColor(type) {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'label'], 'fill').fill;\n }\n\n _generateLegendLabels(chart) {\n let config = chart.config,\n data = config.data,\n measureText = chart.ctx.measureText.bind(chart.ctx),\n horizontalSpace;\n if (scout.isOneOf(config.options.legend.position, Chart.Position.LEFT, Chart.Position.RIGHT)) {\n horizontalSpace = Math.min(250, this.$canvas.cssWidth() / 3);\n } else {\n horizontalSpace = Math.min(250, this.$canvas.cssWidth() * 2 / 3);\n }\n let defaultTypeGenerateLabels;\n if (ChartJs.defaults[config.type] && ChartJs.defaults[config.type].legend && ChartJs.defaults[config.type].legend.labels) {\n defaultTypeGenerateLabels = ChartJs.defaults[config.type].legend.labels.generateLabels;\n }\n let defaultGenerateLabels = defaultTypeGenerateLabels || ChartJs.defaults.global.legend.labels.generateLabels;\n let labels = defaultGenerateLabels.call(chart, chart);\n labels.forEach((elem, idx) => {\n elem.text = strings.truncateText(elem.text, horizontalSpace, measureText);\n let dataset = data.datasets[idx],\n fillStyle;\n if (dataset && scout.isOneOf((dataset.type || config.type), Chart.Type.LINE, Chart.Type.BAR, Chart.Type.BAR_HORIZONTAL, Chart.Type.RADAR, Chart.Type.BUBBLE)) {\n fillStyle = dataset.legendColor || this._adjustColorOpacity(dataset.borderColor, 1);\n } else if (data.datasets.length && scout.isOneOf(config.type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n dataset = data.datasets[0];\n let legendColor = Array.isArray(dataset.legendColor) ? dataset.legendColor[idx] : dataset.legendColor,\n backgroundColor = Array.isArray(dataset.backgroundColor) ? dataset.backgroundColor[idx] : dataset.backgroundColor;\n fillStyle = legendColor || this._adjustColorOpacity(backgroundColor, 1);\n }\n if (typeof fillStyle !== 'function') {\n elem.fillStyle = fillStyle;\n elem.strokeStyle = fillStyle;\n }\n });\n return labels;\n }\n\n _adjustTooltipColors(config) {\n if (!config || !config.type || !config.options) {\n return;\n }\n\n let tooltipBackgroundColor = this._computeTooltipBackgroundColor(config.type),\n tooltipBorderColor = this._computeTooltipBorderColor(config.type);\n\n config.options = $.extend(true, {}, config.options, {\n tooltips: {\n backgroundColor: tooltipBackgroundColor,\n borderColor: tooltipBorderColor,\n multiKeyBackground: tooltipBackgroundColor\n }\n });\n }\n\n _computeTooltipBackgroundColor(type) {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'tooltip-background'], 'fill').fill;\n }\n\n _computeTooltipBorderColor(type) {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'tooltip-border'], 'fill').fill;\n }\n\n _adjustScaleColors(config) {\n if (!config || !config.type || !config.options || !config.options.scale) {\n return;\n }\n\n let labelColor = this._computeLabelColor(config.type),\n labelBackdropColor = this._computeLabelBackdropColor(config.type),\n gridColor = this._computeGridColor(config.type);\n\n config.options.scale.ticks = $.extend(true, {}, config.options.scale.ticks, {\n fontColor: gridColor,\n backdropColor: labelBackdropColor\n });\n config.options.scale.pointLabels = $.extend(true, {}, config.options.scale.pointLabels, {\n fontColor: labelColor\n });\n config.options.scale.gridLines = $.extend(true, {}, config.options.scale.gridLines, {\n color: gridColor\n });\n }\n\n _computeLabelBackdropColor(type) {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'label-backdrop'], 'fill', {fill: this.firstOpaqueBackgroundColor}).fill;\n }\n\n _computeGridColor(type) {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'grid'], 'fill').fill;\n }\n\n _adjustScalesColors(config) {\n if (!config || !config.type || !config.options || !config.options.scales) {\n return;\n }\n\n let xAxes = config.options.scales.xAxes || [],\n yAxes = config.options.scales.yAxes || [],\n axes = [...xAxes, ...yAxes];\n\n if (!axes.length) {\n return;\n }\n\n let labelColor = this._computeLabelColor(config.type),\n gridColor = this._computeGridColor(config.type),\n axisLabelColor = this._computeAxisLabelColor(config.type);\n\n axes.forEach(elem => {\n elem.gridLines = $.extend(true, {}, elem.gridLines, {\n zeroLineColor: gridColor,\n color: gridColor\n });\n elem.ticks = $.extend(true, {}, elem.ticks, {\n fontColor: labelColor\n });\n elem.scaleLabel = $.extend(true, {}, elem.scaleLabel, {\n fontColor: axisLabelColor\n });\n });\n }\n\n _computeAxisLabelColor(type) {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'axis-label'], 'fill').fill;\n }\n\n _adjustPluginColors(config) {\n if (!config || !config.type || !config.options || !config.options.plugins) {\n return;\n }\n\n this._adjustPluginsDatalabelColors(config);\n }\n\n _adjustPluginsDatalabelColors(config) {\n if (!config || !config.type || !config.options || !config.options.plugins || !config.options.plugins.datalabels) {\n return;\n }\n\n config.options.plugins.datalabels = $.extend(true, {}, config.options.plugins.datalabels, {\n color: this._computeDatalabelColor(config.type)\n });\n }\n\n _computeDatalabelColor(type) {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'datalabel'], 'fill').fill;\n }\n\n _adjustClickHandler(config) {\n if (!config || !config.options) {\n return;\n }\n\n if (config.options.clickable) {\n config.options.onClick = this._clickHandler;\n config.options.onHover = this._pointerHoverHandler;\n } else {\n config.options.onHover = this._hoverHandler;\n }\n\n if (!config.options.legend) {\n return;\n }\n\n if (config.options.legend.clickable) {\n config.options.legend.onClick = this._legendClickHandler;\n config.options.legend.onHover = this._legendPointerHoverHandler;\n config.options.legend.onLeave = this._legendPointerLeaveHandler;\n } else {\n config.options.legend.onClick = e => e.stopPropagation();\n config.options.legend.onHover = this._legendHoverHandler;\n config.options.legend.onLeave = this._legendLeaveHandler;\n }\n }\n\n /**\n * @param {object[]} items\n * @param {number} items._index\n * @param {number} items._datasetIndex\n */\n _onClick(event, items) {\n if (!items.length || this._isMaxSegmentsExceeded(this.chartJs.config, items[0]._index)) {\n return;\n }\n\n let itemIndex = items[0]._index,\n datasetIndex = items[0]._datasetIndex,\n clickObject = {\n datasetIndex: datasetIndex,\n dataIndex: itemIndex\n };\n if (this.chartJs.config.type === Chart.Type.BUBBLE) {\n let data = this.chartJs.config.data.datasets[datasetIndex].data[itemIndex];\n clickObject.xIndex = data.x;\n clickObject.yIndex = data.y;\n } else {\n clickObject.xIndex = itemIndex;\n }\n\n let e = new Event();\n e.data = clickObject;\n e.originalEvent = event;\n this.chart._onValueClick(e);\n }\n\n _onHover(event, items) {\n if (!this.chartJs.config || !this.chartJs.config.type) {\n return;\n }\n\n let config = this.chartJs.config,\n type = config.type;\n if (!scout.isOneOf(type, Chart.Type.LINE, Chart.Type.BAR, Chart.Type.RADAR)) {\n return;\n }\n\n let update = false;\n if (this.resetDatasetAfterHover) {\n this._adjustColors(config);\n this.resetDatasetAfterHover = false;\n update = true;\n }\n items.forEach(item => {\n let dataset = config.data.datasets[item._datasetIndex];\n if (scout.isOneOf((dataset.type || type), Chart.Type.LINE, Chart.Type.RADAR)) {\n dataset.backgroundColor = dataset.hoverBackgroundColor;\n this.resetDatasetAfterHover = true;\n update = true;\n }\n });\n if (update) {\n this.chartJs.update();\n }\n }\n\n _onHoverPointer(event, items) {\n this._onHover(event, items);\n if (items.length && !this._isMaxSegmentsExceeded(this.chartJs.config, items[0]._index)) {\n this.$canvas.css('cursor', 'pointer');\n } else {\n this.$canvas.css('cursor', 'default');\n }\n }\n\n _onLegendClick(event, item) {\n if (!this.chartJs.config || !this.chartJs.config.type) {\n return;\n }\n\n let type = this.chartJs.config.type,\n defaultTypeLegendClick;\n if (ChartJs.defaults[type] && ChartJs.defaults[type].legend) {\n defaultTypeLegendClick = ChartJs.defaults[type].legend.onClick;\n }\n let defaultLegendClick = defaultTypeLegendClick || ChartJs.defaults.global.legend.onClick;\n defaultLegendClick.call(this.chartJs, event, item);\n this._onLegendLeave(event, item);\n this._onLegendHoverPointer(event, item, true);\n }\n\n _onLegendHover(event, item, animated) {\n let index = item.datasetIndex,\n config = this.chartJs.config,\n type = config.type;\n if (scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n index = item.index;\n }\n\n if (this.legendHoverDatasets.indexOf(index) > -1) {\n return;\n }\n\n let dataset = config.data.datasets[index],\n datasetType = dataset ? dataset.type : null;\n if ((datasetType || type) === Chart.Type.LINE) {\n dataset.backgroundColor = dataset.hoverBackgroundColor;\n this.chartJs.update();\n }\n this._updateHoverStyle(index, true);\n if (animated) {\n this.chartJs.render();\n } else {\n this.chartJs.render({duration: 0});\n }\n this.legendHoverDatasets.push(index);\n }\n\n _onLegendHoverPointer(event, item, animated) {\n this._onLegendHover(event, item, animated);\n this.$canvas.css('cursor', 'pointer');\n }\n\n _onLegendLeave(event, item) {\n let index = item.datasetIndex,\n config = this.chartJs.config,\n type = config.type;\n if (scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n index = item.index;\n }\n\n if (this.legendHoverDatasets.indexOf(index) < 0) {\n return;\n }\n\n let dataset = config.data.datasets[index],\n datasetType = dataset ? dataset.type : null;\n if ((datasetType || type) === Chart.Type.LINE) {\n this._adjustColors(config);\n this.chartJs.update();\n }\n this._updateHoverStyle(index, false);\n this.chartJs.render();\n this.legendHoverDatasets.splice(this.legendHoverDatasets.indexOf(index), 1);\n }\n\n _onLegendLeavePointer(event, item) {\n this._onLegendLeave(event, item);\n this.$canvas.css('cursor', 'default');\n }\n\n _updateHoverStyle(index, enabled) {\n let config = this.chartJs.config,\n type = config.type,\n datasets = config.data.datasets,\n dataset = datasets ? datasets[index] : null,\n datasetType = dataset ? dataset.type : null;\n if ((datasetType || type) === Chart.Type.LINE) {\n this.chartJs.updateHoverStyle(this.chartJs.getDatasetMeta(index).data, 'point', enabled);\n } else if (scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n let elements = [];\n for (let i = 0; i < datasets.length; i++) {\n elements.push(this.chartJs.getDatasetMeta(i).data[index]);\n }\n this.chartJs.updateHoverStyle(elements, 'point', enabled);\n } else {\n let elements = this.chartJs.getDatasetMeta(index).data;\n if (elements && elements.length) {\n this.chartJs.updateHoverStyle(this.chartJs.getDatasetMeta(index).data, 'dataset', enabled);\n }\n }\n }\n\n _adjustResizeHandler(config) {\n if (!config || !config.options) {\n return;\n }\n\n if (config.options.handleResize) {\n config.options.onResize = this._resizeHandler;\n }\n }\n\n _onResize(chart, size) {\n chart.update();\n this._adjustSize(chart.config, chart.chartArea);\n }\n\n _adjustSize(config, chartArea) {\n this._adjustBubbleSizes(config, chartArea);\n this._adjustGridMaxMin(config, chartArea);\n }\n\n _adjustBubbleSizes(config, chartArea) {\n if (config.type !== Chart.Type.BUBBLE) {\n return;\n }\n\n let datasets = config.data.datasets;\n // Scale all bubbles so that the largest radius is equal to sizeOfLargestBubble and the smallest greater than or equal to minBubbleSize.\n // First reset all radii.\n datasets.forEach(dataset => dataset.data.forEach(data => {\n if (!isNaN(data.z)) {\n data.r = Math.sqrt(data.z);\n }\n }));\n let maxMinR = this._computeMaxMinValue(datasets, 'r', true),\n maxR = maxMinR.maxValue,\n minR = maxMinR.minValue,\n // Compute a scalingFactor and an offset to get the new radius newR = r * scalingFactor + offset.\n bubbleScalingFactor = 1,\n bubbleRadiusOffset = 0,\n sizeOfLargestBubble = config.bubble ? config.bubble.sizeOfLargestBubble : 0,\n minBubbleSize = config.bubble ? config.bubble.minBubbleSize : 0;\n if (sizeOfLargestBubble) {\n let width = Math.abs(chartArea.right - chartArea.left),\n height = Math.abs(chartArea.top - chartArea.bottom);\n sizeOfLargestBubble = Math.min(sizeOfLargestBubble, Math.floor(Math.min(width, height) / 6));\n if (maxR === 0) {\n // If maxR is equal to 0, all radii are equal to 0, therefore set bubbleRadiusOffset to sizeOfLargestBubble.\n bubbleRadiusOffset = sizeOfLargestBubble;\n } else if (minBubbleSize && sizeOfLargestBubble > minBubbleSize && (minR / maxR) < (minBubbleSize / sizeOfLargestBubble)) {\n // If minR/maxR is smaller than minBubbleSize/sizeOfLargestBubble, then it is not sufficient to scale all radii.\n\n // The scalingFactor and the result from the following two conditions:\n // (1) minBubbleSize = offset + scalingFactor * minR\n // (2) sizeOfLargestBubble = offset + scalingFactor * maxR\n\n // Therefore\n // (1*) offset = minBubbleSize - scalingFactor * minR\n // (2*) offset = sizeOfLargestBubble - scalingFactor * maxR\n\n // (1*) = (2*):\n // minBubbleSize - scalingFactor * minR = sizeOfLargestBubble - scalingFactor * maxR\n // <=> scalingFactor * maxR - scalingFactor * minR = sizeOfLargestBubble - minBubbleSize\n // <=> scalingFactor * (maxR - minR) = sizeOfLargestBubble - minBubbleSize\n // <=> scalingFactor = (sizeOfLargestBubble - minBubbleSize) / (maxR - minR)\n bubbleScalingFactor = (sizeOfLargestBubble - minBubbleSize) / (maxR - minR);\n bubbleRadiusOffset = minBubbleSize - bubbleScalingFactor * minR;\n } else {\n // Scaling is sufficient.\n bubbleScalingFactor = sizeOfLargestBubble / maxR;\n }\n } else if (minBubbleSize && minBubbleSize > minR) {\n // sizeOfLargestBubble is not set\n if (minR === 0) {\n // If the smallest radius equals 0 scaling will have no effect.\n bubbleRadiusOffset = minBubbleSize;\n } else {\n // Scaling is sufficient.\n bubbleScalingFactor = minBubbleSize / minR;\n }\n }\n datasets.forEach(dataset => dataset.data.forEach(data => {\n if (!objects.isNullOrUndefined(data.r)) {\n data.r = data.r * bubbleScalingFactor + bubbleRadiusOffset;\n }\n }));\n }\n\n _computeMaxMinValue(datasets, identifier, exact, boundRange, padding, space) {\n if (!datasets) {\n return;\n }\n\n let maxValue, minValue;\n for (let i = 0; i < datasets.length; i++) {\n for (let j = 0; j < datasets[i].data.length; j++) {\n let value;\n if (identifier) {\n value = datasets[i].data[j][identifier];\n } else {\n value = datasets[i].data[j];\n }\n if (isNaN(maxValue)) {\n maxValue = value;\n } else {\n maxValue = Math.max(value, maxValue);\n }\n if (isNaN(minValue)) {\n minValue = value;\n } else {\n minValue = Math.min(value, minValue);\n }\n }\n }\n\n if (isNaN(maxValue)) {\n maxValue = 0;\n }\n if (isNaN(minValue)) {\n minValue = 0;\n }\n\n let adjust = 0,\n maxBoundary = maxValue,\n minBoundary = minValue;\n\n if (!exact) {\n if (boundRange && Math.sign(minValue) === Math.sign(maxValue)) {\n adjust = Math.floor(minValue);\n }\n maxBoundary = this._calculateBoundary(maxValue - adjust, Math.ceil, Math.floor);\n minBoundary = this._calculateBoundary(minValue - adjust, Math.floor, Math.ceil);\n }\n\n if (padding && space && space > 2 * padding) {\n let valuePerPixel = (maxValue - minValue) / (space - 2 * padding),\n paddingValue = valuePerPixel * padding;\n maxBoundary = Math.max(maxBoundary, maxValue - adjust + paddingValue);\n minBoundary = Math.min(minBoundary, minValue - adjust - paddingValue);\n }\n\n if (!exact) {\n return {\n maxValue: maxBoundary + adjust,\n minValue: minBoundary + adjust\n };\n }\n\n return {\n maxValue: maxBoundary,\n minValue: minBoundary\n };\n }\n\n _calculateBoundary(value, roundingFunctionPositive, roundingFunctionNegative) {\n let roundingFunction = roundingFunctionPositive;\n let changeValueSign = false;\n if (value < 0) {\n changeValueSign = true;\n value = value * (-1);\n roundingFunction = roundingFunctionNegative;\n }\n value = this._calculateBoundaryPositive(value, roundingFunction);\n if (changeValueSign) {\n value = value * (-1);\n }\n return value;\n }\n\n _calculateBoundaryPositive(value, roundingFunction) {\n if (!(value > 0) || !roundingFunction) {\n return value;\n }\n // example: the value 32689 should be rounded to 30000 for the roundingFunction Math.floor or 35000 for Math.ceil or Math.round\n\n // first calculate the exponent p of the largest 1ep smaller than the given value\n // example: the largest 1ep smaller than the value 32689 is 10000 = 1e4 and therefore p = 4\n let p = Math.floor(Math.log(value) / Math.LN10);\n // divide by 5e(p-1), round and multiply with 5e(p-1) to round the value in 5e(p-1) steps\n // example: the value is now divided by 5e(p-1) which means 32689 / 5e(4-1) = 32689 / 5e3 = 32689 / 5000 = 6.5378\n // this result is now rounded (Math.floor gives 6, Math.ceil and Math.round gives 7) and multiplied again with 5000 which results in 30000 or 35000 respectively\n if (p < 0) {\n value = roundingFunction(value * Math.pow(10, Math.abs(p)) / 5) * 5 / Math.pow(10, Math.abs(p));\n } else {\n value = roundingFunction(value / (5 * Math.pow(10, p - 1))) * 5 * Math.pow(10, p - 1);\n }\n return value;\n }\n\n _adjustGridMaxMin(config, chartArea) {\n if (!config || !config.type || !config.options || !config.options.adjustGridMaxMin || (!config.options.scale && !config.options.scales) || !chartArea) {\n return;\n }\n\n let type = config.type;\n if (!scout.isOneOf(type, Chart.Type.BAR, Chart.Type.BAR_HORIZONTAL, Chart.Type.LINE, Chart.Type.POLAR_AREA, Chart.Type.RADAR, Chart.Type.BUBBLE)) {\n return;\n }\n\n let width = Math.abs(chartArea.right - chartArea.left),\n height = Math.abs(chartArea.top - chartArea.bottom),\n maxXTicks = Math.max(Math.floor(width / this.minSpaceBetweenXTicks), 3),\n maxYTicks = Math.max(Math.floor(height / this.minSpaceBetweenYTicks), 3);\n\n let yBoundaries = this._computeYBoundaries(config, height),\n yBoundary = yBoundaries.yBoundary,\n yBoundaryDiffType = yBoundaries.yBoundaryDiffType;\n\n if (config.options.scale) {\n this._adjustScaleMaxMin(config.options.scale, maxYTicks, yBoundary);\n return;\n }\n\n let xAxes = config.options.scales.xAxes,\n yAxes = config.options.scales.yAxes;\n\n if (yBoundaryDiffType) {\n this._adjustAxes(arrays.ensure(yAxes[0]), maxYTicks, yBoundary);\n this._adjustAxes(arrays.ensure(yAxes[1]), maxYTicks, yBoundaryDiffType);\n } else if (type === Chart.Type.BAR_HORIZONTAL) {\n this._adjustAxes(xAxes, maxXTicks, yBoundary);\n } else {\n this._adjustAxes(yAxes, maxYTicks, yBoundary);\n }\n\n if (type !== Chart.Type.BUBBLE) {\n return;\n }\n\n let xBoundary = this._computeXBoundaryBubble(config, width);\n this._adjustAxes(xAxes, maxXTicks, xBoundary);\n }\n\n _computeBoundaryBubble(config, identifier, space) {\n if (!config || !config.type || config.type !== Chart.Type.BUBBLE || !config.data || !config.options || !config.options.scales || !(identifier === 'x' || identifier === 'y') || !space) {\n return;\n }\n\n let datasets = config.data.datasets,\n axes = config.options.scales[identifier + 'Axes'],\n axis = (axes && axes.length) ? axes[0] : null,\n offset = axis && axis.offset,\n labelMap = config.options.scales[identifier + 'LabelMap'],\n boundary;\n\n let maxR = this._computeMaxMinValue(datasets, 'r', true).maxValue,\n padding = maxR;\n if (config.options.elements && config.options.elements.point && config.options.elements.point.hoverRadius) {\n padding = padding + config.options.elements.point.hoverRadius;\n }\n\n if (offset) {\n boundary = this._computeMaxMinValue(datasets, identifier, labelMap, true);\n } else {\n boundary = this._computeMaxMinValue(datasets, identifier, labelMap, true, padding, space);\n }\n if (labelMap) {\n boundary.maxValue = Math.ceil(boundary.maxValue);\n boundary.minValue = Math.floor(boundary.minValue);\n }\n return boundary;\n }\n\n _computeXBoundaryBubble(config, width) {\n return this._computeBoundaryBubble(config, 'x', width);\n }\n\n _computeYBoundaryBubble(config, height) {\n return this._computeBoundaryBubble(config, 'y', height);\n }\n\n _computeYBoundaries(config, height) {\n if (!config || !config.type) {\n return {};\n }\n\n let type = config.type,\n yBoundary,\n yBoundaryDiffType;\n\n if (type === Chart.Type.BUBBLE) {\n yBoundary = this._computeYBoundaryBubble(config, height);\n } else {\n let datasets = [],\n datasetsDiffType = [];\n if (config.data && config.data.datasets) {\n config.data.datasets.forEach(dataset => {\n if (dataset.type && dataset.type !== type) {\n datasetsDiffType.push(dataset);\n } else {\n datasets.push(dataset);\n }\n });\n }\n\n yBoundary = this._computeMaxMinValue(datasets);\n\n if (datasets.length && datasetsDiffType.length) {\n yBoundaryDiffType = this._computeMaxMinValue(datasetsDiffType);\n let yBoundaryRange = yBoundary.maxValue - yBoundary.minValue,\n yBoundaryRangeDiffType = yBoundaryDiffType.maxValue - yBoundaryDiffType.minValue;\n if (yBoundaryRange && yBoundaryRangeDiffType && (yBoundaryRange / yBoundaryRangeDiffType > 10 || yBoundaryRangeDiffType / yBoundaryRange > 10)) {\n this._adjustYAxisDiffType(config, datasets, datasetsDiffType);\n }\n }\n }\n\n return {\n yBoundary: yBoundary,\n yBoundaryDiffType: yBoundaryDiffType\n };\n }\n\n _adjustYAxisDiffType(config, datasets, datasetsDiffType) {\n if (!config || !config.type || !datasets || !datasets.length || !datasetsDiffType || !datasetsDiffType.length) {\n return;\n }\n\n if (!config.options || !config.options.scales || !config.options.scales.yAxes || config.options.scales.yAxes.length !== 1) {\n return;\n }\n\n let type = config.type,\n scales = config.options.scales,\n yAxis = scales.yAxes[0],\n yAxisDiffType = $.extend(true, {}, yAxis);\n scales.yAxes.push(yAxisDiffType);\n\n yAxis.id = 'yAxis';\n yAxisDiffType.id = 'yAxisDiffType';\n\n if (config.data && config.data.datasets && config.data.datasets.length && config.data.datasets[0].type && config.data.datasets[0].type !== type) {\n yAxisDiffType.position = Chart.Position.LEFT;\n yAxis.position = Chart.Position.RIGHT;\n yAxis.gridLines.drawOnChartArea = false;\n } else {\n yAxis.position = Chart.Position.LEFT;\n yAxisDiffType.position = Chart.Position.RIGHT;\n yAxisDiffType.gridLines.drawOnChartArea = false;\n }\n\n yAxis.gridLines.drawBorder = true;\n yAxis.gridLines.drawTicks = true;\n yAxisDiffType.gridLines.drawBorder = true;\n yAxisDiffType.gridLines.drawTicks = true;\n\n let yAxisType = (datasets[0].type || type),\n yAxisDiffTypeType = (datasetsDiffType[0].type || type),\n yAxisTypeLabel = this.chart.session.text('ui.' + yAxisType),\n yAxisDiffTypeTypeLabel = this.chart.session.text('ui.' + yAxisDiffTypeType),\n yAxisScaleLabel = scales.scaleLabelByTypeMap ? scales.scaleLabelByTypeMap[yAxisType] : null,\n yAxisDiffTypeScaleLabel = scales.scaleLabelByTypeMap ? scales.scaleLabelByTypeMap[yAxisDiffTypeType] : null;\n\n yAxis.scaleLabel.display = true;\n yAxis.scaleLabel.labelString = yAxisScaleLabel ? yAxisScaleLabel + ' (' + yAxisTypeLabel + ')' : yAxisTypeLabel;\n yAxisDiffType.scaleLabel.display = true;\n yAxisDiffType.scaleLabel.labelString = yAxisDiffTypeScaleLabel ? yAxisDiffTypeScaleLabel + ' (' + yAxisDiffTypeTypeLabel + ')' : yAxisDiffTypeTypeLabel;\n\n datasets.forEach(dataset => {\n dataset.yAxisID = 'yAxis';\n });\n datasetsDiffType.forEach(dataset => {\n dataset.yAxisID = 'yAxisDiffType';\n });\n }\n\n _adjustScaleMaxMin(scale, maxTicks, maxMinValue) {\n scale.ticks = $.extend(true, {}, scale.ticks, {\n maxTicksLimit: Math.ceil(maxTicks / 2),\n stepSize: (this.onlyIntegers ? 1 : undefined)\n });\n if (maxMinValue) {\n scale.ticks.suggestedMax = maxMinValue.maxValue;\n scale.ticks.suggestedMin = maxMinValue.minValue;\n }\n }\n\n _adjustAxes(axes, maxTicks, maxMinValue) {\n if (!axes || !Array.isArray(axes) || !axes.length) {\n return;\n }\n\n for (let i = 0; i < axes.length; i++) {\n axes[i] = $.extend(true, {}, axes[i], {\n ticks: {\n maxTicksLimit: maxTicks,\n stepSize: (this.onlyIntegers ? 1 : undefined)\n }\n });\n if (maxMinValue) {\n axes[i].ticks.suggestedMax = maxMinValue.maxValue;\n axes[i].ticks.suggestedMin = maxMinValue.minValue;\n }\n }\n }\n\n _remove(afterRemoveFunc) {\n if (this.rendered) {\n this.$canvas.remove();\n this.$canvas = null;\n this.chartJs.destroy();\n this.chartJs = null;\n }\n super._remove(afterRemoveFunc);\n }\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {App, Device} from '@eclipse-scout/core';\nimport ChartJs from 'chart.js';\n\nChartJs.defaults.global.plugins.tooltipDelay = {\n showTooltipDelay: 700,\n resetTooltipDelay: 200\n};\n\nlet pluginId = 'tooltipDelay';\n\n/**\n * copied from chart.js core_plugins.notify\n */\nlet _notifyOthers = (chart, hook, args) => {\n // <customized>\n let descriptors = chart.$plugins.descriptors;\n // </customized>\n let ilen = descriptors.length;\n let i, descriptor, plugin, params, method;\n\n for (i = 0; i < ilen; ++i) {\n descriptor = descriptors[i];\n plugin = descriptor.plugin;\n // <customized>\n if (plugin.id === pluginId) {\n continue;\n }\n // </customized>\n method = plugin[hook];\n if (typeof method === 'function') {\n params = [chart].concat(args || []);\n params.push(descriptor.options);\n if (method.apply(plugin, params) === false) {\n return false;\n }\n }\n }\n\n return true;\n};\n\n/**\n * copied from chart.js _drawTooltip\n */\nlet _drawTooltip = (chart, args) => {\n // <customized>\n if (!chart.ctx) {\n return;\n }\n let tooltip = chart.tooltip;\n\n if (_notifyOthers(chart, 'beforeTooltipDraw', [args]) === false) {\n // </customized>\n return;\n }\n\n tooltip.draw();\n\n // <customized>\n _notifyOthers(chart, 'afterTooltipDraw', [args]);\n // </customized>\n};\n\n/**\n * @typedef IPlugin\n */\n\n/**\n * @type IPlugin\n */\nexport default class ChartJsTooltipDelay {\n constructor() {\n this.id = pluginId;\n this._chartTooltipVisible = false;\n this._chartTooltipShowTimeoutIds = []; // timeoutIds\n this._chartTooltipHideTimeoutIds = []; // timeoutIds\n }\n\n beforeTooltipDraw(chart, args, options) {\n let tooltip = chart.tooltip,\n showTooltipDelay = options.showTooltipDelay,\n resetTooltipDelay = options.resetTooltipDelay;\n\n if ((tooltip._active || []).length) {\n if (!this._chartTooltipVisible) {\n this._chartTooltipShowTimeoutIds.push(setTimeout(() => {\n this._chartTooltipShowTimeoutIds = [];\n this._chartTooltipVisible = true;\n _drawTooltip(chart, args);\n }, showTooltipDelay));\n } else {\n this._chartTooltipHideTimeoutIds.forEach(tid => clearTimeout(tid));\n this._chartTooltipHideTimeoutIds = [];\n _drawTooltip(chart, args);\n }\n } else {\n if (this._chartTooltipVisible) {\n this._chartTooltipHideTimeoutIds.push(setTimeout(() => {\n this._chartTooltipHideTimeoutIds = [];\n this._chartTooltipVisible = false;\n }, resetTooltipDelay));\n _drawTooltip(chart, args);\n } else {\n this._chartTooltipShowTimeoutIds.forEach(tid => clearTimeout(tid));\n this._chartTooltipShowTimeoutIds = [];\n }\n }\n\n return false;\n }\n}\n\nApp.addListener('init', () => {\n if (!Device.get().supportsOnlyTouch()) {\n ChartJs.plugins.register(new ChartJsTooltipDelay());\n }\n});\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {AbstractLayout} from '@eclipse-scout/core';\nimport {Chart} from '../index';\n\nexport default class ChartLayout extends AbstractLayout {\n\n constructor(chart) {\n super();\n this.chart = chart;\n }\n\n layout($container) {\n let opts = {\n requestAnimation: true,\n debounce: Chart.DEFAULT_DEBOUNCE_TIMEOUT\n };\n // Don't request animations when the session is not ready or the chart was already updated once\n if (!this.chart.session.ready || this.chart.updatedOnce) {\n opts.requestAnimation = false;\n }\n // Don't debounce while session is not yet ready. Otherwise, it might happen that the area to layout is not\n // attached anymore because some other view tab is in front when the setTimeout() functions is finally called.\n if (!this.chart.session.ready) {\n opts.debounce = false;\n }\n this.chart.updateChart(opts);\n }\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {objects, scout} from '@eclipse-scout/core';\nimport {AbstractSvgChartRenderer} from '../index';\nimport $ from 'jquery';\n\nexport default class FulfillmentChartRenderer extends AbstractSvgChartRenderer {\n\n constructor(chart) {\n super(chart);\n\n this.animationTriggered = false;\n this.r;\n\n this.segmentSelectorForAnimation = '.fulfillment-chart';\n this.suppressLegendBox = true;\n\n let defaultConfig = {\n fulfillment: {\n startValue: undefined\n }\n };\n chart.config = $.extend(true, {}, defaultConfig, chart.config);\n }\n\n _validate() {\n let chartValueGroups = this.chart.data.chartValueGroups;\n if (chartValueGroups.length !== 2 ||\n chartValueGroups[0].values.length !== 1 ||\n chartValueGroups[1].values.length !== 1) {\n return false;\n }\n return true;\n }\n\n _renderInternal() {\n // Calculate percentage\n let chartData = this.chart.data;\n let value = chartData.chartValueGroups[0].values[0];\n let total = chartData.chartValueGroups[1].values[0];\n\n this.fullR = (Math.min(this.chartBox.height, this.chartBox.width) / 2) - 2;\n\n this._renderInnerCircle();\n this._renderPercentage(value, total);\n }\n\n _renderPercentage(value, total) {\n // arc segment\n let arcClass = 'fulfillment-chart',\n color = this.chart.data.chartValueGroups[0].colorHexValue,\n chartGroupCss = this.chart.data.chartValueGroups[0].cssClass;\n\n if (this.chart.config.options.autoColor) {\n arcClass += ' auto-color';\n } else if (chartGroupCss) {\n arcClass += ' ' + chartGroupCss;\n }\n\n let startValue = scout.nvl(this.chart.config.fulfillment.startValue, 0);\n let end = 0;\n let lastEnd = 0;\n if (total) {\n // use slightly less than 1.0 as max value because otherwise, the SVG element would not be drawn correctly.\n end = Math.min(value / total, 0.999999);\n lastEnd = Math.min(startValue / total, 0.999999);\n }\n this.r = this.fullR;\n\n let that = this;\n let tweenInFunc = function(now, fx) {\n let $this = $(this);\n let start = $this.data('animation-start'),\n end = $this.data('animation-end');\n $this.attr('d', that.pathSegment(start * fx.pos, lastEnd + (end - lastEnd) * fx.pos));\n };\n\n let $arc = this.$svg.appendSVG('path', arcClass)\n .data('animation-start', 0)\n .data('animation-end', end);\n\n let radius2 = (this.fullR / 8) * 6.7;\n let $transparentCircle = this._renderCirclePath('fulfillment-chart-inner-circle-transparent', 'InnerCircle3', radius2);\n $transparentCircle.css('fill', this.firstOpaqueBackgroundColor);\n\n // Label\n let percentage = (total ? Math.round((value / total) * 100) : 0);\n let $label = this.$svg.appendSVG('text', 'fulfillment-chart-label ')\n .attr('x', this.chartBox.mX())\n .attr('y', this.chartBox.mY())\n .css('font-size', (this.fullR / 2) + 'px') // font of label in center relative to circle radius\n .attr('dy', '0.3em') // workaround for 'dominant-baseline: central' which is not supported in IE\n .attrXLINK('href', '#InnerCircle')\n .text(percentage + '%');\n\n if (this.chart.config.options.clickable) {\n $arc.on('click', this._createClickObject(null, null), this.chart._onValueClick.bind(this.chart));\n }\n if (!this.chart.config.options.autoColor && !chartGroupCss) {\n $arc.attr('fill', color);\n }\n if (this.animationDuration) {\n $arc\n .attr('d', this.pathSegment(0, lastEnd))\n .animate({\n tabIndex: 0\n }, this._createAnimationObjectWithTabIndexRemoval(tweenInFunc, this.animationDuration));\n\n $label\n .attr('opacity', 0)\n .animateSVG('opacity', 1, this.animationDuration, null, true);\n } else {\n $arc.attr('d', this.pathSegment(0, end));\n }\n }\n\n pathSegment(start, end) {\n let s = start * 2 * Math.PI,\n e = end * 2 * Math.PI,\n pathString = '';\n\n pathString += 'M' + (this.chartBox.mX() + this.r * Math.sin(s)) + ',' + (this.chartBox.mY() - this.r * Math.cos(s));\n pathString += 'A' + this.r + ', ' + this.r;\n pathString += (end - start < 0.5) ? ' 0 0,1 ' : ' 0 1,1 ';\n pathString += (this.chartBox.mX() + this.r * Math.sin(e)) + ',' + (this.chartBox.mY() - this.r * Math.cos(e));\n pathString += 'L' + this.chartBox.mX() + ',' + this.chartBox.mY() + 'Z';\n\n return pathString;\n }\n\n _renderCirclePath(cssClass, id, radius) {\n let chartGroupCss = this.chart.data.chartValueGroups[0].cssClass;\n let color = this.chart.data.chartValueGroups[1].colorHexValue;\n\n if (this.chart.config.options.autoColor) {\n cssClass += ' auto-color';\n } else if (chartGroupCss) {\n cssClass += ' ' + chartGroupCss;\n }\n\n let radius2 = radius * 2;\n let $path = this.$svg.appendSVG('path', cssClass)\n .attr('id', id)\n .attr('d', 'M ' + this.chartBox.mX() + ' ' + this.chartBox.mY() +\n ' m 0, ' + (-radius) +\n ' a ' + radius + ',' + radius + ' 0 1, 1 0,' + radius2 +\n ' a ' + radius + ',' + radius + ' 0 1, 1 0,' + (-radius2));\n\n if (!this.chart.config.options.autoColor && !chartGroupCss) {\n $path\n .attr('fill', color)\n .attr('stroke', color);\n }\n\n return $path;\n }\n\n _renderInnerCircle() {\n let radius = (this.fullR / 8) * 7.5,\n radius2 = (this.fullR / 8) * 7.2;\n\n this._renderCirclePath('fulfillment-chart-inner-circle', 'InnerCircle', radius);\n let $transparentCircle = this._renderCirclePath('fulfillment-chart-inner-circle-transparent', 'InnerCircle2', radius2);\n $transparentCircle.css('fill', this.firstOpaqueBackgroundColor);\n }\n\n /**\n * Do not animate the removal of the chart if the chart data has been updated and the startValue option is set.\n * If startValue is not set use default implementation.\n */\n shouldAnimateRemoveOnUpdate(opts) {\n let startValue = objects.optProperty(this.chart, 'config', 'fulfillment', 'startValue');\n if (!objects.isNullOrUndefined(startValue)) {\n return false;\n }\n\n return super.shouldAnimateRemoveOnUpdate(opts);\n }\n\n _removeAnimated(afterRemoveFunc) {\n if (this.animationTriggered) {\n return;\n }\n let that = this;\n let tweenOut = function(now, fx) {\n let $this = $(this);\n let start = $this.data('animation-start'),\n end = $this.data('animation-end');\n $this.attr('d', that.pathSegment(start * (1 - fx.pos), end * (1 - fx.pos)));\n };\n\n this.animationTriggered = true;\n this.$svg.children(this.segmentSelectorForAnimation)\n .animate({\n tabIndex: 0\n }, this._createAnimationObjectWithTabIndexRemoval(tweenOut))\n .promise()\n .done(() => {\n this._remove(afterRemoveFunc);\n this.animationTriggered = false;\n });\n }\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {strings} from '@eclipse-scout/core';\nimport {AbstractSvgChartRenderer} from '../index';\nimport $ from 'jquery';\n\nexport default class SalesfunnelChartRenderer extends AbstractSvgChartRenderer {\n\n constructor(chart) {\n super(chart);\n\n this.segmentSelectorForAnimation = '.salesfunnel-chart-bar';\n this.widthThresholdMedium = 400;\n this.widthThresholdSmall = 200;\n // Constants for \"normalized mode\"\n // Width of a bar is calculated by multiplying this value with the previous bar's width\n this.barDeltaPercentage = 0.95;\n // Factor to be multiplied with the last bar's width. This will create a funnel effect, because\n // the last bar is considerably smaller than the other bars.\n this.lastBarAdditionalPercentage = 0.7;\n // Percentage of the total width the last bar always has (delta might get smaller due to this constraint).\n this.lastBarMinWidthPercentage = 0.4;\n this.suppressLegendBox = true;\n\n let defaultConfig = {\n salesfunnel: {\n normalized: undefined,\n calcConversionRate: undefined\n }\n };\n chart.config = $.extend(true, {}, defaultConfig, chart.config);\n }\n\n _validate() {\n let chartData = this.chart.data;\n let chartConfig = this.chart.config;\n if (!chartData ||\n !chartConfig ||\n chartData.axes.length !== chartData.chartValueGroups.length ||\n chartData.chartValueGroups.length === 0 ||\n chartData.chartValueGroups[0].values.length === 0 ||\n chartConfig.salesfunnel.normalized === undefined ||\n chartConfig.salesfunnel.calcConversionRate === undefined) {\n return false;\n }\n return true;\n }\n\n _renderInternal() {\n let chartData = this.chart.data,\n bars = chartData.chartValueGroups.length;\n\n this.conversionRateWidth = this._dynamicConversionRateWidth();\n this.dataAnalyzeResult = this._analyzeData(chartData.chartValueGroups);\n this.paddingBetweenLabel = 20;\n this.barHeight = this.chartBox.height / bars;\n this.barAreaHeight = this.barHeight * bars;\n this.barAreaWidth = this.chartBox.width -\n this.dataAnalyzeResult.maxLengthFirstValueRow -\n (this.paddingBetweenLabel * this.dataAnalyzeResult.labelCount) -\n this.dataAnalyzeResult.maxLengthSecondValueRow -\n this.conversionRateWidth;\n this.centerX = this.barAreaWidth / 2;\n\n if (this.chart.config.salesfunnel.normalized) {\n this._renderBarsNormalized(chartData.chartValueGroups);\n } else {\n this._renderBarsAccordingToValues(chartData.chartValueGroups);\n }\n\n this._addClipping('salesfunnel-chart-bar');\n }\n\n _renderBarsNormalized(chartValueGroups) {\n let barCount = chartValueGroups.length;\n let startPointX = this.barAreaWidth +\n this.dataAnalyzeResult.maxLengthFirstValueRow +\n this.dataAnalyzeResult.maxLengthSecondValueRow +\n (this.paddingBetweenLabel * (this.dataAnalyzeResult.labelCount + 1));\n\n let delta = this.barAreaWidth * (1 - this.barDeltaPercentage);\n let minLastWidth = this.barAreaWidth * this.lastBarMinWidthPercentage;\n let secondLastWidth = minLastWidth / this.lastBarAdditionalPercentage;\n delta = Math.min(delta, (this.barAreaWidth - secondLastWidth) / (barCount - 1));\n\n for (let i = 0; i < barCount; i++) {\n let width = this.barAreaWidth - (i * delta),\n barLabel = chartValueGroups[i].groupName,\n widthBottom = this.barAreaWidth - ((i + 1) * delta),\n yCoord = i * this.barHeight;\n\n let renderPolyOptions = {\n xStart: this.centerX,\n yStart: yCoord,\n rect: true,\n width: width,\n widthBottom: widthBottom,\n cssClass: 'salesfunnel-chart-bar',\n fill: chartValueGroups[i].colorHexValue,\n label: chartValueGroups[i].groupName,\n clickObject: this._createClickObject(null, i)\n };\n\n if (this.chart.config.options.autoColor) {\n renderPolyOptions.cssClass += ' auto-color color0';\n } else if (this.chart.data.chartValueGroups[i].cssClass) {\n renderPolyOptions.cssClass += ' ' + this.chart.data.chartValueGroups[i].cssClass;\n }\n\n // Adjust last widths to look like funnel.\n if (i === barCount - 1) {\n renderPolyOptions.width = renderPolyOptions.width * this.lastBarAdditionalPercentage;\n renderPolyOptions.widthBottom = renderPolyOptions.widthBottom * this.lastBarAdditionalPercentage;\n }\n\n this._renderPolygon(renderPolyOptions);\n this._renderLabel(chartValueGroups[i].values[0], false, i);\n this._renderBarLabel(barLabel, i, renderPolyOptions.widthBottom);\n let labelLineWidth = this.dataAnalyzeResult.maxLengthFirstValueRow + this.paddingBetweenLabel;\n if (chartValueGroups[i].values.length > 1) {\n this._renderLabel(chartValueGroups[i].values[1], true, i);\n labelLineWidth += this.dataAnalyzeResult.maxLengthSecondValueRow + this.paddingBetweenLabel;\n }\n if (i > 0) {\n this._renderLabelSeparatorLine(yCoord, labelLineWidth);\n if (this.chart.config.salesfunnel.calcConversionRate) {\n this._renderConversionRate(i, startPointX, this._calcConversionRate(chartValueGroups[i - 1].values[0], chartValueGroups[i].values[0]));\n }\n }\n }\n }\n\n _renderLabel(label, secondLabel, barIndexFromTop) {\n if (label === null) {\n return;\n }\n let y = (barIndexFromTop * this.barHeight) + (this.barHeight / 2),\n labelOffset = this.dataAnalyzeResult.maxLengthFirstValueRow + (secondLabel ? this.dataAnalyzeResult.maxLengthSecondValueRow : 0),\n labelIndex = secondLabel ? 2 : 1,\n x = this.barAreaWidth + labelOffset + (labelIndex * this.paddingBetweenLabel),\n labelClass = this._dynamicCssClass('salesfunnel-label');\n\n let $label = this.$svg.appendSVG('text', labelClass)\n .attr('x', x)\n .attr('y', y)\n .text(this.session.locale.decimalFormat.format(label));\n if (this.animationDuration) {\n $label\n .attr('opacity', 0)\n .animateSVG('opacity', 1, this.animationDuration, null, true);\n }\n if (this.chart.config.options.tooltips.enabled && this.chart.data.axes.length > 0) {\n let desc = this.chart.data.axes[barIndexFromTop][secondLabel ? 1 : 0].label,\n textBoundings = this._measureText(label, labelClass);\n this._renderWireLabels(desc, $label, x - textBoundings.width / 2, y - textBoundings.height);\n }\n }\n\n _renderWireLabels(label, $text, x1, y1) {\n let legendPositions = {\n x1: x1,\n x2: x1 - 10,\n y1: y1,\n y2: y1 - 10,\n v: -1,\n h: -1\n };\n // calculate opening direction\n let labelPositionFunc = (labelWidth, labelHeight) => {\n if (legendPositions.y2 - labelHeight < 0) {\n legendPositions.v = 1;\n legendPositions.y1 = legendPositions.y1 + labelHeight * 1.5;\n legendPositions.y2 = legendPositions.y1 + 10;\n }\n return legendPositions;\n };\n\n legendPositions.autoPosition = true;\n legendPositions.posFunc = labelPositionFunc;\n let\n legend = this._renderWireLegend(label, legendPositions, 'line-chart-wire-label', 'wire-label-line-white', false),\n mouseIn = legend.attachFunc.bind(legend),\n mouseOut = legend.detachFunc.bind(legend);\n legend.detachFunc();\n $text.mouseenter(mouseIn)\n .mouseleave(mouseOut);\n }\n\n _renderBarLabel(label, barIndexFromTop, barWidth) {\n let y = (barIndexFromTop * this.barHeight) + (this.barHeight / 2),\n x = this.centerX,\n labelClass = this._dynamicCssClass('salesfunnel-bar-label');\n\n this._renderLineLabel(x, y, label, labelClass, true);\n }\n\n _renderConversionRate(barIndexFromTop, startPointX, conversionRate) {\n if (conversionRate === undefined) {\n return;\n }\n let ctrlY = barIndexFromTop * this.barHeight,\n labelRenderPointY = ctrlY,\n labelClass = this._dynamicCssClass('salesfunnel-conversionrate-label');\n\n let $label = this.$svg.appendSVG('text', labelClass)\n .attr('x', startPointX)\n .attr('y', labelRenderPointY)\n .text('↓ ' + conversionRate + '%');\n if (this.animationDuration) {\n $label\n .attr('opacity', 0)\n .animateSVG('opacity', 1, this.animationDuration, null, true);\n }\n }\n\n _renderPolygon(renderPolyOptions) {\n let that = this,\n points = this._calcPolygonPoints(true, this.animationDuration ? 0 : 1, renderPolyOptions.xStart, renderPolyOptions.yStart, renderPolyOptions.width, renderPolyOptions.widthBottom, this.barHeight - 1);\n\n let $poly = this.$svg.appendSVG('polygon', renderPolyOptions.cssClass, '', renderPolyOptions.id)\n .attr('points', points)\n .attr('opacity', renderPolyOptions.opacity)\n .data('xStart', renderPolyOptions.xStart)\n .data('yStart', renderPolyOptions.yStart)\n .data('widthBar', renderPolyOptions.width)\n .data('widthBottom', renderPolyOptions.widthBottom)\n .data('heightBar', this.barHeight);\n if (!this.chart.config.options.autoColor && renderPolyOptions.fill) {\n $poly.attr('fill', renderPolyOptions.fill);\n }\n $poly.css('stroke', this.firstOpaqueBackgroundColor);\n\n let expandFunc = function(now, fx) {\n let $this = $(this);\n let xStart = $this.data('xStart'),\n yStart = $this.data('yStart'),\n width = $this.data('widthBar'),\n height = $this.data('heightBar'),\n widthBottom = $this.data('widthBottom');\n $this.attr('points', that._calcPolygonPoints(true, fx.pos, xStart, yStart, width, widthBottom, height));\n };\n\n if (this.animationDuration) {\n $poly.animate({\n tabIndex: 0\n }, this._createAnimationObjectWithTabIndexRemoval(expandFunc, this.animationDuration));\n }\n if (this.chart.config.options.clickable) {\n $poly.on('click', renderPolyOptions.clickObject, this.chart._onValueClick.bind(this.chart));\n }\n if (renderPolyOptions.fill) {\n $poly.attr('fill', renderPolyOptions.fill);\n }\n\n return $poly;\n }\n\n _calcPolygonPoints(expand, fxPos, xStart, yStart, width, widthBottom, height) {\n let xOffsetTop = 0,\n xOffsetBottom = 0;\n if (expand) {\n xOffsetTop = width / 2 * fxPos;\n xOffsetBottom = widthBottom / 2 * fxPos;\n } else {\n xOffsetTop = (width / 2) - (width / 2 * fxPos);\n xOffsetBottom = (widthBottom / 2) - (widthBottom / 2 * fxPos);\n }\n let x1 = xStart - xOffsetTop,\n y1 = yStart,\n x2 = xStart + xOffsetTop,\n y2 = y1,\n x3 = xStart + xOffsetBottom,\n y3 = yStart + height,\n x4 = xStart - xOffsetBottom,\n y4 = y3;\n return x1 + ',' + y1 + ' ' + x2 + ',' + y2 + ' ' + x3 + ',' + y3 + ' ' + x4 + ',' + y4 + ' ';\n }\n\n _renderBarsAccordingToValues(chartValueGroups) {\n let widthPerN = (this.dataAnalyzeResult.maxValue ? this.barAreaWidth * 0.8 / this.dataAnalyzeResult.maxValue : 0),\n startPointX = this.barAreaWidth + this.dataAnalyzeResult.maxLengthFirstValueRow + this.dataAnalyzeResult.maxLengthSecondValueRow + this.paddingBetweenLabel * this.dataAnalyzeResult.labelCount + 2 * this.paddingBetweenLabel,\n barCount = chartValueGroups.length;\n\n for (let i = 0; i < barCount; i++) {\n let width = chartValueGroups[i].values[0] * widthPerN + this.barAreaWidth * 0.2,\n barLabel = chartValueGroups[i].groupName,\n yCoord = i * this.barHeight;\n\n let renderPolyOptions = {\n xStart: this.centerX,\n yStart: yCoord,\n rect: true,\n width: width,\n widthBottom: width,\n cssClass: 'salesfunnel-chart-bar',\n fill: chartValueGroups[i].colorHexValue,\n label: chartValueGroups[i].groupName,\n clickObject: this._createClickObject(null, i)\n };\n\n if (this.chart.config.options.autoColor) {\n renderPolyOptions.cssClass += ' auto-color color0';\n } else if (this.chart.data.chartValueGroups[i].cssClass) {\n renderPolyOptions.cssClass += ' ' + this.chart.data.chartValueGroups[i].cssClass;\n }\n\n this._renderPolygon(renderPolyOptions);\n this._renderLabel(chartValueGroups[i].values[0], false, i);\n this._renderBarLabel(barLabel, i, renderPolyOptions.widthBottom);\n let labelLineWidth = this.dataAnalyzeResult.maxLengthFirstValueRow + this.paddingBetweenLabel;\n if (chartValueGroups[i].values.length > 1) {\n this._renderLabel(chartValueGroups[i].values[1], true, i);\n labelLineWidth += this.dataAnalyzeResult.maxLengthSecondValueRow + this.paddingBetweenLabel;\n }\n if (i > 0) {\n this._renderLabelSeparatorLine(yCoord, labelLineWidth);\n if (this.chart.config.salesfunnel.calcConversionRate) {\n this._renderConversionRate(i, startPointX, this._calcConversionRate(chartValueGroups[i - 1].values[0], chartValueGroups[i].values[0]));\n }\n }\n }\n }\n\n _renderLabelSeparatorLine(yCoord, labelLineWidth) {\n let $line = this.$svg.appendSVG('line', 'label-separator')\n .attr('x1', this.barAreaWidth + this.paddingBetweenLabel)\n .attr('y1', yCoord)\n .attr('x2', this.barAreaWidth + labelLineWidth)\n .attr('y2', yCoord);\n if (this.animationDuration) {\n $line\n .attr('opacity', 0)\n .animateSVG('opacity', 1, this.animationDuration, null, true);\n }\n }\n\n _calcConversionRate(valueBefore, value) {\n let returnValue = 0;\n if (valueBefore === 0) {\n returnValue = undefined;\n } else if (value !== valueBefore) {\n returnValue = Math.round(value / valueBefore * 100);\n }\n return returnValue;\n }\n\n _analyzeData(valueGroups) {\n let result = {\n labelCount: 0,\n maxValue: null,\n maxLengthFirstValueRow: 0,\n maxLengthSecondValueRow: 0\n },\n labelClass = this._dynamicCssClass('salesfunnel-label');\n\n for (let i = 0; i < valueGroups.length; i++) {\n\n let valueGroup = valueGroups[i];\n result.labelCount = Math.max(result.labelCount, valueGroup.values.length);\n // only first value is relevant for bar\n if (valueGroup.values.length > 0 && valueGroup.values[0]) {\n if (result.maxValue === null) {\n result.maxValue = valueGroup.values[0];\n } else {\n result.maxValue = Math.max(result.maxValue, valueGroup.values[0]);\n }\n result.maxLengthFirstValueRow = Math.max(result.maxLengthFirstValueRow, this._measureText(this.session.locale.decimalFormat.format(valueGroup.values[0]), labelClass).width);\n }\n if (valueGroup.values.length > 1 && valueGroup.values[1]) {\n result.maxLengthSecondValueRow = Math.max(result.maxLengthSecondValueRow, this._measureText(this.session.locale.decimalFormat.format(valueGroup.values[1]), labelClass).width);\n }\n }\n return result;\n }\n\n _removeAnimated(afterRemoveFunc) {\n if (this.animationTriggered) {\n return;\n }\n this.animationTriggered = true;\n let that = this,\n shrink = function(now, fx) {\n let $this = $(this);\n let xStart = $this.data('xStart'),\n yStart = $this.data('yStart'),\n width = $this.data('widthBar'),\n height = $this.data('heightBar'),\n widthBottom = $this.data('widthBottom');\n $this.attr('points', that._calcPolygonPoints(false, fx.pos, xStart, yStart, width, widthBottom, height));\n };\n this.$svg.children(this.segmentSelectorForAnimation).animate({\n tabIndex: 0\n }, this._createAnimationObjectWithTabIndexRemoval(shrink))\n .promise()\n .done(() => {\n this._remove(afterRemoveFunc);\n this.animationTriggered = false;\n });\n }\n\n _dynamicCssClass(cssClass) {\n let small = '';\n if (this.chartBox.width <= this.widthThresholdSmall) {\n small = 'small';\n } else if (this.chartBox.width <= this.widthThresholdMedium) {\n small = 'medium';\n }\n return strings.join(' ', cssClass, small);\n }\n\n _dynamicConversionRateWidth() {\n if (!this.chart.config.salesfunnel.calcConversionRate) {\n return 0; // don't show conversion rate\n }\n if (this.chartBox.width <= this.widthThresholdSmall) {\n return 60;\n }\n if (this.chartBox.width <= this.widthThresholdMedium) {\n return 80;\n }\n return 100;\n }\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {numbers, RoundingMode} from '@eclipse-scout/core';\nimport {AbstractSvgChartRenderer} from '../index';\n\nexport default class SpeedoChartRenderer extends AbstractSvgChartRenderer {\n\n constructor(chart) {\n super(chart);\n this.segmentSelectorForAnimation = '.pointer';\n this.suppressLegendBox = true;\n\n let defaultConfig = {\n speedo: {\n greenAreaPosition: undefined\n }\n };\n chart.config = $.extend(true, {}, defaultConfig, chart.config);\n }\n\n static Position = {\n LEFT: 'left',\n CENTER: 'center',\n RIGHT: 'right'\n };\n\n static NUM_PARTS_GREEN_CENTER = 7;\n static NUM_PARTS_GREEN_EDGE = 4;\n\n static ONE_THOUSAND = 1000;\n static TEN_THOUSAND = 10000;\n static ONE_MILLION = 1000000;\n\n static ARC_MIN = -0.25;\n static ARC_MAX = 0.25;\n static ARC_RANGE = SpeedoChartRenderer.ARC_MAX - SpeedoChartRenderer.ARC_MIN;\n\n static SEGMENT_GAP = 0.0103; // space between two segments (lines)\n\n _validate() {\n let chartData = this.chart.data;\n let chartConfig = this.chart.config;\n if (!chartData ||\n !chartConfig ||\n chartData.axes.length > 0 ||\n chartData.chartValueGroups.length !== 1 ||\n chartData.chartValueGroups[0].values.length !== 3 ||\n chartConfig.speedo.greenAreaPosition === undefined) {\n return false;\n }\n return true;\n }\n\n _renderInternal() {\n let chartData = this.chart.data,\n minValue = chartData.chartValueGroups[0].values[0],\n maxValue = chartData.chartValueGroups[0].values[2],\n value = chartData.chartValueGroups[0].values[1];\n\n // radius of the scale\n this.r = Math.min(this.chartBox.height, this.chartBox.width / 2) * 0.7;\n\n // width (thickness) of the scale\n this.scaleWeight = this.r * 0.27;\n\n this.my = this.chartBox.yOffset + this.chartBox.height - (this.chartBox.height - this.r * 1.12) / 2;\n\n // number of parts in the scale\n this.parts = this.chart.config.speedo.greenAreaPosition === SpeedoChartRenderer.Position.CENTER ?\n SpeedoChartRenderer.NUM_PARTS_GREEN_CENTER : SpeedoChartRenderer.NUM_PARTS_GREEN_EDGE;\n\n // number of lines per part\n this.numSegmentsPerPart = this.parts === SpeedoChartRenderer.NUM_PARTS_GREEN_CENTER ? 5 : 8;\n\n // to remember 'filled' parts\n this.$filledParts = [];\n\n let numTotalSegments = this.parts * this.numSegmentsPerPart; // total number of lines in the whole chart (all colors)\n let numTotalGaps = numTotalSegments - 1;\n\n // width of one segment (line)\n this.segmentWidth = (SpeedoChartRenderer.ARC_RANGE - (numTotalGaps * SpeedoChartRenderer.SEGMENT_GAP)) / numTotalSegments;\n\n // width of one segment including the gap to the next segment.\n this.widthOfSegmentWithGap = this.segmentWidth + SpeedoChartRenderer.SEGMENT_GAP;\n\n // pointer value in range [0,1]\n let valuePercentage = this._limitValue((value - minValue) / (maxValue - minValue), 1);\n\n // value in the range [0,1] rounded to one segment\n let segmentToPointAt = Math.round(valuePercentage * numTotalGaps);\n\n // value rounded to the closest segment so that the pointer never stays \"in between\" two segments but always on a segment\n let valuePercentageRounded = this._getPercentageValueOfSegment(segmentToPointAt % this.numSegmentsPerPart,\n this._getPartForValue(valuePercentage));\n\n for (let i = 0; i < this.parts; i++) {\n this._renderCirclePart(i);\n }\n\n this._renderPointer(valuePercentageRounded);\n this._renderLegend(minValue, value, maxValue, chartData.chartValueGroups[0].groupName);\n\n this.$svg.addClass('speedo-chart-svg');\n if (this.chart.config.options.clickable) {\n this.$svg.on('click', this._createClickObject(null, null), this.chart._onValueClick.bind(this.chart));\n }\n }\n\n _limitValue(value, maxValue) {\n value = Math.max(value, 0); // cannot be < 0\n value = Math.min(value, maxValue); // cannot be > maxValue\n return value;\n }\n\n /**\n * Gets the percentage value in range [0,1] of the specified segment.\n */\n _getPercentageValueOfSegment(segmentIndexInPart, part) {\n // get the segment position\n let pointerRange = this._calcSegmentPos(segmentIndexInPart, part);\n\n // calculate the center position in the Arc range [0, 0.5] of the segment\n let pointerPos = pointerRange.from - SpeedoChartRenderer.ARC_MIN + ((pointerRange.to - pointerRange.from) / 2);\n\n // calculate the percentage value of the center of the segment in range [0,1]\n return this._limitValue(pointerPos / SpeedoChartRenderer.ARC_RANGE, 1);\n }\n\n /**\n * Renders the pointer line and registers animation to move the pointer and the corresponding filling of the segments\n */\n _renderPointer(valuePercentage) {\n this.$pointer = this.$svg.appendSVG('path', 'pointer')\n .attr('d', this._pathPointer(0))\n .attr('data-end', valuePercentage)\n .attr('stroke-width', (this.scaleWeight / 6) + 'px') // width of the pointer bar depends on size of chart\n .attr('fill', 'none');\n\n if (this.animationDuration) {\n let that = this;\n let tweenIn = function(now, fx) {\n let val = this.getAttribute('data-end') * fx.pos;\n that._updatePointer(val);\n that._updatePartsFill(val);\n };\n\n this.$pointer\n .animate({\n tabIndex: 0\n }, this._createAnimationObjectWithTabIndexRemoval(tweenIn, this.animationDuration));\n } else {\n this._updatePointer(valuePercentage);\n this._updatePartsFill(valuePercentage);\n }\n }\n\n /**\n * renders a single segment line.\n */\n _renderSegment(from, to, colorClass) {\n return this.$svg.appendSVG('path', 'speedo-chart-arc ' + colorClass)\n .attr('id', 'ArcAxisWide' + this.chart.id)\n .attr('fill', 'none')\n .attr('stroke-width', this.scaleWeight + 'px')\n .attr('d', this._pathSegment(from, to));\n }\n\n _renderCirclePart(part) {\n let colorClass = this._getColorForPart(part);\n // render 'empty' segments\n for (let i = 0; i < this.numSegmentsPerPart; i++) {\n let segPos = this._calcSegmentPos(i, part);\n this._renderSegment(segPos.from, segPos.to, colorClass);\n }\n\n // render and remember 'filled' segments (not visible by default).\n this.$filledParts.push(this._renderSegment(SpeedoChartRenderer.ARC_MIN, SpeedoChartRenderer.ARC_MIN, colorClass)); // 'filled' segments. invisible by default\n }\n\n _renderLegend(minValue, value, maxValue, groupName) {\n let minMaxLegendFontSize = this.scaleWeight * 0.8,\n padding = 5, // same as in AbstractChartRenderer#_renderWireLegend\n labelYPos = this.my + padding,\n labelMinMaxYPos = labelYPos + minMaxLegendFontSize * 0.8,\n positions = {\n x1: null,\n x2: this.chartBox.mX() - padding,\n y1: null,\n y2: labelYPos,\n v: -1,\n h: 1\n },\n minLegendValue = minValue ? this._formatValue(minValue) : 0,\n legendValue = value ? this._formatValue(value) : 0,\n maxLegendValue = maxValue ? this._formatValue(maxValue) : 0;\n\n // tooltips for min/max value\n if (this.chart.config.options.tooltips.enabled) {\n // min value\n let $minLegend = this.$svg.appendSVG('text', 'line-label line-chart-wire-label')\n .attr('x', this.chartBox.mX() - this.r)\n .attr('y', labelMinMaxYPos)\n .text(minLegendValue)\n .attr('style', 'font-size: ' + minMaxLegendFontSize + 'px; text-anchor: middle');\n\n // max value\n let $maxLegend = this.$svg.appendSVG('text', 'line-label line-chart-wire-label')\n .attr('x', this.chartBox.mX() + this.r)\n .attr('y', labelMinMaxYPos)\n .text(maxLegendValue)\n .attr('style', 'font-size: ' + minMaxLegendFontSize + 'px; text-anchor: middle');\n\n let mouseIn = function() {\n this.$svg.append($minLegend);\n this.$svg.append($maxLegend);\n }.bind(this);\n let mouseOut = () => {\n $minLegend.detach();\n $maxLegend.detach();\n };\n mouseOut();\n this.$svg\n .mouseenter(mouseIn)\n .mouseleave(mouseOut);\n }\n\n // actual value\n if (this.chart.config.options.legend.display) {\n this._renderLineLabel(positions.x2 + padding, positions.y2 + positions.v * padding, legendValue, '', false)\n .addClass('speedo-chart-label')\n .attr('style', 'font-size: ' + this.scaleWeight * 1.55 + 'px;');\n }\n }\n\n /**\n * returns the part index for the specified valuePercentage. The valuePercentage must be in the range [0,1].\n */\n _getPartForValue(valuePercentage) {\n let part = Math.floor(valuePercentage * this.parts);\n return this._limitValue(part, this.parts - 1);\n }\n\n /**\n * Formats the speedo-values in a compact way:\n * 0 - 999: as is\n * 1 to 9'999: as is, with grouping separators\n * 10 to 999 thousand: 123k\n * >= 1 million: millions with max. two fraction digits -> 1.23M\n */\n _formatValue(value) {\n if (value < SpeedoChartRenderer.TEN_THOUSAND) {\n return this.session.locale.decimalFormat.format(value);\n }\n if (value < SpeedoChartRenderer.ONE_MILLION) {\n return Math.floor(value / SpeedoChartRenderer.ONE_THOUSAND) + 'k';\n }\n let millions = value / SpeedoChartRenderer.ONE_MILLION;\n millions = numbers.round(millions, RoundingMode.HALF_UP, 2);\n return this.session.locale.decimalFormat.format(millions) + 'M';\n }\n\n /**\n * Updates the pointer position to point to the specified valuePercentage in range [0,1].\n */\n _updatePointer(valuePercentage) {\n this.$pointer\n .attr('d', this._pathPointer(valuePercentage))\n .removeClass('red yellow light-green dark-green')\n .addClass(this._getColorForPart(this._getPartForValue(valuePercentage)));\n }\n\n /**\n * Updates the filling of the 'filled' segments to be filled up to the specified valuePercentage in range [0,1].\n */\n _updatePartsFill(valuePercentage) {\n let from, to;\n for (let part = 0; part < this.$filledParts.length; part++) {\n from = this._calcSegmentPos(0, part, this.segmentWidth).from;\n if ((part + 1) / this.parts < valuePercentage) {\n // the current part is smaller than the value: completely filled part\n to = this._calcSegmentPos(this.numSegmentsPerPart - 1, part, this.segmentWidth).to;\n } else if (part / this.parts > valuePercentage) {\n // the current part is bigger than the speedo-value: hide element\n from = SpeedoChartRenderer.ARC_MIN;\n to = SpeedoChartRenderer.ARC_MIN;\n } else {\n // the value is within the current part\n to = (SpeedoChartRenderer.ARC_RANGE * valuePercentage) - SpeedoChartRenderer.ARC_MAX; // fill part exactly to the value\n }\n this.$filledParts[part].attr('d', this._pathSegment(from, to));\n }\n }\n\n /**\n * Calculates the positions (from, to) of a single segment line.\n * @param segmentIndexInPart the index of the segment line within the part.\n * @param part the part index.\n */\n _calcSegmentPos(segmentIndexInPart, part) {\n let result = {\n from: 0,\n to: 0\n };\n let segmentNum = segmentIndexInPart + part * this.numSegmentsPerPart;\n result.from = segmentNum * this.widthOfSegmentWithGap - SpeedoChartRenderer.ARC_MAX;\n result.to = result.from + this.segmentWidth;\n return result;\n }\n\n _getColorForPart(part) {\n let position = this.chart.config.speedo.greenAreaPosition;\n switch (position) {\n case SpeedoChartRenderer.Position.LEFT:\n // only four parts\n if (part === 0) {\n return 'dark-green';\n } else if (part === 1) {\n return 'light-green';\n } else if (part === 2) {\n return 'yellow';\n } else if (part === 3) {\n return 'red';\n }\n break;\n case SpeedoChartRenderer.Position.RIGHT:\n // only four parts\n if (part === 0) {\n return 'red';\n } else if (part === 1) {\n return 'yellow';\n } else if (part === 2) {\n return 'light-green';\n } else if (part === 3) {\n return 'dark-green';\n }\n break;\n case SpeedoChartRenderer.Position.CENTER:\n if (part === 0) {\n return 'red';\n } else if (part === 1) {\n return 'yellow';\n } else if (part === 2) {\n return 'light-green';\n } else if (part === 3) {\n return 'dark-green';\n } else if (part === 4) {\n return 'light-green';\n } else if (part === 5) {\n return 'yellow';\n } else if (part === 6) {\n return 'red';\n }\n break;\n default:\n break;\n }\n }\n\n /**\n * calculates the path-values to be used in the 'd' attribute of the path tag for a segment.\n */\n _pathSegment(start, end) {\n let s = start * 2 * Math.PI,\n e = end * 2 * Math.PI,\n pathString = '';\n\n pathString += 'M ' + (this.chartBox.mX() + this.r * Math.sin(s)) + ' ' + (this.my - this.r * Math.cos(s)) + ' ';\n // http://www.w3.org/TR/SVG/paths.html#PathDataEllipticalArcCommands\n // A rx ry\n // x-axis-rotation large-arc-flag sweep-flag\n // x y\n pathString += 'A ' + this.r + ' ' + this.r + ' ';\n pathString += '0 ' + (end - start < 0.5 ? '0' : '1') + ' 1 ';\n pathString += (this.chartBox.mX() + this.r * Math.sin(e)) + ' ' + (this.my - this.r * Math.cos(e));\n\n return pathString;\n }\n\n /**\n * calculates the path-values to be used in the 'd' attribute of the path tag for the pointer\n */\n _pathPointer(valuePercentage) {\n let point = SpeedoChartRenderer.ARC_RANGE * valuePercentage - SpeedoChartRenderer.ARC_MAX;\n let s = point * 2 * Math.PI,\n pointerOuterR = this.r - (1.4 * this.scaleWeight),\n pointerInnerR = this.r + (1.37 * this.scaleWeight),\n pathString = '';\n\n pathString += 'M ' + (this.chartBox.mX() + pointerInnerR * Math.sin(s)) + ' ' + (this.my - pointerInnerR * Math.cos(s)) + ' ';\n pathString += 'L ' + (this.chartBox.mX() + pointerOuterR * Math.sin(s)) + ' ' + (this.my - pointerOuterR * Math.cos(s)) + ' ';\n pathString += 'Z';\n return pathString;\n }\n\n /**\n * @override\n */\n _removeAnimated(afterRemoveFunc) {\n if (this.animationTriggered) {\n return;\n }\n let that = this,\n tweenOut = function(now, fx) {\n let val = this.getAttribute('data-end') * (1 - fx.pos);\n that._updatePointer(val);\n that._updatePartsFill(val);\n };\n\n this.animationTriggered = true;\n this.$svg.children(this.segmentSelectorForAnimation)\n .animate({\n tabIndex: 0\n }, this._createAnimationObjectWithTabIndexRemoval(tweenOut))\n .promise()\n .done(() => {\n this._remove(afterRemoveFunc);\n this.animationTriggered = false;\n });\n }\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {Device} from '@eclipse-scout/core';\n\n// place venn 3 by simulation\n// find angle and distance (to a) and radius where \"error\" is minimal\nexport default class VennAsync3Calculator {\n\n constructor(helper, venn1, venn2, venn3, u, v, w, uv, uw, vw, uvw, d12, d13, d23) {\n // if circles are empty, they are drawn as small circle, so: adjust u v w to find better errors\n if (u === 0 && uv === 0 && uw === 0 && uvw === 0) {\n u = 1;\n }\n if (v === 0 && uv === 0 && vw === 0 && uvw === 0) {\n v = 1;\n }\n if (w === 0 && uw === 0 && vw === 0 && uvw === 0) {\n w = 1;\n }\n\n this.helper = helper;\n this.venn1 = venn1;\n this.venn2 = venn2;\n this.venn3 = venn3;\n this.u = u;\n this.v = v;\n this.w = w;\n this.uv = uv;\n this.uw = uw;\n this.vw = vw;\n this.uvw = uvw;\n\n // step and ranges for loops\n this.maxD = this.venn1.r + 2 * this.venn2.r + 2 * this.venn1.r + this.helper.distR;\n this.dStep = this.maxD / 30;\n this.rStep = venn3.r / 4;\n this.alphaStep = Math.PI / 30;\n\n // best vars (initialize with 0 so the optimizer knows that they are numbers)\n this.alphaBest = 0;\n this.dBest = 0;\n this.rBest = 0;\n this.errorBest = 0;\n\n this.callback = null;\n this.cancelled = false;\n }\n\n start(callback) {\n this.callback = callback;\n setTimeout(this._next.bind(this, 0));\n }\n\n cancel() {\n this.cancelled = true;\n }\n\n _end() {\n // set x and y and r of venn3\n this.venn3.x = this.venn1.x + this.dBest * Math.cos(this.alphaBest);\n this.venn3.y = this.venn1.y - this.dBest * Math.sin(this.alphaBest);\n this.venn3.r = this.rBest;\n\n this.callback();\n }\n\n _next(alpha) {\n if (!this.cancelled) {\n // iterate\n this._iteration(alpha);\n }\n if (this.cancelled) {\n return; // stop loop if interrupted\n }\n\n alpha += this.alphaStep;\n if (alpha < Math.PI) {\n // schedule next loop iteration\n setTimeout(this._next.bind(this, alpha));\n } else {\n // end loop\n this._end();\n }\n }\n\n _iteration(alpha) {\n // optimize speed: no var lookup (should help the optimizer in general, and IE in particular)\n let maxD = this.maxD,\n dStep = this.dStep,\n minR = this.helper.minR,\n rStep = this.rStep,\n total = this.helper.total,\n x1 = this.venn1.x,\n y1 = this.venn1.y,\n r1 = this.venn1.r,\n x2 = this.venn2.x,\n y2 = this.venn2.y,\n r2 = this.venn2.r,\n r3 = this.venn3.r,\n u = this.u,\n v = this.v,\n w = this.w,\n uv = this.uv,\n uw = this.uw,\n vw = this.vw,\n uvw = this.uvw,\n alphaBest = this.alphaBest,\n dBest = this.dBest,\n rBest = this.rBest,\n errorBest = this.errorBest;\n\n let stepFactor = 1;\n // sorry... ie is (verry, buggy) slow\n // TODO [15.4] bsh: find better solution for ie, or error calculation\n if (Device.get().isInternetExplorer()) {\n stepFactor = 5;\n }\n\n for (let d = 0; d < maxD; d += dStep) {\n // calc x, y\n let x = x1 + d * Math.cos(alpha);\n let y = y1 - d * Math.sin(alpha);\n\n for (let r = Math.max(minR, r3 * 0.75); r <= r3 * 1.25; r += rStep) {\n\n // find areas with monte carlo, do not laugh! i tried even this:\n // http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.507.1195&rep=rep1&type=pdf\n\n let minX = Math.min(x1 - r1, x2 - r2, x - r);\n let maxX = Math.max(x1 + r1, x2 + r2, x + r);\n let minY = Math.min(y1 - r1, y2 - r2, y - r);\n let maxY = Math.max(y1 + r1, y2 + r2, y + r);\n let stepX = (maxX - minX) / 100 * stepFactor;\n let stepY = (maxY - minY) / 100 * stepFactor;\n\n // areas of venn\n let a1 = 0,\n a2 = 0,\n a3 = 0,\n a12 = 0,\n a13 = 0,\n a23 = 0,\n a123 = 0;\n\n for (let testX = minX; testX < maxX; testX += stepX) {\n for (let testY = minY; testY < maxY; testY += stepY) {\n // optimize speed for ie: no function call\n let t1 = ((testX - x1) * (testX - x1) + (testY - y1) * (testY - y1)) < (r1 * r1);\n let t2 = ((testX - x2) * (testX - x2) + (testY - y2) * (testY - y2)) < (r2 * r2);\n let t3 = ((testX - x) * (testX - x) + (testY - y) * (testY - y)) < (r * r);\n\n // check if inside\n if (t1 && t2 && t3) {\n a123++;\n } else if (t1 && t2 && !t3) {\n a12++;\n } else if (t1 && !t2 && !t3) {\n a1++;\n } else if (!t1 && t2 && !t3) {\n a2++;\n } else if (t1 && !t2 && t3) {\n a13++;\n } else if (!t1 && t2 && t3) {\n a23++;\n } else if (!t1 && !t2 && t3) {\n a3++;\n }\n }\n }\n\n let aTotal = a1 + a2 + a3 + a12 + a13 + a23 + a123;\n\n // calc error\n let error = d / maxD;\n error += this._error(uvw, total, a123, aTotal);\n error += this._error(uv, total, a12, aTotal);\n error += this._error(uw, total, a13, aTotal);\n error += this._error(vw, total, a23, aTotal);\n error += this._error(u, total, a1, aTotal);\n error += this._error(v, total, a2, aTotal);\n error += this._error(w, total, a3, aTotal);\n\n // better than before?\n if (alpha === 0 || error < errorBest) {\n alphaBest = alpha;\n dBest = d;\n rBest = r;\n errorBest = error;\n }\n }\n }\n\n this.alphaBest = alphaBest;\n this.dBest = dBest;\n this.rBest = rBest;\n this.errorBest = errorBest;\n }\n\n _error(u, total, a, aTotal) {\n // be brutal if basic error\n if ((u === 0 && a !== 0) || (u !== 0 && a === 0)) {\n return 1000;\n }\n return Math.abs(u / total - a / aTotal) * 100;\n }\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {AbstractSvgChartRenderer, VennAsync3Calculator, VennCircle, VennCircleHelper} from '../index';\nimport $ from 'jquery';\n\nexport default class VennChartRenderer extends AbstractSvgChartRenderer {\n\n constructor(chart) {\n super(chart);\n this.animationTriggered = false;\n this.suppressLegendBox = true;\n\n let defaultConfig = {\n venn: {\n numberOfCircles: undefined\n }\n };\n chart.config = $.extend(true, {}, defaultConfig, chart.config);\n }\n\n _validate() {\n let chartData = this.chart.data;\n if (!chartData ||\n chartData.axes.length !== 0 ||\n chartData.chartValueGroups.length === 0 ||\n chartData.chartValueGroups[0].values.length === 0) {\n return false;\n }\n return true;\n }\n\n _renderInternal() {\n this.centerX = this.width / 2;\n this.centerY = this.height / 2;\n\n if (this.centerX === 0 || this.centerY === 0) {\n return false;\n }\n\n this.setLoading(true);\n\n // basic values\n this.data = this.chart.data.chartValueGroups;\n this.numberOfCircles = this.chart.config.venn.numberOfCircles;\n\n // render parameter\n let distR = 10,\n maxR = Math.min(this.centerX, this.centerY),\n minR = maxR / 15,\n total = this.data.reduce((s, e) => {\n return s + parseFloat(e.values[0]);\n }, 1);\n\n this.vennCircleHelper = new VennCircleHelper(distR, maxR, minR, total);\n\n // create svg elements and venns\n if (this.numberOfCircles > 0) {\n this.$v1 = this._createCircle(0, this.data[0].colorHexValue, this.data[0].cssClass);\n this.vennNumber1 = new VennCircle(this.$v1);\n this.vennReal1 = new VennCircle(this.$v1);\n }\n if (this.numberOfCircles > 1) {\n this.$v2 = this._createCircle(1, this.data[1].colorHexValue, this.data[1].cssClass);\n this.vennNumber2 = new VennCircle(this.$v2);\n this.vennReal2 = new VennCircle(this.$v2);\n }\n if (this.numberOfCircles > 2) {\n this.$v3 = this._createCircle(2, this.data[2].colorHexValue, this.data[2].cssClass);\n this.vennNumber3 = new VennCircle(this.$v3);\n this.vennReal3 = new VennCircle(this.$v3);\n }\n\n // Final callback\n let draw = function() {\n this.readyToDraw = true;\n this.setLoading(false);\n if (!this.$svg.isAttached()) {\n // user navigated away. do not try to render-> error\n return;\n }\n this.readyToDraw = false;\n this._draw(true, true);\n }.bind(this);\n\n // save callback if user navigated away while calculating and _draw is not executed.\n this.readyToDraw = false;\n\n // calc venns and set legend\n if (this.numberOfCircles === 1) {\n this._calc1(this.vennNumber1);\n this._calc1(this.vennReal1);\n draw();\n\n } else if (this.numberOfCircles === 2) {\n this._calc2(this.vennNumber1, this.vennNumber2, false);\n this._calc2(this.vennReal1, this.vennReal2, true);\n draw();\n\n } else if (this.numberOfCircles === 3) {\n this._calc3(this.vennNumber1, this.vennNumber2, this.vennNumber3, false, () => {\n if (this.rendering || this.rendered) {\n this._calc3(this.vennReal1, this.vennReal2, this.vennReal3, true, draw);\n }\n });\n }\n }\n\n checkCompletlyRendered() {\n if (this.readyToDraw) {\n this._draw(false, true);\n } else {\n super.checkCompletlyRendered();\n }\n }\n\n remove(requestAnimation, afterRemoveFunc) {\n this._cancelAsync3Calculator();\n this.setLoading(false);\n super.remove(requestAnimation, afterRemoveFunc);\n }\n\n setLoading(loading) {\n if (loading && !this.$loadingIndicator && this.chart && this.chart.rendered) {\n this.$loadingIndicator = this.chart.$container.appendDiv('venn-chart-loading-indicator');\n } else if (!loading && this.$loadingIndicator) {\n this.$loadingIndicator.remove();\n this.$loadingIndicator = null;\n }\n }\n\n // calculation\n\n _calc1(v1) {\n // set basic data\n let a = this.data[0].values[0];\n\n // calc sizes\n if (a > 0) {\n v1.r = this.vennCircleHelper.calcR(a, 0.8);\n } else {\n v1.r = this.vennCircleHelper.calcR(a, 0);\n }\n\n v1.x = 0;\n v1.y = 0;\n\n // place legend and label\n v1.setLegend(this.data[0].groupName, 1, -1);\n v1.addLabel(a, v1.x, v1.y);\n }\n\n _calc2(v1, v2, real) {\n // set basic data\n let a = this.data[0].values[0];\n let b = this.data[1].values[0];\n let ab = this.data[2].values[0];\n let d12;\n\n if (real) {\n // basics calculation\n v1.r = this.vennCircleHelper.calcR(a + ab, 0.8);\n v2.r = this.vennCircleHelper.calcR(b + ab, 0.8);\n d12 = this.vennCircleHelper.calcD(v1, v2, a, b, ab, true);\n\n // calc x\n v1.x = 0;\n v2.x = d12;\n } else {\n // eslint-disable-next-line no-multi-assign\n v1.r = v2.r = this.vennCircleHelper.calcR(-1, 0.7);\n v1.x = -v1.r * 0.6;\n v2.x = v2.r * 0.6;\n }\n\n // calc y ;)\n v1.y = 0;\n v2.y = 0;\n\n // balance circles\n this.vennCircleHelper.findBalance2(v1, v2);\n\n // prepare legend\n v1.setLegend(this.data[0].groupName, -1, -1);\n v2.setLegend(this.data[1].groupName, 1, -1);\n\n // draw labels, and fix legend\n if (real) {\n if (ab === 0) {\n v1.addLabel(a, v1.x, v1.y);\n v2.addLabel(b, v2.x, v2.y);\n } else if (a === 0 && b === 0) {\n v1.addLabel(ab, v1.x, v1.y);\n } else if (a === 0) {\n v2.addLabel(ab, v1.x, v1.y);\n v2.addLabel(b, v2.x - (d12 - v2.r - v1.r) / 2, v2.y);\n v1.legendR = v2.r - d12;\n } else if (b === 0) {\n v1.addLabel(ab, v2.x, v2.y);\n v1.addLabel(a, v1.x + (d12 - v2.r - v1.r) / 2, v1.y);\n v2.legendR = v1.r - d12;\n } else {\n v1.addLabel(a, v1.x + (d12 - v2.r - v1.r) / 2, v1.y);\n v1.addLabel(b, v2.x - (d12 - v2.r - v1.r) / 2, v2.y);\n v2.addLabel(ab, v1.x + v1.r + (d12 - v2.r - v1.r) / 2, v1.y);\n }\n } else {\n v1.addLabel(a, -v1.r * 0.9, 0);\n v1.addLabel(b, v1.r * 0.9, 0);\n v2.addLabel(ab, 0, 0);\n }\n }\n\n _calc3(v1, v2, v3, real, callback) {\n // set basic data\n let a = this.data[0].values[0];\n let b = this.data[1].values[0];\n let c = this.data[2].values[0];\n let ab = this.data[3].values[0];\n let ac = this.data[4].values[0];\n let bc = this.data[5].values[0];\n let abc = this.data[6].values[0];\n\n let d12, d13, d23;\n\n // calc sizes\n if (real) {\n // basics calculation\n v1.r = this.vennCircleHelper.calcR(a + ab + ac + abc, 0.55);\n v2.r = this.vennCircleHelper.calcR(b + ab + bc + abc, 0.55);\n v3.r = this.vennCircleHelper.calcR(c + ac + bc + abc, 0.55);\n\n // find distance between a; may reduce r\n d12 = this.vennCircleHelper.calcD(v1, v2, a + ac, b + bc, ab + abc, true);\n d13 = this.vennCircleHelper.calcD(v1, v3, a + ab, c + bc, ab + abc, false);\n d23 = this.vennCircleHelper.calcD(v2, v3, b + ab, c + ac, ab + abc, false);\n\n // find coordinates of a and b\n v1.x = 0;\n v2.x = d12;\n v3.x = d13;\n\n v1.y = 0;\n v2.y = 0;\n v3.y = 0;\n\n // c is much more difficult..., only changes v3\n this._cancelAsync3Calculator();\n this.async3Calculator = new VennAsync3Calculator(this.vennCircleHelper, v1, v2, v3, a, b, c, ab, ac, bc, abc, d12, d13, d23);\n this.async3Calculator.start(() => {\n this.async3Calculator = null;\n\n // balance circles\n this.vennCircleHelper.findBalance3(v1, v2, v3);\n\n // prepare legend\n v1.setLegend(this.data[0].groupName, -1, 1);\n v2.setLegend(this.data[1].groupName, 1, 1);\n v3.setLegend(this.data[2].groupName, 1, -1);\n\n callback();\n });\n\n } else {\n // draw label\n // eslint-disable-next-line no-multi-assign\n v1.r = v2.r = v3.r = this.vennCircleHelper.calcR(-1, 0.55);\n\n v1.x = -v1.r * 0.73;\n v2.x = v2.r * 0.73;\n v3.x = 0;\n\n v1.y = v1.r * 0.58;\n v2.y = v2.r * 0.58;\n v3.y = -v3.r * 0.58;\n\n // prepare legend\n v1.setLegend(this.data[0].groupName, -1, 1);\n v2.setLegend(this.data[1].groupName, 1, 1);\n v3.setLegend(this.data[2].groupName, 1, -1);\n\n v1.addLabel(a, -v1.r, v1.r * 0.76);\n v2.addLabel(b, v1.r, v1.r * 0.76);\n v3.addLabel(c, 0, -v1.r * 0.82);\n v1.addLabel(ab, 0, v1.r * 0.76);\n v1.addLabel(ac, -v1.r * 0.49, -v1.r * 0.05);\n v2.addLabel(bc, v1.r * 0.49, -v1.r * 0.05);\n v1.addLabel(abc, 0, v1.r * 0.22);\n\n callback();\n }\n }\n\n _cancelAsync3Calculator() {\n if (this.async3Calculator) {\n this.async3Calculator.cancel();\n this.async3Calculator = null;\n }\n }\n\n // drawing\n\n _draw(animated, real) {\n if (!this.rendered && !this.rendering) { // additional check, because this method might be called from a setTimeout()\n return;\n }\n\n if (this.animationTriggered) {\n return;\n }\n this.animationTriggered = true;\n\n // remove labels and legends\n let that = this;\n this.$svg.children('.venn-legend, .venn-label, .venn-axis-white, .label-line')\n .stop()\n .animateSVG('opacity', 1, 0, null, true)\n .promise()\n .done(function() {\n this.remove();\n that.animationTriggered = false;\n });\n\n // find venns we will update\n let showVenn = [];\n\n if (this.numberOfCircles > 0) {\n showVenn.push(real ? this.vennReal1 : this.vennNumber1);\n }\n\n if (this.numberOfCircles > 1) {\n showVenn.push(real ? this.vennReal2 : this.vennNumber2);\n }\n\n if (this.numberOfCircles > 2) {\n showVenn.push(real ? this.vennReal3 : this.vennNumber3);\n }\n\n // update venn and draw labels\n for (let i = 0; i < showVenn.length; i++) {\n let venn = showVenn[i];\n this._updateVenn(venn, animated);\n\n for (let j = 0; j < venn.labels.length; j++) {\n let label = venn.labels[j];\n this._drawLabel(label.text, label.x, label.y, animated);\n }\n }\n }\n\n // handling of circles\n _createCircle(circleIndex, color, cssClass) {\n let $circle = this.$svg.appendSVG('circle', 'venn-circle')\n .attr('cx', this.centerX)\n .attr('cy', this.centerY)\n .attr('r', 0)\n .on('mouseenter', {\n showReal: false\n }, this._show.bind(this))\n .on('mouseleave', {\n showReal: true\n }, this._show.bind(this));\n\n if (this.chart.config.options.autoColor) {\n $circle.addClass('auto-color color0');\n } else if (cssClass) {\n $circle.addClass(cssClass);\n } else {\n $circle.attr('fill', color);\n }\n\n if (this.chart.config.options.clickable) {\n $circle.on('click', this._createClickObject(null, circleIndex), this.chart._onValueClick.bind(this.chart));\n }\n\n return $circle;\n }\n\n // handling of venn, label and legend\n _updateVenn(venn, animated) {\n // move circle\n venn.$circle\n .animateSVG('cx', this.centerX + venn.x, animated ? this.animationDuration : 0, null, true)\n .animateSVG('cy', this.centerY + venn.y, animated ? this.animationDuration : 0, null, true)\n .animateSVG('r', venn.r, animated ? this.animationDuration : 0, null, true);\n\n // set up position legend\n let minR = this.vennCircleHelper.minR,\n x1 = this.centerX + venn.x + venn.legendH * Math.sin(Math.PI / 5) * venn.r,\n y1 = this.centerY + venn.y + venn.legendV * Math.cos(Math.PI / 5) * venn.r,\n x2 = this.centerX + venn.x + venn.legendH * Math.sin(Math.PI / 5) * (venn.legendR + minR * 1.5),\n y2 = this.centerY + venn.y + venn.legendV * Math.cos(Math.PI / 5) * (venn.legendR + minR * 1.5);\n\n let legendPositions = {\n x1: x1,\n x2: x2,\n y1: y1,\n y2: y2,\n v: venn.legendV,\n h: venn.legendH\n };\n\n this._renderWireLegend(venn.legend, legendPositions, 'venn-legend');\n }\n\n _drawLabel(text, dx, dy, animated) {\n // draw label\n let $label = this.$svg.appendSVG('text', 'venn-label')\n .attr('x', this.centerX + dx)\n .attr('y', this.centerY + dy)\n .text(text);\n\n // animate if needed\n if (animated && this.animationDuration) {\n $label\n .attr('opacity', 0)\n .animateSVG('opacity', 1, this.animationDuration, null, true);\n }\n }\n\n // handling of show/hide numbers\n _show(event) {\n if (this.numberOfCircles === 1) {\n return; // Nothing to do for only one circle\n }\n\n // target contains element that is entered, relatedTarget contains element that is left\n let toElement = (event.type === 'mouseenter' ? event.target : event.relatedTarget);\n\n // check if true enter or just from one circle to another\n let isCircle = toElement && $(toElement).hasClass('venn-circle');\n if (this.wasCircle && isCircle) {\n return false;\n }\n this.wasCircle = isCircle;\n\n // draw animated in every case\n this._draw(true, event.data.showReal);\n }\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\n// circle\n\nexport default class VennCircle {\n\n constructor($circle) {\n this.$circle = $circle;\n this.x;\n this.y;\n this.r;\n this.legend;\n this.legendR;\n this.legendH;\n this.legendV;\n this.labels = [];\n }\n\n setLegend(legend, horizontal, vertical, r) {\n this.legend = legend;\n this.legendH = horizontal;\n this.legendV = vertical;\n this.legendR = r || this.r;\n }\n\n addLabel(text, x, y) {\n this.labels.push({\n text: text,\n x: x,\n y: y\n });\n }\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nexport default class VennCircleHelper {\n\n constructor(distR, maxR, minR, total) {\n this.distR = distR;\n this.maxR = maxR;\n this.minR = minR;\n this.total = total;\n }\n\n findBalance2(venn1, venn2) {\n // find center\n let midX = (venn1.r * venn1.x + venn2.r * venn2.x) / (venn1.r + venn2.r);\n let midY = (venn1.r * venn1.y + venn2.r * venn2.y) / (venn1.r + venn2.r);\n\n // move to center\n venn1.x = venn1.x - midX;\n venn2.x = venn2.x - midX;\n\n venn1.y = venn1.y - midY;\n venn2.y = venn2.y - midY;\n }\n\n findBalance3(venn1, venn2, venn3) {\n // find center\n let midX = (venn1.r * venn1.x + venn2.r * venn2.x + venn3.r * venn3.x) / (venn1.r + venn2.r + venn3.r);\n let midY = (venn1.r * venn1.y + venn2.r * venn2.y + venn3.r * venn3.y) / (venn1.r + venn2.r + venn3.r);\n\n // move to center\n venn1.x = venn1.x - midX;\n venn2.x = venn2.x - midX;\n venn3.x = venn3.x - midX;\n\n venn1.y = venn1.y - midY;\n venn2.y = venn2.y - midY;\n venn3.y = venn3.y - midY;\n }\n\n calcR(count, factorMax) {\n if (count === -1) {\n return this.maxR * factorMax;\n }\n return Math.max(this.minR, Math.sqrt(count / this.total) * this.maxR * factorMax);\n }\n\n calcD(venn1, venn2, u, v, uv, changeR) {\n let ret;\n if (uv === 0) {\n // separated circles\n ret = venn1.r + venn2.r + this.distR * 2;\n\n } else if (u === 0 && v === 0) {\n // same circle\n ret = 0;\n\n } else if (u === 0) {\n // a part of b\n ret = Math.max(0, venn2.r - venn1.r - this.distR);\n\n // check if inner circle is to large\n if (ret < 1.5 * this.distR && changeR) {\n ret = 1.5 * this.distR;\n venn1.r = venn2.r - ret;\n }\n\n } else if (v === 0) {\n // b part of a\n ret = Math.max(0, venn1.r - venn2.r - this.distR);\n\n // check if inner circle is to large\n if (ret < 1.5 * this.distR && changeR) {\n ret = 1.5 * this.distR;\n venn2.r = venn1.r - ret;\n }\n\n } else {\n // this is pure magic ;) please do not touch!\n let ri = Math.min(venn1.r, venn2.r);\n let ra = Math.max(venn1.r, venn2.r);\n let q = Math.min(u, v) / (Math.min(u, v) + uv);\n\n // unfortunately, there is no closed solution for cricles, so handle as squares\n ret = 2 * q * ri - ri + ra;\n\n // check and fix\n ret = Math.max(3 * this.distR, ret);\n ret = Math.min(ri + ra - 3 * this.distR, ret);\n ret = Math.max(ra - ri + 3 * this.distR, ret);\n }\n\n return ret;\n }\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {FormField} from '@eclipse-scout/core';\n\nexport default class ChartField extends FormField {\n\n constructor() {\n super();\n this._addWidgetProperties(['chart']);\n }\n\n _render() {\n this.addContainer(this.$parent, 'chart-field');\n this.addLabel();\n this.addMandatoryIndicator();\n this.addStatus();\n this._renderChart();\n }\n\n _renderChart() {\n if (this.chart) {\n this.chart.render();\n this.addField(this.chart.$container);\n }\n }\n\n _removeChart() {\n this.chart.remove();\n this._removeField();\n }\n\n _renderOnAttach() {\n super._renderOnAttach();\n if (this.chart && this.chart.chartRenderer) {\n this.chart.chartRenderer.checkCompletlyRendered();\n }\n }\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {FormFieldAdapter} from '@eclipse-scout/core';\n\nexport default class ChartFieldAdapter extends FormFieldAdapter {\n\n constructor() {\n super();\n }\n\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nexport {default as Chart} from './chart/Chart';\nexport {default as ChartAdapter} from './chart/ChartAdapter';\nexport {default as ChartLayout} from './chart/ChartLayout';\nexport {default as AbstractChartRenderer} from './chart/AbstractChartRenderer';\nexport {default as AbstractSvgChartRenderer} from './chart/AbstractSvgChartRenderer';\nexport {default as ChartJsRenderer} from './chart/ChartJsRenderer';\nexport {default as FulfillmentChartRenderer} from './chart/FulfillmentChartRenderer';\nexport {default as SpeedoChartRenderer} from './chart/SpeedoChartRenderer';\nexport {default as SalesfunnelChartRenderer} from './chart/SalesfunnelChartRenderer';\nexport {default as VennAsync3Calculator} from './chart/VennAsync3Calculator';\nexport {default as VennCircleHelper} from './chart/VennCircleHelper';\nexport {default as VennChartRenderer} from './chart/VennChartRenderer';\nexport {default as VennCircle} from './chart/VennCircle';\nexport {default as ChartField} from './form/fields/chartfield/ChartField';\nexport {default as ChartFieldAdapter} from './form/fields/chartfield/ChartFieldAdapter';\nexport {default as ChartFieldTile} from './tile/ChartFieldTile';\nexport {default as ChartFieldTileAdapter} from './tile/ChartFieldTileAdapter';\nexport {default as ChartTableControl} from './table/controls/ChartTableControl';\nexport {default as ChartTableUserFilter} from './table/controls/ChartTableUserFilter';\nexport {default as ChartTableControlAdapter} from './table/controls/ChartTableControlAdapter';\nexport {default as ChartTableControlLayout} from './table/controls/ChartTableControlLayout';\n\nimport * as self from './index.js';\n\nexport default self;\nwindow.scout = Object.assign(window.scout || {}, self);\n","/*\n * Copyright (c) 2010-2021 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {arrays, DateColumn, icons, NumberColumn, objects, scout, strings, styles, TableControl, TableMatrix, tooltips} from '@eclipse-scout/core';\nimport {Chart, ChartTableControlLayout, ChartTableUserFilter} from '../../index';\nimport $ from 'jquery';\n\nexport default class ChartTableControl extends TableControl {\n\n constructor() {\n super();\n this.tooltipText = '${textKey:ui.Chart}';\n this.chartAggregation = {\n modifier: TableMatrix.NumberGroup.COUNT\n };\n this.chartType = Chart.Type.BAR;\n this.oldChartType = null;\n this.chartColorScheme = 'chart-table-control';\n\n // chart config selection\n this.$chartSelect = null;\n this.$xAxisSelect = null;\n this.$yAxisSelect = null;\n this.$dataSelect = null;\n\n this.xAxis = null;\n this.yAxis = null;\n\n this.dateGroup = null;\n\n this._tableUpdatedHandler = this._onTableUpdated.bind(this);\n this._tableColumnStructureChangedHandler = this._onTableColumnStructureChanged.bind(this);\n this._chartValueClickedHandler = this._onChartValueClick.bind(this);\n }\n\n static DATE_GROUP_FLAG = 0x100;\n static MAX_AXIS_COUNT = 100;\n\n _init(model) {\n super._init(model);\n this.table.on('columnStructureChanged', this._tableColumnStructureChangedHandler);\n\n this.chart = scout.create('Chart', {\n parent: this\n });\n }\n\n _destroy() {\n this.table.off('columnStructureChanged', this._tableColumnStructureChangedHandler);\n super._destroy();\n }\n\n _computeEnabled(inheritAccessibility, parentEnabled) {\n if (!this._hasColumns() && !this.selected) {\n return false;\n }\n return super._computeEnabled(inheritAccessibility, parentEnabled);\n }\n\n _renderChart() {\n if (this.chart) {\n this.chart.render(this.$contentContainer);\n this.chart.$container.addClass(this.denseClass);\n }\n }\n\n _createLayout() {\n return new ChartTableControlLayout(this);\n }\n\n _renderChartType() {\n this._selectChartType();\n if (this.oldChartType) {\n this.$yAxisSelect.animateAVCSD('width', this.chartType === Chart.Type.BUBBLE ? 175 : 0);\n this.$yAxisSelect.animateAVCSD('margin-right', this.chartType === Chart.Type.BUBBLE ? 15 : 0);\n } else {\n this.$yAxisSelect.css('width', this.chartType === Chart.Type.BUBBLE ? 175 : 0);\n this.$yAxisSelect.css('margin-right', this.chartType === Chart.Type.BUBBLE ? 15 : 0);\n }\n\n if (this.contentRendered) {\n this.chart.$container.animateAVCSD('opacity', 0, () => {\n this.chart.$container.css('opacity', 1);\n this._drawChart();\n });\n }\n }\n\n _selectChartType() {\n objects.values(this._chartTypeMap).forEach($element => {\n $element.removeClass('selected');\n });\n this._chartTypeMap[this.chartType].addClass('selected');\n }\n\n _renderChartGroup1() {\n this._renderChartGroup(1);\n }\n\n _renderChartGroup2() {\n this._renderChartGroup(2);\n }\n\n _renderChartGroup(groupId) {\n if (!this._hasColumns()) {\n return;\n }\n let groupName = 'chartGroup' + groupId;\n let map = '_' + groupName + 'Map';\n let chartGroup = this[groupName];\n if (chartGroup) {\n let $element = this[map][chartGroup.id];\n $element.siblings().animateAVCSD('height', 30);\n $element.selectOne('selected');\n\n if (chartGroup.modifier > 0) {\n let dateGroupIndex = chartGroup.modifier ^ ChartTableControl.DATE_GROUP_FLAG;\n $element.animateAVCSD('height', 42);\n $element.children('.select-axis-group').text(this.dateGroup[dateGroupIndex][1]);\n }\n if (this.contentRendered) {\n this._drawChart();\n }\n }\n }\n\n _renderChartAggregation() {\n let $element = this._aggregationMap[this.chartAggregation.id || 'all'];\n if ($element) {\n $element.selectOne('selected');\n $element\n .removeClass('data-sum')\n .removeClass('data-avg');\n $element.addClass(this._getAggregationCssClass());\n if (this.contentRendered) {\n this._drawChart();\n }\n }\n }\n\n _getAggregationCssClass() {\n switch (this.chartAggregation.modifier) {\n case TableMatrix.NumberGroup.COUNT:\n return 'data-count';\n case TableMatrix.NumberGroup.SUM:\n return 'data-sum';\n case TableMatrix.NumberGroup.AVG:\n return 'data-avg';\n default:\n return null;\n }\n }\n\n _renderChartSelect(cssClass, chartType, renderSvgIcon) {\n let $svg = this.$chartSelect\n .appendSVG('svg', cssClass + ' select-chart')\n .toggleClass('disabled', !this.enabledComputed || !this._hasColumns())\n .data('chartType', chartType);\n\n if (this.enabledComputed && this._hasColumns()) {\n $svg.on('click', this._onClickChartType.bind(this));\n }\n\n this._chartTypeMap[chartType] = $svg;\n\n renderSvgIcon($svg);\n }\n\n /**\n * Appends a chart selection divs to this.$contentContainer and sets the this.$chartSelect property.\n * */\n _renderChartSelectContainer() {\n // create container\n this.$chartSelect = this.$contentContainer.appendDiv('chart-select');\n\n // create chart types for selection\n this._chartTypeMap = {};\n\n let supportedChartTypes = this._getSupportedChartTypes();\n\n if (scout.isOneOf(Chart.Type.BAR, supportedChartTypes)) {\n this._renderChartSelect('chart-bar', Chart.Type.BAR, renderSvgIconBar);\n }\n if (scout.isOneOf(Chart.Type.BAR_HORIZONTAL, supportedChartTypes)) {\n this._renderChartSelect('chart-stacked', Chart.Type.BAR_HORIZONTAL, renderSvgIconStacked);\n }\n if (scout.isOneOf(Chart.Type.LINE, supportedChartTypes)) {\n this._renderChartSelect('chart-line', Chart.Type.LINE, renderSvgIconLine);\n }\n if (scout.isOneOf(Chart.Type.PIE, supportedChartTypes)) {\n this._renderChartSelect('chart-pie', Chart.Type.PIE, renderSvgIconPie.bind(this));\n }\n if (scout.isOneOf(Chart.Type.BUBBLE, supportedChartTypes)) {\n this._renderChartSelect('chart-bubble', Chart.Type.BUBBLE, renderSvgIconBubble);\n }\n\n function renderSvgIconBar($svg) {\n let show = [2, 4, 3, 3.5, 5];\n\n for (let s = 0; s < show.length; s++) {\n $svg.appendSVG('rect', 'select-fill')\n .attr('x', s * 13)\n .attr('y', 50 - show[s] * 9)\n .attr('width', 11)\n .attr('height', show[s] * 9);\n }\n }\n\n function renderSvgIconStacked($svg) {\n let show = [2, 4, 3.5, 4.5];\n\n for (let s = 0; s < show.length; s++) {\n $svg.appendSVG('rect', 'select-fill')\n .attr('x', 0)\n .attr('y', 16 + s * 9)\n .attr('width', show[s] * 14)\n .attr('height', 7);\n }\n }\n\n function renderSvgIconLine($svg) {\n let show = [0, 1.7, 1, 2, 1.5, 2.5],\n pathPoints = [];\n\n for (let s = 0; s < show.length; s++) {\n pathPoints.push(2 + (s * 12) + ',' + (45 - show[s] * 11));\n }\n\n $svg\n .appendSVG('path', 'select-fill-line')\n .attr('d', 'M' + pathPoints.join('L'));\n }\n\n function renderSvgIconPie($svg) {\n let show = [\n [0, 0.1],\n [0.1, 0.25],\n [0.25, 1]\n ];\n\n for (let s = 0; s < show.length; s++) {\n $svg\n .appendSVG('path', 'select-fill-pie')\n .attr('d', this._pathSegment(37, 30, 24, show[s][0], show[s][1]));\n }\n }\n\n function renderSvgIconBubble($svg) {\n $svg.appendSVG('line', 'select-fill-line')\n .attr('x1', 3).attr('y1', 53)\n .attr('x2', 63).attr('y2', 53);\n\n $svg.appendSVG('line', 'select-fill-line')\n .attr('x1', 8).attr('y1', 12)\n .attr('x2', 8).attr('y2', 58);\n\n $svg.appendSVG('circle', 'select-fill')\n .attr('cx', 22).attr('cy', 40)\n .attr('r', 5);\n\n $svg.appendSVG('circle', 'select-fill')\n .attr('cx', 50).attr('cy', 26)\n .attr('r', 11);\n }\n }\n\n _getSupportedChartTypes() {\n return [\n Chart.Type.BAR,\n Chart.Type.BAR_HORIZONTAL,\n Chart.Type.LINE,\n Chart.Type.PIE,\n Chart.Type.BUBBLE\n ];\n }\n\n _onClickChartType(event) {\n let $target = $(event.currentTarget),\n chartType = $target.data('chartType');\n this.setChartType(chartType);\n }\n\n _onClickChartGroup(event) {\n let $target = $(event.currentTarget),\n groupId = $target.parent().data('groupId'),\n column = $target.data('column'),\n origModifier = $target.data('modifier');\n\n // do nothing when item is disabled\n if (!$target.isEnabled()) {\n return;\n }\n\n let modifier = $target.isSelected() ? this._nextDateModifier(origModifier) : origModifier;\n $target.data('modifier', modifier);\n\n let config = {\n id: column ? column.id : null,\n modifier: modifier\n };\n\n this._setChartGroup(groupId, config);\n }\n\n _onClickAggregation(event) {\n let $target = $(event.currentTarget);\n // update modifier\n let origModifier = $target.data('modifier');\n let modifier = $target.isSelected() ? this._nextModifier(origModifier) : origModifier;\n $target.data('modifier', modifier);\n\n let column = $target.data('column');\n let aggregation = {\n id: column ? column.id : null,\n modifier: modifier\n };\n\n this._setChartAggregation(aggregation);\n }\n\n _nextDateModifier(modifier) {\n switch (modifier) {\n case TableMatrix.DateGroup.DATE:\n return TableMatrix.DateGroup.MONTH;\n case TableMatrix.DateGroup.MONTH:\n return TableMatrix.DateGroup.WEEKDAY;\n case TableMatrix.DateGroup.WEEKDAY:\n return TableMatrix.DateGroup.YEAR;\n case TableMatrix.DateGroup.YEAR:\n return TableMatrix.DateGroup.DATE;\n default:\n return modifier;\n }\n }\n\n _nextModifier(modifier) {\n switch (modifier) {\n case TableMatrix.NumberGroup.SUM:\n return TableMatrix.NumberGroup.AVG;\n case TableMatrix.NumberGroup.AVG:\n return TableMatrix.NumberGroup.SUM;\n default:\n return modifier;\n }\n }\n\n _setChartAggregation(chartAggregation) {\n if (chartAggregation === this.chartAggregation) {\n return;\n }\n this._setProperty('chartAggregation', chartAggregation);\n if (this.contentRendered) {\n this._renderChartAggregation();\n }\n }\n\n _setChartGroup1(chartGroup) {\n this._setChartGroup(1, chartGroup);\n }\n\n _setChartGroup2(chartGroup) {\n this._setChartGroup(2, chartGroup);\n }\n\n _setChartGroup(groupId, chartGroup) {\n let propertyName = 'chartGroup' + groupId;\n this._changeProperty(propertyName, chartGroup);\n }\n\n _changeProperty(prop, value) {\n if (value === this[prop]) {\n return;\n }\n this._setProperty(prop, value);\n if (this.contentRendered) {\n this['_render' + prop.charAt(0).toUpperCase() + prop.slice(1)]();\n }\n }\n\n setChartType(chartType) {\n this.oldChartType = this.chartType;\n this.setProperty('chartType', chartType);\n }\n\n _hasColumns() {\n return this.table.columns.length !== 0;\n }\n\n _axisCount(columnCount, column) {\n let i, tmpColumn;\n for (i = 0; i < columnCount.length; i++) {\n tmpColumn = columnCount[i][0];\n if (tmpColumn === column) {\n return columnCount[i][1];\n }\n }\n return 0;\n }\n\n _plainAxisText(column, text) {\n if (column.headerHtmlEnabled) {\n let plainText = strings.plainText(text);\n return plainText.replace(/\\n/g, ' ');\n }\n return text;\n }\n\n _renderContent($parent) {\n this.$contentContainer = $parent.appendDiv('chart-container');\n\n // scrollbars\n this._installScrollbars();\n\n this._renderChartSelectContainer();\n\n // group functions for dates\n this.dateGroup = [\n [TableMatrix.DateGroup.YEAR, this.session.text('ui.groupedByYear')],\n [TableMatrix.DateGroup.MONTH, this.session.text('ui.groupedByMonth')],\n [TableMatrix.DateGroup.WEEKDAY, this.session.text('ui.groupedByWeekday')],\n [TableMatrix.DateGroup.DATE, this.session.text('ui.groupedByDate')]\n ];\n\n // listeners\n this._filterResetListener = this.table.on('filterReset', event => {\n if (this.chart) {\n this.chart.setCheckedItems([]);\n }\n });\n\n this._addListeners();\n\n // add addition rectangle for hover and event handling\n $('.select-chart', this.$contentContainer)\n .appendSVG('rect', 'select-events')\n .attr('width', 65)\n .attr('height', 60)\n .attr('fill', 'none')\n .attr('pointer-events', 'all');\n\n let columnCount = this._renderAxisSelectors();\n\n // draw first chart\n this._renderChart();\n\n this._initializeSelection(columnCount);\n\n this._renderChartParts();\n\n this._drawChart();\n }\n\n _addListeners() {\n this.table.on('rowsInserted', this._tableUpdatedHandler);\n this.table.on('rowsDeleted', this._tableUpdatedHandler);\n this.table.on('allRowsDeleted', this._tableUpdatedHandler);\n this.chart.on('valueClick', this._chartValueClickedHandler);\n }\n\n _renderAxisSelectors() {\n // create container for x/y-axis\n this.$xAxisSelect = this.$contentContainer\n .appendDiv('xaxis-select')\n .data('groupId', 1);\n this.$yAxisSelect = this.$contentContainer\n .appendDiv('yaxis-select')\n .data('groupId', 2);\n\n // map for selection (column id, $element)\n this._chartGroup1Map = {};\n this._chartGroup2Map = {};\n\n // find best x and y axis: best is 9 different entries\n let matrix = new TableMatrix(this.table, this.session),\n columnCount = matrix.columnCount(false); // filterNumberColumns false: number columns will be filtered below\n columnCount.sort((a, b) => {\n return Math.abs(a[1] - 8) - Math.abs(b[1] - 8);\n });\n\n let axisCount, enabled,\n numberOfAxisItems = 0,\n columns = matrix.columns(false); // filterNumberColumns false: number columns will be filtered below\n\n // all x/y-axis for selection\n for (let c1 = 0; c1 < columns.length; c1++) {\n let content, $div, $yDiv,\n column1 = columns[c1];\n\n // Check if data-spread is too large. This is a problem in large tables where a column has unique values.\n // We cannot create DOM elements for each unique value because this causes all browser to stop script\n // execution. May be in a later release we could implement some sort of data aggregation, but this is not\n // a simple task on the UI layer, because it requires some know-how about the entity represented by the table,\n // which we don't have in the UI. Another possible solution: make the charts scrollable, however this is\n // probably not a good idea, because with a lot of data, the chart fails to provide an oversight over the data\n // when the user must scroll and only sees a small part of the chart.\n if (column1 instanceof DateColumn) {\n // dates are always aggregated and thus we must not check if the chart has \"too much data\".\n enabled = true;\n } else {\n axisCount = this._axisCount(columnCount, column1);\n enabled = (axisCount <= ChartTableControl.MAX_AXIS_COUNT);\n }\n\n content = this._axisContentForColumn(column1);\n\n $div = this.$contentContainer\n .makeDiv('select-axis', this._plainAxisText(column1, content.text))\n .data('column', column1)\n .setEnabled(enabled);\n\n if (!enabled) {\n if (this.chartGroup1 && this.chartGroup1.id === column1.id) {\n this.chartGroup1 = null;\n this.chartGroup2 = null;\n }\n if (this.chartGroup2 && this.chartGroup2.id === column1.id) {\n this.chartGroup2 = null;\n }\n }\n\n if (content.icon) {\n $div.addClass(content.icon.appendCssClass('font-icon'));\n }\n\n if (column1 instanceof DateColumn) {\n $div\n .data('modifier', TableMatrix.DateGroup.YEAR)\n .appendDiv('select-axis-group', this.dateGroup[0][1]);\n }\n\n // install click handler or tooltip\n if (enabled) {\n $div.on('click', this._onClickChartGroup.bind(this));\n tooltips.installForEllipsis($div, {\n parent: this\n });\n } else {\n tooltips.install($div, {\n parent: this,\n text: this.session.text('ui.TooMuchData')\n });\n }\n\n numberOfAxisItems++;\n $yDiv = $div.clone(true);\n this._chartGroup1Map[column1.id] = $div;\n this._chartGroup2Map[column1.id] = $yDiv;\n this.$xAxisSelect.append($div);\n this.$yAxisSelect.append($yDiv);\n }\n\n if (numberOfAxisItems < 2) {\n let $bubbleSelect = this.$contentContainer.find('.chart-bubble.select-chart');\n if ($bubbleSelect) {\n $bubbleSelect.remove();\n }\n }\n\n // map for selection (column id, $element)\n this._aggregationMap = {};\n\n if (this._hasColumns()) {\n // create container for data\n this.$dataSelect = this.$contentContainer.appendDiv('data-select');\n\n // add data-count for no column restriction (all columns)\n let countDesc = this.session.text('ui.Count');\n this._aggregationMap.all = this.$dataSelect\n .appendDiv('select-data data-count', countDesc)\n .data('column', null)\n .data('modifier', TableMatrix.NumberGroup.COUNT);\n\n // all data for selection\n for (let c2 = 0; c2 < columns.length; c2++) {\n let column2 = columns[c2];\n let fakeNumberLabelCol2 = c2 + 1;\n\n if (column2 instanceof NumberColumn) {\n let columnText;\n if (strings.hasText(column2.text)) {\n columnText = this._plainAxisText(column2, column2.text);\n } else if (strings.hasText(column2.headerTooltipText)) {\n columnText = column2.headerTooltipText;\n } else {\n columnText = '[' + fakeNumberLabelCol2 + ']';\n }\n\n this._aggregationMap[column2.id] = this.$dataSelect\n .appendDiv('select-data data-sum', columnText)\n .data('column', column2)\n .data('modifier', TableMatrix.NumberGroup.SUM);\n }\n }\n\n // click handling for data\n $('.select-data', this.$contentContainer)\n .on('click', this._onClickAggregation.bind(this));\n }\n\n return columnCount;\n }\n\n _initializeSelection(columnCount) {\n let $axisColumns;\n\n if (!this.chartType) {\n this.setChartType(Chart.Type.BAR);\n }\n\n // no id selected\n if (!this.chartAggregation || !this._aggregationMap[this.chartAggregation.id]) {\n this._setChartAggregation({\n id: null,\n modifier: TableMatrix.NumberGroup.COUNT\n });\n }\n\n // apply default selection\n if (!this.chartGroup1 || !this.chartGroup1.id || !this._chartGroup1Map[this.chartGroup1.id]) {\n $axisColumns = this.$xAxisSelect.children(':not(.disabled)');\n this._setDefaultSelectionForGroup(1, columnCount, $axisColumns, 0 /* only use the first column for the first group */);\n }\n if (!this.chartGroup2 || !this.chartGroup2.id || !this._chartGroup2Map[this.chartGroup2.id]) {\n $axisColumns = this.$yAxisSelect.children(':not(.disabled)');\n this._setDefaultSelectionForGroup(2, columnCount, $axisColumns, 1 /* try to use the second column for the second group (if available). Otherwise the first column is used. */);\n }\n }\n\n /**\n * Applies the default column selection for the specified chartGroup.\n * The implementation only considers columns that are part of the specified columnCount matrix and $candidates array.\n * From all these columns the last match that is lower or equal to the specified maxIndex is set as default chart group.\n *\n * @param {number} chartGroup The number of the chart group (1 or 2) for which the default column should be set.\n * @param {matrix} columnCount Column-count matrix as returned by TableMatrix#columnCount(). Holds possible grouping columns.\n * @param {array} $candidates jQuery array holding all axis columns that could be used as default.\n * @param {number} maxIndex The maximum column index to use as default column for the specified chartGroup.\n */\n _setDefaultSelectionForGroup(chartGroup, columnCount, $candidates, maxIndex) {\n let col = this._getDefaultSelectedColumn(columnCount, $candidates, maxIndex);\n if (col) {\n this._setChartGroup(chartGroup, this._getDefaultChartGroup(col));\n }\n }\n\n _getDefaultSelectedColumn(columnCount, $candidates, maxIndex) {\n let matchCounter = 0,\n curColumn,\n result;\n for (let j = 0; j < columnCount.length && matchCounter <= maxIndex; j++) {\n curColumn = columnCount[j][0];\n if (this._existsInAxisColumns($candidates, curColumn)) {\n result = curColumn; // remember possible result\n matchCounter++;\n }\n }\n return result;\n }\n\n _existsInAxisColumns($candidates, columnToSearch) {\n for (let i = 0; i < $candidates.length; i++) {\n if ($candidates.eq(i).data('column') === columnToSearch) {\n return true;\n }\n }\n return false;\n }\n\n _getDefaultChartGroup(column) {\n let modifier;\n if (column instanceof DateColumn) {\n modifier = 256;\n }\n return {\n id: column.id,\n modifier: modifier\n };\n }\n\n _renderChartParts() {\n this._renderChartType();\n this._renderChartAggregation();\n this._renderChartGroup1();\n this._renderChartGroup2();\n }\n\n _drawChart() {\n if (!this._hasColumns()) {\n this._hideChart();\n return;\n }\n\n let cube = this._calculateValues();\n\n if (cube.length) {\n this.chart.setVisible(true);\n } else {\n this._hideChart();\n return;\n }\n\n let config = {\n type: this.chartType,\n options: {\n handleResize: true,\n colorScheme: this.chartColorScheme,\n maxSegments: 5,\n legend: {\n display: false\n }\n }\n };\n\n let iconClasses = [];\n config.data = this._computeData(iconClasses, cube);\n this._adjustFont(config, iconClasses);\n\n this._adjustConfig(config);\n\n this.chart.setConfig(config);\n\n let checkedItems = this._computeCheckedItems(config.data.datasets[0].deterministicKeys);\n this.chart.setCheckedItems(checkedItems);\n }\n\n _hideChart() {\n this.chart.setConfig({\n type: this.chartType\n });\n this.chart.setVisible(false);\n }\n\n _getDatasetLabel() {\n let elem = this._aggregationMap[this.chartAggregation.id || 'all'];\n return (elem ? elem.text() : null) || this.session.text('ui.Value');\n }\n\n _calculateValues() {\n // build matrix\n let matrix = new TableMatrix(this.table, this.session);\n\n // aggregation (data axis)\n let tableData = this.chartAggregation.id ? this._aggregationMap[this.chartAggregation.id].data('column') : -1;\n matrix.addData(tableData, this.chartAggregation.modifier);\n\n // find xAxis\n if (this.chartGroup1) {\n let axis = this._chartGroup1Map[this.chartGroup1.id].data('column');\n this.xAxis = matrix.addAxis(axis, this.chartGroup1.modifier);\n }\n\n // find yAxis\n // in case of bubble\n if (this.chartType === Chart.Type.BUBBLE && this.chartGroup2) {\n let axis2 = this._chartGroup2Map[this.chartGroup2.id].data('column');\n this.yAxis = matrix.addAxis(axis2, this.chartGroup2.modifier);\n } else {\n this.yAxis = null;\n }\n\n // return not possible to draw chart\n if (matrix.isEmpty() || !matrix.isMatrixValid()) {\n return false;\n }\n\n // calculate matrix\n return matrix.calculate();\n }\n\n _getXAxis() {\n return this.xAxis;\n }\n\n _getYAxis() {\n return this.yAxis;\n }\n\n _computeData(iconClasses, cube) {\n let data = {\n datasets: [{\n label: this._getDatasetLabel()\n }]\n };\n if (!cube) {\n return data;\n }\n iconClasses = iconClasses || [];\n\n let segments = [];\n\n if (this.chartType === Chart.Type.BUBBLE) {\n segments = this._computeBubbleData(iconClasses, cube);\n } else {\n let xAxis = this._getXAxis();\n for (let x = 0; x < xAxis.length; x++) {\n let label,\n keyX = xAxis[x];\n if (xAxis.column instanceof NumberColumn) {\n label = keyX;\n } else {\n label = this._handleIconLabel(xAxis.format(keyX), xAxis, iconClasses);\n }\n segments.push({\n value: cube.getValue([keyX])[0],\n label: label,\n deterministicKey: xAxis.keyToDeterministicKey(keyX)\n });\n }\n }\n let dataset = data.datasets[0],\n labels = [];\n\n dataset.data = [];\n dataset.deterministicKeys = [];\n\n segments.forEach(elem => {\n dataset.data.push(elem.value);\n dataset.deterministicKeys.push(elem.deterministicKey);\n if (!objects.isNullOrUndefined(elem.label)) {\n labels.push(elem.label);\n }\n });\n\n if (labels.length) {\n data.labels = labels;\n }\n\n // duplicate the dataset for pie charts, this is necessary for datalabels on the segments and outside of the pie chart\n if (this.chartType === Chart.Type.PIE) {\n data.datasets[1] = $.extend(true, {}, dataset);\n }\n\n return data;\n }\n\n _computeBubbleData(iconClasses, cube) {\n if (!cube) {\n return [];\n }\n iconClasses = iconClasses || [];\n\n let xAxis = this._getXAxis(),\n yAxis = this._getYAxis(),\n segments = [];\n for (let x = 0; x < xAxis.length; x++) {\n let keyX = xAxis[x],\n xValue = keyX;\n this._handleIconLabel(xAxis.format(keyX), xAxis, iconClasses);\n if (!(xAxis.column instanceof NumberColumn) && xValue === null) {\n xValue = xAxis.max;\n }\n if (xAxis.column instanceof DateColumn) {\n xValue = xValue - xAxis.min;\n }\n for (let y = 0; y < yAxis.length; y++) {\n let keyY = yAxis[y],\n yValue = keyY,\n cubeValues = cube.getValue([keyX, keyY]);\n this._handleIconLabel(yAxis.format(keyY), yAxis, iconClasses);\n if (cubeValues && cubeValues.length) {\n if (!(yAxis.column instanceof NumberColumn) && yValue === null) {\n yValue = yAxis.max;\n }\n if (yAxis.column instanceof DateColumn) {\n yValue = yValue - yAxis.min;\n }\n segments.push({\n value: {\n x: xValue,\n y: yValue,\n z: cubeValues[0]\n },\n deterministicKey: [xAxis.keyToDeterministicKey(keyX), yAxis.keyToDeterministicKey(keyY)]\n });\n }\n }\n }\n return segments;\n }\n\n _handleIconLabel(label, axis, iconClasses) {\n if (axis && axis.textIsIcon) {\n let icon = icons.parseIconId(label);\n if (icon && icon.isFontIcon()) {\n iconClasses.push(...icon.appendCssClass('font-icon').split(' '));\n return icon.iconCharacter;\n }\n }\n return label;\n }\n\n _adjustFont(config, iconClasses) {\n if (!config || !iconClasses) {\n return;\n }\n\n iconClasses = iconClasses.filter((value, index, self) => {\n return self.indexOf(value) === index;\n });\n if (iconClasses.length) {\n let fontFamily = styles.get(iconClasses, 'font-family').fontFamily;\n if (this.chartType !== Chart.Type.PIE) {\n config.options = $.extend(true, {}, config.options, {\n scales: {\n xAxes: [{\n ticks: {\n fontFamily: fontFamily\n }\n }],\n yAxes: [{\n ticks: {\n fontFamily: fontFamily\n }\n }]\n }\n });\n }\n config.options = $.extend(true, {}, config.options, {\n tooltips: {\n titleFontFamily: fontFamily\n }\n });\n }\n }\n\n _adjustLabels(config) {\n if (!config) {\n return;\n }\n\n let xAxis = this._getXAxis(),\n yAxis = this._getYAxis();\n if (this.chartType === Chart.Type.BUBBLE) {\n if (!(xAxis.column instanceof NumberColumn)) {\n config.options = $.extend(true, {}, config.options, {\n scales: {\n xAxes: [{\n ticks: {\n callback: label => this._formatLabel(label, xAxis)\n }\n }]\n }\n });\n }\n if (!(yAxis.column instanceof NumberColumn)) {\n config.options = $.extend(true, {}, config.options, {\n scales: {\n yAxes: [{\n ticks: {\n callback: label => this._formatLabel(label, yAxis)\n }\n }]\n }\n });\n }\n } else {\n if (xAxis.column instanceof NumberColumn) {\n config.options = $.extend(true, {}, config.options, {\n reformatLabels: true\n });\n }\n }\n }\n\n _formatLabel(label, axis) {\n if (axis) {\n if (axis.column instanceof DateColumn) {\n label = label + axis.min;\n if (label !== parseInt(label) || (axis.length < 2 && (label < axis.min || label > axis.max))) {\n return null;\n }\n }\n if (axis.indexOf(null) !== -1) {\n if (label === axis.max) {\n label = null;\n } else if (label > axis.max) {\n return null;\n }\n }\n label = axis.format(label);\n if (axis.textIsIcon) {\n let icon = icons.parseIconId(label);\n if (icon && icon.isFontIcon()) {\n label = icon.iconCharacter;\n }\n }\n }\n return label;\n }\n\n _adjustConfig(config) {\n if (!config) {\n return;\n }\n\n this._adjustLabels(config);\n this._adjustClickable(config);\n\n if (this.chartType === Chart.Type.BUBBLE) {\n this._adjustBubble(config);\n } else if (this.chartType === Chart.Type.PIE) {\n this._adjustPie(config);\n } else {\n this._adjustScales(config);\n }\n }\n\n _adjustClickable(config) {\n if (!config) {\n return;\n }\n\n if (this._isChartClickable()) {\n config.options = $.extend(true, {}, config.options, {\n clickable: true,\n checkable: true,\n otherSegmentClickable: true\n });\n }\n }\n\n _isChartClickable() {\n return true;\n }\n\n _adjustBubble(config) {\n if (!config || this.chartType !== Chart.Type.BUBBLE) {\n return;\n }\n\n config.bubble = $.extend(true, {}, config.bubble, {\n sizeOfLargestBubble: 25,\n minBubbleSize: 5\n });\n }\n\n _adjustPie(config) {\n if (!config || this.chartType !== Chart.Type.PIE) {\n return;\n }\n\n // first dataset is hidden but datalabels are displayed outside of the chart\n config.data.datasets[0].weight = 0;\n config.data.datasets[0].datalabels = {\n display: 'auto',\n color: styles.get([this.chartColorScheme, this.chartType + '-chart', 'elements', 'label'], 'fill').fill,\n formatter: (value, context) => {\n return context.chart.data.labels[context.dataIndex];\n },\n anchor: 'end',\n align: 'end',\n clamp: true,\n offset: 10,\n padding: 4\n };\n\n config.options = $.extend(true, {}, config.options, {\n plugins: {\n datalabels: {\n display: true\n }\n }\n });\n // Compensate the margin of the container so that the chart is always centered vertically\n let margin = this.chart.$container.cssMarginTop() - this.chart.$container.cssMarginBottom();\n config.options = $.extend(true, {}, config.options, {\n layout: {\n padding: {\n top: 30 + (Math.sign(margin) < 0 ? Math.abs(margin) : 0),\n bottom: 30 + (Math.sign(margin) > 0 ? margin : 0)\n }\n }\n });\n }\n\n _adjustScales(config) {\n if (!config) {\n return;\n }\n\n config.options = $.extend(true, {}, config.options, {\n scales: {\n xAxes: [{\n ticks: {\n beginAtZero: true\n }\n }],\n yAxes: [{\n ticks: {\n beginAtZero: true\n }\n }]\n }\n });\n }\n\n _computeCheckedItems(deterministicKeys) {\n if (!deterministicKeys) {\n return [];\n }\n\n let xAxis = this._getXAxis(),\n yAxis = this._getYAxis(),\n tableFilter = this.table.getFilter(ChartTableUserFilter.TYPE),\n filters = [],\n checkedIndices = [];\n\n if (tableFilter && (tableFilter.xAxis || {}).column === (xAxis || {}).column && (tableFilter.yAxis || {}).column === (yAxis || {}).column) {\n filters = tableFilter.filters;\n }\n\n deterministicKeys.forEach((deterministicKey, idx) => {\n if (filters.filter(filter => (Array.isArray(filter.deterministicKey) && Array.isArray(deterministicKey)) ? arrays.equals(filter.deterministicKey, deterministicKey) : filter.deterministicKey === deterministicKey).length) {\n checkedIndices.push(idx);\n }\n });\n let datasetIndex = 0;\n if (this.chartType === Chart.Type.PIE) {\n let maxSegments = this.chart.config.options.maxSegments,\n collapsedIndices = arrays.init(deterministicKeys.length - maxSegments).map((elem, idx) => idx + maxSegments);\n if (!arrays.containsAll(checkedIndices, collapsedIndices)) {\n arrays.remove(checkedIndices, maxSegments - 1);\n }\n arrays.removeAll(checkedIndices, collapsedIndices);\n\n // first dataset is hidden on pie charts\n datasetIndex = 1;\n }\n\n let checkedItems = [];\n if (checkedIndices.length) {\n checkedIndices.forEach(index => {\n checkedItems.push({\n datasetIndex: datasetIndex,\n dataIndex: index\n });\n });\n }\n\n return checkedItems;\n }\n\n _onChartValueClick() {\n // prepare filter\n let filters = [];\n if (this.chart && this.chart.config.data) {\n let maxSegments = this.chart.config.options.maxSegments,\n // first dataset is hidden on pie charts\n datasetIndex = this.chartType === Chart.Type.PIE ? 1 : 0,\n dataset = this.chart.config.data.datasets[datasetIndex],\n getFilters = index => ({deterministicKey: dataset.deterministicKeys[index]});\n if (this.chartType === Chart.Type.PIE) {\n getFilters = index => {\n index = parseInt(index);\n if (maxSegments && maxSegments === index + 1) {\n return arrays.init(dataset.deterministicKeys.length - index).map((elem, idx) => ({deterministicKey: dataset.deterministicKeys[idx + index]}));\n }\n return {deterministicKey: dataset.deterministicKeys[index]};\n };\n }\n\n let checkedIndices = this.chart.checkedItems.filter(item => item.datasetIndex === datasetIndex)\n .map(item => item.dataIndex);\n checkedIndices.forEach(index => {\n arrays.pushAll(filters, getFilters(index));\n });\n }\n\n // filter function\n if (filters.length) {\n let filter = scout.create('ChartTableUserFilter', {\n session: this.session,\n table: this.table,\n text: this.tooltipText,\n xAxis: this._getXAxis(),\n yAxis: this._getYAxis(),\n filters: filters\n });\n\n this.table.addFilter(filter);\n } else {\n this.table.removeFilterByKey(ChartTableUserFilter.TYPE);\n }\n\n this.table.filter();\n }\n\n _axisContentForColumn(column) {\n let icon,\n text = column.text;\n\n if (strings.hasText(text)) {\n return {\n text: text\n };\n }\n\n if (column.headerIconId) {\n icon = icons.parseIconId(column.headerIconId);\n if (icon.isFontIcon()) {\n return {\n text: icon.iconCharacter,\n icon: icon\n };\n }\n }\n\n if (column.headerTooltipText) {\n return {\n text: column.headerTooltipText\n };\n }\n\n return {\n text: '[' + (this.table.visibleColumns().indexOf(column) + 1) + ']'\n };\n }\n\n _removeContent() {\n this._removeScrollbars();\n this.$contentContainer.remove();\n this.chart.remove();\n this.table.events.removeListener(this._filterResetListener);\n this._removeListeners();\n this.oldChartType = null;\n this.recomputeEnabled();\n }\n\n _removeScrollbars() {\n this.$xAxisSelect.each((index, element) => {\n tooltips.uninstall($(element));\n });\n this.$yAxisSelect.each((index, element) => {\n tooltips.uninstall($(element));\n });\n this._uninstallScrollbars();\n }\n\n _removeListeners() {\n this.table.off('rowsInserted', this._tableUpdatedHandler);\n this.table.off('rowsDeleted', this._tableUpdatedHandler);\n this.table.off('allRowsDeleted', this._tableUpdatedHandler);\n this.chart.off('valueClick', this._chartValueClickedHandler);\n }\n\n _pathSegment(mx, my, r, start, end) {\n let s = start * 2 * Math.PI,\n e = end * 2 * Math.PI,\n pathString = '';\n\n pathString += 'M' + (mx + r * Math.sin(s)) + ',' + (my - r * Math.cos(s));\n pathString += 'A' + r + ', ' + r;\n pathString += (end - start < 0.5) ? ' 0 0,1 ' : ' 0 1,1 ';\n pathString += (mx + r * Math.sin(e)) + ',' + (my - r * Math.cos(e));\n pathString += 'L' + mx + ',' + my + 'Z';\n\n return pathString;\n }\n\n _onTableUpdated(event) {\n if (this._tableUpdatedTimeOutId) {\n return;\n }\n\n this._tableUpdatedTimeOutId = setTimeout(() => {\n this._tableUpdatedTimeOutId = null;\n\n if (!this.rendered) {\n return;\n }\n\n this._setChartGroup1(null);\n this._setChartGroup2(null);\n this.removeContent();\n this.renderContent();\n });\n }\n\n _onTableColumnStructureChanged() {\n this.recomputeEnabled();\n if (this.contentRendered && this.selected) {\n this._onTableUpdated();\n }\n }\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {TableControlAdapter} from '@eclipse-scout/core';\n\nexport default class ChartTableControlAdapter extends TableControlAdapter {\n\n constructor() {\n super();\n this._addRemoteProperties(['chartType', 'chartAggregation', 'chartGroup1', 'chartGroup2']);\n }\n\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {AbstractLayout, scrollbars} from '@eclipse-scout/core';\n\nexport default class ChartTableControlLayout extends AbstractLayout {\n\n constructor(control) {\n super();\n this.control = control;\n }\n\n layout($container) {\n if (!this.control.contentRendered) {\n return;\n }\n scrollbars.update(this.control.$contentContainer);\n }\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {arrays, TableMatrix, TableUserFilter} from '@eclipse-scout/core';\n\nexport default class ChartTableUserFilter extends TableUserFilter {\n\n constructor() {\n super();\n this.filterType = ChartTableUserFilter.TYPE;\n this.text = null;\n this.xAxis = null;\n this.yAxis = null;\n this.filters = [];\n this.columnIdX = null;\n this.columnIdY = null;\n }\n\n static TYPE = 'CHART';\n\n createLabel() {\n return this.text;\n }\n\n /**\n * @override TableUserFilter.js\n */\n createFilterAddedEventData() {\n let data = super.createFilterAddedEventData();\n data.text = this.text;\n data.filters = this.filters;\n data.columnIdX = (this.xAxis && this.xAxis.column) ? this.xAxis.column.id : null;\n data.columnIdY = (this.yAxis && this.yAxis.column) ? this.yAxis.column.id : null;\n return data;\n }\n\n calculate() {\n let matrix = new TableMatrix(this.table, this.session);\n let columnX = this.table.columnById(this.columnIdX);\n let axisGroupX = columnX.createFilter().axisGroup();\n this.xAxis = matrix.addAxis(columnX, axisGroupX);\n if (this.columnIdY) {\n let columnY = this.table.columnById(this.columnIdY);\n let axisGroupY = columnY.createFilter().axisGroup();\n this.yAxis = matrix.addAxis(columnY, axisGroupY);\n }\n matrix.calculate();\n }\n\n accept(row) {\n if (!this.xAxis) {\n // Lazy calculation. It is not possible on init, because the table is not rendered yet.\n this.calculate();\n }\n let value = this.xAxis.column.cellValueOrTextForCalculation(row);\n let deterministicKeyX = this.xAxis.normDeterministic(value);\n\n if (!this.yAxis) {\n return (this.filters.filter(filter => filter.deterministicKey === deterministicKeyX).length);\n }\n value = this.yAxis.column.cellValueOrTextForCalculation(row);\n let deterministicKeyY = this.yAxis.normDeterministic(value);\n return (this.filters.filter(filter => arrays.equals(filter.deterministicKey, [deterministicKeyX, deterministicKeyY])).length);\n }\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {FormFieldTile} from '@eclipse-scout/core';\n\nexport default class ChartFieldTile extends FormFieldTile {\n\n constructor() {\n super();\n this._chartConfigChangeHandler = this._onChartConfigChange.bind(this);\n }\n\n _renderColorScheme() {\n super._renderColorScheme();\n this._updateChartColorScheme();\n }\n\n _updateChartColorScheme() {\n let config = $.extend(true, {}, this.tileWidget.chart.config, {\n options: {\n colorScheme: this.colorScheme\n }\n });\n\n this.tileWidget.chart.setConfig(config);\n }\n\n _onChartConfigChange(event) {\n this._updateChartColorScheme();\n }\n\n _setTileWidget(tileWidget) {\n if (this.tileWidget) {\n this.tileWidget.chart.off('propertyChange:config', this._chartConfigChangeHandler);\n }\n super._setTileWidget(tileWidget);\n this.tileWidget.chart.on('propertyChange:config', this._chartConfigChangeHandler);\n }\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {FormFieldTileAdapter} from '@eclipse-scout/core';\n\nexport default class ChartFieldTileAdapter extends FormFieldTileAdapter {\n\n constructor() {\n super();\n }\n}\n","module.exports = scout;","module.exports = Chart;","module.exports = ChartDataLabels;","module.exports = jQuery;"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/chart/AbstractChartRenderer.js","webpack:///./src/chart/AbstractSvgChartRenderer.js","webpack:///./src/chart/Chart.js","webpack:///./src/chart/ChartAdapter.js","webpack:///./src/chart/ChartJsRenderer.js","webpack:///./src/chart/ChartJsTooltipDelay.js","webpack:///./src/chart/ChartLayout.js","webpack:///./src/chart/FulfillmentChartRenderer.js","webpack:///./src/chart/SalesfunnelChartRenderer.js","webpack:///./src/chart/SpeedoChartRenderer.js","webpack:///./src/chart/VennAsync3Calculator.js","webpack:///./src/chart/VennChartRenderer.js","webpack:///./src/chart/VennCircle.js","webpack:///./src/chart/VennCircleHelper.js","webpack:///./src/form/fields/chartfield/ChartField.js","webpack:///./src/form/fields/chartfield/ChartFieldAdapter.js","webpack:///./src/index.js","webpack:///./src/table/controls/ChartTableControl.js","webpack:///./src/table/controls/ChartTableControlAdapter.js","webpack:///./src/table/controls/ChartTableControlLayout.js","webpack:///./src/table/controls/ChartTableUserFilter.js","webpack:///./src/tile/ChartFieldTile.js","webpack:///./src/tile/ChartFieldTileAdapter.js","webpack:///external \"scout\"","webpack:///external \"Chart\"","webpack:///external \"ChartDataLabels\"","webpack:///external \"jQuery\""],"names":["AbstractChartRenderer","chart","session","rendering","rendered","animationDuration","firstOpaqueBackgroundColor","_validateChartData","_validate","chartData","data","chartValueGroups","length","i","chartValueGroup","values","config","options","autoColor","colorHexValue","cssClass","axes","requestAnimation","animation","duration","validate","_render","render","_renderCheckedItems","isDataUpdatable","_updateData","afterRemoveFunc","_removeAnimated","_remove","opts","AbstractSvgChartRenderer","chartBox","labelBox","clipId","ObjectFactory","get","createUniqueId","maskId","suppressLegendBox","$svg","$container","appendSVG","styles","getFirstOpaqueBackgroundColor","svgHeight","height","svgWidth","width","_initChartBox","_useFontSizeBig","addClass","FONT_SIZE_BIG","_useFontSizeMiddle","FONT_SIZE_MIDDLE","_useFontSizeSmall","FONT_SIZE_SMALL","_useFontSizeSmallest","FONT_SIZE_SMALLEST","isAttached","_renderInternal","chartAnimationStopping","children","stop","remove","xIndex","datasetIndex","dataIndex","text","legendLabelClass","$label","attr","textBounds","getBBox","e","x1","y1","x2","y2","lineClass","$line","animateSVG","x","y","label","labelClass","drawBackground","$background","xOffset","yOffset","mX","mY","animationFunc","step","now","fx","bind","$","Chart","DEFAULT_ANIMATION_DURATION","complete","removeAttr","$clip","id","$mask","find","each","attrXLINK","legendPositions","className","drawBackgroundBox","legend","detachFunc","attachFunc","removeFunc","tooltips","enabled","padding","backgroundWidth","lineHeight","backgroundHeight","positions","$legend","lengthLegend","horizontalSpace","h","Array","isArray","posIndex","yPos","v","_renderLineLabel","strings","truncateText","_measureText","Math","max","getComputedTextLength","push","autoPosition","posFunc","call","css","forEach","index","add","line","wires","_renderLine","$wire","detach","append","$field","chartRenderer","checkedItems","_updateChartTimeoutId","_updateChartOpts","updatedOnce","model","setConfig","$parent","appendDiv","htmlComp","HtmlComponent","install","setLayout","ChartLayout","_renderClickable","_renderCheckable","_renderChartType","_renderColorScheme","updateChart","debounce","DEFAULT_DEBOUNCE_TIMEOUT","setProperty","setCheckedItems","onlyUpdateData","defaultConfig","type","Type","PIE","colorScheme","colorSchemes","ColorSchemeId","DEFAULT","transparent","maxSegments","adjustGridMaxMin","clickable","checkable","display","position","Position","RIGHT","plugins","datalabels","extend","ensureColorScheme","objects","equalsRecursive","oldConfigWithNewData","_setProperty","_renderConfig","removeClass","_updateChartRenderer","arrays","ensure","_filterCheckedItems","datasetLengths","datasets","dataset","filteredCheckedItems","filter","item","renderCheckedItems","toggleClass","toggleColorSchemeClasses","clearTimeout","updateChartImplFn","updateChartImpl","doDebounce","setTimeout","updateData","shouldAnimateRemoveOnUpdate","removing","trigger","FULFILLMENT","FulfillmentChartRenderer","SPEEDO","SpeedoChartRenderer","SALESFUNNEL","SalesfunnelChartRenderer","VENN","VennChartRenderer","BAR","BAR_HORIZONTAL","LINE","COMBO_BAR_LINE","DOUGHNUT","POLAR_AREA","RADAR","BUBBLE","ChartJsRenderer","_resolveChartRenderer","event","clickedItem","checkedItem","Widget","TOP","BOTTOM","LEFT","CENTER","ChartAdapter","_send","_onWidgetValueClick","ModelAdapter","ChartJs","defaults","global","maintainAspectRatio","labels","usePointStyle","boxWidth","elements","tension","fill","borderWidth","point","radius","hitRadius","hoverRadius","hoverBorderWidth","arc","rectangle","borderSkipped","horizontalBar","cornerRadius","xPadding","yPadding","titleSpacing","titleMarginBottom","bodySpacing","chartJsGlobalsInitialized","chartJs","onlyIntegers","minSpaceBetweenYTicks","minSpaceBetweenXTicks","maxXAxesTicksHeigth","numSupportedColors","colorSchemeCssClass","minRadialChartDatalabelSpace","_tooltipTitle","_formatTooltipTitle","_tooltipLabel","_formatTooltipLabel","_tooltipLabelColor","_computeTooltipLabelColor","_labelFormatter","_formatLabel","_xLabelFormatter","_formatXLabel","_yLabelFormatter","_formatYLabel","_xAxisFitter","_fitXAxis","_yAxisFitter","_fitYAxis","_radialChartDatalabelsDisplayHandler","_displayDatalabelsOnRadialChart","_radialChartDatalabelsFormatter","_formatDatalabelsOnRadialChart","_datalabelsFormatter","_formatDatalabels","_datalabelBackgroundColorHandler","_getBackgroundColorOfDataset","_legendLabelGenerator","_generateLegendLabels","resetDatasetAfterHover","_clickHandler","_onClick","_hoverHandler","_onHover","_pointerHoverHandler","_onHoverPointer","legendHoverDatasets","_legendClickHandler","_onLegendClick","_legendHoverHandler","_onLegendHover","_legendPointerHoverHandler","_onLegendHoverPointer","_legendLeaveHandler","_onLegendLeave","_legendPointerLeaveHandler","_onLegendLeavePointer","_resizeHandler","_onResize","chartDataValid","scout","isOneOf","chartConfigDataValid","$canvas","appendElement","defaultFontFamily","_adjustConfig","_renderChart","animated","destroy","getContext","_adjustSize","chartArea","update","hiddenDataIndices","applyHiddenDatasetIndices","targetData","sourceData","transferProperty","source","target","property","setToUndefined","undefined","splice","min","targetLength","sourceLength","meta","getDatasetMeta","dataMeta","idx","hidden","targetDataset","sourceDataset","init","map","elem","_adjustColors","_checkItems","transferArrayValues","indices","changed","isNaN","checkedIndices","uncheckedIndices","removeAll","backgroundColor","checkedBackgroundColor","hoverBackgroundColor","checkedHoverBackgroundColor","pointBackgroundColor","checkedPointBackgroundColor","pointHoverBackgroundColor","checkedPointHoverBackgroundColor","pointRadius","checkedPointRadius","uncheckedBackgroundColor","uncheckedHoverBackgroundColor","uncheckedPointBackgroundColor","uncheckedPointHoverBackgroundColor","uncheckedPointRadius","_adjustType","_computeDatasets","_adjustData","_adjustTooltip","_adjustGrid","_adjustPlugins","_adjustClickHandler","_adjustResizeHandler","scaleLabelByTypeMap","scales","setLabelMap","identifier","labelMap","isEmptyObject","_computeLabelMap","groupName","axis","_adjustBarBorderWidth","_adjustMaxSegments","_adjustBubbleRadii","_adjustOnlyIntegers","newData","slice","reduce","newLabels","maxSegmentsExceeded","otherSegmentClickable","r","z","pow","sqrt","every","numbers","isInteger","hover","mode","callbacks","title","labelColor","tooltipItems","ctx","tooltipItem","defaultGlobal","defaultTypeTooltips","defaultGlobalTooltips","reformatLabels","xAxis","xAxes","yAxis","yAxes","xAxisLabel","scaleLabel","labelString","yAxisLabel","ARROW_LEFT_RIGHT","ARROW_UP_DOWN","xTickLabel","ticks","callback","xLabel","yTickLabel","yLabel","defaultTypeTooltipTitle","defaultTooltipTitle","cssWidth","measureText","oldFont","font","titleFontStyle","defaultFontStyle","titleFontSize","defaultFontSize","titleFontFamily","result","titleLine","value","defaultTypeTooltipLabel","defaultTooltipLabel","colorRectSize","displayColors","bodyFontSize","tooltipBackgroundColor","legendColor","borderColor","datasetBackgroundColor","_adjustColorOpacity","defaultTypeTooltipLabelColor","defaultTooltipLabelColor","_adjustScale","_adjustScales","scale","angleLines","gridLines","borderDash","beginAtZero","pointLabels","fontSize","_adjustXAxes","_adjustYAxes","offset","drawBorder","drawTicks","zeroLineBorderDash","afterCalculateTickRotation","afterFit","_adjustPluginsDatalabels","formatter","borderRadius","handleFormatter","context","_formatLabelMap","_getNumberFormatter","numberFormatter","_getXLabelMap","_getYLabelMap","_getLabelMap","_formatNumberLabel","abs","abbreviation","abbreviations","locale","decimalFormat","format","sign","labelRotation","maxHeight","defaultTicks","maxRotation","chartAreaHeight","top","bottom","maxLabelLength","sin","PI","longestLabelWidth","_ticks","tick","_labelSizes","tickMarkLength","maxWidth","_model","midRadius","outerRadius","innerRadius","angle","endAngle","startAngle","radius1","diameter1","diameter2","sum","_computeSumOfVisibleElements","roundingError","roundedResults","roundedResult","round","_adjustColorSchemeCssClass","_adjustDatasetColors","_adjustLegendColors","_adjustTooltipColors","_adjustScaleColors","_adjustScalesColors","_adjustPluginColors","getCssClasses","join","multipleColorsPerDataset","colors","backgroundColors","borderColors","hoverBackgroundColors","hoverBorderColors","checkedBackgroundColors","checkedHoverBackgroundColors","legendColors","pointHoverColor","_computePointHoverColor","_computeDatasetColors","hoverBorderColor","datasetLength","_computeDatasetColorsAutoColor","_computeDatasetColorsChartValueGroups","_computeBorderColor","types","_computeBackgroundColor","_computeHoverBackgroundColor","_computeHoverBorderColor","_computeCheckedBackgroundColor","_computeCheckedHoverBackgroundColor","_computeLegendColor","additionalProperties","stroke","rgbColor","hexToRgb","adjustColor","opacity","darker","darkerColor","backgroundOpacity","hoverBackgroundOpacity","hoverBackgroundDarker","hoverBorderDarker","uncheckedBackgroundOpacity","uncheckedHoverBackgroundOpacity","checkedBackgroundOpacity","checkedBackgroundDarker","checkedHoverBackgroundOpacity","checkedHoverBackgroundDarker","datalabelColor","_computeDatalabelColor","color","indexOf","_adjustRgbColorOpacity","_adjustHexColorOpacity","rgba","rgb","alpha","red","green","blue","hexColor","fontColor","_computeLabelColor","generateLabels","defaultTypeGenerateLabels","defaultGenerateLabels","fillStyle","strokeStyle","_computeTooltipBackgroundColor","tooltipBorderColor","_computeTooltipBorderColor","multiKeyBackground","labelBackdropColor","_computeLabelBackdropColor","gridColor","_computeGridColor","backdropColor","axisLabelColor","_computeAxisLabelColor","zeroLineColor","_adjustPluginsDatalabelColors","onClick","onHover","onLeave","stopPropagation","items","_isMaxSegmentsExceeded","_index","itemIndex","_datasetIndex","clickObject","yIndex","Event","originalEvent","_onValueClick","defaultTypeLegendClick","defaultLegendClick","datasetType","_updateHoverStyle","updateHoverStyle","handleResize","onResize","size","_adjustBubbleSizes","_adjustGridMaxMin","maxMinR","_computeMaxMinValue","maxR","maxValue","minR","minValue","bubbleScalingFactor","bubbleRadiusOffset","sizeOfLargestBubble","bubble","minBubbleSize","right","left","floor","isNullOrUndefined","exact","boundRange","space","j","adjust","maxBoundary","minBoundary","_calculateBoundary","ceil","valuePerPixel","paddingValue","roundingFunctionPositive","roundingFunctionNegative","roundingFunction","changeValueSign","_calculateBoundaryPositive","p","log","LN10","maxXTicks","maxYTicks","yBoundaries","_computeYBoundaries","yBoundary","yBoundaryDiffType","_adjustScaleMaxMin","_adjustAxes","xBoundary","_computeXBoundaryBubble","boundary","_computeBoundaryBubble","_computeYBoundaryBubble","datasetsDiffType","yBoundaryRange","yBoundaryRangeDiffType","_adjustYAxisDiffType","yAxisDiffType","drawOnChartArea","yAxisType","yAxisDiffTypeType","yAxisTypeLabel","yAxisDiffTypeTypeLabel","yAxisScaleLabel","yAxisDiffTypeScaleLabel","yAxisID","maxTicks","maxMinValue","maxTicksLimit","stepSize","suggestedMax","suggestedMin","tooltipDelay","showTooltipDelay","resetTooltipDelay","pluginId","_notifyOthers","hook","args","descriptors","$plugins","ilen","descriptor","plugin","params","method","concat","apply","_drawTooltip","tooltip","draw","ChartJsTooltipDelay","_chartTooltipVisible","_chartTooltipShowTimeoutIds","_chartTooltipHideTimeoutIds","_active","tid","App","addListener","Device","supportsOnlyTouch","register","ready","AbstractLayout","animationTriggered","segmentSelectorForAnimation","fulfillment","startValue","total","fullR","_renderInnerCircle","_renderPercentage","arcClass","chartGroupCss","nvl","end","lastEnd","that","tweenInFunc","$this","start","pathSegment","pos","$arc","radius2","$transparentCircle","_renderCirclePath","percentage","on","_createClickObject","animate","tabIndex","_createAnimationObjectWithTabIndexRemoval","s","pathString","cos","$path","optProperty","tweenOut","promise","done","widthThresholdMedium","widthThresholdSmall","barDeltaPercentage","lastBarAdditionalPercentage","lastBarMinWidthPercentage","salesfunnel","normalized","calcConversionRate","chartConfig","bars","conversionRateWidth","_dynamicConversionRateWidth","dataAnalyzeResult","_analyzeData","paddingBetweenLabel","barHeight","barAreaHeight","barAreaWidth","maxLengthFirstValueRow","labelCount","maxLengthSecondValueRow","centerX","_renderBarsNormalized","_renderBarsAccordingToValues","_addClipping","barCount","startPointX","delta","minLastWidth","secondLastWidth","barLabel","widthBottom","yCoord","renderPolyOptions","xStart","yStart","rect","_renderPolygon","_renderLabel","_renderBarLabel","labelLineWidth","_renderLabelSeparatorLine","_renderConversionRate","_calcConversionRate","secondLabel","barIndexFromTop","labelOffset","labelIndex","_dynamicCssClass","desc","textBoundings","_renderWireLabels","$text","labelPositionFunc","labelWidth","labelHeight","_renderWireLegend","mouseIn","mouseOut","mouseenter","mouseleave","barWidth","conversionRate","ctrlY","labelRenderPointY","points","_calcPolygonPoints","$poly","expandFunc","expand","fxPos","xOffsetTop","xOffsetBottom","x3","y3","x4","y4","widthPerN","valueBefore","returnValue","valueGroups","valueGroup","shrink","small","speedo","greenAreaPosition","scaleWeight","my","parts","NUM_PARTS_GREEN_CENTER","NUM_PARTS_GREEN_EDGE","numSegmentsPerPart","$filledParts","numTotalSegments","numTotalGaps","segmentWidth","ARC_RANGE","SEGMENT_GAP","widthOfSegmentWithGap","valuePercentage","_limitValue","segmentToPointAt","valuePercentageRounded","_getPercentageValueOfSegment","_getPartForValue","_renderCirclePart","_renderPointer","_renderLegend","segmentIndexInPart","part","pointerRange","_calcSegmentPos","pointerPos","from","ARC_MIN","to","$pointer","_pathPointer","tweenIn","val","getAttribute","_updatePointer","_updatePartsFill","colorClass","_pathSegment","_getColorForPart","segPos","_renderSegment","minMaxLegendFontSize","labelYPos","labelMinMaxYPos","minLegendValue","_formatValue","legendValue","maxLegendValue","$minLegend","$maxLegend","TEN_THOUSAND","ONE_MILLION","ONE_THOUSAND","millions","RoundingMode","HALF_UP","ARC_MAX","segmentNum","pointerOuterR","pointerInnerR","VennAsync3Calculator","helper","venn1","venn2","venn3","u","w","uv","uw","vw","uvw","d12","d13","d23","maxD","distR","dStep","rStep","alphaStep","alphaBest","dBest","rBest","errorBest","cancelled","_next","_iteration","_end","r1","r2","r3","stepFactor","isInternetExplorer","d","minX","maxX","minY","maxY","stepX","stepY","a1","a2","a3","a12","a13","a23","a123","testX","testY","t1","t2","t3","aTotal","error","_error","a","venn","numberOfCircles","centerY","setLoading","parseFloat","vennCircleHelper","VennCircleHelper","$v1","_createCircle","vennNumber1","VennCircle","vennReal1","$v2","vennNumber2","vennReal2","$v3","vennNumber3","vennReal3","readyToDraw","_draw","_calc1","_calc2","_calc3","_cancelAsync3Calculator","loading","$loadingIndicator","v1","calcR","setLegend","addLabel","v2","real","b","ab","calcD","findBalance2","legendR","v3","c","ac","bc","abc","async3Calculator","findBalance3","cancel","showVenn","_updateVenn","_drawLabel","circleIndex","$circle","showReal","_show","legendH","legendV","dx","dy","toElement","relatedTarget","isCircle","hasClass","wasCircle","horizontal","vertical","midX","midY","count","factorMax","changeR","ret","ri","ra","q","ChartField","_addWidgetProperties","addContainer","addMandatoryIndicator","addStatus","addField","_removeField","checkCompletlyRendered","FormField","ChartFieldAdapter","FormFieldAdapter","self","window","ChartTableControl","tooltipText","chartAggregation","modifier","TableMatrix","NumberGroup","COUNT","chartType","oldChartType","chartColorScheme","$chartSelect","$xAxisSelect","$yAxisSelect","$dataSelect","dateGroup","_tableUpdatedHandler","_onTableUpdated","_tableColumnStructureChangedHandler","_onTableColumnStructureChanged","_chartValueClickedHandler","_onChartValueClick","table","create","parent","off","inheritAccessibility","parentEnabled","_hasColumns","selected","$contentContainer","denseClass","ChartTableControlLayout","_selectChartType","animateAVCSD","contentRendered","_drawChart","_chartTypeMap","$element","_renderChartGroup","groupId","chartGroup","siblings","selectOne","dateGroupIndex","DATE_GROUP_FLAG","_aggregationMap","_getAggregationCssClass","SUM","AVG","renderSvgIcon","enabledComputed","_onClickChartType","supportedChartTypes","_getSupportedChartTypes","_renderChartSelect","renderSvgIconBar","renderSvgIconStacked","renderSvgIconLine","renderSvgIconPie","renderSvgIconBubble","show","pathPoints","$target","currentTarget","setChartType","column","origModifier","isEnabled","isSelected","_nextDateModifier","_setChartGroup","_nextModifier","aggregation","_setChartAggregation","DateGroup","DATE","MONTH","WEEKDAY","YEAR","_renderChartAggregation","propertyName","_changeProperty","prop","charAt","toUpperCase","columns","columnCount","tmpColumn","headerHtmlEnabled","plainText","replace","_installScrollbars","_renderChartSelectContainer","_filterResetListener","_addListeners","_renderAxisSelectors","_initializeSelection","_renderChartParts","_chartGroup1Map","_chartGroup2Map","matrix","sort","axisCount","numberOfAxisItems","c1","content","$div","$yDiv","column1","DateColumn","_axisCount","MAX_AXIS_COUNT","_axisContentForColumn","makeDiv","_plainAxisText","setEnabled","chartGroup1","chartGroup2","icon","appendCssClass","_onClickChartGroup","installForEllipsis","clone","$bubbleSelect","countDesc","all","c2","column2","fakeNumberLabelCol2","NumberColumn","columnText","hasText","headerTooltipText","_onClickAggregation","$axisColumns","_setDefaultSelectionForGroup","$candidates","maxIndex","col","_getDefaultSelectedColumn","_getDefaultChartGroup","matchCounter","curColumn","_existsInAxisColumns","columnToSearch","eq","_renderChartGroup1","_renderChartGroup2","_hideChart","cube","_calculateValues","setVisible","iconClasses","_computeData","_adjustFont","_computeCheckedItems","deterministicKeys","tableData","addData","addAxis","axis2","isEmpty","isMatrixValid","calculate","_getDatasetLabel","segments","_computeBubbleData","_getXAxis","keyX","_handleIconLabel","getValue","deterministicKey","keyToDeterministicKey","_getYAxis","xValue","keyY","yValue","cubeValues","textIsIcon","icons","parseIconId","isFontIcon","split","iconCharacter","fontFamily","family","parseInt","_adjustLabels","_adjustClickable","_adjustBubble","_adjustPie","_isChartClickable","weight","anchor","align","clamp","margin","cssMarginTop","cssMarginBottom","layout","tableFilter","getFilter","ChartTableUserFilter","TYPE","filters","equals","collapsedIndices","containsAll","getFilters","pushAll","addFilter","removeFilterByKey","headerIconId","visibleColumns","_removeScrollbars","events","removeListener","_removeListeners","recomputeEnabled","element","uninstall","_uninstallScrollbars","mx","_tableUpdatedTimeOutId","_setChartGroup1","_setChartGroup2","removeContent","renderContent","TableControl","ChartTableControlAdapter","_addRemoteProperties","TableControlAdapter","control","scrollbars","filterType","columnIdX","columnIdY","columnX","columnById","axisGroupX","createFilter","axisGroup","columnY","axisGroupY","row","cellValueOrTextForCalculation","deterministicKeyX","normDeterministic","deterministicKeyY","TableUserFilter","ChartFieldTile","_chartConfigChangeHandler","_onChartConfigChange","_updateChartColorScheme","tileWidget","FormFieldTile","ChartFieldTileAdapter","FormFieldTileAdapter"],"mappings":"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","file":"eclipse-scout-chart.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/index.js\");\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {Chart} from '../index';\n\nexport default class AbstractChartRenderer {\n\n /**\n * @param {Chart} chart\n */\n constructor(chart) {\n\n /**\n * @property {Chart} chart\n */\n this.chart = chart;\n this.session = chart.session;\n this.rendering = false; // true while this.render() is executing\n this.rendered = false;\n this.animationDuration = 0; // set by render() and remove(), makes it unnecessary to carry an argument through all method calls\n\n this.firstOpaqueBackgroundColor = '';\n }\n\n validate() {\n if (!this._validateChartData()) {\n return false;\n }\n\n return this._validate();\n }\n\n _validateChartData() {\n let chartData = this.chart && this.chart.data;\n if (!chartData || !chartData.chartValueGroups || chartData.chartValueGroups.length === 0) {\n return false;\n }\n\n // check lengths\n let i, length = 0;\n for (i = 0; i < chartData.chartValueGroups.length; i++) {\n let chartValueGroup = chartData.chartValueGroups[i];\n if (!chartValueGroup.values) {\n return false;\n }\n // Length of all \"values\" arrays have to be equal\n if (i === 0) {\n length = chartValueGroup.values.length;\n } else {\n if (chartValueGroup.values.length !== length) {\n return false;\n }\n }\n // color should have been set.\n if (!this.chart.config.options.autoColor && !chartValueGroup.colorHexValue && !chartValueGroup.cssClass) {\n return false;\n }\n }\n for (i = 0; i < chartData.axes.length; i++) {\n if (chartData.axes[i].length !== length) {\n return false;\n }\n }\n\n return true;\n }\n\n _validate() {\n // Override in subclasses\n return true;\n }\n\n /**\n * @param requestAnimation\n * Whether animations should be used while rendering the chart. Note that his\n * property is ignored when chart.config.options.animation.duration is <code>0</code>!\n */\n render(requestAnimation) {\n this.animationDuration = requestAnimation ? this.chart.config.options.animation.duration : 0;\n if (!this.validate() || !this.chart.rendered) {\n return;\n }\n this.rendering = true;\n this._render();\n this.rendering = false;\n this.rendered = true;\n }\n\n _render() {\n // Override in subclasses\n }\n\n checkCompletlyRendered() {\n if (this.rendered || !this.chart.data) {\n return;\n }\n this.render();\n }\n\n renderCheckedItems() {\n if (this.rendered) {\n this._renderCheckedItems();\n }\n }\n\n _renderCheckedItems() {\n // nop\n }\n\n /**\n * @param requestAnimation\n * Whether animations should be used while updating the chart. Note that his\n * property is ignored when chart.config.options.animation.duration is <code>0</code>!\n */\n updateData(requestAnimation) {\n if (!this.rendered) {\n this.render(requestAnimation);\n return;\n }\n this.animationDuration = requestAnimation ? this.chart.config.options.animation.duration : 0;\n if (!this.validate() || !this.isDataUpdatable()) {\n return;\n }\n this._updateData();\n }\n\n _updateData() {\n // Override in subclasses\n }\n\n isDataUpdatable() {\n return false;\n }\n\n /**\n * @param requestAnimation\n * Whether animations should be used while removing the chart. Note that his\n * property is ignored when chart.config.options.animation.duration is <code>0</code>!\n */\n remove(requestAnimation, afterRemoveFunc) {\n this.animationDuration = requestAnimation && this.chart.config.options.animation.duration;\n if (this.animationDuration && this.rendered) {\n this._removeAnimated(afterRemoveFunc);\n } else {\n this._remove(afterRemoveFunc);\n }\n }\n\n _remove(afterRemoveFunc) {\n this.rendered = false;\n afterRemoveFunc && afterRemoveFunc();\n }\n\n _removeAnimated(afterRemoveFunc) {\n // Override in subclasses\n this._remove(afterRemoveFunc);\n }\n\n /**\n * Controls if the animation of the chart is shown when chart data has been updated.\n */\n shouldAnimateRemoveOnUpdate(opts) {\n return opts.requestAnimation;\n }\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {ObjectFactory, strings, styles} from '@eclipse-scout/core';\nimport $ from 'jquery';\nimport {Chart, AbstractChartRenderer} from '../index';\n\nexport default class AbstractSvgChartRenderer extends AbstractChartRenderer {\n\n constructor(chart) {\n super(chart);\n this.chartBox = {};\n this.labelBox = {};\n\n // Clipping and masking\n this.clipId = 'Clip-' + ObjectFactory.get().createUniqueId();\n this.maskId = 'Mask-' + ObjectFactory.get().createUniqueId();\n\n this.suppressLegendBox = false;\n }\n\n static FONT_SIZE_SMALLEST = 'smallestFont';\n static FONT_SIZE_SMALL = 'smallFont';\n static FONT_SIZE_MIDDLE = 'middleFont';\n static FONT_SIZE_BIG = 'bigFont';\n\n _render() {\n if (!this.$svg) {\n this.$svg = this.chart.$container.appendSVG('svg', 'chart-svg');\n }\n this.firstOpaqueBackgroundColor = styles.getFirstOpaqueBackgroundColor(this.$svg);\n this.svgHeight = this.$svg.height();\n this.svgWidth = this.$svg.width();\n // This works, because CSS specifies 100% width/height\n this.height = this.svgHeight;\n this.width = this.svgWidth;\n this._initChartBox();\n if (this._useFontSizeBig()) {\n this.$svg.addClass(AbstractSvgChartRenderer.FONT_SIZE_BIG);\n } else if (this._useFontSizeMiddle()) {\n this.$svg.addClass(AbstractSvgChartRenderer.FONT_SIZE_MIDDLE);\n } else if (this._useFontSizeSmall()) {\n this.$svg.addClass(AbstractSvgChartRenderer.FONT_SIZE_SMALL);\n } else if (this._useFontSizeSmallest()) {\n this.$svg.addClass(AbstractSvgChartRenderer.FONT_SIZE_SMALLEST);\n }\n if (!this.$svg.isAttached()) {\n // user navigated away. do not try to render->error\n return;\n }\n this._renderInternal();\n }\n\n _renderInternal() {\n // Override in subclasses\n }\n\n _useFontSizeBig() {\n return false;\n }\n\n _useFontSizeMiddle() {\n return false;\n }\n\n _useFontSizeSmall() {\n return false;\n }\n\n _useFontSizeSmallest() {\n return false;\n }\n\n remove(requestAnimation, afterRemoveFunc) {\n if (this.rendered && !this.chartAnimationStopping) {\n this.chartAnimationStopping = true;\n this.$svg.children().stop(true, false);\n this.chartAnimationStopping = false;\n }\n super.remove(requestAnimation, afterRemoveFunc);\n }\n\n _remove(afterRemoveFunc) {\n // this function is called directly from renderers after all removal animations are done\n // however, other animations may have been queued in the meantime (e.g. in case the chart was removed, then added (+animation queued), and then removed again)\n if (this.rendered) {\n this.$svg.children().stop(true, false);\n // need to check again, as stop() may have triggered a chart removal and this may not be rendered anymore\n if (this.rendered) {\n this.$svg.remove();\n this.$svg = null;\n }\n }\n this.rendered = false;\n afterRemoveFunc && afterRemoveFunc(this.chartAnimationStopping);\n }\n\n /**\n * For all parameters: use null when parameter is not used or set by a chart type.\n *\n * @param xIndex number\n * @param datasetIndex number\n */\n _createClickObject(xIndex, datasetIndex) {\n return {\n xIndex: xIndex,\n dataIndex: xIndex,\n datasetIndex: datasetIndex\n };\n }\n\n _measureText(text, legendLabelClass) {\n let $label = this.$svg.appendSVG('text', legendLabelClass)\n .attr('x', 0)\n .attr('y', 0)\n .attr('visibility', 'hidden')\n .text(text);\n let textBounds;\n try {\n // Firefox throws error when node is not in dom(already removed by navigating away). all other browser returns a boundingbox with 0\n textBounds = $label[0].getBBox();\n } catch (e) {\n return {\n height: 0,\n width: 0\n };\n }\n $label.remove();\n\n return textBounds;\n }\n\n _renderLine(x1, y1, x2, y2, lineClass) {\n let $line = this.$svg.appendSVG('line', lineClass)\n .attr('x1', x1).attr('y1', y1)\n .attr('x2', x2).attr('y2', y2);\n if (this.animationDuration) {\n $line\n .attr('opacity', 0)\n .animateSVG('opacity', 1, this.animationDuration, null, true);\n }\n return $line;\n }\n\n _renderLineLabel(x, y, label, labelClass, drawBackground) {\n let $label = this.$svg.appendSVG('text', labelClass ? labelClass : 'line-label')\n .attr('x', x).attr('y', y)\n .text(label);\n\n if (drawBackground) {\n $label.attr('mask', 'url(#' + this.maskId + ')');\n\n let $background = this.$svg.appendSVG('text', labelClass ? labelClass + ' background' : 'line-label-background')\n .attr('x', x).attr('y', y)\n .attr('clip-path', 'url(#' + this.clipId + ')')\n .text(label);\n\n $label.data('$background', $background);\n\n if (this.animationDuration) {\n $background\n .attr('opacity', 0)\n .animateSVG('opacity', 1, this.animationDuration, null, true);\n }\n }\n\n if (this.animationDuration) {\n $label\n .attr('opacity', 0)\n .animateSVG('opacity', 1, this.animationDuration, null, true);\n }\n return $label;\n }\n\n _initChartBox() {\n this.chartBox = {\n width: this.width,\n height: this.height,\n xOffset: 0,\n yOffset: 0,\n mX: function() {\n return this.xOffset + (this.width / 2);\n },\n mY: function() {\n return this.yOffset + (this.height / 2);\n }\n };\n }\n\n _createAnimationObjectWithTabIndexRemoval(animationFunc, duration) {\n return {\n step: function(now, fx) {\n try {\n animationFunc.bind(this)(now, fx);\n } catch (e) {\n // prevent logging thousands of exceptions (1 per animation step) by stopping and clearing the queue\n $(this).stop(true, false);\n throw e;\n }\n },\n duration: duration ? duration : Chart.DEFAULT_ANIMATION_DURATION,\n complete: function() {\n $(this).removeAttr('tabindex');\n }\n };\n }\n\n _addClipping(cssClass) {\n // add clip and mask paths for all relevant objects\n let $clip = this.$svg\n .appendSVG('clipPath');\n $clip[0].id = this.clipId;\n\n let $mask = this.$svg.appendSVG('mask');\n $mask.appendSVG('rect')\n .attr('x', 0)\n .attr('y', 0)\n .attr('width', '100%')\n .attr('height', '100%')\n .attr('fill', 'white');\n $mask[0].id = this.maskId;\n\n this.chart.$container.find('.' + cssClass).each(function(i) {\n this.id = 'ClipMask-' + ObjectFactory.get().createUniqueId();\n $clip.appendSVG('use').attrXLINK('href', '#' + this.id);\n $mask.appendSVG('use').attrXLINK('href', '#' + this.id);\n });\n }\n\n _renderWireLegend(text, legendPositions, className, drawBackgroundBox) {\n let legend = {\n detachFunc: () => {\n },\n attachFunc: () => {\n },\n removeFunc: () => {\n }\n };\n if (!this.chart.config.options.tooltips.enabled) {\n return legend;\n }\n let padding = 5,\n $background,\n backgroundWidth = 0,\n lineHeight = 17,\n backgroundHeight = lineHeight;\n\n if (drawBackgroundBox) {\n $background = this.$svg.appendSVG('rect', 'wire-legend-background-box')\n .attr('opacity', '1');\n }\n\n let positions = legendPositions;\n\n // draw and measure label\n\n let $legend,\n lengthLegend = 0,\n horizontalSpace = 0;\n if (positions.h === -1) {\n horizontalSpace = positions.x2 - 2 * padding;\n } else {\n horizontalSpace = this.width - positions.x2 - 2 * padding;\n }\n\n if (Array.isArray(text)) {\n for (let i = 0; i < text.length; i++) {\n let posIndex = text.length - i - 1;\n let yPos = positions.y2 + positions.v * padding - lineHeight * posIndex - padding * posIndex;\n let $line = this._renderLineLabel(positions.x2 + padding, yPos, strings.truncateText(text[i], horizontalSpace, this._measureText.bind(this)), '', drawBackgroundBox);\n $line.addClass(className);\n lengthLegend = Math.max(lengthLegend, $line[0].getComputedTextLength());\n if (i === 0) {\n $legend = $line;\n } else {\n if ($legend.data('lines')) {\n $legend.data('lines').push($line);\n } else {\n $legend.data('lines', [$line]);\n }\n }\n }\n } else {\n $legend = this._renderLineLabel(positions.x2 + padding, positions.y2 + positions.v * padding, strings.truncateText(text, horizontalSpace, this._measureText.bind(this)), '', drawBackgroundBox);\n $legend.addClass(className);\n lengthLegend = $legend[0].getComputedTextLength();\n }\n backgroundWidth = lengthLegend + 2 * padding;\n\n if (legendPositions.autoPosition) {\n positions = legendPositions.posFunc.call(this, backgroundWidth, backgroundHeight);\n // adjust legend\n $legend.attr('x', positions.x2 + padding);\n $legend.attr('y', positions.y2 + positions.v * padding);\n }\n\n // fix layout depending on orientation of legend\n if (positions.h === -1) {\n $legend.attr('x', positions.x2 - padding - lengthLegend);\n $legend.css('text-anchor', 'left');\n if ($legend.data('lines')) {\n $legend.data('lines').forEach($line => {\n $line.attr('x', positions.x2 - padding - lengthLegend);\n $line.css('text-anchor', 'left');\n });\n }\n } else {\n $legend.attr('x', positions.x2 + padding);\n $legend.css('text-anchor', 'right');\n if ($legend.data('lines')) {\n $legend.data('lines').forEach($line => {\n $line.attr('x', positions.x2 + padding);\n $line.css('text-anchor', 'right');\n });\n }\n }\n if (positions.v === 1) {\n if ($legend.data('lines')) {\n $legend.data('lines').forEach(($line, i) => {\n $line.attr('y', positions.x2 - padding - lengthLegend);\n let index = 1 + i;\n $line.attr('y', positions.y2 + positions.v * padding + lineHeight * index + padding * (index + 1));\n });\n }\n $legend.attr('dy', '0.7em');\n } else {\n if ($legend.data('lines')) {\n let index = $legend.data('lines').length;\n $legend.attr('y', positions.y2 + positions.v * padding - lineHeight * index - padding * index);\n $legend.data('lines').forEach(($line, i) => {\n index = $legend.data('lines').length - 1 - i;\n $line.attr('y', positions.y2 + positions.v * padding - lineHeight * index - padding * index);\n });\n }\n }\n\n // align background text\n $legend.add($legend.data('lines')).each((i, line) => {\n let $line = $(line),\n $background = $line.data('$background');\n if ($background) {\n $background.attr('x', $line.attr('x'));\n $background.attr('y', $line.attr('y'));\n $background.css('text-anchor', $line.css('text-anchor'));\n $background.attr('dy', $line.attr('dy'));\n }\n });\n\n // draw lines, if wished\n let wires = [];\n if (positions.x1 > 0 && positions.y1 > 0) {\n wires.push(this._renderLine(positions.x1, positions.y1, positions.x2, positions.y2, 'label-line'));\n wires.push(this._renderLine(positions.x2, positions.y2, positions.x2 + positions.h * (lengthLegend + 2 * padding), positions.y2, 'label-line'));\n }\n $legend.data('wires', wires);\n\n let $svg = this.$svg;\n legend.detachFunc = () => {\n $legend.data('wires').forEach($wire => {\n $wire.detach();\n });\n if ($legend.data('lines')) {\n $legend.data('lines').forEach($line => {\n if ($line.data('$background')) {\n $svg.append($line.data('$background'));\n }\n $line.detach();\n });\n }\n if ($legend.data('$background')) {\n $legend.data('$background').remove();\n }\n $legend.detach();\n };\n\n legend.attachFunc = () => {\n $svg.append($legend);\n if ($legend.data('$background')) {\n $svg.append($legend.data('$background'));\n }\n $svg.append($legend.data('wires'));\n if ($legend.data('lines')) {\n $legend.data('lines').forEach($line => {\n $svg.append($line);\n if ($line.data('$background')) {\n $svg.append($line.data('$background'));\n }\n });\n }\n };\n\n legend.removeFunc = () => {\n $legend.data('wires').forEach($wire => {\n $wire.remove();\n });\n if ($legend.data('lines')) {\n $legend.data('lines').forEach($line => {\n if ($line.data('$background')) {\n $line.data('$background').remove();\n }\n $line().remove();\n });\n }\n if ($legend.data('$background')) {\n $legend.data('$background').remove();\n }\n $legend.remove();\n };\n legend.$field = $legend;\n return legend;\n }\n}\n","/*\n * Copyright (c) 2010-2021 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {ChartJsRenderer, ChartLayout, FulfillmentChartRenderer, SalesfunnelChartRenderer, SpeedoChartRenderer, VennChartRenderer} from '../index';\nimport {arrays, colorSchemes, HtmlComponent, objects, Widget} from '@eclipse-scout/core';\n\n/**\n * @typedef ChartValueGroup\n * @property {string} type\n */\n\n/**\n * @typedef ClickObject\n * @property {number} datasetIndex\n * @property {number} dataIndex\n * @property {number} [xIndex]\n * @property {number} [yIndex]\n */\n\nexport default class Chart extends Widget {\n\n constructor() {\n super();\n\n this.$container = null;\n this.chartRenderer = null;\n\n /**\n * @type {object}\n * @property {ChartValueGroup[]} chartValueGroups\n */\n this.data = null;\n this.config = null;\n /**\n * @type {ClickObject[]}\n */\n this.checkedItems = [];\n\n this._updateChartTimeoutId = null;\n this._updateChartOpts = null;\n this.updatedOnce = false;\n }\n\n static Type = {\n PIE: 'pie',\n LINE: 'line',\n BAR: 'bar',\n BAR_HORIZONTAL: 'horizontalBar',\n COMBO_BAR_LINE: 'comboBarLine',\n FULFILLMENT: 'fulfillment',\n SPEEDO: 'speedo',\n SALESFUNNEL: 'salesfunnel',\n VENN: 'venn',\n DOUGHNUT: 'doughnut',\n POLAR_AREA: 'polarArea',\n RADAR: 'radar',\n BUBBLE: 'bubble'\n };\n\n static Position = {\n TOP: 'top',\n BOTTOM: 'bottom',\n LEFT: 'left',\n RIGHT: 'right',\n CENTER: 'center'\n };\n\n static DEFAULT_ANIMATION_DURATION = 600; // ms\n static DEFAULT_DEBOUNCE_TIMEOUT = 100; // ms\n\n _init(model) {\n super._init(model);\n this.setConfig(this.config);\n }\n\n _render() {\n this.$container = this.$parent.appendDiv('chart');\n\n this.htmlComp = HtmlComponent.install(this.$container, this.session);\n this.htmlComp.setLayout(new ChartLayout(this));\n\n // !!! Do _not_ update the chart here, because usually the container size\n // !!! is not correct anyways during the render phase. The ChartLayout\n // !!! will eventually call updateChart() when the layout is validated.\n }\n\n _renderProperties() {\n super._renderProperties();\n this._renderClickable();\n this._renderCheckable();\n this._renderChartType();\n this._renderColorScheme();\n this.updateChart({\n requestAnimation: true,\n debounce: Chart.DEFAULT_DEBOUNCE_TIMEOUT\n });\n }\n\n _remove() {\n if (this.chartRenderer) {\n this.chartRenderer.remove(false);\n }\n this.$container.remove();\n this.$container = null;\n }\n\n setData(data) {\n this.setProperty('data', data);\n this.setCheckedItems(this.checkedItems);\n }\n\n _renderData() {\n this.updateChart({\n requestAnimation: true,\n debounce: Chart.DEFAULT_DEBOUNCE_TIMEOUT,\n onlyUpdateData: true\n });\n }\n\n setConfig(config) {\n let defaultConfig = {\n type: Chart.Type.PIE,\n options: {\n autoColor: true,\n colorScheme: colorSchemes.ColorSchemeId.DEFAULT,\n transparent: false,\n maxSegments: 5,\n adjustGridMaxMin: true,\n clickable: false,\n checkable: false,\n animation: {\n duration: Chart.DEFAULT_ANIMATION_DURATION\n },\n tooltips: {\n enabled: true\n },\n legend: {\n display: true,\n clickable: false,\n position: Chart.Position.RIGHT\n },\n plugins: {\n datalabels: {\n display: false\n }\n }\n }\n };\n config = $.extend(true, {}, defaultConfig, config);\n config.options.colorScheme = colorSchemes.ensureColorScheme(config.options.colorScheme);\n if (objects.equalsRecursive(this.config, config)) {\n return;\n }\n\n // check if only data has changed\n let oldConfigWithNewData = $.extend(true, {}, this.config);\n oldConfigWithNewData.data = config.data;\n if (objects.equalsRecursive(oldConfigWithNewData, config)) {\n this._setProperty('config', config);\n if (this.rendered) {\n this._renderConfig(true);\n }\n this.setCheckedItems(this.checkedItems);\n return;\n }\n\n if (this.rendered && this.config && this.config.type) {\n this.$container.removeClass(this.config.type + '-chart');\n }\n this.setProperty('config', config);\n this.setCheckedItems(this.checkedItems);\n this._updateChartRenderer();\n }\n\n _renderConfig(onlyUpdateData) {\n this._renderClickable();\n this._renderCheckable();\n this._renderChartType();\n this._renderColorScheme();\n this.updateChart({\n requestAnimation: true,\n debounce: Chart.DEFAULT_DEBOUNCE_TIMEOUT,\n onlyUpdateData: onlyUpdateData\n });\n }\n\n setCheckedItems(checkedItems) {\n this.setProperty('checkedItems', arrays.ensure(this._filterCheckedItems(checkedItems)));\n }\n\n _filterCheckedItems(checkedItems) {\n if (!Array.isArray(checkedItems)) {\n return checkedItems;\n }\n let datasetLengths = [];\n if (this.data && this.data.chartValueGroups) {\n this.data.chartValueGroups.forEach(chartValueGroup => datasetLengths.push(chartValueGroup.values.length));\n } else if (this.config && this.config.data) {\n this.config.data.datasets.forEach(dataset => datasetLengths.push(dataset.data.length));\n }\n let filteredCheckedItems = checkedItems.filter(item => datasetLengths[item.datasetIndex] && item.dataIndex < datasetLengths[item.datasetIndex]);\n if (filteredCheckedItems.length < checkedItems.length) {\n return filteredCheckedItems;\n }\n return checkedItems;\n }\n\n _renderCheckedItems() {\n if (this.chartRenderer) {\n this.chartRenderer.renderCheckedItems();\n }\n }\n\n /**\n * @override\n */\n _renderEnabled() {\n this.updateChart();\n }\n\n _renderClickable() {\n this.$container.toggleClass('clickable', this.config.options.clickable);\n }\n\n _renderCheckable() {\n this.$container.toggleClass('checkable', this.config.options.checkable);\n }\n\n _renderChartType() {\n this.$container.addClass(this.config.type + '-chart');\n }\n\n _renderColorScheme() {\n colorSchemes.toggleColorSchemeClasses(this.$container, this.config.options.colorScheme);\n }\n\n /**\n * @param opts\n * [requestAnimation] default false\n * [debounce] default 0\n * [onlyUpdateData] default false\n */\n updateChart(opts) {\n opts = opts || {};\n\n // Cancel previously scheduled update and merge opts\n if (this._updateChartTimeoutId) {\n clearTimeout(this._updateChartTimeoutId);\n if (this._updateChartOpts) {\n // Inherit 'true' values from previously scheduled updates\n opts.requestAnimation = opts.requestAnimation || this._updateChartOpts.requestAnimation;\n }\n this._updateChartTimeoutId = null;\n this._updateChartOpts = null;\n }\n\n let updateChartImplFn = updateChartImpl.bind(this);\n let doDebounce = (opts.debounce === true || typeof opts.debounce === 'number');\n if (doDebounce) {\n this._updateChartOpts = opts;\n if (typeof opts.debounce === 'number') {\n this._updateChartTimeoutId = setTimeout(updateChartImplFn, opts.debounce);\n } else {\n this._updateChartTimeoutId = setTimeout(updateChartImplFn);\n }\n } else {\n updateChartImplFn();\n }\n\n // ---- Helper functions -----\n\n function updateChartImpl() {\n this._updateChartTimeoutId = null;\n this._updateChartOpts = null;\n if (opts.onlyUpdateData && this.chartRenderer && this.chartRenderer.isDataUpdatable()) {\n this.chartRenderer.updateData(opts.requestAnimation);\n } else if (this.chartRenderer) {\n this.chartRenderer.remove(this.chartRenderer.shouldAnimateRemoveOnUpdate(opts), chartAnimationStopping => {\n if (this.removing || chartAnimationStopping) {\n // prevent exceptions trying to render after navigated away, and do not update/render while a running animation is being stopped\n return;\n }\n this.chartRenderer.render(opts.requestAnimation);\n this.trigger('chartRender');\n });\n }\n this.updatedOnce = true;\n }\n }\n\n _resolveChartRenderer() {\n switch (this.config.type) {\n case Chart.Type.FULFILLMENT:\n return new FulfillmentChartRenderer(this);\n case Chart.Type.SPEEDO:\n return new SpeedoChartRenderer(this);\n case Chart.Type.SALESFUNNEL:\n return new SalesfunnelChartRenderer(this);\n case Chart.Type.VENN:\n return new VennChartRenderer(this);\n case Chart.Type.BAR:\n case Chart.Type.BAR_HORIZONTAL:\n case Chart.Type.LINE:\n case Chart.Type.COMBO_BAR_LINE:\n case Chart.Type.PIE:\n case Chart.Type.DOUGHNUT:\n case Chart.Type.POLAR_AREA:\n case Chart.Type.RADAR:\n case Chart.Type.BUBBLE:\n return new ChartJsRenderer(this);\n }\n return null;\n }\n\n _updateChartRenderer() {\n this.chartRenderer && this.chartRenderer.remove();\n this.setProperty('chartRenderer', this._resolveChartRenderer());\n }\n\n _onValueClick(event) {\n if (this.config.options.checkable) {\n let checkedItems = [...this.checkedItems],\n clickedItem = event.data,\n checkedItem = checkedItems.filter(item => item.datasetIndex === clickedItem.datasetIndex && item.dataIndex === clickedItem.dataIndex)[0];\n if (checkedItem) {\n arrays.remove(checkedItems, checkedItem);\n } else {\n checkedItems.push(clickedItem);\n }\n this.setCheckedItems(checkedItems);\n }\n this.trigger('valueClick', event);\n }\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {ModelAdapter} from '@eclipse-scout/core';\n\nexport default class ChartAdapter extends ModelAdapter {\n\n constructor() {\n super();\n }\n\n _onWidgetValueClick(event) {\n this._send('valueClick', event.data);\n }\n\n _onWidgetEvent(event) {\n if (event.type === 'valueClick') {\n this._onWidgetValueClick(event);\n } else {\n super._onWidgetEvent(event);\n }\n }\n}\n","/*\n * Copyright (c) 2010-2021 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {AbstractChartRenderer, Chart} from '../index';\nimport ChartJs from 'chart.js';\nimport {arrays, colorSchemes, Event, numbers, objects, strings, styles} from '@eclipse-scout/core';\n// noinspection ES6UnusedImports\nimport chartjs_plugin_datalabels from 'chartjs-plugin-datalabels';\n// noinspection ES6UnusedImports\nimport ChartJsTooltipDelay from './ChartJsTooltipDelay';\n\n/**\n * @typedef ChartJs\n * @property {object} [defaults]\n * @property {object} [defaults.global]\n * @property {object} [defaults.global.legend]\n * @property {object} [defaults.global.legend.labels]\n * @property {object} [defaults.global.elements]\n * @property {object} [defaults.global.elements.line]\n * @property {object} [defaults.global.elements.point]\n * @property {object} [defaults.global.elements.arc]\n * @property {object} [defaults.global.elements.rectangle]\n * @property {object} [defaults.global.tooltips]\n */\nChartJs.defaults.global.maintainAspectRatio = false;\nChartJs.defaults.global.legend.labels.usePointStyle = true;\nChartJs.defaults.global.legend.labels.boxWidth = 7;\nChartJs.defaults.global.elements.line.tension = 0;\nChartJs.defaults.global.elements.line.fill = false;\nChartJs.defaults.global.elements.line.borderWidth = 2;\nChartJs.defaults.global.elements.point.radius = 0;\nChartJs.defaults.global.elements.point.hitRadius = 10;\nChartJs.defaults.global.elements.point.hoverRadius = 5;\nChartJs.defaults.global.elements.point.hoverBorderWidth = 2;\nChartJs.defaults.global.elements.arc.borderWidth = 1;\nChartJs.defaults.global.elements.rectangle.borderWidth = 1;\nChartJs.defaults.global.elements.rectangle.borderSkipped = '';\nChartJs.defaults.horizontalBar.elements.rectangle.borderSkipped = '';\nChartJs.defaults.global.tooltips.borderWidth = 1;\nChartJs.defaults.global.tooltips.cornerRadius = 4;\nChartJs.defaults.global.tooltips.xPadding = 8;\nChartJs.defaults.global.tooltips.yPadding = 8;\nChartJs.defaults.global.tooltips.titleSpacing = 4;\nChartJs.defaults.global.tooltips.titleMarginBottom = 8;\nChartJs.defaults.global.tooltips.bodySpacing = 4;\n\nlet chartJsGlobalsInitialized = false;\n\n/**\n * @typedef Dataset\n * @property {array|string} [pointBackgroundColor]\n * @property {array|string} [pointHoverBackgroundColor]\n * @property {array|number} [pointRadius]\n *\n * @property {array|string} [uncheckedBackgroundColor]\n * @property {array|string} [uncheckedHoverBackgroundColor]\n * @property {array|string} [uncheckedPointBackgroundColor]\n * @property {array|string} [uncheckedPointHoverBackgroundColor]\n * @property {array|number} [uncheckedPointRadius]\n *\n * @property {array|string} [checkedBackgroundColor]\n * @property {array|string} [checkedHoverBackgroundColor]\n * @property {array|string} [checkedPointBackgroundColor]\n * @property {array|string} [checkedPointHoverBackgroundColor]\n * @property {array|number} [checkedPointRadius]\n *\n * @property {array|string} [legendColor]\n */\n\nexport default class ChartJsRenderer extends AbstractChartRenderer {\n\n static ARROW_LEFT_RIGHT = '\\u2194';\n static ARROW_UP_DOWN = '\\u2195';\n\n constructor(chart) {\n super(chart);\n this.chartJs = null;\n this.onlyIntegers = true;\n this.minSpaceBetweenYTicks = 35;\n this.minSpaceBetweenXTicks = 150;\n this.maxXAxesTicksHeigth = 75;\n this.numSupportedColors = 6;\n this.colorSchemeCssClass = '';\n this.minRadialChartDatalabelSpace = 25;\n\n this._tooltipTitle = this._formatTooltipTitle.bind(this);\n this._tooltipLabel = this._formatTooltipLabel.bind(this);\n this._tooltipLabelColor = this._computeTooltipLabelColor.bind(this);\n\n this._labelFormatter = this._formatLabel.bind(this);\n this._xLabelFormatter = this._formatXLabel.bind(this);\n this._yLabelFormatter = this._formatYLabel.bind(this);\n\n this._xAxisFitter = this._fitXAxis.bind(this);\n this._yAxisFitter = this._fitYAxis.bind(this);\n\n this._radialChartDatalabelsDisplayHandler = this._displayDatalabelsOnRadialChart.bind(this);\n this._radialChartDatalabelsFormatter = this._formatDatalabelsOnRadialChart.bind(this);\n this._datalabelsFormatter = this._formatDatalabels.bind(this);\n this._datalabelBackgroundColorHandler = this._getBackgroundColorOfDataset.bind(this);\n\n this._legendLabelGenerator = this._generateLegendLabels.bind(this);\n\n this.resetDatasetAfterHover = false;\n\n this._clickHandler = this._onClick.bind(this);\n this._hoverHandler = this._onHover.bind(this);\n this._pointerHoverHandler = this._onHoverPointer.bind(this);\n\n this.legendHoverDatasets = [];\n\n this._legendClickHandler = this._onLegendClick.bind(this);\n this._legendHoverHandler = this._onLegendHover.bind(this);\n this._legendPointerHoverHandler = this._onLegendHoverPointer.bind(this);\n this._legendLeaveHandler = this._onLegendLeave.bind(this);\n this._legendPointerLeaveHandler = this._onLegendLeavePointer.bind(this);\n\n this._resizeHandler = this._onResize.bind(this);\n }\n\n _validateChartData() {\n let chartDataValid = true;\n let chartData = this.chart && this.chart.data;\n\n if (!chartData || !chartData.chartValueGroups || chartData.chartValueGroups.length === 0 || !chartData.axes) {\n chartDataValid = false;\n }\n\n if (chartDataValid && scout.isOneOf(this.chart.config.type, Chart.Type.POLAR_AREA, Chart.Type.RADAR)) {\n // check lengths\n let i, length = 0;\n for (i = 0; i < chartData.chartValueGroups.length; i++) {\n let chartValueGroup = chartData.chartValueGroups[i];\n if (!chartValueGroup.values) {\n chartDataValid = false;\n }\n // Length of all \"values\" arrays have to be equal\n if (i === 0) {\n length = chartValueGroup.values.length;\n } else {\n if (chartValueGroup.values.length !== length) {\n chartDataValid = false;\n }\n }\n }\n for (i = 0; i < chartData.axes.length; i++) {\n if (chartData.axes[i].length !== length) {\n chartDataValid = false;\n }\n }\n }\n\n if (chartDataValid) {\n return true;\n }\n\n let chartConfigDataValid = true;\n let config = this.chart && this.chart.config;\n\n if (!config || !config.data || !config.data.datasets || config.data.datasets.length === 0) {\n chartConfigDataValid = false;\n }\n\n if (chartConfigDataValid && scout.isOneOf(this.chart.config.type, Chart.Type.POLAR_AREA, Chart.Type.RADAR)) {\n // check lengths\n let i, length = 0;\n for (i = 0; i < config.data.datasets.length; i++) {\n let dataset = config.data.datasets[i];\n if (!dataset.data) {\n chartConfigDataValid = false;\n }\n // Length of all \"data\" arrays have to be equal\n if (i === 0) {\n length = dataset.data.length;\n } else {\n if (dataset.data.length !== length) {\n chartConfigDataValid = false;\n }\n }\n }\n }\n\n return chartConfigDataValid;\n }\n\n _render() {\n if (!this.$canvas) {\n this.$canvas = this.chart.$container.appendElement('<canvas>');\n }\n this.firstOpaqueBackgroundColor = styles.getFirstOpaqueBackgroundColor(this.$canvas);\n if (!chartJsGlobalsInitialized) {\n ChartJs.defaults.global.defaultFontFamily = this.$canvas.css('font-family');\n chartJsGlobalsInitialized = true;\n }\n /**\n * @property {number} options.bubble.sizeOfLargestBubble\n * @property {object} options.numberFormatter\n * @property {number} options.tooltips.titleFontFamily\n * @property {object} options.scales.scaleLabelByTypeMap\n * @property {object} options.scales.xLabelMap\n * @property {object} options.scales.yLabelMap\n */\n let config = $.extend(true, {}, this.chart.config);\n this._adjustConfig(config);\n this._renderChart(config, true);\n }\n\n _renderChart(config, animated) {\n if (this.chartJs) {\n this.chartJs.destroy();\n }\n config = $.extend(true, {}, config, {\n options: {\n animation: {}\n }\n }, config);\n config.options.animation.duration = animated ? this.animationDuration : 0;\n\n /**\n * @type {Chart}\n * @property {object} config\n * @property {object} chartArea\n */\n this.chartJs = new ChartJs(this.$canvas[0].getContext('2d'), config);\n this._adjustSize(this.chartJs.config, this.chartJs.chartArea);\n this.chartJs.update();\n }\n\n _updateData() {\n if (!this.chartJs) {\n return;\n }\n let config = $.extend(true, {}, this.chart.config);\n this._adjustConfig(config);\n\n let hiddenDataIndices = [],\n applyHiddenDatasetIndices = [];\n\n let targetData = this.chartJs.config.data,\n sourceData = config.data;\n\n if (targetData && sourceData) {\n // Transfer property from source object to target object:\n // 1. If the property is not set on the target object, copy it from source.\n // 2. If the property is not set on the source object, set it to undefined if setToUndefined = true. Otherwise empty the array if it is an array property or set it to undefined.\n // 3. If the property is not an array on the source or the target object, copy the property from the source to the target object.\n // 4. If the property is an array on both objects, do not update the array, but transfer the elements (update elements directly, use pop(), push() or splice() if one array is longer than the other).\n // This needs to be done to have a smooth animation from the old to the new state and not a complete rebuild of the chart.\n let transferProperty = (source, target, property, setToUndefined) => {\n if (!source || !target || !property) {\n return;\n }\n // 1. Property not set on target\n if (!target[property]) {\n target[property] = source[property];\n return;\n }\n // 2. Property not set on source\n if (!source[property]) {\n if (setToUndefined) {\n // Set to undefined if setToUndefined = true\n target[property] = undefined;\n return;\n }\n // Empty array\n if (Array.isArray(target[property])) {\n target[property].splice(0);\n return;\n }\n // Otherwise set to undefined\n target[property] = undefined;\n return;\n }\n // 3. Property is not an array on the source or the target object\n if (!Array.isArray(source[property]) || !Array.isArray(target[property])) {\n target[property] = source[property];\n return;\n }\n // 4. Property is an array on the source and the target object\n for (let i = 0; i < Math.min(source[property].length, target[property].length); i++) {\n // Update elements directly\n target[property][i] = source[property][i];\n }\n let targetLength = target[property].length,\n sourceLength = source[property].length;\n if (targetLength > sourceLength) {\n // Target array is longer than source array\n target[property].splice(sourceLength);\n } else if (targetLength < sourceLength) {\n // Source array is longer than target array\n target[property].push(...source[property].splice(targetLength));\n }\n };\n\n transferProperty(sourceData, targetData, 'labels');\n\n if (!targetData.datasets) {\n targetData.datasets = [];\n }\n if (!sourceData.datasets) {\n sourceData.datasets = [];\n }\n\n // If the chart is a pie-, doughnut- or polar-area-chart, not complete datasets are hidden but elements of each dataset.\n // Store these hidden data indices to apply them to newly added datasets.\n if (scout.isOneOf(config.type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA) && targetData.datasets.length) {\n let meta = this.chartJs.getDatasetMeta(0);\n if (meta && meta.data && Array.isArray(meta.data)) {\n meta.data.forEach((dataMeta, idx) => {\n if (dataMeta.hidden) {\n hiddenDataIndices.push(idx);\n }\n });\n }\n }\n\n for (let i = 0; i < Math.min(sourceData.datasets.length, targetData.datasets.length); i++) {\n let targetDataset = targetData.datasets[i],\n sourceDataset = sourceData.datasets[i];\n\n targetDataset.label = sourceDataset.label;\n targetDataset.type = sourceDataset.type;\n\n transferProperty(sourceDataset, targetDataset, 'data');\n\n transferProperty(sourceDataset, targetDataset, 'backgroundColor', true);\n transferProperty(sourceDataset, targetDataset, 'borderColor', true);\n transferProperty(sourceDataset, targetDataset, 'hoverBackgroundColor', true);\n transferProperty(sourceDataset, targetDataset, 'hoverBorderColor', true);\n transferProperty(sourceDataset, targetDataset, 'legendColor', true);\n transferProperty(sourceDataset, targetDataset, 'pointHoverBackgroundColor', true);\n }\n let targetLength = targetData.datasets.length,\n sourceLength = sourceData.datasets.length;\n if (targetLength > sourceLength) {\n targetData.datasets.splice(sourceLength);\n } else if (targetLength < sourceLength) {\n targetData.datasets.push(...sourceData.datasets.splice(targetLength));\n applyHiddenDatasetIndices = arrays.init(sourceLength - targetLength).map((elem, idx) => targetLength + idx);\n }\n } else {\n this.chartJs.config.data = sourceData;\n }\n\n $.extend(true, this.chartJs.config, {\n options: {\n animation: {\n duration: this.animationDuration\n }\n }\n });\n this.chartJs.update();\n\n // Apply hidden data indices (only set for pie-, doughnut- or polar-area-chart)\n if (hiddenDataIndices.length && applyHiddenDatasetIndices.length) {\n applyHiddenDatasetIndices.forEach(datasetIndex => {\n let meta = this.chartJs.getDatasetMeta(datasetIndex);\n if (meta && meta.data && Array.isArray(meta.data)) {\n hiddenDataIndices\n .filter(dataIndex => meta.data.length > dataIndex)\n .forEach(dataIndex => {\n meta.data[dataIndex].hidden = true;\n });\n }\n });\n }\n\n this._adjustSize(this.chartJs.config, this.chartJs.chartArea);\n this.chartJs.update();\n }\n\n isDataUpdatable() {\n return true;\n }\n\n _updateChart(animated) {\n let config = this.chartJs.config;\n this._adjustColors(config);\n this._renderChart(config, animated);\n }\n\n _renderCheckedItems() {\n if (this.chartJs && this._checkItems(this.chartJs.config)) {\n this.chartJs.update();\n }\n }\n\n _checkItems(config) {\n if (!config || !config.data) {\n return false;\n }\n let transferArrayValues = (target, source, indices) => {\n if (Array.isArray(target) && Array.isArray(source)) {\n let changed = 0;\n arrays.ensure(indices)\n .filter(index => !isNaN(index) && index < Math.min(target.length, source.length))\n .forEach(index => {\n if (target[index] !== source[index]) {\n target[index] = source[index];\n changed++;\n }\n });\n return changed;\n }\n return 0;\n };\n let changed = 0;\n config.data.datasets.forEach((dataset, datasetIndex) => {\n let checkedIndices = this.chart.checkedItems.filter(item => item.datasetIndex === datasetIndex)\n .map(item => item.dataIndex),\n uncheckedIndices = arrays.init(dataset.data.length).map((elem, idx) => idx);\n arrays.removeAll(uncheckedIndices, checkedIndices);\n\n changed = changed +\n // check\n transferArrayValues(dataset.backgroundColor, dataset.checkedBackgroundColor, checkedIndices) +\n transferArrayValues(dataset.hoverBackgroundColor, dataset.checkedHoverBackgroundColor, checkedIndices) +\n transferArrayValues(dataset.pointBackgroundColor, dataset.checkedPointBackgroundColor, checkedIndices) +\n transferArrayValues(dataset.pointHoverBackgroundColor, dataset.checkedPointHoverBackgroundColor, checkedIndices) +\n transferArrayValues(dataset.pointRadius, dataset.checkedPointRadius, checkedIndices) +\n // uncheck\n transferArrayValues(dataset.backgroundColor, dataset.uncheckedBackgroundColor, uncheckedIndices) +\n transferArrayValues(dataset.hoverBackgroundColor, dataset.uncheckedHoverBackgroundColor, uncheckedIndices) +\n transferArrayValues(dataset.pointBackgroundColor, dataset.uncheckedPointBackgroundColor, uncheckedIndices) +\n transferArrayValues(dataset.pointHoverBackgroundColor, dataset.uncheckedPointHoverBackgroundColor, uncheckedIndices) +\n transferArrayValues(dataset.pointRadius, dataset.uncheckedPointRadius, uncheckedIndices);\n });\n\n return 0 < changed;\n }\n\n _adjustConfig(config) {\n if (!config || !config.type) {\n return;\n }\n this._adjustType(config);\n if (this.chart.data) {\n this._computeDatasets(this.chart.data, config);\n }\n this._adjustData(config);\n this._adjustTooltip(config);\n this._adjustGrid(config);\n this._adjustPlugins(config);\n this._adjustColors(config);\n this._adjustClickHandler(config);\n this._adjustResizeHandler(config);\n }\n\n _adjustType(config) {\n if (config.type === Chart.Type.COMBO_BAR_LINE) {\n config.type = Chart.Type.BAR;\n\n let scaleLabelByTypeMap = ((config.options || {}).scales || {}).scaleLabelByTypeMap;\n if (scaleLabelByTypeMap) {\n scaleLabelByTypeMap[Chart.Type.BAR] = scaleLabelByTypeMap[Chart.Type.COMBO_BAR_LINE];\n }\n }\n }\n\n _computeDatasets(chartData, config) {\n let labels = [],\n datasets = [];\n\n let setLabelMap = (identifier, labelMap) => {\n if (!$.isEmptyObject(labelMap)) {\n config.options = $.extend(true, {}, {\n scales: {}\n }, config.options);\n config.options.scales[identifier] = labelMap;\n }\n };\n\n (chartData.axes[0] || []).forEach(elem => labels.push(elem.label));\n\n setLabelMap(config.type === Chart.Type.BAR_HORIZONTAL ? 'yLabelMap' : 'xLabelMap', this._computeLabelMap(chartData.axes[0]));\n setLabelMap(config.type === Chart.Type.BAR_HORIZONTAL ? 'xLabelMap' : 'yLabelMap', this._computeLabelMap(chartData.axes[1]));\n\n chartData.chartValueGroups.forEach(elem => datasets.push({\n type: elem.type,\n label: elem.groupName,\n data: $.extend(true, [], elem.values)\n }));\n\n /**\n * @type {object}\n * @property {Dataset[]} datasets\n */\n config.data = {\n labels: labels,\n datasets: datasets\n };\n }\n\n _computeLabelMap(axis) {\n let labelMap = {};\n (axis || []).forEach((elem, idx) => {\n labelMap[idx] = elem.label;\n });\n return labelMap;\n }\n\n _adjustData(config) {\n if (!config || !config.data || !config.type) {\n return;\n }\n\n this._adjustBarBorderWidth(config);\n this._adjustMaxSegments(config);\n this._adjustBubbleRadii(config);\n this._adjustOnlyIntegers(config);\n }\n\n _adjustBarBorderWidth(config) {\n if (!config || !config.data || !config.type || !scout.isOneOf(config.type, Chart.Type.BAR, Chart.Type.BAR_HORIZONTAL)) {\n return;\n }\n\n config.data.datasets.forEach(dataset => {\n if ((dataset.type || Chart.Type.BAR) === Chart.Type.BAR) {\n dataset.hoverBorderWidth = dataset.hoverBorderWidth || 2;\n }\n });\n }\n\n _adjustMaxSegments(config) {\n if (!config || !config.data || !config.type || !scout.isOneOf(config.type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA, Chart.Type.RADAR)) {\n return;\n }\n\n let maxSegments = config.options.maxSegments;\n if (!(maxSegments && config.data.datasets.length && maxSegments < config.data.datasets[0].data.length)) {\n return;\n }\n config.data.datasets.forEach(elem => {\n let newData = elem.data.slice(0, maxSegments);\n newData[maxSegments - 1] = elem.data.slice(maxSegments - 1, elem.data.length).reduce((x, y) => {\n return x + y;\n }, 0);\n elem.data = newData;\n });\n\n let newLabels = config.data.labels.slice(0, maxSegments);\n newLabels[maxSegments - 1] = this.chart.session.text('ui.OtherValues');\n config.data.labels = newLabels;\n config.data.maxSegmentsExceeded = true;\n }\n\n _isMaxSegmentsExceeded(config, index) {\n if (!scout.isOneOf(config.type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA, Chart.Type.RADAR)) {\n return false;\n }\n if (config.options.otherSegmentClickable) {\n return false;\n }\n if (!config.data.maxSegmentsExceeded || !config.options.maxSegments) {\n return false;\n }\n return config.options.maxSegments - 1 <= index;\n }\n\n _adjustBubbleRadii(config) {\n if (!config || !config.data || !config.type || config.type !== Chart.Type.BUBBLE) {\n return;\n }\n\n config.data.datasets.forEach(dataset => dataset.data.forEach(data => {\n if (!isNaN(data.r)) {\n data.z = Math.pow(data.r, 2);\n } else if (!isNaN(data.z)) {\n data.r = Math.sqrt(data.z);\n }\n }));\n }\n\n _adjustOnlyIntegers(config) {\n this.onlyIntegers = true;\n\n if (!config || !config.data || !config.type) {\n return;\n }\n\n if (config.type === Chart.Type.BUBBLE) {\n this.onlyIntegers = config.data.datasets.every(dataset => dataset.data.every(data => numbers.isInteger(data.x) && numbers.isInteger(data.y)));\n } else {\n this.onlyIntegers = config.data.datasets.every(dataset => dataset.data.every(data => numbers.isInteger(data)));\n }\n }\n\n _adjustTooltip(config) {\n if (!config) {\n return;\n }\n\n config.options = $.extend(true, {}, {\n hover: {\n mode: 'nearest'\n },\n tooltips: {\n mode: 'nearest',\n callbacks: {\n title: this._tooltipTitle,\n label: this._tooltipLabel,\n labelColor: this._tooltipLabelColor\n }\n }\n }, config.options);\n }\n\n _formatTooltipTitle(tooltipItems, data) {\n let config = this.chartJs.config,\n ctx = this.chartJs.ctx,\n tooltipItem = tooltipItems[0],\n title,\n defaultGlobal = ChartJs.defaults.global,\n defaultTypeTooltips = {},\n defaultGlobalTooltips = defaultGlobal.tooltips;\n if (ChartJs.defaults[config.type]) {\n defaultTypeTooltips = $.extend(true, {}, defaultTypeTooltips, ChartJs.defaults[config.type].tooltips);\n }\n if (scout.isOneOf(config.type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA, Chart.Type.LINE, Chart.Type.BAR, Chart.Type.BAR_HORIZONTAL, Chart.Type.RADAR)) {\n let label = data.labels[tooltipItem.index];\n title = config.options.reformatLabels ? this._formatLabel(label) : label;\n } else if (config.type === Chart.Type.BUBBLE) {\n let xAxis = config.options.scales.xAxes[0],\n yAxis = config.options.scales.yAxes[0],\n xAxisLabel = xAxis.scaleLabel.labelString,\n yAxisLabel = yAxis.scaleLabel.labelString;\n xAxisLabel = xAxisLabel ? (xAxisLabel + ':') : ChartJsRenderer.ARROW_LEFT_RIGHT;\n yAxisLabel = yAxisLabel ? (yAxisLabel + ':') : ' ' + ChartJsRenderer.ARROW_UP_DOWN + ' ';\n title = [];\n let xTickLabel = xAxis.ticks.callback(tooltipItem.xLabel);\n if (xTickLabel) {\n title.push(xAxisLabel + ' ' + xTickLabel);\n }\n let yTickLabel = yAxis.ticks.callback(tooltipItem.yLabel);\n if (yTickLabel) {\n title.push(yAxisLabel + ' ' + yTickLabel);\n }\n } else {\n let defaultTypeTooltipTitle;\n if (defaultTypeTooltips.callbacks) {\n defaultTypeTooltipTitle = defaultTypeTooltips.callbacks.title;\n }\n let defaultTooltipTitle = defaultTypeTooltipTitle || defaultGlobalTooltips.callbacks.title;\n title = defaultTooltipTitle.call(this.chartJs, tooltipItems, data);\n }\n let horizontalSpace = this.$canvas.cssWidth() - (2 * config.options.tooltips.xPadding),\n measureText = ctx.measureText.bind(ctx),\n oldFont = ctx.font,\n titleFontStyle = config.options.tooltips.titleFontStyle || defaultTypeTooltips.titleFontStyle || defaultGlobalTooltips.titleFontStyle || defaultGlobal.defaultFontStyle,\n titleFontSize = config.options.tooltips.titleFontSize || defaultTypeTooltips.titleFontSize || defaultGlobalTooltips.titleFontSize || defaultGlobal.defaultFontSize,\n titleFontFamily = config.options.tooltips.titleFontFamily || defaultTypeTooltips.titleFontFamily || defaultGlobalTooltips.titleFontFamily || defaultGlobal.defaultFontFamily,\n result = [];\n ctx.font = titleFontStyle + ' ' + titleFontSize + 'px ' + titleFontFamily;\n arrays.ensure(title).forEach(titleLine => result.push(strings.truncateText(titleLine, horizontalSpace, measureText)));\n ctx.font = oldFont;\n return result;\n }\n\n _formatTooltipLabel(tooltipItem, data) {\n let config = this.chartJs.config,\n ctx = this.chartJs.ctx,\n datasets = data ? data.datasets : null,\n dataset = datasets ? datasets[tooltipItem.datasetIndex] : null,\n label, value,\n defaultGlobal = ChartJs.defaults.global,\n defaultTypeTooltips = {},\n defaultGlobalTooltips = defaultGlobal.tooltips;\n if (ChartJs.defaults[config.type]) {\n defaultTypeTooltips = $.extend(true, {}, defaultTypeTooltips, ChartJs.defaults[config.type].tooltips);\n }\n if (scout.isOneOf(config.type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA, Chart.Type.LINE, Chart.Type.BAR, Chart.Type.BAR_HORIZONTAL, Chart.Type.RADAR)) {\n label = dataset.label;\n value = this._formatLabel(dataset.data[tooltipItem.index]);\n } else if (config.type === Chart.Type.BUBBLE) {\n label = dataset.label;\n value = this._formatLabel(dataset.data[tooltipItem.index].z);\n } else {\n let defaultTypeTooltipLabel;\n if (defaultTypeTooltips.callbacks) {\n defaultTypeTooltipLabel = defaultTypeTooltips.callbacks.label;\n }\n let defaultTooltipLabel = defaultTypeTooltipLabel || defaultGlobalTooltips.callbacks.label;\n label = defaultTooltipLabel.call(this.chartJs, tooltipItem, data);\n }\n label = ' ' + label;\n value = value ? ' ' + value : '';\n let colorRectSize = config.options.tooltips.displayColors ? config.options.tooltips.bodyFontSize || defaultTypeTooltips.bodyFontSize || defaultGlobalTooltips.bodyFontSize || defaultGlobal.defaultFontSize : 0,\n horizontalSpace = this.$canvas.cssWidth() - (2 * config.options.tooltips.xPadding) - colorRectSize,\n measureText = ctx.measureText.bind(ctx),\n result = label + (value ? ':' + value : '');\n if (measureText(result).width > horizontalSpace) {\n if (measureText(value).width > horizontalSpace / 2) {\n return strings.truncateText(value, horizontalSpace, measureText);\n }\n return strings.truncateText(label, horizontalSpace - measureText(value ? ':' + value : '').width, measureText) + (value ? ':' + value : '');\n }\n return result;\n }\n\n _computeTooltipLabelColor(tooltipItem, chart) {\n let config = chart.config,\n tooltips = config.options ? config.options.tooltips : null,\n tooltipBackgroundColor = tooltips ? tooltips.backgroundColor : null,\n datasets = chart.data ? chart.data.datasets : null,\n dataset = datasets ? datasets[tooltipItem.datasetIndex] : null,\n backgroundColor;\n if (scout.isOneOf((dataset.type || config.type), Chart.Type.LINE, Chart.Type.BAR, Chart.Type.BAR_HORIZONTAL, Chart.Type.RADAR, Chart.Type.BUBBLE)) {\n backgroundColor = dataset.legendColor || dataset.borderColor;\n }\n if (scout.isOneOf(config.type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n let legendColor = Array.isArray(dataset.legendColor) ? dataset.legendColor[tooltipItem.index] : dataset.legendColor,\n datasetBackgroundColor = Array.isArray(dataset.backgroundColor) ? dataset.backgroundColor[tooltipItem.index] : dataset.backgroundColor;\n backgroundColor = legendColor || this._adjustColorOpacity(datasetBackgroundColor, 1);\n }\n if (!backgroundColor || typeof backgroundColor === 'function') {\n let defaultTypeTooltipLabelColor;\n if (ChartJs.defaults[config.type] && ChartJs.defaults[config.type].callbacks) {\n defaultTypeTooltipLabelColor = ChartJs.defaults[config.type].callbacks.labelColor;\n }\n let defaultTooltipLabelColor = defaultTypeTooltipLabelColor || ChartJs.defaults.global.tooltips.callbacks.labelColor;\n backgroundColor = defaultTooltipLabelColor.call(chart, tooltipItem, chart).backgroundColor;\n }\n return {\n borderColor: tooltipBackgroundColor,\n backgroundColor: backgroundColor\n };\n }\n\n _adjustGrid(config) {\n if (!config) {\n return;\n }\n\n config.options = $.extend(true, {}, config.options);\n\n this._adjustScale(config);\n this._adjustScales(config);\n }\n\n _adjustScale(config) {\n if (!config || !config.type || !config.options) {\n return;\n }\n\n if (scout.isOneOf(config.type, Chart.Type.POLAR_AREA, Chart.Type.RADAR)) {\n config.options = $.extend(true, {}, {\n scale: {}\n }, config.options);\n }\n\n let options = config.options;\n if (options.scale) {\n options.scale = $.extend(true, {}, {\n angleLines: {\n display: false\n },\n gridLines: {\n borderDash: [2, 4]\n },\n ticks: {\n beginAtZero: true,\n callback: this._labelFormatter\n },\n pointLabels: {\n fontSize: ChartJs.defaults.global.defaultFontSize\n }\n }, options.scale);\n }\n }\n\n _adjustScales(config) {\n if (!config || !config.type || !config.options) {\n return;\n }\n\n if (scout.isOneOf(config.type, Chart.Type.BAR, Chart.Type.BAR_HORIZONTAL, Chart.Type.LINE, Chart.Type.BUBBLE)) {\n config.options = $.extend(true, {}, {\n scales: {\n xAxes: [{}],\n yAxes: [{}]\n }\n }, config.options);\n }\n\n this._adjustXAxes(config);\n this._adjustYAxes(config);\n }\n\n _adjustXAxes(config) {\n if (!config || !config.type || !config.options || !config.options.scales || !config.options.scales.xAxes) {\n return;\n }\n\n let type = config.type,\n xAxes = config.options.scales.xAxes;\n\n for (let i = 0; i < xAxes.length; i++) {\n if (scout.isOneOf(type, Chart.Type.BAR_HORIZONTAL, Chart.Type.BUBBLE)) {\n xAxes[i] = $.extend(true, {}, {\n offset: type === Chart.Type.BUBBLE,\n gridLines: {\n drawBorder: false,\n drawTicks: false,\n zeroLineBorderDash: [2, 4],\n borderDash: [2, 4]\n },\n ticks: {\n padding: 5,\n beginAtZero: type === Chart.Type.BAR_HORIZONTAL\n }\n }, xAxes[i]);\n } else {\n xAxes[i] = $.extend(true, {}, {\n offset: true,\n gridLines: {\n display: false\n }\n }, xAxes[i]);\n }\n if (scout.isOneOf(type, Chart.Type.BAR_HORIZONTAL, Chart.Type.BUBBLE) || config.options.reformatLabels) {\n xAxes[i] = $.extend(true, {}, {\n ticks: {\n callback: this._xLabelFormatter\n }\n }, xAxes[i]);\n }\n xAxes[i].afterCalculateTickRotation = this._xAxisFitter;\n }\n }\n\n _adjustYAxes(config) {\n if (!config || !config.type || !config.options || !config.options.scales || !config.options.scales.yAxes) {\n return;\n }\n\n let type = config.type,\n yAxes = config.options.scales.yAxes;\n\n for (let i = 0; i < yAxes.length; i++) {\n if (type === Chart.Type.BAR_HORIZONTAL) {\n yAxes[i] = $.extend(true, {}, {\n gridLines: {\n display: false\n }\n }, yAxes[i]);\n } else {\n yAxes[i] = $.extend(true, {}, {\n gridLines: {\n drawBorder: false,\n drawTicks: false,\n zeroLineBorderDash: [2, 4],\n borderDash: [2, 4]\n },\n ticks: {\n padding: 5,\n beginAtZero: type !== Chart.Type.BUBBLE\n }\n }, yAxes[i]);\n }\n if (type !== Chart.Type.BAR_HORIZONTAL || config.options.reformatLabels) {\n yAxes[i] = $.extend(true, {}, {\n ticks: {\n callback: this._yLabelFormatter\n }\n }, yAxes[i]);\n }\n yAxes[i].afterFit = this._yAxisFitter;\n }\n }\n\n _adjustPlugins(config) {\n this._adjustPluginsDatalabels(config);\n }\n\n _adjustPluginsDatalabels(config) {\n if (!config || !config.type || !config.options || !config.options.plugins || !config.options.plugins.datalabels || !config.options.plugins.datalabels.display) {\n return;\n }\n\n let plugins = config.options.plugins;\n if (scout.isOneOf(config.type, Chart.Type.PIE, Chart.Type.DOUGHNUT)) {\n plugins.datalabels = $.extend(true, {}, {\n formatter: this._radialChartDatalabelsFormatter\n }, plugins.datalabels);\n plugins.datalabels.display = this._radialChartDatalabelsDisplayHandler;\n } else if (scout.isOneOf(config.type, Chart.Type.BAR, Chart.Type.BAR_HORIZONTAL, Chart.Type.LINE, Chart.Type.POLAR_AREA, Chart.Type.RADAR, Chart.Type.BUBBLE)) {\n plugins.datalabels = $.extend(true, {}, {\n backgroundColor: this._datalabelBackgroundColorHandler,\n borderRadius: 4\n }, plugins.datalabels);\n plugins.datalabels.display = 'auto';\n }\n if (config.options.reformatLabels) {\n let handleFormatter = formatter => {\n return (value, context) => {\n let label = formatter.call(context.chart, value, context);\n return this._formatLabel(label);\n };\n };\n\n if (config.data) {\n let datasets = config.data.datasets;\n datasets.forEach(dataset => {\n if (dataset.datalabels && dataset.datalabels.formatter) {\n dataset.datalabels.formatter = handleFormatter(dataset.datalabels.formatter);\n }\n });\n }\n if (plugins.datalabels.formatter) {\n plugins.datalabels.formatter = handleFormatter(plugins.datalabels.formatter);\n }\n }\n\n plugins.datalabels = $.extend(true, {}, {\n formatter: this._datalabelsFormatter\n }, plugins.datalabels);\n }\n\n _formatLabel(label) {\n return this._formatLabelMap(label, null, this._getNumberFormatter());\n }\n\n _getNumberFormatter() {\n if (this.chartJs && this.chartJs.config && this.chartJs.config.options) {\n return this.chartJs.config.options.numberFormatter;\n }\n }\n\n _formatXLabel(label) {\n return this._formatLabelMap(label, this._getXLabelMap(), this._getNumberFormatter());\n }\n\n _formatYLabel(label) {\n return this._formatLabelMap(label, this._getYLabelMap(), this._getNumberFormatter());\n }\n\n _getXLabelMap() {\n return this._getLabelMap('xLabelMap');\n }\n\n _getYLabelMap() {\n return this._getLabelMap('yLabelMap');\n }\n\n _getLabelMap(identifier) {\n if (this.chartJs && this.chartJs.config && this.chartJs.config.options && this.chartJs.config.options.scales) {\n return this.chartJs.config.options.scales[identifier];\n }\n }\n\n _formatLabelMap(label, labelMap, numberFormatter) {\n if (labelMap) {\n return labelMap[label];\n }\n if (isNaN(label)) {\n return label;\n }\n if (numberFormatter) {\n return numberFormatter(label, this._formatNumberLabel.bind(this));\n }\n return this._formatNumberLabel(label);\n }\n\n _formatNumberLabel(label) {\n if (isNaN(label)) {\n return label;\n }\n let abs = Math.abs(label);\n let abbreviation = '';\n if (abs >= 1000000) {\n abs = abs / 1000000;\n abbreviation = ' ' + this.chart.session.text('ui.Mio');\n let abbreviations = [\n this.chart.session.text('ui.Mrd'),\n this.chart.session.text('ui.Bio'),\n this.chart.session.text('ui.Brd'),\n this.chart.session.text('ui.Tri'),\n this.chart.session.text('ui.Trd')];\n for (let i = 0; i < abbreviations.length; i++) {\n if (abs >= 1000000) {\n abs = abs / 1000;\n abbreviation = ' ' + abbreviations[i];\n } else {\n break;\n }\n }\n }\n return this.session.locale.decimalFormat.format(Math.sign(label) * abs) + abbreviation;\n }\n\n _fitXAxis(xAxis) {\n if (!xAxis || xAxis.labelRotation === 0) {\n return;\n }\n let maxHeight = this.maxXAxesTicksHeigth,\n defaultGlobal = ChartJs.defaults.global,\n defaultTicks = ChartJs.defaults.scale.ticks,\n fontSize,\n maxRotation;\n if (this.chartJs) {\n let chartArea = this.chartJs.chartArea,\n chartAreaHeight = Math.abs(chartArea.top - chartArea.bottom);\n maxHeight = Math.min(maxHeight, chartAreaHeight / 3);\n }\n if (xAxis.options && xAxis.options.ticks) {\n maxRotation = xAxis.options.ticks.maxRotation;\n fontSize = xAxis.options.ticks.fontSize;\n }\n maxRotation = maxRotation || defaultTicks.maxRotation;\n fontSize = fontSize || defaultTicks.fontSize || defaultGlobal.defaultFontSize;\n // if the chart is very narrow, chart.js sometimes calculates with a negative width of the canvas\n // this causes NaN for labelRotation and height\n if (isNaN(xAxis.labelRotation)) {\n xAxis.labelRotation = maxRotation;\n }\n xAxis.height = isNaN(xAxis.height) ? maxHeight : Math.min(xAxis.height, maxHeight);\n // the rotation (degrees), needs to be transformed to radians ((labelRotation / 180) * pi)\n let labelRotation = xAxis.labelRotation,\n // the label is a rectangle (labelWidth x fontSize) which is rotated\n // => height = sin(labelRotation) * labelLength + sin(90° - labelRotation) * fontSize\n // <=> labelLength = (height - sin(90° - labelRotation) * fontSize) / sin(labelRotation)\n maxLabelLength = (maxHeight - (fontSize * Math.sin(((90 - labelRotation) / 180) * Math.PI))) / Math.sin((labelRotation / 180) * Math.PI);\n if (xAxis.longestLabelWidth > maxLabelLength) {\n let measureText = xAxis.ctx.measureText.bind(xAxis.ctx);\n xAxis._ticks.forEach(tick => {\n tick.label = strings.truncateText(tick.label, maxLabelLength, measureText);\n });\n // reset label sizes, chart.js will recalculate them using the new truncated labels\n xAxis._labelSizes = null;\n }\n }\n\n _fitYAxis(yAxis) {\n if (!yAxis) {\n return;\n }\n let padding = 0,\n tickMarkLength = 0;\n if (yAxis.options && yAxis.options.ticks) {\n padding = yAxis.options.ticks.padding || 0;\n }\n if (yAxis.options && yAxis.options.gridLines) {\n tickMarkLength = yAxis.options.gridLines.tickMarkLength || 0;\n }\n if (yAxis.longestLabelWidth > yAxis.maxWidth - padding) {\n let horizontalSpace = yAxis.maxWidth - padding - tickMarkLength,\n measureText = yAxis.ctx.measureText.bind(yAxis.ctx);\n yAxis._ticks.forEach(tick => {\n tick.label = strings.truncateText(tick.label, horizontalSpace, measureText);\n });\n }\n }\n\n _displayDatalabelsOnRadialChart(context) {\n let data = context.chart.getDatasetMeta(context.datasetIndex).data[context.dataIndex],\n model = data._model,\n // Compute the biggest circle that fits inside sector/arc with center in the middle between inner and outer radius.\n // First compute a circle C1 that touches the straight boundaries of the sector/arc. Then compute a circle C2 that touches the inner and the outer radius.\n // The smaller one of these two circles is the biggest possible circle that fits inside sector/arc with center in the middle between inner and outer radius.\n // circle C1:\n midRadius = (model.outerRadius + model.innerRadius) / 2,\n // If the difference between the angles is greater than pi, it is no longer possible for a circle to be inside the sector/arc and touch both straight boundaries.\n angle = Math.min((model.endAngle - model.startAngle), Math.PI) / 2,\n radius1 = Math.abs(Math.sin(angle)) * midRadius,\n diameter1 = radius1 * 2,\n // circle C2:\n diameter2 = model.outerRadius - model.innerRadius;\n return Math.min(diameter1, diameter2) > this.minRadialChartDatalabelSpace;\n }\n\n _formatDatalabelsOnRadialChart(value, context) {\n let sum = this._computeSumOfVisibleElements(context),\n dataset = context.dataset,\n roundingError = 0,\n roundedResults = [];\n for (let i = 0; i < context.dataIndex + 1; i++) {\n let result = dataset.data[i] / sum * 100 - roundingError,\n roundedResult = Math.round(result);\n roundingError = roundedResult - result;\n roundedResults.push(roundedResult + '%');\n }\n return roundedResults[context.dataIndex];\n }\n\n _computeSumOfVisibleElements(context) {\n let dataset = context.dataset,\n meta = context.chart.getDatasetMeta(context.datasetIndex),\n sum = 0;\n for (let i = 0; i < dataset.data.length; i++) {\n if (meta.data[i] && !meta.data[i].hidden) {\n sum += dataset.data[i];\n }\n }\n return sum;\n }\n\n _formatDatalabels(value, context) {\n if (context.chart.config.type === Chart.Type.BUBBLE) {\n return this._formatLabel(value.z);\n }\n return this._formatLabel(value);\n }\n\n _getBackgroundColorOfDataset(context) {\n return context.dataset.backgroundColor;\n }\n\n _adjustColors(config) {\n this._adjustColorSchemeCssClass(config);\n this._adjustDatasetColors(config);\n this._adjustLegendColors(config);\n this._adjustTooltipColors(config);\n this._adjustScaleColors(config);\n this._adjustScalesColors(config);\n this._adjustPluginColors(config);\n }\n\n _adjustColorSchemeCssClass(config) {\n if (!config || !config.options) {\n return;\n }\n this.colorSchemeCssClass = colorSchemes.getCssClasses(config.options.colorScheme).join(' ');\n }\n\n _adjustDatasetColors(config) {\n if (!config || !config.data || !config.type) {\n return;\n }\n\n let data = config.data,\n type = config.type,\n autoColor = config.options && config.options.autoColor,\n checkable = config.options && config.options.checkable,\n multipleColorsPerDataset = autoColor && scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA),\n colors = {\n backgroundColors: [],\n borderColors: [],\n hoverBackgroundColors: [],\n hoverBorderColors: [],\n checkedBackgroundColors: [],\n checkedHoverBackgroundColors: [],\n legendColors: [],\n pointHoverColor: this._computePointHoverColor(type)\n };\n\n colors = $.extend(true, colors, this._computeDatasetColors(config, multipleColorsPerDataset));\n\n data.datasets.forEach((elem, idx) => {\n let backgroundColor = (multipleColorsPerDataset ? colors.backgroundColors : colors.backgroundColors[idx]),\n borderColor = (multipleColorsPerDataset ? colors.borderColors : colors.borderColors[idx]),\n hoverBackgroundColor = (multipleColorsPerDataset ? colors.hoverBackgroundColors : colors.hoverBackgroundColors[idx]),\n hoverBorderColor = (multipleColorsPerDataset ? colors.hoverBorderColors : colors.hoverBorderColors[idx]),\n legendColor = (multipleColorsPerDataset ? colors.legendColors : colors.legendColors[idx]),\n pointHoverBackgroundColor = colors.pointHoverColor;\n\n let setProperty = (identifier, value) => {\n if (value && value.length) {\n elem[identifier] = Array.isArray(value) ? [...value] : value;\n }\n };\n setProperty('backgroundColor', backgroundColor);\n setProperty('borderColor', borderColor);\n setProperty('hoverBackgroundColor', hoverBackgroundColor);\n setProperty('hoverBorderColor', hoverBorderColor);\n setProperty('legendColor', legendColor);\n setProperty('pointHoverBackgroundColor', pointHoverBackgroundColor);\n if (checkable) {\n let datasetLength = elem.data.length;\n if (scout.isOneOf(type, Chart.Type.PIE, Chart.Type.BAR_HORIZONTAL, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA, Chart.Type.BUBBLE) || (type === Chart.Type.BAR && (elem.type || Chart.Type.BAR) === Chart.Type.BAR)) {\n let uncheckedBackgroundColor = (multipleColorsPerDataset ? colors.backgroundColors : arrays.init(datasetLength, colors.backgroundColors[idx])),\n uncheckedHoverBackgroundColor = (multipleColorsPerDataset ? colors.hoverBackgroundColors : arrays.init(datasetLength, colors.hoverBackgroundColors[idx])),\n\n checkedBackgroundColor = (multipleColorsPerDataset ? colors.checkedBackgroundColors : arrays.init(datasetLength, colors.checkedBackgroundColors[idx])),\n checkedHoverBackgroundColor = (multipleColorsPerDataset ? colors.checkedHoverBackgroundColors : arrays.init(datasetLength, colors.checkedHoverBackgroundColors[idx]));\n\n setProperty('uncheckedBackgroundColor', uncheckedBackgroundColor);\n setProperty('uncheckedHoverBackgroundColor', uncheckedHoverBackgroundColor);\n setProperty('checkedBackgroundColor', checkedBackgroundColor);\n setProperty('checkedHoverBackgroundColor', checkedHoverBackgroundColor);\n\n setProperty('backgroundColor', elem.uncheckedBackgroundColor);\n setProperty('hoverBackgroundColor', elem.uncheckedHoverBackgroundColor);\n } else if (scout.isOneOf(type, Chart.Type.LINE, Chart.Type.RADAR) || (type === Chart.Type.BAR && elem.type === Chart.Type.LINE)) {\n let uncheckedPointBackgroundColor = arrays.init(datasetLength, pointHoverBackgroundColor),\n uncheckedPointHoverBackgroundColor = arrays.init(datasetLength, pointHoverBackgroundColor),\n checkedPointBackgroundColor = arrays.init(datasetLength, borderColor),\n checkedPointHoverBackgroundColor = arrays.init(datasetLength, hoverBorderColor || borderColor);\n setProperty('uncheckedPointBackgroundColor', uncheckedPointBackgroundColor);\n setProperty('uncheckedPointHoverBackgroundColor', uncheckedPointHoverBackgroundColor);\n setProperty('checkedPointBackgroundColor', checkedPointBackgroundColor);\n setProperty('checkedPointHoverBackgroundColor', checkedPointHoverBackgroundColor);\n\n setProperty('pointBackgroundColor', elem.uncheckedPointBackgroundColor);\n setProperty('pointHoverBackgroundColor', elem.uncheckedPointHoverBackgroundColor);\n\n let uncheckedPointRadius = arrays.init(datasetLength, ((config.options.elements || {}).point || {}).radius || ChartJs.defaults.global.elements.point.radius),\n checkedPointRadius = arrays.init(datasetLength, ((config.options.elements || {}).point || {}).hoverRadius || ChartJs.defaults.global.elements.point.hoverRadius);\n setProperty('uncheckedPointRadius', uncheckedPointRadius);\n setProperty('checkedPointRadius', checkedPointRadius);\n\n setProperty('pointRadius', elem.uncheckedPointRadius);\n }\n }\n });\n if (checkable) {\n this._checkItems(config);\n }\n }\n\n _computePointHoverColor(type) {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'point hover'], 'fill').fill;\n }\n\n _computeDatasetColors(config, multipleColorsPerDataset) {\n if (!config || !config.data || !config.type) {\n return {};\n }\n\n let data = config.data,\n type = config.type,\n colors = {};\n\n if (config.options && config.options.autoColor) {\n colors = this._computeDatasetColorsAutoColor(config, multipleColorsPerDataset);\n } else {\n colors = this._computeDatasetColorsChartValueGroups(config, multipleColorsPerDataset);\n if (scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n let borderColor = this._computeBorderColor(type, 0);\n colors.borderColors = arrays.init(data.datasets.length, borderColor);\n colors.hoverBorderColors = colors.borderColors;\n }\n }\n\n return colors;\n }\n\n _computeDatasetColorsAutoColor(config, multipleColorsPerDataset) {\n if (!config || !config.data || !config.type || !config.options || !config.options.autoColor) {\n return {};\n }\n\n let data = config.data,\n type = config.type,\n checkable = config.options && config.options.checkable,\n transparent = config.options && config.options.transparent,\n colors = {\n backgroundColors: [],\n borderColors: [],\n hoverBackgroundColors: [],\n hoverBorderColors: [],\n checkedBackgroundColors: [],\n checkedHoverBackgroundColors: [],\n legendColors: []\n };\n\n let types = [];\n if (multipleColorsPerDataset) {\n types = arrays.init((data.datasets.length && data.datasets[0].data.length) || 0, type);\n } else {\n data.datasets.forEach(dataset => types.push(dataset.type || type));\n }\n types.forEach((type, index) => {\n colors.backgroundColors.push(this._computeBackgroundColor(type, index, checkable || transparent));\n colors.borderColors.push(this._computeBorderColor(type, index));\n colors.hoverBackgroundColors.push(this._computeHoverBackgroundColor(type, index, checkable || transparent));\n colors.hoverBorderColors.push(this._computeHoverBorderColor(type, index));\n\n colors.checkedBackgroundColors.push(this._computeCheckedBackgroundColor(type, index, checkable));\n colors.checkedHoverBackgroundColors.push(this._computeCheckedHoverBackgroundColor(type, index, checkable));\n\n colors.legendColors.push(this._computeLegendColor(type, index));\n });\n\n return colors;\n }\n\n _computeBackgroundColor(type, index, checkable) {\n return styles.get([this.colorSchemeCssClass, type + '-chart' + (checkable ? ' checkable' : ''), 'elements', 'color' + (index % this.numSupportedColors)], 'fill').fill;\n }\n\n _computeBorderColor(type, index) {\n let additionalProperties;\n if (scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n additionalProperties = {stroke: this.firstOpaqueBackgroundColor};\n }\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'stroke-color' + (index % this.numSupportedColors)], 'stroke', additionalProperties).stroke;\n }\n\n _computeHoverBackgroundColor(type, index, checkable) {\n return styles.get([this.colorSchemeCssClass, type + '-chart' + (checkable ? ' checkable' : ''), 'elements', 'color' + (index % this.numSupportedColors) + ' hover'], 'fill').fill;\n }\n\n _computeHoverBorderColor(type, index) {\n let additionalProperties;\n if (scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n additionalProperties = {stroke: this.firstOpaqueBackgroundColor};\n }\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'stroke-color' + (index % this.numSupportedColors) + ' hover'], 'stroke', additionalProperties).stroke;\n }\n\n _computeCheckedBackgroundColor(type, index, checkable) {\n return styles.get([this.colorSchemeCssClass, type + '-chart' + (checkable ? ' checkable' : ''), 'elements', 'color' + (index % this.numSupportedColors) + ' checked'], 'fill').fill;\n }\n\n _computeCheckedHoverBackgroundColor(type, index, checkable) {\n return styles.get([this.colorSchemeCssClass, type + '-chart' + (checkable ? ' checkable' : ''), 'elements', 'color' + (index % this.numSupportedColors) + ' hover checked'], 'fill').fill;\n }\n\n _computeLegendColor(type, index) {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'color' + (index % this.numSupportedColors) + ' legend'], 'fill').fill;\n }\n\n _computeDatasetColorsChartValueGroups(config, multipleColorsPerDataset) {\n if (!config || !config.type || !this.chart.data) {\n return {};\n }\n\n let type = config.type,\n checkable = config.options && config.options.checkable,\n transparent = config.options && config.options.transparent,\n colors = {\n backgroundColors: [],\n borderColors: [],\n hoverBackgroundColors: [],\n hoverBorderColors: [],\n checkedBackgroundColors: [],\n checkedHoverBackgroundColors: [],\n legendColors: []\n };\n\n this.chart.data.chartValueGroups.forEach(elem => {\n let rgbColor = styles.hexToRgb(elem.colorHexValue),\n adjustColor = (opacity, darker) => this._adjustColorOpacity(styles.darkerColor(rgbColor, darker), opacity);\n\n let backgroundOpacity = 1,\n hoverBackgroundOpacity = 1,\n hoverBackgroundDarker = 0.1,\n hoverBorderDarker = 0.1,\n\n uncheckedBackgroundOpacity = 0.2,\n uncheckedHoverBackgroundOpacity = 0.35,\n\n checkedBackgroundOpacity = 1,\n checkedBackgroundDarker = 0,\n checkedHoverBackgroundOpacity = 1,\n checkedHoverBackgroundDarker = 0.1;\n\n if (scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT)) {\n uncheckedBackgroundOpacity = 0.7;\n uncheckedHoverBackgroundOpacity = 0.85;\n\n checkedBackgroundDarker = 0.1;\n checkedHoverBackgroundDarker = 0;\n } else if (type === Chart.Type.POLAR_AREA) {\n backgroundOpacity = 0.7;\n hoverBackgroundOpacity = 0.85;\n\n uncheckedBackgroundOpacity = 0.7;\n uncheckedHoverBackgroundOpacity = 0.85;\n\n checkedBackgroundDarker = 0.1;\n checkedHoverBackgroundDarker = 0;\n } else if (scout.isOneOf((elem.type || type), Chart.Type.LINE, Chart.Type.RADAR)) {\n backgroundOpacity = 0.2;\n hoverBackgroundOpacity = 0.35;\n hoverBackgroundDarker = 0;\n hoverBorderDarker = 0;\n\n checkedBackgroundOpacity = 0.2;\n checkedHoverBackgroundOpacity = 0.35;\n checkedHoverBackgroundDarker = 0;\n } else if (type === Chart.Type.BUBBLE) {\n backgroundOpacity = 0.2;\n hoverBackgroundOpacity = 0.35;\n hoverBackgroundDarker = 0;\n }\n\n colors.backgroundColors.push(adjustColor((checkable || transparent) ? uncheckedBackgroundOpacity : backgroundOpacity, 0));\n colors.borderColors.push(adjustColor(1, 0));\n colors.hoverBackgroundColors.push(adjustColor((checkable || transparent) ? uncheckedHoverBackgroundOpacity : hoverBackgroundOpacity, (checkable || transparent) ? 0 : hoverBackgroundDarker));\n colors.hoverBorderColors.push(adjustColor(1, hoverBorderDarker));\n\n colors.checkedBackgroundColors.push(adjustColor(checkedBackgroundOpacity, checkedBackgroundDarker));\n colors.checkedHoverBackgroundColors.push(adjustColor(checkedHoverBackgroundOpacity, checkedHoverBackgroundDarker));\n\n colors.legendColors.push(adjustColor(1, 0));\n });\n colors.datalabelColor = this._computeDatalabelColor(type);\n\n return colors;\n }\n\n _adjustColorOpacity(color, opacity = 1) {\n if (!color || typeof color === 'function') {\n return color;\n }\n\n if (color.indexOf('rgb') === 0) {\n return this._adjustRgbColorOpacity(color, opacity);\n }\n if (color.indexOf('#') === 0) {\n return this._adjustHexColorOpacity(color, opacity);\n }\n return color;\n }\n\n _adjustRgbColorOpacity(rgbColor, opacity = 1) {\n if (!rgbColor || rgbColor.indexOf('rgb') !== 0) {\n return rgbColor;\n }\n let rgba = styles.rgb(rgbColor);\n rgba.alpha = opacity;\n return 'rgba(' + rgba.red + ', ' + rgba.green + ', ' + rgba.blue + ', ' + rgba.alpha + ')';\n }\n\n _adjustHexColorOpacity(hexColor, opacity = 1) {\n if (!hexColor || hexColor.indexOf('#') !== 0 || !(hexColor.length === 4 || hexColor.length === 5 || hexColor.length === 7 || hexColor.length === 9)) {\n return hexColor;\n }\n return this._adjustRgbColorOpacity(styles.hexToRgb(hexColor), opacity);\n }\n\n _adjustLegendColors(config) {\n if (!config || !config.type || !config.options) {\n return;\n }\n\n config.options = $.extend(true, {}, config.options, {\n legend: {\n labels: {\n fontColor: this._computeLabelColor(config.type),\n generateLabels: this._legendLabelGenerator\n }\n }\n });\n }\n\n _computeLabelColor(type) {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'label'], 'fill').fill;\n }\n\n _generateLegendLabels(chart) {\n let config = chart.config,\n data = config.data,\n measureText = chart.ctx.measureText.bind(chart.ctx),\n horizontalSpace;\n if (scout.isOneOf(config.options.legend.position, Chart.Position.LEFT, Chart.Position.RIGHT)) {\n horizontalSpace = Math.min(250, this.$canvas.cssWidth() / 3);\n } else {\n horizontalSpace = Math.min(250, this.$canvas.cssWidth() * 2 / 3);\n }\n let defaultTypeGenerateLabels;\n if (ChartJs.defaults[config.type] && ChartJs.defaults[config.type].legend && ChartJs.defaults[config.type].legend.labels) {\n defaultTypeGenerateLabels = ChartJs.defaults[config.type].legend.labels.generateLabels;\n }\n let defaultGenerateLabels = defaultTypeGenerateLabels || ChartJs.defaults.global.legend.labels.generateLabels;\n let labels = defaultGenerateLabels.call(chart, chart);\n labels.forEach((elem, idx) => {\n elem.text = strings.truncateText(elem.text, horizontalSpace, measureText);\n let dataset = data.datasets[idx],\n fillStyle;\n if (dataset && scout.isOneOf((dataset.type || config.type), Chart.Type.LINE, Chart.Type.BAR, Chart.Type.BAR_HORIZONTAL, Chart.Type.RADAR, Chart.Type.BUBBLE)) {\n fillStyle = dataset.legendColor || this._adjustColorOpacity(dataset.borderColor, 1);\n } else if (data.datasets.length && scout.isOneOf(config.type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n dataset = data.datasets[0];\n let legendColor = Array.isArray(dataset.legendColor) ? dataset.legendColor[idx] : dataset.legendColor,\n backgroundColor = Array.isArray(dataset.backgroundColor) ? dataset.backgroundColor[idx] : dataset.backgroundColor;\n fillStyle = legendColor || this._adjustColorOpacity(backgroundColor, 1);\n }\n if (typeof fillStyle !== 'function') {\n elem.fillStyle = fillStyle;\n elem.strokeStyle = fillStyle;\n }\n });\n return labels;\n }\n\n _adjustTooltipColors(config) {\n if (!config || !config.type || !config.options) {\n return;\n }\n\n let tooltipBackgroundColor = this._computeTooltipBackgroundColor(config.type),\n tooltipBorderColor = this._computeTooltipBorderColor(config.type);\n\n config.options = $.extend(true, {}, config.options, {\n tooltips: {\n backgroundColor: tooltipBackgroundColor,\n borderColor: tooltipBorderColor,\n multiKeyBackground: tooltipBackgroundColor\n }\n });\n }\n\n _computeTooltipBackgroundColor(type) {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'tooltip-background'], 'fill').fill;\n }\n\n _computeTooltipBorderColor(type) {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'tooltip-border'], 'fill').fill;\n }\n\n _adjustScaleColors(config) {\n if (!config || !config.type || !config.options || !config.options.scale) {\n return;\n }\n\n let labelColor = this._computeLabelColor(config.type),\n labelBackdropColor = this._computeLabelBackdropColor(config.type),\n gridColor = this._computeGridColor(config.type);\n\n config.options.scale.ticks = $.extend(true, {}, config.options.scale.ticks, {\n fontColor: gridColor,\n backdropColor: labelBackdropColor\n });\n config.options.scale.pointLabels = $.extend(true, {}, config.options.scale.pointLabels, {\n fontColor: labelColor\n });\n config.options.scale.gridLines = $.extend(true, {}, config.options.scale.gridLines, {\n color: gridColor\n });\n }\n\n _computeLabelBackdropColor(type) {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'label-backdrop'], 'fill', {fill: this.firstOpaqueBackgroundColor}).fill;\n }\n\n _computeGridColor(type) {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'grid'], 'fill').fill;\n }\n\n _adjustScalesColors(config) {\n if (!config || !config.type || !config.options || !config.options.scales) {\n return;\n }\n\n let xAxes = config.options.scales.xAxes || [],\n yAxes = config.options.scales.yAxes || [],\n axes = [...xAxes, ...yAxes];\n\n if (!axes.length) {\n return;\n }\n\n let labelColor = this._computeLabelColor(config.type),\n gridColor = this._computeGridColor(config.type),\n axisLabelColor = this._computeAxisLabelColor(config.type);\n\n axes.forEach(elem => {\n elem.gridLines = $.extend(true, {}, elem.gridLines, {\n zeroLineColor: gridColor,\n color: gridColor\n });\n elem.ticks = $.extend(true, {}, elem.ticks, {\n fontColor: labelColor\n });\n elem.scaleLabel = $.extend(true, {}, elem.scaleLabel, {\n fontColor: axisLabelColor\n });\n });\n }\n\n _computeAxisLabelColor(type) {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'axis-label'], 'fill').fill;\n }\n\n _adjustPluginColors(config) {\n if (!config || !config.type || !config.options || !config.options.plugins) {\n return;\n }\n\n this._adjustPluginsDatalabelColors(config);\n }\n\n _adjustPluginsDatalabelColors(config) {\n if (!config || !config.type || !config.options || !config.options.plugins || !config.options.plugins.datalabels) {\n return;\n }\n\n config.options.plugins.datalabels = $.extend(true, {}, config.options.plugins.datalabels, {\n color: this._computeDatalabelColor(config.type)\n });\n }\n\n _computeDatalabelColor(type) {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'datalabel'], 'fill').fill;\n }\n\n _adjustClickHandler(config) {\n if (!config || !config.options) {\n return;\n }\n\n if (config.options.clickable) {\n config.options.onClick = this._clickHandler;\n config.options.onHover = this._pointerHoverHandler;\n } else {\n config.options.onHover = this._hoverHandler;\n }\n\n if (!config.options.legend) {\n return;\n }\n\n if (config.options.legend.clickable) {\n config.options.legend.onClick = this._legendClickHandler;\n config.options.legend.onHover = this._legendPointerHoverHandler;\n config.options.legend.onLeave = this._legendPointerLeaveHandler;\n } else {\n config.options.legend.onClick = e => e.stopPropagation();\n config.options.legend.onHover = this._legendHoverHandler;\n config.options.legend.onLeave = this._legendLeaveHandler;\n }\n }\n\n /**\n * @param {object[]} items\n * @param {number} items._index\n * @param {number} items._datasetIndex\n */\n _onClick(event, items) {\n if (!items.length || this._isMaxSegmentsExceeded(this.chartJs.config, items[0]._index)) {\n return;\n }\n\n let itemIndex = items[0]._index,\n datasetIndex = items[0]._datasetIndex,\n clickObject = {\n datasetIndex: datasetIndex,\n dataIndex: itemIndex\n };\n if (this.chartJs.config.type === Chart.Type.BUBBLE) {\n let data = this.chartJs.config.data.datasets[datasetIndex].data[itemIndex];\n clickObject.xIndex = data.x;\n clickObject.yIndex = data.y;\n } else {\n clickObject.xIndex = itemIndex;\n }\n\n let e = new Event();\n e.data = clickObject;\n e.originalEvent = event;\n this.chart._onValueClick(e);\n }\n\n _onHover(event, items) {\n if (!this.chartJs.config || !this.chartJs.config.type) {\n return;\n }\n\n let config = this.chartJs.config,\n type = config.type;\n if (!scout.isOneOf(type, Chart.Type.LINE, Chart.Type.BAR, Chart.Type.RADAR)) {\n return;\n }\n\n let update = false;\n if (this.resetDatasetAfterHover) {\n this._adjustColors(config);\n this.resetDatasetAfterHover = false;\n update = true;\n }\n items.forEach(item => {\n let dataset = config.data.datasets[item._datasetIndex];\n if (scout.isOneOf((dataset.type || type), Chart.Type.LINE, Chart.Type.RADAR)) {\n dataset.backgroundColor = dataset.hoverBackgroundColor;\n this.resetDatasetAfterHover = true;\n update = true;\n }\n });\n if (update) {\n this.chartJs.update();\n }\n }\n\n _onHoverPointer(event, items) {\n this._onHover(event, items);\n if (items.length && !this._isMaxSegmentsExceeded(this.chartJs.config, items[0]._index)) {\n this.$canvas.css('cursor', 'pointer');\n } else {\n this.$canvas.css('cursor', 'default');\n }\n }\n\n _onLegendClick(event, item) {\n if (!this.chartJs.config || !this.chartJs.config.type) {\n return;\n }\n\n let type = this.chartJs.config.type,\n defaultTypeLegendClick;\n if (ChartJs.defaults[type] && ChartJs.defaults[type].legend) {\n defaultTypeLegendClick = ChartJs.defaults[type].legend.onClick;\n }\n let defaultLegendClick = defaultTypeLegendClick || ChartJs.defaults.global.legend.onClick;\n defaultLegendClick.call(this.chartJs, event, item);\n this._onLegendLeave(event, item);\n this._onLegendHoverPointer(event, item, true);\n }\n\n _onLegendHover(event, item, animated) {\n let index = item.datasetIndex,\n config = this.chartJs.config,\n type = config.type;\n if (scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n index = item.index;\n }\n\n if (this.legendHoverDatasets.indexOf(index) > -1) {\n return;\n }\n\n let dataset = config.data.datasets[index],\n datasetType = dataset ? dataset.type : null;\n if ((datasetType || type) === Chart.Type.LINE) {\n dataset.backgroundColor = dataset.hoverBackgroundColor;\n this.chartJs.update();\n }\n this._updateHoverStyle(index, true);\n if (animated) {\n this.chartJs.render();\n } else {\n this.chartJs.render({duration: 0});\n }\n this.legendHoverDatasets.push(index);\n }\n\n _onLegendHoverPointer(event, item, animated) {\n this._onLegendHover(event, item, animated);\n this.$canvas.css('cursor', 'pointer');\n }\n\n _onLegendLeave(event, item) {\n let index = item.datasetIndex,\n config = this.chartJs.config,\n type = config.type;\n if (scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n index = item.index;\n }\n\n if (this.legendHoverDatasets.indexOf(index) < 0) {\n return;\n }\n\n let dataset = config.data.datasets[index],\n datasetType = dataset ? dataset.type : null;\n if ((datasetType || type) === Chart.Type.LINE) {\n this._adjustColors(config);\n this.chartJs.update();\n }\n this._updateHoverStyle(index, false);\n this.chartJs.render();\n this.legendHoverDatasets.splice(this.legendHoverDatasets.indexOf(index), 1);\n }\n\n _onLegendLeavePointer(event, item) {\n this._onLegendLeave(event, item);\n this.$canvas.css('cursor', 'default');\n }\n\n _updateHoverStyle(index, enabled) {\n let config = this.chartJs.config,\n type = config.type,\n datasets = config.data.datasets,\n dataset = datasets ? datasets[index] : null,\n datasetType = dataset ? dataset.type : null;\n if ((datasetType || type) === Chart.Type.LINE) {\n this.chartJs.updateHoverStyle(this.chartJs.getDatasetMeta(index).data, 'point', enabled);\n } else if (scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n let elements = [];\n for (let i = 0; i < datasets.length; i++) {\n elements.push(this.chartJs.getDatasetMeta(i).data[index]);\n }\n this.chartJs.updateHoverStyle(elements, 'point', enabled);\n } else {\n let elements = this.chartJs.getDatasetMeta(index).data;\n if (elements && elements.length) {\n this.chartJs.updateHoverStyle(this.chartJs.getDatasetMeta(index).data, 'dataset', enabled);\n }\n }\n }\n\n _adjustResizeHandler(config) {\n if (!config || !config.options) {\n return;\n }\n\n if (config.options.handleResize) {\n config.options.onResize = this._resizeHandler;\n }\n }\n\n _onResize(chart, size) {\n chart.update();\n this._adjustSize(chart.config, chart.chartArea);\n }\n\n _adjustSize(config, chartArea) {\n this._adjustBubbleSizes(config, chartArea);\n this._adjustGridMaxMin(config, chartArea);\n }\n\n _adjustBubbleSizes(config, chartArea) {\n if (config.type !== Chart.Type.BUBBLE) {\n return;\n }\n\n let datasets = config.data.datasets;\n // Scale all bubbles so that the largest radius is equal to sizeOfLargestBubble and the smallest greater than or equal to minBubbleSize.\n // First reset all radii.\n datasets.forEach(dataset => dataset.data.forEach(data => {\n if (!isNaN(data.z)) {\n data.r = Math.sqrt(data.z);\n }\n }));\n let maxMinR = this._computeMaxMinValue(datasets, 'r', true),\n maxR = maxMinR.maxValue,\n minR = maxMinR.minValue,\n // Compute a scalingFactor and an offset to get the new radius newR = r * scalingFactor + offset.\n bubbleScalingFactor = 1,\n bubbleRadiusOffset = 0,\n sizeOfLargestBubble = config.bubble ? config.bubble.sizeOfLargestBubble : 0,\n minBubbleSize = config.bubble ? config.bubble.minBubbleSize : 0;\n if (sizeOfLargestBubble) {\n let width = Math.abs(chartArea.right - chartArea.left),\n height = Math.abs(chartArea.top - chartArea.bottom);\n sizeOfLargestBubble = Math.min(sizeOfLargestBubble, Math.floor(Math.min(width, height) / 6));\n if (maxR === 0) {\n // If maxR is equal to 0, all radii are equal to 0, therefore set bubbleRadiusOffset to sizeOfLargestBubble.\n bubbleRadiusOffset = sizeOfLargestBubble;\n } else if (minBubbleSize && sizeOfLargestBubble > minBubbleSize && (minR / maxR) < (minBubbleSize / sizeOfLargestBubble)) {\n // If minR/maxR is smaller than minBubbleSize/sizeOfLargestBubble, then it is not sufficient to scale all radii.\n\n // The scalingFactor and the result from the following two conditions:\n // (1) minBubbleSize = offset + scalingFactor * minR\n // (2) sizeOfLargestBubble = offset + scalingFactor * maxR\n\n // Therefore\n // (1*) offset = minBubbleSize - scalingFactor * minR\n // (2*) offset = sizeOfLargestBubble - scalingFactor * maxR\n\n // (1*) = (2*):\n // minBubbleSize - scalingFactor * minR = sizeOfLargestBubble - scalingFactor * maxR\n // <=> scalingFactor * maxR - scalingFactor * minR = sizeOfLargestBubble - minBubbleSize\n // <=> scalingFactor * (maxR - minR) = sizeOfLargestBubble - minBubbleSize\n // <=> scalingFactor = (sizeOfLargestBubble - minBubbleSize) / (maxR - minR)\n bubbleScalingFactor = (sizeOfLargestBubble - minBubbleSize) / (maxR - minR);\n bubbleRadiusOffset = minBubbleSize - bubbleScalingFactor * minR;\n } else {\n // Scaling is sufficient.\n bubbleScalingFactor = sizeOfLargestBubble / maxR;\n }\n } else if (minBubbleSize && minBubbleSize > minR) {\n // sizeOfLargestBubble is not set\n if (minR === 0) {\n // If the smallest radius equals 0 scaling will have no effect.\n bubbleRadiusOffset = minBubbleSize;\n } else {\n // Scaling is sufficient.\n bubbleScalingFactor = minBubbleSize / minR;\n }\n }\n datasets.forEach(dataset => dataset.data.forEach(data => {\n if (!objects.isNullOrUndefined(data.r)) {\n data.r = data.r * bubbleScalingFactor + bubbleRadiusOffset;\n }\n }));\n }\n\n _computeMaxMinValue(datasets, identifier, exact, boundRange, padding, space) {\n if (!datasets) {\n return;\n }\n\n let maxValue, minValue;\n for (let i = 0; i < datasets.length; i++) {\n for (let j = 0; j < datasets[i].data.length; j++) {\n let value;\n if (identifier) {\n value = datasets[i].data[j][identifier];\n } else {\n value = datasets[i].data[j];\n }\n if (isNaN(maxValue)) {\n maxValue = value;\n } else {\n maxValue = Math.max(value, maxValue);\n }\n if (isNaN(minValue)) {\n minValue = value;\n } else {\n minValue = Math.min(value, minValue);\n }\n }\n }\n\n if (isNaN(maxValue)) {\n maxValue = 0;\n }\n if (isNaN(minValue)) {\n minValue = 0;\n }\n\n let adjust = 0,\n maxBoundary = maxValue,\n minBoundary = minValue;\n\n if (!exact) {\n if (boundRange && Math.sign(minValue) === Math.sign(maxValue)) {\n adjust = Math.floor(minValue);\n }\n maxBoundary = this._calculateBoundary(maxValue - adjust, Math.ceil, Math.floor);\n minBoundary = this._calculateBoundary(minValue - adjust, Math.floor, Math.ceil);\n }\n\n if (padding && space && space > 2 * padding) {\n let valuePerPixel = (maxValue - minValue) / (space - 2 * padding),\n paddingValue = valuePerPixel * padding;\n maxBoundary = Math.max(maxBoundary, maxValue - adjust + paddingValue);\n minBoundary = Math.min(minBoundary, minValue - adjust - paddingValue);\n }\n\n if (!exact) {\n return {\n maxValue: maxBoundary + adjust,\n minValue: minBoundary + adjust\n };\n }\n\n return {\n maxValue: maxBoundary,\n minValue: minBoundary\n };\n }\n\n _calculateBoundary(value, roundingFunctionPositive, roundingFunctionNegative) {\n let roundingFunction = roundingFunctionPositive;\n let changeValueSign = false;\n if (value < 0) {\n changeValueSign = true;\n value = value * (-1);\n roundingFunction = roundingFunctionNegative;\n }\n value = this._calculateBoundaryPositive(value, roundingFunction);\n if (changeValueSign) {\n value = value * (-1);\n }\n return value;\n }\n\n _calculateBoundaryPositive(value, roundingFunction) {\n if (!(value > 0) || !roundingFunction) {\n return value;\n }\n // example: the value 32689 should be rounded to 30000 for the roundingFunction Math.floor or 35000 for Math.ceil or Math.round\n\n // first calculate the exponent p of the largest 1ep smaller than the given value\n // example: the largest 1ep smaller than the value 32689 is 10000 = 1e4 and therefore p = 4\n let p = Math.floor(Math.log(value) / Math.LN10);\n // divide by 5e(p-1), round and multiply with 5e(p-1) to round the value in 5e(p-1) steps\n // example: the value is now divided by 5e(p-1) which means 32689 / 5e(4-1) = 32689 / 5e3 = 32689 / 5000 = 6.5378\n // this result is now rounded (Math.floor gives 6, Math.ceil and Math.round gives 7) and multiplied again with 5000 which results in 30000 or 35000 respectively\n if (p < 0) {\n value = roundingFunction(value * Math.pow(10, Math.abs(p)) / 5) * 5 / Math.pow(10, Math.abs(p));\n } else {\n value = roundingFunction(value / (5 * Math.pow(10, p - 1))) * 5 * Math.pow(10, p - 1);\n }\n return value;\n }\n\n _adjustGridMaxMin(config, chartArea) {\n if (!config || !config.type || !config.options || !config.options.adjustGridMaxMin || (!config.options.scale && !config.options.scales) || !chartArea) {\n return;\n }\n\n let type = config.type;\n if (!scout.isOneOf(type, Chart.Type.BAR, Chart.Type.BAR_HORIZONTAL, Chart.Type.LINE, Chart.Type.POLAR_AREA, Chart.Type.RADAR, Chart.Type.BUBBLE)) {\n return;\n }\n\n let width = Math.abs(chartArea.right - chartArea.left),\n height = Math.abs(chartArea.top - chartArea.bottom),\n maxXTicks = Math.max(Math.floor(width / this.minSpaceBetweenXTicks), 3),\n maxYTicks = Math.max(Math.floor(height / this.minSpaceBetweenYTicks), 3);\n\n let yBoundaries = this._computeYBoundaries(config, height),\n yBoundary = yBoundaries.yBoundary,\n yBoundaryDiffType = yBoundaries.yBoundaryDiffType;\n\n if (config.options.scale) {\n this._adjustScaleMaxMin(config.options.scale, maxYTicks, yBoundary);\n return;\n }\n\n let xAxes = config.options.scales.xAxes,\n yAxes = config.options.scales.yAxes;\n\n if (yBoundaryDiffType) {\n this._adjustAxes(arrays.ensure(yAxes[0]), maxYTicks, yBoundary);\n this._adjustAxes(arrays.ensure(yAxes[1]), maxYTicks, yBoundaryDiffType);\n } else if (type === Chart.Type.BAR_HORIZONTAL) {\n this._adjustAxes(xAxes, maxXTicks, yBoundary);\n } else {\n this._adjustAxes(yAxes, maxYTicks, yBoundary);\n }\n\n if (type !== Chart.Type.BUBBLE) {\n return;\n }\n\n let xBoundary = this._computeXBoundaryBubble(config, width);\n this._adjustAxes(xAxes, maxXTicks, xBoundary);\n }\n\n _computeBoundaryBubble(config, identifier, space) {\n if (!config || !config.type || config.type !== Chart.Type.BUBBLE || !config.data || !config.options || !config.options.scales || !(identifier === 'x' || identifier === 'y') || !space) {\n return;\n }\n\n let datasets = config.data.datasets,\n axes = config.options.scales[identifier + 'Axes'],\n axis = (axes && axes.length) ? axes[0] : null,\n offset = axis && axis.offset,\n labelMap = config.options.scales[identifier + 'LabelMap'],\n boundary;\n\n let maxR = this._computeMaxMinValue(datasets, 'r', true).maxValue,\n padding = maxR;\n if (config.options.elements && config.options.elements.point && config.options.elements.point.hoverRadius) {\n padding = padding + config.options.elements.point.hoverRadius;\n }\n\n if (offset) {\n boundary = this._computeMaxMinValue(datasets, identifier, labelMap, true);\n } else {\n boundary = this._computeMaxMinValue(datasets, identifier, labelMap, true, padding, space);\n }\n if (labelMap) {\n boundary.maxValue = Math.ceil(boundary.maxValue);\n boundary.minValue = Math.floor(boundary.minValue);\n }\n return boundary;\n }\n\n _computeXBoundaryBubble(config, width) {\n return this._computeBoundaryBubble(config, 'x', width);\n }\n\n _computeYBoundaryBubble(config, height) {\n return this._computeBoundaryBubble(config, 'y', height);\n }\n\n _computeYBoundaries(config, height) {\n if (!config || !config.type) {\n return {};\n }\n\n let type = config.type,\n yBoundary,\n yBoundaryDiffType;\n\n if (type === Chart.Type.BUBBLE) {\n yBoundary = this._computeYBoundaryBubble(config, height);\n } else {\n let datasets = [],\n datasetsDiffType = [];\n if (config.data && config.data.datasets) {\n config.data.datasets.forEach(dataset => {\n if (dataset.type && dataset.type !== type) {\n datasetsDiffType.push(dataset);\n } else {\n datasets.push(dataset);\n }\n });\n }\n\n yBoundary = this._computeMaxMinValue(datasets);\n\n if (datasets.length && datasetsDiffType.length) {\n yBoundaryDiffType = this._computeMaxMinValue(datasetsDiffType);\n let yBoundaryRange = yBoundary.maxValue - yBoundary.minValue,\n yBoundaryRangeDiffType = yBoundaryDiffType.maxValue - yBoundaryDiffType.minValue;\n if (yBoundaryRange && yBoundaryRangeDiffType && (yBoundaryRange / yBoundaryRangeDiffType > 10 || yBoundaryRangeDiffType / yBoundaryRange > 10)) {\n this._adjustYAxisDiffType(config, datasets, datasetsDiffType);\n }\n }\n }\n\n return {\n yBoundary: yBoundary,\n yBoundaryDiffType: yBoundaryDiffType\n };\n }\n\n _adjustYAxisDiffType(config, datasets, datasetsDiffType) {\n if (!config || !config.type || !datasets || !datasets.length || !datasetsDiffType || !datasetsDiffType.length) {\n return;\n }\n\n if (!config.options || !config.options.scales || !config.options.scales.yAxes || config.options.scales.yAxes.length !== 1) {\n return;\n }\n\n let type = config.type,\n scales = config.options.scales,\n yAxis = scales.yAxes[0],\n yAxisDiffType = $.extend(true, {}, yAxis);\n scales.yAxes.push(yAxisDiffType);\n\n yAxis.id = 'yAxis';\n yAxisDiffType.id = 'yAxisDiffType';\n\n if (config.data && config.data.datasets && config.data.datasets.length && config.data.datasets[0].type && config.data.datasets[0].type !== type) {\n yAxisDiffType.position = Chart.Position.LEFT;\n yAxis.position = Chart.Position.RIGHT;\n yAxis.gridLines.drawOnChartArea = false;\n } else {\n yAxis.position = Chart.Position.LEFT;\n yAxisDiffType.position = Chart.Position.RIGHT;\n yAxisDiffType.gridLines.drawOnChartArea = false;\n }\n\n yAxis.gridLines.drawBorder = true;\n yAxis.gridLines.drawTicks = true;\n yAxisDiffType.gridLines.drawBorder = true;\n yAxisDiffType.gridLines.drawTicks = true;\n\n let yAxisType = (datasets[0].type || type),\n yAxisDiffTypeType = (datasetsDiffType[0].type || type),\n yAxisTypeLabel = this.chart.session.text('ui.' + yAxisType),\n yAxisDiffTypeTypeLabel = this.chart.session.text('ui.' + yAxisDiffTypeType),\n yAxisScaleLabel = scales.scaleLabelByTypeMap ? scales.scaleLabelByTypeMap[yAxisType] : null,\n yAxisDiffTypeScaleLabel = scales.scaleLabelByTypeMap ? scales.scaleLabelByTypeMap[yAxisDiffTypeType] : null;\n\n yAxis.scaleLabel.display = true;\n yAxis.scaleLabel.labelString = yAxisScaleLabel ? yAxisScaleLabel + ' (' + yAxisTypeLabel + ')' : yAxisTypeLabel;\n yAxisDiffType.scaleLabel.display = true;\n yAxisDiffType.scaleLabel.labelString = yAxisDiffTypeScaleLabel ? yAxisDiffTypeScaleLabel + ' (' + yAxisDiffTypeTypeLabel + ')' : yAxisDiffTypeTypeLabel;\n\n datasets.forEach(dataset => {\n dataset.yAxisID = 'yAxis';\n });\n datasetsDiffType.forEach(dataset => {\n dataset.yAxisID = 'yAxisDiffType';\n });\n }\n\n _adjustScaleMaxMin(scale, maxTicks, maxMinValue) {\n scale.ticks = $.extend(true, {}, scale.ticks, {\n maxTicksLimit: Math.ceil(maxTicks / 2),\n stepSize: (this.onlyIntegers ? 1 : undefined)\n });\n if (maxMinValue) {\n scale.ticks.suggestedMax = maxMinValue.maxValue;\n scale.ticks.suggestedMin = maxMinValue.minValue;\n }\n }\n\n _adjustAxes(axes, maxTicks, maxMinValue) {\n if (!axes || !Array.isArray(axes) || !axes.length) {\n return;\n }\n\n for (let i = 0; i < axes.length; i++) {\n axes[i].ticks = $.extend(true, {}, axes[i].ticks, {\n maxTicksLimit: maxTicks,\n stepSize: (this.onlyIntegers ? 1 : undefined)\n });\n if (maxMinValue) {\n axes[i].ticks.suggestedMax = maxMinValue.maxValue;\n axes[i].ticks.suggestedMin = maxMinValue.minValue;\n }\n }\n }\n\n _remove(afterRemoveFunc) {\n if (this.rendered) {\n this.$canvas.remove();\n this.$canvas = null;\n this.chartJs.destroy();\n this.chartJs = null;\n }\n super._remove(afterRemoveFunc);\n }\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {App, Device} from '@eclipse-scout/core';\nimport ChartJs from 'chart.js';\n\nChartJs.defaults.global.plugins.tooltipDelay = {\n showTooltipDelay: 700,\n resetTooltipDelay: 200\n};\n\nlet pluginId = 'tooltipDelay';\n\n/**\n * copied from chart.js core_plugins.notify\n */\nlet _notifyOthers = (chart, hook, args) => {\n // <customized>\n let descriptors = chart.$plugins.descriptors;\n // </customized>\n let ilen = descriptors.length;\n let i, descriptor, plugin, params, method;\n\n for (i = 0; i < ilen; ++i) {\n descriptor = descriptors[i];\n plugin = descriptor.plugin;\n // <customized>\n if (plugin.id === pluginId) {\n continue;\n }\n // </customized>\n method = plugin[hook];\n if (typeof method === 'function') {\n params = [chart].concat(args || []);\n params.push(descriptor.options);\n if (method.apply(plugin, params) === false) {\n return false;\n }\n }\n }\n\n return true;\n};\n\n/**\n * copied from chart.js _drawTooltip\n */\nlet _drawTooltip = (chart, args) => {\n // <customized>\n if (!chart.ctx) {\n return;\n }\n let tooltip = chart.tooltip;\n\n if (_notifyOthers(chart, 'beforeTooltipDraw', [args]) === false) {\n // </customized>\n return;\n }\n\n tooltip.draw();\n\n // <customized>\n _notifyOthers(chart, 'afterTooltipDraw', [args]);\n // </customized>\n};\n\n/**\n * @typedef IPlugin\n */\n\n/**\n * @type IPlugin\n */\nexport default class ChartJsTooltipDelay {\n constructor() {\n this.id = pluginId;\n this._chartTooltipVisible = false;\n this._chartTooltipShowTimeoutIds = []; // timeoutIds\n this._chartTooltipHideTimeoutIds = []; // timeoutIds\n }\n\n beforeTooltipDraw(chart, args, options) {\n let tooltip = chart.tooltip,\n showTooltipDelay = options.showTooltipDelay,\n resetTooltipDelay = options.resetTooltipDelay;\n\n if ((tooltip._active || []).length) {\n if (!this._chartTooltipVisible) {\n this._chartTooltipShowTimeoutIds.push(setTimeout(() => {\n this._chartTooltipShowTimeoutIds = [];\n this._chartTooltipVisible = true;\n _drawTooltip(chart, args);\n }, showTooltipDelay));\n } else {\n this._chartTooltipHideTimeoutIds.forEach(tid => clearTimeout(tid));\n this._chartTooltipHideTimeoutIds = [];\n _drawTooltip(chart, args);\n }\n } else {\n if (this._chartTooltipVisible) {\n this._chartTooltipHideTimeoutIds.push(setTimeout(() => {\n this._chartTooltipHideTimeoutIds = [];\n this._chartTooltipVisible = false;\n }, resetTooltipDelay));\n _drawTooltip(chart, args);\n } else {\n this._chartTooltipShowTimeoutIds.forEach(tid => clearTimeout(tid));\n this._chartTooltipShowTimeoutIds = [];\n }\n }\n\n return false;\n }\n}\n\nApp.addListener('init', () => {\n if (!Device.get().supportsOnlyTouch()) {\n ChartJs.plugins.register(new ChartJsTooltipDelay());\n }\n});\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {AbstractLayout} from '@eclipse-scout/core';\nimport {Chart} from '../index';\n\nexport default class ChartLayout extends AbstractLayout {\n\n constructor(chart) {\n super();\n this.chart = chart;\n }\n\n layout($container) {\n let opts = {\n requestAnimation: true,\n debounce: Chart.DEFAULT_DEBOUNCE_TIMEOUT,\n onlyUpdateData: true\n };\n // Don't request animations when the session is not ready or the chart was already updated once\n if (!this.chart.session.ready || this.chart.updatedOnce) {\n opts.requestAnimation = false;\n }\n // Don't debounce while session is not yet ready. Otherwise, it might happen that the area to layout is not\n // attached anymore because some other view tab is in front when the setTimeout() functions is finally called.\n if (!this.chart.session.ready) {\n opts.debounce = false;\n }\n this.chart.updateChart(opts);\n }\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {objects, scout} from '@eclipse-scout/core';\nimport {AbstractSvgChartRenderer} from '../index';\nimport $ from 'jquery';\n\nexport default class FulfillmentChartRenderer extends AbstractSvgChartRenderer {\n\n constructor(chart) {\n super(chart);\n\n this.animationTriggered = false;\n this.r;\n\n this.segmentSelectorForAnimation = '.fulfillment-chart';\n this.suppressLegendBox = true;\n\n let defaultConfig = {\n fulfillment: {\n startValue: undefined\n }\n };\n chart.config = $.extend(true, {}, defaultConfig, chart.config);\n }\n\n _validate() {\n let chartValueGroups = this.chart.data.chartValueGroups;\n if (chartValueGroups.length !== 2 ||\n chartValueGroups[0].values.length !== 1 ||\n chartValueGroups[1].values.length !== 1) {\n return false;\n }\n return true;\n }\n\n _renderInternal() {\n // Calculate percentage\n let chartData = this.chart.data;\n let value = chartData.chartValueGroups[0].values[0];\n let total = chartData.chartValueGroups[1].values[0];\n\n this.fullR = (Math.min(this.chartBox.height, this.chartBox.width) / 2) - 2;\n\n this._renderInnerCircle();\n this._renderPercentage(value, total);\n }\n\n _renderPercentage(value, total) {\n // arc segment\n let arcClass = 'fulfillment-chart',\n color = this.chart.data.chartValueGroups[0].colorHexValue,\n chartGroupCss = this.chart.data.chartValueGroups[0].cssClass;\n\n if (this.chart.config.options.autoColor) {\n arcClass += ' auto-color';\n } else if (chartGroupCss) {\n arcClass += ' ' + chartGroupCss;\n }\n\n let startValue = scout.nvl(this.chart.config.fulfillment.startValue, 0);\n let end = 0;\n let lastEnd = 0;\n if (total) {\n // use slightly less than 1.0 as max value because otherwise, the SVG element would not be drawn correctly.\n end = Math.min(value / total, 0.999999);\n lastEnd = Math.min(startValue / total, 0.999999);\n }\n this.r = this.fullR;\n\n let that = this;\n let tweenInFunc = function(now, fx) {\n let $this = $(this);\n let start = $this.data('animation-start'),\n end = $this.data('animation-end');\n $this.attr('d', that.pathSegment(start * fx.pos, lastEnd + (end - lastEnd) * fx.pos));\n };\n\n let $arc = this.$svg.appendSVG('path', arcClass)\n .data('animation-start', 0)\n .data('animation-end', end);\n\n let radius2 = (this.fullR / 8) * 6.7;\n let $transparentCircle = this._renderCirclePath('fulfillment-chart-inner-circle-transparent', 'InnerCircle3', radius2);\n $transparentCircle.css('fill', this.firstOpaqueBackgroundColor);\n\n // Label\n let percentage = (total ? Math.round((value / total) * 100) : 0);\n let $label = this.$svg.appendSVG('text', 'fulfillment-chart-label ')\n .attr('x', this.chartBox.mX())\n .attr('y', this.chartBox.mY())\n .css('font-size', (this.fullR / 2) + 'px') // font of label in center relative to circle radius\n .attr('dy', '0.3em') // workaround for 'dominant-baseline: central' which is not supported in IE\n .attrXLINK('href', '#InnerCircle')\n .text(percentage + '%');\n\n if (this.chart.config.options.clickable) {\n $arc.on('click', this._createClickObject(null, null), this.chart._onValueClick.bind(this.chart));\n }\n if (!this.chart.config.options.autoColor && !chartGroupCss) {\n $arc.attr('fill', color);\n }\n if (this.animationDuration) {\n $arc\n .attr('d', this.pathSegment(0, lastEnd))\n .animate({\n tabIndex: 0\n }, this._createAnimationObjectWithTabIndexRemoval(tweenInFunc, this.animationDuration));\n\n $label\n .attr('opacity', 0)\n .animateSVG('opacity', 1, this.animationDuration, null, true);\n } else {\n $arc.attr('d', this.pathSegment(0, end));\n }\n }\n\n pathSegment(start, end) {\n let s = start * 2 * Math.PI,\n e = end * 2 * Math.PI,\n pathString = '';\n\n pathString += 'M' + (this.chartBox.mX() + this.r * Math.sin(s)) + ',' + (this.chartBox.mY() - this.r * Math.cos(s));\n pathString += 'A' + this.r + ', ' + this.r;\n pathString += (end - start < 0.5) ? ' 0 0,1 ' : ' 0 1,1 ';\n pathString += (this.chartBox.mX() + this.r * Math.sin(e)) + ',' + (this.chartBox.mY() - this.r * Math.cos(e));\n pathString += 'L' + this.chartBox.mX() + ',' + this.chartBox.mY() + 'Z';\n\n return pathString;\n }\n\n _renderCirclePath(cssClass, id, radius) {\n let chartGroupCss = this.chart.data.chartValueGroups[0].cssClass;\n let color = this.chart.data.chartValueGroups[1].colorHexValue;\n\n if (this.chart.config.options.autoColor) {\n cssClass += ' auto-color';\n } else if (chartGroupCss) {\n cssClass += ' ' + chartGroupCss;\n }\n\n let radius2 = radius * 2;\n let $path = this.$svg.appendSVG('path', cssClass)\n .attr('id', id)\n .attr('d', 'M ' + this.chartBox.mX() + ' ' + this.chartBox.mY() +\n ' m 0, ' + (-radius) +\n ' a ' + radius + ',' + radius + ' 0 1, 1 0,' + radius2 +\n ' a ' + radius + ',' + radius + ' 0 1, 1 0,' + (-radius2));\n\n if (!this.chart.config.options.autoColor && !chartGroupCss) {\n $path\n .attr('fill', color)\n .attr('stroke', color);\n }\n\n return $path;\n }\n\n _renderInnerCircle() {\n let radius = (this.fullR / 8) * 7.5,\n radius2 = (this.fullR / 8) * 7.2;\n\n this._renderCirclePath('fulfillment-chart-inner-circle', 'InnerCircle', radius);\n let $transparentCircle = this._renderCirclePath('fulfillment-chart-inner-circle-transparent', 'InnerCircle2', radius2);\n $transparentCircle.css('fill', this.firstOpaqueBackgroundColor);\n }\n\n /**\n * Do not animate the removal of the chart if the chart data has been updated and the startValue option is set.\n * If startValue is not set use default implementation.\n */\n shouldAnimateRemoveOnUpdate(opts) {\n let startValue = objects.optProperty(this.chart, 'config', 'fulfillment', 'startValue');\n if (!objects.isNullOrUndefined(startValue)) {\n return false;\n }\n\n return super.shouldAnimateRemoveOnUpdate(opts);\n }\n\n _removeAnimated(afterRemoveFunc) {\n if (this.animationTriggered) {\n return;\n }\n let that = this;\n let tweenOut = function(now, fx) {\n let $this = $(this);\n let start = $this.data('animation-start'),\n end = $this.data('animation-end');\n $this.attr('d', that.pathSegment(start * (1 - fx.pos), end * (1 - fx.pos)));\n };\n\n this.animationTriggered = true;\n this.$svg.children(this.segmentSelectorForAnimation)\n .animate({\n tabIndex: 0\n }, this._createAnimationObjectWithTabIndexRemoval(tweenOut))\n .promise()\n .done(() => {\n this._remove(afterRemoveFunc);\n this.animationTriggered = false;\n });\n }\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {strings} from '@eclipse-scout/core';\nimport {AbstractSvgChartRenderer} from '../index';\nimport $ from 'jquery';\n\nexport default class SalesfunnelChartRenderer extends AbstractSvgChartRenderer {\n\n constructor(chart) {\n super(chart);\n\n this.segmentSelectorForAnimation = '.salesfunnel-chart-bar';\n this.widthThresholdMedium = 400;\n this.widthThresholdSmall = 200;\n // Constants for \"normalized mode\"\n // Width of a bar is calculated by multiplying this value with the previous bar's width\n this.barDeltaPercentage = 0.95;\n // Factor to be multiplied with the last bar's width. This will create a funnel effect, because\n // the last bar is considerably smaller than the other bars.\n this.lastBarAdditionalPercentage = 0.7;\n // Percentage of the total width the last bar always has (delta might get smaller due to this constraint).\n this.lastBarMinWidthPercentage = 0.4;\n this.suppressLegendBox = true;\n\n let defaultConfig = {\n salesfunnel: {\n normalized: undefined,\n calcConversionRate: undefined\n }\n };\n chart.config = $.extend(true, {}, defaultConfig, chart.config);\n }\n\n _validate() {\n let chartData = this.chart.data;\n let chartConfig = this.chart.config;\n if (!chartData ||\n !chartConfig ||\n chartData.axes.length !== chartData.chartValueGroups.length ||\n chartData.chartValueGroups.length === 0 ||\n chartData.chartValueGroups[0].values.length === 0 ||\n chartConfig.salesfunnel.normalized === undefined ||\n chartConfig.salesfunnel.calcConversionRate === undefined) {\n return false;\n }\n return true;\n }\n\n _renderInternal() {\n let chartData = this.chart.data,\n bars = chartData.chartValueGroups.length;\n\n this.conversionRateWidth = this._dynamicConversionRateWidth();\n this.dataAnalyzeResult = this._analyzeData(chartData.chartValueGroups);\n this.paddingBetweenLabel = 20;\n this.barHeight = this.chartBox.height / bars;\n this.barAreaHeight = this.barHeight * bars;\n this.barAreaWidth = this.chartBox.width -\n this.dataAnalyzeResult.maxLengthFirstValueRow -\n (this.paddingBetweenLabel * this.dataAnalyzeResult.labelCount) -\n this.dataAnalyzeResult.maxLengthSecondValueRow -\n this.conversionRateWidth;\n this.centerX = this.barAreaWidth / 2;\n\n if (this.chart.config.salesfunnel.normalized) {\n this._renderBarsNormalized(chartData.chartValueGroups);\n } else {\n this._renderBarsAccordingToValues(chartData.chartValueGroups);\n }\n\n this._addClipping('salesfunnel-chart-bar');\n }\n\n _renderBarsNormalized(chartValueGroups) {\n let barCount = chartValueGroups.length;\n let startPointX = this.barAreaWidth +\n this.dataAnalyzeResult.maxLengthFirstValueRow +\n this.dataAnalyzeResult.maxLengthSecondValueRow +\n (this.paddingBetweenLabel * (this.dataAnalyzeResult.labelCount + 1));\n\n let delta = this.barAreaWidth * (1 - this.barDeltaPercentage);\n let minLastWidth = this.barAreaWidth * this.lastBarMinWidthPercentage;\n let secondLastWidth = minLastWidth / this.lastBarAdditionalPercentage;\n delta = Math.min(delta, (this.barAreaWidth - secondLastWidth) / (barCount - 1));\n\n for (let i = 0; i < barCount; i++) {\n let width = this.barAreaWidth - (i * delta),\n barLabel = chartValueGroups[i].groupName,\n widthBottom = this.barAreaWidth - ((i + 1) * delta),\n yCoord = i * this.barHeight;\n\n let renderPolyOptions = {\n xStart: this.centerX,\n yStart: yCoord,\n rect: true,\n width: width,\n widthBottom: widthBottom,\n cssClass: 'salesfunnel-chart-bar',\n fill: chartValueGroups[i].colorHexValue,\n label: chartValueGroups[i].groupName,\n clickObject: this._createClickObject(null, i)\n };\n\n if (this.chart.config.options.autoColor) {\n renderPolyOptions.cssClass += ' auto-color color0';\n } else if (this.chart.data.chartValueGroups[i].cssClass) {\n renderPolyOptions.cssClass += ' ' + this.chart.data.chartValueGroups[i].cssClass;\n }\n\n // Adjust last widths to look like funnel.\n if (i === barCount - 1) {\n renderPolyOptions.width = renderPolyOptions.width * this.lastBarAdditionalPercentage;\n renderPolyOptions.widthBottom = renderPolyOptions.widthBottom * this.lastBarAdditionalPercentage;\n }\n\n this._renderPolygon(renderPolyOptions);\n this._renderLabel(chartValueGroups[i].values[0], false, i);\n this._renderBarLabel(barLabel, i, renderPolyOptions.widthBottom);\n let labelLineWidth = this.dataAnalyzeResult.maxLengthFirstValueRow + this.paddingBetweenLabel;\n if (chartValueGroups[i].values.length > 1) {\n this._renderLabel(chartValueGroups[i].values[1], true, i);\n labelLineWidth += this.dataAnalyzeResult.maxLengthSecondValueRow + this.paddingBetweenLabel;\n }\n if (i > 0) {\n this._renderLabelSeparatorLine(yCoord, labelLineWidth);\n if (this.chart.config.salesfunnel.calcConversionRate) {\n this._renderConversionRate(i, startPointX, this._calcConversionRate(chartValueGroups[i - 1].values[0], chartValueGroups[i].values[0]));\n }\n }\n }\n }\n\n _renderLabel(label, secondLabel, barIndexFromTop) {\n if (label === null) {\n return;\n }\n let y = (barIndexFromTop * this.barHeight) + (this.barHeight / 2),\n labelOffset = this.dataAnalyzeResult.maxLengthFirstValueRow + (secondLabel ? this.dataAnalyzeResult.maxLengthSecondValueRow : 0),\n labelIndex = secondLabel ? 2 : 1,\n x = this.barAreaWidth + labelOffset + (labelIndex * this.paddingBetweenLabel),\n labelClass = this._dynamicCssClass('salesfunnel-label');\n\n let $label = this.$svg.appendSVG('text', labelClass)\n .attr('x', x)\n .attr('y', y)\n .text(this.session.locale.decimalFormat.format(label));\n if (this.animationDuration) {\n $label\n .attr('opacity', 0)\n .animateSVG('opacity', 1, this.animationDuration, null, true);\n }\n if (this.chart.config.options.tooltips.enabled && this.chart.data.axes.length > 0) {\n let desc = this.chart.data.axes[barIndexFromTop][secondLabel ? 1 : 0].label,\n textBoundings = this._measureText(label, labelClass);\n this._renderWireLabels(desc, $label, x - textBoundings.width / 2, y - textBoundings.height);\n }\n }\n\n _renderWireLabels(label, $text, x1, y1) {\n let legendPositions = {\n x1: x1,\n x2: x1 - 10,\n y1: y1,\n y2: y1 - 10,\n v: -1,\n h: -1\n };\n // calculate opening direction\n let labelPositionFunc = (labelWidth, labelHeight) => {\n if (legendPositions.y2 - labelHeight < 0) {\n legendPositions.v = 1;\n legendPositions.y1 = legendPositions.y1 + labelHeight * 1.5;\n legendPositions.y2 = legendPositions.y1 + 10;\n }\n return legendPositions;\n };\n\n legendPositions.autoPosition = true;\n legendPositions.posFunc = labelPositionFunc;\n let\n legend = this._renderWireLegend(label, legendPositions, 'line-chart-wire-label', 'wire-label-line-white', false),\n mouseIn = legend.attachFunc.bind(legend),\n mouseOut = legend.detachFunc.bind(legend);\n legend.detachFunc();\n $text.mouseenter(mouseIn)\n .mouseleave(mouseOut);\n }\n\n _renderBarLabel(label, barIndexFromTop, barWidth) {\n let y = (barIndexFromTop * this.barHeight) + (this.barHeight / 2),\n x = this.centerX,\n labelClass = this._dynamicCssClass('salesfunnel-bar-label');\n\n this._renderLineLabel(x, y, label, labelClass, true);\n }\n\n _renderConversionRate(barIndexFromTop, startPointX, conversionRate) {\n if (conversionRate === undefined) {\n return;\n }\n let ctrlY = barIndexFromTop * this.barHeight,\n labelRenderPointY = ctrlY,\n labelClass = this._dynamicCssClass('salesfunnel-conversionrate-label');\n\n let $label = this.$svg.appendSVG('text', labelClass)\n .attr('x', startPointX)\n .attr('y', labelRenderPointY)\n .text('↓ ' + conversionRate + '%');\n if (this.animationDuration) {\n $label\n .attr('opacity', 0)\n .animateSVG('opacity', 1, this.animationDuration, null, true);\n }\n }\n\n _renderPolygon(renderPolyOptions) {\n let that = this,\n points = this._calcPolygonPoints(true, this.animationDuration ? 0 : 1, renderPolyOptions.xStart, renderPolyOptions.yStart, renderPolyOptions.width, renderPolyOptions.widthBottom, this.barHeight - 1);\n\n let $poly = this.$svg.appendSVG('polygon', renderPolyOptions.cssClass, '', renderPolyOptions.id)\n .attr('points', points)\n .attr('opacity', renderPolyOptions.opacity)\n .data('xStart', renderPolyOptions.xStart)\n .data('yStart', renderPolyOptions.yStart)\n .data('widthBar', renderPolyOptions.width)\n .data('widthBottom', renderPolyOptions.widthBottom)\n .data('heightBar', this.barHeight);\n if (!this.chart.config.options.autoColor && renderPolyOptions.fill) {\n $poly.attr('fill', renderPolyOptions.fill);\n }\n $poly.css('stroke', this.firstOpaqueBackgroundColor);\n\n let expandFunc = function(now, fx) {\n let $this = $(this);\n let xStart = $this.data('xStart'),\n yStart = $this.data('yStart'),\n width = $this.data('widthBar'),\n height = $this.data('heightBar'),\n widthBottom = $this.data('widthBottom');\n $this.attr('points', that._calcPolygonPoints(true, fx.pos, xStart, yStart, width, widthBottom, height));\n };\n\n if (this.animationDuration) {\n $poly.animate({\n tabIndex: 0\n }, this._createAnimationObjectWithTabIndexRemoval(expandFunc, this.animationDuration));\n }\n if (this.chart.config.options.clickable) {\n $poly.on('click', renderPolyOptions.clickObject, this.chart._onValueClick.bind(this.chart));\n }\n if (renderPolyOptions.fill) {\n $poly.attr('fill', renderPolyOptions.fill);\n }\n\n return $poly;\n }\n\n _calcPolygonPoints(expand, fxPos, xStart, yStart, width, widthBottom, height) {\n let xOffsetTop = 0,\n xOffsetBottom = 0;\n if (expand) {\n xOffsetTop = width / 2 * fxPos;\n xOffsetBottom = widthBottom / 2 * fxPos;\n } else {\n xOffsetTop = (width / 2) - (width / 2 * fxPos);\n xOffsetBottom = (widthBottom / 2) - (widthBottom / 2 * fxPos);\n }\n let x1 = xStart - xOffsetTop,\n y1 = yStart,\n x2 = xStart + xOffsetTop,\n y2 = y1,\n x3 = xStart + xOffsetBottom,\n y3 = yStart + height,\n x4 = xStart - xOffsetBottom,\n y4 = y3;\n return x1 + ',' + y1 + ' ' + x2 + ',' + y2 + ' ' + x3 + ',' + y3 + ' ' + x4 + ',' + y4 + ' ';\n }\n\n _renderBarsAccordingToValues(chartValueGroups) {\n let widthPerN = (this.dataAnalyzeResult.maxValue ? this.barAreaWidth * 0.8 / this.dataAnalyzeResult.maxValue : 0),\n startPointX = this.barAreaWidth + this.dataAnalyzeResult.maxLengthFirstValueRow + this.dataAnalyzeResult.maxLengthSecondValueRow + this.paddingBetweenLabel * this.dataAnalyzeResult.labelCount + 2 * this.paddingBetweenLabel,\n barCount = chartValueGroups.length;\n\n for (let i = 0; i < barCount; i++) {\n let width = chartValueGroups[i].values[0] * widthPerN + this.barAreaWidth * 0.2,\n barLabel = chartValueGroups[i].groupName,\n yCoord = i * this.barHeight;\n\n let renderPolyOptions = {\n xStart: this.centerX,\n yStart: yCoord,\n rect: true,\n width: width,\n widthBottom: width,\n cssClass: 'salesfunnel-chart-bar',\n fill: chartValueGroups[i].colorHexValue,\n label: chartValueGroups[i].groupName,\n clickObject: this._createClickObject(null, i)\n };\n\n if (this.chart.config.options.autoColor) {\n renderPolyOptions.cssClass += ' auto-color color0';\n } else if (this.chart.data.chartValueGroups[i].cssClass) {\n renderPolyOptions.cssClass += ' ' + this.chart.data.chartValueGroups[i].cssClass;\n }\n\n this._renderPolygon(renderPolyOptions);\n this._renderLabel(chartValueGroups[i].values[0], false, i);\n this._renderBarLabel(barLabel, i, renderPolyOptions.widthBottom);\n let labelLineWidth = this.dataAnalyzeResult.maxLengthFirstValueRow + this.paddingBetweenLabel;\n if (chartValueGroups[i].values.length > 1) {\n this._renderLabel(chartValueGroups[i].values[1], true, i);\n labelLineWidth += this.dataAnalyzeResult.maxLengthSecondValueRow + this.paddingBetweenLabel;\n }\n if (i > 0) {\n this._renderLabelSeparatorLine(yCoord, labelLineWidth);\n if (this.chart.config.salesfunnel.calcConversionRate) {\n this._renderConversionRate(i, startPointX, this._calcConversionRate(chartValueGroups[i - 1].values[0], chartValueGroups[i].values[0]));\n }\n }\n }\n }\n\n _renderLabelSeparatorLine(yCoord, labelLineWidth) {\n let $line = this.$svg.appendSVG('line', 'label-separator')\n .attr('x1', this.barAreaWidth + this.paddingBetweenLabel)\n .attr('y1', yCoord)\n .attr('x2', this.barAreaWidth + labelLineWidth)\n .attr('y2', yCoord);\n if (this.animationDuration) {\n $line\n .attr('opacity', 0)\n .animateSVG('opacity', 1, this.animationDuration, null, true);\n }\n }\n\n _calcConversionRate(valueBefore, value) {\n let returnValue = 0;\n if (valueBefore === 0) {\n returnValue = undefined;\n } else if (value !== valueBefore) {\n returnValue = Math.round(value / valueBefore * 100);\n }\n return returnValue;\n }\n\n _analyzeData(valueGroups) {\n let result = {\n labelCount: 0,\n maxValue: null,\n maxLengthFirstValueRow: 0,\n maxLengthSecondValueRow: 0\n },\n labelClass = this._dynamicCssClass('salesfunnel-label');\n\n for (let i = 0; i < valueGroups.length; i++) {\n\n let valueGroup = valueGroups[i];\n result.labelCount = Math.max(result.labelCount, valueGroup.values.length);\n // only first value is relevant for bar\n if (valueGroup.values.length > 0 && valueGroup.values[0]) {\n if (result.maxValue === null) {\n result.maxValue = valueGroup.values[0];\n } else {\n result.maxValue = Math.max(result.maxValue, valueGroup.values[0]);\n }\n result.maxLengthFirstValueRow = Math.max(result.maxLengthFirstValueRow, this._measureText(this.session.locale.decimalFormat.format(valueGroup.values[0]), labelClass).width);\n }\n if (valueGroup.values.length > 1 && valueGroup.values[1]) {\n result.maxLengthSecondValueRow = Math.max(result.maxLengthSecondValueRow, this._measureText(this.session.locale.decimalFormat.format(valueGroup.values[1]), labelClass).width);\n }\n }\n return result;\n }\n\n _removeAnimated(afterRemoveFunc) {\n if (this.animationTriggered) {\n return;\n }\n this.animationTriggered = true;\n let that = this,\n shrink = function(now, fx) {\n let $this = $(this);\n let xStart = $this.data('xStart'),\n yStart = $this.data('yStart'),\n width = $this.data('widthBar'),\n height = $this.data('heightBar'),\n widthBottom = $this.data('widthBottom');\n $this.attr('points', that._calcPolygonPoints(false, fx.pos, xStart, yStart, width, widthBottom, height));\n };\n this.$svg.children(this.segmentSelectorForAnimation).animate({\n tabIndex: 0\n }, this._createAnimationObjectWithTabIndexRemoval(shrink))\n .promise()\n .done(() => {\n this._remove(afterRemoveFunc);\n this.animationTriggered = false;\n });\n }\n\n _dynamicCssClass(cssClass) {\n let small = '';\n if (this.chartBox.width <= this.widthThresholdSmall) {\n small = 'small';\n } else if (this.chartBox.width <= this.widthThresholdMedium) {\n small = 'medium';\n }\n return strings.join(' ', cssClass, small);\n }\n\n _dynamicConversionRateWidth() {\n if (!this.chart.config.salesfunnel.calcConversionRate) {\n return 0; // don't show conversion rate\n }\n if (this.chartBox.width <= this.widthThresholdSmall) {\n return 60;\n }\n if (this.chartBox.width <= this.widthThresholdMedium) {\n return 80;\n }\n return 100;\n }\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {numbers, RoundingMode} from '@eclipse-scout/core';\nimport {AbstractSvgChartRenderer} from '../index';\n\nexport default class SpeedoChartRenderer extends AbstractSvgChartRenderer {\n\n constructor(chart) {\n super(chart);\n this.segmentSelectorForAnimation = '.pointer';\n this.suppressLegendBox = true;\n\n let defaultConfig = {\n speedo: {\n greenAreaPosition: undefined\n }\n };\n chart.config = $.extend(true, {}, defaultConfig, chart.config);\n }\n\n static Position = {\n LEFT: 'left',\n CENTER: 'center',\n RIGHT: 'right'\n };\n\n static NUM_PARTS_GREEN_CENTER = 7;\n static NUM_PARTS_GREEN_EDGE = 4;\n\n static ONE_THOUSAND = 1000;\n static TEN_THOUSAND = 10000;\n static ONE_MILLION = 1000000;\n\n static ARC_MIN = -0.25;\n static ARC_MAX = 0.25;\n static ARC_RANGE = SpeedoChartRenderer.ARC_MAX - SpeedoChartRenderer.ARC_MIN;\n\n static SEGMENT_GAP = 0.0103; // space between two segments (lines)\n\n _validate() {\n let chartData = this.chart.data;\n let chartConfig = this.chart.config;\n if (!chartData ||\n !chartConfig ||\n chartData.axes.length > 0 ||\n chartData.chartValueGroups.length !== 1 ||\n chartData.chartValueGroups[0].values.length !== 3 ||\n chartConfig.speedo.greenAreaPosition === undefined) {\n return false;\n }\n return true;\n }\n\n _renderInternal() {\n let chartData = this.chart.data,\n minValue = chartData.chartValueGroups[0].values[0],\n maxValue = chartData.chartValueGroups[0].values[2],\n value = chartData.chartValueGroups[0].values[1];\n\n // radius of the scale\n this.r = Math.min(this.chartBox.height, this.chartBox.width / 2) * 0.7;\n\n // width (thickness) of the scale\n this.scaleWeight = this.r * 0.27;\n\n this.my = this.chartBox.yOffset + this.chartBox.height - (this.chartBox.height - this.r * 1.12) / 2;\n\n // number of parts in the scale\n this.parts = this.chart.config.speedo.greenAreaPosition === SpeedoChartRenderer.Position.CENTER ?\n SpeedoChartRenderer.NUM_PARTS_GREEN_CENTER : SpeedoChartRenderer.NUM_PARTS_GREEN_EDGE;\n\n // number of lines per part\n this.numSegmentsPerPart = this.parts === SpeedoChartRenderer.NUM_PARTS_GREEN_CENTER ? 5 : 8;\n\n // to remember 'filled' parts\n this.$filledParts = [];\n\n let numTotalSegments = this.parts * this.numSegmentsPerPart; // total number of lines in the whole chart (all colors)\n let numTotalGaps = numTotalSegments - 1;\n\n // width of one segment (line)\n this.segmentWidth = (SpeedoChartRenderer.ARC_RANGE - (numTotalGaps * SpeedoChartRenderer.SEGMENT_GAP)) / numTotalSegments;\n\n // width of one segment including the gap to the next segment.\n this.widthOfSegmentWithGap = this.segmentWidth + SpeedoChartRenderer.SEGMENT_GAP;\n\n // pointer value in range [0,1]\n let valuePercentage = this._limitValue((value - minValue) / (maxValue - minValue), 1);\n\n // value in the range [0,1] rounded to one segment\n let segmentToPointAt = Math.round(valuePercentage * numTotalGaps);\n\n // value rounded to the closest segment so that the pointer never stays \"in between\" two segments but always on a segment\n let valuePercentageRounded = this._getPercentageValueOfSegment(segmentToPointAt % this.numSegmentsPerPart,\n this._getPartForValue(valuePercentage));\n\n for (let i = 0; i < this.parts; i++) {\n this._renderCirclePart(i);\n }\n\n this._renderPointer(valuePercentageRounded);\n this._renderLegend(minValue, value, maxValue, chartData.chartValueGroups[0].groupName);\n\n this.$svg.addClass('speedo-chart-svg');\n if (this.chart.config.options.clickable) {\n this.$svg.on('click', this._createClickObject(null, null), this.chart._onValueClick.bind(this.chart));\n }\n }\n\n _limitValue(value, maxValue) {\n value = Math.max(value, 0); // cannot be < 0\n value = Math.min(value, maxValue); // cannot be > maxValue\n return value;\n }\n\n /**\n * Gets the percentage value in range [0,1] of the specified segment.\n */\n _getPercentageValueOfSegment(segmentIndexInPart, part) {\n // get the segment position\n let pointerRange = this._calcSegmentPos(segmentIndexInPart, part);\n\n // calculate the center position in the Arc range [0, 0.5] of the segment\n let pointerPos = pointerRange.from - SpeedoChartRenderer.ARC_MIN + ((pointerRange.to - pointerRange.from) / 2);\n\n // calculate the percentage value of the center of the segment in range [0,1]\n return this._limitValue(pointerPos / SpeedoChartRenderer.ARC_RANGE, 1);\n }\n\n /**\n * Renders the pointer line and registers animation to move the pointer and the corresponding filling of the segments\n */\n _renderPointer(valuePercentage) {\n this.$pointer = this.$svg.appendSVG('path', 'pointer')\n .attr('d', this._pathPointer(0))\n .attr('data-end', valuePercentage)\n .attr('stroke-width', (this.scaleWeight / 6) + 'px') // width of the pointer bar depends on size of chart\n .attr('fill', 'none');\n\n if (this.animationDuration) {\n let that = this;\n let tweenIn = function(now, fx) {\n let val = this.getAttribute('data-end') * fx.pos;\n that._updatePointer(val);\n that._updatePartsFill(val);\n };\n\n this.$pointer\n .animate({\n tabIndex: 0\n }, this._createAnimationObjectWithTabIndexRemoval(tweenIn, this.animationDuration));\n } else {\n this._updatePointer(valuePercentage);\n this._updatePartsFill(valuePercentage);\n }\n }\n\n /**\n * renders a single segment line.\n */\n _renderSegment(from, to, colorClass) {\n return this.$svg.appendSVG('path', 'speedo-chart-arc ' + colorClass)\n .attr('id', 'ArcAxisWide' + this.chart.id)\n .attr('fill', 'none')\n .attr('stroke-width', this.scaleWeight + 'px')\n .attr('d', this._pathSegment(from, to));\n }\n\n _renderCirclePart(part) {\n let colorClass = this._getColorForPart(part);\n // render 'empty' segments\n for (let i = 0; i < this.numSegmentsPerPart; i++) {\n let segPos = this._calcSegmentPos(i, part);\n this._renderSegment(segPos.from, segPos.to, colorClass);\n }\n\n // render and remember 'filled' segments (not visible by default).\n this.$filledParts.push(this._renderSegment(SpeedoChartRenderer.ARC_MIN, SpeedoChartRenderer.ARC_MIN, colorClass)); // 'filled' segments. invisible by default\n }\n\n _renderLegend(minValue, value, maxValue, groupName) {\n let minMaxLegendFontSize = this.scaleWeight * 0.8,\n padding = 5, // same as in AbstractChartRenderer#_renderWireLegend\n labelYPos = this.my + padding,\n labelMinMaxYPos = labelYPos + minMaxLegendFontSize * 0.8,\n positions = {\n x1: null,\n x2: this.chartBox.mX() - padding,\n y1: null,\n y2: labelYPos,\n v: -1,\n h: 1\n },\n minLegendValue = minValue ? this._formatValue(minValue) : 0,\n legendValue = value ? this._formatValue(value) : 0,\n maxLegendValue = maxValue ? this._formatValue(maxValue) : 0;\n\n // tooltips for min/max value\n if (this.chart.config.options.tooltips.enabled) {\n // min value\n let $minLegend = this.$svg.appendSVG('text', 'line-label line-chart-wire-label')\n .attr('x', this.chartBox.mX() - this.r)\n .attr('y', labelMinMaxYPos)\n .text(minLegendValue)\n .attr('style', 'font-size: ' + minMaxLegendFontSize + 'px; text-anchor: middle');\n\n // max value\n let $maxLegend = this.$svg.appendSVG('text', 'line-label line-chart-wire-label')\n .attr('x', this.chartBox.mX() + this.r)\n .attr('y', labelMinMaxYPos)\n .text(maxLegendValue)\n .attr('style', 'font-size: ' + minMaxLegendFontSize + 'px; text-anchor: middle');\n\n let mouseIn = function() {\n this.$svg.append($minLegend);\n this.$svg.append($maxLegend);\n }.bind(this);\n let mouseOut = () => {\n $minLegend.detach();\n $maxLegend.detach();\n };\n mouseOut();\n this.$svg\n .mouseenter(mouseIn)\n .mouseleave(mouseOut);\n }\n\n // actual value\n if (this.chart.config.options.legend.display) {\n this._renderLineLabel(positions.x2 + padding, positions.y2 + positions.v * padding, legendValue, '', false)\n .addClass('speedo-chart-label')\n .attr('style', 'font-size: ' + this.scaleWeight * 1.55 + 'px;');\n }\n }\n\n /**\n * returns the part index for the specified valuePercentage. The valuePercentage must be in the range [0,1].\n */\n _getPartForValue(valuePercentage) {\n let part = Math.floor(valuePercentage * this.parts);\n return this._limitValue(part, this.parts - 1);\n }\n\n /**\n * Formats the speedo-values in a compact way:\n * 0 - 999: as is\n * 1 to 9'999: as is, with grouping separators\n * 10 to 999 thousand: 123k\n * >= 1 million: millions with max. two fraction digits -> 1.23M\n */\n _formatValue(value) {\n if (value < SpeedoChartRenderer.TEN_THOUSAND) {\n return this.session.locale.decimalFormat.format(value);\n }\n if (value < SpeedoChartRenderer.ONE_MILLION) {\n return Math.floor(value / SpeedoChartRenderer.ONE_THOUSAND) + 'k';\n }\n let millions = value / SpeedoChartRenderer.ONE_MILLION;\n millions = numbers.round(millions, RoundingMode.HALF_UP, 2);\n return this.session.locale.decimalFormat.format(millions) + 'M';\n }\n\n /**\n * Updates the pointer position to point to the specified valuePercentage in range [0,1].\n */\n _updatePointer(valuePercentage) {\n this.$pointer\n .attr('d', this._pathPointer(valuePercentage))\n .removeClass('red yellow light-green dark-green')\n .addClass(this._getColorForPart(this._getPartForValue(valuePercentage)));\n }\n\n /**\n * Updates the filling of the 'filled' segments to be filled up to the specified valuePercentage in range [0,1].\n */\n _updatePartsFill(valuePercentage) {\n let from, to;\n for (let part = 0; part < this.$filledParts.length; part++) {\n from = this._calcSegmentPos(0, part, this.segmentWidth).from;\n if ((part + 1) / this.parts < valuePercentage) {\n // the current part is smaller than the value: completely filled part\n to = this._calcSegmentPos(this.numSegmentsPerPart - 1, part, this.segmentWidth).to;\n } else if (part / this.parts > valuePercentage) {\n // the current part is bigger than the speedo-value: hide element\n from = SpeedoChartRenderer.ARC_MIN;\n to = SpeedoChartRenderer.ARC_MIN;\n } else {\n // the value is within the current part\n to = (SpeedoChartRenderer.ARC_RANGE * valuePercentage) - SpeedoChartRenderer.ARC_MAX; // fill part exactly to the value\n }\n this.$filledParts[part].attr('d', this._pathSegment(from, to));\n }\n }\n\n /**\n * Calculates the positions (from, to) of a single segment line.\n * @param segmentIndexInPart the index of the segment line within the part.\n * @param part the part index.\n */\n _calcSegmentPos(segmentIndexInPart, part) {\n let result = {\n from: 0,\n to: 0\n };\n let segmentNum = segmentIndexInPart + part * this.numSegmentsPerPart;\n result.from = segmentNum * this.widthOfSegmentWithGap - SpeedoChartRenderer.ARC_MAX;\n result.to = result.from + this.segmentWidth;\n return result;\n }\n\n _getColorForPart(part) {\n let position = this.chart.config.speedo.greenAreaPosition;\n switch (position) {\n case SpeedoChartRenderer.Position.LEFT:\n // only four parts\n if (part === 0) {\n return 'dark-green';\n } else if (part === 1) {\n return 'light-green';\n } else if (part === 2) {\n return 'yellow';\n } else if (part === 3) {\n return 'red';\n }\n break;\n case SpeedoChartRenderer.Position.RIGHT:\n // only four parts\n if (part === 0) {\n return 'red';\n } else if (part === 1) {\n return 'yellow';\n } else if (part === 2) {\n return 'light-green';\n } else if (part === 3) {\n return 'dark-green';\n }\n break;\n case SpeedoChartRenderer.Position.CENTER:\n if (part === 0) {\n return 'red';\n } else if (part === 1) {\n return 'yellow';\n } else if (part === 2) {\n return 'light-green';\n } else if (part === 3) {\n return 'dark-green';\n } else if (part === 4) {\n return 'light-green';\n } else if (part === 5) {\n return 'yellow';\n } else if (part === 6) {\n return 'red';\n }\n break;\n default:\n break;\n }\n }\n\n /**\n * calculates the path-values to be used in the 'd' attribute of the path tag for a segment.\n */\n _pathSegment(start, end) {\n let s = start * 2 * Math.PI,\n e = end * 2 * Math.PI,\n pathString = '';\n\n pathString += 'M ' + (this.chartBox.mX() + this.r * Math.sin(s)) + ' ' + (this.my - this.r * Math.cos(s)) + ' ';\n // http://www.w3.org/TR/SVG/paths.html#PathDataEllipticalArcCommands\n // A rx ry\n // x-axis-rotation large-arc-flag sweep-flag\n // x y\n pathString += 'A ' + this.r + ' ' + this.r + ' ';\n pathString += '0 ' + (end - start < 0.5 ? '0' : '1') + ' 1 ';\n pathString += (this.chartBox.mX() + this.r * Math.sin(e)) + ' ' + (this.my - this.r * Math.cos(e));\n\n return pathString;\n }\n\n /**\n * calculates the path-values to be used in the 'd' attribute of the path tag for the pointer\n */\n _pathPointer(valuePercentage) {\n let point = SpeedoChartRenderer.ARC_RANGE * valuePercentage - SpeedoChartRenderer.ARC_MAX;\n let s = point * 2 * Math.PI,\n pointerOuterR = this.r - (1.4 * this.scaleWeight),\n pointerInnerR = this.r + (1.37 * this.scaleWeight),\n pathString = '';\n\n pathString += 'M ' + (this.chartBox.mX() + pointerInnerR * Math.sin(s)) + ' ' + (this.my - pointerInnerR * Math.cos(s)) + ' ';\n pathString += 'L ' + (this.chartBox.mX() + pointerOuterR * Math.sin(s)) + ' ' + (this.my - pointerOuterR * Math.cos(s)) + ' ';\n pathString += 'Z';\n return pathString;\n }\n\n /**\n * @override\n */\n _removeAnimated(afterRemoveFunc) {\n if (this.animationTriggered) {\n return;\n }\n let that = this,\n tweenOut = function(now, fx) {\n let val = this.getAttribute('data-end') * (1 - fx.pos);\n that._updatePointer(val);\n that._updatePartsFill(val);\n };\n\n this.animationTriggered = true;\n this.$svg.children(this.segmentSelectorForAnimation)\n .animate({\n tabIndex: 0\n }, this._createAnimationObjectWithTabIndexRemoval(tweenOut))\n .promise()\n .done(() => {\n this._remove(afterRemoveFunc);\n this.animationTriggered = false;\n });\n }\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {Device} from '@eclipse-scout/core';\n\n// place venn 3 by simulation\n// find angle and distance (to a) and radius where \"error\" is minimal\nexport default class VennAsync3Calculator {\n\n constructor(helper, venn1, venn2, venn3, u, v, w, uv, uw, vw, uvw, d12, d13, d23) {\n // if circles are empty, they are drawn as small circle, so: adjust u v w to find better errors\n if (u === 0 && uv === 0 && uw === 0 && uvw === 0) {\n u = 1;\n }\n if (v === 0 && uv === 0 && vw === 0 && uvw === 0) {\n v = 1;\n }\n if (w === 0 && uw === 0 && vw === 0 && uvw === 0) {\n w = 1;\n }\n\n this.helper = helper;\n this.venn1 = venn1;\n this.venn2 = venn2;\n this.venn3 = venn3;\n this.u = u;\n this.v = v;\n this.w = w;\n this.uv = uv;\n this.uw = uw;\n this.vw = vw;\n this.uvw = uvw;\n\n // step and ranges for loops\n this.maxD = this.venn1.r + 2 * this.venn2.r + 2 * this.venn1.r + this.helper.distR;\n this.dStep = this.maxD / 30;\n this.rStep = venn3.r / 4;\n this.alphaStep = Math.PI / 30;\n\n // best vars (initialize with 0 so the optimizer knows that they are numbers)\n this.alphaBest = 0;\n this.dBest = 0;\n this.rBest = 0;\n this.errorBest = 0;\n\n this.callback = null;\n this.cancelled = false;\n }\n\n start(callback) {\n this.callback = callback;\n setTimeout(this._next.bind(this, 0));\n }\n\n cancel() {\n this.cancelled = true;\n }\n\n _end() {\n // set x and y and r of venn3\n this.venn3.x = this.venn1.x + this.dBest * Math.cos(this.alphaBest);\n this.venn3.y = this.venn1.y - this.dBest * Math.sin(this.alphaBest);\n this.venn3.r = this.rBest;\n\n this.callback();\n }\n\n _next(alpha) {\n if (!this.cancelled) {\n // iterate\n this._iteration(alpha);\n }\n if (this.cancelled) {\n return; // stop loop if interrupted\n }\n\n alpha += this.alphaStep;\n if (alpha < Math.PI) {\n // schedule next loop iteration\n setTimeout(this._next.bind(this, alpha));\n } else {\n // end loop\n this._end();\n }\n }\n\n _iteration(alpha) {\n // optimize speed: no var lookup (should help the optimizer in general, and IE in particular)\n let maxD = this.maxD,\n dStep = this.dStep,\n minR = this.helper.minR,\n rStep = this.rStep,\n total = this.helper.total,\n x1 = this.venn1.x,\n y1 = this.venn1.y,\n r1 = this.venn1.r,\n x2 = this.venn2.x,\n y2 = this.venn2.y,\n r2 = this.venn2.r,\n r3 = this.venn3.r,\n u = this.u,\n v = this.v,\n w = this.w,\n uv = this.uv,\n uw = this.uw,\n vw = this.vw,\n uvw = this.uvw,\n alphaBest = this.alphaBest,\n dBest = this.dBest,\n rBest = this.rBest,\n errorBest = this.errorBest;\n\n let stepFactor = 1;\n // sorry... ie is (verry, buggy) slow\n // TODO [15.4] bsh: find better solution for ie, or error calculation\n if (Device.get().isInternetExplorer()) {\n stepFactor = 5;\n }\n\n for (let d = 0; d < maxD; d += dStep) {\n // calc x, y\n let x = x1 + d * Math.cos(alpha);\n let y = y1 - d * Math.sin(alpha);\n\n for (let r = Math.max(minR, r3 * 0.75); r <= r3 * 1.25; r += rStep) {\n\n // find areas with monte carlo, do not laugh! i tried even this:\n // http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.507.1195&rep=rep1&type=pdf\n\n let minX = Math.min(x1 - r1, x2 - r2, x - r);\n let maxX = Math.max(x1 + r1, x2 + r2, x + r);\n let minY = Math.min(y1 - r1, y2 - r2, y - r);\n let maxY = Math.max(y1 + r1, y2 + r2, y + r);\n let stepX = (maxX - minX) / 100 * stepFactor;\n let stepY = (maxY - minY) / 100 * stepFactor;\n\n // areas of venn\n let a1 = 0,\n a2 = 0,\n a3 = 0,\n a12 = 0,\n a13 = 0,\n a23 = 0,\n a123 = 0;\n\n for (let testX = minX; testX < maxX; testX += stepX) {\n for (let testY = minY; testY < maxY; testY += stepY) {\n // optimize speed for ie: no function call\n let t1 = ((testX - x1) * (testX - x1) + (testY - y1) * (testY - y1)) < (r1 * r1);\n let t2 = ((testX - x2) * (testX - x2) + (testY - y2) * (testY - y2)) < (r2 * r2);\n let t3 = ((testX - x) * (testX - x) + (testY - y) * (testY - y)) < (r * r);\n\n // check if inside\n if (t1 && t2 && t3) {\n a123++;\n } else if (t1 && t2 && !t3) {\n a12++;\n } else if (t1 && !t2 && !t3) {\n a1++;\n } else if (!t1 && t2 && !t3) {\n a2++;\n } else if (t1 && !t2 && t3) {\n a13++;\n } else if (!t1 && t2 && t3) {\n a23++;\n } else if (!t1 && !t2 && t3) {\n a3++;\n }\n }\n }\n\n let aTotal = a1 + a2 + a3 + a12 + a13 + a23 + a123;\n\n // calc error\n let error = d / maxD;\n error += this._error(uvw, total, a123, aTotal);\n error += this._error(uv, total, a12, aTotal);\n error += this._error(uw, total, a13, aTotal);\n error += this._error(vw, total, a23, aTotal);\n error += this._error(u, total, a1, aTotal);\n error += this._error(v, total, a2, aTotal);\n error += this._error(w, total, a3, aTotal);\n\n // better than before?\n if (alpha === 0 || error < errorBest) {\n alphaBest = alpha;\n dBest = d;\n rBest = r;\n errorBest = error;\n }\n }\n }\n\n this.alphaBest = alphaBest;\n this.dBest = dBest;\n this.rBest = rBest;\n this.errorBest = errorBest;\n }\n\n _error(u, total, a, aTotal) {\n // be brutal if basic error\n if ((u === 0 && a !== 0) || (u !== 0 && a === 0)) {\n return 1000;\n }\n return Math.abs(u / total - a / aTotal) * 100;\n }\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {AbstractSvgChartRenderer, VennAsync3Calculator, VennCircle, VennCircleHelper} from '../index';\nimport $ from 'jquery';\n\nexport default class VennChartRenderer extends AbstractSvgChartRenderer {\n\n constructor(chart) {\n super(chart);\n this.animationTriggered = false;\n this.suppressLegendBox = true;\n\n let defaultConfig = {\n venn: {\n numberOfCircles: undefined\n }\n };\n chart.config = $.extend(true, {}, defaultConfig, chart.config);\n }\n\n _validate() {\n let chartData = this.chart.data;\n if (!chartData ||\n chartData.axes.length !== 0 ||\n chartData.chartValueGroups.length === 0 ||\n chartData.chartValueGroups[0].values.length === 0) {\n return false;\n }\n return true;\n }\n\n _renderInternal() {\n this.centerX = this.width / 2;\n this.centerY = this.height / 2;\n\n if (this.centerX === 0 || this.centerY === 0) {\n return false;\n }\n\n this.setLoading(true);\n\n // basic values\n this.data = this.chart.data.chartValueGroups;\n this.numberOfCircles = this.chart.config.venn.numberOfCircles;\n\n // render parameter\n let distR = 10,\n maxR = Math.min(this.centerX, this.centerY),\n minR = maxR / 15,\n total = this.data.reduce((s, e) => {\n return s + parseFloat(e.values[0]);\n }, 1);\n\n this.vennCircleHelper = new VennCircleHelper(distR, maxR, minR, total);\n\n // create svg elements and venns\n if (this.numberOfCircles > 0) {\n this.$v1 = this._createCircle(0, this.data[0].colorHexValue, this.data[0].cssClass);\n this.vennNumber1 = new VennCircle(this.$v1);\n this.vennReal1 = new VennCircle(this.$v1);\n }\n if (this.numberOfCircles > 1) {\n this.$v2 = this._createCircle(1, this.data[1].colorHexValue, this.data[1].cssClass);\n this.vennNumber2 = new VennCircle(this.$v2);\n this.vennReal2 = new VennCircle(this.$v2);\n }\n if (this.numberOfCircles > 2) {\n this.$v3 = this._createCircle(2, this.data[2].colorHexValue, this.data[2].cssClass);\n this.vennNumber3 = new VennCircle(this.$v3);\n this.vennReal3 = new VennCircle(this.$v3);\n }\n\n // Final callback\n let draw = function() {\n this.readyToDraw = true;\n this.setLoading(false);\n if (!this.$svg.isAttached()) {\n // user navigated away. do not try to render-> error\n return;\n }\n this.readyToDraw = false;\n this._draw(true, true);\n }.bind(this);\n\n // save callback if user navigated away while calculating and _draw is not executed.\n this.readyToDraw = false;\n\n // calc venns and set legend\n if (this.numberOfCircles === 1) {\n this._calc1(this.vennNumber1);\n this._calc1(this.vennReal1);\n draw();\n\n } else if (this.numberOfCircles === 2) {\n this._calc2(this.vennNumber1, this.vennNumber2, false);\n this._calc2(this.vennReal1, this.vennReal2, true);\n draw();\n\n } else if (this.numberOfCircles === 3) {\n this._calc3(this.vennNumber1, this.vennNumber2, this.vennNumber3, false, () => {\n if (this.rendering || this.rendered) {\n this._calc3(this.vennReal1, this.vennReal2, this.vennReal3, true, draw);\n }\n });\n }\n }\n\n checkCompletlyRendered() {\n if (this.readyToDraw) {\n this._draw(false, true);\n } else {\n super.checkCompletlyRendered();\n }\n }\n\n remove(requestAnimation, afterRemoveFunc) {\n this._cancelAsync3Calculator();\n this.setLoading(false);\n super.remove(requestAnimation, afterRemoveFunc);\n }\n\n setLoading(loading) {\n if (loading && !this.$loadingIndicator && this.chart && this.chart.rendered) {\n this.$loadingIndicator = this.chart.$container.appendDiv('venn-chart-loading-indicator');\n } else if (!loading && this.$loadingIndicator) {\n this.$loadingIndicator.remove();\n this.$loadingIndicator = null;\n }\n }\n\n // calculation\n\n _calc1(v1) {\n // set basic data\n let a = this.data[0].values[0];\n\n // calc sizes\n if (a > 0) {\n v1.r = this.vennCircleHelper.calcR(a, 0.8);\n } else {\n v1.r = this.vennCircleHelper.calcR(a, 0);\n }\n\n v1.x = 0;\n v1.y = 0;\n\n // place legend and label\n v1.setLegend(this.data[0].groupName, 1, -1);\n v1.addLabel(a, v1.x, v1.y);\n }\n\n _calc2(v1, v2, real) {\n // set basic data\n let a = this.data[0].values[0];\n let b = this.data[1].values[0];\n let ab = this.data[2].values[0];\n let d12;\n\n if (real) {\n // basics calculation\n v1.r = this.vennCircleHelper.calcR(a + ab, 0.8);\n v2.r = this.vennCircleHelper.calcR(b + ab, 0.8);\n d12 = this.vennCircleHelper.calcD(v1, v2, a, b, ab, true);\n\n // calc x\n v1.x = 0;\n v2.x = d12;\n } else {\n // eslint-disable-next-line no-multi-assign\n v1.r = v2.r = this.vennCircleHelper.calcR(-1, 0.7);\n v1.x = -v1.r * 0.6;\n v2.x = v2.r * 0.6;\n }\n\n // calc y ;)\n v1.y = 0;\n v2.y = 0;\n\n // balance circles\n this.vennCircleHelper.findBalance2(v1, v2);\n\n // prepare legend\n v1.setLegend(this.data[0].groupName, -1, -1);\n v2.setLegend(this.data[1].groupName, 1, -1);\n\n // draw labels, and fix legend\n if (real) {\n if (ab === 0) {\n v1.addLabel(a, v1.x, v1.y);\n v2.addLabel(b, v2.x, v2.y);\n } else if (a === 0 && b === 0) {\n v1.addLabel(ab, v1.x, v1.y);\n } else if (a === 0) {\n v2.addLabel(ab, v1.x, v1.y);\n v2.addLabel(b, v2.x - (d12 - v2.r - v1.r) / 2, v2.y);\n v1.legendR = v2.r - d12;\n } else if (b === 0) {\n v1.addLabel(ab, v2.x, v2.y);\n v1.addLabel(a, v1.x + (d12 - v2.r - v1.r) / 2, v1.y);\n v2.legendR = v1.r - d12;\n } else {\n v1.addLabel(a, v1.x + (d12 - v2.r - v1.r) / 2, v1.y);\n v1.addLabel(b, v2.x - (d12 - v2.r - v1.r) / 2, v2.y);\n v2.addLabel(ab, v1.x + v1.r + (d12 - v2.r - v1.r) / 2, v1.y);\n }\n } else {\n v1.addLabel(a, -v1.r * 0.9, 0);\n v1.addLabel(b, v1.r * 0.9, 0);\n v2.addLabel(ab, 0, 0);\n }\n }\n\n _calc3(v1, v2, v3, real, callback) {\n // set basic data\n let a = this.data[0].values[0];\n let b = this.data[1].values[0];\n let c = this.data[2].values[0];\n let ab = this.data[3].values[0];\n let ac = this.data[4].values[0];\n let bc = this.data[5].values[0];\n let abc = this.data[6].values[0];\n\n let d12, d13, d23;\n\n // calc sizes\n if (real) {\n // basics calculation\n v1.r = this.vennCircleHelper.calcR(a + ab + ac + abc, 0.55);\n v2.r = this.vennCircleHelper.calcR(b + ab + bc + abc, 0.55);\n v3.r = this.vennCircleHelper.calcR(c + ac + bc + abc, 0.55);\n\n // find distance between a; may reduce r\n d12 = this.vennCircleHelper.calcD(v1, v2, a + ac, b + bc, ab + abc, true);\n d13 = this.vennCircleHelper.calcD(v1, v3, a + ab, c + bc, ab + abc, false);\n d23 = this.vennCircleHelper.calcD(v2, v3, b + ab, c + ac, ab + abc, false);\n\n // find coordinates of a and b\n v1.x = 0;\n v2.x = d12;\n v3.x = d13;\n\n v1.y = 0;\n v2.y = 0;\n v3.y = 0;\n\n // c is much more difficult..., only changes v3\n this._cancelAsync3Calculator();\n this.async3Calculator = new VennAsync3Calculator(this.vennCircleHelper, v1, v2, v3, a, b, c, ab, ac, bc, abc, d12, d13, d23);\n this.async3Calculator.start(() => {\n this.async3Calculator = null;\n\n // balance circles\n this.vennCircleHelper.findBalance3(v1, v2, v3);\n\n // prepare legend\n v1.setLegend(this.data[0].groupName, -1, 1);\n v2.setLegend(this.data[1].groupName, 1, 1);\n v3.setLegend(this.data[2].groupName, 1, -1);\n\n callback();\n });\n\n } else {\n // draw label\n // eslint-disable-next-line no-multi-assign\n v1.r = v2.r = v3.r = this.vennCircleHelper.calcR(-1, 0.55);\n\n v1.x = -v1.r * 0.73;\n v2.x = v2.r * 0.73;\n v3.x = 0;\n\n v1.y = v1.r * 0.58;\n v2.y = v2.r * 0.58;\n v3.y = -v3.r * 0.58;\n\n // prepare legend\n v1.setLegend(this.data[0].groupName, -1, 1);\n v2.setLegend(this.data[1].groupName, 1, 1);\n v3.setLegend(this.data[2].groupName, 1, -1);\n\n v1.addLabel(a, -v1.r, v1.r * 0.76);\n v2.addLabel(b, v1.r, v1.r * 0.76);\n v3.addLabel(c, 0, -v1.r * 0.82);\n v1.addLabel(ab, 0, v1.r * 0.76);\n v1.addLabel(ac, -v1.r * 0.49, -v1.r * 0.05);\n v2.addLabel(bc, v1.r * 0.49, -v1.r * 0.05);\n v1.addLabel(abc, 0, v1.r * 0.22);\n\n callback();\n }\n }\n\n _cancelAsync3Calculator() {\n if (this.async3Calculator) {\n this.async3Calculator.cancel();\n this.async3Calculator = null;\n }\n }\n\n // drawing\n\n _draw(animated, real) {\n if (!this.rendered && !this.rendering) { // additional check, because this method might be called from a setTimeout()\n return;\n }\n\n if (this.animationTriggered) {\n return;\n }\n this.animationTriggered = true;\n\n // remove labels and legends\n let that = this;\n this.$svg.children('.venn-legend, .venn-label, .venn-axis-white, .label-line')\n .stop()\n .animateSVG('opacity', 1, 0, null, true)\n .promise()\n .done(function() {\n this.remove();\n that.animationTriggered = false;\n });\n\n // find venns we will update\n let showVenn = [];\n\n if (this.numberOfCircles > 0) {\n showVenn.push(real ? this.vennReal1 : this.vennNumber1);\n }\n\n if (this.numberOfCircles > 1) {\n showVenn.push(real ? this.vennReal2 : this.vennNumber2);\n }\n\n if (this.numberOfCircles > 2) {\n showVenn.push(real ? this.vennReal3 : this.vennNumber3);\n }\n\n // update venn and draw labels\n for (let i = 0; i < showVenn.length; i++) {\n let venn = showVenn[i];\n this._updateVenn(venn, animated);\n\n for (let j = 0; j < venn.labels.length; j++) {\n let label = venn.labels[j];\n this._drawLabel(label.text, label.x, label.y, animated);\n }\n }\n }\n\n // handling of circles\n _createCircle(circleIndex, color, cssClass) {\n let $circle = this.$svg.appendSVG('circle', 'venn-circle')\n .attr('cx', this.centerX)\n .attr('cy', this.centerY)\n .attr('r', 0)\n .on('mouseenter', {\n showReal: false\n }, this._show.bind(this))\n .on('mouseleave', {\n showReal: true\n }, this._show.bind(this));\n\n if (this.chart.config.options.autoColor) {\n $circle.addClass('auto-color color0');\n } else if (cssClass) {\n $circle.addClass(cssClass);\n } else {\n $circle.attr('fill', color);\n }\n\n if (this.chart.config.options.clickable) {\n $circle.on('click', this._createClickObject(null, circleIndex), this.chart._onValueClick.bind(this.chart));\n }\n\n return $circle;\n }\n\n // handling of venn, label and legend\n _updateVenn(venn, animated) {\n // move circle\n venn.$circle\n .animateSVG('cx', this.centerX + venn.x, animated ? this.animationDuration : 0, null, true)\n .animateSVG('cy', this.centerY + venn.y, animated ? this.animationDuration : 0, null, true)\n .animateSVG('r', venn.r, animated ? this.animationDuration : 0, null, true);\n\n // set up position legend\n let minR = this.vennCircleHelper.minR,\n x1 = this.centerX + venn.x + venn.legendH * Math.sin(Math.PI / 5) * venn.r,\n y1 = this.centerY + venn.y + venn.legendV * Math.cos(Math.PI / 5) * venn.r,\n x2 = this.centerX + venn.x + venn.legendH * Math.sin(Math.PI / 5) * (venn.legendR + minR * 1.5),\n y2 = this.centerY + venn.y + venn.legendV * Math.cos(Math.PI / 5) * (venn.legendR + minR * 1.5);\n\n let legendPositions = {\n x1: x1,\n x2: x2,\n y1: y1,\n y2: y2,\n v: venn.legendV,\n h: venn.legendH\n };\n\n this._renderWireLegend(venn.legend, legendPositions, 'venn-legend');\n }\n\n _drawLabel(text, dx, dy, animated) {\n // draw label\n let $label = this.$svg.appendSVG('text', 'venn-label')\n .attr('x', this.centerX + dx)\n .attr('y', this.centerY + dy)\n .text(text);\n\n // animate if needed\n if (animated && this.animationDuration) {\n $label\n .attr('opacity', 0)\n .animateSVG('opacity', 1, this.animationDuration, null, true);\n }\n }\n\n // handling of show/hide numbers\n _show(event) {\n if (this.numberOfCircles === 1) {\n return; // Nothing to do for only one circle\n }\n\n // target contains element that is entered, relatedTarget contains element that is left\n let toElement = (event.type === 'mouseenter' ? event.target : event.relatedTarget);\n\n // check if true enter or just from one circle to another\n let isCircle = toElement && $(toElement).hasClass('venn-circle');\n if (this.wasCircle && isCircle) {\n return false;\n }\n this.wasCircle = isCircle;\n\n // draw animated in every case\n this._draw(true, event.data.showReal);\n }\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\n// circle\n\nexport default class VennCircle {\n\n constructor($circle) {\n this.$circle = $circle;\n this.x;\n this.y;\n this.r;\n this.legend;\n this.legendR;\n this.legendH;\n this.legendV;\n this.labels = [];\n }\n\n setLegend(legend, horizontal, vertical, r) {\n this.legend = legend;\n this.legendH = horizontal;\n this.legendV = vertical;\n this.legendR = r || this.r;\n }\n\n addLabel(text, x, y) {\n this.labels.push({\n text: text,\n x: x,\n y: y\n });\n }\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nexport default class VennCircleHelper {\n\n constructor(distR, maxR, minR, total) {\n this.distR = distR;\n this.maxR = maxR;\n this.minR = minR;\n this.total = total;\n }\n\n findBalance2(venn1, venn2) {\n // find center\n let midX = (venn1.r * venn1.x + venn2.r * venn2.x) / (venn1.r + venn2.r);\n let midY = (venn1.r * venn1.y + venn2.r * venn2.y) / (venn1.r + venn2.r);\n\n // move to center\n venn1.x = venn1.x - midX;\n venn2.x = venn2.x - midX;\n\n venn1.y = venn1.y - midY;\n venn2.y = venn2.y - midY;\n }\n\n findBalance3(venn1, venn2, venn3) {\n // find center\n let midX = (venn1.r * venn1.x + venn2.r * venn2.x + venn3.r * venn3.x) / (venn1.r + venn2.r + venn3.r);\n let midY = (venn1.r * venn1.y + venn2.r * venn2.y + venn3.r * venn3.y) / (venn1.r + venn2.r + venn3.r);\n\n // move to center\n venn1.x = venn1.x - midX;\n venn2.x = venn2.x - midX;\n venn3.x = venn3.x - midX;\n\n venn1.y = venn1.y - midY;\n venn2.y = venn2.y - midY;\n venn3.y = venn3.y - midY;\n }\n\n calcR(count, factorMax) {\n if (count === -1) {\n return this.maxR * factorMax;\n }\n return Math.max(this.minR, Math.sqrt(count / this.total) * this.maxR * factorMax);\n }\n\n calcD(venn1, venn2, u, v, uv, changeR) {\n let ret;\n if (uv === 0) {\n // separated circles\n ret = venn1.r + venn2.r + this.distR * 2;\n\n } else if (u === 0 && v === 0) {\n // same circle\n ret = 0;\n\n } else if (u === 0) {\n // a part of b\n ret = Math.max(0, venn2.r - venn1.r - this.distR);\n\n // check if inner circle is to large\n if (ret < 1.5 * this.distR && changeR) {\n ret = 1.5 * this.distR;\n venn1.r = venn2.r - ret;\n }\n\n } else if (v === 0) {\n // b part of a\n ret = Math.max(0, venn1.r - venn2.r - this.distR);\n\n // check if inner circle is to large\n if (ret < 1.5 * this.distR && changeR) {\n ret = 1.5 * this.distR;\n venn2.r = venn1.r - ret;\n }\n\n } else {\n // this is pure magic ;) please do not touch!\n let ri = Math.min(venn1.r, venn2.r);\n let ra = Math.max(venn1.r, venn2.r);\n let q = Math.min(u, v) / (Math.min(u, v) + uv);\n\n // unfortunately, there is no closed solution for cricles, so handle as squares\n ret = 2 * q * ri - ri + ra;\n\n // check and fix\n ret = Math.max(3 * this.distR, ret);\n ret = Math.min(ri + ra - 3 * this.distR, ret);\n ret = Math.max(ra - ri + 3 * this.distR, ret);\n }\n\n return ret;\n }\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {FormField} from '@eclipse-scout/core';\n\nexport default class ChartField extends FormField {\n\n constructor() {\n super();\n this._addWidgetProperties(['chart']);\n }\n\n _render() {\n this.addContainer(this.$parent, 'chart-field');\n this.addLabel();\n this.addMandatoryIndicator();\n this.addStatus();\n this._renderChart();\n }\n\n _renderChart() {\n if (this.chart) {\n this.chart.render();\n this.addField(this.chart.$container);\n }\n }\n\n _removeChart() {\n this.chart.remove();\n this._removeField();\n }\n\n _renderOnAttach() {\n super._renderOnAttach();\n if (this.chart && this.chart.chartRenderer) {\n this.chart.chartRenderer.checkCompletlyRendered();\n }\n }\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {FormFieldAdapter} from '@eclipse-scout/core';\n\nexport default class ChartFieldAdapter extends FormFieldAdapter {\n\n constructor() {\n super();\n }\n\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nexport {default as Chart} from './chart/Chart';\nexport {default as ChartAdapter} from './chart/ChartAdapter';\nexport {default as ChartLayout} from './chart/ChartLayout';\nexport {default as AbstractChartRenderer} from './chart/AbstractChartRenderer';\nexport {default as AbstractSvgChartRenderer} from './chart/AbstractSvgChartRenderer';\nexport {default as ChartJsRenderer} from './chart/ChartJsRenderer';\nexport {default as FulfillmentChartRenderer} from './chart/FulfillmentChartRenderer';\nexport {default as SpeedoChartRenderer} from './chart/SpeedoChartRenderer';\nexport {default as SalesfunnelChartRenderer} from './chart/SalesfunnelChartRenderer';\nexport {default as VennAsync3Calculator} from './chart/VennAsync3Calculator';\nexport {default as VennCircleHelper} from './chart/VennCircleHelper';\nexport {default as VennChartRenderer} from './chart/VennChartRenderer';\nexport {default as VennCircle} from './chart/VennCircle';\nexport {default as ChartField} from './form/fields/chartfield/ChartField';\nexport {default as ChartFieldAdapter} from './form/fields/chartfield/ChartFieldAdapter';\nexport {default as ChartFieldTile} from './tile/ChartFieldTile';\nexport {default as ChartFieldTileAdapter} from './tile/ChartFieldTileAdapter';\nexport {default as ChartTableControl} from './table/controls/ChartTableControl';\nexport {default as ChartTableUserFilter} from './table/controls/ChartTableUserFilter';\nexport {default as ChartTableControlAdapter} from './table/controls/ChartTableControlAdapter';\nexport {default as ChartTableControlLayout} from './table/controls/ChartTableControlLayout';\n\nimport * as self from './index.js';\n\nexport default self;\nwindow.scout = Object.assign(window.scout || {}, self);\n","/*\n * Copyright (c) 2010-2021 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {arrays, DateColumn, icons, NumberColumn, objects, scout, strings, styles, TableControl, TableMatrix, tooltips} from '@eclipse-scout/core';\nimport {Chart, ChartTableControlLayout, ChartTableUserFilter} from '../../index';\nimport $ from 'jquery';\n\nexport default class ChartTableControl extends TableControl {\n\n constructor() {\n super();\n this.tooltipText = '${textKey:ui.Chart}';\n this.chartAggregation = {\n modifier: TableMatrix.NumberGroup.COUNT\n };\n this.chartType = Chart.Type.BAR;\n this.oldChartType = null;\n this.chartColorScheme = 'chart-table-control';\n\n // chart config selection\n this.$chartSelect = null;\n this.$xAxisSelect = null;\n this.$yAxisSelect = null;\n this.$dataSelect = null;\n\n this.xAxis = null;\n this.yAxis = null;\n\n this.dateGroup = null;\n\n this._tableUpdatedHandler = this._onTableUpdated.bind(this);\n this._tableColumnStructureChangedHandler = this._onTableColumnStructureChanged.bind(this);\n this._chartValueClickedHandler = this._onChartValueClick.bind(this);\n }\n\n static DATE_GROUP_FLAG = 0x100;\n static MAX_AXIS_COUNT = 100;\n\n _init(model) {\n super._init(model);\n this.table.on('columnStructureChanged', this._tableColumnStructureChangedHandler);\n\n this.chart = scout.create('Chart', {\n parent: this\n });\n }\n\n _destroy() {\n this.table.off('columnStructureChanged', this._tableColumnStructureChangedHandler);\n super._destroy();\n }\n\n _computeEnabled(inheritAccessibility, parentEnabled) {\n if (!this._hasColumns() && !this.selected) {\n return false;\n }\n return super._computeEnabled(inheritAccessibility, parentEnabled);\n }\n\n _renderChart() {\n if (this.chart) {\n this.chart.render(this.$contentContainer);\n this.chart.$container.addClass(this.denseClass);\n }\n }\n\n _createLayout() {\n return new ChartTableControlLayout(this);\n }\n\n _renderChartType() {\n this._selectChartType();\n if (this.oldChartType) {\n this.$yAxisSelect.animateAVCSD('width', this.chartType === Chart.Type.BUBBLE ? 175 : 0);\n this.$yAxisSelect.animateAVCSD('margin-right', this.chartType === Chart.Type.BUBBLE ? 15 : 0);\n } else {\n this.$yAxisSelect.css('width', this.chartType === Chart.Type.BUBBLE ? 175 : 0);\n this.$yAxisSelect.css('margin-right', this.chartType === Chart.Type.BUBBLE ? 15 : 0);\n }\n\n if (this.contentRendered) {\n this.chart.$container.animateAVCSD('opacity', 0, () => {\n this.chart.$container.css('opacity', 1);\n this._drawChart();\n });\n }\n }\n\n _selectChartType() {\n objects.values(this._chartTypeMap).forEach($element => {\n $element.removeClass('selected');\n });\n this._chartTypeMap[this.chartType].addClass('selected');\n }\n\n _renderChartGroup1() {\n this._renderChartGroup(1);\n }\n\n _renderChartGroup2() {\n this._renderChartGroup(2);\n }\n\n _renderChartGroup(groupId) {\n if (!this._hasColumns()) {\n return;\n }\n let groupName = 'chartGroup' + groupId;\n let map = '_' + groupName + 'Map';\n let chartGroup = this[groupName];\n if (chartGroup) {\n let $element = this[map][chartGroup.id];\n $element.siblings().animateAVCSD('height', 30);\n $element.selectOne('selected');\n\n if (chartGroup.modifier > 0) {\n let dateGroupIndex = chartGroup.modifier ^ ChartTableControl.DATE_GROUP_FLAG;\n $element.animateAVCSD('height', 42);\n $element.children('.select-axis-group').text(this.dateGroup[dateGroupIndex][1]);\n }\n if (this.contentRendered) {\n this._drawChart();\n }\n }\n }\n\n _renderChartAggregation() {\n let $element = this._aggregationMap[this.chartAggregation.id || 'all'];\n if ($element) {\n $element.selectOne('selected');\n $element\n .removeClass('data-sum')\n .removeClass('data-avg');\n $element.addClass(this._getAggregationCssClass());\n if (this.contentRendered) {\n this._drawChart();\n }\n }\n }\n\n _getAggregationCssClass() {\n switch (this.chartAggregation.modifier) {\n case TableMatrix.NumberGroup.COUNT:\n return 'data-count';\n case TableMatrix.NumberGroup.SUM:\n return 'data-sum';\n case TableMatrix.NumberGroup.AVG:\n return 'data-avg';\n default:\n return null;\n }\n }\n\n _renderChartSelect(cssClass, chartType, renderSvgIcon) {\n let $svg = this.$chartSelect\n .appendSVG('svg', cssClass + ' select-chart')\n .toggleClass('disabled', !this.enabledComputed || !this._hasColumns())\n .data('chartType', chartType);\n\n if (this.enabledComputed && this._hasColumns()) {\n $svg.on('click', this._onClickChartType.bind(this));\n }\n\n this._chartTypeMap[chartType] = $svg;\n\n renderSvgIcon($svg);\n }\n\n /**\n * Appends a chart selection divs to this.$contentContainer and sets the this.$chartSelect property.\n * */\n _renderChartSelectContainer() {\n // create container\n this.$chartSelect = this.$contentContainer.appendDiv('chart-select');\n\n // create chart types for selection\n this._chartTypeMap = {};\n\n let supportedChartTypes = this._getSupportedChartTypes();\n\n if (scout.isOneOf(Chart.Type.BAR, supportedChartTypes)) {\n this._renderChartSelect('chart-bar', Chart.Type.BAR, renderSvgIconBar);\n }\n if (scout.isOneOf(Chart.Type.BAR_HORIZONTAL, supportedChartTypes)) {\n this._renderChartSelect('chart-stacked', Chart.Type.BAR_HORIZONTAL, renderSvgIconStacked);\n }\n if (scout.isOneOf(Chart.Type.LINE, supportedChartTypes)) {\n this._renderChartSelect('chart-line', Chart.Type.LINE, renderSvgIconLine);\n }\n if (scout.isOneOf(Chart.Type.PIE, supportedChartTypes)) {\n this._renderChartSelect('chart-pie', Chart.Type.PIE, renderSvgIconPie.bind(this));\n }\n if (scout.isOneOf(Chart.Type.BUBBLE, supportedChartTypes)) {\n this._renderChartSelect('chart-bubble', Chart.Type.BUBBLE, renderSvgIconBubble);\n }\n\n function renderSvgIconBar($svg) {\n let show = [2, 4, 3, 3.5, 5];\n\n for (let s = 0; s < show.length; s++) {\n $svg.appendSVG('rect', 'select-fill')\n .attr('x', s * 13)\n .attr('y', 50 - show[s] * 9)\n .attr('width', 11)\n .attr('height', show[s] * 9);\n }\n }\n\n function renderSvgIconStacked($svg) {\n let show = [2, 4, 3.5, 4.5];\n\n for (let s = 0; s < show.length; s++) {\n $svg.appendSVG('rect', 'select-fill')\n .attr('x', 0)\n .attr('y', 16 + s * 9)\n .attr('width', show[s] * 14)\n .attr('height', 7);\n }\n }\n\n function renderSvgIconLine($svg) {\n let show = [0, 1.7, 1, 2, 1.5, 2.5],\n pathPoints = [];\n\n for (let s = 0; s < show.length; s++) {\n pathPoints.push(2 + (s * 12) + ',' + (45 - show[s] * 11));\n }\n\n $svg\n .appendSVG('path', 'select-fill-line')\n .attr('d', 'M' + pathPoints.join('L'));\n }\n\n function renderSvgIconPie($svg) {\n let show = [\n [0, 0.1],\n [0.1, 0.25],\n [0.25, 1]\n ];\n\n for (let s = 0; s < show.length; s++) {\n $svg\n .appendSVG('path', 'select-fill-pie')\n .attr('d', this._pathSegment(37, 30, 24, show[s][0], show[s][1]));\n }\n }\n\n function renderSvgIconBubble($svg) {\n $svg.appendSVG('line', 'select-fill-line')\n .attr('x1', 3).attr('y1', 53)\n .attr('x2', 63).attr('y2', 53);\n\n $svg.appendSVG('line', 'select-fill-line')\n .attr('x1', 8).attr('y1', 12)\n .attr('x2', 8).attr('y2', 58);\n\n $svg.appendSVG('circle', 'select-fill')\n .attr('cx', 22).attr('cy', 40)\n .attr('r', 5);\n\n $svg.appendSVG('circle', 'select-fill')\n .attr('cx', 50).attr('cy', 26)\n .attr('r', 11);\n }\n }\n\n _getSupportedChartTypes() {\n return [\n Chart.Type.BAR,\n Chart.Type.BAR_HORIZONTAL,\n Chart.Type.LINE,\n Chart.Type.PIE,\n Chart.Type.BUBBLE\n ];\n }\n\n _onClickChartType(event) {\n let $target = $(event.currentTarget),\n chartType = $target.data('chartType');\n this.setChartType(chartType);\n }\n\n _onClickChartGroup(event) {\n let $target = $(event.currentTarget),\n groupId = $target.parent().data('groupId'),\n column = $target.data('column'),\n origModifier = $target.data('modifier');\n\n // do nothing when item is disabled\n if (!$target.isEnabled()) {\n return;\n }\n\n let modifier = $target.isSelected() ? this._nextDateModifier(origModifier) : origModifier;\n $target.data('modifier', modifier);\n\n let config = {\n id: column ? column.id : null,\n modifier: modifier\n };\n\n this._setChartGroup(groupId, config);\n }\n\n _onClickAggregation(event) {\n let $target = $(event.currentTarget);\n // update modifier\n let origModifier = $target.data('modifier');\n let modifier = $target.isSelected() ? this._nextModifier(origModifier) : origModifier;\n $target.data('modifier', modifier);\n\n let column = $target.data('column');\n let aggregation = {\n id: column ? column.id : null,\n modifier: modifier\n };\n\n this._setChartAggregation(aggregation);\n }\n\n _nextDateModifier(modifier) {\n switch (modifier) {\n case TableMatrix.DateGroup.DATE:\n return TableMatrix.DateGroup.MONTH;\n case TableMatrix.DateGroup.MONTH:\n return TableMatrix.DateGroup.WEEKDAY;\n case TableMatrix.DateGroup.WEEKDAY:\n return TableMatrix.DateGroup.YEAR;\n case TableMatrix.DateGroup.YEAR:\n return TableMatrix.DateGroup.DATE;\n default:\n return modifier;\n }\n }\n\n _nextModifier(modifier) {\n switch (modifier) {\n case TableMatrix.NumberGroup.SUM:\n return TableMatrix.NumberGroup.AVG;\n case TableMatrix.NumberGroup.AVG:\n return TableMatrix.NumberGroup.SUM;\n default:\n return modifier;\n }\n }\n\n _setChartAggregation(chartAggregation) {\n if (chartAggregation === this.chartAggregation) {\n return;\n }\n this._setProperty('chartAggregation', chartAggregation);\n if (this.contentRendered) {\n this._renderChartAggregation();\n }\n }\n\n _setChartGroup1(chartGroup) {\n this._setChartGroup(1, chartGroup);\n }\n\n _setChartGroup2(chartGroup) {\n this._setChartGroup(2, chartGroup);\n }\n\n _setChartGroup(groupId, chartGroup) {\n let propertyName = 'chartGroup' + groupId;\n this._changeProperty(propertyName, chartGroup);\n }\n\n _changeProperty(prop, value) {\n if (value === this[prop]) {\n return;\n }\n this._setProperty(prop, value);\n if (this.contentRendered) {\n this['_render' + prop.charAt(0).toUpperCase() + prop.slice(1)]();\n }\n }\n\n setChartType(chartType) {\n this.oldChartType = this.chartType;\n this.setProperty('chartType', chartType);\n }\n\n _hasColumns() {\n return this.table.columns.length !== 0;\n }\n\n _axisCount(columnCount, column) {\n let i, tmpColumn;\n for (i = 0; i < columnCount.length; i++) {\n tmpColumn = columnCount[i][0];\n if (tmpColumn === column) {\n return columnCount[i][1];\n }\n }\n return 0;\n }\n\n _plainAxisText(column, text) {\n if (column.headerHtmlEnabled) {\n let plainText = strings.plainText(text);\n return plainText.replace(/\\n/g, ' ');\n }\n return text;\n }\n\n _renderContent($parent) {\n this.$contentContainer = $parent.appendDiv('chart-container');\n\n // scrollbars\n this._installScrollbars();\n\n this._renderChartSelectContainer();\n\n // group functions for dates\n this.dateGroup = [\n [TableMatrix.DateGroup.YEAR, this.session.text('ui.groupedByYear')],\n [TableMatrix.DateGroup.MONTH, this.session.text('ui.groupedByMonth')],\n [TableMatrix.DateGroup.WEEKDAY, this.session.text('ui.groupedByWeekday')],\n [TableMatrix.DateGroup.DATE, this.session.text('ui.groupedByDate')]\n ];\n\n // listeners\n this._filterResetListener = this.table.on('filterReset', event => {\n if (this.chart) {\n this.chart.setCheckedItems([]);\n }\n });\n\n this._addListeners();\n\n // add addition rectangle for hover and event handling\n $('.select-chart', this.$contentContainer)\n .appendSVG('rect', 'select-events')\n .attr('width', 65)\n .attr('height', 60)\n .attr('fill', 'none')\n .attr('pointer-events', 'all');\n\n let columnCount = this._renderAxisSelectors();\n\n // draw first chart\n this._renderChart();\n\n this._initializeSelection(columnCount);\n\n this._renderChartParts();\n\n this._drawChart();\n }\n\n _addListeners() {\n this.table.on('rowsInserted', this._tableUpdatedHandler);\n this.table.on('rowsDeleted', this._tableUpdatedHandler);\n this.table.on('allRowsDeleted', this._tableUpdatedHandler);\n this.chart.on('valueClick', this._chartValueClickedHandler);\n }\n\n _renderAxisSelectors() {\n // create container for x/y-axis\n this.$xAxisSelect = this.$contentContainer\n .appendDiv('xaxis-select')\n .data('groupId', 1);\n this.$yAxisSelect = this.$contentContainer\n .appendDiv('yaxis-select')\n .data('groupId', 2);\n\n // map for selection (column id, $element)\n this._chartGroup1Map = {};\n this._chartGroup2Map = {};\n\n // find best x and y axis: best is 9 different entries\n let matrix = new TableMatrix(this.table, this.session),\n columnCount = matrix.columnCount(false); // filterNumberColumns false: number columns will be filtered below\n columnCount.sort((a, b) => {\n return Math.abs(a[1] - 8) - Math.abs(b[1] - 8);\n });\n\n let axisCount, enabled,\n numberOfAxisItems = 0,\n columns = matrix.columns(false); // filterNumberColumns false: number columns will be filtered below\n\n // all x/y-axis for selection\n for (let c1 = 0; c1 < columns.length; c1++) {\n let content, $div, $yDiv,\n column1 = columns[c1];\n\n // Check if data-spread is too large. This is a problem in large tables where a column has unique values.\n // We cannot create DOM elements for each unique value because this causes all browser to stop script\n // execution. May be in a later release we could implement some sort of data aggregation, but this is not\n // a simple task on the UI layer, because it requires some know-how about the entity represented by the table,\n // which we don't have in the UI. Another possible solution: make the charts scrollable, however this is\n // probably not a good idea, because with a lot of data, the chart fails to provide an oversight over the data\n // when the user must scroll and only sees a small part of the chart.\n if (column1 instanceof DateColumn) {\n // dates are always aggregated and thus we must not check if the chart has \"too much data\".\n enabled = true;\n } else {\n axisCount = this._axisCount(columnCount, column1);\n enabled = (axisCount <= ChartTableControl.MAX_AXIS_COUNT);\n }\n\n content = this._axisContentForColumn(column1);\n\n $div = this.$contentContainer\n .makeDiv('select-axis', this._plainAxisText(column1, content.text))\n .data('column', column1)\n .setEnabled(enabled);\n\n if (!enabled) {\n if (this.chartGroup1 && this.chartGroup1.id === column1.id) {\n this.chartGroup1 = null;\n this.chartGroup2 = null;\n }\n if (this.chartGroup2 && this.chartGroup2.id === column1.id) {\n this.chartGroup2 = null;\n }\n }\n\n if (content.icon) {\n $div.addClass(content.icon.appendCssClass('font-icon'));\n }\n\n if (column1 instanceof DateColumn) {\n $div\n .data('modifier', TableMatrix.DateGroup.YEAR)\n .appendDiv('select-axis-group', this.dateGroup[0][1]);\n }\n\n // install click handler or tooltip\n if (enabled) {\n $div.on('click', this._onClickChartGroup.bind(this));\n tooltips.installForEllipsis($div, {\n parent: this\n });\n } else {\n tooltips.install($div, {\n parent: this,\n text: this.session.text('ui.TooMuchData')\n });\n }\n\n numberOfAxisItems++;\n $yDiv = $div.clone(true);\n this._chartGroup1Map[column1.id] = $div;\n this._chartGroup2Map[column1.id] = $yDiv;\n this.$xAxisSelect.append($div);\n this.$yAxisSelect.append($yDiv);\n }\n\n if (numberOfAxisItems < 2) {\n let $bubbleSelect = this.$contentContainer.find('.chart-bubble.select-chart');\n if ($bubbleSelect) {\n $bubbleSelect.remove();\n }\n }\n\n // map for selection (column id, $element)\n this._aggregationMap = {};\n\n if (this._hasColumns()) {\n // create container for data\n this.$dataSelect = this.$contentContainer.appendDiv('data-select');\n\n // add data-count for no column restriction (all columns)\n let countDesc = this.session.text('ui.Count');\n this._aggregationMap.all = this.$dataSelect\n .appendDiv('select-data data-count', countDesc)\n .data('column', null)\n .data('modifier', TableMatrix.NumberGroup.COUNT);\n\n // all data for selection\n for (let c2 = 0; c2 < columns.length; c2++) {\n let column2 = columns[c2];\n let fakeNumberLabelCol2 = c2 + 1;\n\n if (column2 instanceof NumberColumn) {\n let columnText;\n if (strings.hasText(column2.text)) {\n columnText = this._plainAxisText(column2, column2.text);\n } else if (strings.hasText(column2.headerTooltipText)) {\n columnText = column2.headerTooltipText;\n } else {\n columnText = '[' + fakeNumberLabelCol2 + ']';\n }\n\n this._aggregationMap[column2.id] = this.$dataSelect\n .appendDiv('select-data data-sum', columnText)\n .data('column', column2)\n .data('modifier', TableMatrix.NumberGroup.SUM);\n }\n }\n\n // click handling for data\n $('.select-data', this.$contentContainer)\n .on('click', this._onClickAggregation.bind(this));\n }\n\n return columnCount;\n }\n\n _initializeSelection(columnCount) {\n let $axisColumns;\n\n if (!this.chartType) {\n this.setChartType(Chart.Type.BAR);\n }\n\n // no id selected\n if (!this.chartAggregation || !this._aggregationMap[this.chartAggregation.id]) {\n this._setChartAggregation({\n id: null,\n modifier: TableMatrix.NumberGroup.COUNT\n });\n }\n\n // apply default selection\n if (!this.chartGroup1 || !this.chartGroup1.id || !this._chartGroup1Map[this.chartGroup1.id]) {\n $axisColumns = this.$xAxisSelect.children(':not(.disabled)');\n this._setDefaultSelectionForGroup(1, columnCount, $axisColumns, 0 /* only use the first column for the first group */);\n }\n if (!this.chartGroup2 || !this.chartGroup2.id || !this._chartGroup2Map[this.chartGroup2.id]) {\n $axisColumns = this.$yAxisSelect.children(':not(.disabled)');\n this._setDefaultSelectionForGroup(2, columnCount, $axisColumns, 1 /* try to use the second column for the second group (if available). Otherwise the first column is used. */);\n }\n }\n\n /**\n * Applies the default column selection for the specified chartGroup.\n * The implementation only considers columns that are part of the specified columnCount matrix and $candidates array.\n * From all these columns the last match that is lower or equal to the specified maxIndex is set as default chart group.\n *\n * @param {number} chartGroup The number of the chart group (1 or 2) for which the default column should be set.\n * @param {matrix} columnCount Column-count matrix as returned by TableMatrix#columnCount(). Holds possible grouping columns.\n * @param {array} $candidates jQuery array holding all axis columns that could be used as default.\n * @param {number} maxIndex The maximum column index to use as default column for the specified chartGroup.\n */\n _setDefaultSelectionForGroup(chartGroup, columnCount, $candidates, maxIndex) {\n let col = this._getDefaultSelectedColumn(columnCount, $candidates, maxIndex);\n if (col) {\n this._setChartGroup(chartGroup, this._getDefaultChartGroup(col));\n }\n }\n\n _getDefaultSelectedColumn(columnCount, $candidates, maxIndex) {\n let matchCounter = 0,\n curColumn,\n result;\n for (let j = 0; j < columnCount.length && matchCounter <= maxIndex; j++) {\n curColumn = columnCount[j][0];\n if (this._existsInAxisColumns($candidates, curColumn)) {\n result = curColumn; // remember possible result\n matchCounter++;\n }\n }\n return result;\n }\n\n _existsInAxisColumns($candidates, columnToSearch) {\n for (let i = 0; i < $candidates.length; i++) {\n if ($candidates.eq(i).data('column') === columnToSearch) {\n return true;\n }\n }\n return false;\n }\n\n _getDefaultChartGroup(column) {\n let modifier;\n if (column instanceof DateColumn) {\n modifier = 256;\n }\n return {\n id: column.id,\n modifier: modifier\n };\n }\n\n _renderChartParts() {\n this._renderChartType();\n this._renderChartAggregation();\n this._renderChartGroup1();\n this._renderChartGroup2();\n }\n\n _drawChart() {\n if (!this._hasColumns()) {\n this._hideChart();\n return;\n }\n\n let cube = this._calculateValues();\n\n if (cube.length) {\n this.chart.setVisible(true);\n } else {\n this._hideChart();\n return;\n }\n\n let config = {\n type: this.chartType,\n options: {\n handleResize: true,\n colorScheme: this.chartColorScheme,\n maxSegments: 5,\n legend: {\n display: false\n }\n }\n };\n\n let iconClasses = [];\n config.data = this._computeData(iconClasses, cube);\n this._adjustFont(config, iconClasses);\n\n this._adjustConfig(config);\n\n this.chart.setConfig(config);\n\n let checkedItems = this._computeCheckedItems(config.data.datasets[0].deterministicKeys);\n this.chart.setCheckedItems(checkedItems);\n }\n\n _hideChart() {\n this.chart.setConfig({\n type: this.chartType\n });\n this.chart.setVisible(false);\n }\n\n _getDatasetLabel() {\n let elem = this._aggregationMap[this.chartAggregation.id || 'all'];\n return (elem ? elem.text() : null) || this.session.text('ui.Value');\n }\n\n _calculateValues() {\n // build matrix\n let matrix = new TableMatrix(this.table, this.session);\n\n // aggregation (data axis)\n let tableData = this.chartAggregation.id ? this._aggregationMap[this.chartAggregation.id].data('column') : -1;\n matrix.addData(tableData, this.chartAggregation.modifier);\n\n // find xAxis\n if (this.chartGroup1) {\n let axis = this._chartGroup1Map[this.chartGroup1.id].data('column');\n this.xAxis = matrix.addAxis(axis, this.chartGroup1.modifier);\n }\n\n // find yAxis\n // in case of bubble\n if (this.chartType === Chart.Type.BUBBLE && this.chartGroup2) {\n let axis2 = this._chartGroup2Map[this.chartGroup2.id].data('column');\n this.yAxis = matrix.addAxis(axis2, this.chartGroup2.modifier);\n } else {\n this.yAxis = null;\n }\n\n // return not possible to draw chart\n if (matrix.isEmpty() || !matrix.isMatrixValid()) {\n return false;\n }\n\n // calculate matrix\n return matrix.calculate();\n }\n\n _getXAxis() {\n return this.xAxis;\n }\n\n _getYAxis() {\n return this.yAxis;\n }\n\n _computeData(iconClasses, cube) {\n let data = {\n datasets: [{\n label: this._getDatasetLabel()\n }]\n };\n if (!cube) {\n return data;\n }\n iconClasses = iconClasses || [];\n\n let segments = [];\n\n if (this.chartType === Chart.Type.BUBBLE) {\n segments = this._computeBubbleData(iconClasses, cube);\n } else {\n let xAxis = this._getXAxis();\n for (let x = 0; x < xAxis.length; x++) {\n let label,\n keyX = xAxis[x];\n if (xAxis.column instanceof NumberColumn) {\n label = keyX;\n } else {\n label = this._handleIconLabel(xAxis.format(keyX), xAxis, iconClasses);\n }\n segments.push({\n value: cube.getValue([keyX])[0],\n label: label,\n deterministicKey: xAxis.keyToDeterministicKey(keyX)\n });\n }\n }\n let dataset = data.datasets[0],\n labels = [];\n\n dataset.data = [];\n dataset.deterministicKeys = [];\n\n segments.forEach(elem => {\n dataset.data.push(elem.value);\n dataset.deterministicKeys.push(elem.deterministicKey);\n if (!objects.isNullOrUndefined(elem.label)) {\n labels.push(elem.label);\n }\n });\n\n if (labels.length) {\n data.labels = labels;\n }\n\n // duplicate the dataset for pie charts, this is necessary for datalabels on the segments and outside of the pie chart\n if (this.chartType === Chart.Type.PIE) {\n data.datasets[1] = $.extend(true, {}, dataset);\n }\n\n return data;\n }\n\n _computeBubbleData(iconClasses, cube) {\n if (!cube) {\n return [];\n }\n iconClasses = iconClasses || [];\n\n let xAxis = this._getXAxis(),\n yAxis = this._getYAxis(),\n segments = [];\n for (let x = 0; x < xAxis.length; x++) {\n let keyX = xAxis[x],\n xValue = keyX;\n this._handleIconLabel(xAxis.format(keyX), xAxis, iconClasses);\n if (!(xAxis.column instanceof NumberColumn) && xValue === null) {\n xValue = xAxis.max;\n }\n if (xAxis.column instanceof DateColumn) {\n xValue = xValue - xAxis.min;\n }\n for (let y = 0; y < yAxis.length; y++) {\n let keyY = yAxis[y],\n yValue = keyY,\n cubeValues = cube.getValue([keyX, keyY]);\n this._handleIconLabel(yAxis.format(keyY), yAxis, iconClasses);\n if (cubeValues && cubeValues.length) {\n if (!(yAxis.column instanceof NumberColumn) && yValue === null) {\n yValue = yAxis.max;\n }\n if (yAxis.column instanceof DateColumn) {\n yValue = yValue - yAxis.min;\n }\n segments.push({\n value: {\n x: xValue,\n y: yValue,\n z: cubeValues[0]\n },\n deterministicKey: [xAxis.keyToDeterministicKey(keyX), yAxis.keyToDeterministicKey(keyY)]\n });\n }\n }\n }\n return segments;\n }\n\n _handleIconLabel(label, axis, iconClasses) {\n if (axis && axis.textIsIcon) {\n let icon = icons.parseIconId(label);\n if (icon && icon.isFontIcon()) {\n iconClasses.push(...icon.appendCssClass('font-icon').split(' '));\n return icon.iconCharacter;\n }\n }\n return label;\n }\n\n _adjustFont(config, iconClasses) {\n if (!config || !iconClasses) {\n return;\n }\n\n iconClasses = iconClasses.filter((value, index, self) => {\n return self.indexOf(value) === index;\n });\n if (iconClasses.length) {\n let fontFamily = styles.get(iconClasses, 'font-family').fontFamily;\n if (this.chartType !== Chart.Type.PIE) {\n config.options = $.extend(true, {}, config.options, {\n scales: {\n xAxes: [{\n ticks: {\n fontFamily: fontFamily\n }\n }],\n yAxes: [{\n ticks: {\n fontFamily: fontFamily\n }\n }]\n }\n });\n }\n config.options = $.extend(true, {}, config.options, {\n tooltips: {\n titleFontFamily: fontFamily\n }\n });\n config.options = $.extend(true, {}, config.options, {\n plugins: {\n datalabels: {\n font: {\n family: fontFamily\n }\n }\n }\n });\n }\n }\n\n _adjustLabels(config) {\n if (!config) {\n return;\n }\n\n let xAxis = this._getXAxis(),\n yAxis = this._getYAxis();\n if (this.chartType === Chart.Type.BUBBLE) {\n if (!(xAxis.column instanceof NumberColumn)) {\n config.options = $.extend(true, {}, config.options, {\n scales: {\n xAxes: [{\n ticks: {\n callback: label => this._formatLabel(label, xAxis)\n }\n }]\n }\n });\n }\n if (!(yAxis.column instanceof NumberColumn)) {\n config.options = $.extend(true, {}, config.options, {\n scales: {\n yAxes: [{\n ticks: {\n callback: label => this._formatLabel(label, yAxis)\n }\n }]\n }\n });\n }\n } else {\n if (xAxis.column instanceof NumberColumn) {\n config.options = $.extend(true, {}, config.options, {\n reformatLabels: true\n });\n }\n }\n }\n\n _formatLabel(label, axis) {\n if (axis) {\n if (axis.column instanceof DateColumn) {\n label = label + axis.min;\n if (label !== parseInt(label) || (axis.length < 2 && (label < axis.min || label > axis.max))) {\n return null;\n }\n }\n if (axis.indexOf(null) !== -1) {\n if (label === axis.max) {\n label = null;\n } else if (label > axis.max) {\n return null;\n }\n }\n label = axis.format(label);\n if (axis.textIsIcon) {\n let icon = icons.parseIconId(label);\n if (icon && icon.isFontIcon()) {\n label = icon.iconCharacter;\n }\n }\n }\n return label;\n }\n\n _adjustConfig(config) {\n if (!config) {\n return;\n }\n\n this._adjustLabels(config);\n this._adjustClickable(config);\n\n if (this.chartType === Chart.Type.BUBBLE) {\n this._adjustBubble(config);\n } else if (this.chartType === Chart.Type.PIE) {\n this._adjustPie(config);\n } else {\n this._adjustScales(config);\n }\n }\n\n _adjustClickable(config) {\n if (!config) {\n return;\n }\n\n if (this._isChartClickable()) {\n config.options = $.extend(true, {}, config.options, {\n clickable: true,\n checkable: true,\n otherSegmentClickable: true\n });\n }\n }\n\n _isChartClickable() {\n return true;\n }\n\n _adjustBubble(config) {\n if (!config || this.chartType !== Chart.Type.BUBBLE) {\n return;\n }\n\n config.bubble = $.extend(true, {}, config.bubble, {\n sizeOfLargestBubble: 25,\n minBubbleSize: 5\n });\n }\n\n _adjustPie(config) {\n if (!config || this.chartType !== Chart.Type.PIE) {\n return;\n }\n\n // first dataset is hidden but datalabels are displayed outside of the chart\n config.data.datasets[0].weight = 0;\n config.data.datasets[0].datalabels = {\n display: 'auto',\n color: styles.get([this.chartColorScheme, this.chartType + '-chart', 'elements', 'label'], 'fill').fill,\n formatter: (value, context) => {\n return context.chart.data.labels[context.dataIndex];\n },\n anchor: 'end',\n align: 'end',\n clamp: true,\n offset: 10,\n padding: 4\n };\n\n config.options = $.extend(true, {}, config.options, {\n plugins: {\n datalabels: {\n display: true\n }\n }\n });\n // Compensate the margin of the container so that the chart is always centered vertically\n let margin = this.chart.$container.cssMarginTop() - this.chart.$container.cssMarginBottom();\n config.options = $.extend(true, {}, config.options, {\n layout: {\n padding: {\n top: 30 + (Math.sign(margin) < 0 ? Math.abs(margin) : 0),\n bottom: 30 + (Math.sign(margin) > 0 ? margin : 0)\n }\n }\n });\n }\n\n _adjustScales(config) {\n if (!config) {\n return;\n }\n\n config.options = $.extend(true, {}, config.options, {\n scales: {\n xAxes: [{\n ticks: {\n beginAtZero: true\n }\n }],\n yAxes: [{\n ticks: {\n beginAtZero: true\n }\n }]\n }\n });\n }\n\n _computeCheckedItems(deterministicKeys) {\n if (!deterministicKeys) {\n return [];\n }\n\n let xAxis = this._getXAxis(),\n yAxis = this._getYAxis(),\n tableFilter = this.table.getFilter(ChartTableUserFilter.TYPE),\n filters = [],\n checkedIndices = [];\n\n if (tableFilter && (tableFilter.xAxis || {}).column === (xAxis || {}).column && (tableFilter.yAxis || {}).column === (yAxis || {}).column) {\n filters = tableFilter.filters;\n }\n\n deterministicKeys.forEach((deterministicKey, idx) => {\n if (filters.filter(filter => (Array.isArray(filter.deterministicKey) && Array.isArray(deterministicKey)) ? arrays.equals(filter.deterministicKey, deterministicKey) : filter.deterministicKey === deterministicKey).length) {\n checkedIndices.push(idx);\n }\n });\n let datasetIndex = 0;\n if (this.chartType === Chart.Type.PIE) {\n let maxSegments = this.chart.config.options.maxSegments,\n collapsedIndices = arrays.init(deterministicKeys.length - maxSegments).map((elem, idx) => idx + maxSegments);\n if (!arrays.containsAll(checkedIndices, collapsedIndices)) {\n arrays.remove(checkedIndices, maxSegments - 1);\n }\n arrays.removeAll(checkedIndices, collapsedIndices);\n\n // first dataset is hidden on pie charts\n datasetIndex = 1;\n }\n\n let checkedItems = [];\n if (checkedIndices.length) {\n checkedIndices.forEach(index => {\n checkedItems.push({\n datasetIndex: datasetIndex,\n dataIndex: index\n });\n });\n }\n\n return checkedItems;\n }\n\n _onChartValueClick() {\n // prepare filter\n let filters = [];\n if (this.chart && this.chart.config.data) {\n let maxSegments = this.chart.config.options.maxSegments,\n // first dataset is hidden on pie charts\n datasetIndex = this.chartType === Chart.Type.PIE ? 1 : 0,\n dataset = this.chart.config.data.datasets[datasetIndex],\n getFilters = index => ({deterministicKey: dataset.deterministicKeys[index]});\n if (this.chartType === Chart.Type.PIE) {\n getFilters = index => {\n index = parseInt(index);\n if (maxSegments && maxSegments === index + 1) {\n return arrays.init(dataset.deterministicKeys.length - index).map((elem, idx) => ({deterministicKey: dataset.deterministicKeys[idx + index]}));\n }\n return {deterministicKey: dataset.deterministicKeys[index]};\n };\n }\n\n let checkedIndices = this.chart.checkedItems.filter(item => item.datasetIndex === datasetIndex)\n .map(item => item.dataIndex);\n checkedIndices.forEach(index => {\n arrays.pushAll(filters, getFilters(index));\n });\n }\n\n // filter function\n if (filters.length) {\n let filter = scout.create('ChartTableUserFilter', {\n session: this.session,\n table: this.table,\n text: this.tooltipText,\n xAxis: this._getXAxis(),\n yAxis: this._getYAxis(),\n filters: filters\n });\n\n this.table.addFilter(filter);\n } else {\n this.table.removeFilterByKey(ChartTableUserFilter.TYPE);\n }\n\n this.table.filter();\n }\n\n _axisContentForColumn(column) {\n let icon,\n text = column.text;\n\n if (strings.hasText(text)) {\n return {\n text: text\n };\n }\n\n if (column.headerIconId) {\n icon = icons.parseIconId(column.headerIconId);\n if (icon.isFontIcon()) {\n return {\n text: icon.iconCharacter,\n icon: icon\n };\n }\n }\n\n if (column.headerTooltipText) {\n return {\n text: column.headerTooltipText\n };\n }\n\n return {\n text: '[' + (this.table.visibleColumns().indexOf(column) + 1) + ']'\n };\n }\n\n _removeContent() {\n this._removeScrollbars();\n this.$contentContainer.remove();\n this.chart.remove();\n this.table.events.removeListener(this._filterResetListener);\n this._removeListeners();\n this.oldChartType = null;\n this.recomputeEnabled();\n }\n\n _removeScrollbars() {\n this.$xAxisSelect.each((index, element) => {\n tooltips.uninstall($(element));\n });\n this.$yAxisSelect.each((index, element) => {\n tooltips.uninstall($(element));\n });\n this._uninstallScrollbars();\n }\n\n _removeListeners() {\n this.table.off('rowsInserted', this._tableUpdatedHandler);\n this.table.off('rowsDeleted', this._tableUpdatedHandler);\n this.table.off('allRowsDeleted', this._tableUpdatedHandler);\n this.chart.off('valueClick', this._chartValueClickedHandler);\n }\n\n _pathSegment(mx, my, r, start, end) {\n let s = start * 2 * Math.PI,\n e = end * 2 * Math.PI,\n pathString = '';\n\n pathString += 'M' + (mx + r * Math.sin(s)) + ',' + (my - r * Math.cos(s));\n pathString += 'A' + r + ', ' + r;\n pathString += (end - start < 0.5) ? ' 0 0,1 ' : ' 0 1,1 ';\n pathString += (mx + r * Math.sin(e)) + ',' + (my - r * Math.cos(e));\n pathString += 'L' + mx + ',' + my + 'Z';\n\n return pathString;\n }\n\n _onTableUpdated(event) {\n if (this._tableUpdatedTimeOutId) {\n return;\n }\n\n this._tableUpdatedTimeOutId = setTimeout(() => {\n this._tableUpdatedTimeOutId = null;\n\n if (!this.rendered) {\n return;\n }\n\n this._setChartGroup1(null);\n this._setChartGroup2(null);\n this.removeContent();\n this.renderContent();\n });\n }\n\n _onTableColumnStructureChanged() {\n this.recomputeEnabled();\n if (this.contentRendered && this.selected) {\n this._onTableUpdated();\n }\n }\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {TableControlAdapter} from '@eclipse-scout/core';\n\nexport default class ChartTableControlAdapter extends TableControlAdapter {\n\n constructor() {\n super();\n this._addRemoteProperties(['chartType', 'chartAggregation', 'chartGroup1', 'chartGroup2']);\n }\n\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {AbstractLayout, scrollbars} from '@eclipse-scout/core';\n\nexport default class ChartTableControlLayout extends AbstractLayout {\n\n constructor(control) {\n super();\n this.control = control;\n }\n\n layout($container) {\n if (!this.control.contentRendered) {\n return;\n }\n scrollbars.update(this.control.$contentContainer);\n }\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {arrays, TableMatrix, TableUserFilter} from '@eclipse-scout/core';\n\nexport default class ChartTableUserFilter extends TableUserFilter {\n\n constructor() {\n super();\n this.filterType = ChartTableUserFilter.TYPE;\n this.text = null;\n this.xAxis = null;\n this.yAxis = null;\n this.filters = [];\n this.columnIdX = null;\n this.columnIdY = null;\n }\n\n static TYPE = 'CHART';\n\n createLabel() {\n return this.text;\n }\n\n /**\n * @override TableUserFilter.js\n */\n createFilterAddedEventData() {\n let data = super.createFilterAddedEventData();\n data.text = this.text;\n data.filters = this.filters;\n data.columnIdX = (this.xAxis && this.xAxis.column) ? this.xAxis.column.id : null;\n data.columnIdY = (this.yAxis && this.yAxis.column) ? this.yAxis.column.id : null;\n return data;\n }\n\n calculate() {\n let matrix = new TableMatrix(this.table, this.session);\n let columnX = this.table.columnById(this.columnIdX);\n let axisGroupX = columnX.createFilter().axisGroup();\n this.xAxis = matrix.addAxis(columnX, axisGroupX);\n if (this.columnIdY) {\n let columnY = this.table.columnById(this.columnIdY);\n let axisGroupY = columnY.createFilter().axisGroup();\n this.yAxis = matrix.addAxis(columnY, axisGroupY);\n }\n matrix.calculate();\n }\n\n accept(row) {\n if (!this.xAxis) {\n // Lazy calculation. It is not possible on init, because the table is not rendered yet.\n this.calculate();\n }\n let value = this.xAxis.column.cellValueOrTextForCalculation(row);\n let deterministicKeyX = this.xAxis.normDeterministic(value);\n\n if (!this.yAxis) {\n return (this.filters.filter(filter => filter.deterministicKey === deterministicKeyX).length);\n }\n value = this.yAxis.column.cellValueOrTextForCalculation(row);\n let deterministicKeyY = this.yAxis.normDeterministic(value);\n return (this.filters.filter(filter => arrays.equals(filter.deterministicKey, [deterministicKeyX, deterministicKeyY])).length);\n }\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {FormFieldTile} from '@eclipse-scout/core';\n\nexport default class ChartFieldTile extends FormFieldTile {\n\n constructor() {\n super();\n this._chartConfigChangeHandler = this._onChartConfigChange.bind(this);\n }\n\n _renderColorScheme() {\n super._renderColorScheme();\n this._updateChartColorScheme();\n }\n\n _updateChartColorScheme() {\n let config = $.extend(true, {}, this.tileWidget.chart.config, {\n options: {\n colorScheme: this.colorScheme\n }\n });\n\n this.tileWidget.chart.setConfig(config);\n }\n\n _onChartConfigChange(event) {\n this._updateChartColorScheme();\n }\n\n _setTileWidget(tileWidget) {\n if (this.tileWidget) {\n this.tileWidget.chart.off('propertyChange:config', this._chartConfigChangeHandler);\n }\n super._setTileWidget(tileWidget);\n this.tileWidget.chart.on('propertyChange:config', this._chartConfigChangeHandler);\n }\n}\n","/*\n * Copyright (c) 2010-2020 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * http://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {FormFieldTileAdapter} from '@eclipse-scout/core';\n\nexport default class ChartFieldTileAdapter extends FormFieldTileAdapter {\n\n constructor() {\n super();\n }\n}\n","module.exports = scout;","module.exports = Chart;","module.exports = ChartDataLabels;","module.exports = jQuery;"],"sourceRoot":""}
|