|
|
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(); |
|
|
}); |
|
|
|
|
|
|
|
|
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")(); |
|
|
} |
|
|
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 ) { |
|
|
|
|
|
if ( updateLvl === 1 ) { |
|
|
graph.lazyRefresh(); |
|
|
|
|
|
} |
|
|
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; |
|
|
}; |
|
|
|