Dashboard
PHP:
8.0.30
OS:
Linux
User:
fouamico
/
/
home4
/
fouamico
/
public_html
/
mitsucap
/
sr-calculator
/
js
đ€ Upload
đ New File
đ New Folder
Close
Editing: Graph.js
class Graph extends Variable { constructor(id, name, standartValue, format, subtitle, param) { super(id, name, format); this.obj = $('<div class="value"/>').appendTo(Graph.container); this.obj.attr('id', this.id); this.title = $('<div class="title"/>').appendTo(this.obj); this.title.text(name); this.subtitle = $('<div class="subtitle"/>').appendTo(this.obj); this.subtitle.text(subtitle); this.input = $('<div class="input"/>').appendTo(this.obj); this.inputNode = $('<input type="text"/>'); this.value = standartValue; this.inputNode.appendTo(this.input).val(this.formated(this.value)).change($.proxy(this.inputHandle, this)); this.standartValue = this.value; this.reset = $('<div class="reset"/>').appendTo(this.obj); if (Graph.svgs.reset.path === undefined) this.reset.html(Graph.svgs.reset); this.reset.click($.proxy(this.resetHandle, this)); this.reset.addClass('hidden'); this.graph = $('<div class="graph"/>').appendTo(this.obj); this.sliderDiv = $('<div class="sliderDiv"/>').appendTo(this.obj); this.slider = $('<div class="slider"/>').appendTo(this.sliderDiv); this.slider.slider({ min: param.min, max: param.max, step: (param.step < 1 ? param.step : 1), value: standartValue, slide: $.proxy(this.sliderHandle, this) }); this.arrow = $('<div class="arrow"/>').appendTo(this.slider.find('.ui-slider-handle')); if (Graph.svgs.arrow.path === undefined) this.arrow.html(Graph.svgs.arrow); this.tooltip = $('<div class="tooltip"/>').appendTo(this.slider.find('.ui-slider-handle')); this.num = $('<div class="num"/>').appendTo(this.slider.find('.ui-slider-handle')); this.num.text(this.formated()); this.ruler = $('<div class="ruler"/>').appendTo(this.obj); this.parameters = param; Graph.list[id] = this; } draw() { var data = []; var savedVal = this.value; for (this.value = this.parameters.min; this.value <= this.parameters.max; this.value += this.parameters.step) { data.push(Variable.list.fValue.count(false, true)); } this.HC.series[0].setData(data, true); this.value = savedVal; } resetHandle() { this.value = this.standartValue; this.inputNode.val(this.formated(this.value)); this.slider.find('.ui-slider-handle').css('transition', '200ms'); setTimeout(function() { this.slider.find('.ui-slider-handle').css('transition', ''); }, 200); this.slider.slider('option', 'value', this.value); this.change(); } inputHandle() { this.value = this.inputNode.val().replace(/[^\d.]/g,''); this.inputNode.val(this.formated(this.value)); this.slider.slider('option', 'value', this.value); this.change(); } sliderHandle(event, ui) { this.value = ui.value; this.inputNode.val(this.formated(ui.value)); this.change(); } change() { if (this.value == this.standartValue) this.reset.addClass('hidden'); else this.reset.removeClass('hidden'); Graph.drawAll(this.id); CountVariable.recountAndPrintAll(); this.coloriseColumn(); //let mainVal = Variable.list.fValue.formated(); for (let id in Graph.list) { let graph = Graph.list[id]; graph.tooltip.text(graph.formated()); graph.styleTooltip(); } this.num.text(this.formated()); } styleTooltip() { let colomnNum = Math.round((this.value - this.parameters.min) / this.parameters.step); let height = - this.graph.find('.highcharts-series .highcharts-point').eq(colomnNum).height() - 12; if (height > -35) height = -35; this.tooltip.css({ left: -this.tooltip.width() / 2, top: height }); this.num.css({left: -this.num.width() / 2 + 7}) } coloriseColumn() { this.graph.find('.highcharts-series .highcharts-point.colored').removeClass('colored'); let colomnNum = Math.round((this.value - this.parameters.min) / this.parameters.step); this.graph.find('.highcharts-series .highcharts-point').eq(colomnNum).addClass('colored'); } } Graph.drawAll = function(ignoreId = null) { for (let id in Graph.list) { if (id == ignoreId) continue; Graph.list[id].draw(); } }; Graph.list = {}; Graph.standartHighchartsCreate = { chart: { type: 'column', margin: 0, }, tooltip: {enabled: false}, title: {text: null}, subtitle: {text: null}, yAxis: { min: 0, lineWidth: 0, minorGridLineWidth: 0, lineColor: 'transparent', title: {text: 'Future value'}, labels: {enabled: true}, minorTickLength: 0, tickLength: 0, gridZIndex: 10, gridLineColor: '#ffffff' }, xAxis: { lineWidth: 0, minorGridLineWidth: 0, lineColor: 'transparent', title: {text: null}, labels: {enabled: false}, minorTickLength: 0, tickLength: 0 }, series: [{ name: null, data: [] }], plotOptions: { column: { pointPadding: 0, groupPadding: 0, borderWidth: 1, shadow: false, } }, legend: {enabled: false} }; Graph.svgs = { //members will represent SVG code after loaded arrow: {path: 'css/svg/arrow.svg'}, reset: {path: 'css/svg/cross.svg'} }; Graph.loadSVG = function() { for (let key in this.svgs) { let svg = this.svgs[key]; $.get({ url: svg.path, context: {key: key}, success: function (data) { Graph.svgs[this.key] = data.getElementsByTagName('svg')[0].outerHTML; for (let id in Graph.list) Graph.list[id][key].html(Graph.svgs[this.key]); } }); } }; Graph.afterLessLoad = function() {//add graph and data, configure slider steps var mainVal = Variable.list.fValue.formated(); for (let id in Graph.list) { let graph = Graph.list[id]; graph.HC = Highcharts.chart(graph.graph.get(0), Graph.standartHighchartsCreate); graph.HC.container.getElementsByClassName('highcharts-credits')[0].remove(); graph.draw(); let stepWidth = graph.graph.find('.highcharts-series rect:eq(0)').width(); let handleWidth = graph.slider.find('.ui-slider-handle').width(); graph.slider.css({ left: 5 + stepWidth / 2 - handleWidth / 2, right: 7 + stepWidth / 2 - handleWidth / 2 + handleWidth, }); graph.tooltip.text(graph.formated()); graph.coloriseColumn(); graph.styleTooltip(); } };
Save
Cancel