openui5-financial-charts
Version:
OpenUI5 Financial Charts based on d3.js
1 lines • 2.42 kB
JavaScript
sap.ui.define(["sap/ui/core/Control","sap/ui/core/ResizeHandler","./TimeAxis","./ValueAxis","./library","./thirdparty/d3","./thirdparty/moment-with-locales"],function(t,i,e,s){"use strict";return t.extend("openui5.financial.chart.Chart",{metadata:{library:"openui5.financial.chart",properties:{height:{type:"string",defaultValue:"100%"},width:{type:"string",defaultValue:"100%"},padding:{type:"string",defaultValue:"0"},start:"string",end:"string",period:{type:"float",defaultValue:1}},aggregations:{_timeAxis:{type:"openui5.financial.chart.TimeAxis",multiple:false},_valueAxis:{type:"openui5.financial.chart.ValueAxis",multiple:false},series:{type:"openui5.financial.chart.Series",multiple:true}},defaultAggregation:"series"},init:function(){this.setAggregation("_timeAxis",new e);this.setAggregation("_valueAxis",new s);i.register(this,this.onResize.bind(this))},onResize:function(t){this._fWidth=t.size.width;this._fHeight=t.size.height;this._draw()},setStart:function(t){this.setProperty("start",t,true)},setEnd:function(t){this.setProperty("end",t,true)},setPeriod:function(t){this.setProperty("period",t,true)},bindAggregation:function(t,i){if(!i.length)i.length=1e6;return sap.ui.core.Control.prototype.bindAggregation.apply(this,arguments)},setPadding:function(t){var i=t.split(" ");var e=i.length;this._fPaddingTop=+i[0];this._fPaddingRight=+i[e===1?0:1];this._fPaddingBottom=+i[e<3?0:2];this._fPaddingLeft=+i[e===1?0:e===4?3:1];this.setProperty("padding",t,true)},onAfterRendering:function(){this._svg=d3.select("#"+this.getId()).select("svg");this._draw()},_draw:function(){if(!this._fWidth||!this._fHeight||!this._fPaddingTop)return;var t=this._fWidth;this._svg.attr("width",t);this._fPlotAreaWidth=t-this._fPaddingLeft-this._fPaddingRight;this.getAggregation("_timeAxis").setRange([0,this._fPlotAreaWidth]);var i=this._fHeight;this._svg.attr("height",i);this._fPlotAreaHeight=i-this._fPaddingBottom-this._fPaddingTop;this.getAggregation("_valueAxis").setRange([this._fPlotAreaHeight,0]);this.getAggregation("_valueAxis")._draw();this.getAggregation("_timeAxis")._draw();var e=this.getSeries();for(var s=0;s<e.length;s++){e[s]._draw()}},refresh:function(){var t=this.getSeries();this.getAggregation("_valueAxis").setDomain([d3.min(t,t=>t._getMin()),d3.max(t,t=>t._getMax())]);this.getAggregation("_timeAxis").setDomain([moment(this.getStart()).toDate(),moment(this.getEnd()).toDate()]);this._draw()}})});