|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
module.exports = function ( graph ){ |
|
|
|
|
|
var editSidebar = {}, |
|
|
languageTools = webvowl.util.languageTools(), |
|
|
elementTools = webvowl.util.elementTools(); |
|
|
|
|
|
var prefixModule = webvowl.util.prefixTools(graph); |
|
|
var selectedElementForCharacteristics; |
|
|
var oldPrefix, oldPrefixURL; |
|
|
var prefix_editMode = false; |
|
|
|
|
|
|
|
|
editSidebar.clearMetaObjectValue = function (){ |
|
|
d3.select("#titleEditor").node().value = ""; |
|
|
d3.select("#iriEditor").node().value = ""; |
|
|
d3.select("#versionEditor").node().value = ""; |
|
|
d3.select("#authorsEditor").node().value = ""; |
|
|
d3.select("#descriptionEditor").node().value = ""; |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
editSidebar.updatePrefixUi = function (){ |
|
|
editSidebar.updateElementWidth(); |
|
|
var prefixListContainer = d3.select("#prefixURL_Container"); |
|
|
while ( prefixListContainer.node().firstChild ) { |
|
|
prefixListContainer.node().removeChild(prefixListContainer.node().firstChild); |
|
|
} |
|
|
setupPrefixList(); |
|
|
}; |
|
|
|
|
|
editSidebar.setup = function (){ |
|
|
setupCollapsing(); |
|
|
setupPrefixList(); |
|
|
setupAddPrefixButton(); |
|
|
setupSupportedDatatypes(); |
|
|
|
|
|
|
|
|
d3.select("#titleEditor") |
|
|
.on("change", function (){ |
|
|
graph.options().addOrUpdateGeneralObjectEntry("title", d3.select("#titleEditor").node().value); |
|
|
}) |
|
|
.on("keydown", function (){ |
|
|
d3.event.stopPropagation(); |
|
|
if ( d3.event.keyCode === 13 ) { |
|
|
d3.event.preventDefault(); |
|
|
graph.options().addOrUpdateGeneralObjectEntry("title", d3.select("#titleEditor").node().value); |
|
|
} |
|
|
}); |
|
|
d3.select("#iriEditor") |
|
|
.on("change", function (){ |
|
|
if ( graph.options().addOrUpdateGeneralObjectEntry("iri", d3.select("#iriEditor").node().value) === false ) { |
|
|
|
|
|
d3.select("#iriEditor").node().value = graph.options().getGeneralMetaObjectProperty('iri'); |
|
|
} |
|
|
}) |
|
|
.on("keydown", function (){ |
|
|
d3.event.stopPropagation(); |
|
|
if ( d3.event.keyCode === 13 ) { |
|
|
d3.event.preventDefault(); |
|
|
if ( graph.options().addOrUpdateGeneralObjectEntry("iri", d3.select("#iriEditor").node().value) === false ) { |
|
|
|
|
|
d3.select("#iriEditor").node().value = graph.options().getGeneralMetaObjectProperty('iri'); |
|
|
} |
|
|
} |
|
|
}); |
|
|
d3.select("#versionEditor") |
|
|
.on("change", function (){ |
|
|
graph.options().addOrUpdateGeneralObjectEntry("version", d3.select("#versionEditor").node().value); |
|
|
}) |
|
|
.on("keydown", function (){ |
|
|
d3.event.stopPropagation(); |
|
|
if ( d3.event.keyCode === 13 ) { |
|
|
d3.event.preventDefault(); |
|
|
graph.options().addOrUpdateGeneralObjectEntry("version", d3.select("#versionEditor").node().value); |
|
|
} |
|
|
}); |
|
|
d3.select("#authorsEditor") |
|
|
.on("change", function (){ |
|
|
graph.options().addOrUpdateGeneralObjectEntry("author", d3.select("#authorsEditor").node().value); |
|
|
}) |
|
|
.on("keydown", function (){ |
|
|
d3.event.stopPropagation(); |
|
|
if ( d3.event.keyCode === 13 ) { |
|
|
d3.event.preventDefault(); |
|
|
graph.options().addOrUpdateGeneralObjectEntry("author", d3.select("#authorsEditor").node().value); |
|
|
} |
|
|
}); |
|
|
d3.select("#descriptionEditor") |
|
|
.on("change", function (){ |
|
|
graph.options().addOrUpdateGeneralObjectEntry("description", d3.select("#descriptionEditor").node().value); |
|
|
}); |
|
|
|
|
|
editSidebar.updateElementWidth(); |
|
|
|
|
|
}; |
|
|
|
|
|
function setupSupportedDatatypes(){ |
|
|
var datatypeEditorSelection = d3.select("#typeEditor_datatype").node(); |
|
|
var supportedDatatypes = ["undefined", "xsd:boolean", "xsd:double", "xsd:integer", "xsd:string"]; |
|
|
for ( var i = 0; i < supportedDatatypes.length; i++ ) { |
|
|
var optB = document.createElement('option'); |
|
|
optB.innerHTML = supportedDatatypes[i]; |
|
|
datatypeEditorSelection.appendChild(optB); |
|
|
} |
|
|
} |
|
|
|
|
|
function highlightDeleteButton( enable, name ){ |
|
|
var deletePath = d3.select("#del_pathFor_" + name); |
|
|
var deleteRect = d3.select("#del_rectFor_" + name); |
|
|
|
|
|
if ( enable === false ) { |
|
|
deletePath.node().style = "stroke: #f00;"; |
|
|
deleteRect.style("cursor", "auto"); |
|
|
} else { |
|
|
deletePath.node().style = "stroke: #ff972d;"; |
|
|
deleteRect.style("cursor", "pointer"); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
function highlightEditButton( enable, name, fill ){ |
|
|
var editPath = d3.select("#pathFor_" + name); |
|
|
var editRect = d3.select("#rectFor_" + name); |
|
|
|
|
|
if ( enable === false ) { |
|
|
if ( fill ) |
|
|
editPath.node().style = "fill: #fff; stroke : #fff; stroke-width : 1px"; |
|
|
else |
|
|
editPath.node().style = " stroke : #fff; stroke-width : 1px"; |
|
|
|
|
|
editRect.style("cursor", "auto"); |
|
|
} else { |
|
|
if ( fill ) |
|
|
editPath.node().style = "fill: #ff972d; stroke : #ff972d; stroke-width : 1px"; |
|
|
else |
|
|
editPath.node().style = "stroke : #ff972d; stroke-width : 1px"; |
|
|
editRect.style("cursor", "pointer"); |
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
function setupAddPrefixButton(){ |
|
|
var btn = d3.select("#addPrefixButton"); |
|
|
btn.on("click", function (){ |
|
|
|
|
|
|
|
|
if ( prefix_editMode === false ) { |
|
|
|
|
|
var name = "emptyPrefixEntry"; |
|
|
var prefixListContainer = d3.select("#prefixURL_Container"); |
|
|
var prefixEditContainer = prefixListContainer.append("div"); |
|
|
prefixEditContainer.classed("prefixIRIElements", true); |
|
|
prefixEditContainer.node().id = "prefixContainerFor_" + name; |
|
|
|
|
|
var IconContainer = prefixEditContainer.append("div"); |
|
|
IconContainer.style("position", "absolute"); |
|
|
IconContainer.node().id = "containerFor_" + name; |
|
|
var editButton = IconContainer.append("svg"); |
|
|
editButton.style("width", "14px"); |
|
|
editButton.style("height", "20px"); |
|
|
|
|
|
editButton.classed("noselect", true); |
|
|
|
|
|
editButton.node().id = "editButtonFor_" + name; |
|
|
|
|
|
editButton.node().elementStyle = "save"; |
|
|
editButton.node().selectorName = name; |
|
|
var editIcon = editButton.append("g"); |
|
|
var editRect = editIcon.append("rect"); |
|
|
var editPath = editIcon.append("path"); |
|
|
editIcon.node().id = "iconFor_" + name; |
|
|
editPath.node().id = "pathFor_" + name; |
|
|
editRect.node().id = "rectFor_" + name; |
|
|
|
|
|
editIcon.node().selectorName = name; |
|
|
editPath.node().selectorName = name; |
|
|
editRect.node().selectorName = name; |
|
|
IconContainer.node().title = "Save new prefix and IRI"; |
|
|
|
|
|
editPath.classed("editPrefixIcon"); |
|
|
editPath.style("stroke", "#fff"); |
|
|
editPath.style("stroke-width", "1px"); |
|
|
editPath.style("fill", "#fff"); |
|
|
editRect.attr("width", "14px"); |
|
|
editRect.attr("height", "14px"); |
|
|
editRect.style("fill", "#18202A"); |
|
|
editRect.attr("transform", "matrix(1,0,0,1,-3,4)"); |
|
|
|
|
|
editButton.selectAll("g").on("mouseover", function (){ |
|
|
highlightEditButton(true, this.selectorName, true); |
|
|
}); |
|
|
editButton.selectAll("g").on("mouseout", function (){ |
|
|
highlightEditButton(false, this.selectorName, true); |
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
editPath.attr("d", "M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z"); |
|
|
editPath.attr("transform", "matrix(0.45,0,0,0.45,0,5)"); |
|
|
|
|
|
var prefInput = prefixEditContainer.append("input"); |
|
|
prefInput.classed("prefixInput", true); |
|
|
prefInput.node().type = "text"; |
|
|
prefInput.node().id = "prefixInputFor_" + name; |
|
|
prefInput.node().autocomplete = "off"; |
|
|
prefInput.node().value = ""; |
|
|
prefInput.style("margin-left", "14px"); |
|
|
|
|
|
var prefURL = prefixEditContainer.append("input"); |
|
|
prefURL.classed("prefixURL", true); |
|
|
prefURL.node().type = "text"; |
|
|
prefURL.node().id = "prefixURLFor_" + name; |
|
|
prefURL.node().autocomplete = "off"; |
|
|
prefURL.node().value = ""; |
|
|
|
|
|
prefInput.node().disabled = false; |
|
|
prefURL.node().disabled = false; |
|
|
prefix_editMode = true; |
|
|
var deleteContainer = prefixEditContainer.append("div"); |
|
|
deleteContainer.style("float", "right"); |
|
|
var deleteButton = deleteContainer.append("svg"); |
|
|
deleteButton.node().id = "deleteButtonFor_" + name; |
|
|
deleteContainer.node().title = "Delete prefix and IRI"; |
|
|
deleteButton.style("width", "10px"); |
|
|
deleteButton.style("height", "20px"); |
|
|
var deleteIcon = deleteButton.append("g"); |
|
|
var deleteRect = deleteIcon.append("rect"); |
|
|
var deletePath = deleteIcon.append("path"); |
|
|
deleteIcon.node().id = "del_iconFor_" + name; |
|
|
deletePath.node().id = "del_pathFor_" + name; |
|
|
deleteRect.node().id = "del_rectFor_" + name; |
|
|
|
|
|
deleteIcon.node().selectorName = name; |
|
|
deletePath.node().selectorName = name; |
|
|
deleteRect.node().selectorName = name; |
|
|
|
|
|
|
|
|
deletePath.style("stroke", "#f00"); |
|
|
deleteRect.attr("width", "10px"); |
|
|
deleteRect.attr("height", "14px"); |
|
|
deleteRect.style("fill", "#18202A"); |
|
|
deleteRect.attr("transform", "matrix(1,0,0,1,-3,4)"); |
|
|
|
|
|
|
|
|
deletePath.attr("d", "M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"); |
|
|
deletePath.attr("transform", "matrix(0.45,0,0,0.45,0,5)"); |
|
|
|
|
|
deleteButton.selectAll("g").on("mouseover", function (){ |
|
|
highlightDeleteButton(true, this.selectorName); |
|
|
}); |
|
|
deleteButton.selectAll("g").on("mouseout", function (){ |
|
|
highlightDeleteButton(false, this.selectorName); |
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
editButton.on("click", enablePrefixEdit); |
|
|
deleteButton.on("click", deletePrefixLine); |
|
|
|
|
|
editSidebar.updateElementWidth(); |
|
|
|
|
|
prefInput.node().focus(); |
|
|
oldPrefix = name; |
|
|
oldPrefixURL = ""; |
|
|
d3.select("#addPrefixButton").node().innerHTML = "Save Prefix"; |
|
|
} else { |
|
|
d3.select("#editButtonFor_emptyPrefixEntry").on("click")(d3.select("#editButtonFor_emptyPrefixEntry").node()); |
|
|
} |
|
|
|
|
|
}); |
|
|
|
|
|
} |
|
|
|
|
|
function setupPrefixList(){ |
|
|
if ( graph.isEditorMode() === false ) return; |
|
|
var prefixListContainer = d3.select("#prefixURL_Container"); |
|
|
var prefixElements = graph.options().prefixList(); |
|
|
for ( var name in prefixElements ) { |
|
|
if ( prefixElements.hasOwnProperty(name) ) { |
|
|
var prefixEditContainer = prefixListContainer.append("div"); |
|
|
prefixEditContainer.classed("prefixIRIElements", true); |
|
|
prefixEditContainer.node().id = "prefixContainerFor_" + name; |
|
|
|
|
|
|
|
|
var IconContainer = prefixEditContainer.append("div"); |
|
|
IconContainer.style("position", "absolute"); |
|
|
IconContainer.node().id = "containerFor_" + name; |
|
|
var editButton = IconContainer.append("svg"); |
|
|
editButton.style("width", "14px"); |
|
|
editButton.style("height", "20px"); |
|
|
editButton.classed("noselect", true); |
|
|
editButton.node().id = "editButtonFor_" + name; |
|
|
IconContainer.node().title = "Edit prefix and IRI"; |
|
|
editButton.node().elementStyle = "save"; |
|
|
editButton.node().selectorName = name; |
|
|
|
|
|
editButton.node().id = "editButtonFor_" + name; |
|
|
editButton.node().elementStyle = "edit"; |
|
|
var editIcon = editButton.append("g"); |
|
|
var editRect = editIcon.append("rect"); |
|
|
var editPath = editIcon.append("path"); |
|
|
editIcon.node().id = "iconFor_" + name; |
|
|
editPath.node().id = "pathFor_" + name; |
|
|
editRect.node().id = "rectFor_" + name; |
|
|
|
|
|
editIcon.node().selectorName = name; |
|
|
editPath.node().selectorName = name; |
|
|
editRect.node().selectorName = name; |
|
|
|
|
|
|
|
|
editPath.classed("editPrefixIcon"); |
|
|
editPath.style("stroke", "#fff"); |
|
|
editPath.style("stroke-width", "1px"); |
|
|
editRect.attr("width", "14px"); |
|
|
editRect.attr("height", "14px"); |
|
|
editRect.style("fill", "#18202A"); |
|
|
editRect.attr("transform", "matrix(1,0,0,1,-3,4)"); |
|
|
|
|
|
editButton.selectAll("g").on("mouseover", function (){ |
|
|
var sender = this; |
|
|
var fill = false; |
|
|
var enable = true; |
|
|
var f_editPath = d3.select("#pathFor_" + sender.selectorName); |
|
|
var f_editRect = d3.select("#rectFor_" + sender.selectorName); |
|
|
|
|
|
if ( enable === false ) { |
|
|
if ( fill ) |
|
|
f_editPath.node().style = "fill: #fff; stroke : #fff; stroke-width : 1px"; |
|
|
else |
|
|
f_editPath.node().style = " stroke : #fff; stroke-width : 1px"; |
|
|
|
|
|
f_editRect.style("cursor", "auto"); |
|
|
} else { |
|
|
if ( fill ) |
|
|
f_editPath.node().style = "fill: #ff972d; stroke : #ff972d; stroke-width : 1px"; |
|
|
else |
|
|
f_editPath.node().style = "stroke : #ff972d; stroke-width : 1px"; |
|
|
f_editRect.style("cursor", "pointer"); |
|
|
} |
|
|
}); |
|
|
editButton.selectAll("g").on("mouseout", function (){ |
|
|
var sender = this; |
|
|
var fill = false; |
|
|
var enable = false; |
|
|
var f_editPath = d3.select("#pathFor_" + sender.selectorName); |
|
|
var f_editRect = d3.select("#rectFor_" + sender.selectorName); |
|
|
|
|
|
if ( enable === false ) { |
|
|
if ( fill ) |
|
|
f_editPath.node().style = "fill: #fff; stroke : #fff; stroke-width : 1px"; |
|
|
else |
|
|
f_editPath.node().style = " stroke : #fff; stroke-width : 1px"; |
|
|
|
|
|
f_editRect.style("cursor", "auto"); |
|
|
} else { |
|
|
if ( fill ) |
|
|
f_editPath.node().style = "fill: #ff972d; stroke : #ff972d; stroke-width : 1px"; |
|
|
else |
|
|
f_editPath.node().style = "stroke : #ff972d; stroke-width : 1px"; |
|
|
f_editRect.style("cursor", "pointer"); |
|
|
} |
|
|
}); |
|
|
|
|
|
editPath.attr("d", "M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"); |
|
|
editPath.attr("transform", "matrix(-0.45,0,0,0.45,10,5)"); |
|
|
|
|
|
|
|
|
var prefInput = prefixEditContainer.append("input"); |
|
|
prefInput.classed("prefixInput", true); |
|
|
prefInput.node().type = "text"; |
|
|
prefInput.node().id = "prefixInputFor_" + name; |
|
|
prefInput.node().autocomplete = "off"; |
|
|
prefInput.node().value = name; |
|
|
prefInput.style("margin-left", "14px"); |
|
|
|
|
|
|
|
|
var prefURL = prefixEditContainer.append("input"); |
|
|
prefURL.classed("prefixURL", true); |
|
|
prefURL.node().type = "text"; |
|
|
prefURL.node().id = "prefixURLFor_" + name; |
|
|
prefURL.node().autocomplete = "off"; |
|
|
prefURL.node().value = prefixElements[name]; |
|
|
prefURL.node().title = prefixElements[name]; |
|
|
|
|
|
prefInput.node().disabled = true; |
|
|
prefURL.node().disabled = true; |
|
|
|
|
|
|
|
|
var deleteContainer = prefixEditContainer.append("div"); |
|
|
deleteContainer.style("float", "right"); |
|
|
var deleteButton = deleteContainer.append("svg"); |
|
|
deleteButton.node().id = "deleteButtonFor_" + name; |
|
|
deleteContainer.node().title = "Delete prefix and IRI"; |
|
|
deleteButton.style("width", "10px"); |
|
|
deleteButton.style("height", "20px"); |
|
|
var deleteIcon = deleteButton.append("g"); |
|
|
var deleteRect = deleteIcon.append("rect"); |
|
|
var deletePath = deleteIcon.append("path"); |
|
|
deleteIcon.node().id = "del_iconFor_" + name; |
|
|
deletePath.node().id = "del_pathFor_" + name; |
|
|
deleteRect.node().id = "del_rectFor_" + name; |
|
|
|
|
|
deleteIcon.node().selectorName = name; |
|
|
deletePath.node().selectorName = name; |
|
|
deleteRect.node().selectorName = name; |
|
|
|
|
|
|
|
|
deletePath.style("stroke", "#f00"); |
|
|
deleteRect.attr("width", "10px"); |
|
|
deleteRect.attr("height", "14px"); |
|
|
deleteRect.style("fill", "#18202A"); |
|
|
deleteRect.attr("transform", "matrix(1,0,0,1,-3,4)"); |
|
|
|
|
|
|
|
|
deletePath.attr("d", "M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"); |
|
|
deletePath.attr("transform", "matrix(0.45,0,0,0.45,0,5)"); |
|
|
|
|
|
deleteButton.selectAll("g").on("mouseover", function (){ |
|
|
var selector = this; |
|
|
var enable = true; |
|
|
var f_deletePath = d3.select("#del_pathFor_" + selector.selectorName); |
|
|
var f_deleteRect = d3.select("#del_rectFor_" + selector.selectorName); |
|
|
|
|
|
if ( enable === false ) { |
|
|
f_deletePath.node().style = "stroke: #f00;"; |
|
|
f_deleteRect.style("cursor", "auto"); |
|
|
} else { |
|
|
f_deletePath.node().style = "stroke: #ff972d;"; |
|
|
f_deleteRect.style("cursor", "pointer"); |
|
|
} |
|
|
}); |
|
|
deleteButton.selectAll("g").on("mouseout", function (){ |
|
|
var selector = this; |
|
|
var enable = false; |
|
|
var f_deletePath = d3.select("#del_pathFor_" + selector.selectorName); |
|
|
var f_deleteRect = d3.select("#del_rectFor_" + selector.selectorName); |
|
|
|
|
|
if ( enable === false ) { |
|
|
f_deletePath.node().style = "stroke: #f00;"; |
|
|
f_deleteRect.style("cursor", "auto"); |
|
|
} else { |
|
|
f_deletePath.node().style = "stroke: #ff972d;"; |
|
|
f_deleteRect.style("cursor", "pointer"); |
|
|
} |
|
|
}); |
|
|
|
|
|
|
|
|
editButton.on("click", enablePrefixEdit); |
|
|
deleteButton.on("click", deletePrefixLine); |
|
|
|
|
|
|
|
|
|
|
|
if ( name === "rdf" || |
|
|
name === "rdfs" || |
|
|
name === "xsd" || name === "dc" || |
|
|
name === "owl" |
|
|
) { |
|
|
|
|
|
IconContainer.classed("hidden", true); |
|
|
deleteContainer.classed("hidden", true); |
|
|
} |
|
|
} |
|
|
} |
|
|
prefixModule.updatePrefixModel(); |
|
|
} |
|
|
|
|
|
function deletePrefixLine(){ |
|
|
if ( this.disabled === true ) return; |
|
|
d3.select("#addPrefixButton").node().innerHTML = "Add Prefix"; |
|
|
var selector = this.id.split("_")[1]; |
|
|
d3.select("#prefixContainerFor_" + selector).remove(); |
|
|
graph.options().removePrefix(selector); |
|
|
prefix_editMode = false; |
|
|
prefixModule.updatePrefixModel(); |
|
|
} |
|
|
|
|
|
function enablePrefixEdit( item ){ |
|
|
|
|
|
var agent = this; |
|
|
if ( item ) |
|
|
agent = item; |
|
|
|
|
|
if ( agent.disabled === true ) return; |
|
|
var selector = agent.id.split("_")[1]; |
|
|
var stl = agent.elementStyle; |
|
|
if ( stl === "edit" ) { |
|
|
d3.select("#prefixInputFor_" + selector).node().disabled = false; |
|
|
d3.select("#prefixURLFor_" + selector).node().disabled = false; |
|
|
|
|
|
|
|
|
agent.elementStyle = "save"; |
|
|
oldPrefix = d3.select("#prefixInputFor_" + selector).node().value; |
|
|
oldPrefixURL = d3.select("#prefixURLFor_" + selector).node().value; |
|
|
prefix_editMode = true; |
|
|
if ( d3.select("#containerFor_" + selector).node() ) |
|
|
d3.select("#containerFor_" + selector).node().title = "Save new prefix and IRI"; |
|
|
|
|
|
var editButton = d3.select(agent); |
|
|
editButton.selectAll("g").on("mouseover", function (){ |
|
|
|
|
|
highlightEditButton(true, agent.selectorName, true); |
|
|
}); |
|
|
editButton.selectAll("g").on("mouseout", function (){ |
|
|
highlightEditButton(false, agent.selectorName, true); |
|
|
}); |
|
|
|
|
|
var editPath = d3.select("#pathFor_" + agent.selectorName); |
|
|
editPath.attr("d", "M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z"); |
|
|
editPath.attr("transform", "matrix(0.45,0,0,0.45,0,5)"); |
|
|
|
|
|
highlightEditButton(true, agent.selectorName, true); |
|
|
|
|
|
|
|
|
} |
|
|
if ( stl === "save" ) { |
|
|
var newPrefixURL = d3.select("#prefixURLFor_" + selector).node().value; |
|
|
var newPrefix = d3.select("#prefixInputFor_" + selector).node().value; |
|
|
|
|
|
|
|
|
if ( graph.options().updatePrefix(oldPrefix, newPrefix, oldPrefixURL, newPrefixURL) === true ) { |
|
|
d3.select("#prefixInputFor_" + newPrefix).node().disabled = true; |
|
|
d3.select("#prefixURLFor_" + newPrefix).node().disabled = true; |
|
|
d3.select("#addPrefixButton").node().innerHTML = "Add Prefix"; |
|
|
if ( d3.select("#containerFor_" + selector).node() ) |
|
|
d3.select("#containerFor_" + selector).node().title = "Edit prefix and IRI"; |
|
|
|
|
|
|
|
|
|
|
|
agent.elementStyle = "edit"; |
|
|
prefix_editMode = false; |
|
|
prefixModule.updatePrefixModel(); |
|
|
var saveButton = d3.select(agent); |
|
|
saveButton.selectAll("g").on("mouseover", function (){ |
|
|
highlightEditButton(true, agent.selectorName, false); |
|
|
}); |
|
|
saveButton.selectAll("g").on("mouseout", function (){ |
|
|
highlightEditButton(false, agent.selectorName, false); |
|
|
}); |
|
|
|
|
|
var savePath = d3.select("#pathFor_" + agent.selectorName); |
|
|
savePath.attr("d", "M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"); |
|
|
savePath.attr("transform", "matrix(-0.45,0,0,0.45,10,5)"); |
|
|
highlightEditButton(true, agent.selectorName, false); |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
function changeDatatypeType( element ){ |
|
|
var datatypeEditorSelection = d3.select("#typeEditor_datatype").node(); |
|
|
var givenName = datatypeEditorSelection.value; |
|
|
var identifier = givenName.split(":")[1]; |
|
|
|
|
|
if ( datatypeEditorSelection.value !== "undefined" ) { |
|
|
d3.select("#element_iriEditor").node().disabled = true; |
|
|
d3.select("#element_labelEditor").node().disabled = true; |
|
|
} else { |
|
|
identifier = "undefined"; |
|
|
d3.select("#element_iriEditor").node().disabled = false; |
|
|
d3.select("#element_labelEditor").node().disabled = false; |
|
|
} |
|
|
element.label(identifier); |
|
|
element.dType(givenName); |
|
|
element.iri("http://www.w3.org/2001/XMLSchema#" + identifier); |
|
|
element.baseIri("http://www.w3.org/2001/XMLSchema#"); |
|
|
element.redrawLabelText(); |
|
|
|
|
|
d3.select("#element_iriEditor").node().value = prefixModule.getPrefixRepresentationForFullURI(element.iri()); |
|
|
d3.select("#element_iriEditor").node().title = element.iri(); |
|
|
d3.select("#element_labelEditor").node().value = element.labelForCurrentLanguage(); |
|
|
} |
|
|
|
|
|
|
|
|
function identifyExternalCharacteristicForElement( ontoIRI, elementIRI ){ |
|
|
return (elementIRI.indexOf(ontoIRI) === -1); |
|
|
|
|
|
} |
|
|
|
|
|
function defaultIriValue( element ){ |
|
|
|
|
|
if ( graph.options().getGeneralMetaObject().iri ) { |
|
|
var str2Compare = graph.options().getGeneralMetaObject().iri + element.id(); |
|
|
return element.iri() === str2Compare; |
|
|
} |
|
|
return false; |
|
|
} |
|
|
|
|
|
function getURLFROMPrefixedVersion( element ){ |
|
|
var url = d3.select("#element_iriEditor").node().value; |
|
|
var base = graph.options().getGeneralMetaObjectProperty("iri"); |
|
|
if ( validURL(url) === false ) { |
|
|
|
|
|
|
|
|
|
|
|
var tokens = url.split(":"); |
|
|
|
|
|
|
|
|
console.log("Tokens"); |
|
|
console.log(tokens); |
|
|
console.log("---------------"); |
|
|
|
|
|
if ( tokens.length === 2 ) { |
|
|
var pr = tokens[0]; |
|
|
var name = tokens[1]; |
|
|
if ( pr.length > 0 ) { |
|
|
var basePref = graph.options().prefixList()[pr]; |
|
|
if ( basePref === undefined ) { |
|
|
console.log("ERROR __________________"); |
|
|
graph.options().warningModule().showWarning("Invalid Element IRI", |
|
|
"Could not resolve prefix '" + basePref + "'", |
|
|
"Restoring previous IRI for Element" + element.iri(), 1, false); |
|
|
d3.select("#element_iriEditor").node().value = element.iri(); |
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
if ( name.length === 0 ) { |
|
|
graph.options().warningModule().showWarning("Invalid Element IRI", |
|
|
"Input IRI is EMPTY", |
|
|
"Restoring previous IRI for Element" + element.iri(), 1, false); |
|
|
console.log("NO INPUT PROVIDED"); |
|
|
d3.select("#element_iriEditor").node().value = element.iri(); |
|
|
return; |
|
|
|
|
|
} |
|
|
url = basePref + name; |
|
|
} |
|
|
else { |
|
|
url = base + name; |
|
|
} |
|
|
} else { |
|
|
if ( url.length === 0 ) { |
|
|
|
|
|
console.log("NO INPUT PROVIDED"); |
|
|
d3.select("#element_iriEditor").node().value = element.iri(); |
|
|
return; |
|
|
} |
|
|
|
|
|
console.log("Tryig to use the input!"); |
|
|
url = base + url; |
|
|
} |
|
|
} |
|
|
return url; |
|
|
} |
|
|
|
|
|
function changeIriForElement( element ){ |
|
|
var url = getURLFROMPrefixedVersion(element); |
|
|
var base = graph.options().getGeneralMetaObjectProperty("iri"); |
|
|
var sanityCheckResult; |
|
|
if ( elementTools.isNode(element) ) { |
|
|
|
|
|
sanityCheckResult = graph.checkIfIriClassAlreadyExist(url); |
|
|
if ( sanityCheckResult === false ) { |
|
|
element.iri(url); |
|
|
} else { |
|
|
|
|
|
graph.options().warningModule().showWarning("Already seen this class", |
|
|
"Input IRI: " + url + " for element: " + element.labelForCurrentLanguage() + " already been set", |
|
|
"Restoring previous IRI for Element : " + element.iri(), 2, false, sanityCheckResult); |
|
|
|
|
|
editSidebar.updateSelectionInformation(element); |
|
|
return; |
|
|
|
|
|
} |
|
|
} |
|
|
if ( elementTools.isProperty(element) === true ) { |
|
|
sanityCheckResult = editSidebar.checkProperIriChange(element, url); |
|
|
if ( sanityCheckResult !== false ) { |
|
|
graph.options().warningModule().showWarning("Already seen this property", |
|
|
"Input IRI: " + url + " for element: " + element.labelForCurrentLanguage() + " already been set", |
|
|
"Restoring previous IRI for Element : " + element.iri(), 1, false, sanityCheckResult); |
|
|
|
|
|
editSidebar.updateSelectionInformation(element); |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
element.iri(url); |
|
|
if ( identifyExternalCharacteristicForElement(base, url) === true ) { |
|
|
addAttribute(element, "external"); |
|
|
|
|
|
element.backgroundColor("#36C"); |
|
|
element.redrawElement(); |
|
|
element.redrawLabelText(); |
|
|
|
|
|
|
|
|
} else { |
|
|
removeAttribute(element, "external"); |
|
|
|
|
|
element.backgroundColor(undefined); |
|
|
element.redrawElement(); |
|
|
element.redrawLabelText(); |
|
|
|
|
|
} |
|
|
|
|
|
if ( element.focused() ) { |
|
|
graph.options().focuserModule().handle(element, true); |
|
|
graph.options().focuserModule().handle(element, true); |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
d3.select("#element_iriEditor").node().value = prefixModule.getPrefixRepresentationForFullURI(url); |
|
|
editSidebar.updateSelectionInformation(element); |
|
|
} |
|
|
|
|
|
function validURL( str ){ |
|
|
var urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/; |
|
|
return urlregex.test(str); |
|
|
} |
|
|
|
|
|
|
|
|
function changeLabelForElement( element ){ |
|
|
element.label(d3.select("#element_labelEditor").node().value); |
|
|
element.redrawLabelText(); |
|
|
} |
|
|
|
|
|
editSidebar.updateEditDeleteButtonIds = function ( oldPrefix, newPrefix ){ |
|
|
d3.select("#prefixInputFor_" + oldPrefix).node().id = "prefixInputFor_" + newPrefix; |
|
|
d3.select("#prefixURLFor_" + oldPrefix).node().id = "prefixURLFor_" + newPrefix; |
|
|
d3.select("#deleteButtonFor_" + oldPrefix).node().id = "deleteButtonFor_" + newPrefix; |
|
|
d3.select("#editButtonFor_" + oldPrefix).node().id = "editButtonFor_" + newPrefix; |
|
|
|
|
|
d3.select("#prefixContainerFor_" + oldPrefix).node().id = "prefixContainerFor_" + newPrefix; |
|
|
}; |
|
|
|
|
|
editSidebar.checkForExistingURL = function ( url ){ |
|
|
var i; |
|
|
var allProps = graph.getUnfilteredData().properties; |
|
|
for ( i = 0; i < allProps.length; i++ ) { |
|
|
if ( allProps[i].iri() === url ) return true; |
|
|
} |
|
|
return false; |
|
|
|
|
|
}; |
|
|
editSidebar.checkProperIriChange = function ( element, url ){ |
|
|
console.log("Element changed Label"); |
|
|
console.log("Testing URL " + url); |
|
|
if ( element.type() === "rdfs:subClassOf" || element.type() === "owl:disjointWith" ) { |
|
|
console.log("ignore this for now, already handled in the type and domain range changer"); |
|
|
} else { |
|
|
var i; |
|
|
var allProps = graph.getUnfilteredData().properties; |
|
|
for ( i = 0; i < allProps.length; i++ ) { |
|
|
if ( allProps[i] === element ) continue; |
|
|
if ( allProps[i].iri() === url ) return allProps[i]; |
|
|
} |
|
|
} |
|
|
return false; |
|
|
}; |
|
|
|
|
|
editSidebar.updateSelectionInformation = function ( element ){ |
|
|
|
|
|
if ( element === undefined ) { |
|
|
|
|
|
d3.select("#selectedElementProperties").classed("hidden", true); |
|
|
d3.select("#selectedElementPropertiesEmptyHint").classed("hidden", false); |
|
|
selectedElementForCharacteristics = null; |
|
|
editSidebar.updateElementWidth(); |
|
|
} |
|
|
else { |
|
|
d3.select("#selectedElementProperties").classed("hidden", false); |
|
|
d3.select("#selectedElementPropertiesEmptyHint").classed("hidden", true); |
|
|
d3.select("#typeEditForm_datatype").classed("hidden", true); |
|
|
|
|
|
|
|
|
d3.select("#element_iriEditor").node().value = element.iri(); |
|
|
d3.select("#element_labelEditor").node().value = element.labelForCurrentLanguage(); |
|
|
d3.select("#element_iriEditor").node().title = element.iri(); |
|
|
|
|
|
d3.select("#element_iriEditor") |
|
|
.on("change", function (){ |
|
|
var elementIRI = element.iri(); |
|
|
var prefixed = graph.options().prefixModule().getPrefixRepresentationForFullURI(elementIRI); |
|
|
if ( prefixed === d3.select("#element_iriEditor").node().value ) { |
|
|
console.log("Iri is identical, nothing has changed!"); |
|
|
return; |
|
|
} |
|
|
|
|
|
changeIriForElement(element); |
|
|
}) |
|
|
.on("keydown", function (){ |
|
|
d3.event.stopPropagation(); |
|
|
if ( d3.event.keyCode === 13 ) { |
|
|
d3.event.preventDefault(); |
|
|
console.log("IRI CHANGED Via ENTER pressed"); |
|
|
changeIriForElement(element); |
|
|
d3.select("#element_iriEditor").node().title = element.iri(); |
|
|
} |
|
|
}); |
|
|
|
|
|
var forceIRISync = defaultIriValue(element); |
|
|
d3.select("#element_labelEditor") |
|
|
.on("change", function (){ |
|
|
var sanityCheckResult; |
|
|
console.log("Element changed Label"); |
|
|
var url = getURLFROMPrefixedVersion(element); |
|
|
if ( element.iri() !== url ) { |
|
|
if ( elementTools.isProperty(element) === true ) { |
|
|
sanityCheckResult = editSidebar.checkProperIriChange(element, url); |
|
|
if ( sanityCheckResult !== false ) { |
|
|
graph.options().warningModule().showWarning("Already seen this property", |
|
|
"Input IRI: " + url + " for element: " + element.labelForCurrentLanguage() + " already been set", |
|
|
"Continuing with duplicate property!", 1, false, sanityCheckResult); |
|
|
editSidebar.updateSelectionInformation(element); |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
if ( elementTools.isNode(element) === true ) { |
|
|
sanityCheckResult = graph.checkIfIriClassAlreadyExist(url); |
|
|
if ( sanityCheckResult !== false ) { |
|
|
graph.options().warningModule().showWarning("Already seen this Class", |
|
|
"Input IRI: " + url + " for element: " + element.labelForCurrentLanguage() + " already been set", |
|
|
"Restoring previous IRI for Element : " + element.iri(), 2, false, sanityCheckResult); |
|
|
|
|
|
editSidebar.updateSelectionInformation(element); |
|
|
return; |
|
|
} |
|
|
} |
|
|
element.iri(url); |
|
|
} |
|
|
changeLabelForElement(element); |
|
|
editSidebar.updateSelectionInformation(element); |
|
|
}) |
|
|
.on("keydown", function (){ |
|
|
d3.event.stopPropagation(); |
|
|
if ( d3.event.keyCode === 13 ) { |
|
|
d3.event.preventDefault(); |
|
|
var sanityCheckResult; |
|
|
console.log("Element changed Label"); |
|
|
var url = getURLFROMPrefixedVersion(element); |
|
|
if ( element.iri() !== url ) { |
|
|
if ( elementTools.isProperty(element) === true ) { |
|
|
sanityCheckResult = editSidebar.checkProperIriChange(element, url); |
|
|
if ( sanityCheckResult !== false ) { |
|
|
graph.options().warningModule().showWarning("Already seen this property", |
|
|
"Input IRI: " + url + " for element: " + element.labelForCurrentLanguage() + " already been set", |
|
|
"Continuing with duplicate property!", 1, false, sanityCheckResult); |
|
|
|
|
|
editSidebar.updateSelectionInformation(element); |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
if ( elementTools.isNode(element) === true ) { |
|
|
sanityCheckResult = graph.checkIfIriClassAlreadyExist(url); |
|
|
if ( sanityCheckResult !== false ) { |
|
|
graph.options().warningModule().showWarning("Already seen this Class", |
|
|
"Input IRI: " + url + " for element: " + element.labelForCurrentLanguage() + " already been set", |
|
|
"Restoring previous IRI for Element : " + element.iri(), 2, false, sanityCheckResult); |
|
|
|
|
|
editSidebar.updateSelectionInformation(element); |
|
|
return; |
|
|
} |
|
|
} |
|
|
element.iri(url); |
|
|
} |
|
|
changeLabelForElement(element); |
|
|
} |
|
|
}) |
|
|
.on("keyup", function (){ |
|
|
if ( forceIRISync ) { |
|
|
var labelName = d3.select("#element_labelEditor").node().value; |
|
|
var resourceName = labelName.replaceAll(" ", "_"); |
|
|
var syncedIRI = element.baseIri() + resourceName; |
|
|
|
|
|
|
|
|
d3.select("#element_iriEditor").node().title = element.iri(); |
|
|
d3.select("#element_iriEditor").node().value = prefixModule.getPrefixRepresentationForFullURI(syncedIRI); |
|
|
} |
|
|
}); |
|
|
|
|
|
d3.select("#element_iriEditor").node().disabled = false; |
|
|
d3.select("#element_labelEditor").node().disabled = false; |
|
|
|
|
|
if ( element.type() === "rdfs:subClassOf" ) { |
|
|
d3.select("#element_iriEditor").node().value = "http://www.w3.org/2000/01/rdf-schema#subClassOf"; |
|
|
d3.select("#element_iriEditor").node().title = "http://www.w3.org/2000/01/rdf-schema#subClassOf"; |
|
|
d3.select("#element_labelEditor").node().value = "Subclass of"; |
|
|
d3.select("#element_iriEditor").node().disabled = true; |
|
|
d3.select("#element_labelEditor").node().disabled = true; |
|
|
} |
|
|
if ( element.type() === "owl:Thing" ) { |
|
|
d3.select("#element_iriEditor").node().value = "http://www.w3.org/2002/07/owl#Thing"; |
|
|
d3.select("#element_iriEditor").node().title = "http://www.w3.org/2002/07/owl#Thing"; |
|
|
d3.select("#element_labelEditor").node().value = "Thing"; |
|
|
d3.select("#element_iriEditor").node().disabled = true; |
|
|
d3.select("#element_labelEditor").node().disabled = true; |
|
|
} |
|
|
|
|
|
if ( element.type() === "owl:disjointWith" ) { |
|
|
d3.select("#element_iriEditor").node().value = "http://www.w3.org/2002/07/owl#disjointWith"; |
|
|
d3.select("#element_iriEditor").node().title = "http://www.w3.org/2002/07/owl#disjointWith"; |
|
|
d3.select("#element_iriEditor").node().disabled = true; |
|
|
d3.select("#element_labelEditor").node().disabled = true; |
|
|
} |
|
|
|
|
|
if ( element.type() === "rdfs:Literal" ) { |
|
|
d3.select("#element_iriEditor").node().value = "http://www.w3.org/2000/01/rdf-schema#Literal"; |
|
|
d3.select("#element_iriEditor").node().title = "http://www.w3.org/2000/01/rdf-schema#Literal"; |
|
|
d3.select("#element_iriEditor").node().disabled = true; |
|
|
d3.select("#element_labelEditor").node().disabled = true; |
|
|
element.iri("http://www.w3.org/2000/01/rdf-schema#Literal"); |
|
|
} |
|
|
if ( element.type() === "rdfs:Datatype" ) { |
|
|
var datatypeEditorSelection = d3.select("#typeEditor_datatype"); |
|
|
d3.select("#typeEditForm_datatype").classed("hidden", false); |
|
|
element.iri("http://www.w3.org/2000/01/rdf-schema#Datatype"); |
|
|
d3.select("#element_iriEditor").node().value = "http://www.w3.org/2000/01/rdf-schema#Datatype"; |
|
|
d3.select("#element_iriEditor").node().title = "http://www.w3.org/2000/01/rdf-schema#Datatype"; |
|
|
d3.select("#element_iriEditor").node().disabled = true; |
|
|
d3.select("#element_labelEditor").node().disabled = true; |
|
|
|
|
|
datatypeEditorSelection.node().value = element.dType(); |
|
|
if ( datatypeEditorSelection.node().value === "undefined" ) { |
|
|
d3.select("#element_iriEditor").node().disabled = true; |
|
|
d3.select("#element_labelEditor").node().disabled = false; |
|
|
} |
|
|
|
|
|
datatypeEditorSelection.on("change", function (){ |
|
|
changeDatatypeType(element); |
|
|
}); |
|
|
} |
|
|
|
|
|
|
|
|
var typeEditorSelection = d3.select("#typeEditor").node(); |
|
|
var htmlCollection = typeEditorSelection.children; |
|
|
var numEntries = htmlCollection.length; |
|
|
var i; |
|
|
var elementPrototypes = getElementPrototypes(element); |
|
|
for ( i = 0; i < numEntries; i++ ) |
|
|
typeEditorSelection.removeChild(htmlCollection[0]); |
|
|
|
|
|
for ( i = 0; i < elementPrototypes.length; i++ ) { |
|
|
var optA = document.createElement('option'); |
|
|
optA.innerHTML = elementPrototypes[i]; |
|
|
typeEditorSelection.appendChild(optA); |
|
|
} |
|
|
|
|
|
typeEditorSelection.value = element.type(); |
|
|
d3.select("#typeEditor").on("change", function (){ |
|
|
elementTypeSelectionChanged(element); |
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
var needChar = elementNeedsCharacteristics(element); |
|
|
d3.select("#property_characteristics_Container").classed("hidden", !needChar); |
|
|
if ( needChar === true ) { |
|
|
addElementsCharacteristics(element); |
|
|
} |
|
|
var fullURI = d3.select("#element_iriEditor").node().value; |
|
|
d3.select("#element_iriEditor").node().value = prefixModule.getPrefixRepresentationForFullURI(fullURI); |
|
|
d3.select("#element_iriEditor").node().title = fullURI; |
|
|
editSidebar.updateElementWidth(); |
|
|
} |
|
|
|
|
|
}; |
|
|
|
|
|
editSidebar.updateGeneralOntologyInfo = function (){ |
|
|
var preferredLanguage = graph && graph.language ? graph.language() : null; |
|
|
|
|
|
|
|
|
var generalMetaObj = graph.options().getGeneralMetaObject(); |
|
|
if ( generalMetaObj.hasOwnProperty("title") ) { |
|
|
|
|
|
if ( typeof generalMetaObj.title === "object" ) { |
|
|
d3.select("#titleEditor").node().value = languageTools.textInLanguage(generalMetaObj.title, preferredLanguage); |
|
|
} else |
|
|
d3.select("#titleEditor").node().value = generalMetaObj.title; |
|
|
} |
|
|
if ( generalMetaObj.hasOwnProperty("iri") ) d3.select("#iriEditor").node().value = generalMetaObj.iri; |
|
|
if ( generalMetaObj.hasOwnProperty("version") ) d3.select("#versionEditor").node().value = generalMetaObj.version; |
|
|
if ( generalMetaObj.hasOwnProperty("author") ) d3.select("#authorsEditor").node().value = generalMetaObj.author; |
|
|
|
|
|
|
|
|
if ( generalMetaObj.hasOwnProperty("description") ) { |
|
|
|
|
|
if ( typeof generalMetaObj.description === "object" ) |
|
|
d3.select("#descriptionEditor").node().value = |
|
|
languageTools.textInLanguage(generalMetaObj.description, preferredLanguage); |
|
|
else |
|
|
d3.select("#descriptionEditor").node().value = generalMetaObj.description; |
|
|
} |
|
|
else |
|
|
d3.select("#descriptionEditor").node().value = "No Description"; |
|
|
}; |
|
|
|
|
|
editSidebar.updateElementWidth = function (){ |
|
|
var height = window.innerHeight - 40; |
|
|
var lsb_offset = d3.select("#logo").node().getBoundingClientRect().height + 5; |
|
|
var lsb_height = height - lsb_offset; |
|
|
d3.select("#containerForLeftSideBar").style("top", lsb_offset + "px"); |
|
|
d3.select("#leftSideBarCollapseButton").style("top", lsb_offset + "px"); |
|
|
d3.select("#containerForLeftSideBar").style("height", lsb_height + "px"); |
|
|
|
|
|
var div_width = d3.select("#generalDetailsEdit").node().getBoundingClientRect().width; |
|
|
div_width += 10; |
|
|
|
|
|
var title_labelWidth = d3.select("#titleEditor-label").node().getBoundingClientRect().width + 20; |
|
|
var iri_labelWidth = d3.select("#iriEditor-label").node().getBoundingClientRect().width + 20; |
|
|
var version_labelWidth = d3.select("#versionEditor-label").node().getBoundingClientRect().width + 20; |
|
|
var author_labelWidth = d3.select("#authorsEditor-label").node().getBoundingClientRect().width + 20; |
|
|
|
|
|
var maxW = 0; |
|
|
maxW = Math.max(maxW, title_labelWidth); |
|
|
maxW = Math.max(maxW, iri_labelWidth); |
|
|
maxW = Math.max(maxW, version_labelWidth); |
|
|
maxW = Math.max(maxW, author_labelWidth); |
|
|
|
|
|
var meta_inputWidth = div_width - maxW - 10; |
|
|
|
|
|
d3.select("#titleEditor").style("width", meta_inputWidth + "px"); |
|
|
d3.select("#iriEditor").style("width", meta_inputWidth + "px"); |
|
|
d3.select("#versionEditor").style("width", meta_inputWidth + "px"); |
|
|
d3.select("#authorsEditor").style("width", meta_inputWidth + "px"); |
|
|
|
|
|
|
|
|
var elementIri_width = d3.select("#element_iriEditor-label").node().getBoundingClientRect().width + 20; |
|
|
var elementLabel_width = d3.select("#element_labelEditor-label").node().getBoundingClientRect().width + 20; |
|
|
var elementType_width = d3.select("#typeEditor-label").node().getBoundingClientRect().width + 20; |
|
|
var elementDType_width = d3.select("#typeEditor_datatype-label").node().getBoundingClientRect().width + 20; |
|
|
|
|
|
maxW = 0; |
|
|
maxW = Math.max(maxW, elementIri_width); |
|
|
maxW = Math.max(maxW, elementLabel_width); |
|
|
maxW = Math.max(maxW, elementType_width); |
|
|
maxW = Math.max(maxW, elementDType_width); |
|
|
var selectedElement_inputWidth = div_width - maxW - 10; |
|
|
|
|
|
d3.select("#element_iriEditor").style("width", selectedElement_inputWidth + "px"); |
|
|
d3.select("#element_labelEditor").style("width", selectedElement_inputWidth + "px"); |
|
|
d3.select("#typeEditor").style("width", selectedElement_inputWidth + 4 + "px"); |
|
|
d3.select("#typeEditor_datatype").style("width", selectedElement_inputWidth + 4 + "px"); |
|
|
|
|
|
|
|
|
var containerWidth = d3.select("#containerForPrefixURL").node().getBoundingClientRect().width; |
|
|
if ( containerWidth !== 0 ) { |
|
|
var inputs = d3.selectAll(".prefixInput"); |
|
|
if ( inputs.node() ) { |
|
|
var prefixWidth = d3.selectAll(".prefixInput").node().getBoundingClientRect().width; |
|
|
d3.selectAll(".prefixURL").style("width", containerWidth - prefixWidth - 45 + "px"); |
|
|
} |
|
|
} |
|
|
}; |
|
|
|
|
|
function addElementsCharacteristics( element ){ |
|
|
|
|
|
selectedElementForCharacteristics = element; |
|
|
var i; |
|
|
|
|
|
var charSelectionNode = d3.select("#property_characteristics_Selection"); |
|
|
var htmlCollection = charSelectionNode.node().children; |
|
|
if ( htmlCollection ) { |
|
|
var numEntries = htmlCollection.length; |
|
|
for ( var q = 0; q < numEntries; q++ ) { |
|
|
charSelectionNode.node().removeChild(htmlCollection[0]); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if ( element.attributes().indexOf("external") > -1 ) { |
|
|
|
|
|
var externalCharSpan = charSelectionNode.append("span"); |
|
|
externalCharSpan.classed("spanForCharSelection", true); |
|
|
externalCharSpan.node().innerHTML = "external"; |
|
|
} |
|
|
var filterContainer, |
|
|
filterCheckbox; |
|
|
if ( elementTools.isNode(element) === true ) { |
|
|
|
|
|
var arrayOfNodeChars = ["deprecated"]; |
|
|
for ( i = 0; i < arrayOfNodeChars.length; i++ ) { |
|
|
filterContainer = charSelectionNode |
|
|
.append("div") |
|
|
.classed("checkboxContainer", true) |
|
|
.style("padding-top", "2px"); |
|
|
|
|
|
filterCheckbox = filterContainer.append("input") |
|
|
.classed("filterCheckbox", true) |
|
|
.attr("id", "CharacteristicsCheckbox" + i) |
|
|
.attr("type", "checkbox") |
|
|
.attr("characteristics", arrayOfNodeChars[i]) |
|
|
.property("checked", getPresentAttribute(element, arrayOfNodeChars[i])); |
|
|
|
|
|
filterContainer.append("label") |
|
|
.attr("for", "CharacteristicsCheckbox" + i) |
|
|
.text(arrayOfNodeChars[i]); |
|
|
|
|
|
filterCheckbox.on("click", handleCheckBoxClick); |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
else { |
|
|
|
|
|
var arrayOfPropertyChars = ["deprecated", "inverse functional", "functional", "transitive"]; |
|
|
if ( elementTools.isDatatypeProperty(element) === true ) { |
|
|
arrayOfPropertyChars = ["deprecated", "functional"]; |
|
|
} |
|
|
for ( i = 0; i < arrayOfPropertyChars.length; i++ ) { |
|
|
filterContainer = charSelectionNode |
|
|
.append("div") |
|
|
.classed("checkboxContainer", true) |
|
|
.style("padding-top", "2px"); |
|
|
|
|
|
filterCheckbox = filterContainer.append("input") |
|
|
.classed("filterCheckbox", true) |
|
|
.attr("id", "CharacteristicsCheckbox" + i) |
|
|
.attr("type", "checkbox") |
|
|
.attr("characteristics", arrayOfPropertyChars[i]) |
|
|
.property("checked", getPresentAttribute(element, arrayOfPropertyChars[i])); |
|
|
|
|
|
filterContainer.append("label") |
|
|
.attr("for", "CharacteristicsCheckbox" + i) |
|
|
.text(arrayOfPropertyChars[i]); |
|
|
|
|
|
filterCheckbox.on("click", handleCheckBoxClick); |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
function getPresentAttribute( selectedElement, element ){ |
|
|
return (selectedElement.attributes().indexOf(element) >= 0); |
|
|
} |
|
|
|
|
|
function handleCheckBoxClick(){ |
|
|
var checked = this.checked; |
|
|
var char = this.getAttribute("characteristics"); |
|
|
if ( checked === true ) { |
|
|
addAttribute(selectedElementForCharacteristics, char); |
|
|
} else { |
|
|
removeAttribute(selectedElementForCharacteristics, char); |
|
|
} |
|
|
|
|
|
selectedElementForCharacteristics.redrawElement(); |
|
|
|
|
|
selectedElementForCharacteristics.focused(false); |
|
|
selectedElementForCharacteristics.toggleFocus(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
function addAttribute( selectedElement, char ){ |
|
|
if ( selectedElement.attributes().indexOf(char) === -1 ) { |
|
|
|
|
|
var attr = selectedElement.attributes(); |
|
|
attr.push(char); |
|
|
selectedElement.attributes(attr); |
|
|
} |
|
|
if ( selectedElement.indications().indexOf(char) === -1 ) { |
|
|
var indications = selectedElement.indications(); |
|
|
indications.push(char); |
|
|
selectedElement.indications(indications); |
|
|
} |
|
|
|
|
|
var visAttr; |
|
|
if ( selectedElement.visualAttributes().indexOf(char) === -1 ) { |
|
|
visAttr = selectedElement.visualAttributes(); |
|
|
visAttr.push(char); |
|
|
selectedElement.visualAttributes(visAttr); |
|
|
} |
|
|
if ( getPresentAttribute(selectedElement, "external") && getPresentAttribute(selectedElement, "deprecated") ) { |
|
|
visAttr = selectedElement.visualAttributes(); |
|
|
var visInd = visAttr.indexOf("external"); |
|
|
if ( visInd > -1 ) { |
|
|
visAttr.splice(visInd, 1); |
|
|
} |
|
|
selectedElement.visualAttributes(visAttr); |
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
function removeAttribute( selectedElement, element ){ |
|
|
var attr = selectedElement.attributes(); |
|
|
var indications = selectedElement.indications(); |
|
|
var visAttr = selectedElement.visualAttributes(); |
|
|
var attrInd = attr.indexOf(element); |
|
|
if ( attrInd >= 0 ) { |
|
|
attr.splice(attrInd, 1); |
|
|
} |
|
|
var indInd = indications.indexOf(element); |
|
|
if ( indInd > -1 ) { |
|
|
indications.splice(indInd, 1); |
|
|
} |
|
|
var visInd = visAttr.indexOf(element); |
|
|
if ( visInd > -1 ) { |
|
|
visAttr.splice(visInd, 1); |
|
|
} |
|
|
selectedElement.attributes(attr); |
|
|
selectedElement.indications(indications); |
|
|
selectedElement.visualAttributes(visAttr); |
|
|
if ( element === "deprecated" ) { |
|
|
|
|
|
|
|
|
|
|
|
if ( selectedElement.type() === "owl:Class" ) selectedElement.styleClass("class"); |
|
|
if ( selectedElement.type() === "owl:DatatypeProperty" ) selectedElement.styleClass("datatypeproperty"); |
|
|
if ( selectedElement.type() === "owl:ObjectProperty" ) selectedElement.styleClass("objectproperty"); |
|
|
if ( selectedElement.type() === "owl:disjointWith" ) selectedElement.styleClass("disjointwith"); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
function elementNeedsCharacteristics( element ){ |
|
|
|
|
|
if ( element.type() === "owl:Thing" || |
|
|
element.type() === "rdfs:subClassOf" || |
|
|
element.type() === "rdfs:Literal" || |
|
|
element.type() === "rdfs:Datatype" || |
|
|
element.type() === "rdfs:disjointWith" ) |
|
|
return false; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
|
|
} |
|
|
|
|
|
function elementTypeSelectionChanged( element ){ |
|
|
if ( elementTools.isNode(element) ) { |
|
|
if ( graph.changeNodeType(element) === false ) { |
|
|
|
|
|
|
|
|
if ( elementTools.isDatatype(element) === true ) { |
|
|
|
|
|
} |
|
|
editSidebar.updateSelectionInformation(element); |
|
|
} |
|
|
} |
|
|
|
|
|
if ( elementTools.isProperty(element) ) { |
|
|
if ( graph.changePropertyType(element) === false ) { |
|
|
|
|
|
editSidebar.updateSelectionInformation(element); |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
function getElementPrototypes( selectedElement ){ |
|
|
var availiblePrototypes = []; |
|
|
|
|
|
if ( elementTools.isProperty(selectedElement) ) { |
|
|
if ( selectedElement.type() === "owl:DatatypeProperty" ) |
|
|
availiblePrototypes.push("owl:DatatypeProperty"); |
|
|
else { |
|
|
availiblePrototypes.push("owl:ObjectProperty"); |
|
|
|
|
|
if ( selectedElement.domain() !== selectedElement.range() ) { |
|
|
availiblePrototypes.push("rdfs:subClassOf"); |
|
|
} |
|
|
availiblePrototypes.push("owl:disjointWith"); |
|
|
availiblePrototypes.push("owl:allValuesFrom"); |
|
|
availiblePrototypes.push("owl:someValuesFrom"); |
|
|
} |
|
|
return availiblePrototypes; |
|
|
} |
|
|
if ( selectedElement.renderType() === "rect" ) { |
|
|
availiblePrototypes.push("rdfs:Literal"); |
|
|
availiblePrototypes.push("rdfs:Datatype"); |
|
|
} else { |
|
|
availiblePrototypes.push("owl:Class"); |
|
|
availiblePrototypes.push("owl:Thing"); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
return availiblePrototypes; |
|
|
} |
|
|
|
|
|
|
|
|
function setupCollapsing(){ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function collapseContainers( containers ){ |
|
|
containers.classed("hidden", true); |
|
|
} |
|
|
|
|
|
function expandContainers( containers ){ |
|
|
containers.classed("hidden", false); |
|
|
} |
|
|
|
|
|
var triggers = d3.selectAll(".accordion-trigger"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
triggers.on("click", function (){ |
|
|
var selectedTrigger = d3.select(this); |
|
|
if ( selectedTrigger.classed("accordion-trigger-active") ) { |
|
|
|
|
|
collapseContainers(d3.select(selectedTrigger.node().nextElementSibling)); |
|
|
selectedTrigger.classed("accordion-trigger-active", false); |
|
|
} else { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
expandContainers(d3.select(selectedTrigger.node().nextElementSibling)); |
|
|
selectedTrigger.classed("accordion-trigger-active", true); |
|
|
} |
|
|
editSidebar.updateElementWidth(); |
|
|
}); |
|
|
} |
|
|
|
|
|
return editSidebar; |
|
|
}; |
|
|
|