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