Giter Site home page Giter Site logo

nhogs / popoto-examples Goto Github PK

View Code? Open in Web Editor NEW
139.0 10.0 50.0 8.34 MB

Contains a list of Popoto.js examples

License: GNU Lesser General Public License v3.0

HTML 86.64% CSS 1.79% JavaScript 3.43% Cypher 8.14%
cypher northwind taxonomy graph cypher-viewer css-customization query-viewer schema markers region

popoto-examples's Introduction

Popoto-examples

Contains a list of Popoto.js examples

Add-relation-event
Auto-complete
Change-query-root
Css-customization
Cypher-viewer
Factual
Fit-text
Graph-results
Marker
Multiple-selection
Northwind
Query-viewer
Reset-customization
Results
Save
Simple-graph
Start-from-schema
Taxonomy
US-regions

popoto-examples's People

Contributors

ciminf avatar popotojs avatar zechasault avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

popoto-examples's Issues

How to Remove Relations based on selection

Hi

If i click on Directed on person Node, it should display and when i click on Produced , Produced should be displayed and Directed should be hidden. again if i select on Produced , it should not display twice. How to achieve this.

Cannot set property 'CYPHER_URL' of undefined even given correct url

  1. line of javascript
    popoto.rest.CYPHER_URL = "http://localhost:7474/db/data/transaction/commit";
    causing error "(index):70 Uncaught TypeError: Cannot set property 'CYPHER_URL' of undefined"

  2. Here is the other error here
    popoto.min.js:2 Uncaught TypeError: i.pie is not a function
    at popoto.min.js:2
    at popoto.min.js:2
    at popoto.min.js:2
    (anonymous) @ popoto.min.js:2
    (anonymous) @ popoto.min.js:2
    (anonymous) @ popoto.min.js:2
    at
    (function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("d3"),require("jquery")):"function"==typeof define&&define.amd?define(["exports","d3","jquery"],t):t((e=e||self).popoto=e.popoto||{},e.d3,e.jQuery)})(this,function(e,i,o){"use strict";o=o&&o.hasOwnProperty("default")?o.default:o;var n="2.0.18",m={idGen:0,generateId:function(){return m.idGen++},nodes:[],links:[],getRootNode:function(){return m.nodes[0]}},p={};p.LogLevels=Object.freeze({DEBUG:0,INFO:1,WARN:2,ERROR:3,NONE:4}),p.LEVEL=p.LogLevels.NONE,p.TRACE=!1,p.log=function(e,t){if(console&&e>=p.LEVEL)switch(p.TRACE&&(t=t+"\n"+(new Error).stack),e){case p.LogLevels.DEBUG:case p.LogLevels.INFO:console.log(t);break;case p.LogLevels.WARN:console.warn(t);break;case p.LogLevels.ERROR:console.error(t)}},p.debug=function(e){p.log(p.LogLevels.DEBUG,e)},p.info=function(e){p.log(p.LogLevels.INFO,e)},p.warn=function(e){p.log(p.LogLevels.WARN,e)};var A={MAX_RESULTS_COUNT:100,VALUE_QUERY_LIMIT:100,USE_PARENT_RELATION:!(p.error=function(e){p.log(p.LogLevels.ERROR,e)}),USE_RELATION_DIRECTION:!0,RETURN_LABELS:!1,COLLECT_RELATIONS_WITH_VALUES:!1,prefilter:"",prefilterParameters:{},applyPrefilters:function(t){return t.statement=A.prefilter+t.statement,Object.keys(A.prefilterParameters).forEach(function(e){t.parameters[e]=A.prefilterParameters[e]}),t}};A.NEO4J_INTERNAL_ID=Object.freeze({queryInternalName:"NEO4JID"}),A.filterRelation=function(e){return!0},A.generateTaxonomyCountQuery=function(e){var t=b.node.getConstraintAttribute(e),n=[];return b.node.getPredefinedConstraints(e).forEach(function(e){n.push(e.replace(new RegExp("\\$identifier","g"),"n"))}),t===A.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"},A.generateNegativeQueryElements=function(){var f=[],h={};return m.nodes.filter(function(e){return!0===e.isNegative}).forEach(function(e){if(void 0!==b.node.getGenerateNegativeNodeValueConstraints(e)){var t=b.node.getGenerateNegativeNodeValueConstraints(e)(e);for(var n in f=f.concat(t.whereElements),t.parameters)t.parameters.hasOwnProperty(n)&&(h[n]=t.parameters[n])}else{var r=A.getLinksToRoot(e,m.links),a=r.length-1,o="(NOT exists(";for(o+="("+m.getRootNode().internalLabel+")";0<=a;){var l=r[a],i=l.target;if(!0===i.isParentRelReverse&&!0===A.USE_RELATION_DIRECTION?o+="<-":o+="-",o+="[:"+l.label+"]",!0!==i.isParentRelReverse&&!0===A.USE_RELATION_DIRECTION?o+="->":o+="-",i===e&&void 0!==i.value&&0<i.value.length){var s=b.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=b.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}},A.generateQueryElements=function(t,d,e,p,c){var g=[],f=[],h=[],v=[],E={};if(b.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=A.generateNodeValueConstraints(t,c);for(var r in f=f.concat(n.whereElements),n.parameters)n.parameters.hasOwnProperty(r)&&(E[r]=n.parameters[r])}var y=0;return e.forEach(function(e){var t=e.source,n=e.target,r="",a="";a=A.USE_RELATION_DIRECTION?!0===n.isParentRelReverse?(r="<-","-"):(r="-","->"):r="-";var o="r"+y++;h.push(o),b.node.getPredefinedConstraints(n.label).forEach(function(e){f.push(e.replace(new RegExp("\\$identifier","g"),n.internalLabel))}),A.COLLECT_RELATIONS_WITH_VALUES&&n===d&&v.push("COLLECT("+o+") AS incomingRels");var l="";c&&void 0!==b.node.getGenerateNodeValueConstraints(t)||(l=":"+t.label+"");var i="";if(c&&void 0!==b.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=A.generateNodeValueConstraints(n,c);for(var u in f=f.concat(s.whereElements),s.parameters)s.parameters.hasOwnProperty(u)&&(E[u]=s.parameters[u])}}),{matchElements:g,whereElements:f,relationElements:h,returnElements:v,parameters:E}},A.generateNodeValueConstraints=function(e,t){if(t&&void 0!==b.node.getGenerateNodeValueConstraints(e))return b.node.getGenerateNodeValueConstraints(e)(e);var n={},r=[];if(void 0!==e.value&&0<e.value.length){var a,o=b.node.getConstraintAttribute(e.label);if(a=o===A.NEO4J_INTERNAL_ID?e.internalLabel+"_internalID":e.internalLabel+"_"+o,1<e.value.length)n[a]=[],e.value.forEach(function(e){var t;t=o===A.NEO4J_INTERNAL_ID?e.internalID:e.attributes[o],n[a].push(t)}),o===A.NEO4J_INTERNAL_ID?r.push("ID("+e.internalLabel+") IN $"+a):r.push(e.internalLabel+"."+o+" IN $"+a);else{o===A.NEO4J_INTERNAL_ID?n[a]=e.value[0].internalID:n[a]=e.value[0].attributes[o];o===A.NEO4J_INTERNAL_ID?r.push("ID("+e.internalLabel+") = $"+a):r.push(e.internalLabel+"."+o+" = $"+a)}}return{parameters:n,whereElements:r}},A.getRelevantLinks=function(a,t,e){var o=e.slice(),l=[],n=o.filter(function(e){return e.target===t||void 0!==e.target.value&&0<e.target.value.length&&!0==!e.target.isNegative});return n.forEach(function(e){o.splice(o.indexOf(e),1)}),n.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)}}),n.concat(l)},A.getLinksToRoot=function(e,t){for(var n=[],r=e;r!==m.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},A.generateResultQuery=function(e){var t=m.getRootNode(),n=A.generateNegativeQueryElements(),r=A.generateQueryElements(t,t,A.getRelevantLinks(t,t,m.links),!0,!0),a=r.matchElements,o=r.whereElements.concat(n.whereElements),l=r.relationElements,i=[],s=[],u=r.parameters;for(var d in n.parameters)n.parameters.hasOwnProperty(d)&&(u[d]=n.parameters[d]);var p=b.node.getResultOrderByAttribute(t.label);if(null!=p){var c=[],g=b.node.isResultOrderAscending(t.label),f=[];Array.isArray(g)?f=g.map(function(e){return e?"ASC":"DESC"}):f.push(g?"ASC":"DESC"),Array.isArray(p)?c=p.map(function(e){var t=p.indexOf(e);return t<f.length?e+" "+f[t]:e+" "+f[f.length-1]}):c.push(p+" "+f[0]),s.push("ORDER BY "+c.join(", "))}if(u.limit=A.MAX_RESULTS_COUNT,s.push("LIMIT $limit"),e)i.push(t.internalLabel),l.forEach(function(e){i.push(e)});else{var h=b.node.getReturnAttributes(t.label);if(i=h.map(function(e){return e===A.NEO4J_INTERNAL_ID?"ID("+t.internalLabel+") AS "+A.NEO4J_INTERNAL_ID.queryInternalName:t.internalLabel+"."+e+" AS "+e}),!0===A.RETURN_LABELS){var v="labels("+t.internalLabel+")";h.indexOf("labels")<0&&(v+=" AS labels"),i.push(v)}}var E="MATCH "+a.join(", ")+(0<o.length?" WHERE "+o.join(" AND "):"")+" RETURN DISTINCT "+i.join(", ")+" "+s.join(" "),y=b.node.filterResultQuery(t.label,{statement:E,matchElements:a,whereElements:o,withElements:[],returnElements:i,endElements:s,parameters:u});return A.applyPrefilters(y)},A.generateNodeCountQuery=function(e){var t=A.generateNegativeQueryElements(),n=A.generateQueryElements(m.getRootNode(),e,A.getRelevantLinks(m.getRootNode(),e,m.links),!0,!0),r=n.matchElements,a=n.whereElements.concat(t.whereElements),o=[],l=n.parameters;for(var i in t.parameters)t.parameters.hasOwnProperty(i)&&(l[i]=t.parameters[i]);var s=b.node.getConstraintAttribute(e.label);s===A.NEO4J_INTERNAL_ID?o.push("count(DISTINCT ID("+e.internalLabel+")) as count"):o.push("count(DISTINCT "+e.internalLabel+"."+s+") as count");var u="MATCH "+r.join(", ")+(0<a.length?" WHERE "+a.join(" AND "):"")+" RETURN "+o.join(", "),d=b.node.filterNodeCountQuery(e,{statement:u,matchElements:r,whereElements:a,returnElements:o,endElements:[],parameters:l});return A.applyPrefilters(d)},A.generateNodeValueQuery=function(e){var t=A.generateNegativeQueryElements(),n=m.getRootNode(),r=A.generateQueryElements(n,e,A.getRelevantLinks(n,e,m.links),!0,!1),a=r.matchElements,o=r.whereElements.concat(t.whereElements),l=[],i=[],s=r.parameters;for(var u in t.parameters)t.parameters.hasOwnProperty(u)&&(s[u]=t.parameters[u]);var d=b.node.getValueOrderByAttribute(e.label);if(d){var p=b.node.isValueOrderAscending(e.label)?"ASC":"DESC";i.push("ORDER BY "+d+" "+p)}i.push("LIMIT "+A.VALUE_QUERY_LIMIT);for(var c=b.node.getReturnAttributes(e.label),g=(b.node.getConstraintAttribute(e.label),0);g<c.length;g++)c[g]===A.NEO4J_INTERNAL_ID?l.push("ID("+e.internalLabel+") AS "+A.NEO4J_INTERNAL_ID.queryInternalName):l.push(e.internalLabel+"."+c[g]+" AS "+c[g]);var f=b.node.getConstraintAttribute(n.label);f===A.NEO4J_INTERNAL_ID?l.push("count(DISTINCT ID("+n.internalLabel+")) AS count"):l.push("count(DISTINCT "+n.internalLabel+"."+f+") AS count"),A.COLLECT_RELATIONS_WITH_VALUES&&r.returnElements.forEach(function(e){l.push(e)});var h="MATCH "+a.join(", ")+(0<o.length?" WHERE "+o.join(" AND "):"")+" RETURN "+l.join(", ")+" "+i.join(" "),v=b.node.filterNodeValueQuery(e,{statement:h,matchElements:a,whereElements:o,returnElements:l,endElements:i,parameters:s});return A.applyPrefilters(v)};var c={CYPHER_URL:"http://localhost:7474/db/data/transaction/commit",WITH_CREDENTIALS:!(A.generateNodeRelationQuery=function(e){var t=A.getLinksToRoot(e,m.links),n=A.generateQueryElements(m.getRootNode(),e,t,!1,!1),r=n.matchElements,a=n.whereElements,o=[],l=[],i=n.parameters,s=A.USE_RELATION_DIRECTION?"->":"-";r.push("("+e.internalLabel+":"+e.label+")-[r]"+s+"(x)"),o.push("type(r) AS label"),A.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");var u="MATCH "+r.join(", ")+(0<a.length?" WHERE "+a.join(" AND "):"")+" RETURN "+o.join(", ")+" "+l.join(" "),d=b.node.filterNodeRelationQuery(e,{statement:u,matchElements:r,whereElements:a,returnElements:o,endElements:l,parameters:i});return A.applyPrefilters(d)}),post:function(e,t){var n=JSON.stringify(e);p.info("REST POST:"+n);var r={type:"POST",beforeSend:function(e){c.AUTHORIZATION&&e.setRequestHeader("Authorization",c.AUTHORIZATION)},contentType:"application/json"};void 0!==e&&(r.data=n),!0===c.WITH_CREDENTIALS&&(r.xhrFields={withCredentials:!0});var a=c.CYPHER_URL;return void 0!==t&&(a=t),o.ajax(a,r)}};c.response={parse:function(e){p.debug(JSON.stringify(e));var t=[];return void 0!==e&&e.hasOwnProperty("results")&&0<e.results.length&&!(e.hasOwnProperty("errors")&&0<e.errors.length)&&(t=e.results.map(function(e){for(var t=[],n=0;n<e.data.length;n++){for(var r={},a=0;a<e.columns.length;a++)r[e.columns[a]]=e.data[n].row[a];t.push(r)}return t})),p.info(JSON.stringify(t)),t}};var g={};function f(){d();var e=m.getRootNode();e&&void 0!==e.label&&(L.isActive&&L.updateQuery(),S.isActive&&S.updateQuery(),(g.isActive||0<g.resultListeners.length||0<g.resultCountListeners.length||0<g.graphResultListeners.length)&&g.updateResults())}function d(){O.isActive&&(O.link.updateLinks(),O.node.updateNodes(),O.force.nodes(m.nodes),O.force.force("link").links(m.links),O.force.alpha(1).restart())}g.containerId="popoto-results",g.hasChanged=!0,g.resultCountListeners=[],g.resultListeners=[],g.graphResultListeners=[],g.RESULTS_PAGE_SIZE=10,g.TOTAL_COUNT=!1,g.onTotalResultCount=function(e){g.resultCountListeners.push(e)},g.onResultReceived=function(e){g.resultListeners.push(e)},g.onGraphResultReceived=function(e){g.graphResultListeners.push(e)},g.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=[];for(var o in t)t.hasOwnProperty(o)&&r.push(t[o]);for(var l in n)n.hasOwnProperty(l)&&a.push(n[l]);return{nodes:r,edges:a}},g.updateResults=function(){if(g.hasChanged){var l={},e=0;void 0!==g.resultsXhr&&g.resultsXhr.abort();var t=A.generateResultQuery(),n={statements:[{statement:(g.lastGeneratedQuery=t).statement,parameters:t.parameters,resultDataContents:["row"]}]};if(l.results=e++,0<g.graphResultListeners.length){var r=A.generateResultQuery(!0);g.lastGeneratedQuery=r,n.statements.push({statement:r.statement,parameters:r.parameters,resultDataContents:["row","graph"]}),l.graph=e++}if(!0===g.TOTAL_COUNT&&0<g.resultCountListeners.length){var a=A.generateNodeCountQuery(m.getRootNode());n.statements.push({statement:a.statement,parameters:a.parameters}),l.total=e++}p.info("Results ==>"),g.resultsXhr=c.post(n).done(function(e){p.info("<== Results");var t=c.response.parse(e),n=t[l.results].map(function(e,t){return{resultIndex:t,label:m.getRootNode().label,attributes:e}});if(g.lastResults=n,l.hasOwnProperty("total")){var r=t[l.total][0].count;g.resultCountListeners.forEach(function(e){e(r)})}if(g.resultListeners.forEach(function(e){e(n)}),0<g.graphResultListeners.length){var a=g.parseGraphResultData(e);g.graphResultListeners.forEach(function(e){e(a)})}if(g.isActive){var o=i.select("#"+g.containerId).selectAll(".ppt-result").data([]);o.exit().remove(),(o=i.select("#"+g.containerId).selectAll(".ppt-result").data(n.slice(0,g.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){b.node.getDisplayResults(e.label)(i.select(this))})}g.hasChanged=!1}).fail(function(e,t,n){"abort"!==t?(p.error(t+': error while accessing Neo4j server on URL:"'+c.CYPHER_URL+'" defined in "rest.CYPHER_URL" property: '+n),g.resultListeners.forEach(function(e){e([])})):p.info("<=X= Results - Aborted!")})}},g.updateResultsCount=function(){0<g.resultCountListeners.length&&g.resultCountListeners.forEach(function(e){e(m.getRootNode().count)})},g.generatePreQuery=function(){var t={ids:[]};return g.lastResults.forEach(function(e){t.ids.push(e.attributes.id)}),{query:"MATCH (d) WHERE d.id IN $ids WITH d",param:t}};var l={containerId:"popoto-taxonomy",createTaxonomyPanel:function(){var e=i.select("#"+l.containerId).append("ul").attr("class","ppt-taxo-ul"),t=l.generateTaxonomiesData(),n=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});n.append("span").attr("class",function(e){return"ppt-icon "+b.taxonomy.getCSSClass(e.label,"span-icon")}).html("&nbsp;"),n.append("span").attr("class","ppt-label").text(function(e){return b.taxonomy.getTextValue(e.label)}),n.append("span").attr("class","ppt-count"),n.on("click",l.onClick),l.addTaxonomyChildren(n);var r=[];t.forEach(function(e){r.push(e),e.children&&l.flattenChildren(e,r)}),O.DISABLE_COUNT||l.updateCount(r)},flattenChildren:function(e,t){e.children.forEach(function(e){t.push(e),e.children&&t.concat(l.flattenChildren(e,t))})},updateCount:function(e){var a,t=[];e.forEach(function(e){t.push({statement:A.generateTaxonomyCountQuery(e.label)})}),a=e,p.info("Count taxonomies ==>"),c.post({statements:t}).done(function(e){p.info("<== Count taxonomies");for(var t=c.response.parse(e),n=0;n<a.length;n++){var r=t[n][0].count;i.select("#"+a[n].id).select(".ppt-count").text(" ("+r+")")}}).fail(function(e,t,n){p.error(t+': error while accessing Neo4j server on URL:"'+c.CYPHER_URL+'" defined in "rest.CYPHER_URL" property: '+n),i.select("#popoto-taxonomy").selectAll(".ppt-count").text(" (0)")})},addTaxonomyChildren:function(e){e.each(function(e){var t=i.select(this),n=e.children;if(e.children){var r=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});r.append("span").attr("class",function(e){return"ppt-icon "+b.taxonomy.getCSSClass(e.label,"span-icon")}).html("&nbsp;"),r.append("span").attr("class","ppt-label").text(function(e){return b.taxonomy.getTextValue(e.label)}),r.append("span").attr("class","ppt-count"),r.on("click",l.onClick),l.addTaxonomyChildren(r)}})},onClick:function(){i.event.stopPropagation();var e=this.attributes.value.value;m.nodes.length=0,m.links.length=0,O.node.internalLabels={},f(),O.mainLabel=e,void 0!==b.node.getSchema(e)?O.addSchema(b.node.getSchema(e)):O.addRootNode(e),O.hasGraphChanged=!0,g.hasChanged=!0,O.ignoreCount=!1,f(),r.center()},generateTaxonomiesData:function(){var t=0,e=[];for(var n in b.node.Provider)b.node.Provider.hasOwnProperty(n)&&b.node.getProperty(n,"isSearchable")&&!b.node.Provider[n].parent&&e.push({label:n,id:"popoto-lbl-"+t++});return e.forEach(function(e){b.node.getProvider(e.label).hasOwnProperty("children")&&(t=l.addChildrenData(e,t))}),e},addChildrenData:function(r,a){return r.children=[],b.node.getProvider(r.label).children.forEach(function(e){var t=b.node.getProvider(e),n={label:e,id:"popoto-lbl-"+a++};t.hasOwnProperty("children")&&(a=l.addChildrenData(n,a)),b.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(){m.nodes.length=0,m.links.length=0,O.node.internalLabels={},"string"==typeof O.mainLabel||O.mainLabel instanceof String?void 0!==b.node.getSchema(O.mainLabel)?O.addSchema(b.node.getSchema(O.mainLabel)):O.addRootNode(O.mainLabel):O.loadSchema(O.mainLabel),O.hasGraphChanged=!0,g.hasChanged=!0,f(),r.center()},center:function(){O.svgTag.transition().call(O.zoom.transform,i.zoomIdentity)},toggleTaxonomy:function(){var e=i.select("#"+l.containerId);e.filter(".disabled").empty()?e.classed("disabled",!0):e.classed("disabled",!1),O.centerRootNode()},toggleFitText:function(){O.USE_FIT_TEXT=!O.USE_FIT_TEXT,O.node.updateNodes()},toggleViewRelation:function(){O.DISABLE_RELATION=!O.DISABLE_RELATION,i.selectAll(".ppt-g-node-background").classed("hide",O.DISABLE_RELATION),O.tick()},toggleFullScreen:function(){var e=document.getElementById(O.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){var t=e.append("div").attr("class","ppt-toolbar");r.TOGGLE_VIEW_RELATION&&t.append("span").attr("id","popoto-toggle-relation").attr("class","ppt-icon ppt-menu relation").attr("title",t.TOOL_RELATION).on("click",function(){r.toggleViewRelation()}),r.RESET_GRAPH&&t.append("span").attr("id","popoto-reset-menu").attr("class","ppt-icon ppt-menu reset").attr("title",t.TOOL_RESET).on("click",function(){O.notifyListeners(O.Events.GRAPH_RESET,[]),r.reset()}),r.TOGGLE_TAXONOMY&&t.append("span").attr("id","popoto-taxonomy-menu").attr("class","ppt-icon ppt-menu taxonomy").attr("title",t.TOOL_TAXONOMY).on("click",r.toggleTaxonomy),r.CENTER_GRAPH&&t.append("span").attr("id","popoto-center-menu").attr("class","ppt-icon ppt-menu center").attr("title",t.TOOL_CENTER).on("click",r.center),r.TOGGLE_FULL_SCREEN&&t.append("span").attr("id","popoto-fullscreen-menu").attr("class","ppt-icon ppt-menu fullscreen").attr("title",t.TOOL_FULL_SCREEN).on("click",r.toggleFullScreen),r.SAVE_GRAPH&&t.append("span").attr("id","popoto-save-menu").attr("class","ppt-icon ppt-menu save").attr("title",t.TOOL_SAVE).on("click",function(){O.notifyListeners(O.Events.GRAPH_SAVE,[O.getSchema()])}),r.TOGGLE_FIT_TEXT&&t.append("span").attr("id","popoto-fit-text-menu").attr("class","ppt-icon ppt-menu fit-text").attr("title",t.TOOL_FIT_TEXT).on("click",r.toggleFitText)}},s={};function u(e){return"function"==typeof e?e:function(){return e}}s.LinkTypes=Object.freeze({RELATION:0,VALUE:1,SEGMENT:2}),s.TEXT_DY=-4,s.SHOW_MARKER=!1,s.gID="popoto-glinks",s.updateLinks=function(){var e=s.updateData();s.removeElements(e.exit()),s.addNewElements(e.enter()),s.updateElements()},s.updateData=function(){return O.svg.select("#"+s.gID).selectAll(".ppt-glink").data(m.links,function(e){return e.id})},s.removeElements=function(e){e.remove()},s.addNewElements=function(e){var t=e.append("g").attr("class","ppt-glink").on("click",s.clickLink).on("mouseover",s.mouseOverLink).on("mouseout",s.mouseOutLink);t.append("path").attr("class","ppt-link"),t.append("text").attr("text-anchor","middle").attr("dy",s.TEXT_DY).append("textPath").attr("class","ppt-textPath").attr("startOffset","50%")},s.updateElements=function(){var e=O.svg.select("#"+s.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 b.link.getColor(e,"path","stroke")}).attr("class",function(e){return"ppt-link "+b.link.getCSSClass(e,"path")}),e.selectAll("text").attr("id",function(e){return"ppt-text_"+e.id}).attr("class",function(e){return b.link.getCSSClass(e,"text")}).attr("fill",function(e){return b.link.getColor(e,"text","fill")}).selectAll(".ppt-textPath").attr("id",function(e){return"ppt-textpath_"+e.id}).attr("class",function(e){return"ppt-textpath "+b.link.getCSSClass(e,"text-path")}).attr("xlink:href",function(e){return"#ppt-path_"+e.id}).text(function(e){return b.link.getTextValue(e)})},s.mouseOverLink=function(){i.select(this).select("path").attr("class",function(e){return"ppt-link "+b.link.getCSSClass(e,"path--hover")}),i.select(this).select("text").attr("class",function(e){return b.link.getCSSClass(e,"text--hover")});var t=i.select(this).data()[0];L.isActive&&(L.queryConstraintSpanElements.filter(function(e){return e.ref===t}).classed("hover",!0),L.querySpanElements.filter(function(e){return e.ref===t}).classed("hover",!0)),S.isActive&&S.querySpanElements.filter(function(e){return e.link===t}).classed("hover",!0)},s.mouseOutLink=function(){i.select(this).select("path").attr("class",function(e){return"ppt-link "+b.link.getCSSClass(e,"path")}),i.select(this).select("text").attr("class",function(e){return b.link.getCSSClass(e,"text")});var t=i.select(this).data()[0];L.isActive&&(L.queryConstraintSpanElements.filter(function(e){return e.ref===t}).classed("hover",!1),L.querySpanElements.filter(function(e){return e.ref===t}).classed("hover",!1)),S.isActive&&S.querySpanElements.filter(function(e){return e.link===t}).classed("hover",!1)},s.clickLink=function(){var e=i.select(this).data()[0];if(e.type!==s.LinkTypes.VALUE){O.node.collapseAllNode();var t=O.node.removeNode(e.target);O.hasGraphChanged=!0,g.hasChanged=t,f()}};var t=document.createElement("canvas").getContext("2d"),h=12;function v(e){return t.measureText(e).width}function E(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=v(i);(r+s)/2<t?(n.width=r=s,n.text=i):(n={width:r=v(e[o]),text:e[o]},a.push(n))}return a}(function(e){var t=e.split(/\s+/g);return t[t.length-1]||t.pop(),t[0]||t.shift(),t}(t),function(e){return Math.sqrt(v(e.trim())*h)}(t))}function y(e,t,n,r){var a=u(n),o=u(t);(function(e,n){e.each(function(e){var t=i.select(this).selectAll(".fitted-text").data([{}]);t.enter().append("text").merge(t).attr("class","fitted-text"+(void 0!==n?" "+n(e):"")).attr("style","text-anchor: middle; font: 10px sans-serif")})})(e,r?u(r):r);var l=e.select(".fitted-text");(function(e,r){e.each(function(e){var n=E(r(e)),t=i.select(this).selectAll("tspan").data(n);t.exit().remove(),t.enter().append("tspan").merge(t).attr("x",0).attr("y",function(e,t){return(t-n.length/2+.8)*h}).text(function(e){return e.text})})})(l,o),l.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}(E(o(e))),n=1;return 0!==t&&t&&(n=a(e)/t),"translate(0,0) scale("+n+")"})}var N={getNodeBoundingBox:function(e){return e.getBBox()},render:function(e){var t=e.append("rect").attr("fill",function(e){return b.node.getColor(e,"back-text","fill")}).attr("class",function(e){return b.node.getCSSClass(e,"back-text")});y(e,function(e){return b.node.getTextValue(e)},function(e){return b.node.getSize(e)},function(e){return b.node.getCSSClass(e,"text")}),t.attr("x",function(e){return N.getNodeBoundingBox(i.select(this.parentNode).select("text").node()).x-3}).attr("y",function(e){return N.getNodeBoundingBox(i.select(this.parentNode).select("text").node()).y}).attr("rx","5").attr("ry","5").attr("width",function(e){return N.getNodeBoundingBox(i.select(this.parentNode).select("text").node()).width+6}).attr("height",function(e){return N.getNodeBoundingBox(i.select(this.parentNode).select("text").node()).height}).attr("transform",function(e){return i.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 b.node.getColor(e,"back-text","fill")}).attr("class",function(e){return b.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 b.node.getCSSClass(e,"text")}).on("mouseover",function(e){i.select(this.parentNode).attr("clip-path",null)}).on("mouseout",function(e){i.select(this.parentNode).attr("clip-path",function(e){return"url(#node-view"+e.id+")"})}).text(function(e){return b.node.getTextValue(e)}),t.attr("x",function(e){return R.getNodeBoundingBox(i.select(this.parentNode).select("text").node()).x-3}).attr("y",function(e){return R.getNodeBoundingBox(i.select(this.parentNode).select("text").node()).y}).attr("rx","5").attr("ry","5").attr("width",function(e){return R.getNodeBoundingBox(i.select(this.parentNode).select("text").node()).width+6}).attr("height",function(e){return R.getNodeBoundingBox(i.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 b.node.getSize(e)+T.DONUTS_MARGIN},getDonutOuterRadius:function(e){return b.node.getSize(e)+T.DONUTS_MARGIN+T.DONUT_WIDTH}};T.pie=i.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){var t=e?e.toLowerCase().replace(/ /g,""):"n";return t in T.internalLabels?(T.internalLabels[t]=T.internalLabels[t]+1,t+T.internalLabels[t]):(T.internalLabels[t]=0,t)},T.updateNodes=function(){var e=T.updateData();T.removeElements(e.exit()),T.addNewElements(e.enter()),T.updateElements()},T.updateData=function(){var e=O.svg.select("#"+T.gID).selectAll(".ppt-gnode").data(m.nodes,function(e){return e.id});return O.hasGraphChanged&&(T.updateAutoLoadValues(),O.DISABLE_COUNT||O.ignoreCount||T.updateCount()),O.hasGraphChanged=!1,e},T.updateCount=function(){void 0!==T.updateCountXhr&&T.updateCountXhr.abort();var n=[],r=m.nodes.filter(function(e){return!(e.type===T.NodeTypes.VALUE||e.type===T.NodeTypes.GROUP||e.hasOwnProperty("isNegative")&&e.isNegative)});r.forEach(function(e){var t=A.generateNodeCountQuery(e);n.push({statement:t.statement,parameters:t.parameters})}),p.info("Count nodes ==>"),T.updateCountXhr=c.post({statements:n}).done(function(e){p.info("<== Count nodes");for(var t=c.response.parse(e),n=0;n<r.length;n++)r[n].count=t[n][0].count;0<g.resultCountListeners.length&&g.updateResultsCount(),T.updateElements(),O.link.updateElements()}).fail(function(e,t,n){"abort"!==t?(p.error(t+': error while accessing Neo4j server on URL:"'+c.CYPHER_URL+'" defined in "rest.CYPHER_URL" property: '+n),r.forEach(function(e){e.count=0}),T.updateElements(),O.link.updateElements()):p.info("<=X= Count nodes - Aborted!")})},T.updateAutoLoadValues=function(){for(var e=[],o=T.getAutoLoadValueNodes(),t=0;t<o.length;t++){var n=o[t],r=A.generateNodeValueQuery(n);e.push({statement:r.statement,parameters:r.parameters})}0<e.length&&(p.info("AutoLoadValue ==>"),c.post({statements:e}).done(function(e){p.info("<== AutoLoadValue");for(var t=c.response.parse(e),n=0;n<o.length;n++){var r=o[n],a=b.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}O.notifyListeners(O.Events.GRAPH_NODE_DATA_LOADED,[o])}).fail(function(e,t,n){p.error(t+': error while accessing Neo4j server on URL:"'+c.CYPHER_URL+'" defined in "rest.CYPHER_URL" property: '+n)}))},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){var t=e.append("g").attr("class","ppt-gnode");t.on("click",T.nodeClick).on("mouseover",T.mouseOverNode).on("mouseout",T.mouseOutNode),t.filter(function(e){return e.type!==T.NodeTypes.VALUE}).on("contextmenu",T.clearSelection),t.filter(function(e){return e.type===T.NodeTypes.VALUE}).on("contextmenu",function(){i.event.preventDefault()}),t.append("defs").append("clipPath").attr("id",function(e){return"node-view"+e.id}).append("circle").attr("cx",0).attr("cy",0),T.addBackgroundElements(t),T.addMiddlegroundElements(t),T.addForegroundElements(t)},T.addBackgroundElements=function(e){var t=e.append("g").attr("class","ppt-g-node-background").classed("hide",O.DISABLE_RELATION);t.append("g").attr("class","ppt-donut-labels"),t.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"),r=n.append("g");r.append("circle").attr("class","ppt-larrow").attr("cx","-43").attr("cy","-23").attr("r","17"),r.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"),r.on("click",function(e){i.event.stopPropagation(),1<e.page&&(e.page--,T.collapseNode(e),T.expandNode(e))});var a=n.append("g");if(a.append("circle").attr("class","ppt-rarrow").attr("cx","43").attr("cy","-23").attr("r","17"),a.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"),a.on("click",function(e){i.event.stopPropagation(),e.page*T.PAGE_SIZE<e.count&&(e.page++,T.collapseNode(e),T.expandNode(e))}),!O.DISABLE_COUNT){var o=t.filter(function(e){return e.type!==T.NodeTypes.GROUP});o.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"),o.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=O.svg.select("#"+T.gID).selectAll(".ppt-gnode");e.attr("id",function(e){return"popoto-gnode_"+e.id}),O.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 b.node.getSize(e)}),e.filter(function(e){return e.type!==T.NodeTypes.ROOT}).call(i.drag().on("start",function(e){i.event.active||O.force.alphaTarget(.3).restart();e.fx=e.x,e.fy=e.y}).on("drag",function(e){e.fx=i.event.x,e.fy=i.event.y}).on("end",function(e){i.event.active||O.force.alphaTarget(0);!1===e.fixed&&(e.fx=null,e.fy=null)})),T.updateBackgroundElements(),T.updateMiddlegroundElements(),T.updateForegroundElements()},T.updateBackgroundElements=function(){var e=O.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 e.hasOwnProperty("relationships")&&(t=e.relationships),t},function(e){return e.id}).enter().append("g").attr("class",".ppt-segment-container").on("click",T.segmentClick).on("mouseover",function(e){i.select(this).select(".ppt-text-arc").classed("hover",!0)}).on("mouseout",function(e){i.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 e.hasOwnProperty("relationships")&&(t=e.relationships),t},function(e){return e.id}).enter().append("g").attr("class",".ppt-segment-container").on("click",T.segmentClick).on("mouseover",function(e){i.select(this).select(".ppt-text-arc").classed("hover",!0)}).on("mouseout",function(e){i.select(this).select(".ppt-text-arc").classed("hover",!1)}).append("path").attr("class","ppt-hidden-arc").attr("id",function(e,t){return"arc_"+i.select(this.parentNode.parentNode).datum().id+"_"+t}).attr("d",function(e){var t=i.select(this.parentNode.parentNode).datum(),n={startAngle:e.directionAngle-(Math.PI-.1),endAngle:e.directionAngle+(Math.PI-.1)},r=i.arc().innerRadius(T.getDonutInnerRadius(t)).outerRadius(T.getDonutOuterRadius(t))(n),a=/(^.+?)L/.exec(r);return(a&&1<a.length?a[1]:/(^.+?)M/.exec(r)[1]).replace(/,/g," ")}).style("fill","none").style("stroke","none"),t.append("text").attr("text-anchor","middle").attr("class",function(e){var t=i.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=i.select(this.parentNode.parentNode).datum();return b.link.getColor({label:e.label,type:O.link.LinkTypes.SEGMENT,source:t,target:{label:e.target}},"segment","fill")}).attr("dy",O.link.TEXT_DY).append("textPath").attr("startOffset","50%").attr("xlink:href",function(e,t){return"#arc_"+i.select(this.parentNode.parentNode.parentNode).datum().id+"_"+t}).text(function(e){var t=i.select(this.parentNode.parentNode.parentNode).datum();return b.link.getTextValue({source:t,target:{label:e.target},label:e.label,type:O.link.LinkTypes.SEGMENT})}),t.append("path").attr("class",function(e){var t=i.select(this.parentNode.parentNode).datum();return t.hasOwnProperty("count")&&0===t.count?"ppt-segment disabled":"ppt-segment"}).attr("d",function(e){var t=i.select(this.parentNode.parentNode).datum();return i.arc().innerRadius(T.getDonutInnerRadius(t)).outerRadius(T.getDonutOuterRadius(t))(e)}).attr("fill",function(e){var t=i.select(this.parentNode.parentNode).datum();return b.link.getColor({label:e.label,type:O.link.LinkTypes.RELATION,source:t,target:{label:e.target}},"path","fill")}).attr("stroke",function(e){var t=i.select(this.parentNode.parentNode).datum();return b.link.getColor({label:e.label,type:O.link.LinkTypes.RELATION,source:t,target:{label:e.target}},"path","stroke")})},T.updateMiddlegroundElements=function(){var e=O.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 b.node.getNodeDisplayType(e)===b.node.DisplayTypes.TEXT})),T.updateMiddlegroundElementsImage(e.filter(function(e){return b.node.getNodeDisplayType(e)===b.node.DisplayTypes.IMAGE})),T.updateMiddlegroundElementsSymbol(e.filter(function(e){return b.node.getNodeDisplayType(e)===b.node.DisplayTypes.SYMBOL})),T.updateMiddlegroundElementsSVG(e.filter(function(e){return b.node.getNodeDisplayType(e)===b.node.DisplayTypes.SVG})),T.updateMiddlegroundElementsDisplayedText(e.filter(function(e){return b.node.isTextDisplayed(e)}))},T.updateMiddlegroundElementsTooltip=function(e){e.append("title").attr("class",function(e){return b.node.getCSSClass(e,"title")}).text(function(e){return b.node.getTextValue(e,T.NODE_TITLE_MAX_CHARS)})},T.updateMiddlegroundElementsText=function(e){e.append("circle").attr("r",function(e){return b.node.getSize(e)}).attr("class",function(e){return b.node.getCSSClass(e,"circle")}).attr("fill",function(e){return b.node.getColor(e,"circle","fill")}).attr("stroke",function(e){return b.node.getColor(e,"circle","stroke")})},T.updateMiddlegroundElementsImage=function(e){e.append("circle").attr("r",function(e){return b.node.getSize(e)}).attr("class",function(e){return b.node.getCSSClass(e,"image-background-circle")}),e.append("image").attr("class",function(e){return b.node.getCSSClass(e,"image")}).attr("width",function(e){return b.node.getImageWidth(e)}).attr("height",function(e){return b.node.getImageHeight(e)}).attr("transform",function(e){return"translate("+-b.node.getImageWidth(e)/2+","+-b.node.getImageHeight(e)/2+")"}).attr("xlink:href",function(e){return b.node.getImagePath(e)})},T.updateMiddlegroundElementsSymbol=function(e){e.append("circle").attr("r",function(e){return b.node.getSize(e)}).attr("class",function(e){return b.node.getCSSClass(e,"symbol-background-circle")}).attr("fill",function(e){return b.node.getColor(e,"circle","fill")}).attr("stroke",function(e){return b.node.getColor(e,"circle","stroke")}),e.append("use").attr("class",function(e){return b.node.getCSSClass(e,"symbol")}).attr("width",function(e){return b.node.getImageWidth(e)}).attr("height",function(e){return b.node.getImageHeight(e)}).attr("transform",function(e){return"translate("+-b.node.getImageWidth(e)/2+","+-b.node.getImageHeight(e)/2+")"}).attr("xlink:href",function(e){return b.node.getImagePath(e)}).attr("fill",function(e){return b.node.getColor(e,"circle","fill")}).attr("stroke",function(e){return b.node.getColor(e,"circle","stroke")})},T.updateMiddlegroundElementsSVG=function(e){var t=e.append("g"),n=(t.append("circle").attr("r",function(e){return b.node.getSize(e)}).attr("class","ppt-svg-node-background"),t.selectAll("path").data(function(e){return b.node.getSVGPaths(e)}));n.exit().remove(),n.enter().append("path"),t.selectAll("path").attr("class",function(e){var t=i.select(this.parentNode).datum();return b.node.getCSSClass(t,"path")}).each(function(e,t){for(var n in e)e.hasOwnProperty(n)&&i.select(this).attr(n,e[n])})},T.updateMiddlegroundElementsDisplayedText=function(e){var t=e.filter(function(e){return b.node.isTextDisplayed(e)});O.USE_FIT_TEXT?N.render(t):R.render(t)},T.updateForegroundElements=function(){var e=O.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});var t=O.svg.select("#"+T.gID).selectAll(".ppt-gnode").selectAll(".ppt-g-node-foreground");t.selectAll(".ppt-count-box").filter(function(e){return e.type!==T.NodeTypes.CHOOSE}).classed("root",!0),t.selectAll(".ppt-count-box").filter(function(e){return e.type===T.NodeTypes.CHOOSE}).classed("value",!0),t.selectAll(".ppt-count-box").classed("disabled",function(e){return 0===e.count}),O.DISABLE_COUNT||t.selectAll(".ppt-count-text").text(function(e){return null!==e.count?e.count:"..."}).classed("disabled",function(e){return 0===e.count}),O.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("+-b.node.getSize(e)+","+-b.node.getSize(e)+") scale("+2*b.node.getSize(e)/100+")"}).attr("stroke-width",function(e){return 2/(2*b.node.getSize(e)/100)+"px"}),O.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){i.event.preventDefault();var t=i.select(this.parentNode.parentNode).datum();O.ignoreCount=!0,O.addRelationshipData(t,e,function(t){O.notifyListeners(O.Events.GRAPH_NODE_RELATION_ADD,[m.links.filter(function(e){return e.target===t})]),O.ignoreCount=!1,O.hasGraphChanged=!0,f()})},T.mouseOverNode=function(){i.event.preventDefault();var t=i.select(this).data()[0];L.isActive&&(L.queryConstraintSpanElements.filter(function(e){return e.ref===t}).classed("hover",!0),L.querySpanElements.filter(function(e){return e.ref===t}).classed("hover",!0)),S.isActive&&S.querySpanElements.filter(function(e){return e.node===t}).classed("hover",!0)},T.mouseOutNode=function(){i.event.preventDefault();var t=i.select(this).data()[0];L.isActive&&(L.queryConstraintSpanElements.filter(function(e){return e.ref===t}).classed("hover",!1),L.querySpanElements.filter(function(e){return e.ref===t}).classed("hover",!1)),S.isActive&&S.querySpanElements.filter(function(e){return e.node===t}).classed("hover",!1)},T.nodeClick=function(){if(!i.event.defaultPrevented){var e=i.select(this).data()[0];if(p.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(i.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);else if(e.isNegative){for(var t=m.links.length-1;0<=t;t--)m.links[t].source===e&&T.removeNode(m.links[t].target);e.count=0}g.hasChanged=!0,O.hasGraphChanged=!0,f()}}else e.valueExpanded?T.collapseNode(e):T.chooseNodeClick(e)}},T.collapseNode=function(t){if(t.valueExpanded){p.debug("collapseNode ("+t.label+")"),O.notifyListeners(O.Events.GRAPH_NODE_VALUE_COLLAPSE,[t]);var e=m.links.filter(function(e){return e.source===t&&e.type===O.link.LinkTypes.VALUE});e.forEach(function(e){m.nodes.splice(m.nodes.indexOf(e.target),1)});for(var n=m.links.length-1;0<=n;n--)0<=e.indexOf(m.links[n])&&m.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,f()}else p.debug("collapseNode called on an unexpanded node")},T.collapseAllNode=function(){m.nodes.forEach(function(e){e.type!==T.NodeTypes.CHOOSE&&e.type!==T.NodeTypes.ROOT||!e.valueExpanded||T.collapseNode(e)})},T.valueNodeClick=function(e){p.debug("valueNodeClick ("+e.label+")"),O.notifyListeners(O.Events.GRAPH_NODE_ADD_VALUE,[e]),void 0===e.parent.value&&(e.parent.value=[]),e.parent.value.push(e),g.hasChanged=!0,O.hasGraphChanged=!0,T.collapseNode(e.parent)},T.chooseNodeClick=function(a){if(p.debug("chooseNodeClick ("+a.label+") with waiting state set to "+T.chooseWaiting),!T.chooseWaiting&&!a.immutable&&0!==a.count)if(T.collapseAllNode(),T.chooseWaiting=!0,void 0!==a.data&&a.isAutoLoadValue)a.page=1,T.expandNode(a),T.chooseWaiting=!1;else{p.info("Values ("+a.label+") ==>");var e=A.generateNodeValueQuery(a);c.post({statements:[{statement:e.statement,parameters:e.parameters}]}).done(function(e){p.info("<== Values ("+a.label+")");var t=c.response.parse(e),r=b.node.getConstraintAttribute(a.label);a.data=t[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}).fail(function(e,t,n){T.chooseWaiting=!1,p.error(t+': error while accessing Neo4j server on URL:"'+c.CYPHER_URL+'" defined in "rest.CYPHER_URL" property: '+n)})}},T.addExpandedValue=function(e,t){for(var n=!1,r=m.nodes.length-1;0<=r;r--)if(m.nodes[r].valueExpanded){for(var a=m.nodes[r].data.length-1;0<=a;a--)m.nodes[r].data[a][e]===t&&(n=!0,m.nodes[r].hasOwnProperty("value")||(m.nodes[r].value=[]),m.nodes[r].value.push({attributes:m.nodes[r].data[a]}),m.nodes[r].data.splice(a,1));T.collapseNode(m.nodes[r]),T.expandNode(m.nodes[r])}n&&(g.hasChanged=!0,O.hasGraphChanged=!0,f())},T.getContainingValue=function(n){var r=[],e=m.links,t=m.nodes;if(0<t.length){var a=t[0];void 0!==a.value&&0<a.value.length&&(void 0!==n&&n!==a.label||r.push(a)),e.forEach(function(e){var t=e.target;e.type===O.link.LinkTypes.RELATION&&void 0!==t.value&&0<t.value.length&&(void 0!==n&&n!==t.label||r.push(t))})}return r},T.addValueForLabel=function(e,t){for(var n=!1,r=m.nodes.length-1;0<=r;r--)if(m.nodes[r].type===T.NodeTypes.CHOOSE&&m.nodes[r].label===e){m.nodes[r].hasOwnProperty("value")||(m.nodes[r].value=[]);var a=!1,o=b.node.getConstraintAttribute(e);m.nodes[r].value.forEach(function(e){e.attributes.hasOwnProperty(o)&&e.attributes[o]===t.attributes[o]&&(a=!0)}),a||(m.nodes[r].value.push(t),n=!0)}return n},T.addValue=function(e,t){for(var n=!1,r=0;r<m.nodes.length;r++){var a=m.nodes[r];if(0<=e.indexOf(a.id)){a.hasOwnProperty("value")||(a.value=[]);var o=b.node.getReturnAttributes(a.label)[0];a.data.forEach(function(e){e.hasOwnProperty(o)&&e[o]===t&&(n=!0,a.value.push({attributes:e}))})}}n&&(g.hasChanged=!0,O.hasGraphChanged=!0,f())},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),void 0!==e.value&&0<e.value.length&&(t=!(e.value.length=0)),t},T.getValue=function(e,t){for(var n=0;n<m.nodes.length;n++){var r=m.nodes[n];if(r.id===e)for(var a=b.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=m.nodes.length-1;0<=r;r--)if(m.nodes[r].valueExpanded){for(var a=[],o=m.nodes[r].value.length-1;0<=o;o--)m.nodes[r].value[o].attributes[e]===t&&(n=!0,a=a.concat(m.nodes[r].value.splice(o,1)));for(var l=0;l<a.length;l++)m.nodes[r].data.push(a[l].attributes);T.collapseNode(m.nodes[r]),T.expandNode(m.nodes[r])}n&&(g.hasChanged=!0,O.hasGraphChanged=!0,f())},T.getAutoLoadValueNodes=function(){return m.nodes.filter(function(e){return e.hasOwnProperty("isAutoLoadValue")&&!0===e.isAutoLoadValue&&!(!0===e.isNegative)})},T.addRelatedValues=function(u,e,d){var t=T.filterExistingValues(u,e);if(!(t.length<=0)){var o=[];t.forEach(function(e){var t=b.node.getConstraintAttribute(e.label),n="MATCH ";t===A.NEO4J_INTERNAL_ID?n+="(v:"+e.label+") WHERE (ID(v) = $p)":n+="(v:"+e.label+") WHERE (v."+t+" = $p)";var r=b.node.getReturnAttributes(e.label),a="";n+=' RETURN DISTINCT "'+e.rel+'" AS rel, "'+e.label+'" AS label, {'+r.reduce(function(e,t){return e+=a+t+":v."+t,a=", ",e},"")+"} AS value LIMIT 1",o.push({statement:n,parameters:{p:e.id},resultDataContents:["row"]})}),p.info("addRelatedValues ==>"),c.post({statements:o}).done(function(e){p.info("<== addRelatedValues");var i=c.response.parse(e),s=0;i.forEach(function(e){if(0<e.length){var t=e[0].label,n=e[0].value,r=e[0].rel,a={id:m.generateId(),parent:u,attributes:n,type:T.NodeTypes.VALUE,label:t};O.ignoreCount=!0;var o=u.relationships.filter(function(e){return e.label===r&&e.target===t}),l={label:r,target:t};0<o.length&&(l=o[0]),O.addRelationshipData(u,l,function(){++s===i.length&&(O.ignoreCount=!1,O.hasGraphChanged=!0,g.hasChanged=!0,f())},[a],d)}})}).fail(function(e,t,n){console.error(e,t,n)})}},T.addRelatedBranch=function(e,t,n,r){if(0<t.length){var a=t[0];t=t.slice(1);var o=e.relationships.filter(function(e){return e.label===a.type&&e.target===a.target});0<o.length&&O.addRelationshipData(e,o[0],function(e){T.addRelatedBranch(e,t,n,r)})}else T.addRelatedValues(e,n,r)},T.filterExistingValues=function(e,t){var a=[],o=m.nodes.filter(function(e){return e.parent===e&&e.hasOwnProperty("value")&&0<e.value.length});return t.forEach(function(t){var n=!1,r=b.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(o){O.notifyListeners(O.Events.GRAPH_NODE_VALUE_EXPAND,[o]);var e=o.page*T.PAGE_SIZE,t=e-T.PAGE_SIZE,l=o.data.slice(t,e),i=O.computeParentAngle(o),s=1;l.forEach(function(e){var t;t=o.parent?360/(l.length+1)*s:360/l.length*s;var n=o.x+100*Math.cos(t*(Math.PI/180)-i),r=o.y+100*Math.sin(t*(Math.PI/180)-i),a={id:m.generateId(),parent:o,attributes:e,type:T.NodeTypes.VALUE,label:o.label,count:e.count,x:n,y:r,internalID:e[A.NEO4J_INTERNAL_ID.queryInternalName]};m.nodes.push(a),m.links.push({id:"l"+m.generateId(),source:o,target:a,type:O.link.LinkTypes.VALUE}),s++}),o.fixed=!0,o.fx=o.x,o.fy=o.y,o.parent&&o.parent.type!==T.NodeTypes.ROOT&&(o.parent.fixed=!0,o.parent.fx=o.parent.x,o.parent.fy=o.parent.y),o.valueExpanded=!0,f()},T.loadRelationshipData=function(n,r,a){var e=b.node.getSchema(n.label);if(void 0!==e)e.hasOwnProperty("rel")&&0<e.rel.length?r(T.pie.startAngle(a-Math.PI).endAngle(a+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})):r([]);else{var t=A.generateNodeRelationQuery(n);p.info("Relations ("+n.label+") ==>"),c.post({statements:[{statement:t.statement,parameters:t.parameters}]}).done(function(e){p.info("<== Relations ("+n.label+")");var t=c.response.parse(e)[0].filter(function(e){return A.filterRelation(e)});t=T.pie.startAngle(a-Math.PI).endAngle(a+Math.PI)(t).map(function(e){return{id:e.data.label+e.data.target,label:e.data.label,target:e.data.target,count:e.data.count,startAngle:e.startAngle,endAngle:e.endAngle,directionAngle:(e.startAngle+e.endAngle)/2}}),r(t)}).fail(function(e,t,n){p.error(t+': error while accessing Neo4j server on URL:"'+c.CYPHER_URL+'" defined in "rest.CYPHER_URL" property: '+n),r([])})}},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++)O.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;m.links.filter(function(e){return e.source===t}).forEach(function(e){var t=T.removeNode(e.target);n=n||t});for(var e=m.links.length-1;0<=e;e--)m.links[e].target===t&&m.links.splice(e,1);return m.nodes.splice(m.nodes.indexOf(t),1),n},T.removeEmptyBranches=function(t){var n=t.hasOwnProperty("value")&&0<t.value.length;if(m.links.filter(function(e){return e.source===t}).forEach(function(e){var t=!T.removeEmptyBranches(e.target);n=n||t}),!n){for(var e=m.links.length-1;0<=e;e--)m.links[e].target===t&&m.links.splice(e,1);m.nodes.splice(m.nodes.indexOf(t),1)}return!n},T.getTrunkNode=function(e){for(var t=0;t<m.links.length;t++){var n=m.links[t];if(n.target===e&&n.source!==O.getRootNode())return T.getTrunkNode(n.source)}return e},T.clearSelection=function(){i.event.preventDefault();var e=i.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=m.links.length-1;0<=t;t--)m.links[t].source===e&&T.removeNode(m.links[t].target);e.count=0}g.hasChanged=!0,O.hasGraphChanged=!0,f()}};var O={};O.link=s,O.node=T,O.DISABLE_RELATION=!1,O.DISABLE_COUNT=!1,O.containerId="popoto-graph",O.hasGraphChanged=!0,O.zoom=i.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=i.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");var t=O.svgdefs.append("filter").attr("id","gooey");t.append("feGaussianBlur").attr("in","SourceGraphic").attr("stdDeviation","10").attr("color-interpolation-filters","sRGB").attr("result","blur"),t.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"),t.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 m.getRootNode()},O.centerRootNode=function(){m.getRootNode().fx=O.getSVGWidth()/2,m.getRootNode().fy=O.getSVGHeight()/2,f()},O.getSVGWidth=function(){return void 0===O.svg||O.svg.empty()?(p.debug("graph.svg is undefined or empty."),0):document.getElementById(O.containerId).clientWidth},O.getSVGHeight=function(){return void 0===O.svg||O.svg.empty()?(p.debug("graph.svg is undefined or empty."),0):document.getElementById(O.containerId).clientHeight},O.rescale=function(){var e=i.event.transform;isNaN(e.x)||isNaN(e.y)||isNaN(e.k)?O.svg.attr("transform",i.zoomIdentity):O.svg.attr("transform",e)},O.CHARGE=-500,O.createForceLayout=function(){O.force=i.forceSimulation().force("charge",i.forceManyBody().strength(function(e){return e.charge?e.charge:O.CHARGE})).force("link",i.forceLink().id(function(e){return e.id}).distance(b.link.getDistance)),O.force.nodes(m.nodes),O.force.force("link").links(m.links),O.force.on("tick",O.tick)},O.addRootNode=function(t){if(0<m.nodes.length&&p.warn("graph.addRootNode is called but the graph is not empty."),void 0!==b.node.getSchema(t))O.addSchema(b.node.getSchema(t));else{var n={id:m.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===b.node.getIsAutoLoadValue(t)};m.nodes.push(n),O.notifyListeners(O.Events.NODE_ROOT_ADD,[n]),O.node.loadRelationshipData(n,function(e){n.relationships=e,b.node.getIsAutoExpandRelations(t)?(O.ignoreCount=!0,O.node.expandRelationships(n,function(){O.ignoreCount=!1,O.hasGraphChanged=!0,d()})):(O.hasGraphChanged=!0,d())},Math.PI/2)}},O.loadSchema=function(e){0<m.nodes.length&&p.warn("graph.loadSchema is called but the graph is not empty.");var t=e,n={id:m.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===b.node.getIsAutoLoadValue(t.label)};m.nodes.push(n),O.notifyListeners(O.Events.NODE_ROOT_ADD,[n]);var r=b.node.getSchema(e.label);if(void 0!==r&&r.hasOwnProperty("rel")&&0<r.rel.length){var a=Math.PI/2;n.relationships=O.node.pie.startAngle(a-Math.PI).endAngle(a+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})}else O.node.loadRelationshipData(n,function(e){n.relationships=e,O.hasGraphChanged=!0,d()},Math.PI/2);if(t.hasOwnProperty("value")){var o=[].concat(t.value);n.value=[],o.forEach(function(e){n.value.push({id:m.generateId(),parent:n,attributes:e,type:O.node.NodeTypes.VALUE,label:n.label})})}if(t.hasOwnProperty("rel"))for(var l=0;l<t.rel.length;l++)O.loadSchemaRelation(t.rel[l],n,l+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),l={id:"l"+m.generateId(),source:t,target:o,type:O.link.LinkTypes.RELATION,label:e.label,schema:e};m.links.push(l);var i=b.node.getSchema(a.label);if(void 0!==i&&i.hasOwnProperty("rel")&&0<i.rel.length){var s=Math.PI/2;o.relationships=O.node.pie.startAngle(s-Math.PI).endAngle(s+Math.PI)(i.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})}else O.node.loadRelationshipData(o,function(e){o.relationships=e,O.hasGraphChanged=!0,d()},Math.PI/2);if(a.hasOwnProperty("rel"))for(var u=0;u<a.rel.length;u++)O.loadSchemaRelation(a.rel[u],o,u+1,a.rel.length)},O.loadSchemaNode=function(e,t,n,r,a,o){var l,i=b.node.getIsGroup(e),s=O.computeParentAngle(t);l=s?360/(r+1)*n:360/r*n;var u=t.x+200*Math.cos(l*(Math.PI/180)-s),d=t.y+200*Math.sin(l*(Math.PI/180)-s),p={id:m.generateId(),parent:t,parentRel:a,type:i?O.node.NodeTypes.GROUP:O.node.NodeTypes.CHOOSE,label:e.label,fixed:!1,internalLabel:O.node.generateInternalLabel(e.label),x:u,y:d,schema:e,isAutoLoadValue:!0===b.node.getIsAutoLoadValue(e.label),relationships:[]};if(!0===o&&(p.isParentRelReverse=!0),e.hasOwnProperty("isNegative")&&!0===e.isNegative&&(p.isNegative=!0,p.count=0),m.nodes.push(p),e.hasOwnProperty("value")){var c=[].concat(e.value);p.value=[],c.forEach(function(e){p.value.push({id:m.generateId(),parent:p,attributes:e,type:O.node.NodeTypes.VALUE,label:p.label})})}return p},O.addSchema=function(e){0<m.nodes.length&&p.warn("graph.addSchema is called but the graph is not empty.");var t=e,n={id:m.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===b.node.getIsAutoLoadValue(t.label)};if(m.nodes.push(n),O.notifyListeners(O.Events.NODE_ROOT_ADD,[n]),t.hasOwnProperty("rel")&&0<t.rel.length){var r=Math.PI/2;n.relationships=O.node.pie.startAngle(r-Math.PI).endAngle(r+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,o=O.addSchemaNode(a,t,n,r,e.label),l={id:"l"+m.generateId(),source:t,target:o,type:O.link.LinkTypes.RELATION,label:e.label,schema:e};m.links.push(l)},O.addSchemaNode=function(e,t,n,r,a){var o,l=b.node.getIsGroup(e),i=e.hasOwnProperty("collapsed")&&!0===e.collapsed,s=O.computeParentAngle(t);o=s?360/(r+1)*n:360/r*n;var u=t.x+200*Math.cos(o*(Math.PI/180)-s),d=t.y+200*Math.sin(o*(Math.PI/180)-s),p={id:m.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:u,y:d,schema:e,isAutoLoadValue:!0===b.node.getIsAutoLoadValue(e.label),relationships:[]};if(e.hasOwnProperty("rel")&&0<e.rel.length){for(var c={},g=[],f=0;f<e.rel.length;f++){var h=e.rel[f],v=h.label+h.target.label;c.hasOwnProperty(v)||(c[v]=h,g.push(h))}p.relationships=O.node.pie(g).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")){var E=[].concat(e.value);p.value=[],E.forEach(function(e){p.value.push({id:m.generateId(),parent:p,attributes:e,type:O.node.NodeTypes.VALUE,label:p.label})})}if(m.nodes.push(p),!i&&e.hasOwnProperty("rel"))for(var y=0;y<e.rel.length;y++)O.addSchemaRelation(e.rel[y],p,y+1,e.rel.length);return p},O.getSchema=function(){var a={},t=m.getRootNode();a[t.id]={label:t.label},t.hasOwnProperty("value")&&(a[t.id].value=[],t.value.forEach(function(e){a[t.id].value.push(e.attributes)}));var e=m.links;return 0<e.length&&e.forEach(function(e){if(e.type===O.link.LinkTypes.RELATION){var t=e.source,n=e.target;a.hasOwnProperty(t.id)||(a[t.id]={label:t.label},t.hasOwnProperty("isNegative")&&!0===t.isNegative&&(a[t.id].isNegative=!0),t.hasOwnProperty("value")&&(a[t.id].value=[],t.value.forEach(function(e){a[t.id].value.push(e.attributes)}))),a.hasOwnProperty(n.id)||(a[n.id]={label:n.label},n.hasOwnProperty("isNegative")&&!0===n.isNegative&&(a[n.id].isNegative=!0),n.hasOwnProperty("value")&&(a[n.id].value=[],n.value.forEach(function(e){a[n.id].value.push(e.attributes)}))),a[t.id].hasOwnProperty("rel")||(a[t.id].rel=[]);var r={label:e.label,target:a[n.id]};n.hasOwnProperty("isParentRelReverse")&&!0===n.isParentRelReverse&&(r.isReverse=!0),a[t.id].rel.push(r)}}),a[t.id]},O.tick=function(){var e=O.svg.selectAll("#"+O.link.gID+" > g");if(e.selectAll(".ppt-link").attr("d",function(e){var t=e.source,n=e.target,r=O.computeParentAngle(n),a=b.node.getSize(t),o=b.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),s=t.x-a*Math.cos(r),u=t.y+a*Math.sin(r),d=(l+s)/2,p=(i+u)/2;return t.x<=n.x||!0===O.ignoreMirroLinkLabels?"M"+s+" "+u+"L"+d+" "+p+"L"+l+" "+i:"M"+l+" "+i+"L"+d+" "+p+"L"+s+" "+u}).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){var t=i.select("#voronoi-clip-path").selectAll(".voroclip").data(O.recenterVoronoi(m.nodes),function(e){return e.point.id});t.enter().append("clipPath").attr("id",function(e){return"voroclip-"+e.point.id}).attr("class","voroclip"),t.exit().remove(),t.selectAll("path").remove(),t.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=0;if(e.parent){var n=e.parent.x,r=e.parent.y,a=e.x,o=e.y,l=100/(Math.sqrt(Math.pow(n-a,2)+Math.pow(r-o,2))-100),i=((a+l*n)/(1+l)-a)/100;i<-1&&(i=-1),1<i&&(i=1),t=Math.acos(i),o<r&&(t=2*Math.PI-t)}return t},O.addRelationshipData=function(e,t,n,r,a){var o={id:""+m.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);var l={id:"l"+m.generateId(),source:e,target:o,type:O.link.LinkTypes.RELATION,label:t.label};o.x=e.x+2*b.link.getDistance(l)/3*Math.cos(t.directionAngle-Math.PI/2)+10*Math.random(),o.y=e.y+2*b.link.getDistance(l)/3*Math.sin(t.directionAngle-Math.PI/2)+10*Math.random(),o.tx=e.tx+b.link.getDistance(l)*Math.cos(t.directionAngle-Math.PI/2),o.ty=e.ty+b.link.getDistance(l)*Math.sin(t.directionAngle-Math.PI/2),m.nodes.push(o),m.links.push(l),O.hasGraphChanged=!0,d(),O.node.loadRelationshipData(o,function(e){o.relationships=e,O.hasGraphChanged=!0,d(),b.node.getIsAutoExpandRelations(o.label)?O.node.expandRelationships(o,function(){n(o)}):n(o)},t.directionAngle)},O.voronoi=i.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){if(t.length){var 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={};b.colorScale=i.scaleOrdinal(i.schemeCategory10),b.link={},b.link.Provider={},b.taxonomy={},b.taxonomy.Provider={},b.node={},b.node.Provider={},b.link.getTextValue=function(e){return b.link.Provider.hasOwnProperty("getTextValue")?b.link.Provider.getTextValue(e):b.link.DEFAULT_PROVIDER.hasOwnProperty("getTextValue")?b.link.DEFAULT_PROVIDER.getTextValue(e):void p.error("No provider defined for link getTextValue")},b.link.getColor=function(e,t,n){return b.link.Provider.hasOwnProperty("getColor")?b.link.Provider.getColor(e,t,n):b.link.DEFAULT_PROVIDER.hasOwnProperty("getColor")?b.link.DEFAULT_PROVIDER.getColor(e,t,n):void p.error("No provider defined for getColor")},b.link.getCSSClass=function(e,t){return b.link.Provider.hasOwnProperty("getCSSClass")?b.link.Provider.getCSSClass(e,t):b.link.DEFAULT_PROVIDER.hasOwnProperty("getCSSClass")?b.link.DEFAULT_PROVIDER.getCSSClass(e,t):void p.error("No provider defined for getCSSClass")},b.link.getDistance=function(e){return b.link.Provider.hasOwnProperty("getDistance")?b.link.Provider.getDistance(e):b.link.DEFAULT_PROVIDER.hasOwnProperty("getDistance")?b.link.DEFAULT_PROVIDER.getDistance(e):void p.error("No provider defined for getDistance")},b.link.getSemanticValue=function(e){return b.link.Provider.hasOwnProperty("getSemanticValue")?b.link.Provider.getSemanticValue(e):b.link.DEFAULT_PROVIDER.hasOwnProperty("getSemanticValue")?b.link.DEFAULT_PROVIDER.getSemanticValue(e):void p.error("No provider defined for getSemanticValue")},b.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;var n,r,a="#";for(r=0;r<3;r++)n=parseInt(e.substr(2*r,2),16),a+=("00"+(n=Math.round(Math.min(Math.max(0,n+n*t),255)).toString(16))).substr(n.length);return a},b.link.DEFAULT_PROVIDER={getTextValue:function(e){if(e.type===O.link.LinkTypes.VALUE)return b.node.isTextDisplayed(e.target)?"":b.node.getTextValue(e.target);var t="";return e.type===O.link.LinkTypes.SEGMENT&&(t=" "+b.node.getTextValue(e.target)),e.label+t},getDistance:function(e){return e.type===O.link.LinkTypes.VALUE?13/8*(b.node.getSize(e.source)+b.node.getSize(e.target)):2.5*(b.node.getSize(e.source)+b.node.getSize(e.target))},getColor:function(e,t,n){if(e.type===O.link.LinkTypes.VALUE)return"#525863";var r=e.source.label+e.label+e.target.label,a=b.colorScale(r);return"stroke"===n?b.colorLuminance(a,-.2):a},getCSSClass:function(e,t){var n="ppt-link__"+t;if(e.type===O.link.LinkTypes.VALUE)n+="--value";else{var r="ppt-"+e.label.replace(/[^0-9a-z\-_]/gi,"");e.type===O.link.LinkTypes.RELATION&&(n+="--relation",0===e.target.count&&(n+="--disabled"),n=n+" "+r)}return n},getSemanticValue:function(e){return b.link.getTextValue(e)}},b.link.Provider=b.link.DEFAULT_PROVIDER,b.taxonomy.getTextValue=function(e){return b.taxonomy.Provider.hasOwnProperty("getTextValue")?b.taxonomy.Provider.getTextValue(e):b.taxonomy.DEFAULT_PROVIDER.hasOwnProperty("getTextValue")?b.taxonomy.DEFAULT_PROVIDER.getTextValue(e):void p.error("No provider defined for taxonomy getTextValue")},b.taxonomy.getCSSClass=function(e,t){return b.taxonomy.Provider.hasOwnProperty("getCSSClass")?b.taxonomy.Provider.getCSSClass(e,t):b.taxonomy.DEFAULT_PROVIDER.hasOwnProperty("getCSSClass")?b.taxonomy.DEFAULT_PROVIDER.getCSSClass(e,t):void p.error("No provider defined for taxonomy getCSSClass")},b.taxonomy.DEFAULT_PROVIDER={getTextValue:function(e){return e},getCSSClass:function(e,t){return"ppt-taxo__"+t+" "+e.replace(/[^0-9a-z\-_]/gi,"")}},b.taxonomy.Provider=b.taxonomy.DEFAULT_PROVIDER,b.node.DisplayTypes=Object.freeze({TEXT:0,IMAGE:1,SVG:2,SYMBOL:3}),b.node.getProvider=function(e){if(void 0!==e){if(b.node.Provider.hasOwnProperty(e))return b.node.Provider[e];for(var t in p.debug("No direct provider found for label "+e),b.node.Provider)if(b.node.Provider.hasOwnProperty(t)){var n=b.node.Provider[t];if(n.hasOwnProperty("children")&&-1<n.children.indexOf(e)){p.debug("No provider is defined for label ("+e+"), parent ("+t+") will be used");var r={parent:t};for(var a in n)n.hasOwnProperty(a)&&"children"!==a&&"parent"!==a&&(r[a]=n[a]);return b.node.Provider[e]=r,b.node.Provider[e]}}for(var o in p.debug("No label provider defined for label ("+e+") default one will be created from provider.node.DEFAULT_PROVIDER"),b.node.Provider[e]={},b.node.DEFAULT_PROVIDER)b.node.DEFAULT_PROVIDER.hasOwnProperty(o)&&(b.node.Provider[e][o]=b.node.DEFAULT_PROVIDER[o]);return b.node.Provider[e]}p.error("Node label is undefined, no label provider can be found.")},b.node.getProperty=function(e,t){var n=b.node.getProvider(e);if(!n.hasOwnProperty(t)){for(var r=n,a=!1;r.hasOwnProperty("parent")&&!a;)(r=b.node.getProvider(r.parent)).hasOwnProperty(t)&&(n[t]=r[t],a=!0);a||(p.debug('No "'+t+'" property found for node label provider ('+e+"), default value will be used"),b.node.DEFAULT_PROVIDER.hasOwnProperty(t)?n[t]=b.node.DEFAULT_PROVIDER[t]:p.debug('No default value for "'+t+'" property found for label provider ('+e+")"))}return n[t]},b.node.getIsAutoLoadValue=function(e){return b.node.getProperty(e,"isAutoLoadValue")},b.node.getIsSearchable=function(e){return b.node.getProperty(e,"isSearchable")},b.node.getIsAutoExpandRelations=function(e){return b.node.getProperty(e,"autoExpandRelations")},b.node.getSchema=function(e){return b.node.getProperty(e,"schema")},b.node.getReturnAttributes=function(e){var t=b.node.getProvider(e),n={};if(t.hasOwnProperty("returnAttributes"))for(var r=0;r<t.returnAttributes.length;r++)t.returnAttributes[r]===A.NEO4J_INTERNAL_ID?n[A.NEO4J_INTERNAL_ID.queryInternalName]=!0:n[t.returnAttributes[r]]=!0;for(;t.hasOwnProperty("parent");)if((t=b.node.getProvider(t.parent)).hasOwnProperty("returnAttributes"))for(var a=0;a<t.returnAttributes.length;a++)t.returnAttributes[a]===A.NEO4J_INTERNAL_ID?n[A.NEO4J_INTERNAL_ID.queryInternalName]=!0:n[t.returnAttributes[a]]=!0;if(b.node.DEFAULT_PROVIDER.hasOwnProperty("returnAttributes"))for(var o=0;o<b.node.DEFAULT_PROVIDER.returnAttributes.length;o++)b.node.DEFAULT_PROVIDER.returnAttributes[o]!==A.NEO4J_INTERNAL_ID&&(n[b.node.DEFAULT_PROVIDER.returnAttributes[o]]=!0);var l=b.node.getConstraintAttribute(e);l===A.NEO4J_INTERNAL_ID?n[A.NEO4J_INTERNAL_ID.queryInternalName]=!0:n[l]=!0;var i=[];for(var s in n)n.hasOwnProperty(s)&&(s===A.NEO4J_INTERNAL_ID.queryInternalName?i.push(A.NEO4J_INTERNAL_ID):i.push(s));return i.length<=0&&i.push(A.NEO4J_INTERNAL_ID),i},b.node.getConstraintAttribute=function(e){return b.node.getProperty(e,"constraintAttribute")},b.node.getDisplayAttribute=function(e){var t=b.node.getProperty(e,"displayAttribute");if(void 0===t){var n=b.node.getReturnAttributes(e);t=0<n.length?n[0]:b.node.getConstraintAttribute(e)}return t},b.node.getPredefinedConstraints=function(e){return b.node.getProperty(e,"getPredefinedConstraints")()},b.node.filterResultQuery=function(e,t){return b.node.getProperty(e,"filterResultQuery")(t)},b.node.getValueOrderByAttribute=function(e){return b.node.getProperty(e,"valueOrderByAttribute")},b.node.isValueOrderAscending=function(e){return b.node.getProperty(e,"isValueOrderAscending")},b.node.getResultOrderByAttribute=function(e){return b.node.getProperty(e,"resultOrderByAttribute")},b.node.isResultOrderAscending=function(e){return b.node.getProperty(e,"isResultOrderAscending")},b.node.getTextValue=function(e,t){return b.node.getProperty(e.label,"getTextValue")(e,t)},b.node.getSemanticValue=function(e){return b.node.getProperty(e.label,"getSemanticValue")(e)},b.node.getSVGPaths=function(e){return b.node.getProperty(e.label,"getSVGPaths")(e)},b.node.isTextDisplayed=function(e){return b.node.getProperty(e.label,"getIsTextDisplayed")(e)},b.node.getSize=function(e){return b.node.getProperty(e.label,"getSize")(e)},b.node.getColor=function(e,t){return b.node.getProperty(e.label,"getColor")(e,t)},b.node.getCSSClass=function(e,t){return b.node.getProperty(e.label,"getCSSClass")(e,t)},b.node.getIsGroup=function(e){return b.node.getProperty(e.label,"getIsGroup")(e)},b.node.getNodeDisplayType=function(e){return b.node.getProperty(e.label,"getDisplayType")(e)},b.node.getImagePath=function(e){return b.node.getProperty(e.label,"getImagePath")(e)},b.node.getImageWidth=function(e){return b.node.getProperty(e.label,"getImageWidth")(e)},b.node.getImageHeight=function(e){return b.node.getProperty(e.label,"getImageHeight")(e)},b.node.filterNodeValueQuery=function(e,t){return b.node.getProperty(e.label,"filterNodeValueQuery")(e,t)},b.node.filterNodeCountQuery=function(e,t){return b.node.getProperty(e.label,"filterNodeCountQuery")(e,t)},b.node.filterNodeRelationQuery=function(e,t){return b.node.getProperty(e.label,"filterNodeRelationQuery")(e,t)},b.node.getGenerateNodeValueConstraints=function(e){return b.node.getProperty(e.label,"generateNodeValueConstraints")},b.node.getGenerateNegativeNodeValueConstraints=function(e){return b.node.getProperty(e.label,"generateNegativeNodeValueConstraints")},b.node.getDisplayResults=function(e){return b.node.getProperty(e,"displayResults")},b.node.DEFAULT_PROVIDER={isSearchable:!0,autoExpandRelations:!1,isAutoLoadValue:!1,returnAttributes:[A.NEO4J_INTERNAL_ID],valueOrderByAttribute:"count",isValueOrderAscending:!1,resultOrderByAttribute:null,isResultOrderAscending:!0,constraintAttribute:A.NEO4J_INTERNAL_ID,displayAttribute:void 0,getPredefinedConstraints:function(){return[]},filterResultQuery:function(e){return e},getDisplayType:function(e){return b.node.DisplayTypes.TEXT},getSize:function(e){return 50},getColor:function(e){if(e.type===O.node.NodeTypes.VALUE)return b.node.getColor(e.parent);var t="";e.hasOwnProperty("parent")&&(t=e.parent.label);var n=t+(e.parentRel||"")+e.label;return b.colorScale(n)},getCSSClass:function(e,t){var n=e.label.replace(/[^0-9a-z\-_]/gi,""),r="ppt-node__"+t;return e.type===O.node.NodeTypes.ROOT&&(r+="--root"),e.type===O.node.NodeTypes.CHOOSE&&(r+="--choose"),e.type===O.node.NodeTypes.GROUP&&(r+="--group"),e.type===O.node.NodeTypes.VALUE&&(r+="--value"),void 0!==e.value&&0<e.value.length&&(r+="--value-selected"),0===e.count&&(r+="--disabled"),r+" "+n},getIsGroup:function(e){return!1},getIsTextDisplayed:function(e){return!0},getTextValue:function(e,t){var n="",r=b.node.getDisplayAttribute(e.label);if(e.type===O.node.NodeTypes.VALUE)n=r===A.NEO4J_INTERNAL_ID?""+e.internalID:""+e.attributes[r];else if(void 0!==e.value&&0<e.value.length)if(r===A.NEO4J_INTERNAL_ID){var a="";e.value.forEach(function(e){n+=a+e.internalID,a=" or "})}else{a="";e.value.forEach(function(e){n+=a+e.attributes[r],a=" or "})}else n=e.label;return n},getSemanticValue:function(e){var t="",n=b.node.getDisplayAttribute(e.label);if(e.type===O.node.NodeTypes.VALUE)t=n===A.NEO4J_INTERNAL_ID?""+e.internalID:""+e.attributes[n];else if(void 0!==e.value&&0<e.value.length)if(n===A.NEO4J_INTERNAL_ID){var r="";e.value.forEach(function(e){t+=r+e.internalID,r=" or "})}else{r="";e.value.forEach(function(e){t+=r+e.attributes[n],r=" or "})}else t=e.label;return t},getImagePath:function(e){return"image/node/"+e.label.toLowerCase()+"/"+e.label.toLowerCase()+".svg"},getSVGPaths:function(e){var t=b.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:b.node.getColor(e),"stroke-width":"2px"}]},getImageWidth:function(e){return 2*b.node.getSize(e)},getImageHeight:function(e){return 2*b.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];b.node.getReturnAttributes(a.label).forEach(function(e){var t=r.append("div").attr("class","ppt-result-attribute-div"),n=e;A.NEO4J_INTERNAL_ID===e&&(n=A.NEO4J_INTERNAL_ID.queryInternalName),t.append("span").text(function(){return e===A.NEO4J_INTERNAL_ID?"internal ID:":e+":"}),void 0!==a.attributes[n]&&t.append("span").text(function(e){return e.attributes[n]})})}};var L={containerId:"popoto-query",QUERY_STARTER:"I'm looking for",CHOOSE_LABEL:"choose",createQueryArea:function(){var e="#"+L.containerId;L.queryConstraintSpanElements=i.select(e).append("p").attr("class","ppt-query-constraint-elements").selectAll(".queryConstraintSpan"),L.querySpanElements=i.select(e).append("p").attr("class","ppt-query-elements").selectAll(".querySpan")},updateQuery:function(){L.queryConstraintSpanElements=L.queryConstraintSpanElements.data([]),L.querySpanElements=L.querySpanElements.data([]),L.queryConstraintSpanElements.exit().remove(),L.querySpanElements.exit().remove(),L.queryConstraintSpanElements=L.queryConstraintSpanElements.data(L.generateConstraintData(m.links,m.nodes)),L.querySpanElements=L.querySpanElements.data(L.generateData(m.links,m.nodes)),L.queryConstraintSpanElements=L.queryConstraintSpanElements.enter().append("span").on("contextmenu",L.rightClickSpan).on("click",L.clickSpan).on("mouseover",L.mouseOverSpan).on("mouseout",L.mouseOutSpan).merge(L.queryConstraintSpanElements),L.querySpanElements=L.querySpanElements.enter().append("span").on("contextmenu",L.rightClickSpan).on("click",L.clickSpan).on("mouseover",L.mouseOverSpan).on("mouseout",L.mouseOutSpan).merge(L.querySpanElements),L.queryConstraintSpanElements.attr("id",function(e){return e.id}).attr("class",function(e){return e.isLink?"ppt-span-link":e.type===O.node.NodeTypes.ROOT?"ppt-span-root":e.type===O.node.NodeTypes.CHOOSE?void 0!==e.ref.value&&0<e.ref.value.length?"ppt-span-value":"ppt-span-choose":e.type===O.node.NodeTypes.VALUE?"ppt-span-value":e.type===O.node.NodeTypes.GROUP?"ppt-span-group":"ppt-span"}).text(function(e){return e.term+" "}),L.querySpanElements.attr("id",function(e){return e.id}).attr("class",function(e){return e.isLink?"ppt-span-link":e.type===O.node.NodeTypes.ROOT?"ppt-span-root":e.type===O.node.NodeTypes.CHOOSE?void 0!==e.ref.value&&0<e.ref.value.length?"ppt-span-value":"ppt-span-choose":e.type===O.node.NodeTypes.VALUE?"ppt-span-value":e.type===O.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:L.QUERY_STARTER}),0<t.length&&r.push({id:a++,type:t[0].type,term:b.node.getSemanticValue(t[0]),ref:t[0]}),e.forEach(function(e){var t=e.source,n=e.target;e.type===O.link.LinkTypes.RELATION&&n.type!==O.node.NodeTypes.GROUP&&void 0!==n.value&&0<n.value.length&&(t.type===O.node.NodeTypes.GROUP&&r.push({id:a++,type:t.type,term:b.node.getSemanticValue(t),ref:t}),r.push({id:a++,isLink:!0,term:b.link.getSemanticValue(e),ref:e}),n.type!==O.node.NodeTypes.GROUP&&(void 0!==n.value&&0<n.value.length?r.push({id:a++,type:n.type,term:b.node.getSemanticValue(n),ref:n}):r.push({id:a++,type:n.type,term:"<"+L.CHOOSE_LABEL+" "+b.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===O.node.NodeTypes.GROUP&&a.push({id:o++,type:n.type,term:b.node.getSemanticValue(n),ref:n}),e.type!==O.link.LinkTypes.RELATION||n.type===O.node.NodeTypes.GROUP||void 0!==n.value&&0!==n.value.length||(t.type===O.node.NodeTypes.GROUP&&r.push({id:o++,type:t.type,term:b.node.getSemanticValue(t),ref:t}),r.push({id:o++,isLink:!0,term:b.link.getSemanticValue(e),ref:e}),n.type!==O.node.NodeTypes.GROUP&&r.push({id:o++,type:n.type,term:"<"+L.CHOOSE_LABEL+" "+b.node.getSemanticValue(n)+">",ref:n}))}),r.concat(a)},mouseOverSpan:function(){i.select(this).classed("hover",function(e){return e.ref});var t=i.select(this).data()[0];if(t.ref){var e=O.svg.selectAll("#"+O.link.gID+" > g").filter(function(e){return e===t.ref});e.select("path").classed("ppt-link-hover",!0),e.select("text").classed("ppt-link-hover",!0),O.svg.selectAll("#"+O.node.gID+" > g").filter(function(e){return e===t.ref}).select(".ppt-g-node-background").selectAll("circle").transition().style("fill-opacity",.5),S.isActive&&S.querySpanElements.filter(function(e){return e.node===t.ref||e.link===t.ref}).classed("hover",!0)}},rightClickSpan:function(){var t=i.select(this).data()[0];if(!t.isLink&&t.ref){var e=O.svg.selectAll("#"+O.node.gID+" > g").filter(function(e){return e===t.ref});e.on("contextmenu").call(e.node(),t.ref)}},clickSpan:function(){var t=i.select(this).data()[0];if(!t.isLink&&t.ref){var e=O.svg.selectAll("#"+O.node.gID+" > g").filter(function(e){return e===t.ref});e.on("click").call(e.node(),t.ref)}},mouseOutSpan:function(){i.select(this).classed("hover",!1);var t=i.select(this).data()[0];if(t.ref){var e=O.svg.selectAll("#"+O.link.gID+" > g").filter(function(e){return e===t.ref});e.select("path").classed("ppt-link-hover",!1),e.select("text").classed("ppt-link-hover",!1),O.svg.selectAll("#"+O.node.gID+" > g").filter(function(e){return e===t.ref}).select(".ppt-g-node-background").selectAll("circle").transition().style("fill-opacity",0),S.isActive&&S.querySpanElements.filter(function(e){return e.node===t.ref||e.link===t.ref}).classed("hover",!1)}}},S={containerId:"popoto-cypher",MATCH:"MATCH",RETURN:"RETURN",WHERE:"WHERE"};S.QueryElementTypes=Object.freeze({KEYWORD:0,NODE:1,SEPARATOR:2,SOURCE:3,LINK:4,TARGET:5,RETURN:6,WHERE:7}),S.createQueryArea=function(){var e="#"+S.containerId;S.querySpanElements=i.select(e).append("p").attr("class","ppt-query-constraint-elements").selectAll(".queryConstraintSpan")},S.updateQuery=function(){S.querySpanElements=S.querySpanElements.data([]),S.querySpanElements.exit().remove(),S.querySpanElements=S.querySpanElements.data(S.generateData(m.links,m.nodes)),S.querySpanElements=S.querySpanElements.enter().append("span").attr("id",function(e){return"cypher-"+e.id}).on("mouseover",S.mouseOverSpan).on("mouseout",S.mouseOutSpan).on("contextmenu",S.rightClickSpan).on("click",S.clickSpan).merge(S.querySpanElements),S.querySpanElements.filter(function(e){return e.type===S.QueryElementTypes.KEYWORD}).attr("class","ppt-span").text(function(e){return" "+e.value+" "}),S.querySpanElements.filter(function(e){return e.type===S.QueryElementTypes.SEPARATOR}).attr("class","ppt-span").text(function(e){return e.value+" "}),S.querySpanElements.filter(function(e){return e.type===S.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+")"}),S.querySpanElements.filter(function(e){return e.type===S.QueryElementTypes.SOURCE}).attr("class",function(e){return e.node===m.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){var t=e.node;return"("+t.internalLabel+":"+t.label+")"}),S.querySpanElements.filter(function(e){return e.type===S.QueryElementTypes.LINK}).attr("class","ppt-span-link").text(function(e){return!0===e.link.target.isParentRelReverse?"<-[:"+e.link.label+"]-":"-[:"+e.link.label+"]-"+(A.USE_RELATION_DIRECTION?">":"")}),S.querySpanElements.filter(function(e){return e.type===S.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+")"}),S.querySpanElements.filter(function(e){return e.type===S.QueryElementTypes.WHERE}).attr("class",function(e){return e.node===m.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=b.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=b.node.getConstraintAttribute(e.label),o="",l="";return a===A.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){if(o+=l,l=", ",a===A.NEO4J_INTERNAL_ID)o+=e.internalID;else{var t=e.attributes[a];o+="boolean"==typeof t||"number"==typeof t?t:'"'+t+'"'}}),1<e.value.length&&(o+="]"),"("+o+")"}),S.querySpanElements.filter(function(e){return e.type===S.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})},S.generateData=function(e){var t=[],n=0,r=m.getRootNode(),a=A.getRelevantLinks(r,r,e),o=a.filter(function(e){return!0===e.target.isNegative&&(!e.target.hasOwnProperty("value")||e.target.value.length<=0)});t.push({id:n++,type:S.QueryElementTypes.KEYWORD,value:S.MATCH}),r&&t.push({id:n++,type:S.QueryElementTypes.NODE,node:r}),0<a.length&&a.length>o.length&&t.push({id:n++,type:S.QueryElementTypes.SEPARATOR,value:","});for(var l=0;l<a.length;l++){!0===(s=a[l]).target.isNegative&&(!s.target.hasOwnProperty("value")||s.target.value.length<=0)||(t.push({id:n++,type:S.QueryElementTypes.SOURCE,node:s.source}),t.push({id:n++,type:S.QueryElementTypes.LINK,link:s}),t.push({id:n++,type:S.QueryElementTypes.TARGET,node:s.target}),l<a.length-1&&t.push({id:n++,type:S.QueryElementTypes.SEPARATOR,value:","}))}(r&&void 0!==r.value&&0<r.value.length||0<a.length)&&t.push({id:n++,type:S.QueryElementTypes.KEYWORD,value:S.WHERE}),r&&void 0!==r.value&&0<r.value.length&&(t.push({id:n++,type:S.QueryElementTypes.WHERE,node:r}),0<a.length&&t.push({id:n++,type:S.QueryElementTypes.SEPARATOR,value:" AND "}));var i=!1;for(l=0;l<a.length;l++){var s;!0===(s=a[l]).target.isNegative?(i&&t.push({id:n++,type:S.QueryElementTypes.SEPARATOR,value:" AND "}),t.push({id:n++,type:S.QueryElementTypes.WHERE,node:s.target,link:s}),i=!0):void 0!==s.target.value&&0<s.target.value.length&&(i&&t.push({id:n++,type:S.QueryElementTypes.SEPARATOR,value:" AND "}),t.push({id:n++,type:S.QueryElementTypes.WHERE,node:s.target}),i=!0)}return t.push({id:n++,type:S.QueryElementTypes.KEYWORD,value:S.RETURN}),r&&t.push({id:n++,type:S.QueryElementTypes.RETURN,node:r}),t},S.mouseOverSpan=function(){var t=i.select(this).data()[0];if(t.node)S.querySpanElements.filter(function(e){return e.node===t.node}).classed("hover",!0),O.svg.selectAll("#"+O.node.gID+" > g").filter(function(e){return e===t.node}).select(".ppt-g-node-background").selectAll("circle").transition().style("fill-opacity",.5),L.isActive&&(L.queryConstraintSpanElements.filter(function(e){return e.ref===t.node}).classed("hover",!0),L.querySpanElements.filter(function(e){return e.ref===t.node}).classed("hover",!0));else if(t.link){i.select(this).classed("hover",!0);var e=O.svg.selectAll("#"+O.link.gID+" > g").filter(function(e){return e===t.link});e.select("path").classed("ppt-link-hover",!0),e.select("text").classed("ppt-link-hover",!0)}},S.mouseOutSpan=function(){var t=i.select(this).data()[0];if(t.node)S.querySpanElements.filter(function(e){return e.node===t.node}).classed("hover",!1),O.svg.selectAll("#"+O.node.gID+" > g").filter(function(e){return e===t.node}).select(".ppt-g-node-background").selectAll("circle").transition().style("fill-opacity",0),L.isActive&&(L.queryConstraintSpanElements.filter(function(e){return e.ref===t.node}).classed("hover",!1),L.querySpanElements.filter(function(e){return e.ref===t.node}).classed("hover",!1));else if(t.link){i.select(this).classed("hover",!1);var e=O.svg.selectAll("#"+O.link.gID+" > g").filter(function(e){return e===t.link});e.select("path").classed("ppt-link-hover",!1),e.select("text").classed("ppt-link-hover",!1)}},S.clickSpan=function(){var t=i.select(this).data()[0];if(t.node){var e=O.svg.selectAll("#"+O.node.gID+" > g").filter(function(e){return e===t.node});e.on("click").call(e.node(),t.node)}},S.rightClickSpan=function(){var t=i.select(this).data()[0];if(t.node){var e=O.svg.selectAll("#"+O.node.gID+" > g").filter(function(e){return e===t.node});e.on("contextmenu").call(e.node(),t.node)}},e.appendFittedText=y,e.cypherviewer=S,e.dataModel=m,e.graph=O,e.logger=p,e.provider=b,e.query=A,e.queryviewer=L,e.rest=c,e.result=g,e.start=function(e){if(p.info("Popoto "+n+" start on "+e),O.mainLabel=e,void 0===c.CYPHER_URL)p.error("popoto.rest.CYPHER_URL is not set but is required.");else{if(function(){var e=i.select("#"+O.containerId),t=i.select("#"+l.containerId),n=i.select("#"+L.containerId),r=i.select("#"+S.containerId),a=i.select("#"+g.containerId);e.empty()?(p.debug("The page doesn't contain a container with ID = ""+O.containerId+'" no graph area will be generated. This ID is defined in graph.containerId property.'),O.isActive=!1):O.isActive=!0,t.empty()?(p.debug("The page doesn't contain a container with ID = ""+l.containerId+'" no taxonomy filter will be generated. This ID is defined in taxonomy.containerId property.'),l.isActive=!1):l.isActive=!0,n.empty()?(p.debug("The page doesn't contain a container with ID = ""+L.containerId+'" no query viewer will be generated. This ID is defined in queryviewer.containerId property.'),L.isActive=!1):L.isActive=!0,r.empty()?(p.debug("The page doesn't contain a container with ID = ""+S.containerId+'" no cypher query viewer will be generated. This ID is defined in cypherviewer.containerId property.'),S.isActive=!1):S.isActive=!0,a.empty()?(p.debug("The page doesn't contain a container with ID = ""+g.containerId+'" no result area will be generated. This ID is defined in result.containerId property.'),g.isActive=!1):g.isActive=!0}(),l.isActive&&l.createTaxonomyPanel(),O.isActive)if(O.createGraphArea(),O.createForceLayout(),"string"==typeof e||e instanceof String){var t=b.node.getSchema(e);void 0!==t?O.addSchema(t):O.addRootNode(e)}else O.loadSchema(e);L.isActive&&L.createQueryArea(),S.isActive&&S.createQueryArea(),!0===O.USE_VORONOI_LAYOUT&&O.voronoi.extent([[-popoto.graph.getSVGWidth(),-popoto.graph.getSVGWidth()],[2popoto.graph.getSVGWidth(),2popoto.graph.getSVGHeight()]]),f()}},e.taxonomy=l,e.tools=r,e.update=f,e.updateGraph=d,e.version=n,Object.defineProperty(e,"__esModule",{value:!0})});

`

How many nodes max?

Hi,

I would like to know if there is a limit of max number of nodes/relationships to render using popotojs.

My project can achive 3 million nodes and 10 milions relationships.
Of course, this total number of nodes and relationships will "never" be displayed at the same time.
My idea is that the user will click on a node to open another derived node....

Is there a render limit?

My System:

  • Neo4j 4.4
  • Linux Server
  • Browser: Google Chrome 97 x64

Node ID is being displayed and not label name

when using popotojs.zip, it is showing node label names on the node but when using css-customization example it is showing node id's with the same data. what is the diff between both the examples.

support text root query

current input of root node must be in the html like:
......
value: [{uid: "[email protected]"}]
is there possible to take a text field from input form and used it as value dynamically?

customize node label

To provide some context, when Popoto.js generates a query for a node with a specific label, it includes the label as part of the node identifier, which can lead to queries that are not accepted by the Neo4j database. For example, the generated query looks like this:

MATCH (node::test:`Node::test`) RETURN node::test

As mentioned, this query format is not compatible with the Neo4j database. I am wondering if there is a solution or workaround to customize the query and achieve the desired result. Specifically, I would like to generate a query in the following format:

MATCH (n:`Node::test`) RETURN n

or escape variables and labels that contain special characters:

MATCH (`node::test`:`Node::test`) RETURN `node::test`

PS: i can't remove the '::' from nodes This modified query format would allow me to work with the Neo4j database seamlessly.

I would greatly appreciate any guidance or insights you can provide regarding this issue. Thank you in advance for your assistance.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.