UNPKG

91.9 kBJavaScriptView Raw
1// Copyright (c) 2018 NHOGS Interactive.
2(function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("d3")):"function"==typeof define&&define.amd?define(["exports","d3"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).popoto=e.popoto||{},e.d3)})(this,function(e,t){"use strict";function n(n){if(n&&n.__esModule)return n;var r=Object.create(null);return n&&Object.keys(n).forEach(function(e){var t;"default"!==e&&(t=Object.getOwnPropertyDescriptor(n,e),Object.defineProperty(r,e,t.get?t:{enumerable:!0,get:function(){return n[e]}}))}),r.default=n,Object.freeze(r)}var s=n(t),t="3.0.2",v={idGen:0,generateId:function(){return v.idGen++},nodes:[],links:[],getRootNode:function(){return v.nodes[0]}},u={};u.LogLevels=Object.freeze({DEBUG:0,INFO:1,WARN:2,ERROR:3,NONE:4}),u.LEVEL=u.LogLevels.NONE,u.TRACE=!1,u.log=function(e,t){if(console&&e>=u.LEVEL)switch(u.TRACE&&(t=t+"\n"+(new Error).stack),e){case u.LogLevels.DEBUG:case u.LogLevels.INFO:console.log(t);break;case u.LogLevels.WARN:console.warn(t);break;case u.LogLevels.ERROR:console.error(t)}},u.debug=function(e){u.log(u.LogLevels.DEBUG,e)},u.info=function(e){u.log(u.LogLevels.INFO,e)},u.warn=function(e){u.log(u.LogLevels.WARN,e)};var m={MAX_RESULTS_COUNT:100,VALUE_QUERY_LIMIT:100,USE_PARENT_RELATION:!(u.error=function(e){u.log(u.LogLevels.ERROR,e)}),USE_RELATION_DIRECTION:!0,RETURN_LABELS:!1,COLLECT_RELATIONS_WITH_VALUES:!1,prefilter:"",prefilterParameters:{},applyPrefilters:function(t){return t.statement=m.prefilter+t.statement,Object.keys(m.prefilterParameters).forEach(function(e){t.parameters[e]=m.prefilterParameters[e]}),t}};m.NEO4J_INTERNAL_ID=Object.freeze({queryInternalName:"NEO4JID"}),m.filterRelation=function(e){return!0},m.generateTaxonomyCountQuery=function(e){var t=L.node.getConstraintAttribute(e),n=[];return L.node.getPredefinedConstraints(e).forEach(function(e){n.push(e.replace(new RegExp("\\$identifier","g"),"n"))}),t===m.NEO4J_INTERNAL_ID?"MATCH (n:`"+e+"`)"+(0<n.length?" WHERE "+n.join(" AND "):"")+" RETURN count(DISTINCT ID(n)) as count":"MATCH (n:`"+e+"`)"+(0<n.length?" WHERE "+n.join(" AND "):"")+" RETURN count(DISTINCT n."+t+") as count"},m.generateNegativeQueryElements=function(){var f=[],h={};return v.nodes.filter(function(e){return!0===e.isNegative}).forEach(function(e){if(void 0!==L.node.getGenerateNegativeNodeValueConstraints(e)){var t,n=L.node.getGenerateNegativeNodeValueConstraints(e)(e);for(t in f=f.concat(n.whereElements),n.parameters)n.parameters.hasOwnProperty(t)&&(h[t]=n.parameters[t])}else{var r=m.getLinksToRoot(e,v.links),a=r.length-1,o="(NOT exists(";for(o+="("+v.getRootNode().internalLabel+")";0<=a;){var l=r[a],i=l.target;if(!0===i.isParentRelReverse&&!0===m.USE_RELATION_DIRECTION?o+="<-":o+="-",o+="[:`"+l.label+"`]",!0!==i.isParentRelReverse&&!0===m.USE_RELATION_DIRECTION?o+="->":o+="-",i===e&&void 0!==i.value&&0<i.value.length){var s=L.node.getConstraintAttribute(i.label),u=i.internalLabel+"_"+s;if(1<i.value.length){for(var d=0;d<i.value.length;d++)h[u+"_"+d]=i.value[d].attributes[s];o+="(:`"+i.label+"`{"+s+":$x$})"}else h[u]=i.value[0].attributes[s],o+="(:`"+i.label+"`{"+s+":$"+u+"})"}else o+="(:`"+i.label+"`)";a--}if(o+="))",void 0!==e.value&&1<e.value.length)for(var p=L.node.getConstraintAttribute(e.label),c=e.internalLabel+"_"+p,g=0;g<i.value.length;g++)f.push(o.replace("$x$","$"+c+"_"+g));else f.push(o)}}),{whereElements:f,parameters:h}},m.generateQueryElements=function(t,d,e,p,c){var g=[],f=[],h=[],v=[],E={};if(L.node.getPredefinedConstraints(t.label).forEach(function(e){f.push(e.replace(new RegExp("\\$identifier","g"),t.internalLabel))}),g.push("("+t.internalLabel+":`"+t.label+"`)"),p||t.immutable){var n,r=m.generateNodeValueConstraints(t,c),f=f.concat(r.whereElements);for(n in r.parameters)r.parameters.hasOwnProperty(n)&&(E[n]=r.parameters[n])}var y=0;return e.forEach(function(e){var t=e.source,n=e.target,r="",a="",a=m.USE_RELATION_DIRECTION?!0===n.isParentRelReverse?(r="<-","-"):(r="-","->"):r="-",o="r"+y++;h.push(o),L.node.getPredefinedConstraints(n.label).forEach(function(e){f.push(e.replace(new RegExp("\\$identifier","g"),n.internalLabel))}),m.COLLECT_RELATIONS_WITH_VALUES&&n===d&&v.push("COLLECT("+o+") AS incomingRels");var l="";c&&void 0!==L.node.getGenerateNodeValueConstraints(t)||(l=":`"+t.label+"`");var i="";if(c&&void 0!==L.node.getGenerateNodeValueConstraints(n)||(i=":`"+n.label+"`"),g.push("("+t.internalLabel+l+")"+r+"["+o+":`"+e.label+"`]"+a+"("+n.internalLabel+i+")"),n!==d&&(p||n.immutable)){var s,u=m.generateNodeValueConstraints(n,c);for(s in f=f.concat(u.whereElements),u.parameters)u.parameters.hasOwnProperty(s)&&(E[s]=u.parameters[s])}}),{matchElements:g,whereElements:f,relationElements:h,returnElements:v,parameters:E}},m.generateNodeValueConstraints=function(e,t){if(t&&void 0!==L.node.getGenerateNodeValueConstraints(e))return L.node.getGenerateNodeValueConstraints(e)(e);var n,r,a={},t=[];return void 0!==e.value&&0<e.value.length&&(n=L.node.getConstraintAttribute(e.label),r=n===m.NEO4J_INTERNAL_ID?e.internalLabel+"_internalID":e.internalLabel+"_"+n,1<e.value.length?(a[r]=[],e.value.forEach(function(e){e=n===m.NEO4J_INTERNAL_ID?e.internalID:e.attributes[n];a[r].push(e)}),n===m.NEO4J_INTERNAL_ID?t.push("ID("+e.internalLabel+") IN $"+r):t.push(e.internalLabel+"."+n+" IN $"+r)):(n===m.NEO4J_INTERNAL_ID?a[r]=e.value[0].internalID:a[r]=e.value[0].attributes[n],n===m.NEO4J_INTERNAL_ID?t.push("ID("+e.internalLabel+") = $"+r):t.push(e.internalLabel+"."+n+" = $"+r))),{parameters:a,whereElements:t}},m.getRelevantLinks=function(a,t,e){var o=e.slice(),l=[],e=o.filter(function(e){return e.target===t||void 0!==e.target.value&&0<e.target.value.length&&!0==!e.target.isNegative});return e.forEach(function(e){o.splice(o.indexOf(e),1)}),e.forEach(function(e){for(var t=e.source,n=!0;n;){var r=null;o.forEach(function(e){e.target===t&&(r=e)}),null===r?n=!1:r.source===a?(l.push(r),o.splice(o.indexOf(r),1),n=!1):(l.push(r),o.splice(o.indexOf(r),1),t=r.source)}}),e.concat(l)},m.getLinksToRoot=function(e,t){for(var n=[],r=e;r!==v.getRootNode();){for(var a,o=0;o<t.length;o++){var l=t[o];if(l.target===r){a=l;break}}a&&(n.push(a),r=a.source)}return n},m.generateResultQuery=function(e){var t,n=v.getRootNode(),r=m.generateNegativeQueryElements(),a=m.generateQueryElements(n,n,m.getRelevantLinks(n,n,v.links),!0,!0),o=a.matchElements,l=a.whereElements.concat(r.whereElements),i=a.relationElements,s=[],u=[],d=a.parameters;for(t in r.parameters)r.parameters.hasOwnProperty(t)&&(d[t]=r.parameters[t]);var p,c,g=L.node.getResultOrderByAttribute(n.label);null!=g&&(p=[],a=L.node.isResultOrderAscending(n.label),c=[],Array.isArray(a)?c=a.map(function(e){return e?"ASC":"DESC"}):c.push(a?"ASC":"DESC"),Array.isArray(g)?p=g.map(function(e){var t=g.indexOf(e);return t<c.length?e+" "+c[t]:e+" "+c[c.length-1]}):p.push(g+" "+c[0]),u.push("ORDER BY "+p.join(", "))),u.push("LIMIT "+m.MAX_RESULTS_COUNT),e?(s.push(n.internalLabel),i.forEach(function(e){s.push(e)})):(i=L.node.getReturnAttributes(n.label),s=i.map(function(e){return e===m.NEO4J_INTERNAL_ID?"ID("+n.internalLabel+") AS "+m.NEO4J_INTERNAL_ID.queryInternalName:n.internalLabel+"."+e+" AS "+e}),!0===m.RETURN_LABELS&&(f="labels("+n.internalLabel+")",i.indexOf("labels")<0&&(f+=" AS labels"),s.push(f)));var f="MATCH "+o.join(", ")+(0<l.length?" WHERE "+l.join(" AND "):"")+" RETURN DISTINCT "+s.join(", ")+" "+u.join(" "),u=L.node.filterResultQuery(n.label,{statement:f,matchElements:o,whereElements:l,withElements:[],returnElements:s,endElements:u,parameters:d});return m.applyPrefilters(u)},m.generateNodeCountQuery=function(e){var t,n=m.generateNegativeQueryElements(),r=m.generateQueryElements(v.getRootNode(),e,m.getRelevantLinks(v.getRootNode(),e,v.links),!0,!0),a=r.matchElements,o=r.whereElements.concat(n.whereElements),l=[],i=r.parameters;for(t in n.parameters)n.parameters.hasOwnProperty(t)&&(i[t]=n.parameters[t]);r=L.node.getConstraintAttribute(e.label);r===m.NEO4J_INTERNAL_ID?l.push("count(DISTINCT ID("+e.internalLabel+")) as count"):l.push("count(DISTINCT "+e.internalLabel+"."+r+") as count");r="MATCH "+a.join(", ")+(0<o.length?" WHERE "+o.join(" AND "):"")+" RETURN "+l.join(", "),l=L.node.filterNodeCountQuery(e,{statement:r,matchElements:a,whereElements:o,returnElements:l,endElements:[],parameters:i});return m.applyPrefilters(l)},m.generateNodeValueQuery=function(e){var t,n=m.generateNegativeQueryElements(),r=v.getRootNode(),a=m.generateQueryElements(r,e,m.getRelevantLinks(r,e,v.links),!0,!1),o=a.matchElements,l=a.whereElements.concat(n.whereElements),i=[],s=[],u=a.parameters;for(t in n.parameters)n.parameters.hasOwnProperty(t)&&(u[t]=n.parameters[t]);var d=L.node.getValueOrderByAttribute(e.label);d&&(g=L.node.isValueOrderAscending(e.label)?"ASC":"DESC",s.push("ORDER BY "+d+" "+g)),s.push("LIMIT "+m.VALUE_QUERY_LIMIT);var p=L.node.getReturnAttributes(e.label);L.node.getConstraintAttribute(e.label);for(var c=0;c<p.length;c++)p[c]===m.NEO4J_INTERNAL_ID?i.push("ID("+e.internalLabel+") AS "+m.NEO4J_INTERNAL_ID.queryInternalName):i.push(e.internalLabel+"."+p[c]+" AS "+p[c]);var g=L.node.getConstraintAttribute(r.label);g===m.NEO4J_INTERNAL_ID?i.push("count(DISTINCT ID("+r.internalLabel+")) AS count"):i.push("count(DISTINCT "+r.internalLabel+"."+g+") AS count"),m.COLLECT_RELATIONS_WITH_VALUES&&a.returnElements.forEach(function(e){i.push(e)});a="MATCH "+o.join(", ")+(0<l.length?" WHERE "+l.join(" AND "):"")+" RETURN "+i.join(", ")+" "+s.join(" "),s=L.node.filterNodeValueQuery(e,{statement:a,matchElements:o,whereElements:l,returnElements:i,endElements:s,parameters:u});return m.applyPrefilters(s)},m.generateNodeRelationQuery=function(e){var t=m.getLinksToRoot(e,v.links),n=m.generateQueryElements(v.getRootNode(),e,t,!1,!1),r=n.matchElements,a=n.whereElements,o=[],l=[],t=n.parameters,n=m.USE_RELATION_DIRECTION?"->":"-";r.push("("+e.internalLabel+":`"+e.label+"`)-[r]"+n+"(x)"),o.push("type(r) AS label"),m.USE_PARENT_RELATION?o.push("head(labels(x)) AS target"):o.push("last(labels(x)) AS target"),o.push("count(r) AS count"),l.push("ORDER BY count(r) DESC");n="MATCH "+r.join(", ")+(0<a.length?" WHERE "+a.join(" AND "):"")+" RETURN "+o.join(", ")+" "+l.join(" "),t=L.node.filterNodeRelationQuery(e,{statement:n,matchElements:r,whereElements:a,returnElements:o,endElements:l,parameters:t});return m.applyPrefilters(t)};var d={createSession:function(){if(void 0!==d.DRIVER)return d.DRIVER.session({defaultAccessMode:"READ"});throw new Error("popoto.runner.DRIVER must be defined")},run:function(e){u.info("STATEMENTS:"+JSON.stringify(e));var t=d.createSession();return t.readTransaction(function(t){return Promise.all(e.statements.map(function(e){return t.run({text:e.statement,parameters:e.parameters})}))}).finally(function(){t.close()})},toObject:function(e){return e.map(function(e){return e.records.map(function(e){return e.toObject()})})}},p={};function c(){i();var e=v.getRootNode();e&&void 0!==e.label&&(I.isActive&&I.updateQuery(),x.isActive&&x.updateQuery(),(p.isActive||0<p.resultListeners.length||0<p.resultCountListeners.length||0<p.graphResultListeners.length)&&p.updateResults())}function i(){b.isActive&&(b.link.updateLinks(),b.node.updateNodes(),b.force.nodes(v.nodes),b.force.force("link").links(v.links),b.force.alpha(1).restart())}p.containerId="popoto-results",p.hasChanged=!0,p.resultCountListeners=[],p.resultListeners=[],p.graphResultListeners=[],p.RESULTS_PAGE_SIZE=10,p.TOTAL_COUNT=!1,p.onTotalResultCount=function(e){p.resultCountListeners.push(e)},p.onResultReceived=function(e){p.resultListeners.push(e)},p.onGraphResultReceived=function(e){p.graphResultListeners.push(e)},p.parseGraphResultData=function(e){var t={},n={};e.results[1].data.forEach(function(e){e.graph.nodes.forEach(function(e){t.hasOwnProperty(e.id)||(t[e.id]=e)}),e.graph.relationships.forEach(function(e){n.hasOwnProperty(e.id)||(n[e.id]=e)})});var r,a,o=[],l=[];for(r in t)t.hasOwnProperty(r)&&o.push(t[r]);for(a in n)n.hasOwnProperty(a)&&l.push(n[a]);return{nodes:o,edges:l}},p.updateResults=function(){var a,e,t,n;p.hasChanged&&(a={},e=0,t=m.generateResultQuery(),t={statements:[{statement:(p.lastGeneratedQuery=t).statement,parameters:t.parameters}]},a.results=e++,0<p.graphResultListeners.length&&(n=m.generateResultQuery(!0),p.lastGeneratedQuery=n,t.statements.push({statement:n.statement,parameters:n.parameters}),a.graph=e++),!0===p.TOTAL_COUNT&&0<p.resultCountListeners.length&&(n=m.generateNodeCountQuery(v.getRootNode()),t.statements.push({statement:n.statement,parameters:n.parameters}),a.total=e++),u.info("Results ==>"),d.run(t).then(function(e){u.info("<== Results");var t,n,e=d.toObject(e),r=e[a.results].map(function(e,t){return{resultIndex:t,label:v.getRootNode().label,attributes:e}});p.lastResults=r,a.hasOwnProperty("total")&&(t=e[a.total][0].count,p.resultCountListeners.forEach(function(e){e(t)})),p.resultListeners.forEach(function(e){e(r)}),0<p.graphResultListeners.length&&(n=p.parseGraphResultData(response),p.graphResultListeners.forEach(function(e){e(n)})),p.isActive&&(s.select("#"+p.containerId).selectAll(".ppt-result").data([]).exit().remove(),s.select("#"+p.containerId).selectAll(".ppt-result").data(r.slice(0,p.RESULTS_PAGE_SIZE),function(e){return e.resultIndex}).enter().append("div").attr("class","ppt-result").attr("id",function(e){return"popoto-result-"+e.resultIndex}).each(function(e){L.node.getDisplayResults(e.label)(s.select(this))})),p.hasChanged=!1}).catch(function(e){u.error(e),p.resultListeners.forEach(function(e){e([])})}))},p.updateResultsCount=function(){0<p.resultCountListeners.length&&p.resultCountListeners.forEach(function(e){e(v.getRootNode().count)})},p.generatePreQuery=function(){var t={ids:[]};return p.lastResults.forEach(function(e){t.ids.push(e.attributes.id)}),{query:"MATCH (d) WHERE d.id IN $ids WITH d",param:t}};var o={containerId:"popoto-taxonomy",createTaxonomyPanel:function(){var e=s.select("#"+o.containerId).append("ul").attr("class","ppt-taxo-ul"),t=o.generateTaxonomiesData(),e=e.selectAll(".taxo").data(t).enter().append("li").attr("id",function(e){return e.id}).attr("class","ppt-taxo-li").attr("value",function(e){return e.label});e.append("span").attr("class",function(e){return"ppt-icon "+L.taxonomy.getCSSClass(e.label,"span-icon")}).html("&nbsp;"),e.append("span").attr("class","ppt-label").text(function(e){return L.taxonomy.getTextValue(e.label)}),e.append("span").attr("class","ppt-count"),e.on("click",o.onClick),o.addTaxonomyChildren(e);var n=[];t.forEach(function(e){n.push(e),e.children&&o.flattenChildren(e,n)}),b.DISABLE_COUNT||o.updateCount(n)},flattenChildren:function(e,t){e.children.forEach(function(e){t.push(e),e.children&&t.concat(o.flattenChildren(e,t))})},updateCount:function(e){var r,t=[];e.forEach(function(e){t.push({statement:m.generateTaxonomyCountQuery(e.label)})}),r=e,u.info("Count taxonomies ==>"),d.run({statements:t}).then(function(e){u.info("<== Count taxonomies");for(var t=0;t<r.length;t++){var n=e[t].records[0].get("count").toString();s.select("#"+r[t].id).select(".ppt-count").text(" ("+n+")")}},function(e){u.error(e),s.select("#popoto-taxonomy").selectAll(".ppt-count").text(" (0)")}).catch(function(e){u.error(e),s.select("#popoto-taxonomy").selectAll(".ppt-count").text(" (0)")})},addTaxonomyChildren:function(e){e.each(function(e){var t=s.select(this),n=e.children;e.children&&((n=t.append("ul").attr("class","ppt-taxo-sub-ul").selectAll("li").data(n).enter().append("li").attr("id",function(e){return e.id}).attr("class","ppt-taxo-sub-li").attr("value",function(e){return e.label})).append("span").attr("class",function(e){return"ppt-icon "+L.taxonomy.getCSSClass(e.label,"span-icon")}).html("&nbsp;"),n.append("span").attr("class","ppt-label").text(function(e){return L.taxonomy.getTextValue(e.label)}),n.append("span").attr("class","ppt-count"),n.on("click",o.onClick),o.addTaxonomyChildren(n))})},onClick:function(){s.event.stopPropagation();var e=this.attributes.value.value;v.nodes.length=0,v.links.length=0,b.node.internalLabels={},c(),b.mainLabel=e,void 0!==L.node.getSchema(e)?b.addSchema(L.node.getSchema(e)):b.addRootNode(e),b.hasGraphChanged=!0,p.hasChanged=!0,b.ignoreCount=!1,c(),r.center()},generateTaxonomiesData:function(){var e,t=0,n=[];for(e in L.node.Provider)L.node.Provider.hasOwnProperty(e)&&L.node.getProperty(e,"isSearchable")&&!L.node.Provider[e].parent&&n.push({label:e,id:"popoto-lbl-"+t++});return n.forEach(function(e){L.node.getProvider(e.label).hasOwnProperty("children")&&(t=o.addChildrenData(e,t))}),n},addChildrenData:function(r,a){return r.children=[],L.node.getProvider(r.label).children.forEach(function(e){var t=L.node.getProvider(e),n={label:e,id:"popoto-lbl-"+a++};t.hasOwnProperty("children")&&(a=o.addChildrenData(n,a)),L.node.getProperty(e,"isSearchable")&&r.children.push(n)}),a}},r={CENTER_GRAPH:!0,RESET_GRAPH:!0,SAVE_GRAPH:!1,TOGGLE_TAXONOMY:!1,TOGGLE_FULL_SCREEN:!0,TOGGLE_VIEW_RELATION:!0,TOGGLE_FIT_TEXT:!0,reset:function(){v.nodes.length=0,v.links.length=0,b.node.internalLabels={},"string"==typeof b.mainLabel||b.mainLabel instanceof String?void 0!==L.node.getSchema(b.mainLabel)?b.addSchema(L.node.getSchema(b.mainLabel)):b.addRootNode(b.mainLabel):b.loadSchema(b.mainLabel),b.hasGraphChanged=!0,p.hasChanged=!0,c(),r.center()},center:function(){b.svgTag.transition().call(b.zoom.transform,s.zoomIdentity)},toggleTaxonomy:function(){var e=s.select("#"+o.containerId);e.filter(".disabled").empty()?e.classed("disabled",!0):e.classed("disabled",!1),b.centerRootNode()},toggleFitText:function(){b.USE_FIT_TEXT=!b.USE_FIT_TEXT,b.node.updateNodes()},toggleViewRelation:function(){b.DISABLE_RELATION=!b.DISABLE_RELATION,s.selectAll(".ppt-g-node-background").classed("hide",b.DISABLE_RELATION),b.tick()},toggleFullScreen:function(){var e=document.getElementById(b.containerId);document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement?document.exitFullscreen?document.exitFullscreen():document.msExitFullscreen?document.msExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen&&document.webkitExitFullscreen():e.requestFullscreen?e.requestFullscreen():e.msRequestFullscreen?e.msRequestFullscreen():e.mozRequestFullScreen?e.mozRequestFullScreen():e.webkitRequestFullscreen&&e.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}},a={TOOL_TAXONOMY:"Show/hide taxonomy panel",TOOL_RELATION:"Show/hide relation",TOOL_CENTER:"Center view",TOOL_FULL_SCREEN:"Full screen",TOOL_RESET:"Reset graph",TOOL_SAVE:"Save graph",TOOL_FIT_TEXT:"Fit text in nodes",render:function(e){e=e.append("div").attr("class","ppt-toolbar");r.TOGGLE_VIEW_RELATION&&e.append("span").attr("id","popoto-toggle-relation").attr("class","ppt-icon ppt-menu relation").attr("title",e.TOOL_RELATION).on("click",function(){r.toggleViewRelation()}),r.RESET_GRAPH&&e.append("span").attr("id","popoto-reset-menu").attr("class","ppt-icon ppt-menu reset").attr("title",e.TOOL_RESET).on("click",function(){b.notifyListeners(b.Events.GRAPH_RESET,[]),r.reset()}),r.TOGGLE_TAXONOMY&&e.append("span").attr("id","popoto-taxonomy-menu").attr("class","ppt-icon ppt-menu taxonomy").attr("title",e.TOOL_TAXONOMY).on("click",r.toggleTaxonomy),r.CENTER_GRAPH&&e.append("span").attr("id","popoto-center-menu").attr("class","ppt-icon ppt-menu center").attr("title",e.TOOL_CENTER).on("click",r.center),r.TOGGLE_FULL_SCREEN&&e.append("span").attr("id","popoto-fullscreen-menu").attr("class","ppt-icon ppt-menu fullscreen").attr("title",e.TOOL_FULL_SCREEN).on("click",r.toggleFullScreen),r.SAVE_GRAPH&&e.append("span").attr("id","popoto-save-menu").attr("class","ppt-icon ppt-menu save").attr("title",e.TOOL_SAVE).on("click",function(){b.notifyListeners(b.Events.GRAPH_SAVE,[b.getSchema()])}),r.TOGGLE_FIT_TEXT&&e.append("span").attr("id","popoto-fit-text-menu").attr("class","ppt-icon ppt-menu fit-text").attr("title",e.TOOL_FIT_TEXT).on("click",r.toggleFitText)}},l={};function g(e){return"function"==typeof e?e:function(){return e}}l.LinkTypes=Object.freeze({RELATION:0,VALUE:1,SEGMENT:2}),l.TEXT_DY=-4,l.SHOW_MARKER=!1,l.gID="popoto-glinks",l.updateLinks=function(){var e=l.updateData();l.removeElements(e.exit()),l.addNewElements(e.enter()),l.updateElements()},l.updateData=function(){return b.svg.select("#"+l.gID).selectAll(".ppt-glink").data(v.links,function(e){return e.id})},l.removeElements=function(e){e.remove()},l.addNewElements=function(e){e=e.append("g").attr("class","ppt-glink").on("click",l.clickLink).on("mouseover",l.mouseOverLink).on("mouseout",l.mouseOutLink);e.append("path").attr("class","ppt-link"),e.append("text").attr("text-anchor","middle").attr("dy",l.TEXT_DY).append("textPath").attr("class","ppt-textPath").attr("startOffset","50%")},l.updateElements=function(){var e=b.svg.select("#"+l.gID).selectAll(".ppt-glink");e.attr("id",function(e){return"ppt-glink_"+e.id}),e.selectAll(".ppt-link").attr("id",function(e){return"ppt-path_"+e.id}).attr("stroke",function(e){return L.link.getColor(e,"path","stroke")}).attr("class",function(e){return"ppt-link "+L.link.getCSSClass(e,"path")}),e.selectAll("text").attr("id",function(e){return"ppt-text_"+e.id}).attr("class",function(e){return L.link.getCSSClass(e,"text")}).attr("fill",function(e){return L.link.getColor(e,"text","fill")}).selectAll(".ppt-textPath").attr("id",function(e){return"ppt-textpath_"+e.id}).attr("class",function(e){return"ppt-textpath "+L.link.getCSSClass(e,"text-path")}).attr("xlink:href",function(e){return"#ppt-path_"+e.id}).text(function(e){return L.link.getTextValue(e)})},l.mouseOverLink=function(){s.select(this).select("path").attr("class",function(e){return"ppt-link "+L.link.getCSSClass(e,"path--hover")}),s.select(this).select("text").attr("class",function(e){return L.link.getCSSClass(e,"text--hover")});var t=s.select(this).data()[0];I.isActive&&(I.queryConstraintSpanElements.filter(function(e){return e.ref===t}).classed("hover",!0),I.querySpanElements.filter(function(e){return e.ref===t}).classed("hover",!0)),x.isActive&&x.querySpanElements.filter(function(e){return e.link===t}).classed("hover",!0)},l.mouseOutLink=function(){s.select(this).select("path").attr("class",function(e){return"ppt-link "+L.link.getCSSClass(e,"path")}),s.select(this).select("text").attr("class",function(e){return L.link.getCSSClass(e,"text")});var t=s.select(this).data()[0];I.isActive&&(I.queryConstraintSpanElements.filter(function(e){return e.ref===t}).classed("hover",!1),I.querySpanElements.filter(function(e){return e.ref===t}).classed("hover",!1)),x.isActive&&x.querySpanElements.filter(function(e){return e.link===t}).classed("hover",!1)},l.clickLink=function(){var e=s.select(this).data()[0];e.type!==l.LinkTypes.VALUE&&(b.node.collapseAllNode(),e=b.node.removeNode(e.target),b.hasGraphChanged=!0,p.hasChanged=e,c())};var f=document.createElement("canvas").getContext("2d"),h=12;function E(e){return f.measureText(e).width}function y(e){if(null==e)return[];var t=String(e);return function(e,t){for(var n,r=1/0,a=[],o=0,l=e.length;o<l;++o){var i=(n?n.text+" ":"")+e[o],s=E(i);(r+s)/2<t?(n.width=r=s,n.text=i):(n={width:r=E(e[o]),text:e[o]},a.push(n))}return a}(((e=(e=t).split(/\s+/g))[e.length-1]||e.pop(),e[0]||e.shift(),e),Math.sqrt(E(t.trim())*h))}function A(e,t,n,r){var a,o=g(n),l=g(t),r=r&&g(r);a=r,e.each(function(e){var t=s.select(this).selectAll(".fitted-text").data([{}]);t.enter().append("text").merge(t).attr("class","fitted-text"+(void 0!==a?" "+a(e):"")).attr("style","text-anchor: middle; font: 10px sans-serif")});var i,e=e.select(".fitted-text");i=l,e.each(function(e){var n=y(i(e)),e=s.select(this).selectAll("tspan").data(n);e.exit().remove(),e.enter().append("tspan").merge(e).attr("x",0).attr("y",function(e,t){return(t-n.length/2+.8)*h}).text(function(e){return e.text})}),e.attr("transform",function(e){var t=function(e){for(var t=0,n=0,r=e.length;n<r;++n)var a=e[n].width/2,o=(Math.abs(n-r/2+.5)+.5)*h,t=Math.max(t,Math.sqrt(a*a+o*o));return t}(y(l(e))),n=1;return"translate(0,0) scale("+(n=0!==t&&t?o(e)/t:n)+")"})}var N={getNodeBoundingBox:function(e){return e.getBBox()},render:function(e){var t=e.append("rect").attr("fill",function(e){return L.node.getColor(e,"back-text","fill")}).attr("class",function(e){return L.node.getCSSClass(e,"back-text")});A(e,function(e){return L.node.getTextValue(e)},function(e){return L.node.getSize(e)},function(e){return L.node.getCSSClass(e,"text")}),t.attr("x",function(e){return N.getNodeBoundingBox(s.select(this.parentNode).select("text").node()).x-3}).attr("y",function(e){return N.getNodeBoundingBox(s.select(this.parentNode).select("text").node()).y}).attr("rx","5").attr("ry","5").attr("width",function(e){return N.getNodeBoundingBox(s.select(this.parentNode).select("text").node()).width+6}).attr("height",function(e){return N.getNodeBoundingBox(s.select(this.parentNode).select("text").node()).height}).attr("transform",function(e){return s.select(this.parentNode).select("text").attr("transform")})}},R={TEXT_Y:8,getNodeBoundingBox:function(e){return e.getBBox()},render:function(e){var t=e.append("rect").attr("fill",function(e){return L.node.getColor(e,"back-text","fill")}).attr("class",function(e){return L.node.getCSSClass(e,"back-text")});e.append("text").attr("x",0).attr("y",R.TEXT_Y).attr("text-anchor","middle").attr("class",function(e){return L.node.getCSSClass(e,"text")}).on("mouseover",function(e){s.select(this.parentNode).attr("clip-path",null)}).on("mouseout",function(e){s.select(this.parentNode).attr("clip-path",function(e){return"url(#node-view"+e.id+")"})}).text(function(e){return L.node.getTextValue(e)}),t.attr("x",function(e){return R.getNodeBoundingBox(s.select(this.parentNode).select("text").node()).x-3}).attr("y",function(e){return R.getNodeBoundingBox(s.select(this.parentNode).select("text").node()).y}).attr("rx","5").attr("ry","5").attr("width",function(e){return R.getNodeBoundingBox(s.select(this.parentNode).select("text").node()).width+6}).attr("height",function(e){return R.getNodeBoundingBox(s.select(this.parentNode).select("text").node()).height})}},T={gID:"popoto-gnodes",DONUTS_MARGIN:0,DONUT_WIDTH:20,NODE_MAX_CHARS:11,NODE_TITLE_MAX_CHARS:100,PAGE_SIZE:10,CountBox:{x:16,y:33,w:52,h:19},chooseWaiting:!1,getDonutInnerRadius:function(e){return L.node.getSize(e)+T.DONUTS_MARGIN},getDonutOuterRadius:function(e){return L.node.getSize(e)+T.DONUTS_MARGIN+T.DONUT_WIDTH}};T.pie=s.pie().sort(null).value(function(e){return 1}),T.NodeTypes=Object.freeze({ROOT:0,CHOOSE:1,VALUE:2,GROUP:3}),T.internalLabels={},T.generateInternalLabel=function(e){e=e?e.toLowerCase().replace(/ /g,""):"n";return e in T.internalLabels?(T.internalLabels[e]=T.internalLabels[e]+1,e+T.internalLabels[e]):(T.internalLabels[e]=0,e)},T.updateNodes=function(){var e=T.updateData();T.removeElements(e.exit()),T.addNewElements(e.enter()),T.updateElements()},T.updateData=function(){var e=b.svg.select("#"+T.gID).selectAll(".ppt-gnode").data(v.nodes,function(e){return e.id});return b.hasGraphChanged&&(T.updateAutoLoadValues(),b.DISABLE_COUNT||b.ignoreCount||T.updateCount()),b.hasGraphChanged=!1,e},T.updateCount=function(){var t=[],r=v.nodes.filter(function(e){return!(e.type===T.NodeTypes.VALUE||e.type===T.NodeTypes.GROUP||e.hasOwnProperty("isNegative")&&e.isNegative)});r.forEach(function(e){e=m.generateNodeCountQuery(e);t.push({statement:e.statement,parameters:e.parameters})}),u.info("Count nodes ==>"),d.run({statements:t}).then(function(e){u.info("<== Count nodes");for(var t=d.toObject(e),n=0;n<r.length;n++)r[n].count=t[n][0].count;0<p.resultCountListeners.length&&p.updateResultsCount(),T.updateElements(),b.link.updateElements()}).catch(function(e){u.error(e),r.forEach(function(e){e.count=0}),T.updateElements(),b.link.updateElements()})},T.updateAutoLoadValues=function(){for(var e=[],o=T.getAutoLoadValueNodes(),t=0;t<o.length;t++){var n=o[t],n=m.generateNodeValueQuery(n);e.push({statement:n.statement,parameters:n.parameters})}0<e.length&&(u.info("AutoLoadValue ==>"),d.run({statements:e}).then(function(e){u.info("<== AutoLoadValue");for(var t=d.toObject(e),n=0;n<o.length;n++){var r=o[n],a=L.node.getConstraintAttribute(r.label);r.data=t[n].filter(function(t){var n=!0;return r.hasOwnProperty("value")&&0<r.value.length&&r.value.forEach(function(e){e.attributes[a]===t[a]&&(n=!1)}),n}),r.page=1}b.notifyListeners(b.Events.GRAPH_NODE_DATA_LOADED,[o])}).catch(function(e){u.error(e)}))},T.removeElements=function(e){e.filter(function(e){return!e.parent}).remove(),e.filter(function(e){return e.parent}).transition().duration(300).attr("transform",function(e){return"translate("+e.parent.x+","+e.parent.y+")"}).remove()},T.addNewElements=function(e){e=e.append("g").attr("class","ppt-gnode");e.on("click",T.nodeClick).on("mouseover",T.mouseOverNode).on("mouseout",T.mouseOutNode),e.filter(function(e){return e.type!==T.NodeTypes.VALUE}).on("contextmenu",T.clearSelection),e.filter(function(e){return e.type===T.NodeTypes.VALUE}).on("contextmenu",function(){s.event.preventDefault()}),e.append("defs").append("clipPath").attr("id",function(e){return"node-view"+e.id}).append("circle").attr("cx",0).attr("cy",0),T.addBackgroundElements(e),T.addMiddlegroundElements(e),T.addForegroundElements(e)},T.addBackgroundElements=function(e){e=e.append("g").attr("class","ppt-g-node-background").classed("hide",b.DISABLE_RELATION);e.append("g").attr("class","ppt-donut-labels"),e.append("g").attr("class","ppt-donut-segments")},T.addMiddlegroundElements=function(e){e.append("g").attr("class","ppt-g-node-middleground")},T.addForegroundElements=function(e){var t=e.append("g").attr("class","ppt-g-node-foreground"),n=t.filter(function(e){return e.type===T.NodeTypes.ROOT||e.type===T.NodeTypes.CHOOSE}).append("g").attr("class","ppt-node-foreground-g-arrows"),e=n.append("g");e.append("circle").attr("class","ppt-larrow").attr("cx","-43").attr("cy","-23").attr("r","17"),e.append("path").attr("class","ppt-arrow").attr("d","m -44.905361,-23 6.742,-6.742 c 0.81,-0.809 0.81,-2.135 0,-2.944 l -0.737,-0.737 c -0.81,-0.811 -2.135,-0.811 -2.945,0 l -8.835,8.835 c -0.435,0.434 -0.628,1.017 -0.597,1.589 -0.031,0.571 0.162,1.154 0.597,1.588 l 8.835,8.834 c 0.81,0.811 2.135,0.811 2.945,0 l 0.737,-0.737 c 0.81,-0.808 0.81,-2.134 0,-2.943 l -6.742,-6.743 z"),e.on("click",function(e){s.event.stopPropagation(),1<e.page&&(e.page--,T.collapseNode(e),T.expandNode(e))});n=n.append("g");n.append("circle").attr("class","ppt-rarrow").attr("cx","43").attr("cy","-23").attr("r","17"),n.append("path").attr("class","ppt-arrow").attr("d","m 51.027875,-24.5875 -8.835,-8.835 c -0.811,-0.811 -2.137,-0.811 -2.945,0 l -0.738,0.737 c -0.81,0.81 -0.81,2.136 0,2.944 l 6.742,6.742 -6.742,6.742 c -0.81,0.81 -0.81,2.136 0,2.943 l 0.737,0.737 c 0.81,0.811 2.136,0.811 2.945,0 l 8.835,-8.836 c 0.435,-0.434 0.628,-1.017 0.597,-1.588 0.032,-0.569 -0.161,-1.152 -0.596,-1.586 z"),n.on("click",function(e){s.event.stopPropagation(),e.page*T.PAGE_SIZE<e.count&&(e.page++,T.collapseNode(e),T.expandNode(e))}),b.DISABLE_COUNT||((n=t.filter(function(e){return e.type!==T.NodeTypes.GROUP})).append("rect").attr("x",T.CountBox.x).attr("y",T.CountBox.y).attr("width",T.CountBox.w).attr("height",T.CountBox.h).attr("class","ppt-count-box"),n.append("text").attr("x",42).attr("y",48).attr("text-anchor","middle").attr("class","ppt-count-text")),t.filter(function(e){return e.type===T.NodeTypes.CHOOSE}).append("g").attr("class","ppt-g-node-ban").append("path").attr("d","M89.1 19.2C88 17.7 86.6 16.2 85.2 14.8 83.8 13.4 82.3 12 80.8 10.9 72 3.9 61.3 0 50 0 36.7 0 24.2 5.4 14.8 14.8 5.4 24.2 0 36.7 0 50c0 11.4 3.9 22.1 10.9 30.8 1.2 1.5 2.5 3 3.9 4.4 1.4 1.4 2.9 2.7 4.4 3.9C27.9 96.1 38.6 100 50 100 63.3 100 75.8 94.6 85.2 85.2 94.6 75.8 100 63.3 100 50 100 38.7 96.1 28 89.1 19.2ZM11.9 50c0-10.2 4-19.7 11.1-27C30.3 15.9 39.8 11.9 50 11.9c8.2 0 16 2.6 22.4 7.3L19.3 72.4C14.5 66 11.9 58.2 11.9 50Zm65 27c-7.2 7.1-16.8 11.1-27 11.1-8.2 0-16-2.6-22.4-7.4L80.8 27.6C85.5 34 88.1 41.8 88.1 50c0 10.2-4 19.7-11.1 27z")},T.updateElements=function(){var e=b.svg.select("#"+T.gID).selectAll(".ppt-gnode");e.attr("id",function(e){return"popoto-gnode_"+e.id}),b.USE_VORONOI_LAYOUT&&e.attr("clip-path",function(e){return"url(#voroclip-"+e.id+")"}),e.select("defs").select("clipPath").attr("id",function(e){return"node-view"+e.id}).selectAll("circle").attr("r",function(e){return L.node.getSize(e)}),e.filter(function(e){return e.type!==T.NodeTypes.ROOT}).call(s.drag().on("start",function(e){s.event.active||b.force.alphaTarget(.3).restart();e.fx=e.x,e.fy=e.y}).on("drag",function(e){e.fx=s.event.x,e.fy=s.event.y}).on("end",function(e){s.event.active||b.force.alphaTarget(0);!1===e.fixed&&(e.fx=null,e.fy=null)})),T.updateBackgroundElements(),T.updateMiddlegroundElements(),T.updateForegroundElements()},T.updateBackgroundElements=function(){var e=b.svg.select("#"+T.gID).selectAll(".ppt-gnode").selectAll(".ppt-g-node-background");e.select(".ppt-donut-labels").selectAll("*").remove(),e.select(".ppt-donut-segments").selectAll("*").remove();var t=e.select(".ppt-donut-segments").selectAll(".ppt-segment-container").data(function(e){var t=[];return t=e.hasOwnProperty("relationships")?e.relationships:t},function(e){return e.id}).enter().append("g").attr("class",".ppt-segment-container").on("click",T.segmentClick).on("mouseover",function(e){s.select(this).select(".ppt-text-arc").classed("hover",!0)}).on("mouseout",function(e){s.select(this).select(".ppt-text-arc").classed("hover",!1)});t.append("title").attr("class","ppt-svg-title").text(function(e){return e.label+" "+e.target}),e.select(".ppt-donut-labels").selectAll(".ppt-segment-container").data(function(e){var t=[];return t=e.hasOwnProperty("relationships")?e.relationships:t},function(e){return e.id}).enter().append("g").attr("class",".ppt-segment-container").on("click",T.segmentClick).on("mouseover",function(e){s.select(this).select(".ppt-text-arc").classed("hover",!0)}).on("mouseout",function(e){s.select(this).select(".ppt-text-arc").classed("hover",!1)}).append("path").attr("class","ppt-hidden-arc").attr("id",function(e,t){return"arc_"+s.select(this.parentNode.parentNode).datum().id+"_"+t}).attr("d",function(e){var t=s.select(this.parentNode.parentNode).datum(),e={startAngle:e.directionAngle-(Math.PI-.1),endAngle:e.directionAngle+(Math.PI-.1)},t=s.arc().innerRadius(T.getDonutInnerRadius(t)).outerRadius(T.getDonutOuterRadius(t))(e),e=/(^.+?)L/.exec(t);return(e&&1<e.length?e:/(^.+?)M/.exec(t))[1].replace(/,/g," ")}).style("fill","none").style("stroke","none"),t.append("text").attr("text-anchor","middle").attr("class",function(e){var t=s.select(this.parentNode.parentNode).datum();return t.hasOwnProperty("count")&&0===t.count?"ppt-text-arc disabled":"ppt-text-arc"}).attr("fill",function(e){var t=s.select(this.parentNode.parentNode).datum();return L.link.getColor({label:e.label,type:b.link.LinkTypes.SEGMENT,source:t,target:{label:e.target}},"segment","fill")}).attr("dy",b.link.TEXT_DY).append("textPath").attr("startOffset","50%").attr("xlink:href",function(e,t){return"#arc_"+s.select(this.parentNode.parentNode.parentNode).datum().id+"_"+t}).text(function(e){var t=s.select(this.parentNode.parentNode.parentNode).datum();return L.link.getTextValue({source:t,target:{label:e.target},label:e.label,type:b.link.LinkTypes.SEGMENT})}),t.append("path").attr("class",function(e){var t=s.select(this.parentNode.parentNode).datum();return t.hasOwnProperty("count")&&0===t.count?"ppt-segment disabled":"ppt-segment"}).attr("d",function(e){var t=s.select(this.parentNode.parentNode).datum();return s.arc().innerRadius(T.getDonutInnerRadius(t)).outerRadius(T.getDonutOuterRadius(t))(e)}).attr("fill",function(e){var t=s.select(this.parentNode.parentNode).datum();return L.link.getColor({label:e.label,type:b.link.LinkTypes.RELATION,source:t,target:{label:e.target}},"path","fill")}).attr("stroke",function(e){var t=s.select(this.parentNode.parentNode).datum();return L.link.getColor({label:e.label,type:b.link.LinkTypes.RELATION,source:t,target:{label:e.target}},"path","stroke")})},T.updateMiddlegroundElements=function(){var e=b.svg.select("#"+T.gID).selectAll(".ppt-gnode").selectAll(".ppt-g-node-middleground");e.attr("clip-path",function(e){return"url(#node-view"+e.id+")"}),e.selectAll("*").remove(),T.updateMiddlegroundElementsTooltip(e),T.updateMiddlegroundElementsText(e.filter(function(e){return L.node.getNodeDisplayType(e)===L.node.DisplayTypes.TEXT})),T.updateMiddlegroundElementsImage(e.filter(function(e){return L.node.getNodeDisplayType(e)===L.node.DisplayTypes.IMAGE})),T.updateMiddlegroundElementsSymbol(e.filter(function(e){return L.node.getNodeDisplayType(e)===L.node.DisplayTypes.SYMBOL})),T.updateMiddlegroundElementsSVG(e.filter(function(e){return L.node.getNodeDisplayType(e)===L.node.DisplayTypes.SVG})),T.updateMiddlegroundElementsDisplayedText(e.filter(function(e){return L.node.isTextDisplayed(e)}))},T.updateMiddlegroundElementsTooltip=function(e){e.append("title").attr("class",function(e){return L.node.getCSSClass(e,"title")}).text(function(e){return L.node.getTextValue(e,T.NODE_TITLE_MAX_CHARS)})},T.updateMiddlegroundElementsText=function(e){e.append("circle").attr("r",function(e){return L.node.getSize(e)}).attr("class",function(e){return L.node.getCSSClass(e,"circle")}).attr("fill",function(e){return L.node.getColor(e,"circle","fill")}).attr("stroke",function(e){return L.node.getColor(e,"circle","stroke")})},T.updateMiddlegroundElementsImage=function(e){e.append("circle").attr("r",function(e){return L.node.getSize(e)}).attr("class",function(e){return L.node.getCSSClass(e,"image-background-circle")}),e.append("image").attr("class",function(e){return L.node.getCSSClass(e,"image")}).attr("width",function(e){return L.node.getImageWidth(e)}).attr("height",function(e){return L.node.getImageHeight(e)}).attr("transform",function(e){return"translate("+-L.node.getImageWidth(e)/2+","+-L.node.getImageHeight(e)/2+")"}).attr("xlink:href",function(e){return L.node.getImagePath(e)})},T.updateMiddlegroundElementsSymbol=function(e){e.append("circle").attr("r",function(e){return L.node.getSize(e)}).attr("class",function(e){return L.node.getCSSClass(e,"symbol-background-circle")}).attr("fill",function(e){return L.node.getColor(e,"circle","fill")}).attr("stroke",function(e){return L.node.getColor(e,"circle","stroke")}),e.append("use").attr("class",function(e){return L.node.getCSSClass(e,"symbol")}).attr("width",function(e){return L.node.getImageWidth(e)}).attr("height",function(e){return L.node.getImageHeight(e)}).attr("transform",function(e){return"translate("+-L.node.getImageWidth(e)/2+","+-L.node.getImageHeight(e)/2+")"}).attr("xlink:href",function(e){return L.node.getImagePath(e)}).attr("fill",function(e){return L.node.getColor(e,"circle","fill")}).attr("stroke",function(e){return L.node.getColor(e,"circle","stroke")})},T.updateMiddlegroundElementsSVG=function(e){var t=e.append("g");t.append("circle").attr("r",function(e){return L.node.getSize(e)}).attr("class","ppt-svg-node-background");e=t.selectAll("path").data(function(e){return L.node.getSVGPaths(e)});e.exit().remove(),e.enter().append("path"),t.selectAll("path").attr("class",function(e){var t=s.select(this.parentNode).datum();return L.node.getCSSClass(t,"path")}).each(function(e,t){for(var n in e)e.hasOwnProperty(n)&&s.select(this).attr(n,e[n])})},T.updateMiddlegroundElementsDisplayedText=function(e){e=e.filter(function(e){return L.node.isTextDisplayed(e)});(b.USE_FIT_TEXT?N:R).render(e)},T.updateForegroundElements=function(){var e=b.svg.select("#"+T.gID).selectAll(".ppt-gnode").selectAll(".ppt-g-node-foreground").selectAll(".ppt-node-foreground-g-arrows");e.classed("active",function(e){return e.valueExpanded&&e.data&&e.data.length>T.PAGE_SIZE}),e.selectAll(".ppt-larrow").classed("enabled",function(e){return 1<e.page}),e.selectAll(".ppt-rarrow").classed("enabled",function(e){if(e.data){var t=e.data.length;return e.page*T.PAGE_SIZE<t}return!1});e=b.svg.select("#"+T.gID).selectAll(".ppt-gnode").selectAll(".ppt-g-node-foreground");e.selectAll(".ppt-count-box").filter(function(e){return e.type!==T.NodeTypes.CHOOSE}).classed("root",!0),e.selectAll(".ppt-count-box").filter(function(e){return e.type===T.NodeTypes.CHOOSE}).classed("value",!0),e.selectAll(".ppt-count-box").classed("disabled",function(e){return 0===e.count}),b.DISABLE_COUNT||e.selectAll(".ppt-count-text").text(function(e){return null!==e.count?e.count:"..."}).classed("disabled",function(e){return 0===e.count}),b.svg.select("#"+T.gID).selectAll(".ppt-gnode").selectAll(".ppt-g-node-foreground").filter(function(e){return!0===e.isNegative}).selectAll(".ppt-g-node-ban").attr("transform",function(e){return"translate("+-L.node.getSize(e)+","+-L.node.getSize(e)+") scale("+2*L.node.getSize(e)/100+")"}).attr("stroke-width",function(e){return 2/(2*L.node.getSize(e)/100)+"px"}),b.svg.select("#"+T.gID).selectAll(".ppt-gnode").selectAll(".ppt-g-node-foreground").selectAll(".ppt-g-node-ban").classed("active",function(e){return!0===e.isNegative})},T.segmentClick=function(e){s.event.preventDefault();var t=s.select(this.parentNode.parentNode).datum();b.ignoreCount=!0,b.addRelationshipData(t,e,function(t){b.notifyListeners(b.Events.GRAPH_NODE_RELATION_ADD,[v.links.filter(function(e){return e.target===t})]),b.ignoreCount=!1,b.hasGraphChanged=!0,c()})},T.mouseOverNode=function(){s.event.preventDefault();var t=s.select(this).data()[0];I.isActive&&(I.queryConstraintSpanElements.filter(function(e){return e.ref===t}).classed("hover",!0),I.querySpanElements.filter(function(e){return e.ref===t}).classed("hover",!0)),x.isActive&&x.querySpanElements.filter(function(e){return e.node===t}).classed("hover",!0)},T.mouseOutNode=function(){s.event.preventDefault();var t=s.select(this).data()[0];I.isActive&&(I.queryConstraintSpanElements.filter(function(e){return e.ref===t}).classed("hover",!1),I.querySpanElements.filter(function(e){return e.ref===t}).classed("hover",!1)),x.isActive&&x.querySpanElements.filter(function(e){return e.node===t}).classed("hover",!1)},T.nodeClick=function(){if(!s.event.defaultPrevented){var e=s.select(this).data()[0];if(u.debug("nodeClick ("+e.label+")"),e.type===T.NodeTypes.VALUE)T.valueNodeClick(e);else if(e.type===T.NodeTypes.CHOOSE||e.type===T.NodeTypes.ROOT)if(s.event.ctrlKey){if(e.type===T.NodeTypes.CHOOSE){if(e.isNegative=!e.hasOwnProperty("isNegative")||!e.isNegative,T.collapseAllNode(),!(e.hasOwnProperty("value")&&0<e.value.length)&&e.isNegative){for(var t=v.links.length-1;0<=t;t--)v.links[t].source===e&&T.removeNode(v.links[t].target);e.count=0}p.hasChanged=!0,b.hasGraphChanged=!0,c()}}else e.valueExpanded?T.collapseNode(e):T.chooseNodeClick(e)}},T.collapseNode=function(t){if(t.valueExpanded){u.debug("collapseNode ("+t.label+")"),b.notifyListeners(b.Events.GRAPH_NODE_VALUE_COLLAPSE,[t]);var e=v.links.filter(function(e){return e.source===t&&e.type===b.link.LinkTypes.VALUE});e.forEach(function(e){v.nodes.splice(v.nodes.indexOf(e.target),1)});for(var n=v.links.length-1;0<=n;n--)0<=e.indexOf(v.links[n])&&v.links.splice(n,1);t.type!==T.NodeTypes.ROOT&&(t.fixed=!1,t.fx=null,t.fy=null),t.parent&&t.parent.type!==T.NodeTypes.ROOT&&(t.parent.fixed=!1,t.parent.fx=null,t.parent.fy=null),t.valueExpanded=!1,c()}else u.debug("collapseNode called on an unexpanded node")},T.collapseAllNode=function(){v.nodes.forEach(function(e){e.type!==T.NodeTypes.CHOOSE&&e.type!==T.NodeTypes.ROOT||!e.valueExpanded||T.collapseNode(e)})},T.valueNodeClick=function(e){u.debug("valueNodeClick ("+e.label+")"),b.notifyListeners(b.Events.GRAPH_NODE_ADD_VALUE,[e]),void 0===e.parent.value&&(e.parent.value=[]),e.parent.value.push(e),p.hasChanged=!0,b.hasGraphChanged=!0,T.collapseNode(e.parent)},T.chooseNodeClick=function(a){var e;u.debug("chooseNodeClick ("+a.label+") with waiting state set to "+T.chooseWaiting),T.chooseWaiting||a.immutable||0===a.count||(T.collapseAllNode(),T.chooseWaiting=!0,void 0!==a.data&&a.isAutoLoadValue?(a.page=1,T.expandNode(a),T.chooseWaiting=!1):(u.info("Values ("+a.label+") ==>"),e=m.generateNodeValueQuery(a),d.run({statements:[{statement:e.statement,parameters:e.parameters}]}).then(function(e){u.info("<== Values ("+a.label+")");var e=d.toObject(e),r=L.node.getConstraintAttribute(a.label);a.data=e[0].filter(function(t){var n=!0;return a.hasOwnProperty("value")&&0<a.value.length&&a.value.forEach(function(e){e.attributes[r]===t[r]&&(n=!1)}),n}),a.page=1,T.expandNode(a),T.chooseWaiting=!1}).catch(function(e){T.chooseWaiting=!1,u.error(e)})))},T.addExpandedValue=function(e,t){for(var n=!1,r=v.nodes.length-1;0<=r;r--)if(v.nodes[r].valueExpanded){for(var a=v.nodes[r].data.length-1;0<=a;a--)v.nodes[r].data[a][e]===t&&(n=!0,v.nodes[r].hasOwnProperty("value")||(v.nodes[r].value=[]),v.nodes[r].value.push({attributes:v.nodes[r].data[a]}),v.nodes[r].data.splice(a,1));T.collapseNode(v.nodes[r]),T.expandNode(v.nodes[r])}n&&(p.hasChanged=!0,b.hasGraphChanged=!0,c())},T.getContainingValue=function(n){var r=[],e=v.links,t=v.nodes;return 0<t.length&&(void 0!==(t=t[0]).value&&0<t.value.length&&(void 0!==n&&n!==t.label||r.push(t)),e.forEach(function(e){var t=e.target;e.type===b.link.LinkTypes.RELATION&&void 0!==t.value&&0<t.value.length&&(void 0!==n&&n!==t.label||r.push(t))})),r},T.addValueForLabel=function(e,t){for(var n,r,a=!1,o=v.nodes.length-1;0<=o;o--)v.nodes[o].type===T.NodeTypes.CHOOSE&&v.nodes[o].label===e&&(v.nodes[o].hasOwnProperty("value")||(v.nodes[o].value=[]),n=!1,r=L.node.getConstraintAttribute(e),v.nodes[o].value.forEach(function(e){e.attributes.hasOwnProperty(r)&&e.attributes[r]===t.attributes[r]&&(n=!0)}),n||(v.nodes[o].value.push(t),a=!0));return a},T.addValue=function(e,t){for(var n=!1,r=0;r<v.nodes.length;r++){var a,o=v.nodes[r];0<=e.indexOf(o.id)&&(o.hasOwnProperty("value")||(o.value=[]),a=L.node.getReturnAttributes(o.label)[0],o.data.forEach(function(e){e.hasOwnProperty(a)&&e[a]===t&&(n=!0,o.value.push({attributes:e}))}))}n&&(p.hasChanged=!0,b.hasGraphChanged=!0,c())},T.removeValue=function(e,t){var n=!1;T.collapseNode(e);for(var r=e.value.length-1;0<=r;r--)e.value[r]===t&&(e.value.splice(r,1),n=!0);return n},T.removeValues=function(e){var t=!1;return T.collapseNode(e),t=void 0!==e.value&&0<e.value.length?!(e.value.length=0):t},T.getValue=function(e,t){for(var n=0;n<v.nodes.length;n++){var r=v.nodes[n];if(r.id===e)for(var a=L.node.getConstraintAttribute(r.label),o=r.value.length-1;0<=o;o--)if(r.value[o].attributes[a]===t)return r.value[o]}},T.removeExpandedValue=function(e,t){for(var n=!1,r=v.nodes.length-1;0<=r;r--)if(v.nodes[r].valueExpanded){for(var a=[],o=v.nodes[r].value.length-1;0<=o;o--)v.nodes[r].value[o].attributes[e]===t&&(n=!0,a=a.concat(v.nodes[r].value.splice(o,1)));for(var l=0;l<a.length;l++)v.nodes[r].data.push(a[l].attributes);T.collapseNode(v.nodes[r]),T.expandNode(v.nodes[r])}n&&(p.hasChanged=!0,b.hasGraphChanged=!0,c())},T.getAutoLoadValueNodes=function(){return v.nodes.filter(function(e){return e.hasOwnProperty("isAutoLoadValue")&&!0===e.isAutoLoadValue&&!(!0===e.isNegative)})},T.addRelatedValues=function(i,e,s){var a,e=T.filterExistingValues(i,e);e.length<=0||(a=[],e.forEach(function(e){var t=L.node.getConstraintAttribute(e.label),n="MATCH ";t===m.NEO4J_INTERNAL_ID?n+="(v:`"+e.label+"`) WHERE (ID(v) = $p)":n+="(v:`"+e.label+"`) WHERE (v."+t+" = $p)";var t=L.node.getReturnAttributes(e.label),r="";n+=' RETURN DISTINCT "'+e.rel+'" AS rel, "'+e.label+'" AS label, {'+t.reduce(function(e,t){return e+=r+t+":v."+t,r=", ",e},"")+"} AS value LIMIT 1",a.push({statement:n,parameters:{p:e.id},resultDataContents:["row"]})}),u.info("addRelatedValues ==>"),d.run({statements:a}).then(function(e){u.info("<== addRelatedValues");var o=d.toObject(e),l=0;o.forEach(function(e){var t,n,r,a;0<e.length&&(t=e[0].label,a=e[0].value,n=e[0].rel,r={id:v.generateId(),parent:i,attributes:a,type:T.NodeTypes.VALUE,label:t},b.ignoreCount=!0,e=i.relationships.filter(function(e){return e.label===n&&e.target===t}),a={label:n,target:t},0<e.length&&(a=e[0]),b.addRelationshipData(i,a,function(){++l===o.length&&(b.ignoreCount=!1,b.hasGraphChanged=!0,p.hasChanged=!0,c())},[r],s))})}).catch(function(e){u.error(e)}))},T.addRelatedBranch=function(e,t,n,r){var a,o;0<t.length?(a=t[0],t=t.slice(1),0<(o=e.relationships.filter(function(e){return e.label===a.type&&e.target===a.target})).length&&b.addRelationshipData(e,o[0],function(e){T.addRelatedBranch(e,t,n,r)})):T.addRelatedValues(e,n,r)},T.filterExistingValues=function(e,t){var a=[],o=v.nodes.filter(function(e){return e.parent===e&&e.hasOwnProperty("value")&&0<e.value.length});return t.forEach(function(t){var n=!1,r=L.node.getConstraintAttribute(t.label);o.forEach(function(e){e.label===t.label&&e.value.forEach(function(e){e.attributes[r]===t.id&&(n=!0)})}),n||a.push(t)}),a},T.expandNode=function(r){b.notifyListeners(b.Events.GRAPH_NODE_VALUE_EXPAND,[r]);var e=r.page*T.PAGE_SIZE,t=e-T.PAGE_SIZE,a=r.data.slice(t,e),o=b.computeParentAngle(r),l=1;a.forEach(function(e){var t=r.parent?360/(a.length+1)*l:360/a.length*l,n=r.x+100*Math.cos(t*(Math.PI/180)-o),t=r.y+100*Math.sin(t*(Math.PI/180)-o),e={id:v.generateId(),parent:r,attributes:e,type:T.NodeTypes.VALUE,label:r.label,count:e.count,x:n,y:t,internalID:e[m.NEO4J_INTERNAL_ID.queryInternalName]};v.nodes.push(e),v.links.push({id:"l"+v.generateId(),source:r,target:e,type:b.link.LinkTypes.VALUE}),l++}),r.fixed=!0,r.fx=r.x,r.fy=r.y,r.parent&&r.parent.type!==T.NodeTypes.ROOT&&(r.parent.fixed=!0,r.parent.fx=r.parent.x,r.parent.fy=r.parent.y),r.valueExpanded=!0,c()},T.loadRelationshipData=function(t,n,r){var e=L.node.getSchema(t.label);void 0!==e?e.hasOwnProperty("rel")&&0<e.rel.length?n(T.pie.startAngle(r-Math.PI).endAngle(r+Math.PI)(e.rel).map(function(e){var t={id:e.data.label+e.data.target.label,label:e.data.label,target:e.data.target.label,count:0,startAngle:e.startAngle,endAngle:e.endAngle,directionAngle:(e.startAngle+e.endAngle)/2};return!0===e.data.isReverse&&(t.isReverse=!0),t})):n([]):(e=m.generateNodeRelationQuery(t),u.info("Relations ("+t.label+") ==>"),d.run({statements:[{statement:e.statement,parameters:e.parameters}]}).then(function(e){u.info("<== Relations ("+t.label+")");e=d.toObject(e)[0].filter(function(e){return m.filterRelation(e)}),e=T.pie.startAngle(r-Math.PI).endAngle(r+Math.PI)(e).map(function(e){return{id:e.data.label+e.data.target,label:e.data.label,target:e.data.target,count:e.data.count.toString(),startAngle:e.startAngle,endAngle:e.endAngle,directionAngle:(e.startAngle+e.endAngle)/2}});n(e)}).catch(function(e){u.error(e),n([])}))},T.expandRelationships=function(e,t){var n=0;if(e.hasOwnProperty("relationships")&&0<e.relationships.length)for(var r=0;r<e.relationships.length;r++)b.addRelationshipData(e,e.relationships[r],function(){++n===e.relationships.length&&t()});else t()},T.removeNode=function(t){var n=t.hasOwnProperty("value")&&0<t.value.length;v.links.filter(function(e){return e.source===t}).forEach(function(e){e=T.removeNode(e.target);n=n||e});for(var e=v.links.length-1;0<=e;e--)v.links[e].target===t&&v.links.splice(e,1);return v.nodes.splice(v.nodes.indexOf(t),1),n},T.removeEmptyBranches=function(t){var n=t.hasOwnProperty("value")&&0<t.value.length;if(v.links.filter(function(e){return e.source===t}).forEach(function(e){e=!T.removeEmptyBranches(e.target);n=n||e}),!n){for(var e=v.links.length-1;0<=e;e--)v.links[e].target===t&&v.links.splice(e,1);v.nodes.splice(v.nodes.indexOf(t),1)}return!n},T.getTrunkNode=function(e){for(var t=0;t<v.links.length;t++){var n=v.links[t];if(n.target===e&&n.source!==b.getRootNode())return T.getTrunkNode(n.source)}return e},T.clearSelection=function(){s.event.preventDefault();var e=s.select(this).data()[0];if(T.collapseAllNode(),void 0!==e.value&&0<e.value.length&&!e.immutable){if(e.value.pop(),!0===e.isNegative&&0===e.value.length){for(var t=v.links.length-1;0<=t;t--)v.links[t].source===e&&T.removeNode(v.links[t].target);e.count=0}p.hasChanged=!0,b.hasGraphChanged=!0,c()}};var O={};O.link=l,O.node=T,O.DISABLE_RELATION=!1,O.DISABLE_COUNT=!1,O.containerId="popoto-graph",O.hasGraphChanged=!0,O.zoom=s.zoom().scaleExtent([.1,10]),O.WHEEL_ZOOM_ENABLED=!0,O.USE_DONUT_FORCE=!1,O.USE_VORONOI_LAYOUT=!1,O.USE_FIT_TEXT=!1,O.Events=Object.freeze({NODE_ROOT_ADD:"root.node.add",NODE_EXPAND_RELATIONSHIP:"node.expandRelationship",GRAPH_SAVE:"graph.save",GRAPH_RESET:"graph.reset",GRAPH_NODE_RELATION_ADD:"graph.node.relation_add",GRAPH_NODE_VALUE_EXPAND:"graph.node.value_expand",GRAPH_NODE_VALUE_COLLAPSE:"graph.node.value_collapse",GRAPH_NODE_ADD_VALUE:"graph.node.add_value",GRAPH_NODE_DATA_LOADED:"graph.node.data_loaded"}),O.listeners={},O.on=function(e,t){O.listeners.hasOwnProperty(e)||(O.listeners[e]=[]),O.listeners[e].push(t)},O.notifyListeners=function(t,n){O.listeners.hasOwnProperty(t)&&O.listeners[t].forEach(function(e){e.apply(t,n)})},O.onSave=function(e){O.on(O.Events.GRAPH_SAVE,e)},O.onReset=function(e){O.on(O.Events.GRAPH_RESET,e)},O.setDefaultGraph=function(e){e.mainLabel=e},O.createGraphArea=function(){var e=s.select("#"+O.containerId);a.render(e),O.svgTag=e.append("svg").attr("class","ppt-svg-graph").call(O.zoom.on("zoom",O.rescale)),O.svgTag.on("dblclick.zoom",null),O.WHEEL_ZOOM_ENABLED||O.svgTag.on("wheel.zoom",null).on("mousewheel.zoom",null),O.svgdefs=O.svgTag.append("defs"),O.svgdefs.append("marker").attr("id","cross").attr("refX",10).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("class","ppt-marker-cross").attr("d","M5,5 L15,15 M15,5 L5,15"),O.svgdefs.append("marker").attr("id","arrow").attr("refX",9).attr("refY",3).attr("markerWidth",10).attr("markerHeight",10).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("class","ppt-marker-arrow").attr("d","M0,0 L0,6 L9,3 z"),O.svgdefs.append("marker").attr("id","reverse-arrow").attr("refX",0).attr("refY",3).attr("markerWidth",10).attr("markerHeight",10).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("class","ppt-marker-reverse-arrow").attr("d","M0,3 L9,6 L9,0 z"),O.svgdefs.append("filter").attr("id","grayscale").append("feColorMatrix").attr("type","saturate").attr("values","0");e=O.svgdefs.append("filter").attr("id","gooey");e.append("feGaussianBlur").attr("in","SourceGraphic").attr("stdDeviation","10").attr("color-interpolation-filters","sRGB").attr("result","blur"),e.append("feColorMatrix").attr("class","blurValues").attr("in","blur").attr("mode","matrix").attr("values","1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 35 -6").attr("result","gooey"),e.append("feBlend").attr("in","SourceGraphic").attr("in2","gooey").attr("operator","atop"),O.svgdefs.append("g").attr("id","voronoi-clip-path"),O.svg=O.svgTag.append("svg:g"),O.svg.append("g").attr("id",O.link.gID),O.svg.append("g").attr("id",O.node.gID),window.addEventListener("resize",O.centerRootNode)},O.getRootNode=function(){return v.getRootNode()},O.centerRootNode=function(){v.getRootNode().fx=O.getSVGWidth()/2,v.getRootNode().fy=O.getSVGHeight()/2,c()},O.getSVGWidth=function(){return void 0===O.svg||O.svg.empty()?(u.debug("graph.svg is undefined or empty."),0):document.getElementById(O.containerId).clientWidth},O.getSVGHeight=function(){return void 0===O.svg||O.svg.empty()?(u.debug("graph.svg is undefined or empty."),0):document.getElementById(O.containerId).clientHeight},O.rescale=function(){var e=s.event.transform;isNaN(e.x)||isNaN(e.y)||isNaN(e.k)?O.svg.attr("transform",s.zoomIdentity):O.svg.attr("transform",e)},O.CHARGE=-500,O.createForceLayout=function(){O.force=s.forceSimulation().force("charge",s.forceManyBody().strength(function(e){return e.charge||O.CHARGE})).force("link",s.forceLink().id(function(e){return e.id}).distance(L.link.getDistance)),O.force.nodes(v.nodes),O.force.force("link").links(v.links),O.force.on("tick",O.tick)},O.addRootNode=function(t){var n;0<v.nodes.length&&u.warn("graph.addRootNode is called but the graph is not empty."),void 0!==L.node.getSchema(t)?O.addSchema(L.node.getSchema(t)):(n={id:v.generateId(),type:O.node.NodeTypes.ROOT,x:O.getSVGWidth()/2,y:O.getSVGHeight()/2,fx:O.getSVGWidth()/2,fy:O.getSVGHeight()/2,tx:O.getSVGWidth()/2,ty:O.getSVGHeight()/2,label:t,fixed:!0,internalLabel:O.node.generateInternalLabel(t),relationships:[],isAutoLoadValue:!0===L.node.getIsAutoLoadValue(t)},v.nodes.push(n),O.notifyListeners(O.Events.NODE_ROOT_ADD,[n]),O.node.loadRelationshipData(n,function(e){n.relationships=e,L.node.getIsAutoExpandRelations(t)?(O.ignoreCount=!0,O.node.expandRelationships(n,function(){O.ignoreCount=!1,O.hasGraphChanged=!0,i()})):(O.hasGraphChanged=!0,i())},Math.PI/2))},O.loadSchema=function(e){0<v.nodes.length&&u.warn("graph.loadSchema is called but the graph is not empty.");var t=e,n={id:v.generateId(),type:O.node.NodeTypes.ROOT,x:O.getSVGWidth()/2,y:O.getSVGHeight()/2,fx:O.getSVGWidth()/2,fy:O.getSVGHeight()/2,tx:O.getSVGWidth()/2,ty:O.getSVGHeight()/2,label:t.label,fixed:!0,internalLabel:O.node.generateInternalLabel(t.label),relationships:[],isAutoLoadValue:!0===L.node.getIsAutoLoadValue(t.label)};v.nodes.push(n),O.notifyListeners(O.Events.NODE_ROOT_ADD,[n]);var r=L.node.getSchema(e.label);if(void 0!==r&&r.hasOwnProperty("rel")&&0<r.rel.length?(e=Math.PI/2,n.relationships=O.node.pie.startAngle(e-Math.PI).endAngle(e+Math.PI)(r.rel).map(function(e){var t={id:e.data.label+e.data.target.label,label:e.data.label,target:e.data.target.label,count:0,startAngle:e.startAngle,endAngle:e.endAngle,directionAngle:(e.startAngle+e.endAngle)/2};return!0===e.data.isReverse&&(t.isReverse=!0),t})):O.node.loadRelationshipData(n,function(e){n.relationships=e,O.hasGraphChanged=!0,i()},Math.PI/2),t.hasOwnProperty("value")&&(r=[].concat(t.value),n.value=[],r.forEach(function(e){n.value.push({id:v.generateId(),parent:n,attributes:e,type:O.node.NodeTypes.VALUE,label:n.label})})),t.hasOwnProperty("rel"))for(var a=0;a<t.rel.length;a++)O.loadSchemaRelation(t.rel[a],n,a+1,t.rel.length)},O.loadSchemaRelation=function(e,t,n,r){var a=e.target,o=O.loadSchemaNode(a,t,n,r,e.label,e.hasOwnProperty("isReverse")&&!0===e.isReverse),t={id:"l"+v.generateId(),source:t,target:o,type:O.link.LinkTypes.RELATION,label:e.label,schema:e};v.links.push(t);e=L.node.getSchema(a.label);if(void 0!==e&&e.hasOwnProperty("rel")&&0<e.rel.length?(t=Math.PI/2,o.relationships=O.node.pie.startAngle(t-Math.PI).endAngle(t+Math.PI)(e.rel).map(function(e){var t={id:e.data.label+e.data.target.label,label:e.data.label,target:e.data.target.label,count:0,startAngle:e.startAngle,endAngle:e.endAngle,directionAngle:(e.startAngle+e.endAngle)/2};return!0===e.data.isReverse&&(t.isReverse=!0),t})):O.node.loadRelationshipData(o,function(e){o.relationships=e,O.hasGraphChanged=!0,i()},Math.PI/2),a.hasOwnProperty("rel"))for(var l=0;l<a.rel.length;l++)O.loadSchemaRelation(a.rel[l],o,l+1,a.rel.length)},O.loadSchemaNode=function(e,t,n,r,a,o){var l=L.node.getIsGroup(e),i=O.computeParentAngle(t),r=i?360/(r+1)*n:360/r*n,n=t.x+200*Math.cos(r*(Math.PI/180)-i),i=t.y+200*Math.sin(r*(Math.PI/180)-i),s={id:v.generateId(),parent:t,parentRel:a,type:l?O.node.NodeTypes.GROUP:O.node.NodeTypes.CHOOSE,label:e.label,fixed:!1,internalLabel:O.node.generateInternalLabel(e.label),x:n,y:i,schema:e,isAutoLoadValue:!0===L.node.getIsAutoLoadValue(e.label),relationships:[]};return!0===o&&(s.isParentRelReverse=!0),e.hasOwnProperty("isNegative")&&!0===e.isNegative&&(s.isNegative=!0,s.count=0),v.nodes.push(s),e.hasOwnProperty("value")&&(e=[].concat(e.value),s.value=[],e.forEach(function(e){s.value.push({id:v.generateId(),parent:s,attributes:e,type:O.node.NodeTypes.VALUE,label:s.label})})),s},O.addSchema=function(e){0<v.nodes.length&&u.warn("graph.addSchema is called but the graph is not empty.");var t=e,n={id:v.generateId(),type:O.node.NodeTypes.ROOT,x:O.getSVGWidth()/2,y:O.getSVGHeight()/2,fx:O.getSVGWidth()/2,fy:O.getSVGHeight()/2,tx:O.getSVGWidth()/2,ty:O.getSVGHeight()/2,label:t.label,fixed:!0,internalLabel:O.node.generateInternalLabel(t.label),relationships:[],isAutoLoadValue:!0===L.node.getIsAutoLoadValue(t.label)};v.nodes.push(n),O.notifyListeners(O.Events.NODE_ROOT_ADD,[n]),t.hasOwnProperty("rel")&&0<t.rel.length&&(e=Math.PI/2,n.relationships=O.node.pie.startAngle(e-Math.PI).endAngle(e+Math.PI)(t.rel).map(function(e){var t={id:e.data.label+e.data.target.label,label:e.data.label,target:e.data.target.label,count:0,startAngle:e.startAngle,endAngle:e.endAngle,directionAngle:(e.startAngle+e.endAngle)/2};return!0===e.data.isReverse&&(t.isReverse=!0),t}))},O.addSchemaRelation=function(e,t,n,r){var a=e.target,r=O.addSchemaNode(a,t,n,r,e.label),e={id:"l"+v.generateId(),source:t,target:r,type:O.link.LinkTypes.RELATION,label:e.label,schema:e};v.links.push(e)},O.addSchemaNode=function(e,t,n,r,a){var o=L.node.getIsGroup(e),l=e.hasOwnProperty("collapsed")&&!0===e.collapsed,i=O.computeParentAngle(t),r=i?360/(r+1)*n:360/r*n,n=t.x+200*Math.cos(r*(Math.PI/180)-i),i=t.y+200*Math.sin(r*(Math.PI/180)-i),s={id:v.generateId(),parent:t,parentRel:a,type:o?O.node.NodeTypes.GROUP:O.node.NodeTypes.CHOOSE,label:e.label,fixed:!1,internalLabel:O.node.generateInternalLabel(e.label),x:n,y:i,schema:e,isAutoLoadValue:!0===L.node.getIsAutoLoadValue(e.label),relationships:[]};if(e.hasOwnProperty("rel")&&0<e.rel.length){for(var u={},d=[],p=0;p<e.rel.length;p++){var c=e.rel[p],g=c.label+c.target.label;u.hasOwnProperty(g)||(u[g]=c,d.push(c))}s.relationships=O.node.pie(d).map(function(e){return{id:e.data.label+e.data.target.label,count:e.data.count||0,label:e.data.label,target:e.data.target.label,startAngle:e.startAngle,endAngle:e.endAngle,directionAngle:(e.startAngle+e.endAngle)/2}})}if(e.hasOwnProperty("value")&&(i=[].concat(e.value),s.value=[],i.forEach(function(e){s.value.push({id:v.generateId(),parent:s,attributes:e,type:O.node.NodeTypes.VALUE,label:s.label})})),v.nodes.push(s),!l&&e.hasOwnProperty("rel"))for(var f=0;f<e.rel.length;f++)O.addSchemaRelation(e.rel[f],s,f+1,e.rel.length);return s},O.getSchema=function(){var r={},t=v.getRootNode();r[t.id]={label:t.label},t.hasOwnProperty("value")&&(r[t.id].value=[],t.value.forEach(function(e){r[t.id].value.push(e.attributes)}));var e=v.links;return 0<e.length&&e.forEach(function(e){var t,n;e.type===O.link.LinkTypes.RELATION&&(t=e.source,n=e.target,r.hasOwnProperty(t.id)||(r[t.id]={label:t.label},t.hasOwnProperty("isNegative")&&!0===t.isNegative&&(r[t.id].isNegative=!0),t.hasOwnProperty("value")&&(r[t.id].value=[],t.value.forEach(function(e){r[t.id].value.push(e.attributes)}))),r.hasOwnProperty(n.id)||(r[n.id]={label:n.label},n.hasOwnProperty("isNegative")&&!0===n.isNegative&&(r[n.id].isNegative=!0),n.hasOwnProperty("value")&&(r[n.id].value=[],n.value.forEach(function(e){r[n.id].value.push(e.attributes)}))),r[t.id].hasOwnProperty("rel")||(r[t.id].rel=[]),e={label:e.label,target:r[n.id]},n.hasOwnProperty("isParentRelReverse")&&!0===n.isParentRelReverse&&(e.isReverse=!0),r[t.id].rel.push(e))}),r[t.id]},O.tick=function(){var e=O.svg.selectAll("#"+O.link.gID+" > g");e.selectAll(".ppt-link").attr("d",function(e){var t=e.source,n=e.target,r=O.computeParentAngle(n),a=L.node.getSize(t),o=L.node.getSize(n);!O.DISABLE_RELATION&&t.hasOwnProperty("relationships")&&0<t.relationships.length&&(a=O.node.getDonutOuterRadius(t)),!O.DISABLE_RELATION&&n.hasOwnProperty("relationships")&&0<n.relationships.length&&(o=O.node.getDonutOuterRadius(n));var l=n.x+o*Math.cos(r),i=n.y-o*Math.sin(r),e=t.x-a*Math.cos(r),o=t.y+a*Math.sin(r),a=(l+e)/2,r=(i+o)/2;return t.x<=n.x||!0===O.ignoreMirroLinkLabels?"M"+e+" "+o+"L"+a+" "+r+"L"+l+" "+i:"M"+l+" "+i+"L"+a+" "+r+"L"+e+" "+o}).attr("marker-end",function(e){if(O.link.SHOW_MARKER)if(!0===e.target.isParentRelReverse){if(e.source.x>e.target.x)return"url(#arrow)"}else if(e.source.x<=e.target.x)return"url(#arrow)";return null}).attr("marker-start",function(e){if(O.link.SHOW_MARKER)if(!0===e.target.isParentRelReverse){if(e.source.x<=e.target.x)return"url(#reverse-arrow)"}else if(e.source.x>e.target.x)return"url(#reverse-arrow)";return null}),e.selectAll(".ppt-textPath").attr("xlink:href",function(e){return"#ppt-path_"+e.id}),O.svg.selectAll("#"+O.node.gID+" > g").attr("transform",function(e){return"translate("+e.x+","+e.y+")"}),!0===O.USE_VORONOI_LAYOUT&&((e=s.select("#voronoi-clip-path").selectAll(".voroclip").data(O.recenterVoronoi(v.nodes),function(e){return e.point.id})).enter().append("clipPath").attr("id",function(e){return"voroclip-"+e.point.id}).attr("class","voroclip"),e.exit().remove(),e.selectAll("path").remove(),e.append("path").attr("id",function(e){return"pvoroclip-"+e.point.id}).attr("d",function(e){return"M"+e.join(",")+"Z"}))},O.computeParentAngle=function(e){var t,n,r,a,o=0;return e.parent&&(t=e.parent.x,n=e.parent.y,a=e.x,r=e.y,1<(a=(a=((a+(e=100/(Math.sqrt(Math.pow(t-a,2)+Math.pow(n-r,2))-100))*t)/(1+e)-a)/100)<-1?-1:a)&&(a=1),o=Math.acos(a),r<n&&(o=2*Math.PI-o)),o},O.addRelationshipData=function(e,t,n,r,a){var o={id:""+v.generateId(),parent:e,parentRel:t.label,type:O.node.NodeTypes.CHOOSE,label:t.target,fixed:!1,internalLabel:O.node.generateInternalLabel(t.target),relationships:[]};!0===t.isReverse&&(o.isParentRelReverse=!0),void 0!==r&&0<r.length&&(o.value=r),void 0!==a&&!0===a&&(o.isNegative=!0);a={id:"l"+v.generateId(),source:e,target:o,type:O.link.LinkTypes.RELATION,label:t.label};o.x=e.x+2*L.link.getDistance(a)/3*Math.cos(t.directionAngle-Math.PI/2)+10*Math.random(),o.y=e.y+2*L.link.getDistance(a)/3*Math.sin(t.directionAngle-Math.PI/2)+10*Math.random(),o.tx=e.tx+L.link.getDistance(a)*Math.cos(t.directionAngle-Math.PI/2),o.ty=e.ty+L.link.getDistance(a)*Math.sin(t.directionAngle-Math.PI/2),v.nodes.push(o),v.links.push(a),O.hasGraphChanged=!0,i(),O.node.loadRelationshipData(o,function(e){o.relationships=e,O.hasGraphChanged=!0,i(),L.node.getIsAutoExpandRelations(o.label)?O.node.expandRelationships(o,function(){n(o)}):n(o)},t.directionAngle)},O.voronoi=s.voronoi().x(function(e){return e.x}).y(function(e){return e.y}),O.recenterVoronoi=function(e){var r=[];return O.voronoi.polygons(e.map(function(e){return e.x=e.x||0,e.y=e.y||0,e})).forEach(function(t){var n;t.length&&(n=[],t.forEach(function(e){n.push([e[0]-t.data.x,e[1]-t.data.y])}),n.point=t.data,r.push(n))}),r};var b=O,S={};S.colorScale=s.scaleOrdinal(s.schemeCategory10),S.link={},S.link.Provider={},S.taxonomy={},S.taxonomy.Provider={},S.node={},S.node.Provider={},S.link.getTextValue=function(e){return S.link.Provider.hasOwnProperty("getTextValue")?S.link.Provider.getTextValue(e):S.link.DEFAULT_PROVIDER.hasOwnProperty("getTextValue")?S.link.DEFAULT_PROVIDER.getTextValue(e):void u.error("No provider defined for link getTextValue")},S.link.getColor=function(e,t,n){return S.link.Provider.hasOwnProperty("getColor")?S.link.Provider.getColor(e,t,n):S.link.DEFAULT_PROVIDER.hasOwnProperty("getColor")?S.link.DEFAULT_PROVIDER.getColor(e,t,n):void u.error("No provider defined for getColor")},S.link.getCSSClass=function(e,t){return S.link.Provider.hasOwnProperty("getCSSClass")?S.link.Provider.getCSSClass(e,t):S.link.DEFAULT_PROVIDER.hasOwnProperty("getCSSClass")?S.link.DEFAULT_PROVIDER.getCSSClass(e,t):void u.error("No provider defined for getCSSClass")},S.link.getDistance=function(e){return S.link.Provider.hasOwnProperty("getDistance")?S.link.Provider.getDistance(e):S.link.DEFAULT_PROVIDER.hasOwnProperty("getDistance")?S.link.DEFAULT_PROVIDER.getDistance(e):void u.error("No provider defined for getDistance")},S.link.getSemanticValue=function(e){return S.link.Provider.hasOwnProperty("getSemanticValue")?S.link.Provider.getSemanticValue(e):S.link.DEFAULT_PROVIDER.hasOwnProperty("getSemanticValue")?S.link.DEFAULT_PROVIDER.getSemanticValue(e):void u.error("No provider defined for getSemanticValue")},S.colorLuminance=function(e,t){(e=String(e).replace(/[^0-9a-f]/gi,"")).length<6&&(e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]),t=t||0;for(var n,r="#",a=0;a<3;a++)n=parseInt(e.substr(2*a,2),16),r+=("00"+(n=Math.round(Math.min(Math.max(0,n+n*t),255)).toString(16))).substr(n.length);return r},S.link.DEFAULT_PROVIDER={getTextValue:function(e){if(e.type===b.link.LinkTypes.VALUE)return S.node.isTextDisplayed(e.target)?"":S.node.getTextValue(e.target);var t="";return e.type===b.link.LinkTypes.SEGMENT&&(t=" "+S.node.getTextValue(e.target)),e.label+t},getDistance:function(e){return e.type===b.link.LinkTypes.VALUE?13/8*(S.node.getSize(e.source)+S.node.getSize(e.target)):2.5*(S.node.getSize(e.source)+S.node.getSize(e.target))},getColor:function(e,t,n){if(e.type===b.link.LinkTypes.VALUE)return"#525863";e=e.source.label+e.label+e.target.label,e=S.colorScale(e);return"stroke"===n?S.colorLuminance(e,-.2):e},getCSSClass:function(e,t){var n="ppt-link__"+t;return e.type===b.link.LinkTypes.VALUE?n+="--value":(t="ppt-"+e.label.replace(/[^0-9a-z\-_]/gi,""),e.type===b.link.LinkTypes.RELATION&&(n+="--relation",0===e.target.count&&(n+="--disabled"),n=n+" "+t)),n},getSemanticValue:function(e){return S.link.getTextValue(e)}},S.link.Provider=S.link.DEFAULT_PROVIDER,S.taxonomy.getTextValue=function(e){return S.taxonomy.Provider.hasOwnProperty("getTextValue")?S.taxonomy.Provider.getTextValue(e):S.taxonomy.DEFAULT_PROVIDER.hasOwnProperty("getTextValue")?S.taxonomy.DEFAULT_PROVIDER.getTextValue(e):void u.error("No provider defined for taxonomy getTextValue")},S.taxonomy.getCSSClass=function(e,t){return S.taxonomy.Provider.hasOwnProperty("getCSSClass")?S.taxonomy.Provider.getCSSClass(e,t):S.taxonomy.DEFAULT_PROVIDER.hasOwnProperty("getCSSClass")?S.taxonomy.DEFAULT_PROVIDER.getCSSClass(e,t):void u.error("No provider defined for taxonomy getCSSClass")},S.taxonomy.DEFAULT_PROVIDER={getTextValue:function(e){return e},getCSSClass:function(e,t){return"ppt-taxo__"+t+" "+e.replace(/[^0-9a-z\-_]/gi,"")}},S.taxonomy.Provider=S.taxonomy.DEFAULT_PROVIDER,S.node.DisplayTypes=Object.freeze({TEXT:0,IMAGE:1,SVG:2,SYMBOL:3}),S.node.getProvider=function(e){if(void 0!==e){if(S.node.Provider.hasOwnProperty(e))return S.node.Provider[e];for(var t in u.debug("No direct provider found for label "+e),S.node.Provider)if(S.node.Provider.hasOwnProperty(t)){var n=S.node.Provider[t];if(n.hasOwnProperty("children")&&-1<n.children.indexOf(e)){u.debug("No provider is defined for label ("+e+"), parent ("+t+") will be used");var r,a={parent:t};for(r in n)n.hasOwnProperty(r)&&"children"!==r&&"parent"!==r&&(a[r]=n[r]);return S.node.Provider[e]=a,S.node.Provider[e]}}for(var o in u.debug("No label provider defined for label ("+e+") default one will be created from provider.node.DEFAULT_PROVIDER"),S.node.Provider[e]={},S.node.DEFAULT_PROVIDER)S.node.DEFAULT_PROVIDER.hasOwnProperty(o)&&(S.node.Provider[e][o]=S.node.DEFAULT_PROVIDER[o]);return S.node.Provider[e]}u.error("Node label is undefined, no label provider can be found.")},S.node.getProperty=function(e,t){var n=S.node.getProvider(e);if(!n.hasOwnProperty(t)){for(var r=n,a=!1;r.hasOwnProperty("parent")&&!a;)(r=S.node.getProvider(r.parent)).hasOwnProperty(t)&&(n[t]=r[t],a=!0);a||(u.debug('No "'+t+'" property found for node label provider ('+e+"), default value will be used"),S.node.DEFAULT_PROVIDER.hasOwnProperty(t)?n[t]=S.node.DEFAULT_PROVIDER[t]:u.debug('No default value for "'+t+'" property found for label provider ('+e+")"))}return n[t]},S.node.getIsAutoLoadValue=function(e){return S.node.getProperty(e,"isAutoLoadValue")},S.node.getIsSearchable=function(e){return S.node.getProperty(e,"isSearchable")},S.node.getIsAutoExpandRelations=function(e){return S.node.getProperty(e,"autoExpandRelations")},S.node.getSchema=function(e){return S.node.getProperty(e,"schema")},S.node.getReturnAttributes=function(e){var t=S.node.getProvider(e),n={};if(t.hasOwnProperty("returnAttributes"))for(var r=0;r<t.returnAttributes.length;r++)t.returnAttributes[r]===m.NEO4J_INTERNAL_ID?n[m.NEO4J_INTERNAL_ID.queryInternalName]=!0:n[t.returnAttributes[r]]=!0;for(;t.hasOwnProperty("parent");)if((t=S.node.getProvider(t.parent)).hasOwnProperty("returnAttributes"))for(var a=0;a<t.returnAttributes.length;a++)t.returnAttributes[a]===m.NEO4J_INTERNAL_ID?n[m.NEO4J_INTERNAL_ID.queryInternalName]=!0:n[t.returnAttributes[a]]=!0;if(S.node.DEFAULT_PROVIDER.hasOwnProperty("returnAttributes"))for(var o=0;o<S.node.DEFAULT_PROVIDER.returnAttributes.length;o++)S.node.DEFAULT_PROVIDER.returnAttributes[o]!==m.NEO4J_INTERNAL_ID&&(n[S.node.DEFAULT_PROVIDER.returnAttributes[o]]=!0);e=S.node.getConstraintAttribute(e);e===m.NEO4J_INTERNAL_ID?n[m.NEO4J_INTERNAL_ID.queryInternalName]=!0:n[e]=!0;var l,i=[];for(l in n)n.hasOwnProperty(l)&&(l===m.NEO4J_INTERNAL_ID.queryInternalName?i.push(m.NEO4J_INTERNAL_ID):i.push(l));return i.length<=0&&i.push(m.NEO4J_INTERNAL_ID),i},S.node.getConstraintAttribute=function(e){return S.node.getProperty(e,"constraintAttribute")},S.node.getDisplayAttribute=function(e){var t,n=S.node.getProperty(e,"displayAttribute");return n=void 0===n?0<(t=S.node.getReturnAttributes(e)).length?t[0]:S.node.getConstraintAttribute(e):n},S.node.getPredefinedConstraints=function(e){return S.node.getProperty(e,"getPredefinedConstraints")()},S.node.filterResultQuery=function(e,t){return S.node.getProperty(e,"filterResultQuery")(t)},S.node.getValueOrderByAttribute=function(e){return S.node.getProperty(e,"valueOrderByAttribute")},S.node.isValueOrderAscending=function(e){return S.node.getProperty(e,"isValueOrderAscending")},S.node.getResultOrderByAttribute=function(e){return S.node.getProperty(e,"resultOrderByAttribute")},S.node.isResultOrderAscending=function(e){return S.node.getProperty(e,"isResultOrderAscending")},S.node.getTextValue=function(e,t){return S.node.getProperty(e.label,"getTextValue")(e,t)},S.node.getSemanticValue=function(e){return S.node.getProperty(e.label,"getSemanticValue")(e)},S.node.getSVGPaths=function(e){return S.node.getProperty(e.label,"getSVGPaths")(e)},S.node.isTextDisplayed=function(e){return S.node.getProperty(e.label,"getIsTextDisplayed")(e)},S.node.getSize=function(e){return S.node.getProperty(e.label,"getSize")(e)},S.node.getColor=function(e,t){return S.node.getProperty(e.label,"getColor")(e,t)},S.node.getCSSClass=function(e,t){return S.node.getProperty(e.label,"getCSSClass")(e,t)},S.node.getIsGroup=function(e){return S.node.getProperty(e.label,"getIsGroup")(e)},S.node.getNodeDisplayType=function(e){return S.node.getProperty(e.label,"getDisplayType")(e)},S.node.getImagePath=function(e){return S.node.getProperty(e.label,"getImagePath")(e)},S.node.getImageWidth=function(e){return S.node.getProperty(e.label,"getImageWidth")(e)},S.node.getImageHeight=function(e){return S.node.getProperty(e.label,"getImageHeight")(e)},S.node.filterNodeValueQuery=function(e,t){return S.node.getProperty(e.label,"filterNodeValueQuery")(e,t)},S.node.filterNodeCountQuery=function(e,t){return S.node.getProperty(e.label,"filterNodeCountQuery")(e,t)},S.node.filterNodeRelationQuery=function(e,t){return S.node.getProperty(e.label,"filterNodeRelationQuery")(e,t)},S.node.getGenerateNodeValueConstraints=function(e){return S.node.getProperty(e.label,"generateNodeValueConstraints")},S.node.getGenerateNegativeNodeValueConstraints=function(e){return S.node.getProperty(e.label,"generateNegativeNodeValueConstraints")},S.node.getDisplayResults=function(e){return S.node.getProperty(e,"displayResults")},S.node.DEFAULT_PROVIDER={isSearchable:!0,autoExpandRelations:!1,isAutoLoadValue:!1,returnAttributes:[m.NEO4J_INTERNAL_ID],valueOrderByAttribute:"count",isValueOrderAscending:!1,resultOrderByAttribute:null,isResultOrderAscending:!0,constraintAttribute:m.NEO4J_INTERNAL_ID,displayAttribute:void 0,getPredefinedConstraints:function(){return[]},filterResultQuery:function(e){return e},getDisplayType:function(e){return S.node.DisplayTypes.TEXT},getSize:function(e){return 50},getColor:function(e){if(e.type===b.node.NodeTypes.VALUE)return S.node.getColor(e.parent);var t="",e=(t=e.hasOwnProperty("parent")?e.parent.label:t)+(e.parentRel||"")+e.label;return S.colorScale(e)},getCSSClass:function(e,t){var n=e.label.replace(/[^0-9a-z\-_]/gi,""),t="ppt-node__"+t;return e.type===b.node.NodeTypes.ROOT&&(t+="--root"),e.type===b.node.NodeTypes.CHOOSE&&(t+="--choose"),e.type===b.node.NodeTypes.GROUP&&(t+="--group"),e.type===b.node.NodeTypes.VALUE&&(t+="--value"),void 0!==e.value&&0<e.value.length&&(t+="--value-selected"),0===e.count&&(t+="--disabled"),t+" "+n},getIsGroup:function(e){return!1},getIsTextDisplayed:function(e){return!0},getTextValue:function(e,t){var n,r="",a=S.node.getDisplayAttribute(e.label);return e.type===b.node.NodeTypes.VALUE?r=a===m.NEO4J_INTERNAL_ID?""+e.internalID:""+e.attributes[a]:void 0!==e.value&&0<e.value.length?a===m.NEO4J_INTERNAL_ID?(n="",e.value.forEach(function(e){r+=n+e.internalID,n=" or "})):(n="",e.value.forEach(function(e){r+=n+e.attributes[a],n=" or "})):r=e.label,r},getSemanticValue:function(e){var t,n="",r=S.node.getDisplayAttribute(e.label);return e.type===b.node.NodeTypes.VALUE?n=r===m.NEO4J_INTERNAL_ID?""+e.internalID:""+e.attributes[r]:void 0!==e.value&&0<e.value.length?r===m.NEO4J_INTERNAL_ID?(t="",e.value.forEach(function(e){n+=t+e.internalID,t=" or "})):(t="",e.value.forEach(function(e){n+=t+e.attributes[r],t=" or "})):n=e.label,n},getImagePath:function(e){return"image/node/"+e.label.toLowerCase()+"/"+e.label.toLowerCase()+".svg"},getSVGPaths:function(e){var t=S.node.getSize(e);return[{d:"M 0, 0 m -"+t+", 0 a "+t+","+t+" 0 1,0 "+2*t+",0 a "+t+","+t+" 0 1,0 -"+2*t+",0",fill:"transparent",stroke:S.node.getColor(e),"stroke-width":"2px"}]},getImageWidth:function(e){return 2*S.node.getSize(e)},getImageHeight:function(e){return 2*S.node.getSize(e)},filterNodeValueQuery:function(e,t){return t},filterNodeCountQuery:function(e,t){return t},filterNodeRelationQuery:function(e,t){return t},generateNodeValueConstraints:void 0,generateNegativeNodeValueConstraints:void 0,displayResults:function(r){var a=r.data()[0];S.node.getReturnAttributes(a.label).forEach(function(e){var t=r.append("div").attr("class","ppt-result-attribute-div"),n=e;m.NEO4J_INTERNAL_ID===e&&(n=m.NEO4J_INTERNAL_ID.queryInternalName),t.append("span").text(function(){return e===m.NEO4J_INTERNAL_ID?"internal ID:":e+":"}),void 0!==a.attributes[n]&&t.append("span").text(function(e){return e.attributes[n]})})}};var L=S,I={containerId:"popoto-query",QUERY_STARTER:"I'm looking for",CHOOSE_LABEL:"choose",createQueryArea:function(){var e="#"+I.containerId;I.queryConstraintSpanElements=s.select(e).append("p").attr("class","ppt-query-constraint-elements").selectAll(".queryConstraintSpan"),I.querySpanElements=s.select(e).append("p").attr("class","ppt-query-elements").selectAll(".querySpan")},updateQuery:function(){I.queryConstraintSpanElements=I.queryConstraintSpanElements.data([]),I.querySpanElements=I.querySpanElements.data([]),I.queryConstraintSpanElements.exit().remove(),I.querySpanElements.exit().remove(),I.queryConstraintSpanElements=I.queryConstraintSpanElements.data(I.generateConstraintData(v.links,v.nodes)),I.querySpanElements=I.querySpanElements.data(I.generateData(v.links,v.nodes)),I.queryConstraintSpanElements=I.queryConstraintSpanElements.enter().append("span").on("contextmenu",I.rightClickSpan).on("click",I.clickSpan).on("mouseover",I.mouseOverSpan).on("mouseout",I.mouseOutSpan).merge(I.queryConstraintSpanElements),I.querySpanElements=I.querySpanElements.enter().append("span").on("contextmenu",I.rightClickSpan).on("click",I.clickSpan).on("mouseover",I.mouseOverSpan).on("mouseout",I.mouseOutSpan).merge(I.querySpanElements),I.queryConstraintSpanElements.attr("id",function(e){return e.id}).attr("class",function(e){return e.isLink?"ppt-span-link":e.type===b.node.NodeTypes.ROOT?"ppt-span-root":e.type===b.node.NodeTypes.CHOOSE?void 0!==e.ref.value&&0<e.ref.value.length?"ppt-span-value":"ppt-span-choose":e.type===b.node.NodeTypes.VALUE?"ppt-span-value":e.type===b.node.NodeTypes.GROUP?"ppt-span-group":"ppt-span"}).text(function(e){return e.term+" "}),I.querySpanElements.attr("id",function(e){return e.id}).attr("class",function(e){return e.isLink?"ppt-span-link":e.type===b.node.NodeTypes.ROOT?"ppt-span-root":e.type===b.node.NodeTypes.CHOOSE?void 0!==e.ref.value&&0<e.ref.value.length?"ppt-span-value":"ppt-span-choose":e.type===b.node.NodeTypes.VALUE?"ppt-span-value":e.type===b.node.NodeTypes.GROUP?"ppt-span-group":"ppt-span"}).text(function(e){return e.term+" "})},generateConstraintData:function(e,t){var r=[],a=0;return r.push({id:a++,term:I.QUERY_STARTER}),0<t.length&&r.push({id:a++,type:t[0].type,term:L.node.getSemanticValue(t[0]),ref:t[0]}),e.forEach(function(e){var t=e.source,n=e.target;e.type===b.link.LinkTypes.RELATION&&n.type!==b.node.NodeTypes.GROUP&&void 0!==n.value&&0<n.value.length&&(t.type===b.node.NodeTypes.GROUP&&r.push({id:a++,type:t.type,term:L.node.getSemanticValue(t),ref:t}),r.push({id:a++,isLink:!0,term:L.link.getSemanticValue(e),ref:e}),n.type!==b.node.NodeTypes.GROUP&&(void 0!==n.value&&0<n.value.length?r.push({id:a++,type:n.type,term:L.node.getSemanticValue(n),ref:n}):r.push({id:a++,type:n.type,term:"<"+I.CHOOSE_LABEL+" "+L.node.getSemanticValue(n)+">",ref:n})))}),r},generateData:function(e,t){var r=[],a=[],o=0;return e.forEach(function(e){var t=e.source,n=e.target;n.type===b.node.NodeTypes.GROUP&&a.push({id:o++,type:n.type,term:L.node.getSemanticValue(n),ref:n}),e.type!==b.link.LinkTypes.RELATION||n.type===b.node.NodeTypes.GROUP||void 0!==n.value&&0!==n.value.length||(t.type===b.node.NodeTypes.GROUP&&r.push({id:o++,type:t.type,term:L.node.getSemanticValue(t),ref:t}),r.push({id:o++,isLink:!0,term:L.link.getSemanticValue(e),ref:e}),n.type!==b.node.NodeTypes.GROUP&&r.push({id:o++,type:n.type,term:"<"+I.CHOOSE_LABEL+" "+L.node.getSemanticValue(n)+">",ref:n}))}),r.concat(a)},mouseOverSpan:function(){s.select(this).classed("hover",function(e){return e.ref});var e,t=s.select(this).data()[0];t.ref&&((e=b.svg.selectAll("#"+b.link.gID+" > g").filter(function(e){return e===t.ref})).select("path").classed("ppt-link-hover",!0),e.select("text").classed("ppt-link-hover",!0),b.svg.selectAll("#"+b.node.gID+" > g").filter(function(e){return e===t.ref}).select(".ppt-g-node-background").selectAll("circle").transition().style("fill-opacity",.5),x.isActive&&x.querySpanElements.filter(function(e){return e.node===t.ref||e.link===t.ref}).classed("hover",!0))},rightClickSpan:function(){var e,t=s.select(this).data()[0];!t.isLink&&t.ref&&(e=b.svg.selectAll("#"+b.node.gID+" > g").filter(function(e){return e===t.ref})).on("contextmenu").call(e.node(),t.ref)},clickSpan:function(){var e,t=s.select(this).data()[0];!t.isLink&&t.ref&&(e=b.svg.selectAll("#"+b.node.gID+" > g").filter(function(e){return e===t.ref})).on("click").call(e.node(),t.ref)},mouseOutSpan:function(){s.select(this).classed("hover",!1);var e,t=s.select(this).data()[0];t.ref&&((e=b.svg.selectAll("#"+b.link.gID+" > g").filter(function(e){return e===t.ref})).select("path").classed("ppt-link-hover",!1),e.select("text").classed("ppt-link-hover",!1),b.svg.selectAll("#"+b.node.gID+" > g").filter(function(e){return e===t.ref}).select(".ppt-g-node-background").selectAll("circle").transition().style("fill-opacity",0),x.isActive&&x.querySpanElements.filter(function(e){return e.node===t.ref||e.link===t.ref}).classed("hover",!1))}},x={containerId:"popoto-cypher",MATCH:"MATCH",RETURN:"RETURN",WHERE:"WHERE"};x.QueryElementTypes=Object.freeze({KEYWORD:0,NODE:1,SEPARATOR:2,SOURCE:3,LINK:4,TARGET:5,RETURN:6,WHERE:7}),x.createQueryArea=function(){var e="#"+x.containerId;x.querySpanElements=s.select(e).append("p").attr("class","ppt-query-constraint-elements").selectAll(".queryConstraintSpan")},x.updateQuery=function(){x.querySpanElements=x.querySpanElements.data([]),x.querySpanElements.exit().remove(),x.querySpanElements=x.querySpanElements.data(x.generateData(v.links,v.nodes)),x.querySpanElements=x.querySpanElements.enter().append("span").attr("id",function(e){return"cypher-"+e.id}).on("mouseover",x.mouseOverSpan).on("mouseout",x.mouseOutSpan).on("contextmenu",x.rightClickSpan).on("click",x.clickSpan).merge(x.querySpanElements),x.querySpanElements.filter(function(e){return e.type===x.QueryElementTypes.KEYWORD}).attr("class","ppt-span").text(function(e){return" "+e.value+" "}),x.querySpanElements.filter(function(e){return e.type===x.QueryElementTypes.SEPARATOR}).attr("class","ppt-span").text(function(e){return e.value+" "}),x.querySpanElements.filter(function(e){return e.type===x.QueryElementTypes.NODE}).attr("class",function(e){return void 0!==e.node.value&&0<e.node.value.length?"ppt-span-root-value":"ppt-span-root"}).text(function(e){return"("+e.node.internalLabel+":`"+e.node.label+"`)"}),x.querySpanElements.filter(function(e){return e.type===x.QueryElementTypes.SOURCE}).attr("class",function(e){return e.node===v.getRootNode()?void 0!==e.node.value&&0<e.node.value.length?"ppt-span-root-value":"ppt-span-root":void 0!==e.node.value&&0<e.node.value.length?"ppt-span-value":"ppt-span-choose"}).text(function(e){e=e.node;return"("+e.internalLabel+":`"+e.label+"`)"}),x.querySpanElements.filter(function(e){return e.type===x.QueryElementTypes.LINK}).attr("class","ppt-span-link").text(function(e){return!0===e.link.target.isParentRelReverse?"<-[:`"+e.link.label+"`]-":"-[:`"+e.link.label+"`]-"+(m.USE_RELATION_DIRECTION?">":"")}),x.querySpanElements.filter(function(e){return e.type===x.QueryElementTypes.TARGET}).attr("class",function(e){return void 0!==e.node.value&&0<e.node.value.length?"ppt-span-value":"ppt-span-choose"}).text(function(e){return"("+e.node.internalLabel+":`"+e.node.label+"`)"}),x.querySpanElements.filter(function(e){return e.type===x.QueryElementTypes.WHERE}).attr("class",function(e){return e.node===v.getRootNode()?"ppt-span-root-value":"ppt-span-value"}).text(function(t){var e=t.node;if(!0===e.isNegative){if(!e.hasOwnProperty("value")||e.value.length<=0)return"(NOT ("+t.link.source.internalLabel+":`"+t.link.source.label+"`)-[:`"+t.link.label+"`]->(:`"+t.link.target.label+"`))";var n=[],r=L.node.getConstraintAttribute(e.label);return e.value.forEach(function(e){n.push("(NOT ("+t.link.source.internalLabel+":`"+t.link.source.label+"`)-[:`"+t.link.label+"`]->(:`"+t.link.target.label+"`{"+r+":"+e.attributes[r]+"}))")}),n.join(" AND ")}var a=L.node.getConstraintAttribute(e.label),o="",l="";return a===m.NEO4J_INTERNAL_ID?o+=e.internalLabel+".id":o+=e.internalLabel+"."+a,e.hasOwnProperty("value")&&1<e.value.length?o+=" IN [":o+=" = ",e.value.forEach(function(e){o+=l,l=", ",a===m.NEO4J_INTERNAL_ID?o+=e.internalID:(e=e.attributes[a],o+="boolean"==typeof e||"number"==typeof e?e:'"'+e+'"')}),1<e.value.length&&(o+="]"),"("+o+")"}),x.querySpanElements.filter(function(e){return e.type===x.QueryElementTypes.RETURN}).attr("class",function(e){return void 0!==e.node.value&&0<e.node.value.length?"ppt-span-root-value":"ppt-span-root"}).text(function(e){return e.node.internalLabel})},x.generateData=function(e){var t=[],n=0,r=v.getRootNode(),a=m.getRelevantLinks(r,r,e),e=a.filter(function(e){return!0===e.target.isNegative&&(!e.target.hasOwnProperty("value")||e.target.value.length<=0)});t.push({id:n++,type:x.QueryElementTypes.KEYWORD,value:x.MATCH}),r&&t.push({id:n++,type:x.QueryElementTypes.NODE,node:r}),0<a.length&&a.length>e.length&&t.push({id:n++,type:x.QueryElementTypes.SEPARATOR,value:","});for(var o=0;o<a.length;o++)!0===(l=a[o]).target.isNegative&&(!l.target.hasOwnProperty("value")||l.target.value.length<=0)||(t.push({id:n++,type:x.QueryElementTypes.SOURCE,node:l.source}),t.push({id:n++,type:x.QueryElementTypes.LINK,link:l}),t.push({id:n++,type:x.QueryElementTypes.TARGET,node:l.target}),o<a.length-1&&t.push({id:n++,type:x.QueryElementTypes.SEPARATOR,value:","}));(r&&void 0!==r.value&&0<r.value.length||0<a.length)&&t.push({id:n++,type:x.QueryElementTypes.KEYWORD,value:x.WHERE}),r&&void 0!==r.value&&0<r.value.length&&(t.push({id:n++,type:x.QueryElementTypes.WHERE,node:r}),0<a.length&&t.push({id:n++,type:x.QueryElementTypes.SEPARATOR,value:" AND "}));for(var l,i=!1,o=0;o<a.length;o++)!0===(l=a[o]).target.isNegative?(i&&t.push({id:n++,type:x.QueryElementTypes.SEPARATOR,value:" AND "}),t.push({id:n++,type:x.QueryElementTypes.WHERE,node:l.target,link:l}),i=!0):void 0!==l.target.value&&0<l.target.value.length&&(i&&t.push({id:n++,type:x.QueryElementTypes.SEPARATOR,value:" AND "}),t.push({id:n++,type:x.QueryElementTypes.WHERE,node:l.target}),i=!0);return t.push({id:n++,type:x.QueryElementTypes.KEYWORD,value:x.RETURN}),r&&t.push({id:n++,type:x.QueryElementTypes.RETURN,node:r}),t},x.mouseOverSpan=function(){var e,t=s.select(this).data()[0];t.node?(x.querySpanElements.filter(function(e){return e.node===t.node}).classed("hover",!0),b.svg.selectAll("#"+b.node.gID+" > g").filter(function(e){return e===t.node}).select(".ppt-g-node-background").selectAll("circle").transition().style("fill-opacity",.5),I.isActive&&(I.queryConstraintSpanElements.filter(function(e){return e.ref===t.node}).classed("hover",!0),I.querySpanElements.filter(function(e){return e.ref===t.node}).classed("hover",!0))):t.link&&(s.select(this).classed("hover",!0),(e=b.svg.selectAll("#"+b.link.gID+" > g").filter(function(e){return e===t.link})).select("path").classed("ppt-link-hover",!0),e.select("text").classed("ppt-link-hover",!0))},x.mouseOutSpan=function(){var e,t=s.select(this).data()[0];t.node?(x.querySpanElements.filter(function(e){return e.node===t.node}).classed("hover",!1),b.svg.selectAll("#"+b.node.gID+" > g").filter(function(e){return e===t.node}).select(".ppt-g-node-background").selectAll("circle").transition().style("fill-opacity",0),I.isActive&&(I.queryConstraintSpanElements.filter(function(e){return e.ref===t.node}).classed("hover",!1),I.querySpanElements.filter(function(e){return e.ref===t.node}).classed("hover",!1))):t.link&&(s.select(this).classed("hover",!1),(e=b.svg.selectAll("#"+b.link.gID+" > g").filter(function(e){return e===t.link})).select("path").classed("ppt-link-hover",!1),e.select("text").classed("ppt-link-hover",!1))},x.clickSpan=function(){var e,t=s.select(this).data()[0];t.node&&(e=b.svg.selectAll("#"+b.node.gID+" > g").filter(function(e){return e===t.node})).on("click").call(e.node(),t.node)},x.rightClickSpan=function(){var e,t=s.select(this).data()[0];t.node&&(e=b.svg.selectAll("#"+b.node.gID+" > g").filter(function(e){return e===t.node})).on("contextmenu").call(e.node(),t.node)},e.appendFittedText=A,e.cypherviewer=x,e.dataModel=v,e.graph=b,e.logger=u,e.provider=L,e.query=m,e.queryviewer=I,e.result=p,e.runner=d,e.start=function(e){var t;u.info("Popoto 3.0.2 start on "+e),b.mainLabel=e,function(){var e=s.select("#"+b.containerId),t=s.select("#"+o.containerId),n=s.select("#"+I.containerId),r=s.select("#"+x.containerId),a=s.select("#"+p.containerId);e.empty()?(u.debug("The page doesn't contain a container with ID = \""+b.containerId+'" no graph area will be generated. This ID is defined in graph.containerId property.'),b.isActive=!1):b.isActive=!0;t.empty()?(u.debug("The page doesn't contain a container with ID = \""+o.containerId+'" no taxonomy filter will be generated. This ID is defined in taxonomy.containerId property.'),o.isActive=!1):o.isActive=!0;n.empty()?(u.debug("The page doesn't contain a container with ID = \""+I.containerId+'" no query viewer will be generated. This ID is defined in queryviewer.containerId property.'),I.isActive=!1):I.isActive=!0;r.empty()?(u.debug("The page doesn't contain a container with ID = \""+x.containerId+'" no cypher query viewer will be generated. This ID is defined in cypherviewer.containerId property.'),x.isActive=!1):x.isActive=!0;a.empty()?(u.debug("The page doesn't contain a container with ID = \""+p.containerId+'" no result area will be generated. This ID is defined in result.containerId property.'),p.isActive=!1):p.isActive=!0}(),o.isActive&&o.createTaxonomyPanel(),b.isActive&&(b.createGraphArea(),b.createForceLayout(),"string"==typeof e||e instanceof String?void 0!==(t=L.node.getSchema(e))?b.addSchema(t):b.addRootNode(e):b.loadSchema(e)),I.isActive&&I.createQueryArea(),x.isActive&&x.createQueryArea(),!0===b.USE_VORONOI_LAYOUT&&b.voronoi.extent([[-popoto.graph.getSVGWidth(),-popoto.graph.getSVGWidth()],[2*popoto.graph.getSVGWidth(),2*popoto.graph.getSVGHeight()]]),c()},e.taxonomy=o,e.tools=r,e.update=c,e.updateGraph=i,e.version=t,Object.defineProperty(e,"__esModule",{value:!0})});
\No newline at end of file