<!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;
};