<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>ZingSoft Demo</title> <script nonce="undefined" src="https://cdn.zingchart.com/zingchart.min.js"></script> <style> html, body, #myChart { height: 100%; width: 100%; } #mask { position: absolute; top: 0; bottom: 0; left: 0; right: 0; background-color: #FFF; z-index: 500; opacity: .5; visibility: hidden; } form { background-color: #E0E0E0; height: 50px; width: 300px; position: fixed; top: calc(50% - 25px); left: calc(50% - 150px); z-index: 1000; padding: 10px; border-radius: 5px; opacity: 1; visibility: hidden; } </style> </head> <body> <div id="mask"></div> <form> <label>Marker text:</label> <input type="text" id="marker-text"> <hr> <button onclick="return drawMarker();">Submit</button> </form> <div id='myChart'></div> <script> ZC.LICENSE = ["569d52cefae586f634c54f86dc99e6a9", "b55b025e438fa8a98e32482b5f768ff5"]; var myConfig = { type: "line", title: { text: 'Click on scale text (items)' }, plot: { tooltip: { visible: false } }, crosshairX: {}, "scale-x": { markers: [], labels: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], item: { flat: false, cursor: 'hand' }, label: { text: "Click scale text numbers" } }, "scale-y": { markers: [], item: { flat: false, cursor: 'hand' } }, series: [{ values: [35, 42, 67, 89, 25, 34, 67] }, { values: [35, 42, 67, 89, 25, 34, 67].sort() } ] }; zingchart.render({ id: 'myChart', data: myConfig, height: '100%', width: '100%' }); function Marker(index) { return { type: 'line', lineColor: '#8BC34A', lineWidth: 2, range: [index], label: { text: "Default text", angle: 0 } } } var activeMarkers = {}; var activeMarkerInfo = { windowIsActive: false, marker: null, scale: null, index: null }; activeMarkers['scale-x'] = []; activeMarkers['scale-y'] = []; zingchart.label_click = function(e) { // If user trys to trick us by adjusting CSS put a light clientside validation if (!activeMarkerInfo.windowIsActive) { console.log(e) var scale = e.scale; var nodeIndex = scale == 'scale-x' ? e.label.index : e.text; var newMarker = new Marker(nodeIndex); activeMarkerInfo.marker = newMarker; activeMarkerInfo.scale = e.scale; activeMarkerInfo.index = nodeIndex; // check to see if that marker already exists. If it does set the modal text if (activeMarkers[scale][nodeIndex] && activeMarkers[scale][nodeIndex].type) { document.getElementById('marker-text').value = activeMarkers[scale][nodeIndex].label.text; } document.getElementById('mask').style.visibility = 'visible'; document.querySelector('form').style.visibility = 'visible'; activeMarkerInfo.windowIsActive = true; document.querySelector('form #marker-text').focus(); } } window.drawMarker = function() { var formElem = document.querySelector('form'); var scale = activeMarkerInfo.scale; var nodeIndex = activeMarkerInfo.index; var newMarker = activeMarkerInfo.marker; var markerText = null; markerText = formElem.querySelector('#marker-text').value; if (markerText === "") { markerText = "Default Text" } // update marker newMarker.label.text = markerText; activeMarkers[scale][nodeIndex] = newMarker; // update chart myConfig[scale].markers = activeMarkers[scale]; zingchart.exec('myChart', 'setdata', { data: myConfig }); // hide and clear elements document.getElementById('mask').style.visibility = 'hidden'; formElem.querySelector('#marker-text').value = ''; formElem.style.visibility = 'hidden'; activeMarkerInfo.windowIsActive = false; // make sure form doesn't execute! return false; }; </script> </body> </html>
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>ZingSoft Demo</title> <script src="https://cdn.zingchart.com/zingchart.min.js"></script> </head> <body> <div id="mask"></div> <form> <label>Marker text:</label> <input type="text" id="marker-text"> <hr> <button onclick="return drawMarker();">Submit</button> </form> <div id='myChart'></div> </body> </html>
html, body, #myChart { height: 100%; width: 100%; } #mask { position: absolute; top: 0; bottom: 0; left: 0; right: 0; background-color: #FFF; z-index: 500; opacity: .5; visibility: hidden; } form { background-color: #E0E0E0; height: 50px; width: 300px; position: fixed; top: calc(50% - 25px); left: calc(50% - 150px); z-index: 1000; padding: 10px; border-radius: 5px; opacity: 1; visibility: hidden; }
var myConfig = { type: "line", title: { text: 'Click on scale text (items)' }, plot: { tooltip: { visible: false } }, crosshairX: {}, "scale-x": { markers: [], labels: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], item: { flat: false, cursor: 'hand' }, label: { text: "Click scale text numbers" } }, "scale-y": { markers: [], item: { flat: false, cursor: 'hand' } }, series: [{ values: [35, 42, 67, 89, 25, 34, 67] }, { values: [35, 42, 67, 89, 25, 34, 67].sort() } ] }; zingchart.render({ id: 'myChart', data: myConfig, height: '100%', width: '100%' }); function Marker(index) { return { type: 'line', lineColor: '#8BC34A', lineWidth: 2, range: [index], label: { text: "Default text", angle: 0 } } } var activeMarkers = {}; var activeMarkerInfo = { windowIsActive: false, marker: null, scale: null, index: null }; activeMarkers['scale-x'] = []; activeMarkers['scale-y'] = []; zingchart.label_click = function(e) { // If user trys to trick us by adjusting CSS put a light clientside validation if (!activeMarkerInfo.windowIsActive) { console.log(e) var scale = e.scale; var nodeIndex = scale == 'scale-x' ? e.label.index : e.text; var newMarker = new Marker(nodeIndex); activeMarkerInfo.marker = newMarker; activeMarkerInfo.scale = e.scale; activeMarkerInfo.index = nodeIndex; // check to see if that marker already exists. If it does set the modal text if (activeMarkers[scale][nodeIndex] && activeMarkers[scale][nodeIndex].type) { document.getElementById('marker-text').value = activeMarkers[scale][nodeIndex].label.text; } document.getElementById('mask').style.visibility = 'visible'; document.querySelector('form').style.visibility = 'visible'; activeMarkerInfo.windowIsActive = true; document.querySelector('form #marker-text').focus(); } } window.drawMarker = function() { var formElem = document.querySelector('form'); var scale = activeMarkerInfo.scale; var nodeIndex = activeMarkerInfo.index; var newMarker = activeMarkerInfo.marker; var markerText = null; markerText = formElem.querySelector('#marker-text').value; if (markerText === "") { markerText = "Default Text" } // update marker newMarker.label.text = markerText; activeMarkers[scale][nodeIndex] = newMarker; // update chart myConfig[scale].markers = activeMarkers[scale]; zingchart.exec('myChart', 'setdata', { data: myConfig }); // hide and clear elements document.getElementById('mask').style.visibility = 'hidden'; formElem.querySelector('#marker-text').value = ''; formElem.style.visibility = 'hidden'; activeMarkerInfo.windowIsActive = false; // make sure form doesn't execute! return false; };