module.exports = function (){ var options = {}, data, graphContainerSelector, classDistance = 200, datatypeDistance = 120, loopDistance = 150, charge = -500, gravity = 0.025, linkStrength = 1, height = 600, width = 800, selectionModules = [], filterModules = [], minMagnification = 0.01, maxMagnification = 4, compactNotation = false, dynamicLabelWidth = true, // some filters literalFilter, // menus gravityMenu, filterMenu, loadingModule, modeMenu, pausedMenu, pickAndPinModule, resetMenu, searchMenu, ontologyMenu, sidebar, leftSidebar, editSidebar, navigationMenu, exportMenu, graphObject, zoomSlider, datatypeFilter, focuserModule, colorExternalsModule, compactNotationModule, objectPropertyFilter, subclassFilter, setOperatorFilter, maxLabelWidth = 120, metadataObject = {}, generalOntologyMetaData = {}, disjointPropertyFilter, rectangularRep = false, warningModule, prefixModule, drawPropertyDraggerOnHover = true, showDraggerObject = false, directInputModule, scaleNodesByIndividuals = true, useAccuracyHelper = true, showRenderingStatistic = true, showInputModality = false, hideDebugOptions = true, nodeDegreeFilter, debugMenu, supportedDatatypes = ["rdfs:Literal", "xsd:boolean", "xsd:double", "xsd:integer", "xsd:string", "undefined"], supportedClasses = ["owl:Thing", "owl:Class", "owl:DeprecatedClass"], supportedProperties = ["owl:objectProperty", "rdfs:subClassOf", "owl:disjointWith", "owl:allValuesFrom", "owl:someValuesFrom" ], prefixList = { rdf: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', rdfs: 'http://www.w3.org/2000/01/rdf-schema#', owl: 'http://www.w3.org/2002/07/owl#', xsd: 'http://www.w3.org/2001/XMLSchema#', dc: 'http://purl.org/dc/elements/1.1/#', xml: 'http://www.w3.org/XML/1998/namespace' }; options.clearMetaObject = function (){ generalOntologyMetaData = {}; }; options.clearGeneralMetaObject = function (){ generalOntologyMetaData = {}; }; options.debugMenu = function ( val ){ if ( !arguments.length ) return debugMenu; debugMenu = val; }; options.getHideDebugFeatures = function (){ return hideDebugOptions; }; options.executeHiddenDebugFeatuers = function (){ hideDebugOptions = !hideDebugOptions; d3.selectAll(".debugOption").classed("hidden", hideDebugOptions); if ( hideDebugOptions === false ) { graphObject.setForceTickFunctionWithFPS(); } else { graphObject.setDefaultForceTickFunction(); } if ( debugMenu ) { debugMenu.updateSettings(); } options.setHideDebugFeaturesForDefaultObject(hideDebugOptions); }; options.addOrUpdateGeneralObjectEntry = function ( property, value ){ if ( generalOntologyMetaData.hasOwnProperty(property) ) { //console.log("Updating Property:"+ property); if ( property === "iri" ) { if ( validURL(value) === false ) { warningModule.showWarning("Invalid Ontology IRI", "Input IRI does not represent an URL", "Restoring previous IRI for ontology", 1, false); return false; } } generalOntologyMetaData[property] = value; } else { generalOntologyMetaData[property] = value; } return true; }; options.getGeneralMetaObjectProperty = function ( property ){ if ( generalOntologyMetaData.hasOwnProperty(property) ) { return generalOntologyMetaData[property]; } }; options.getGeneralMetaObject = function (){ return generalOntologyMetaData; }; options.addOrUpdateMetaObjectEntry = function ( property, value ){ if ( metadataObject.hasOwnProperty(property) ) { metadataObject[property] = value; } else { metadataObject[property] = value; } }; options.getMetaObjectProperty = function ( property ){ if ( metadataObject.hasOwnProperty(property) ) { return metadataObject[property]; } }; options.getMetaObject = function (){ return metadataObject; }; options.prefixList = function (){ return prefixList; }; options.addPrefix = function ( prefix, url ){ prefixList[prefix] = url; }; 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); } options.updatePrefix = function ( oldPrefix, newPrefix, oldURL, newURL ){ if ( oldPrefix === newPrefix && oldURL === newURL ) { // console.log("Nothing to update"); return true; } if ( oldPrefix === newPrefix && oldURL !== newURL && validURL(newURL) === true ) { // console.log("Update URL"); prefixList[oldPrefix] = newURL; } else if ( oldPrefix === newPrefix && oldURL !== newURL && validURL(newURL) === false ) { if ( validURL(newURL) === false ) { warningModule.showWarning("Invalid Prefix IRI", "Input IRI does not represent an IRI", "You should enter a valid IRI in form of a URL", 1, false); return false; } return false; } if ( oldPrefix !== newPrefix && validURL(newURL) === true ) { // sanity check if ( prefixList.hasOwnProperty(newPrefix) ) { // console.log("Already have this prefix!"); warningModule.showWarning("Prefix Already Exist", "Prefix: " + newPrefix + " is already defined", "You should use an other one", 1, false); return false; } options.removePrefix(oldPrefix); options.addPrefix(newPrefix, newURL); editSidebar.updateEditDeleteButtonIds(oldPrefix, newPrefix); return true; } // console.log("Is new URL ("+newURL+") valid? >> "+validURL(newURL)); if ( validURL(newURL) === false ) { warningModule.showWarning("Invalid Prefix IRI", "Input IRI does not represent an URL", "You should enter a valid URL", 1, false); } return false; }; options.removePrefix = function ( prefix ){ delete prefixList[prefix]; }; options.supportedDatatypes = function (){ return supportedDatatypes; }; options.supportedClasses = function (){ return supportedClasses; }; options.supportedProperties = function (){ return supportedProperties; }; options.datatypeFilter = function ( val ){ if ( !arguments.length ) return datatypeFilter; datatypeFilter = val; }; options.showDraggerObject = function ( val ){ if ( !arguments.length ) { return showDraggerObject; } showDraggerObject = val; }; options.useAccuracyHelper = function ( val ){ if ( !arguments.length ) { return useAccuracyHelper; } useAccuracyHelper = val; }; options.showAccuracyHelper = function ( val ){ if ( !arguments.length ) { return options.showDraggerObject(); } options.showDraggerObject(val); }; options.showRenderingStatistic = function ( val ){ if ( !arguments.length ) { return showRenderingStatistic; } showRenderingStatistic = val; }; options.showInputModality = function ( val ){ if ( !arguments.length ) { return showInputModality; } showInputModality = val; }; options.drawPropertyDraggerOnHover = function ( val ){ if ( !arguments.length ) return drawPropertyDraggerOnHover; drawPropertyDraggerOnHover = val; }; options.warningModule = function ( val ){ if ( !arguments.length ) return warningModule; warningModule = val; }; options.directInputModule = function ( val ){ if ( !arguments.length ) return directInputModule; directInputModule = val; }; options.prefixModule = function ( val ){ if ( !arguments.length ) return prefixModule; prefixModule = val; }; options.focuserModule = function ( val ){ if ( !arguments.length ) return focuserModule; focuserModule = val; }; options.colorExternalsModule = function ( val ){ if ( !arguments.length ) return colorExternalsModule; colorExternalsModule = val; }; options.compactNotationModule = function ( val ){ if ( !arguments.length ) return compactNotationModule; compactNotationModule = val; }; options.maxLabelWidth = function ( val ){ if ( !arguments.length ) return maxLabelWidth; maxLabelWidth = val; }; options.objectPropertyFilter = function ( val ){ if ( !arguments.length ) return objectPropertyFilter; objectPropertyFilter = val; }; options.disjointPropertyFilter = function ( val ){ if ( !arguments.length ) return disjointPropertyFilter; disjointPropertyFilter = val; }; options.subclassFilter = function ( val ){ if ( !arguments.length ) return subclassFilter; subclassFilter = val; }; options.setOperatorFilter = function ( val ){ if ( !arguments.length ) return setOperatorFilter; setOperatorFilter = val; }; options.leftSidebar = function ( val ){ if ( !arguments.length ) return leftSidebar; leftSidebar = val; }; options.editSidebar = function ( val ){ if ( !arguments.length ) return editSidebar; editSidebar = val; }; options.zoomSlider = function ( val ){ if ( !arguments.length ) return zoomSlider; zoomSlider = val; }; options.graphObject = function ( val ){ if ( !arguments.length ) return graphObject; graphObject = val; }; var defaultOptionsConfig = {}; defaultOptionsConfig.sidebar = "1"; defaultOptionsConfig.doc = -1; defaultOptionsConfig.cd = 200; defaultOptionsConfig.dd = 120; defaultOptionsConfig.editorMode = "false"; defaultOptionsConfig.filter_datatypes = "false"; defaultOptionsConfig.filter_objectProperties = "false"; defaultOptionsConfig.filter_sco = "false"; defaultOptionsConfig.filter_disjoint = "true"; defaultOptionsConfig.filter_setOperator = "false"; defaultOptionsConfig.mode_dynamic = "true"; defaultOptionsConfig.mode_scaling = "true"; defaultOptionsConfig.mode_compact = "false"; defaultOptionsConfig.mode_colorExt = "true"; defaultOptionsConfig.mode_multiColor = "false"; defaultOptionsConfig.debugFeatures = "false"; defaultOptionsConfig.rect = 0; options.initialConfig = function (){ var initCfg = {}; initCfg.sidebar = "1"; initCfg.doc = -1; initCfg.cd = 200; initCfg.dd = 120; initCfg.editorMode = "false"; initCfg.filter_datatypes = "false"; initCfg.filter_objectProperties = "false"; initCfg.filter_sco = "false"; initCfg.filter_disjoint = "true"; initCfg.filter_setOperator = "false"; initCfg.mode_dynamic = "true"; initCfg.mode_scaling = "true"; initCfg.mode_compact = "false"; initCfg.mode_colorExt = "true"; initCfg.mode_multiColor = "false"; initCfg.mode_pnp = "false"; initCfg.debugFeatures = "false"; initCfg.rect = 0; return initCfg; }; options.setEditorModeForDefaultObject = function ( val ){ defaultOptionsConfig.editorMode = String(val); }; options.setHideDebugFeaturesForDefaultObject = function ( val ){ defaultOptionsConfig.debugFeatures = String(!val); }; function updateConfigObject(){ defaultOptionsConfig.sidebar = options.sidebar().getSidebarVisibility(); defaultOptionsConfig.cd = options.classDistance(); defaultOptionsConfig.dd = options.datatypeDistance(); defaultOptionsConfig.filter_datatypes = String(options.filterMenu().getCheckBoxValue("datatypeFilterCheckbox")); defaultOptionsConfig.filter_sco = String(options.filterMenu().getCheckBoxValue("subclassFilterCheckbox")); defaultOptionsConfig.filter_disjoint = String(options.filterMenu().getCheckBoxValue("disjointFilterCheckbox")); defaultOptionsConfig.filter_setOperator = String(options.filterMenu().getCheckBoxValue("setoperatorFilterCheckbox")); defaultOptionsConfig.filter_objectProperties = String(options.filterMenu().getCheckBoxValue("objectPropertyFilterCheckbox")); defaultOptionsConfig.mode_dynamic = String(options.dynamicLabelWidth()); defaultOptionsConfig.mode_scaling = String(options.modeMenu().getCheckBoxValue("nodescalingModuleCheckbox")); defaultOptionsConfig.mode_compact = String(options.modeMenu().getCheckBoxValue("compactnotationModuleCheckbox")); defaultOptionsConfig.mode_colorExt = String(options.modeMenu().getCheckBoxValue("colorexternalsModuleCheckbox")); defaultOptionsConfig.mode_multiColor = String(options.modeMenu().colorModeState()); defaultOptionsConfig.mode_pnp = String(options.modeMenu().getCheckBoxValue("pickandpinModuleCheckbox")); defaultOptionsConfig.rect = 0; } options.defaultConfig = function (){ updateConfigObject(); return defaultOptionsConfig; }; options.exportMenu = function ( val ){ if ( !arguments.length ) return exportMenu; exportMenu = val; }; options.rectangularRepresentation = function ( val ){ if ( !arguments.length ) { return rectangularRep; } else { var intVal = parseInt(val); if ( intVal === 0 ) { rectangularRep = false; } else { rectangularRep = true; } } }; options.dynamicLabelWidth = function ( val ){ if ( !arguments.length ) return dynamicLabelWidth; else { dynamicLabelWidth = val; } }; options.sidebar = function ( s ){ if ( !arguments.length ) return sidebar; sidebar = s; return options; }; options.navigationMenu = function ( m ){ if ( !arguments.length ) return navigationMenu; navigationMenu = m; return options; }; options.ontologyMenu = function ( m ){ if ( !arguments.length ) return ontologyMenu; ontologyMenu = m; return options; }; options.searchMenu = function ( m ){ if ( !arguments.length ) return searchMenu; searchMenu = m; return options; }; options.resetMenu = function ( m ){ if ( !arguments.length ) return resetMenu; resetMenu = m; return options; }; options.pausedMenu = function ( m ){ if ( !arguments.length ) return pausedMenu; pausedMenu = m; return options; }; options.pickAndPinModule = function ( m ){ if ( !arguments.length ) return pickAndPinModule; pickAndPinModule = m; return options; }; options.gravityMenu = function ( m ){ if ( !arguments.length ) return gravityMenu; gravityMenu = m; return options; }; options.filterMenu = function ( m ){ if ( !arguments.length ) return filterMenu; filterMenu = m; return options; }; options.modeMenu = function ( m ){ if ( !arguments.length ) return modeMenu; modeMenu = m; return options; }; options.charge = function ( p ){ if ( !arguments.length ) return charge; charge = +p; return options; }; options.classDistance = function ( p ){ if ( !arguments.length ) return classDistance; classDistance = +p; return options; }; options.compactNotation = function ( p ){ if ( !arguments.length ) return compactNotation; compactNotation = p; return options; }; options.data = function ( p ){ if ( !arguments.length ) return data; data = p; return options; }; options.datatypeDistance = function ( p ){ if ( !arguments.length ) return datatypeDistance; datatypeDistance = +p; return options; }; options.filterModules = function ( p ){ if ( !arguments.length ) return filterModules; filterModules = p; return options; }; options.graphContainerSelector = function ( p ){ if ( !arguments.length ) return graphContainerSelector; graphContainerSelector = p; return options; }; options.gravity = function ( p ){ if ( !arguments.length ) return gravity; gravity = +p; return options; }; options.height = function ( p ){ if ( !arguments.length ) return height; height = +p; return options; }; options.linkStrength = function ( p ){ if ( !arguments.length ) return linkStrength; linkStrength = +p; return options; }; options.loopDistance = function ( p ){ if ( !arguments.length ) return loopDistance; loopDistance = p; return options; }; options.minMagnification = function ( p ){ if ( !arguments.length ) return minMagnification; minMagnification = +p; return options; }; options.maxMagnification = function ( p ){ if ( !arguments.length ) return maxMagnification; maxMagnification = +p; return options; }; options.scaleNodesByIndividuals = function ( p ){ if ( !arguments.length ) return scaleNodesByIndividuals; scaleNodesByIndividuals = p; return options; }; options.selectionModules = function ( p ){ if ( !arguments.length ) return selectionModules; selectionModules = p; return options; }; options.width = function ( p ){ if ( !arguments.length ) return width; width = +p; return options; }; options.literalFilter = function ( p ){ if ( !arguments.length ) return literalFilter; literalFilter = p; return options; }; options.nodeDegreeFilter = function ( p ){ if ( !arguments.length ) return nodeDegreeFilter; nodeDegreeFilter = p; return options; }; options.loadingModule = function ( p ){ if ( !arguments.length ) return loadingModule; loadingModule = p; return options; }; // define url loadable options; // update all set values in the default object options.setOptionsFromURL = function ( opts, changeEditFlag ){ if ( opts.sidebar !== undefined ) sidebar.showSidebar(parseInt(opts.sidebar), true); if ( opts.doc ) { var asInt = parseInt(opts.doc); filterMenu.setDegreeSliderValue(asInt); graphObject.setGlobalDOF(asInt); // reset the value to be -1; defaultOptionsConfig.doc = -1; } var settingFlag = false; if ( opts.editorMode ) { if ( opts.editorMode === "true" ) settingFlag = true; d3.select("#editorModeModuleCheckbox").node().checked = settingFlag; if ( changeEditFlag && changeEditFlag === true ) { graphObject.editorMode(settingFlag); } // update config object defaultOptionsConfig.editorMode = opts.editorMode; } if ( opts.cd ) { // class distance options.classDistance(opts.cd); // class distance defaultOptionsConfig.cd = opts.cd; } if ( opts.dd ) { // data distance options.datatypeDistance(opts.dd); defaultOptionsConfig.cd = opts.cd; } if ( opts.cd || opts.dd ) options.gravityMenu().reset(); // reset the values so the slider is updated; settingFlag = false; if ( opts.filter_datatypes ) { if ( opts.filter_datatypes === "true" ) settingFlag = true; filterMenu.setCheckBoxValue("datatypeFilterCheckbox", settingFlag); defaultOptionsConfig.filter_datatypes = opts.filter_datatypes; } if ( opts.debugFeatures ) { if ( opts.debugFeatures === "true" ) settingFlag = true; hideDebugOptions = settingFlag; if ( options.getHideDebugFeatures() === false ) { options.executeHiddenDebugFeatuers(); } defaultOptionsConfig.debugFeatures = opts.debugFeatures; } settingFlag = false; if ( opts.filter_objectProperties ) { if ( opts.filter_objectProperties === "true" ) settingFlag = true; filterMenu.setCheckBoxValue("objectPropertyFilterCheckbox", settingFlag); defaultOptionsConfig.filter_objectProperties = opts.filter_objectProperties; } settingFlag = false; if ( opts.filter_sco ) { if ( opts.filter_sco === "true" ) settingFlag = true; filterMenu.setCheckBoxValue("subclassFilterCheckbox", settingFlag); defaultOptionsConfig.filter_sco = opts.filter_sco; } settingFlag = false; if ( opts.filter_disjoint ) { if ( opts.filter_disjoint === "true" ) settingFlag = true; filterMenu.setCheckBoxValue("disjointFilterCheckbox", settingFlag); defaultOptionsConfig.filter_disjoint = opts.filter_disjoint; } settingFlag = false; if ( opts.filter_setOperator ) { if ( opts.filter_setOperator === "true" ) settingFlag = true; filterMenu.setCheckBoxValue("setoperatorFilterCheckbox", settingFlag); defaultOptionsConfig.filter_setOperator = opts.filter_setOperator; } filterMenu.updateSettings(); // modesMenu settingFlag = false; if ( opts.mode_dynamic ) { if ( opts.mode_dynamic === "true" ) settingFlag = true; modeMenu.setDynamicLabelWidth(settingFlag); dynamicLabelWidth = settingFlag; defaultOptionsConfig.mode_dynamic = opts.mode_dynamic; } // settingFlag=false; // THIS SHOULD NOT BE SET USING THE OPTIONS ON THE URL // if (opts.mode_picnpin) { // graph.options().filterMenu().setCheckBoxValue("pickandpin ModuleCheckbox", settingFlag); // } settingFlag = false; if ( opts.mode_pnp ) { if ( opts.mode_pnp === "true" ) settingFlag = true; modeMenu.setCheckBoxValue("pickandpinModuleCheckbox", settingFlag); defaultOptionsConfig.mode_pnp = opts.mode_pnp; } settingFlag = false; if ( opts.mode_scaling ) { if ( opts.mode_scaling === "true" ) settingFlag = true; modeMenu.setCheckBoxValue("nodescalingModuleCheckbox", settingFlag); defaultOptionsConfig.mode_scaling = opts.mode_scaling; } settingFlag = false; if ( opts.mode_compact ) { if ( opts.mode_compact === "true" ) settingFlag = true; modeMenu.setCheckBoxValue("compactnotationModuleCheckbox", settingFlag); defaultOptionsConfig.mode_compact = opts.mode_compact; } settingFlag = false; if ( opts.mode_colorExt ) { if ( opts.mode_colorExt === "true" ) settingFlag = true; modeMenu.setCheckBoxValue("colorexternalsModuleCheckbox", settingFlag); defaultOptionsConfig.mode_colorExt = opts.mode_colorExt; } settingFlag = false; if ( opts.mode_multiColor ) { if ( opts.mode_multiColor === "true" ) settingFlag = true; modeMenu.setColorSwitchStateUsingURL(settingFlag); defaultOptionsConfig.mode_multiColor = opts.mode_multiColor; } modeMenu.updateSettingsUsingURL(); options.rectangularRepresentation(opts.rect); }; return options; };