let canvas, parent, legend, dataDiv, table;
const urlParams = new URLSearchParams(window.location.search);
const graph_code = urlParams.get('code');
validateUser(graph_code);
let rcTarget = {};
$(document).ready( function () {
canvas = document.getElementById("graphCanvas");
parent = document.getElementById("graphDiv");
legend = document.getElementById("graphLegend");
dataDiv = document.getElementById("dataDiv");
table = new Table(document.getElementById("dataTable"));
document.getElementById('upload').addEventListener('change', handleFileSelect, false);
load_data();
table.reloadEvLi();
reloadShares();
//Click
document.addEventListener('mousemove', (e) => {
const pos = {
x: e.clientX - canvas.offsetLeft,
y: e.clientY - canvas.offsetTop
};
let obj = checkHit(pos);
//show point value
if (obj !== null) {
dataDiv.style.left = pos.x + canvas.offsetLeft + "px";
dataDiv.style.top = pos.y + canvas.offsetTop + "px";
dataDiv.style.display = "block";
dataDiv.innerHTML = "" + obj.name + "
" + obj.value + "
"; } else { dataDiv.style.display = "none"; } }); $("#exportBtn").on('click', function (e) { table.reloadData(); exportData('tableData'); }); $("#saveBtn").on('click', function (e) { table.reloadData(); save_data(); }); $("#drawBtn").on('click', function (e) { table.reloadData(); submitData(); }); //RIGHT CLICK menu $(document).bind("click", function(event) { document.getElementById("rcMenu").style.display = "none"; }); //odebere řádek $("#rcDelRow").on('click', function (e) { e.preventDefault(); if (rcTarget.parentElement.parentElement.tagName === "THEAD") return; table.removeRow(rcTarget.parentElement); }); //přidá řádek $("#rcAddRow").on('click', function (e) { e.preventDefault(); table.addRow(table, rcTarget); }); //odebere sloupec $('#rcDelCol').on('click', function (e) { e.preventDefault(); table.removeCol(getCellIndex(rcTarget)); }); //přidá sloupec $('#rcAddCol').on('click', function (e) { e.preventDefault(); table.addCol(getCellIndex(rcTarget)); }); //Sharing $('#shareBtn').on('click', function (e) { e.preventDefault(); let username = document.getElementById("shareUsername").value; addShare(username); }); }); //Resize $(window).on('resize', function () { resizeCanvas(canvas, parent); table.reloadData(); drawChart(getSettings(), table.data); }); function handleFileSelect(evt) { let files = evt.target.files; table.importData(files[0], table); } function submitData() { table.reloadData(); drawChart(getSettings(), table.data); } function save_data() { table.reloadData(); let settings = getSettings(); $.ajax({ url: "php/save_data.php", type: "post", dataType: "text", data: {code: graph_code, data: JSON.stringify(table.data), settings: JSON.stringify(settings), name:settings.title}, success: function (result) { //alert("Saved successfully " + result); } }); } function load_data() { $.ajax({ url: "php/load_data.php", type: "post", dataType: "json", data: {code: graph_code}, success: function (result) { if (result.data == null) { alert("Error: no data found"); return; } table.data = JSON.parse(result.data); table.updateTable(); if (result.settings == null) { alert("Error: no graph settings found"); } else { loadSettings(JSON.parse(result.settings)); } drawChart(getSettings(), table.data); } }) } function getCellIndex(cell) { let parent = cell.parentElement; let children = Array.from(parent.children); for (let i = 0; i < children.length; i++){ if (children[i] === cell) { return i; } } } //Nastavení grafu function getSettings() { return { type: document.getElementById('graph_types').value, y_step: parseFloat(document.getElementById('y_step').value), b_color: ((document.getElementById('enableBgColor').checked) ? document.getElementById('graphBgColor').value : null), display_legend: document.getElementById("displayLegend").checked, display_points: document.getElementById("displayPoints").checked, display_support_lines: document.getElementById("displaySupportLines").checked, title: document.getElementById("graphTitle").value, display_title: document.getElementById("displayTitle").checked, margin: parseFloat(document.getElementById("graphMargin").value), custom_x_values: document.getElementById('customXValues').value, x_label: document.getElementById('xLabel').value, y_label: document.getElementById('yLabel').value, }; } function loadSettings(new_settings) { document.getElementById('graph_types').value = new_settings.type; document.getElementById('y_step').value = new_settings.y_step; if (new_settings.b_color !== null) { document.getElementById('graphBgColor').value = new_settings.b_color; document.getElementById('enableBgColor').checked = true; } document.getElementById("displayLegend").checked = new_settings.display_legend; document.getElementById("displayPoints").checked = new_settings.display_points; document.getElementById("displaySupportLines").checked = new_settings.display_support_lines; document.getElementById("graphTitle").value = new_settings.title; document.getElementById("displayTitle").checked = new_settings.display_title; document.getElementById("graphMargin").value = new_settings.margin; document.getElementById('customXValues').value = new_settings.custom_x_values; document.getElementById('xLabel').value = new_settings.x_label; document.getElementById('yLabel').value = new_settings.y_label; } //Sdílení grafu function reloadShares() { $.ajax({ url: "php/load_shares.php", type: "post", dataType: "text", data: {code: graph_code}, success: function(result) { document.getElementById("shareList").innerHTML = result; } }); } function removeShare(username) { $.ajax({ url: "php/remove_share.php", type: "post", dataType: "text", data: {username: username, code: graph_code}, success: function(result) { reloadShares(); } }); } function addShare(username) { $.ajax({ url: "php/add_share.php", type: "post", dataType: "text", data: {username: username, code: graph_code}, success: function(result) { //alert(result); validateUser(graph_code); reloadShares(); } }); }