/* jQuery Form Plugin version: 4.2.2 Requires jQuery v1.7.2 or later Project repository: https://github.com/jquery-form/form Copyright 2017 Kevin Morris Copyright 2006 M. Alsup Dual licensed under the LGPL-2.1+ or MIT licenses https://github.com/jquery-form/form#license This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. */ 'use strict';(function($){if(!$||!window)throw new Error("Missing Jquery object or Window object in Jquery-form");"use strict";var rCRLF=/\r?\n/g;var feature={};feature.fileapi=$('\x3cinput type\x3d"file"\x3e').get(0).files!==undefined;feature.formdata=typeof window.FormData!=="undefined";var hasProp=!!$.fn.prop;$.fn.attr2=function(){if(!hasProp)return this.attr.apply(this,arguments);var val=this.prop.apply(this,arguments);if(val&&val.jquery||typeof val==="string")return val;return this.attr.apply(this, arguments)};$.fn.ajaxSubmit=function(options,data,dataType,onSuccess){if(!this.length){log("ajaxSubmit: skipping submit process - no element selected");return this}var method,action,url,$form=this;if(typeof options==="function")options={success:options};else if(typeof options==="string"||options===false&&arguments.length>0){options={"url":options,"data":data,"dataType":dataType};if(typeof onSuccess==="function")options.success=onSuccess}else if(typeof options==="undefined")options={};method=options.method|| options.type||this.attr2("method");action=options.url||this.attr2("action");url=typeof action==="string"?$.trim(action):"";url=url||window.location.href||"";if(url)url=(url.match(/^([^#]+)/)||[])[1];options=$.extend(true,{url:url,success:$.ajaxSettings.success,type:method||$.ajaxSettings.type,iframeSrc:/^https/i.test(window.location.href||"")?"javascript:false":"about:blank"},options);var veto={};this.trigger("form-pre-serialize",[this,options,veto]);if(veto.veto){log("ajaxSubmit: submit vetoed via form-pre-serialize trigger"); return this}if(options.beforeSerialize&&options.beforeSerialize(this,options)===false){log("ajaxSubmit: submit aborted via beforeSerialize callback");return this}var traditional=options.traditional;if(typeof traditional==="undefined")traditional=$.ajaxSettings.traditional;var elements=[];var qx,a=this.formToArray(options.semantic,elements,options.filtering);if(options.data){var optionsData=$.isFunction(options.data)?options.data(a):options.data;options.extraData=optionsData;qx=$.param(optionsData, traditional)}if(options.beforeSubmit&&options.beforeSubmit(a,this,options)===false){log("ajaxSubmit: submit aborted via beforeSubmit callback");return this}this.trigger("form-submit-validate",[a,this,options,veto]);if(veto.veto){log("ajaxSubmit: submit vetoed via form-submit-validate trigger");return this}var q=$.param(a,traditional);if(qx)q=q?q+"\x26"+qx:qx;if(options.type.toUpperCase()==="GET"){options.url+=(options.url.indexOf("?")>=0?"\x26":"?")+q;options.data=null}else options.data=q;var callbacks= [];if(options.resetForm)callbacks.push(function(){$form.resetForm()});if(options.clearForm)callbacks.push(function(){$form.clearForm(options.includeHidden)});if(!options.dataType&&options.target){var oldSuccess=options.success||function(){};callbacks.push(function(data,textStatus,jqXHR){var successArguments=arguments,fn=options.replaceTarget?"replaceWith":"html";$(options.target)[fn](data).each(function(){oldSuccess.apply(this,successArguments)})})}else if(options.success)if($.isArray(options.success))$.merge(callbacks, options.success);else callbacks.push(options.success);options.success=function(data,status,xhr){var context=options.context||this;for(var i=0,max=callbacks.length;i0;var mp="multipart/form-data";var multipart=$form.attr("enctype")===mp||$form.attr("encoding")===mp;var fileAPI=feature.fileapi&&feature.formdata;log("fileAPI :"+fileAPI);var shouldUseFrame=(hasFileInputs||multipart)&&!fileAPI;var jqxhr;if(options.iframe!==false&&(options.iframe||shouldUseFrame))if(options.closeKeepAlive)$.get(options.closeKeepAlive, function(){jqxhr=fileUploadIframe(a)});else jqxhr=fileUploadIframe(a);else if((hasFileInputs||multipart)&&fileAPI)jqxhr=fileUploadXhr(a);else jqxhr=$.ajax(options);$form.removeData("jqxhr").data("jqxhr",jqxhr);for(var k=0;k=200&&xhr.status<300||xhr.status===304?"success":"error";if(status==="success"){if(s.success)s.success.call(s.context,data,"success",xhr);deferred.resolve(xhr.responseText,"success",xhr);if(g)$.event.trigger("ajaxSuccess",[xhr,s])}else if(status){if(typeof errMsg==="undefined")errMsg=xhr.statusText;if(s.error)s.error.call(s.context, xhr,status,errMsg);deferred.reject(xhr,"error",errMsg);if(g)$.event.trigger("ajaxError",[xhr,s,errMsg])}if(g)$.event.trigger("ajaxComplete",[xhr,s]);if(g&&!--$.active)$.event.trigger("ajaxStop");if(s.complete)s.complete.call(s.context,xhr,status);callbackProcessed=true;if(s.timeout)clearTimeout(timeoutHandle);setTimeout(function(){if(!s.iframeTarget)$io.remove();else $io.attr("src",s.iframeSrc);xhr.responseXML=null},100)}var toXml=$.parseXML||function(s,doc){if(window.ActiveXObject){doc=new ActiveXObject("Microsoft.XMLDOM"); doc.async="false";doc.loadXML(s)}else doc=(new DOMParser).parseFromString(s,"text/xml");return doc&&doc.documentElement&&doc.documentElement.nodeName!=="parsererror"?doc:null};var parseJSON=$.parseJSON||function(s){return window["eval"]("("+s+")")};var httpData=function(xhr,type,s){var ct=xhr.getResponseHeader("content-type")||"",xml=(type==="xml"||!type)&&ct.indexOf("xml")>=0,data=xml?xhr.responseXML:xhr.responseText;if(xml&&data.documentElement.nodeName==="parsererror")if($.error)$.error("parsererror"); if(s&&s.dataFilter)data=s.dataFilter(data,type);if(typeof data==="string")if((type==="json"||!type)&&ct.indexOf("json")>=0)data=parseJSON(data);else if((type==="script"||!type)&&ct.indexOf("javascript")>=0)$.globalEval(data);return data};return deferred}};$.fn.ajaxForm=function(options,data,dataType,onSuccess){if(typeof options==="string"||options===false&&arguments.length>0){options={"url":options,"data":data,"dataType":dataType};if(typeof onSuccess==="function")options.success=onSuccess}options= options||{};options.delegation=options.delegation&&$.isFunction($.fn.on);if(!options.delegation&&this.length===0){var o={s:this.selector,c:this.context};if(!$.isReady&&o.s){log("DOM not ready, queuing ajaxForm");$(function(){$(o.s,o.c).ajaxForm(options)});return this}log("terminating; zero elements found by selector"+($.isReady?"":" (DOM not ready)"));return this}if(options.delegation){$(document).off("submit.form-plugin",this.selector,doAjaxSubmit).off("click.form-plugin",this.selector,captureSubmittingElement).on("submit.form-plugin", this.selector,options,doAjaxSubmit).on("click.form-plugin",this.selector,options,captureSubmittingElement);return this}return this.ajaxFormUnbind().on("submit.form-plugin",options,doAjaxSubmit).on("click.form-plugin",options,captureSubmittingElement)};function doAjaxSubmit(e){var options=e.data;if(!e.isDefaultPrevented()){e.preventDefault();$(e.target).closest("form").ajaxSubmit(options)}}function captureSubmittingElement(e){var target=e.target;var $el=$(target);if(!$el.is("[type\x3dsubmit],[type\x3dimage]")){var t= $el.closest("[type\x3dsubmit]");if(t.length===0)return;target=t[0]}var form=target.form;form.clk=target;if(target.type==="image")if(typeof e.offsetX!=="undefined"){form.clk_x=e.offsetX;form.clk_y=e.offsetY}else if(typeof $.fn.offset==="function"){var offset=$el.offset();form.clk_x=e.pageX-offset.left;form.clk_y=e.pageY-offset.top}else{form.clk_x=e.pageX-target.offsetLeft;form.clk_y=e.pageY-target.offsetTop}setTimeout(function(){form.clk=form.clk_x=form.clk_y=null},100)}$.fn.ajaxFormUnbind=function(){return this.off("submit.form-plugin click.form-plugin")}; $.fn.formToArray=function(semantic,elements,filtering){var a=[];if(this.length===0)return a;var form=this[0];var formId=this.attr("id");var els=semantic||typeof form.elements==="undefined"?form.getElementsByTagName("*"):form.elements;var els2;if(els)els=$.makeArray(els);if(formId&&(semantic||/(Edge|Trident)\//.test(navigator.userAgent))){els2=$(':input[form\x3d"'+formId+'"]').get();if(els2.length)els=(els||[]).concat(els2)}if(!els||!els.length)return a;if($.isFunction(filtering))els=$.map(els,filtering); var i,j,n,v,el,max,jmax;for(i=0,max=els.length;i4?valueOffset:entryOffset+8;vals=[];for(n=0;n4?valueOffset:entryOffset+8;return getStringFromDB(file,offset,numValues-1);case 3:if(numValues==1)return file.getUint16(entryOffset+8,!bigEnd);else{offset=numValues>2?valueOffset:entryOffset+8;vals=[];for(n= 0;ndataView.byteLength)return{};var thumbTags= readTags(dataView,tiffStart,tiffStart+IFD1OffsetPointer,IFD1Tags,bigEnd);if(thumbTags["Compression"])switch(thumbTags["Compression"]){case 6:if(thumbTags.JpegIFOffset&&thumbTags.JpegIFByteCount){var tOffset=tiffStart+thumbTags.JpegIFOffset;var tLength=thumbTags.JpegIFByteCount;thumbTags["blob"]=new Blob([new Uint8Array(dataView.buffer,tOffset,tLength)],{type:"image/jpeg"})}break;case 1:console.log("Thumbnail image format is TIFF, which is not implemented.");break;default:console.log("Unknown thumbnail image format '%s'", thumbTags["Compression"])}else if(thumbTags["PhotometricInterpretation"]==2)console.log("Thumbnail image format is RGB, which is not implemented.");return thumbTags}function getStringFromDB(buffer,start,length){var outstr="";for(var n=start;n0){json["@attributes"]={};for(var j=0;j0)for(var i=0;i=0});if(withAxes)chart.renderVerticalAxes(spec);chart.body.selectAll("g[data-gw-chart-series]").remove();gwCharts.lineChart.renderLine(chart,spec,"gw-chart-series",tooltipProvider,xValueProvider,yValueProvider,data,keys);if(spec.dualAxisSpec){var dualYValueProvider=function(d){return spec.dualAxisSpec.yScale(d.y)};var dualTooltipProvider= function(d,seriesName){return seriesName+": ("+gwCharts.getTooltipFormatter()(d.x)+"; "+gwCharts.getTooltipFormatter()(d.y)+")"};gwCharts.renderSecondAxisLine(chart,spec,spec.dualAxisSpec,xValueProvider,dualYValueProvider,dualTooltipProvider)}if(withAxes)chart.renderHorizontalAxes(spec,chart.xAxisDetails.scale)}}}});gw.globals.chartInitializers=gw.globals.chartInitializers||[]; gw.globals.chartInitializers.push(function(gw,gwCharts){var stackedBarChart=gwCharts.stackedBarChart={};var BAR_STROKE_WIDTH=1;stackedBarChart.initSeriesVisibility=gwCharts.initSeriesVisibilityForAxisChart;stackedBarChart.toggleOneActiveSeries=gwCharts.toggleOneActiveSeriesForAxisChart;stackedBarChart.toggleSeriesVisibility=gwCharts.toggleSeriesVisibilityForAxisChart;stackedBarChart.getXAxisTicks=gwCharts.createXAxisLabels;stackedBarChart.getRenderer=function(id,spec){var seriesDetails=gwCharts.seriesDetails(spec.data.series); var seriesCount=spec.data.series.length;var stack=d3.stack().offset(d3.stackOffsetDiverging).keys(d3.range(0,seriesCount));var stackedData=stack(spec.data.valuesPerCategory);var yAxisMinMaxRange=gwCharts.axisRange(spec.yaxis,gwCharts.stackedDataMinMaxYRange(stackedData));var xScaleFactory=function(chartWidth){return d3.scaleBand().padding(.2).domain(spec.data.categories).range([0,chartWidth])};var yScaleFactory=function(chartHeight){return gwCharts.getNumericalAxisScale(spec.yaxis,yAxisMinMaxRange, chartHeight)};var chart=new gwCharts.Chart(id,spec,yAxisMinMaxRange,xScaleFactory,yScaleFactory);return{render:function(withAxes){var activeSeriesKeys=gwCharts.getActiveSeriesKeys(spec.data.series);var data=d3.stack().offset(d3.stackOffsetDiverging).keys(activeSeriesKeys)(spec.data.valuesPerCategory);if(withAxes)chart.renderVerticalAxes(spec);chart.body.selectAll("g[data-gw-chart-series]").remove();chart.body.selectAll("g.gw-chart-series").data(data).enter().append("g").attr("data-gw-chart-series", function(d,i){return seriesDetails.getNormalizedName(activeSeriesKeys[i])}).attr("data-gw-dblclick","gwCharts.toggleOneActiveSeries").attr("class",function(d,i){return gwCharts.classes(seriesDetails.getClassNames(activeSeriesKeys[i]),"gw-chart-series")}).attr("fill",function(d,i){return seriesDetails.getCustomFillColor(activeSeriesKeys[i])}).attr("stroke",function(d,i){return seriesDetails.getCustomStrokeColor(activeSeriesKeys[i])}).each(function(seriesData,seriesIndex){var seriesName=spec.data.series[activeSeriesKeys[seriesIndex]].name; d3.select(this).selectAll("g.gw-chart-bar").data(seriesData).enter().append("g").attr("class","gw-chart-bar").each(function(barData,barIndex){var barGroupElement=d3.select(this);var hasCustomColor=seriesDetails.isCustomColor(activeSeriesKeys[seriesIndex]);drawBar(barGroupElement,barData,barIndex,seriesName,hasCustomColor)})});if(spec.dualAxisSpec)gwCharts.barChart.renderSecondAxisLine(chart,spec);if(spec.noData)gwCharts.noDataGridChart(chart,spec.noData);if(withAxes)chart.renderHorizontalAxes(spec, chart.xAxisDetails.scale)}};function drawBar(barGroupElement,barData,barIndex,seriesName,hasCustomColor){var barHeight=Math.abs(chart.yAxisDetails.scale(barData[0])-chart.yAxisDetails.scale(barData[1]));if(barHeight===0)return;var scaleBandwidth=chart.xAxisDetails.scale.bandwidth();var barWidth=gwCharts.barChart.getBarWidth(scaleBandwidth);var xOffset=getXOffset(scaleBandwidth,barWidth);var xCoord=chart.xAxisDetails.scale(spec.data.categories[barIndex])+xOffset;var yCoord=chart.yAxisDetails.scale(Math.max(barData[1], barData[0]))+(barData[0]<0?1:0);var isBaseBar=barData[0]===0||barData[1]===0;barGroupElement.append("rect").attr("class","gw-bar-element").attr("x",xCoord).attr("y",yCoord).attr("width",barWidth).attr("height",barHeight).attr("data-gw-tooltip",function(){return seriesName+": "+gwCharts.getTooltipFormatter()(barData[0]>=0?barData[1]-barData[0]:barData[0]-barData[1])});if(isBaseBar)barGroupElement.attr("stroke-dasharray",gwCharts.calculateBarStroke(barWidth,barHeight,barData[1]));else if(!hasCustomColor){var y= yCoord+(barData[1]<0?0:barHeight);barGroupElement.append("line").attr("class","gw-bars-separator").attr("x1",xCoord-BAR_STROKE_WIDTH).attr("y1",y).attr("x2",xCoord+barWidth+BAR_STROKE_WIDTH).attr("y2",y).attr("stroke-width",BAR_STROKE_WIDTH)}}function getXOffset(scaleBandwidth,barWidth){if(barWidth1||this.axisLabels.yAxisLabel.length>1||this.axisLabels.dualAxisLabel.length> 1)computeWidthAndHeight(this,chartSpec,rect);if(!isRoundTypeChart(chartSpec))possiblyChangeLabelOrientationToFitLabels(chartSpec,this,rect);var hasAxes=yScaleFactory&&xScaleFactory;if(hasAxes){this.yAxisDetails.scale=yScaleFactory(this.height);this.dualYAxisDetails.scale=chartSpec.dualAxisSpec?chartSpec.dualAxisSpec.yScale:null;this.yAxisDetails.ticksAmount=this.adaptYTicksAmount(this.yAxisDetails.scale);this.dualYAxisDetails.ticksAmount=this.dualYAxisDetails.scale?this.adaptYTicksAmount(this.dualYAxisDetails.scale): null;computeWidthAndHeight(this,chartSpec,rect);this.xAxisDetails={scale:xScaleFactory(this.width)}}this.body=this.svg.append("g").attr("transform","translate("+this.spacing.leftMargin+","+this.spacing.topMargin+")")};var isRoundTypeChart=function(chartSpec){return chartSpec.type==="Pie"||chartSpec.type==="Donut"};var computeWidthAndHeight=function(chart,chartSpec,rect){var isDonutOrPie=isRoundTypeChart(chartSpec);chart.spacing=isDonutOrPie?gw.globals.gwCharts.roundChart.calculateSpacing(rect,chartSpec): calculateSpacing(chart,chartSpec,chartHandlersByType()[chartSpec.type]);var totalStrokeOffset=isDonutOrPie?2*gw.globals.gwCharts.STROKE_WIDTH:0;chart.width=rect.width-chart.spacing.leftMargin-chart.spacing.rightMargin-totalStrokeOffset;chart.height=rect.height-chart.spacing.topMargin-chart.spacing.bottomMargin-totalStrokeOffset;chart.axisLabels=calculateAxisLabels(chart.svg,chartSpec,chart.height,chart.width)};var possiblyEllipsify=function(str,maxLength){if(str.length<=maxLength)return str.slice(0); return str.slice(0,maxLength-ELLIPSE_STR.length)+ELLIPSE_STR};function trimTextToMatchPxSize(chart,text,pxSize){if(chart.calculateLabelWidth(text)<=pxSize)return text;var minimal=text.length>3?text.substring(0,3)+ELLIPSE_STR:text;if(chart.calculateLabelWidth(minimal)>pxSize)return minimal;var trimmed=text.substring(0,text.length-1-ELLIPSE_STR.length);var candidate=trimmed+ELLIPSE_STR;while(chart.calculateLabelWidth(candidate)>pxSize){trimmed=trimmed.substring(0,trimmed.length-1);candidate=trimmed+ ELLIPSE_STR}return candidate}function splitLongLabel(words,svg,className,enclosingElement,pxSize){var resultChunks=[];var currentText="";var index=0;while(index0)resultChunks.push(currentText);return resultChunks}function splitSvgTextToMatchPxSize(svg,className,enclosingElement,text,pxSize){var totalTextWidth=textWidth(svg,className,enclosingElement,text);if(totalTextWidth>pxSize)return splitLongLabel(text.split(" "),svg,className,enclosingElement,pxSize);return[text]}var getRequiredLabelSize=function(labels,svg){var maxLabelLength= labels.map(function(category){return textWidth(svg,LABEL_CLASSES,"g",category)}).reduce(function(a,b){return Math.max(a,b)},0);return Math.min(MAX_LABEL_EM_WIDTH_HORIZONTAL*textHeight(svg,LABEL_CLASSES,"g"),maxLabelLength)};function isLineChart(chartType){return LINE_CHART_TYPES.indexOf(chartType)>=0}var possiblyChangeLabelOrientationToFitLabels=function(chartSpec,chart,rect){if(chartSpec.xaxis.labelOrientation&&chartSpec.xaxis.labelOrientation!=="Horizontal")return;var labels=chartSpec.data.categories|| chart.spacing.xAxis.labels;var spaceForLabel=getRequiredLabelSize(labels,chart.svg,false)+MIN_SPACE_BETWEEN_LABELS;var labelsFitAxis=chart.width/labels.length>spaceForLabel;var firstLabelFits=!isLineChart(chartSpec.type)||chart.calculateLabelWidth(labels[0])/20)labelChunk.attr("dy",textHeight(this.svg,AXIS_CLASSES,"g"))};charts.Chart.prototype.renderHorizontalAxes=function(chartSpec,scale){var axisSpec=chartSpec.xaxis;var axisGen=d3.axisBottom(scale).tickSizeOuter(0).tickPadding(TICK_PADDING_SIZE);if(axisSpec.dateFormat)axisGen.tickFormat(function(d){return gw.globals.gwCharts.timeSeriesChart.dateFormatter(axisSpec.dateFormat,d)});else if(axisSpec.useWholeNumbers&&!chartSpec.data.categories)axisGen.tickFormat(charts.formatWholeNumberTick); var labelOrientation=axisSpec.labelOrientation;var xAxis=this.body.append("g").attr("transform","translate(0,"+this.height+")").attr("class","gw-axis gw-x-axis").call(axisGen);var isCategoryData=!!chartSpec.data.categories;var chart=this;if(isCategoryData)var maxLabelWidth=getMaxLabelWidth(labelOrientation);var modXLabels=function(d,index){var self=d3.select(d);var textHeightPx=textHeight(d.ownerSVGElement,LABEL_CLASSES,"g");var currentText=self.text();if(isCategoryData)self.text(charts.formatTickLabel(currentText, chartSpec.xaxis.labelOrientation,chartSpec.data.categories.length,maxLabelWidth,chart,chartSpec.type,index));switch(labelOrientation){case "Vertical":self.attr("transform","rotate(90) translate("+textHeightPx+", -"+1.25*textHeightPx+")").style("text-anchor","start").classed("vertical-labels",true);break;case "Down45":self.attr("transform","rotate(45) translate("+.5*textHeightPx+", -"+.25*textHeightPx+")").style("text-anchor","start").classed("flip-45-labels",true);break;case "Up45":self.attr("transform", "rotate(315) translate(-"+.5*textHeightPx+", -"+.25*textHeightPx+")").style("text-anchor","end").classed("flip-45-labels",true);break;default:self.style("text-anchor","middle").classed("horizontal-labels",true)}self.attr("data-gw-tooltip",currentText)};xAxis.selectAll(".tick").selectAll("text").nodes().forEach(modXLabels);if(axisSpec.label){var axisLabel=this.body.append("text").attr("transform","translate("+this.width/2+" ,"+(this.height+this.spacing.xAxis.height+this.spacing.xAxisLabel.padding)+ ")").style("text-anchor","middle").attr("dy","1em").attr("class",AXIS_CLASSES+" gw-x-axis");chart.axisLabels.xAxisLabel.forEach(function(chunk,index){chart.appendLabelChunk(axisLabel,chunk,index)})}};charts.Chart.prototype.renderYAxis=function(axisSpec){var axisNode=this.body.append("g").attr("class","gw-axis gw-y-axis");var axisGen=d3.axisLeft(this.yAxisDetails.scale).ticks(this.yAxisDetails.ticksAmount).tickPadding(TICK_PADDING_SIZE);if(axisSpec.useWholeNumbers)axisGen.tickFormat(charts.formatWholeNumberTick); axisNode.call(axisGen);if(axisSpec.label)this.renderYAxisLabel()};charts.Chart.prototype.renderYAxisLabel=function(){var textChunks=this.axisLabels.yAxisLabel;var axisLabels=this.body.append("text").attr("transform","rotate(-90) translate("+-(this.height/2)+","+-(this.spacing.yAxis.width+this.spacing.yAxisLabel.padding+this.spacing.yAxisLabel.height*(textChunks.length-1))+")").style("text-anchor","middle").attr("class","gw-axisLabels-label gw-y-axisLabels");var chart=this;textChunks.forEach(function(chunk, index){chart.appendLabelChunk(axisLabels,chunk,index)})};charts.Chart.prototype.renderDualYAxis=function(axisSpec){var axisNode=this.body.append("g").attr("class","gw-axis gw-secondary-y-axis").attr("transform","translate( "+this.width+", 0 )");var axisGen=d3.axisRight(this.dualYAxisDetails.scale).ticks(this.dualYAxisDetails.ticksAmount).tickPadding(TICK_PADDING_SIZE);if(axisSpec.useWholeNumbers)axisGen.tickFormat(charts.formatWholeNumberTick);axisNode.call(axisGen);if(axisSpec.label)this.renderDualYAxisLabel()}; charts.Chart.prototype.renderDualYAxisLabel=function(){var axisLabels=this.body.append("text").attr("transform","rotate(-90) translate("+-(this.height/2)+","+(this.width+this.spacing.yAxis.dualAxisWidth+MAX_LABEL_EM_WIDTH_VERTICAL+this.spacing.yAxisLabel.padding)+")").style("text-anchor","middle").attr("class","gw-axis-label gw-secondary-y-axis");var chart=this;chart.axisLabels.dualAxisLabel.forEach(function(chunk,index){chart.appendLabelChunk(axisLabels,chunk,index)})};charts.Chart.prototype.renderHorizontalGrid= function(){var gridAxis=this.body.append("g").attr("class","gw-y-grid");var gridGen=d3.axisLeft(this.yAxisDetails.scale).ticks(this.yAxisDetails.ticksAmount).tickSize(-this.width).tickFormat("");gridAxis.call(gridGen)};charts.formatWholeNumberTick=function(num){return Math.floor(num)===num?num:""};charts.Chart.prototype.renderVerticalAxes=function(chartSpec){this.renderYAxis(chartSpec.yaxis);if(chartSpec.dualAxisSpec)this.renderDualYAxis(chartSpec.dualAxis);this.renderHorizontalGrid()};charts.Chart.prototype.adaptYTicksAmount= function(scale){var initialTicks=scale.ticks();var lineHeight=Math.floor(this.height/initialTicks.length);var suggestedTicksDetails={ticksAmount:initialTicks.length,startingValueMatches:true,endingValueMatches:true};var needsIncrease=lineHeight>Y_AXIS_MAX_LINE_HEIGHT;var needsDecrease=lineHeight0)return amount1}while((!startingValueMatches||!endingValueMatches)&&isReasonableAmount(ticksAmount)){ticksAmount+=transitionFactor;newTicks=scale.ticks(ticksAmount); startingValueMatches=startingValue===newTicks[0];endingValueMatches=endingValue===newTicks[newTicks.length-1]}return{ticksAmount:ticksAmount,startingValueMatches:startingValueMatches,endingValueMatches:endingValueMatches}}charts.seriesDetails=function(series){function strokeClassName(i){return series[i].stroke&&series[i].stroke.className||""}function fillClassName(i){return series[i].fill&&series[i].fill.className||""}return{getClassNames:function(serialIndex,offset){return this.isCustomColor(serialIndex)? charts.classes(strokeClassName(serialIndex),fillClassName(serialIndex)):this.getDefaultClassName(serialIndex,offset)},getDefaultClassName:function(serialIndex,offset){var index=serialIndex+1+(offset?offset:0);return"gw-chartcolor-"+index},getFillLegendClassName:function(serialIndex){return series[serialIndex].fill&&series[serialIndex].fill.legendClassName||""},getStrokeLegendClassName:function(serialIndex){return series[serialIndex].stroke&&series[serialIndex].stroke.legendClassName||""},getCustomFillColor:function(serialIndex){return this.isCustomColor(serialIndex)? series[serialIndex].fill&&series[serialIndex].fill.hexColor:""},getCustomStrokeColor:function(serialIndex){return this.isCustomColor(serialIndex)?series[serialIndex].stroke&&series[serialIndex].stroke.hexColor:""},isCustomColor:function(serialIndex){return series&&series[serialIndex]&&series[serialIndex].colorSet},getNormalizedName:function(serialIndex){return normalizeSeriesName(series[serialIndex])}}};function normalizeSeriesName(seriesDetails){if(!seriesDetails.name)return"";var escapedName=seriesDetails.name.replace(" ", "%20;").replace("'","%22;").replace('"',"%22;").replace("\x26","%26;").replace("\x3c","%3C;").replace("\x3e","%3E;");return escapedName+(seriesDetails.id?"-"+seriesDetails.id:"")}charts.redrawCharts=function(){Object.keys(renderedCharts).forEach(function(id){var chartSpec=renderedCharts[id];if(chartSpec!=null&&chartSpec.type)freshRender(id,chartSpec)})};charts.resize=function(){gw.globals.gwCharts.redrawCharts()};function freshRender(id,chartSpec){var chartNode=gw.globals.gwUtil.getDomNode("#"+id); gw.globals.gwCharts.cleanup(chartNode,chartSpec);setDefaultNumberFormat();getRenderer(id,chartSpec).render();renderedCharts[id]=chartSpec;registerChartExistenceObserver(id)}function registerChartExistenceObserver(id){if(chartObservers[id])return;var observer=new MutationObserver(function(){if(!document.getElementById(id)){delete renderedCharts[id];delete chartObservers[id];this.disconnect()}});observer.observe(gw.globals.gwUtil.getDomNode(document.body),{childList:true,subtree:true});chartObservers[id]= observer}var getDualAxisSpec=function(chart,chartSpec){if(chartSpec.dualData){var dualYScale=d3.scaleLinear().domain(dualAxisMinMaxRange(chartSpec)).range([chart.height,0]);return{chartType:chartSpec.dualType,yScale:dualYScale,data:chartSpec.dualData}}return null};charts.seriesMinMaxDataPointRange=function(data,dataPointValueAccessor){var dataPointIdxValues=data.reduce(function(acc,series){return acc.concat(series.reduce(function(acc2,dataPoint){return acc2.concat(dataPointValueAccessor(dataPoint))}, []))},[]);return[d3.min(dataPointIdxValues),d3.max(dataPointIdxValues)]};charts.categoryDataMinMaxYRange=function(data){var minY=d3.min(data.valuesPerCategory,function(arr){return d3.min(arr)});var maxY=d3.max(data.valuesPerCategory,function(arr){return d3.max(arr)});return[minY,maxY]};charts.stackedDataMinMaxYRange=function(data){if(data.length===0)return[0,0];var minY=d3.min(data.map(function(d){return d3.min(d,function(arr){return arr[0]})}));var maxY=d3.max(data.map(function(d){return d3.max(d, function(arr){return arr[1]})}));return[minY,maxY]};charts.axisRange=function(axisSpec,minMaxRange){var lowerBound=gw.globals.gwUtil.hasValue(axisSpec.lowerBound)?Math.min(axisSpec.lowerBound,minMaxRange[0]):minMaxRange[0];var upperBound=gw.globals.gwUtil.hasValue(axisSpec.upperBound)?Math.max(axisSpec.upperBound,minMaxRange[1]):minMaxRange[1];return[lowerBound,upperBound]};function dualAxisMinMaxRange(chartSpec){return gw.globals.gwCharts.axisRange(chartSpec.dualAxis,chartSpec.dualData.valuesPerCategory? gw.globals.gwCharts.categoryDataMinMaxYRange(chartSpec.dualData):gw.globals.gwCharts.seriesMinMaxDataPointRange(chartSpec.dualData.seriesValues,function(d){return d.y}))}charts.getNumericalAxisScale=function(axisSpec,domain,chartSize,isXAxis){var range=isXAxis?[0,chartSize]:[chartSize,0];return d3.scaleLinear().domain(domain).range(range).nice()};charts.getTicksValues=function(axisDetails,useWholeNumbers){var ticks=axisDetails.scale?axisDetails.scale.ticks(axisDetails.ticksAmount):d3.ticks(axisDetails.minMaxRange[0], axisDetails.minMaxRange[1],axisDetails.ticksAmount);if(useWholeNumbers)return ticks.map(function(tick){return charts.formatWholeNumberTick(tick)});var format=d3.formatSpecifier(",f");format.precision=d3.precisionFixed(ticks[1]-ticks[0]);var formatter=d3.format(format);return ticks.map(function(tick){return formatter(tick)})};charts.noDataGridChart=function(chart,message){chart.body.selectAll(".gw-chart-placeholder").remove();chart.body.selectAll(".gw-y-grid").append("g").attr("class","gw-chart-placeholder").append("text").attr("x", chart.width/2).attr("y",chart.height/2).attr("text-anchor","middle").text(message)};charts.renderToolTips=function(chart,spec,className,tooltipProvider,xValueProvider,yValueProvider,data,xOffset,seriesKeys,ignoreColorPalette){var tooltipsClassName=className+"-tooltips";var seriesDetails=charts.seriesDetails(spec.data.series);seriesKeys.forEach(function(i){chart.body.selectAll("g."+tooltipsClassName+"[data-gw-chart-series\x3d'"+seriesDetails.getNormalizedName(i)+"']").remove()});chart.body.selectAll("g."+ tooltipsClassName).data(data).enter().append("g").attr("data-gw-chart-series",function(d,i){return seriesDetails.getNormalizedName(seriesKeys[i])}).attr("data-gw-dblclick","gw.globals.gwCharts.toggleOneActiveSeries").attr("data-gw-refuse-focus",true).attr("transform",function(d,i){return"translate("+xOffset+", 0)"}).attr("class",tooltipsClassName).each(function(seriesData,seriesIndex){var seriesOffset=seriesKeys?seriesKeys[seriesIndex]:seriesIndex;var seriesName=spec.data.series[seriesOffset].name; d3.select(this).selectAll("circle.gw-chart-tooltip-circle").data(seriesData).enter().append("circle").attr("cx",xValueProvider).attr("cy",yValueProvider).attr("class",function(){return charts.classes("gw-chart-tooltip-circle",!ignoreColorPalette&&seriesDetails.getClassNames(seriesOffset))}).attr("stroke",function(){return seriesDetails.getCustomStrokeColor(seriesOffset)}).attr("stroke-width",gw.globals.gwCharts.STROKE_WIDTH).attr("fill",function(){return seriesDetails.getCustomFillColor(seriesOffset)}).attr("data-gw-tooltip", function(d){return tooltipProvider(d,seriesName)}).attr("r",TOOLTIP_CIRCLE_R)})};charts.renderSecondAxisLine=function(chart,spec,dualAxisSpec,xValueProvider,yValueProvider,tooltipProvider,options){var keys=gw.globals.gwCharts.getActiveSeriesKeys(dualAxisSpec.data.series);var dualAxisData=options&&options.transposeData?d3.transpose(dualAxisSpec.data.valuesPerCategory):dualAxisSpec.data.seriesValues;dualAxisData=dualAxisData.filter(function(serialValues,id){return keys.indexOf(id)>=0});var offsetData= options&&options.xOffset?{seriesCount:spec.data.series.length,xOffset:options.xOffset}:{seriesCount:spec.data.series.length};gw.globals.gwCharts.lineChart.renderLine(chart,dualAxisSpec,"gw-chart-series-dual",tooltipProvider,xValueProvider,yValueProvider,dualAxisData,keys,offsetData,true)};charts.toggleSeriesVisibility=function(eventNode){toggleSeriesVisibility(eventNode,false)};charts.toggleOneActiveSeries=function(eventNode){toggleSeriesVisibility(eventNode,true)};function toggleSeriesVisibility(eventNode, leaveOnlyOneActive){var $parentWidgetNode=$(eventNode).closest("div[class*\x3dChartPanelWidget]");var chartId=$parentWidgetNode.attr("id");var chartSpec=renderedCharts[chartId];if(!chartSpec.seriesTogglingAllowed)return;var renderer=getRenderer(chartId,chartSpec);var seriesTogglingMethod=leaveOnlyOneActive?"toggleOneActiveSeries":"toggleSeriesVisibility";var selectedSeriesName=$(eventNode).data().gwChartSeries;gw.globals.gwTooltips.hide();renderer[seriesTogglingMethod](chartSpec,selectedSeriesName, $parentWidgetNode[0]);renderer.render()}charts.cleanup=function(chartNode,chartSpec){chartSpec.renderer=null;var svgNode=gw.globals.gwUtil.getDomNode("svg",chartNode);var legendEntries=gw.globals.gwUtil.getDomNodes(".gw-chart-legend-entry",chartNode);for(var i=legendEntries.length-1;i>=0;i--)legendEntries[i].parentElement.removeChild(legendEntries[i]);gw.globals.gwUtil.removeNodeIfExists("g",svgNode);gw.globals.gwUtil.removeNodeIfExists("script",chartNode)};charts.getActiveSeriesKeys=function(seriesData){var keys= [];seriesData.forEach(function(data,index){if(data.active)keys.push(index)});return keys};charts.initSeriesVisibilityForRoundChart=function(chartSpec){chartSpec.data.categoriesVisibility=[];chartSpec.data.categories.forEach(function(){chartSpec.data.categoriesVisibility.push(true)})};charts.initSeriesVisibilityForAxisChart=function(chartSpec){getAllAvailableSeriesFromSpec(chartSpec).forEach(function(details,index){details.id=index;details.active=true})};charts.toggleSeriesVisibilityForRoundChart= function(chartSpec,selectedSeriesName,parentWidgetNode){var categories=chartSpec.data.categories;for(var i=0;i1)getAllAvailableSeriesFromSpec(chartSpec).filter(function(data){return normalizeSeriesName(data)!==selectedSeriesName}).forEach(function(data){data.active=false;switchOffLegendEntry(parentWidgetNode,normalizeSeriesName(data))});else getAllAvailableSeriesFromSpec(chartSpec).forEach(function(data){data.active=true;switchOnLegendEntry(parentWidgetNode,normalizeSeriesName(data))})};charts.toggleOneActiveSeriesForRoundChart= function(chartSpec,selectedSeriesName,parentWidgetNode){};charts.formatTickLabel=function(labelText,labelOrientation,noTicks,maxLabelWidth,chart,chartType,tickIndex){var labelSpacing=MIN_SPACE_BETWEEN_LABELS*(noTicks+1);if(labelOrientation==="Horizontal"){var maxLabelWidthPx=Math.floor((chart.width-labelSpacing)/noTicks);if(isLineChart(chartType)){if(tickIndex==0){var pxSize=chart.spacing?Math.min(maxLabelWidthPx,chart.spacing.leftMargin*2):maxLabelWidthPx;return trimTextToMatchPxSize(chart,labelText, pxSize)}if(tickIndex==noTicks-1){var pxSize=chart.spacing?Math.min(maxLabelWidthPx,chart.spacing.rightMargin*2):maxLabelWidthPx;return trimTextToMatchPxSize(chart,labelText,pxSize)}}return trimTextToMatchPxSize(chart,labelText,maxLabelWidthPx)}else return possiblyEllipsify(labelText,maxLabelWidth)};charts.createXAxisLabels=function(chartSpec,chart){var maxLabelWidth=getMaxLabelWidth(chartSpec.xaxis.labelOrientation);var xAxisLabels=[];gw.globals.gwUtil.forEach(chartSpec.data.categories,function(currentText, i){var labelChunks=charts.formatTickLabel(currentText,chartSpec.xaxis.labelOrientation,chartSpec.data.categories.length,maxLabelWidth,chart,chartSpec.type,i);xAxisLabels.push(labelChunks)});return xAxisLabels};charts.classes=function(){var classes=[];for(var i=0;i0)return formattedNumericValue+"; "+d3.format(".0%")(dataValue/valueSum);return formattedNumericValue};var visibleIndexes=[];chartSpec.data.categoriesVisibility.forEach(function(isVisible,index){if(isVisible)visibleIndexes.push(index)});var visibleCustomColors=colors&&colors.filter(function(color, i){return visibleIndexes.indexOf(i)>-1});var seriesDetails=gwCharts.seriesDetails(colors);wedges.append("path").attr("class",function(d,i){return gwCharts.classes(seriesDetails.getClassNames(visibleIndexes[i],colorsOffset),{"gw-chart-wedge":!(visibleCustomColors&&visibleCustomColors[i]&&visibleCustomColors[i].stroke)})}).attr("d",arc).attr("data-gw-tooltip",function(d,i){return activeCategories[i]+" ("+getValueDetailInfo(d.data)+")"}).attr("fill",function(d,i){return seriesDetails.getCustomFillColor(visibleIndexes[i])}).attr("stroke", function(d,i){return seriesDetails.getCustomStrokeColor(visibleIndexes[i])}).attr("stroke-width",gw.globals.gwCharts.STROKE_WIDTH).each(function(d){this._current=d})}}};roundChart.calculateSpacing=function(rect,chartSpec){var radius=Math.min(rect.width,rect.height)/2;return{leftMargin:chartSpec.insetPadding,rightMargin:chartSpec.insetPadding,topMargin:chartSpec.insetPadding+rect.height/2-radius,bottomMargin:chartSpec.insetPadding}}});gw.globals.chartInitializers=gw.globals.chartInitializers||[]; gw.globals.chartInitializers.push(function(gw,gwCharts){var timeSeriesChart=gwCharts.timeSeriesChart={};function createXScale(chartSpec,width){var minTimeValue=Math.min(chartSpec.dualData?chartSpec.dualData.minTimeValue:chartSpec.data.minTimeValue,chartSpec.data.minTimeValue);var maxTimeValue=Math.max(chartSpec.dualData?chartSpec.dualData.maxTimeValue:chartSpec.data.maxTimeValue,chartSpec.data.maxTimeValue);return d3.scaleTime().domain(gwCharts.axisRange(chartSpec.xaxis,[minTimeValue,maxTimeValue])).range([0, width]).nice()}timeSeriesChart.initSeriesVisibility=gwCharts.initSeriesVisibilityForAxisChart;timeSeriesChart.toggleOneActiveSeries=gwCharts.toggleOneActiveSeriesForAxisChart;timeSeriesChart.toggleSeriesVisibility=gwCharts.toggleSeriesVisibilityForAxisChart;timeSeriesChart.getXAxisTicks=function(chartSpec){return createXScale(chartSpec,100).ticks().map(function(tick){return timeSeriesChart.dateFormatter(chartSpec.xaxis.dateFormat,tick)})};timeSeriesChart.getRenderer=function(id,spec){var data=spec.data.seriesValues; var yAxisMinMaxRange=gwCharts.axisRange(spec.yaxis,gwCharts.seriesMinMaxDataPointRange(data,function(dataPoint){return dataPoint.y}));var xScaleFactory=function(chartWidth){return createXScale(spec,chartWidth)};var yScaleFactory=function(chartHeight){return gwCharts.getNumericalAxisScale(spec.yaxis,yAxisMinMaxRange,chartHeight)};var chart=new gwCharts.Chart(id,spec,yAxisMinMaxRange,xScaleFactory,yScaleFactory);var xValueProvider=function(d){return chart.xAxisDetails.scale(d.x)};var yValueProvider= function(d){return chart.yAxisDetails.scale(d.y)};var tooltipProviderFactory=function(dateFormat,numberFormatter){return function(d,seriesName){return seriesName+": ("+timeSeriesChart.dateFormatter(dateFormat,d.x)+"; "+numberFormatter(d.y)+")"}};return{render:function(withAxes){var keys=gwCharts.getActiveSeriesKeys(spec.data.series);var data=spec.data.seriesValues.filter(function(serialValues,id){return keys.indexOf(id)>=0});if(withAxes)chart.renderVerticalAxes(spec);chart.body.selectAll("g[data-gw-chart-series]").remove(); gwCharts.lineChart.renderLine(chart,spec,"gw-chart-time",tooltipProviderFactory(spec.xaxis.dateFormat,gwCharts.getTooltipFormatter()),xValueProvider,yValueProvider,data,keys);if(spec.dualAxisSpec){var dualYValueProvider=function(d){return spec.dualAxisSpec.yScale(d.y)};var dualAxisTooltipProvider=tooltipProviderFactory(spec.dualAxis.dateFormat,gwCharts.getTooltipFormatter());gwCharts.renderSecondAxisLine(chart,spec,spec.dualAxisSpec,xValueProvider,dualYValueProvider,dualAxisTooltipProvider)}if(withAxes)chart.renderHorizontalAxes(spec, chart.xAxisDetails.scale)}}};timeSeriesChart.dateFormatter=function(dateFormat,date){return d3.timeFormatLocale({dateTime:dateFormat,periods:gw.globals.gwLocale.getPeriods(),days:gw.globals.gwLocale.getWeekdays(),shortDays:gw.globals.gwLocale.getShortWeekdays(),months:gw.globals.gwLocale.getMonths(),shortMonths:gw.globals.gwLocale.getShortMonths()}).utcFormat("%c")(date)}});gw.globals.chartInitializers=gw.globals.chartInitializers||[]; gw.globals.chartInitializers.push(function(gw,gwCharts){var barChart=gwCharts.barChart={};var MAX_BAR_WIDTH=64;var BARS_INNER_PADDING=1;barChart.initSeriesVisibility=gwCharts.initSeriesVisibilityForAxisChart;barChart.toggleOneActiveSeries=gwCharts.toggleOneActiveSeriesForAxisChart;barChart.toggleSeriesVisibility=gwCharts.toggleSeriesVisibilityForAxisChart;barChart.getXAxisTicks=gwCharts.createXAxisLabels;barChart.getRenderer=function(id,spec){var minMaxRange=gwCharts.categoryDataMinMaxYRange(spec.data); var yAxisMinMaxRange=gwCharts.axisRange(spec.yaxis,[Math.min(minMaxRange[0],0),minMaxRange[1]]);var yScaleFactory=function(chartHeight){return gwCharts.getNumericalAxisScale(spec.yaxis,yAxisMinMaxRange,chartHeight)};var xScaleFactory=function(chartWidth){return d3.scaleBand().padding(.2).domain(spec.data.categories).range([0,chartWidth])};var chart=new gwCharts.Chart(id,spec,yAxisMinMaxRange,xScaleFactory,yScaleFactory);var seriesDetails=gwCharts.seriesDetails(spec.data.series);var dualAxisSeriesCount= spec.dualAxisSpec?spec.dualAxisSpec.data.series.length:0;return{render:function(withAxes){var keys=gwCharts.getActiveSeriesKeys(spec.data.series);var data=d3.transpose(spec.data.valuesPerCategory).filter(function(serialValues,id){return keys.indexOf(id)>=0});var xBandScale=d3.scaleBand().domain(d3.range(0,dualAxisSeriesCount+data.length)).range([0,chart.xAxisDetails.scale.bandwidth()]).paddingInner(BARS_INNER_PADDING/chart.xAxisDetails.scale.bandwidth());if(withAxes)chart.renderVerticalAxes(spec); chart.body.selectAll("g[data-gw-chart-series]").remove();chart.body.selectAll("g.gw-chart-series").data(data).enter().append("g").attr("data-gw-chart-series",function(d,i){return seriesDetails.getNormalizedName(keys[i])}).attr("data-gw-dblclick","gwCharts.toggleOneActiveSeries").attr("class",function(d,i){return gwCharts.classes(seriesDetails.getClassNames(keys[i]),"gw-chart-series")}).attr("fill",function(d,i){return seriesDetails.getCustomFillColor(keys[i])}).attr("stroke",function(d,i){return seriesDetails.getCustomStrokeColor(keys[i])}).attr("transform", function(d,i){return"translate("+xBandScale(i)+", 0)"}).each(function(seriesData,seriesIndex){var seriesOffset=keys[seriesIndex];var seriesName=spec.data.series[seriesOffset].name;var scaleBandwidth=xBandScale.bandwidth();var barWidth=barChart.getBarWidth(scaleBandwidth);var barHeightProvider=function(d){return Math.abs(chart.yAxisDetails.scale(d)-chart.yAxisDetails.scale(0))};d3.select(this).selectAll("rect.gw-chart-bar").data(seriesData).enter().append("rect").attr("class","gw-chart-bar").attr("x", function(d,i){var xOffset=getXOffset(scaleBandwidth,barWidth,seriesIndex,keys.length);return chart.xAxisDetails.scale(spec.data.categories[i])+xOffset}).attr("y",function(d){var yPosition=chart.yAxisDetails.scale(Math.max(0,d));return d<0?yPosition+1:yPosition}).attr("data-gw-tooltip",function(d){return seriesName+": "+gwCharts.getTooltipFormatter()(d)}).attr("width",barWidth).attr("height",function(d){return Math.abs(chart.yAxisDetails.scale(d)-chart.yAxisDetails.scale(0))}).attr("stroke-dasharray", function(d){return gwCharts.calculateBarStroke(barWidth,barHeightProvider(d),d)})});if(spec.dualAxisSpec)barChart.renderSecondAxisLine(chart,spec);if(spec.noData)gwCharts.noDataGridChart(chart,spec.noData);if(withAxes)chart.renderHorizontalAxes(spec,chart.xAxisDetails.scale)}};function getXOffset(scaleBandwidth,barWidth,seriesIndex,seriesCount){var offset=scaleBandwidth-barWidth;if(offset===0)return offset;var middleSeriesIndex=seriesCount/2;var evenSeriesCount=seriesCount%2==0;var oddSeriesFactor= evenSeriesCount?0:.5;var oddSeriesOffset=evenSeriesCount?0:offset/2;if(seriesIndex=0});if(withAxes)chart.renderVerticalAxes(spec);chart.body.selectAll("g[data-gw-chart-series]").remove();gwCharts.lineChart.renderLine(chart,spec,"gw-chart-series",tooltipProvider, xValueProvider,yValueProvider,data,keys);if(spec.dualAxisSpec){var dualYValueProvider=function(d){return spec.dualAxisSpec.yScale(d)};gwCharts.renderSecondAxisLine(chart,spec,spec.dualAxisSpec,xValueProvider,dualYValueProvider,tooltipProvider,{transposeData:true})}if(withAxes)chart.renderHorizontalAxes(spec,chart.xAxisDetails.scale)}}};lineChart.renderLine=function(chart,spec,className,tooltipProvider,xValueProvider,yValueProvider,data,seriesKeys,offset,ignoreColorPalette){var selectName="g."+className; var xOffset=offset&&offset.xOffset?offset.xOffset:0;var seriesDetails=gwCharts.seriesDetails(spec.data.series);var lineGen=d3.line().x(xValueProvider).y(yValueProvider);chart.body.selectAll(selectName).data(data).enter().append("g").attr("data-gw-chart-series",function(d,i){return seriesDetails.getNormalizedName(seriesKeys[i])}).attr("data-gw-dblclick","gwCharts.toggleOneActiveSeries").attr("transform",function(){return"translate("+xOffset+", 0)"}).attr("class",function(d,i){return gwCharts.classes(!ignoreColorPalette&& seriesDetails.getClassNames(seriesKeys[i]),className)}).append("path").attr("stroke",function(d,i){return seriesDetails.getCustomStrokeColor(seriesKeys[i])}).attr("stroke-width",LINE_STROKE_WIDTH).style("fill","none").attr("d",lineGen);var seriesPointSelectName="g."+className+"-series-point";var circleClassName=className+"-circle";chart.body.selectAll(seriesPointSelectName).data(data).enter().append("g").attr("data-gw-chart-series",function(d,i){return seriesDetails.getNormalizedName(seriesKeys[i])}).attr("data-gw-dblclick", "gwCharts.toggleOneActiveSeries").attr("transform",function(d,i){return"translate("+xOffset+", 0)"}).attr("class",className+"-series-point").each(function(seriesData,seriesIndex){var seriesOffset=seriesKeys?seriesKeys[seriesIndex]:seriesIndex;d3.select(this).selectAll("circle."+circleClassName).data(seriesData).enter().append("circle").attr("class",className+"-circle").attr("cx",xValueProvider).attr("cy",yValueProvider).attr("class",function(){return gwCharts.classes(!ignoreColorPalette&&seriesDetails.getClassNames(seriesOffset), circleClassName)}).attr("stroke",function(){return seriesDetails.getCustomStrokeColor(seriesOffset)}).attr("fill",function(){return seriesDetails.getCustomFillColor(seriesOffset)}).attr("r",LINE_CIRCLE_R).attr("stroke-width",LINE_STROKE_WIDTH)});if(spec.noData)gwCharts.noDataGridChart(chart,spec.noData);gwCharts.renderToolTips(chart,spec,className,tooltipProvider,xValueProvider,yValueProvider,data,xOffset,seriesKeys,ignoreColorPalette)}});gw.globals.chartInitializers=gw.globals.chartInitializers||[]; gw.globals.chartInitializers.push(function(gw,gwCharts){var areaChart=gwCharts.areaChart={};areaChart.initSeriesVisibility=gwCharts.initSeriesVisibilityForAxisChart;areaChart.toggleOneActiveSeries=gwCharts.toggleOneActiveSeriesForAxisChart;areaChart.toggleSeriesVisibility=gwCharts.toggleSeriesVisibilityForAxisChart;areaChart.getXAxisTicks=gwCharts.createXAxisLabels;areaChart.getRenderer=function(id,spec){var className="gw-chart-series";var seriesCount=spec.data.series.length;var stack=d3.stack().offset(d3.stackOffsetDiverging).keys(d3.range(0, seriesCount));var stackedData=stack(spec.data.valuesPerCategory);var yAxisMinMaxRange=gwCharts.axisRange(spec.yaxis,gwCharts.stackedDataMinMaxYRange(stackedData));var categories=spec.data.categories;var xScaleFactory=function(chartWidth){return d3.scalePoint().domain(categories).range([0,chartWidth])};var yScaleFactory=function(chartHeight){return gwCharts.getNumericalAxisScale(spec.yaxis,yAxisMinMaxRange,chartHeight)};var chart=new gwCharts.Chart(id,spec,yAxisMinMaxRange,xScaleFactory,yScaleFactory); var tooltipProvider=function(d,seriesName){return seriesName+": "+gwCharts.getTooltipFormatter()(Math.abs(d[0])