Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
- <script>
- google.charts.load('current', {'packages':['corechart']});
- document.addEventListener("DOMContentLoaded", function () {
- const CHART_WIDTH = 700, CHART_HEIGHT = 200;
- let chartContainer, chart;
- let TD_SPAN = 1;
- function buildChart() {
- // <div id="curve_chart" style="width: 900px; height: 500px"></div>
- chartContainer = document.createElement("tr");
- const td = document.createElement("td");
- td.setAttribute("colspan", TD_SPAN);
- td.setAttribute("align", "right");
- td.setAttribute("style", "position: relative;");
- chartContainer.appendChild(td);
- chart = document.createElement("div");
- chart.setAttribute("id", "curve_chart");
- chart.setAttribute("style", `width: ${CHART_WIDTH}px; height: ${CHART_HEIGHT}px`);
- td.appendChild(chart);
- const close = document.createElement("div");
- close.innerHTML = "❌";
- td.appendChild(close);
- close.setAttribute("style", "position: absolute; top: 5px; right: 5px; cursor: pointer;");
- close.onclick = closeChart;
- }
- function closeChart() {
- chartContainer.parentElement.removeChild(chartContainer);
- chart = null;
- }
- let lastCutLinkClicked;
- const rows = Array.from(document.querySelectorAll("table tr"));
- if (rows.length > 0) TD_SPAN = rows[0].querySelectorAll("td").length;
- rows.forEach(function (row) {
- const cut = row.querySelector(".cutprice");
- cut.onclick = function (event) {
- if (event.target === lastCutLinkClicked) {
- closeChart();
- lastCutLinkClicked = null;
- return;
- }
- lastCutLinkClicked = event.target;
- if (!chart) buildChart();
- const tr = event.target.closest("tr");
- tr.insertAdjacentElement("afterend", chartContainer);
- const link = event.target.closest("a");
- const data = link.getAttribute("history");
- const options = {
- currency: link.getAttribute("currency")
- }
- setTimeout(function () {
- drawChart(data, options);
- }, 1);
- event.preventDefault();
- };
- });
- function drawChart(dataToPlot, options) {
- var splitData = dataToPlot.split(";");
- var splitData = splitData.filter(function (el) {
- return el !== "";
- });
- var firstDate = new Date(toDate(splitData[0].split(',')[0]));
- var lastDate = new Date(toDate(splitData[splitData.length - 1].split(',')[0]));
- var dateDifference = daysBetween(firstDate, lastDate);
- // console.log(dateDifference);
- var datePeriodArray = [];
- datePeriodArray.push(firstDate);
- for (var i = 1; i <= dateDifference; i++) {
- let nextDate = new Date(firstDate.getFullYear(), firstDate.getMonth(), firstDate.getDate());
- nextDate.setDate(firstDate.getDate() + i);
- datePeriodArray.push(nextDate);
- }
- var DateKeyDataArray = new Object();
- splitData.forEach(function(el, index){
- var elParts = el.split(',');
- DateKeyDataArray[toDate(elParts[0])] = parseInt(elParts[1]) / 100.0;
- });
- var finalDataArray = [['Date', 'Price']];
- var lastStablePricePoint = null;
- for (var i in datePeriodArray) {
- var priceValue = DateKeyDataArray[datePeriodArray[i]];
- if(priceValue == null){
- priceValue = lastStablePricePoint;
- }
- lastStablePricePoint = priceValue;
- var dataPointArray = [datePeriodArray[i], priceValue];
- finalDataArray.push(dataPointArray);
- }
- // console.log(finalDataArray);
- var oneMonthStepprDateArray = [];
- for (var i = 1; i <= 30; i++) {
- let previousDate = new Date();
- previousDate.setDate(previousDate.getDate() - i);
- oneMonthStepprDateArray.unshift(previousDate);
- }
- function _draw(dataArray) {
- const data = google.visualization.arrayToDataTable(dataArray);
- const formatter = new google.visualization.NumberFormat({decimalSymbol: '.', groupingSymbol: ',', prefix: `${options.currency} `});
- formatter.format(data, 1);
- var chartOptions = {
- // title: `Price`,
- curveType: 'none',
- interpolateNulls: true,
- // legend: { position: 'bottom' },
- legend: 'none',
- // width: CHART_WIDTH,
- // height: CHART_HEIGHT,
- // trendlines: {
- // 0: {
- // type: 'linear',
- // color: 'green',
- // lineWidth: 3,
- // opacity: 0.3,
- // showR2: false,
- // visibleInLegend: false
- // }
- // },
- /* explorer: {
- keepInBounds: true,
- axis: "horizontal",
- }, */
- "chartArea": {
- "width": "85%",
- "height": "85%"
- },
- hAxis: {
- // ticks: oneMonthStepprDateArray,
- gridlines: {
- // opacity: 0,
- color: "white",
- // count: 0,
- },
- format: "yyyy-MM-dd",
- textStyle: {
- fontSize : 9,
- },
- },
- vAxis: {
- // format: "currency",
- textStyle: {
- fontSize : 11,
- },
- },
- };
- (new google.visualization.LineChart(chart)).draw(data, chartOptions);
- }
- function treatAsUTC(date) {
- var result = new Date(date);
- result.setMinutes(result.getMinutes() - result.getTimezoneOffset());
- return result;
- }
- function daysBetween(startDate, endDate) {
- var millisecondsPerDay = 24 * 60 * 60 * 1000;
- return (treatAsUTC(endDate) - treatAsUTC(startDate)) / millisecondsPerDay;
- }
- function toDate(dateStr) {
- var parts = dateStr.split("-");
- return new Date(parseInt(parts[0]), parseInt(parts[1] - 1), parseInt(parts[2]));
- }
- _draw(finalDataArray);
- }
- });
- </script>
Add Comment
Please, Sign In to add comment