|
|
module.exports = function ( graph ){ |
|
|
|
|
|
var warningModule = {}; |
|
|
var superContainer = d3.select("#WarningErrorMessages"); |
|
|
var _messageContainers = []; |
|
|
var _messageContext = []; |
|
|
var _visibleStatus = []; |
|
|
|
|
|
var _filterHintId; |
|
|
var _editorHintId; |
|
|
var _messageId = -1; |
|
|
superContainer.style("display", "inline-block"); |
|
|
var cssStyleIndex = 0; |
|
|
var styleSelectorIndex = 2; |
|
|
|
|
|
|
|
|
|
|
|
function createCSSSelector( name, rules ){ |
|
|
var style = document.createElement('style'); |
|
|
style.type = 'text/css'; |
|
|
document.getElementsByTagName('head')[0].appendChild(style); |
|
|
if ( !(style.sheet || {}).insertRule ) |
|
|
(style.styleSheet || style.sheet).addRule(name, rules); |
|
|
else |
|
|
style.sheet.insertRule(name + "{" + rules + "}", 0); |
|
|
} |
|
|
|
|
|
|
|
|
function findCSS_Index(){ |
|
|
createCSSSelector("@keyframes msg_CollapseAnimation", " 0% { top: 0; } 100% { top: -400px;}"); |
|
|
console.log(document.styleSheets ); |
|
|
} |
|
|
|
|
|
findCSS_Index(); |
|
|
|
|
|
warningModule.addMessageBox = function (){ |
|
|
|
|
|
|
|
|
_messageId++; |
|
|
var messageContainer = d3.select("#WarningErrorMessages").append("div"); |
|
|
messageContainer.node().id = "messageContainerId_" + _messageId; |
|
|
|
|
|
var messageContext = messageContainer.append("div"); |
|
|
messageContext.node().id = "messageContextId_" + _messageId; |
|
|
messageContext.style("top", "0"); |
|
|
messageContainer.style("position", "relative"); |
|
|
messageContainer.style("width", "100%"); |
|
|
|
|
|
_messageContainers.push(messageContainer); |
|
|
_messageContext.push(messageContext); |
|
|
|
|
|
|
|
|
messageContainer.node().addEventListener("animationend", _msgContainer_animationEnd); |
|
|
|
|
|
|
|
|
_visibleStatus[_messageId] = true; |
|
|
return _messageId; |
|
|
}; |
|
|
|
|
|
function _msgContainer_animationEnd(){ |
|
|
var containerId = this.id; |
|
|
var tokens = containerId.split("_")[1]; |
|
|
var mContainer = d3.select("#" + containerId); |
|
|
|
|
|
mContainer.classed("hidden", !_visibleStatus[tokens]); |
|
|
|
|
|
if ( !_visibleStatus[tokens] ) { |
|
|
mContainer.remove(); |
|
|
_messageContext[tokens] = null; |
|
|
_messageContainers[tokens] = null; |
|
|
} |
|
|
|
|
|
var c = d3.select(this); |
|
|
|
|
|
} |
|
|
|
|
|
warningModule.createMessageContext = function ( id ){ |
|
|
var warningContainer = _messageContext[id]; |
|
|
var moduleContainer = _messageContainers[id]; |
|
|
var generalHint = warningContainer.append('div'); |
|
|
generalHint.node().innerHTML = ""; |
|
|
_editorHintId = id; |
|
|
|
|
|
generalHint.node().innerHTML += "Editing mode activated.<br>" + |
|
|
"You can now modify an existing ontology or create a new one via the <em>ontology</em> menu.<br>" + |
|
|
"You can save any ontology using the <em>export</em> menu (and exporting it as TTL file)."; |
|
|
|
|
|
generalHint.style("padding", "5px"); |
|
|
generalHint.style("line-height", "1.2em"); |
|
|
generalHint.style("font-size", "1.2em"); |
|
|
|
|
|
|
|
|
var ul = warningContainer.append('ul'); |
|
|
ul.append('li').node().innerHTML = "Create a class with <b>double click / tap</b> on empty canvas area."; |
|
|
ul.append('li').node().innerHTML = "Edit names with <b>double click / tap</b> on element.</li>"; |
|
|
ul.append('li').node().innerHTML = "Selection of default constructors is provided in the left sidebar."; |
|
|
ul.append('li').node().innerHTML = "Additional editing functionality is provided in the right sidebar."; |
|
|
|
|
|
|
|
|
var gotItButton = warningContainer.append("label"); |
|
|
gotItButton.node().id = "killWarningErrorMessages_" + id; |
|
|
gotItButton.node().innerHTML = "Got It"; |
|
|
gotItButton.on("click", warningModule.closeMessage); |
|
|
|
|
|
moduleContainer.classed("hidden", false); |
|
|
moduleContainer.style("-webkit-animation-name", "warn_ExpandAnimation"); |
|
|
moduleContainer.style("-webkit-animation-duration", "0.5s"); |
|
|
}; |
|
|
|
|
|
warningModule.showMessage = function ( id ){ |
|
|
var moduleContainer = _messageContainers[id]; |
|
|
moduleContainer.classed("hidden", false); |
|
|
moduleContainer.style("-webkit-animation-name", "warn_ExpandAnimation"); |
|
|
moduleContainer.style("-webkit-animation-duration", "0.5s"); |
|
|
}; |
|
|
|
|
|
warningModule.closeMessage = function ( id ){ |
|
|
var nId; |
|
|
if ( id === undefined ) { |
|
|
var givenId = this.id; |
|
|
nId = givenId.split("_")[1]; |
|
|
} else { |
|
|
nId = id; |
|
|
} |
|
|
if ( id && id.indexOf("_") !== -1 ) { |
|
|
nId = id.split("_")[1]; |
|
|
} |
|
|
_visibleStatus[nId] = false; |
|
|
|
|
|
var moduleContainer = _messageContainers[nId]; |
|
|
moduleContainer.style("-webkit-animation-name", "warn_CollapseAnimation"); |
|
|
moduleContainer.style("-webkit-animation-duration", "0.5s"); |
|
|
|
|
|
var m_height = moduleContainer.node().getBoundingClientRect().height; |
|
|
|
|
|
|
|
|
var pNode = moduleContainer.node().parentNode; |
|
|
|
|
|
var followingChildren = []; |
|
|
var pChild = pNode.children; |
|
|
var pChild_len = pChild.length; |
|
|
var containerId = moduleContainer.node().id; |
|
|
var found_me = false; |
|
|
for ( var i = 0; i < pChild_len; i++ ) { |
|
|
if ( found_me === true ) { |
|
|
followingChildren.push(pChild[i].id); |
|
|
} |
|
|
|
|
|
if ( containerId === pChild[i].id ) { |
|
|
found_me = true; |
|
|
} |
|
|
} |
|
|
|
|
|
for ( var fc = 0; fc < followingChildren.length; fc++ ) { |
|
|
var child = d3.select("#" + followingChildren[fc]); |
|
|
|
|
|
var superCss = document.styleSheets[styleSelectorIndex].cssRules[cssStyleIndex]; |
|
|
|
|
|
superCss.deleteRule("0%"); |
|
|
superCss.deleteRule("100%"); |
|
|
|
|
|
superCss.appendRule("0% {top: 0;}"); |
|
|
superCss.appendRule("100% {top: -" + m_height + "px;"); |
|
|
|
|
|
child.style("-webkit-animation-name", "msg_CollapseAnimation"); |
|
|
child.style("-webkit-animation-duration", "0.5s"); |
|
|
child.node().addEventListener("animationend", _child_animationEnd); |
|
|
} |
|
|
}; |
|
|
|
|
|
function _child_animationEnd(){ |
|
|
var c = d3.select(this); |
|
|
c.style("-webkit-animation-name", ""); |
|
|
c.style("-webkit-animation-duration", ""); |
|
|
c.node().removeEventListener("animationend", _child_animationEnd); |
|
|
} |
|
|
|
|
|
warningModule.closeFilterHint = function (){ |
|
|
if ( _messageContainers[_filterHintId] ) { |
|
|
_messageContainers[_filterHintId].classed("hidden", true); |
|
|
_messageContainers[_filterHintId].remove(); |
|
|
_messageContainers[_filterHintId] = null; |
|
|
_messageContext[_filterHintId] = null; |
|
|
_visibleStatus[_filterHintId] = false; |
|
|
} |
|
|
}; |
|
|
|
|
|
warningModule.showEditorHint = function (){ |
|
|
var id = warningModule.addMessageBox(); |
|
|
warningModule.createMessageContext(id); |
|
|
}; |
|
|
|
|
|
warningModule.showExporterWarning=function (){ |
|
|
warningModule.showWarning("Can not export ontology", "Detected unsupported ontology axioms, (e.g. owl:Union)", "Ontology is not exported", 1, false); |
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
warningModule.responseWarning = function ( header, reason, action, callback, parameterArray, forcedWarning ){ |
|
|
var id = warningModule.addMessageBox(); |
|
|
var warningContainer = _messageContext[id]; |
|
|
var moduleContainer = _messageContainers[id]; |
|
|
_visibleStatus[id] = true; |
|
|
d3.select("#blockGraphInteractions").classed("hidden", false); |
|
|
var graphWidth = 0.5 * graph.options().width(); |
|
|
|
|
|
if ( header.length > 0 ) { |
|
|
var head = warningContainer.append("div"); |
|
|
head.style("padding", "5px"); |
|
|
var titleHeader = head.append("div"); |
|
|
|
|
|
titleHeader.style("display", "inline-flex"); |
|
|
titleHeader.node().innerHTML = "<b>Warning:</b>"; |
|
|
titleHeader.style("padding-right", "3px"); |
|
|
var msgHeader = head.append("div"); |
|
|
|
|
|
msgHeader.style("display", "inline-flex"); |
|
|
msgHeader.style("max-width", graphWidth + "px"); |
|
|
|
|
|
msgHeader.node().innerHTML = header; |
|
|
} |
|
|
if ( reason.length > 0 ) { |
|
|
var reasonContainer = warningContainer.append("div"); |
|
|
reasonContainer.style("padding", "5px"); |
|
|
var reasonHeader = reasonContainer.append("div"); |
|
|
|
|
|
reasonHeader.style("display", "inline-flex"); |
|
|
reasonHeader.style("padding-right", "3px"); |
|
|
|
|
|
reasonHeader.node().innerHTML = "<b>Reason:</b>"; |
|
|
var msgReason = reasonContainer.append("div"); |
|
|
|
|
|
msgReason.style("display", "inline-flex"); |
|
|
msgReason.style("max-width", graphWidth + "px"); |
|
|
msgReason.node().innerHTML = reason; |
|
|
} |
|
|
if ( action.length > 0 ) { |
|
|
var actionContainer = warningContainer.append("div"); |
|
|
actionContainer.style("padding", "5px"); |
|
|
var actionHeader = actionContainer.append("div"); |
|
|
|
|
|
actionHeader.style("display", "inline-flex"); |
|
|
actionHeader.style("padding-right", "8px"); |
|
|
actionHeader.node().innerHTML = "<b>Action:</b>"; |
|
|
var msgAction = actionContainer.append("div"); |
|
|
|
|
|
msgAction.style("display", "inline-flex"); |
|
|
msgAction.style("max-width", graphWidth + "px"); |
|
|
msgAction.node().innerHTML = action; |
|
|
} |
|
|
|
|
|
var gotItButton = warningContainer.append("label"); |
|
|
gotItButton.node().id = "killWarningErrorMessages_" + id; |
|
|
gotItButton.node().innerHTML = "Continue"; |
|
|
gotItButton.on("click", function (){ |
|
|
warningModule.closeMessage(this.id); |
|
|
d3.select("#blockGraphInteractions").classed("hidden", true); |
|
|
callback(parameterArray[0], parameterArray[1], parameterArray[2], parameterArray[3]); |
|
|
}); |
|
|
warningContainer.append("span").node().innerHTML = "|"; |
|
|
var cancelButton = warningContainer.append("label"); |
|
|
cancelButton.node().id = "cancelButton_" + id; |
|
|
cancelButton.node().innerHTML = "Cancel"; |
|
|
cancelButton.on("click", function (){ |
|
|
warningModule.closeMessage(this.id); |
|
|
d3.select("#blockGraphInteractions").classed("hidden", true); |
|
|
}); |
|
|
moduleContainer.classed("hidden", false); |
|
|
moduleContainer.style("-webkit-animation-name", "warn_ExpandAnimation"); |
|
|
moduleContainer.style("-webkit-animation-duration", "0.5s"); |
|
|
}; |
|
|
|
|
|
warningModule.showFilterHint = function (){ |
|
|
var id = warningModule.addMessageBox(); |
|
|
var warningContainer = _messageContext[id]; |
|
|
var moduleContainer = _messageContainers[id]; |
|
|
_visibleStatus[id] = true; |
|
|
|
|
|
_filterHintId = id; |
|
|
var generalHint = warningContainer.append('div'); |
|
|
|
|
|
generalHint.node().innerHTML = "Collapsing filter activated.<br>" + |
|
|
"The number of visualized elements has been automatically reduced.<br>" + |
|
|
"Use the degree of collapsing slider in the <em>filter</em> menu to adjust the visualization.<br><br>" + |
|
|
"<em>Note:</em> A performance decrease could be experienced with a growing amount of visual elements in the graph."; |
|
|
|
|
|
|
|
|
generalHint.style("padding", "5px"); |
|
|
generalHint.style("line-height", "1.2em"); |
|
|
generalHint.style("font-size", "1.2em"); |
|
|
|
|
|
var gotItButton = warningContainer.append("label"); |
|
|
gotItButton.node().id = "killFilterMessages_" + id; |
|
|
gotItButton.node().innerHTML = "Got It"; |
|
|
gotItButton.on("click", warningModule.closeMessage); |
|
|
|
|
|
moduleContainer.classed("hidden", false); |
|
|
moduleContainer.style("-webkit-animation-name", "warn_ExpandAnimation"); |
|
|
moduleContainer.style("-webkit-animation-duration", "0.5s"); |
|
|
}; |
|
|
|
|
|
warningModule.showMultiFileUploadWarning = function (){ |
|
|
var id = warningModule.addMessageBox(); |
|
|
var warningContainer = _messageContext[id]; |
|
|
var moduleContainer = _messageContainers[id]; |
|
|
_visibleStatus[id] = true; |
|
|
|
|
|
_filterHintId = id; |
|
|
var generalHint = warningContainer.append('div'); |
|
|
|
|
|
generalHint.node().innerHTML = "Uploading multiple files is not supported.<br>"; |
|
|
|
|
|
generalHint.style("padding", "5px"); |
|
|
generalHint.style("line-height", "1.2em"); |
|
|
generalHint.style("font-size", "1.2em"); |
|
|
|
|
|
var gotItButton = warningContainer.append("label"); |
|
|
gotItButton.node().id = "killFilterMessages_" + id; |
|
|
gotItButton.node().innerHTML = "Got It"; |
|
|
gotItButton.on("click", warningModule.closeMessage); |
|
|
|
|
|
moduleContainer.classed("hidden", false); |
|
|
moduleContainer.style("-webkit-animation-name", "warn_ExpandAnimation"); |
|
|
moduleContainer.style("-webkit-animation-duration", "0.5s"); |
|
|
}; |
|
|
|
|
|
warningModule.showWarning = function ( header, reason, action, type, forcedWarning, additionalOpts ){ |
|
|
var id = warningModule.addMessageBox(); |
|
|
var warningContainer = _messageContext[id]; |
|
|
var moduleContainer = _messageContainers[id]; |
|
|
_visibleStatus[id] = true; |
|
|
|
|
|
|
|
|
var graphWidth = 0.5 * graph.options().width(); |
|
|
|
|
|
if ( header.length > 0 ) { |
|
|
var head = warningContainer.append("div"); |
|
|
head.style("padding", "5px"); |
|
|
var titleHeader = head.append("div"); |
|
|
|
|
|
titleHeader.style("display", "inline-flex"); |
|
|
titleHeader.node().innerHTML = "<b>Warning:</b>"; |
|
|
titleHeader.style("padding-right", "3px"); |
|
|
var msgHeader = head.append("div"); |
|
|
|
|
|
msgHeader.style("display", "inline-flex"); |
|
|
msgHeader.style("max-width", graphWidth + "px"); |
|
|
|
|
|
msgHeader.node().innerHTML = header; |
|
|
} |
|
|
if ( reason.length > 0 ) { |
|
|
var reasonContainer = warningContainer.append("div"); |
|
|
reasonContainer.style("padding", "5px"); |
|
|
var reasonHeader = reasonContainer.append("div"); |
|
|
|
|
|
reasonHeader.style("display", "inline-flex"); |
|
|
reasonHeader.style("padding-right", "3px"); |
|
|
|
|
|
reasonHeader.node().innerHTML = "<b>Reason:</b>"; |
|
|
var msgReason = reasonContainer.append("div"); |
|
|
|
|
|
msgReason.style("display", "inline-flex"); |
|
|
msgReason.style("max-width", graphWidth + "px"); |
|
|
msgReason.node().innerHTML = reason; |
|
|
} |
|
|
if ( action.length > 0 ) { |
|
|
var actionContainer = warningContainer.append("div"); |
|
|
actionContainer.style("padding", "5px"); |
|
|
var actionHeader = actionContainer.append("div"); |
|
|
|
|
|
actionHeader.style("display", "inline-flex"); |
|
|
actionHeader.style("padding-right", "8px"); |
|
|
actionHeader.node().innerHTML = "<b>Action:</b>"; |
|
|
var msgAction = actionContainer.append("div"); |
|
|
|
|
|
msgAction.style("display", "inline-flex"); |
|
|
msgAction.style("max-width", graphWidth + "px"); |
|
|
msgAction.node().innerHTML = action; |
|
|
} |
|
|
|
|
|
var gotItButton; |
|
|
if ( type === 1 ) { |
|
|
gotItButton = warningContainer.append("label"); |
|
|
gotItButton.node().id = "killWarningErrorMessages_" + id; |
|
|
gotItButton.node().innerHTML = "Got It"; |
|
|
gotItButton.on("click", warningModule.closeMessage); |
|
|
} |
|
|
|
|
|
if ( type === 2 ) { |
|
|
gotItButton = warningContainer.append("label"); |
|
|
gotItButton.node().id = "killWarningErrorMessages_" + id; |
|
|
gotItButton.node().innerHTML = "Got It"; |
|
|
gotItButton.on("click", warningModule.closeMessage); |
|
|
warningContainer.append("span").node().innerHTML = "|"; |
|
|
var zoomToElementButton = warningContainer.append("label"); |
|
|
zoomToElementButton.node().id = "zoomElementThing_" + id; |
|
|
zoomToElementButton.node().innerHTML = "Zoom to element "; |
|
|
zoomToElementButton.on("click", function (){ |
|
|
|
|
|
graph.zoomToElementInGraph(additionalOpts); |
|
|
}); |
|
|
warningContainer.append("span").node().innerHTML = "|"; |
|
|
var ShowElementButton = warningContainer.append("label"); |
|
|
ShowElementButton.node().id = "showElementThing_" + id; |
|
|
ShowElementButton.node().innerHTML = "Indicate element"; |
|
|
ShowElementButton.on("click", function (){ |
|
|
|
|
|
if ( additionalOpts.halo() === false ) { |
|
|
additionalOpts.drawHalo(); |
|
|
graph.updatePulseIds([additionalOpts.id()]); |
|
|
} else { |
|
|
additionalOpts.removeHalo(); |
|
|
additionalOpts.drawHalo(); |
|
|
graph.updatePulseIds([additionalOpts.id()]); |
|
|
} |
|
|
}); |
|
|
} |
|
|
moduleContainer.classed("hidden", false); |
|
|
moduleContainer.style("-webkit-animation-name", "warn_ExpandAnimation"); |
|
|
moduleContainer.style("-webkit-animation-duration", "0.5s"); |
|
|
moduleContainer.classed("hidden", false); |
|
|
}; |
|
|
|
|
|
return warningModule; |
|
|
}; |
|
|
|
|
|
|
|
|
|