webvowl / src /app /js /menu /configMenu.js
taferh's picture
add application files
fe66731
module.exports = function ( graph ){
var configMenu = {},
checkboxes = [];
configMenu.setup = function (){
var menuEntry = d3.select("#m_modes");
menuEntry.on("mouseover", function (){
var searchMenu = graph.options().searchMenu();
searchMenu.hideSearchEntries();
});
addCheckBox("showZoomSlider", "Zoom controls", "#zoomSliderOption", graph.options().zoomSlider().showSlider, 0);
addLabelWidthSlider("#maxLabelWidthSliderOption", "maxLabelWidth", "Max label width", graph.options().maxLabelWidth);
};
function addLabelWidthSlider( selector, identifier, label, onChangeFunction ){
var sliderContainer,
sliderValueLabel;
sliderContainer = d3.select(selector)
.append("div")
.classed("distanceSliderContainer", true);
var slider = sliderContainer.append("input")
.attr("id", identifier + "Slider")
.attr("type", "range")
.attr("min", 20)
.attr("max", 600)
.attr("value", onChangeFunction())
.attr("step", 10);
sliderContainer.append("label")
.classed("description", true)
.attr("for", identifier + "Slider")
.attr("id", identifier + "DescriptionLabel")
.text(label);
sliderValueLabel = sliderContainer.append("label")
.classed("value", true)
.attr("for", identifier + "Slider")
.attr("id", identifier + "valueLabel")
.text(onChangeFunction());
slider.on("input", function (){
var value = slider.property("value");
onChangeFunction(value);
sliderValueLabel.text(value);
if ( graph.options().dynamicLabelWidth() === true )
graph.animateDynamicLabelWidth();
});
// add wheel event to the slider
slider.on("wheel", function (){
if ( slider.node().disabled === true ) return;
var wheelEvent = d3.event;
var offset;
if ( wheelEvent.deltaY < 0 ) offset = 10;
if ( wheelEvent.deltaY > 0 ) offset = -10;
var oldVal = parseInt(slider.property("value"));
var newSliderValue = oldVal + offset;
if ( newSliderValue !== oldVal ) {
slider.property("value", newSliderValue);
onChangeFunction(newSliderValue);
slider.on("input")(); // << set text and update the graphStyles
}
d3.event.preventDefault();
});
}
function addCheckBox( identifier, modeName, selector, onChangeFunc, updateLvl ){
var configOptionContainer = d3.select(selector)
.append("div")
.classed("checkboxContainer", true);
var configCheckbox = configOptionContainer.append("input")
.classed("moduleCheckbox", true)
.attr("id", identifier + "ConfigCheckbox")
.attr("type", "checkbox")
.property("checked", onChangeFunc());
configCheckbox.on("click", function ( silent ){
var isEnabled = configCheckbox.property("checked");
onChangeFunc(isEnabled);
if ( silent !== true ) {
// updating graph when silent is false or the parameter is not given.
if ( updateLvl === 1 ) {
graph.lazyRefresh();
//graph.redrawWithoutForce
}
if ( updateLvl === 2 ) {
graph.update();
}
if ( updateLvl === 3 ) {
graph.updateDraggerElements();
}
}
});
checkboxes.push(configCheckbox);
configOptionContainer.append("label")
.attr("for", identifier + "ConfigCheckbox")
.text(modeName);
}
configMenu.setCheckBoxValue = function ( identifier, value ){
for ( var i = 0; i < checkboxes.length; i++ ) {
var cbdId = checkboxes[i].attr("id");
if ( cbdId === identifier ) {
checkboxes[i].property("checked", value);
break;
}
}
};
configMenu.getCheckBoxValue = function ( id ){
for ( var i = 0; i < checkboxes.length; i++ ) {
var cbdId = checkboxes[i].attr("id");
if ( cbdId === id ) {
return checkboxes[i].property("checked");
}
}
};
configMenu.updateSettings = function (){
var silent = true;
checkboxes.forEach(function ( checkbox ){
checkbox.on("click")(silent);
});
};
return configMenu;
};