| | var unescape = require("lodash/unescape"); |
| |
|
| | module.exports = function ( graph ){ |
| | |
| | var ontologyMenu = {}, |
| | loadingInfo = d3.select("#loading-info"), |
| | loadingProgress = d3.select("#loading-progress"), |
| | |
| | ontologyMenuTimeout, |
| | fileToLoad, |
| | stopTimer = false, |
| | loadingError = false, |
| | loadingStatusTimer, |
| | conversion_sessionId, |
| | cachedConversions = {}, |
| | loadingModule, |
| | loadOntologyFromText; |
| | var currentLoadedOntologyName = ""; |
| | |
| | String.prototype.beginsWith = function ( string ){ |
| | return (this.indexOf(string) === 0); |
| | }; |
| | |
| | ontologyMenu.getLoadingFunction = function (){ |
| | return loadOntologyFromText; |
| | }; |
| | |
| | ontologyMenu.clearCachedVersion = function (){ |
| | if ( cachedConversions[currentLoadedOntologyName] ) { |
| | cachedConversions[currentLoadedOntologyName] = undefined; |
| | } |
| | }; |
| | |
| | |
| | ontologyMenu.reloadCachedOntology = function (){ |
| | ontologyMenu.clearCachedVersion(); |
| | graph.clearGraphData(); |
| | loadingModule.parseUrlAndLoadOntology(false); |
| | }; |
| | |
| | ontologyMenu.cachedOntology = function ( ontoName ){ |
| | currentLoadedOntologyName = ontoName; |
| | if ( cachedConversions[ontoName] ) { |
| | var locStr = String(location.hash); |
| | d3.select("#reloadSvgIcon").node().disabled = false; |
| | graph.showReloadButtonAfterLayoutOptimization(true); |
| | if ( locStr.indexOf("#file") > -1 ) { |
| | d3.select("#reloadSvgIcon").node().disabled = true; |
| | d3.select("#reloadCachedOntology").node().title = "reloading original version not possible, please reload the file"; |
| | d3.select("#reloadSvgIcon").classed("disabledReloadElement", true); |
| | d3.select("#svgStringText").style("fill", "gray"); |
| | d3.select("#svgStringText").classed("noselect", true); |
| | } |
| | else { |
| | d3.select("#reloadCachedOntology").node().title = "generate new visualization and overwrite cached ontology"; |
| | d3.select("#reloadSvgIcon").classed("disabledReloadElement", false); |
| | d3.select("#svgStringText").style("fill", "black"); |
| | d3.select("#svgStringText").classed("noselect", true); |
| | } |
| | } else { |
| | graph.showReloadButtonAfterLayoutOptimization(false); |
| | |
| | } |
| | return cachedConversions[ontoName]; |
| | }; |
| | ontologyMenu.setCachedOntology = function ( ontoName, ontoContent ){ |
| | cachedConversions[ontoName] = ontoContent; |
| | currentLoadedOntologyName = ontoName; |
| | }; |
| | |
| | ontologyMenu.getErrorStatus = function (){ |
| | return loadingError; |
| | }; |
| | |
| | ontologyMenu.setup = function ( _loadOntologyFromText ){ |
| | loadOntologyFromText = _loadOntologyFromText; |
| | loadingModule = graph.options().loadingModule(); |
| | var menuEntry = d3.select("#m_select"); |
| | menuEntry.on("mouseover", function (){ |
| | var searchMenu = graph.options().searchMenu(); |
| | searchMenu.hideSearchEntries(); |
| | }); |
| | |
| | setupConverterButtons(); |
| | setupUploadButton(); |
| | |
| | var descriptionButton = d3.select("#error-description-button").datum({ open: false }); |
| | descriptionButton.on("click", function ( data ){ |
| | var errorContainer = d3.select("#error-description-container"); |
| | var errorDetailsButton = d3.select(this); |
| | |
| | |
| | data.open = !data.open; |
| | var descriptionVisible = data.open; |
| | if ( descriptionVisible ) { |
| | errorDetailsButton.text("Hide error details"); |
| | } else { |
| | errorDetailsButton.text("Show error details"); |
| | } |
| | errorContainer.classed("hidden", !descriptionVisible); |
| | }); |
| | |
| | setupUriListener(); |
| | loadingModule.setOntologyMenu(ontologyMenu); |
| | }; |
| | |
| | |
| | function setupUriListener(){ |
| | |
| | d3.select(window).on("hashchange", function (){ |
| | var oldURL = d3.event.oldURL, newURL = d3.event.newURL; |
| | if ( oldURL !== newURL ) { |
| | |
| | if ( newURL === oldURL + "#" ) { |
| | return; |
| | } |
| | updateNavigationHrefs(); |
| | loadingModule.parseUrlAndLoadOntology(); |
| | } |
| | }); |
| | updateNavigationHrefs(); |
| | } |
| | |
| | ontologyMenu.stopLoadingTimer = function (){ |
| | stopTimer = true; |
| | clearTimeout(loadingStatusTimer); |
| | }; |
| | |
| | |
| | |
| | |
| | |
| | function updateNavigationHrefs(){ |
| | d3.selectAll("#menuElementContainer > li > a").attr("href", location.hash || "#"); |
| | } |
| | |
| | ontologyMenu.setIriText = function ( text ){ |
| | d3.select("#iri-converter-input").node().value = text; |
| | d3.select("#iri-converter-button").attr("disabled", false); |
| | d3.select("#iri-converter-form").on("submit")(); |
| | }; |
| | |
| | ontologyMenu.clearDetailInformation = function (){ |
| | var bpContainer = d3.select("#bulletPoint_container"); |
| | var htmlCollection = bpContainer.node().children; |
| | var numEntries = htmlCollection.length; |
| | |
| | for ( var i = 0; i < numEntries; i++ ) { |
| | htmlCollection[0].remove(); |
| | } |
| | }; |
| | ontologyMenu.append_message = function ( msg ){ |
| | |
| | append_message(msg); |
| | }; |
| | function append_message( msg ){ |
| | var bpContainer = d3.select("#bulletPoint_container"); |
| | var div = bpContainer.append("div"); |
| | div.node().innerHTML = msg; |
| | loadingModule.scrollDownDetails(); |
| | } |
| | |
| | ontologyMenu.append_message_toLastBulletPoint = function ( msg ){ |
| | |
| | append_message_toLastBulletPoint(msg); |
| | }; |
| | |
| | ontologyMenu.append_bulletPoint = function ( msg ){ |
| | |
| | append_bulletPoint(msg); |
| | }; |
| | function append_message_toLastBulletPoint( msg ){ |
| | var bpContainer = d3.select("#bulletPoint_container"); |
| | var htmlCollection = bpContainer.node().getElementsByTagName("LI"); |
| | var lastItem = htmlCollection.length - 1; |
| | if ( lastItem >= 0 ) { |
| | var oldText = htmlCollection[lastItem].innerHTML; |
| | htmlCollection[lastItem].innerHTML = oldText + msg; |
| | } |
| | loadingModule.scrollDownDetails(); |
| | } |
| | |
| | function append_bulletPoint( msg ){ |
| | var bp_container = d3.select("#bulletPoint_container"); |
| | var bp = bp_container.append("li"); |
| | bp.node().innerHTML = msg; |
| | d3.select("#currentLoadingStep").node().innerHTML = msg; |
| | loadingModule.scrollDownDetails(); |
| | } |
| | |
| | |
| | function setupConverterButtons(){ |
| | var iriConverterButton = d3.select("#iri-converter-button"); |
| | var iriConverterInput = d3.select("#iri-converter-input"); |
| | |
| | iriConverterInput.on("input", function (){ |
| | keepOntologySelectionOpenShortly(); |
| | |
| | var inputIsEmpty = iriConverterInput.property("value") === ""; |
| | iriConverterButton.attr("disabled", inputIsEmpty || undefined); |
| | }).on("click", function (){ |
| | keepOntologySelectionOpenShortly(); |
| | }); |
| | |
| | d3.select("#iri-converter-form").on("submit", function (){ |
| | var inputName = iriConverterInput.property("value"); |
| | |
| | |
| | var clearedName = inputName.replace(/%20/g, " "); |
| | while ( clearedName.beginsWith(" ") ) { |
| | clearedName = clearedName.substr(1, clearedName.length); |
| | } |
| | |
| | while ( clearedName.endsWith(" ") ) { |
| | clearedName = clearedName.substr(0, clearedName.length - 1); |
| | } |
| | |
| | |
| | inputName = clearedName; |
| | var lc_iri = inputName.toLowerCase(); |
| | if ( lc_iri.endsWith(".json") ) { |
| | location.hash = "url=" + inputName; |
| | iriConverterInput.property("value", ""); |
| | iriConverterInput.on("input")(); |
| | } else { |
| | location.hash = "iri=" + inputName; |
| | iriConverterInput.property("value", ""); |
| | iriConverterInput.on("input")(); |
| | } |
| | d3.event.preventDefault(); |
| | return false; |
| | }); |
| | } |
| | |
| | function setupUploadButton(){ |
| | var input = d3.select("#file-converter-input"), |
| | inputLabel = d3.select("#file-converter-label"), |
| | uploadButton = d3.select("#file-converter-button"); |
| | |
| | input.on("change", function (){ |
| | var selectedFiles = input.property("files"); |
| | if ( selectedFiles.length <= 0 ) { |
| | inputLabel.text("Select ontology file"); |
| | uploadButton.property("disabled", true); |
| | } else { |
| | inputLabel.text(selectedFiles[0].name); |
| | fileToLoad = selectedFiles[0].name; |
| | uploadButton.property("disabled", false); |
| | uploadButton.node().click(); |
| | |
| | graph.options().navigationMenu().hideAllMenus(); |
| | } |
| | }); |
| | |
| | uploadButton.on("click", function (){ |
| | var selectedFile = input.property("files")[0]; |
| | if ( !selectedFile ) { |
| | return false; |
| | } |
| | var newHashParameter = "file=" + selectedFile.name; |
| | |
| | if ( location.hash === "#" + newHashParameter ) { |
| | loadingModule.parseUrlAndLoadOntology(); |
| | } else { |
| | location.hash = newHashParameter; |
| | } |
| | }); |
| | } |
| | |
| | function setLoadingStatusInfo( message ){ |
| | |
| | var o2vConverterContainer = d3.select("#o2vConverterContainer"); |
| | if ( !o2vConverterContainer.node() ) { |
| | var bp_container = d3.select("#bulletPoint_container"); |
| | var div = bp_container.append("div"); |
| | o2vConverterContainer = div.append("ul"); |
| | o2vConverterContainer.attr("id", "o2vConverterContainer"); |
| | o2vConverterContainer.style("margin-left", "-25px"); |
| | } |
| | |
| | var htmlCollection = o2vConverterContainer.node().children; |
| | var numEntries = htmlCollection.length; |
| | for ( var i = 0; i < numEntries; i++ ) { |
| | htmlCollection[0].remove(); |
| | } |
| | |
| | var tokens = message.split("* "); |
| | var liForToken; |
| | for ( var t = 0; t < tokens.length; t++ ) { |
| | var tokenMessage = tokens[t]; |
| | |
| | if ( tokenMessage.length > 0 ) { |
| | liForToken = o2vConverterContainer.append("li"); |
| | liForToken.attr("type", "disc"); |
| | liForToken.node().innerHTML = tokenMessage.replace(/\n/g, "<br>"); |
| | } |
| | } |
| | if ( liForToken ) |
| | liForToken.node().innerHTML += "<br>"; |
| | |
| | loadingModule.scrollDownDetails(); |
| | } |
| | |
| | ontologyMenu.setLoadingStatusInfo = function ( message ){ |
| | |
| | setLoadingStatusInfo(message); |
| | }; |
| | |
| | function getLoadingStatusOnceCallBacked( callback, parameter ){ |
| | d3.xhr("loadingStatus?sessionId=" + conversion_sessionId, "application/text", function ( error, request ){ |
| | if ( error ) { |
| | console.log("ontologyMenu getLoadingStatusOnceCallBacked throws error"); |
| | console.log("---------Error -----------"); |
| | console.log(error); |
| | console.log("---------Request -----------"); |
| | console.log(request); |
| | } |
| | setLoadingStatusInfo(request.responseText); |
| | callback(parameter); |
| | }); |
| | } |
| | |
| | function getLoadingStatusTimeLooped(){ |
| | d3.xhr("loadingStatus?sessionId=" + conversion_sessionId, "application/text", function ( error, request ){ |
| | if ( error ) { |
| | console.log("ontologyMenu getLoadingStatusTimeLooped throws error"); |
| | console.log("---------Error -----------"); |
| | console.log(error); |
| | console.log("---------Request -----------"); |
| | console.log(request); |
| | } |
| | if ( stopTimer === false ) { |
| | setLoadingStatusInfo(request.responseText); |
| | timedLoadingStatusLogger(); |
| | } |
| | }); |
| | } |
| | |
| | function timedLoadingStatusLogger(){ |
| | clearTimeout(loadingStatusTimer); |
| | if ( stopTimer === false ) { |
| | loadingStatusTimer = setTimeout(function (){ |
| | getLoadingStatusTimeLooped(); |
| | }, 1000); |
| | } |
| | } |
| | |
| | function callbackUpdateLoadingMessage( msg ){ |
| | d3.xhr("loadingStatus", "application/text", function ( error, request ){ |
| | if ( request !== undefined ) { |
| | setLoadingStatusInfo(request.responseText + "<br>" + msg); |
| | } else { |
| | append_message(msg); |
| | } |
| | }); |
| | } |
| | |
| | ontologyMenu.setConversionID = function ( id ){ |
| | conversion_sessionId = id; |
| | }; |
| | |
| | ontologyMenu.callbackLoad_Ontology_FromIRI = function ( parameter ){ |
| | var relativePath = parameter[0]; |
| | var ontoName = parameter[1]; |
| | var localThreadId = parameter[2]; |
| | stopTimer = false; |
| | timedLoadingStatusLogger(); |
| | d3.xhr(relativePath, "application/json", function ( error, request ){ |
| | var loadingSuccessful = !error; |
| | |
| | if ( (error !== null && error.status === 500) || (request && request.responseText.length === 0) ) { |
| | clearTimeout(loadingStatusTimer); |
| | stopTimer = true; |
| | getLoadingStatusOnceCallBacked(callbackFromIRI_URL_ERROR, [error, request, localThreadId]); |
| | } |
| | var jsonText; |
| | if ( loadingSuccessful ) { |
| | clearTimeout(loadingStatusTimer); |
| | stopTimer = true; |
| | jsonText = request.responseText; |
| | getLoadingStatusOnceCallBacked(callbackFromIRI_Success, [jsonText, ontoName, localThreadId]); |
| | } |
| | }); |
| | }; |
| | |
| | |
| | ontologyMenu.callbackLoad_Ontology_From_DirectInput = function ( text, parameter ){ |
| | var input = text; |
| | var sessionId = parameter[1]; |
| | stopTimer = false; |
| | timedLoadingStatusLogger(); |
| | |
| | var formData = new FormData(); |
| | formData.append("input", input); |
| | formData.append("sessionId", sessionId); |
| | var xhr = new XMLHttpRequest(); |
| | |
| | xhr.open("POST", "directInput", true); |
| | xhr.onload = function (){ |
| | clearTimeout(loadingStatusTimer); |
| | stopTimer = true; |
| | getLoadingStatusOnceCallBacked(callbackForConvert, [xhr, input, sessionId]); |
| | }; |
| | timedLoadingStatusLogger(); |
| | xhr.send(formData); |
| | |
| | }; |
| | function callbackFromIRI_Success( parameter ){ |
| | var local_conversionId = parameter[2]; |
| | if ( local_conversionId !== conversion_sessionId ) { |
| | console.log("The conversion process for file:" + parameter[1] + " has been canceled!"); |
| | ontologyMenu.conversionFinished(local_conversionId); |
| | return; |
| | } |
| | loadingModule.loadFromOWL2VOWL(parameter[0], parameter[1]); |
| | ontologyMenu.conversionFinished(); |
| | |
| | } |
| | |
| | function callbackFromDirectInput_Success( parameter ){ |
| | var local_conversionId = parameter[1]; |
| | if ( local_conversionId !== conversion_sessionId ) { |
| | console.log("The conversion process for file:" + parameter[1] + " has been canceled!"); |
| | ontologyMenu.conversionFinished(local_conversionId); |
| | return; |
| | } |
| | loadingModule.loadFromOWL2VOWL(parameter[0], "DirectInputConversionID" + local_conversionId); |
| | ontologyMenu.conversionFinished(); |
| | |
| | } |
| | |
| | ontologyMenu.getConversionId = function (){ |
| | return conversion_sessionId; |
| | }; |
| | |
| | ontologyMenu.callbackLoad_JSON_FromURL = function ( parameter ){ |
| | var relativePath = parameter[0]; |
| | var ontoName = parameter[1]; |
| | var local_conversionId = parameter[2]; |
| | stopTimer = false; |
| | timedLoadingStatusLogger(); |
| | d3.xhr(relativePath, "application/json", function ( error, request ){ |
| | var loadingSuccessful = !error; |
| | |
| | if ( (error !== null && error.status === 500) || (request && request.responseText.length === 0) ) { |
| | clearTimeout(loadingStatusTimer); |
| | stopTimer = true; |
| | loadingSuccessful = false; |
| | console.log(request); |
| | console.log(request.responseText.length); |
| | getLoadingStatusOnceCallBacked(callbackFromJSON_URL_ERROR, [error, request, local_conversionId]); |
| | } |
| | if ( loadingSuccessful ) { |
| | clearTimeout(loadingStatusTimer); |
| | stopTimer = true; |
| | var jsonText = request.responseText; |
| | getLoadingStatusOnceCallBacked(callbackFromJSON_Success, [jsonText, ontoName, local_conversionId]); |
| | } |
| | }); |
| | }; |
| | |
| | function callbackFromJSON_Success( parameter ){ |
| | var local_conversionId = parameter[2]; |
| | if ( local_conversionId !== conversion_sessionId ) { |
| | console.log("The conversion process for file:" + parameter[1] + " has been canceled!"); |
| | return; |
| | } |
| | loadingModule.loadFromOWL2VOWL(parameter[0], parameter[1]); |
| | } |
| | |
| | function callbackFromJSON_URL_ERROR( parameter ){ |
| | var error = parameter[0]; |
| | var request = parameter[1]; |
| | var local_conversionId = parameter[2]; |
| | if ( local_conversionId !== conversion_sessionId ) { |
| | console.log("This thread has been canceled!!"); |
| | ontologyMenu.conversionFinished(local_conversionId); |
| | return; |
| | } |
| | callbackUpdateLoadingMessage("<br><span style='color:red'> Failed to convert the file.</span> " + |
| | " Ontology could not be loaded.<br>Is it a valid OWL ontology? Please check with <a target=\"_blank\"" + |
| | "href=\"http://visualdataweb.de/validator/\">OWL Validator</a>"); |
| | |
| | if ( error !== null && error.status === 500 ) { |
| | append_message("<span style='color:red'>Could not find ontology at the URL</span>"); |
| | } |
| | if ( request && request.responseText.length === 0 ) { |
| | append_message("<span style='color:red'>Received empty graph</span>"); |
| | } |
| | graph.handleOnLoadingError(); |
| | ontologyMenu.conversionFinished(); |
| | } |
| | |
| | |
| | function callbackFromIRI_URL_ERROR( parameter ){ |
| | var error = parameter[0]; |
| | var request = parameter[1]; |
| | var local_conversionId = parameter[2]; |
| | if ( local_conversionId !== conversion_sessionId ) { |
| | console.log("This thread has been canceled!!"); |
| | ontologyMenu.conversionFinished(local_conversionId); |
| | return; |
| | } |
| | callbackUpdateLoadingMessage("<br><span style='color:red'> Failed to convert the file.</span> " + |
| | " Ontology could not be loaded.<br>Is it a valid OWL ontology? Please check with <a target=\"_blank\"" + |
| | "href=\"http://visualdataweb.de/validator/\">OWL Validator</a>"); |
| | |
| | if ( error !== null && error.status === 500 ) { |
| | append_message("<span style='color:red'>Could not find ontology at the URL</span>"); |
| | } |
| | if ( request && request.responseText.length === 0 ) { |
| | append_message("<span style='color:red'>Received empty graph</span>"); |
| | } |
| | graph.handleOnLoadingError(); |
| | ontologyMenu.conversionFinished(); |
| | } |
| | |
| | function callbackFromDirectInput_ERROR( parameter ){ |
| | |
| | var error = parameter[0]; |
| | var request = parameter[1]; |
| | var local_conversionId = parameter[2]; |
| | if ( local_conversionId !== conversion_sessionId ) { |
| | console.log("The loading process for direct input has been canceled!"); |
| | return; |
| | } |
| | |
| | |
| | |
| | if ( error !== null && error.status === 500 ) { |
| | append_message("<span style='color:red'>Could not convert direct input</span>"); |
| | } |
| | if ( request && request.responseText.length === 0 ) { |
| | append_message("<span style='color:red'>Received empty graph</span>"); |
| | } |
| | |
| | graph.handleOnLoadingError(); |
| | ontologyMenu.conversionFinished(); |
| | } |
| | |
| | ontologyMenu.callbackLoadFromOntology = function ( selectedFile, filename, local_threadId ){ |
| | callbackLoadFromOntology(selectedFile, filename, local_threadId); |
| | }; |
| | |
| | function callbackLoadFromOntology( selectedFile, filename, local_threadId ){ |
| | stopTimer = false; |
| | timedLoadingStatusLogger(); |
| | |
| | var formData = new FormData(); |
| | formData.append("ontology", selectedFile); |
| | formData.append("sessionId", local_threadId); |
| | var xhr = new XMLHttpRequest(); |
| | |
| | xhr.open("POST", "convert", true); |
| | xhr.onload = function (){ |
| | clearTimeout(loadingStatusTimer); |
| | stopTimer = true; |
| | console.log(xhr); |
| | getLoadingStatusOnceCallBacked(callbackForConvert, [xhr, filename, local_threadId]); |
| | }; |
| | timedLoadingStatusLogger(); |
| | xhr.send(formData); |
| | } |
| | |
| | function callbackForConvert( parameter ){ |
| | var xhr = parameter[0]; |
| | var filename = parameter[1]; |
| | var local_threadId = parameter[2]; |
| | if ( local_threadId !== conversion_sessionId ) { |
| | console.log("The conversion process for file:" + filename + " has been canceled!"); |
| | ontologyMenu.conversionFinished(local_threadId); |
| | return; |
| | } |
| | if ( xhr.status === 200 ) { |
| | loadingModule.loadFromOWL2VOWL(xhr.responseText, filename); |
| | ontologyMenu.conversionFinished(); |
| | } else { |
| | var uglyJson=xhr.responseText; |
| | var jsonResut=JSON.parse(uglyJson); |
| | var niceJSON=JSON.stringify(jsonResut, 'null', ' '); |
| | niceJSON= niceJSON.replace(new RegExp('\r?\n','g'), '<br />'); |
| | callbackUpdateLoadingMessage("Failed to convert the file. " + |
| | "<br />Server answer: <br />"+ |
| | "<hr>"+niceJSON+ "<hr>"+ |
| | "Ontology could not be loaded.<br />Is it a valid OWL ontology? Please check with <a target=\"_blank\"" + |
| | "href=\"http://visualdataweb.de/validator/\">OWL Validator</a>"); |
| | |
| | graph.handleOnLoadingError(); |
| | ontologyMenu.conversionFinished(); |
| | } |
| | } |
| | |
| | ontologyMenu.conversionFinished = function ( id ){ |
| | var local_id = conversion_sessionId; |
| | if ( id ) { |
| | local_id = id; |
| | } |
| | d3.xhr("conversionDone?sessionId=" + local_id, "application/text", function ( error, request ){ |
| | if ( error ) { |
| | console.log("ontologyMenu conversionFinished throws error"); |
| | console.log("---------Error -----------"); |
| | console.log(error); |
| | console.log("---------Request -----------"); |
| | console.log(request); |
| | } |
| | }); |
| | }; |
| | |
| | function keepOntologySelectionOpenShortly(){ |
| | |
| | var ontologySelection = d3.select("#select .toolTipMenu"); |
| | ontologySelection.on("click", function (){ |
| | d3.event.stopPropagation(); |
| | }).on("keydown", function (){ |
| | d3.event.stopPropagation(); |
| | }); |
| | |
| | ontologySelection.style("display", "block"); |
| | |
| | function disableKeepingOpen(){ |
| | ontologySelection.style("display", undefined); |
| | |
| | clearTimeout(ontologyMenuTimeout); |
| | d3.select(window).on("click", undefined).on("keydown", undefined); |
| | ontologySelection.on("mouseover", undefined); |
| | } |
| | |
| | |
| | clearTimeout(ontologyMenuTimeout); |
| | ontologyMenuTimeout = setTimeout(function (){ |
| | disableKeepingOpen(); |
| | }, 3000); |
| | |
| | |
| | d3.select(window).on("click", function (){ |
| | disableKeepingOpen(); |
| | }).on("keydown", function (){ |
| | disableKeepingOpen(); |
| | }); |
| | |
| | ontologySelection.on("mouseover", function (){ |
| | disableKeepingOpen(); |
| | }); |
| | } |
| | |
| | ontologyMenu.showLoadingStatus = function ( visible ){ |
| | if ( visible === true ) { |
| | displayLoadingIndicators(); |
| | } |
| | else { |
| | hideLoadingInformations(); |
| | } |
| | }; |
| | |
| | function displayLoadingIndicators(){ |
| | d3.select("#layoutLoadingProgressBarContainer").classed("hidden", false); |
| | loadingInfo.classed("hidden", false); |
| | loadingProgress.classed("hidden", false); |
| | } |
| | |
| | function hideLoadingInformations(){ |
| | loadingInfo.classed("hidden", true); |
| | } |
| | |
| | return ontologyMenu; |
| | }; |
| |
|