webvowl / src /app /js /leftSidebar.js
taferh's picture
add application files
fe66731
/**
* Contains the logic for the sidebar.
* @param graph the graph that belongs to these controls
* @returns {{}}
*/
module.exports = function ( graph ){
var leftSidebar = {},
languageTools = webvowl.util.languageTools(),
elementTools = webvowl.util.elementTools();
var collapseButton = d3.select("#leftSideBarCollapseButton");
var visibleSidebar = 0;
var backupVisibility = 0;
var sideBarContent = d3.select("#leftSideBarContent");
var sideBarContainer = d3.select("#containerForLeftSideBar");
var defaultClassSelectionContainers = [];
var defaultDatatypeSelectionContainers = [];
var defaultPropertySelectionContainers = [];
leftSidebar.setup = function (){
setupCollapsing();
leftSidebar.initSideBarAnimation();
collapseButton.on("click", function (){
graph.options().navigationMenu().hideAllMenus();
var settingValue = parseInt(leftSidebar.getSidebarVisibility());
if ( settingValue === 0 ) leftSidebar.showSidebar(1);
else leftSidebar.showSidebar(0);
backupVisibility = settingValue;
});
setupSelectionContainers();
d3.select("#WarningErrorMessages").node().addEventListener("animationend", function (){
d3.select("#WarningErrorMessages").style("-webkit-animation-name", "none");
});
};
leftSidebar.hideCollapseButton = function ( val ){
sideBarContainer.classed("hidden", val);
};
function unselectAllElements( container ){
for ( var i = 0; i < container.length; i++ )
container[i].classed("defaultSelected", false);
}
function selectThisDefaultElement( element ){
d3.select(element).classed("defaultSelected", true);
}
function updateDefaultNameInAccordion( element, identifier ){
var elementDescription = "";
if ( identifier === "defaultClass" ) elementDescription = "Class: ";
if ( identifier === "defaultDatatype" ) elementDescription = "Datatype: ";
if ( identifier === "defaultProperty" ) elementDescription = "Property: ";
d3.select("#" + identifier).node().innerHTML = elementDescription + element.innerHTML;
d3.select("#" + identifier).node().title = element.innerHTML;
}
function classSelectorFunction(){
unselectAllElements(defaultClassSelectionContainers);
selectThisDefaultElement(this);
updateDefaultNameInAccordion(this, "defaultClass");
}
function datatypeSelectorFunction(){
unselectAllElements(defaultDatatypeSelectionContainers);
selectThisDefaultElement(this);
updateDefaultNameInAccordion(this, "defaultDatatype");
}
function propertySelectorFunction(){
unselectAllElements(defaultPropertySelectionContainers);
selectThisDefaultElement(this);
updateDefaultNameInAccordion(this, "defaultProperty");
}
function setupSelectionContainers(){
var classContainer = d3.select("#classContainer");
var datatypeContainer = d3.select("#datatypeContainer");
var propertyContainer = d3.select("#propertyContainer");
// create the supported elements
var defaultClass = "owl:Class";
var defaultDatatype = "rdfs:Literal";
var defaultProperty = "owl:objectProperty";
var supportedClasses = graph.options().supportedClasses();
var supportedDatatypes = graph.options().supportedDatatypes();
var supportedProperties = graph.options().supportedProperties();
var i;
for ( i = 0; i < supportedClasses.length; i++ ) {
var aClassSelectionContainer;
aClassSelectionContainer = classContainer.append("div");
aClassSelectionContainer.classed("containerForDefaultSelection", true);
aClassSelectionContainer.classed("noselect", true);
aClassSelectionContainer.node().id = "selectedClass" + supportedClasses[i];
aClassSelectionContainer.node().innerHTML = supportedClasses[i];
if ( supportedClasses[i] === defaultClass ) {
selectThisDefaultElement(aClassSelectionContainer.node());
}
aClassSelectionContainer.on("click", classSelectorFunction);
defaultClassSelectionContainers.push(aClassSelectionContainer);
}
for ( i = 0; i < supportedDatatypes.length; i++ ) {
var aDTSelectionContainer = datatypeContainer.append("div");
aDTSelectionContainer.classed("containerForDefaultSelection", true);
aDTSelectionContainer.classed("noselect", true);
aDTSelectionContainer.node().id = "selectedDatatype" + supportedDatatypes[i];
aDTSelectionContainer.node().innerHTML = supportedDatatypes[i];
if ( supportedDatatypes[i] === defaultDatatype ) {
selectThisDefaultElement(aDTSelectionContainer.node());
}
aDTSelectionContainer.on("click", datatypeSelectorFunction);
defaultDatatypeSelectionContainers.push(aDTSelectionContainer);
}
for ( i = 0; i < supportedProperties.length; i++ ) {
var aPropSelectionContainer = propertyContainer.append("div");
aPropSelectionContainer.classed("containerForDefaultSelection", true);
aPropSelectionContainer.classed("noselect", true);
aPropSelectionContainer.node().id = "selectedClass" + supportedProperties[i];
aPropSelectionContainer.node().innerHTML = supportedProperties[i];
aPropSelectionContainer.on("click", propertySelectorFunction);
if ( supportedProperties[i] === defaultProperty ) {
selectThisDefaultElement(aPropSelectionContainer.node());
}
defaultPropertySelectionContainers.push(aPropSelectionContainer);
}
}
function setupCollapsing(){
// adapted version of this example: http://www.normansblog.de/simple-jquery-accordion/
function collapseContainers( containers ){
containers.classed("hidden", true);
}
function expandContainers( containers ){
containers.classed("hidden", false);
}
var triggers = d3.selectAll(".accordion-trigger");
// Collapse all inactive triggers on startup
// collapseContainers(d3.selectAll(".accordion-trigger:not(.accordion-trigger-active) + div"));
triggers.on("click", function (){
var selectedTrigger = d3.select(this);
if ( selectedTrigger.classed("accordion-trigger-active") ) {
// Collapse the active (which is also the selected) trigger
collapseContainers(d3.select(selectedTrigger.node().nextElementSibling));
selectedTrigger.classed("accordion-trigger-active", false);
} else {
// Collapse the other trigger ...
// collapseContainers(d3.selectAll(".accordion-trigger-active + div"));
// activeTriggers.classed("accordion-trigger-active", false);
// ... and expand the selected one
expandContainers(d3.select(selectedTrigger.node().nextElementSibling));
selectedTrigger.classed("accordion-trigger-active", true);
}
});
}
leftSidebar.isSidebarVisible = function (){
return visibleSidebar;
};
leftSidebar.updateSideBarVis = function ( init ){
var vis = leftSidebar.getSidebarVisibility();
leftSidebar.showSidebar(parseInt(vis), init);
};
leftSidebar.initSideBarAnimation = function (){
sideBarContainer.node().addEventListener("animationend", function (){
sideBarContent.classed("hidden", !visibleSidebar);
if ( visibleSidebar === true ) {
sideBarContainer.style("width", "200px");
sideBarContent.classed("hidden", false);
d3.select("#leftSideBarCollapseButton").style("left", "200px");
d3.select("#leftSideBarCollapseButton").classed("hidden", false);
d3.select("#WarningErrorMessages").style("left", "100px");
}
else {
sideBarContainer.style("width", "0px");
d3.select("#leftSideBarCollapseButton").style("left", "0px");
d3.select("#WarningErrorMessages").style("left", "0px");
d3.select("#leftSideBarCollapseButton").classed("hidden", false);
}
graph.updateCanvasContainerSize();
graph.options().navigationMenu().updateScrollButtonVisibility();
});
};
leftSidebar.showSidebar = function ( val, init ){
// make val to bool
var collapseButton = d3.select("#leftSideBarCollapseButton");
if ( init === true ) {
visibleSidebar = (backupVisibility === 0);
sideBarContent.classed("hidden", !visibleSidebar);
sideBarContainer.style("-webkit-animation-name", "none");
d3.select("#WarningErrorMessages").style("-webkit-animation-name", "none");
if ( visibleSidebar === true ) {
sideBarContainer.style("width", "200px");
sideBarContent.classed("hidden", false);
d3.select("#leftSideBarCollapseButton").style("left", "200px");
d3.select("#leftSideBarCollapseButton").classed("hidden", false);
d3.select("#WarningErrorMessages").style("left", "100px");
collapseButton.node().innerHTML = "<";
}
else {
sideBarContainer.style("width", "0px");
d3.select("#WarningErrorMessages").style("left", "0px");
d3.select("#leftSideBarCollapseButton").style("left", "0px");
d3.select("#leftSideBarCollapseButton").classed("hidden", false);
collapseButton.node().innerHTML = ">";
}
graph.updateCanvasContainerSize();
graph.options().navigationMenu().updateScrollButtonVisibility();
return;
}
d3.select("#leftSideBarCollapseButton").classed("hidden", true);
if ( val === 1 ) {
visibleSidebar = true;
collapseButton.node().innerHTML = "<";
// call expand animation;
sideBarContainer.style("-webkit-animation-name", "l_sbExpandAnimation");
sideBarContainer.style("-webkit-animation-duration", "0.5s");
// prepare the animation;
d3.select("#WarningErrorMessages").style("-webkit-animation-name", "warn_ExpandLeftBarAnimation");
d3.select("#WarningErrorMessages").style("-webkit-animation-duration", "0.5s");
}
if ( val === 0 ) {
visibleSidebar = false;
sideBarContent.classed("hidden", true);
collapseButton.node().innerHTML = ">";
// call collapse animation
sideBarContainer.style("-webkit-animation-name", "l_sbCollapseAnimation");
sideBarContainer.style("-webkit-animation-duration", "0.5s");
d3.select("#WarningErrorMessages").style("-webkit-animation-name", "warn_CollapseLeftBarAnimation");
d3.select("#WarningErrorMessages").style("-webkit-animation-duration", "0.5s");
d3.select("#WarningErrorMessages").style("left", "0");
}
};
leftSidebar.getSidebarVisibility = function (){
var isHidden = sideBarContent.classed("hidden");
if ( isHidden === false ) return String(1);
if ( isHidden === true ) return String(0);
};
return leftSidebar;
};